From 79bfef9aab180266c1e72df9e310c3a395757fd4 Mon Sep 17 00:00:00 2001 From: Vivek Prakash Date: Wed, 17 Aug 2011 19:48:49 +0000 Subject: [PATCH] import NetBSD bzip2 and libbz2 --- commands/Makefile | 2 +- commands/bzip2/Makefile | 14 - commands/bzip2/Makefile-libbz2_so | 44 - commands/bzip2/Y2K_INFO | 34 - commands/bzip2/bzip2.1 | 466 - commands/bzip2/bzip2.1.preformatted | 399 - commands/bzip2/bzip2.txt | 391 - commands/bzip2/mk251.c | 16 - commands/bzip2/words0 | 5 - commands/bzip2recover/Makefile | 11 - commands/tar/Makefile | 2 + commands/tar/bsdtar.c | 4 + {commands => dist}/bzip2/CHANGES | 46 +- {commands => dist}/bzip2/LICENSE | 10 +- .../Makefile.orig => dist/bzip2/Makefile | 115 +- dist/bzip2/Makefile-libbz2_so | 59 + {commands => dist}/bzip2/README | 105 +- .../bzip2/README.COMPILATION.PROBLEMS | 37 +- {commands => dist}/bzip2/README.XML.STUFF | 22 +- {commands => dist}/bzip2/blocksort.c | 77 +- {commands => dist}/bzip2/bz-common.xsl | 0 {commands => dist}/bzip2/bz-fo.xsl | 19 + {commands => dist}/bzip2/bz-html.xsl | 0 {commands => dist}/bzip2/bzdiff | 4 +- {commands => dist}/bzip2/bzdiff.1 | 0 {commands => dist}/bzip2/bzgrep | 6 +- {commands => dist}/bzip2/bzgrep.1 | 0 {commands => dist}/bzip2/bzip.css | 0 dist/bzip2/bzip2 | Bin 0 -> 362104 bytes dist/bzip2/bzip2.1 | 510 + {commands => dist}/bzip2/bzip2.c | 208 +- dist/bzip2/bzip2netbsd | 123 + dist/bzip2/bzip2recover | Bin 0 -> 208802 bytes {commands => dist}/bzip2/bzip2recover.c | 129 +- {commands => dist}/bzip2/bzlib.c | 102 +- {commands => dist}/bzip2/bzlib.h | 69 +- {commands => dist}/bzip2/bzlib_private.h | 98 +- {commands => dist}/bzip2/bzmore | 0 {commands => dist}/bzip2/bzmore.1 | 0 {commands => dist}/bzip2/compress.c | 86 +- {commands => dist}/bzip2/crctable.c | 60 +- {commands => dist}/bzip2/decompress.c | 73 +- {commands => dist}/bzip2/dlltest.c | 5 +- {commands => dist}/bzip2/dlltest.dsp | 0 {commands => dist}/bzip2/entities.xml | 6 +- {commands => dist}/bzip2/format.pl | 15 + {commands => dist}/bzip2/huffman.c | 66 +- {commands => dist}/bzip2/libbz2.def | 0 {commands => dist}/bzip2/libbz2.dsp | 0 {commands => dist}/bzip2/makefile.msc | 0 dist/bzip2/manual.html | 2540 ++ dist/bzip2/manual.xml | 2964 ++ dist/bzip2/mk251.c | 31 + {commands => dist}/bzip2/randtable.c | 60 +- {commands => dist}/bzip2/sample1.bz2 | Bin dist/bzip2/sample1.rb2 | Bin 0 -> 32348 bytes {commands => dist}/bzip2/sample1.ref | Bin dist/bzip2/sample1.tst | Bin 0 -> 98696 bytes {commands => dist}/bzip2/sample2.bz2 | Bin dist/bzip2/sample2.rb2 | Bin 0 -> 73732 bytes {commands => dist}/bzip2/sample2.ref | Bin dist/bzip2/sample2.tst | Bin 0 -> 212340 bytes {commands => dist}/bzip2/sample3.bz2 | Bin dist/bzip2/sample3.rb2 | Bin 0 -> 235 bytes {commands => dist}/bzip2/sample3.ref | 0 dist/bzip2/sample3.tst | 30007 ++++++++++++++++ {commands => dist}/bzip2/spewG.c | 15 + {commands => dist}/bzip2/unzcrash.c | 17 +- dist/bzip2/words0 | 9 + {commands => dist}/bzip2/words1 | 0 {commands => dist}/bzip2/words2 | 2 +- {commands => dist}/bzip2/words3 | 13 +- {commands => dist}/bzip2/xmlproc.sh | 19 +- etc/mtree/minix.tree | 2 + lib/Makefile | 4 +- lib/libbz2/Makefile | 40 +- lib/libbz2/shlib_version | 5 + share/mk/Makefile | 2 +- share/mk/bsd.info.mk | 92 + tools/nbsd_ports | 4 + usr.bin/Makefile | 2 +- usr.bin/bzip2/Makefile | 39 + usr.bin/bzip2recover/Makefile | 25 + 83 files changed, 37070 insertions(+), 2260 deletions(-) delete mode 100644 commands/bzip2/Makefile delete mode 100644 commands/bzip2/Makefile-libbz2_so delete mode 100644 commands/bzip2/Y2K_INFO delete mode 100644 commands/bzip2/bzip2.1 delete mode 100644 commands/bzip2/bzip2.1.preformatted delete mode 100644 commands/bzip2/bzip2.txt delete mode 100644 commands/bzip2/mk251.c delete mode 100644 commands/bzip2/words0 delete mode 100644 commands/bzip2recover/Makefile rename {commands => dist}/bzip2/CHANGES (88%) rename {commands => dist}/bzip2/LICENSE (84%) rename commands/bzip2/Makefile.orig => dist/bzip2/Makefile (62%) create mode 100644 dist/bzip2/Makefile-libbz2_so rename {commands => dist}/bzip2/README (67%) rename {commands => dist}/bzip2/README.COMPILATION.PROBLEMS (53%) rename {commands => dist}/bzip2/README.XML.STUFF (52%) rename {commands => dist}/bzip2/blocksort.c (92%) rename {commands => dist}/bzip2/bz-common.xsl (100%) rename {commands => dist}/bzip2/bz-fo.xsl (92%) rename {commands => dist}/bzip2/bz-html.xsl (100%) rename {commands => dist}/bzip2/bzdiff (95%) rename {commands => dist}/bzip2/bzdiff.1 (100%) rename {commands => dist}/bzip2/bzgrep (90%) rename {commands => dist}/bzip2/bzgrep.1 (100%) rename {commands => dist}/bzip2/bzip.css (100%) create mode 100755 dist/bzip2/bzip2 create mode 100644 dist/bzip2/bzip2.1 rename {commands => dist}/bzip2/bzip2.c (90%) create mode 100755 dist/bzip2/bzip2netbsd create mode 100755 dist/bzip2/bzip2recover rename {commands => dist}/bzip2/bzip2recover.c (84%) rename {commands => dist}/bzip2/bzlib.c (94%) rename {commands => dist}/bzip2/bzlib.h (71%) rename {commands => dist}/bzip2/bzlib_private.h (82%) rename {commands => dist}/bzip2/bzmore (100%) rename {commands => dist}/bzip2/bzmore.1 (100%) rename {commands => dist}/bzip2/compress.c (89%) rename {commands => dist}/bzip2/crctable.c (66%) rename {commands => dist}/bzip2/decompress.c (90%) rename {commands => dist}/bzip2/dlltest.c (92%) rename {commands => dist}/bzip2/dlltest.dsp (100%) rename {commands => dist}/bzip2/entities.xml (58%) rename {commands => dist}/bzip2/format.pl (68%) rename {commands => dist}/bzip2/huffman.c (75%) rename {commands => dist}/bzip2/libbz2.def (100%) rename {commands => dist}/bzip2/libbz2.dsp (100%) rename {commands => dist}/bzip2/makefile.msc (100%) create mode 100644 dist/bzip2/manual.html create mode 100644 dist/bzip2/manual.xml create mode 100644 dist/bzip2/mk251.c rename {commands => dist}/bzip2/randtable.c (60%) rename {commands => dist}/bzip2/sample1.bz2 (100%) create mode 100644 dist/bzip2/sample1.rb2 rename {commands => dist}/bzip2/sample1.ref (100%) create mode 100644 dist/bzip2/sample1.tst rename {commands => dist}/bzip2/sample2.bz2 (100%) create mode 100644 dist/bzip2/sample2.rb2 rename {commands => dist}/bzip2/sample2.ref (100%) create mode 100644 dist/bzip2/sample2.tst rename {commands => dist}/bzip2/sample3.bz2 (100%) create mode 100644 dist/bzip2/sample3.rb2 rename {commands => dist}/bzip2/sample3.ref (100%) create mode 100644 dist/bzip2/sample3.tst rename {commands => dist}/bzip2/spewG.c (68%) rename {commands => dist}/bzip2/unzcrash.c (83%) create mode 100644 dist/bzip2/words0 rename {commands => dist}/bzip2/words1 (100%) rename {commands => dist}/bzip2/words2 (69%) rename {commands => dist}/bzip2/words3 (80%) rename {commands => dist}/bzip2/xmlproc.sh (79%) create mode 100644 lib/libbz2/shlib_version create mode 100644 share/mk/bsd.info.mk create mode 100644 usr.bin/bzip2/Makefile create mode 100644 usr.bin/bzip2recover/Makefile diff --git a/commands/Makefile b/commands/Makefile index 32f0e93c9..234d57169 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -4,7 +4,7 @@ SUBDIR= aal add_route arp ash at autil awk \ backup badblocks banner basename binpackage \ - binpackages bzip2 bzip2recover cal calendar \ + binpackages cal calendar \ cat cawf cd cdprobe checkhier chmem \ chmod chown chroot ci cksum cleantmp clear cmp co \ comm compress cp crc cron crontab cut date \ diff --git a/commands/bzip2/Makefile b/commands/bzip2/Makefile deleted file mode 100644 index fcf778474..000000000 --- a/commands/bzip2/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -.include - -PROG= bzip2 -DPADD+= ${LIBBZ2} -LDADD+= -lbz2 - -MLINKS+= bzip2.1 bunzip2.1\ - bzip2.1 bzcat.1\ - bzip2.1 bzip2recover.1 - -LINKS+= ${BINDIR}/bzip2 ${BINDIR}/bunzip2 -LINKS+= ${BINDIR}/bzip2 ${BINDIR}/bzcat - -.include diff --git a/commands/bzip2/Makefile-libbz2_so b/commands/bzip2/Makefile-libbz2_so deleted file mode 100644 index 458c5a135..000000000 --- a/commands/bzip2/Makefile-libbz2_so +++ /dev/null @@ -1,44 +0,0 @@ - -# This Makefile builds a shared version of the library, -# libbz2.so.1.0.3, with soname libbz2.so.1.0, -# at least on x86-Linux (RedHat 7.2), -# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). -# Please see the README file for some -# important info about building the library like this. - -SHELL=/bin/sh -CC=gcc -BIGFILES=-D_FILE_OFFSET_BITS=64 -CFLAGS=-fpic -fPIC -Wall -Winline -O -g - -OBJS= blocksort.o \ - huffman.o \ - crctable.o \ - randtable.o \ - compress.o \ - decompress.o \ - bzlib.o - -all: $(OBJS) - $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.3 $(OBJS) - $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.3 - rm -f libbz2.so.1.0 - ln -s libbz2.so.1.0.3 libbz2.so.1.0 - -clean: - rm -f $(OBJS) bzip2.o libbz2.so.1.0.3 libbz2.so.1.0 bzip2-shared - -blocksort.o: blocksort.c - $(CC) $(CFLAGS) -c blocksort.c -huffman.o: huffman.c - $(CC) $(CFLAGS) -c huffman.c -crctable.o: crctable.c - $(CC) $(CFLAGS) -c crctable.c -randtable.o: randtable.c - $(CC) $(CFLAGS) -c randtable.c -compress.o: compress.c - $(CC) $(CFLAGS) -c compress.c -decompress.o: decompress.c - $(CC) $(CFLAGS) -c decompress.c -bzlib.o: bzlib.c - $(CC) $(CFLAGS) -c bzlib.c diff --git a/commands/bzip2/Y2K_INFO b/commands/bzip2/Y2K_INFO deleted file mode 100644 index 55fd56a2e..000000000 --- a/commands/bzip2/Y2K_INFO +++ /dev/null @@ -1,34 +0,0 @@ - -Y2K status of bzip2 and libbzip2, versions 0.1, 0.9.0 and 0.9.5 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Informally speaking: - bzip2 is a compression program built on top of libbzip2, - a library which does the real work of compression and - decompression. As far as I am aware, libbzip2 does not have - any date-related code at all. - - bzip2 itself copies dates from source to destination files - when compressing or decompressing, using the 'stat' and 'utime' - UNIX system calls. It doesn't examine, manipulate or store the - dates in any way. So as far as I can see, there shouldn't be any - problem with bzip2 providing 'stat' and 'utime' work correctly - on your system. - - On non-unix platforms (those for which BZ_UNIX in bzip2.c is - not set to 1), bzip2 doesn't even do the date copying. - - Overall, informally speaking, I don't think bzip2 or libbzip2 - have a Y2K problem. - -Formally speaking: - I am not prepared to offer you any assurance whatsoever - regarding Y2K issues in my software. You alone assume the - entire risk of using the software. The disclaimer of liability - in the LICENSE file in the bzip2 source distribution continues - to apply on this issue as with every other issue pertaining - to the software. - -Julian Seward -Cambridge, UK -25 August 1999 diff --git a/commands/bzip2/bzip2.1 b/commands/bzip2/bzip2.1 deleted file mode 100644 index b7a460071..000000000 --- a/commands/bzip2/bzip2.1 +++ /dev/null @@ -1,466 +0,0 @@ -.PU -.TH bzip2 1 -.SH NAME -bzip2, bunzip2, smallbunzip2 \- a block-sorting file compressor, v1.0.3 -.br -bzcat \- decompresses files to stdout -.br -bzip2recover \- recovers data from damaged bzip2 files - -.SH SYNOPSIS -.ll +8 -.B bzip2 -.RB [ " \-cdfkqstvzVL123456789 " ] -[ -.I "filenames \&..." -] -.ll -8 -.br -.B bunzip2 -.RB [ " \-fkvsVL " ] -[ -.I "filenames \&..." -] -.br -.B smallbunzip2 -.RB [ " \-fkvsVL " ] -[ -.I "filenames \&..." -] -.br -.B bzcat -.RB [ " \-s " ] -[ -.I "filenames \&..." -] -.br -.B bzip2recover -.I "filename" - -.SH DESCRIPTION -.I bzip2 -compresses files using the Burrows-Wheeler block sorting -text compression algorithm, and Huffman coding. Compression is -generally considerably better than that achieved by more conventional -LZ77/LZ78-based compressors, and approaches the performance of the PPM -family of statistical compressors. - -The command-line options are deliberately very similar to -those of -.I GNU gzip, -but they are not identical. - -.I bzip2 -expects a list of file names to accompany the -command-line flags. Each file is replaced by a compressed version of -itself, with the name "original_name.bz2". -Each compressed file -has the same modification date, permissions, and, when possible, -ownership as the corresponding original, so that these properties can -be correctly restored at decompression time. File name handling is -naive in the sense that there is no mechanism for preserving original -file names, permissions, ownerships or dates in filesystems which lack -these concepts, or have serious file name length restrictions, such as -MS-DOS. - -.I bzip2 -and -.I bunzip2 -will by default not overwrite existing -files. If you want this to happen, specify the \-f flag. - -If no file names are specified, -.I bzip2 -compresses from standard -input to standard output. In this case, -.I bzip2 -will decline to -write compressed output to a terminal, as this would be entirely -incomprehensible and therefore pointless. - -.I bunzip2 -(or -.I bzip2 \-d) -decompresses all -specified files. -.I smallbunzip2 -is identical to -.I bunzip2 -on modern MINIX, but used to use less memory -before virtual memory was introduced. -Files which were not created by -.I bzip2 -will be detected and ignored, and a warning issued. -.I bzip2 -attempts to guess the filename for the decompressed file -from that of the compressed file as follows: - - filename.bz2 becomes filename - filename.bz becomes filename - filename.tbz2 becomes filename.tar - filename.tbz becomes filename.tar - anyothername becomes anyothername.out - -If the file does not end in one of the recognised endings, -.I .bz2, -.I .bz, -.I .tbz2 -or -.I .tbz, -.I bzip2 -complains that it cannot -guess the name of the original file, and uses the original name -with -.I .out -appended. - -As with compression, supplying no -filenames causes decompression from -standard input to standard output. - -.I bunzip2 -will correctly decompress a file which is the -concatenation of two or more compressed files. The result is the -concatenation of the corresponding uncompressed files. Integrity -testing (\-t) -of concatenated -compressed files is also supported. - -You can also compress or decompress files to the standard output by -giving the \-c flag. Multiple files may be compressed and -decompressed like this. The resulting outputs are fed sequentially to -stdout. Compression of multiple files -in this manner generates a stream -containing multiple compressed file representations. Such a stream -can be decompressed correctly only by -.I bzip2 -version 0.9.0 or -later. Earlier versions of -.I bzip2 -will stop after decompressing -the first file in the stream. - -.I bzcat -(or -.I bzip2 -dc) -decompresses all specified files to -the standard output. - -.I bzip2 -will read arguments from the environment variables -.I BZIP2 -and -.I BZIP, -in that order, and will process them -before any arguments read from the command line. This gives a -convenient way to supply default arguments. - -Compression is always performed, even if the compressed -file is slightly -larger than the original. Files of less than about one hundred bytes -tend to get larger, since the compression mechanism has a constant -overhead in the region of 50 bytes. Random data (including the output -of most file compressors) is coded at about 8.05 bits per byte, giving -an expansion of around 0.5%. - -As a self-check for your protection, -.I -bzip2 -uses 32-bit CRCs to -make sure that the decompressed version of a file is identical to the -original. This guards against corruption of the compressed data, and -against undetected bugs in -.I bzip2 -(hopefully very unlikely). The -chances of data corruption going undetected is microscopic, about one -chance in four billion for each file processed. Be aware, though, that -the check occurs upon decompression, so it can only tell you that -something is wrong. It can't help you -recover the original uncompressed -data. You can use -.I bzip2recover -to try to recover data from -damaged files. - -Return values: 0 for a normal exit, 1 for environmental problems (file -not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt -compressed file, 3 for an internal consistency error (eg, bug) which -caused -.I bzip2 -to panic. - -.SH OPTIONS -.TP -.B \-c --stdout -Compress or decompress to standard output. -.TP -.B \-d --decompress -Force decompression. -.I bzip2, -.I bunzip2 -and -.I bzcat -are -really the same program, and the decision about what actions to take is -done on the basis of which name is used. This flag overrides that -mechanism, and forces -.I bzip2 -to decompress. -.TP -.B \-z --compress -The complement to \-d: forces compression, regardless of the -invocation name. -.TP -.B \-t --test -Check integrity of the specified file(s), but don't decompress them. -This really performs a trial decompression and throws away the result. -.TP -.B \-f --force -Force overwrite of output files. Normally, -.I bzip2 -will not overwrite -existing output files. Also forces -.I bzip2 -to break hard links -to files, which it otherwise wouldn't do. - -bzip2 normally declines to decompress files which don't have the -correct magic header bytes. If forced (-f), however, it will pass -such files through unmodified. This is how GNU gzip behaves. -.TP -.B \-k --keep -Keep (don't delete) input files during compression -or decompression. -.TP -.B \-s --small -Reduce memory usage, for compression, decompression and testing. Files -are decompressed and tested using a modified algorithm which only -requires 2.5 bytes per block byte. This means any file can be -decompressed in 2300k of memory, albeit at about half the normal speed. - -During compression, \-s selects a block size of 200k, which limits -memory use to around the same figure, at the expense of your compression -ratio. In short, if your machine is low on memory (8 megabytes or -less), use \-s for everything. See MEMORY MANAGEMENT below. -.TP -.B \-q --quiet -Suppress non-essential warning messages. Messages pertaining to -I/O errors and other critical events will not be suppressed. -.TP -.B \-v --verbose -Verbose mode -- show the compression ratio for each file processed. -Further \-v's increase the verbosity level, spewing out lots of -information which is primarily of interest for diagnostic purposes. -.TP -.B \-L --license -V --version -Display the software version, license terms and conditions. -.TP -.B \-1 (or \-\-fast) to \-9 (or \-\-best) -Set the block size to 100 k, 200 k .. 900 k when compressing. Has no -effect when decompressing. See MEMORY MANAGEMENT below. -The \-\-fast and \-\-best aliases are primarily for GNU gzip -compatibility. In particular, \-\-fast doesn't make things -significantly faster. -And \-\-best merely selects the default behaviour. -.TP -.B \-- -Treats all subsequent arguments as file names, even if they start -with a dash. This is so you can handle files with names beginning -with a dash, for example: bzip2 \-- \-myfilename. -.TP -.B \--repetitive-fast --repetitive-best -These flags are redundant in versions 0.9.5 and above. They provided -some coarse control over the behaviour of the sorting algorithm in -earlier versions, which was sometimes useful. 0.9.5 and above have an -improved algorithm which renders these flags irrelevant. - -.SH MEMORY MANAGEMENT -.I bzip2 -compresses large files in blocks. The block size affects -both the compression ratio achieved, and the amount of memory needed for -compression and decompression. The flags \-1 through \-9 -specify the block size to be 100,000 bytes through 900,000 bytes (the -default) respectively. At decompression time, the block size used for -compression is read from the header of the compressed file, and -.I bunzip2 -then allocates itself just enough memory to decompress -the file. Since block sizes are stored in compressed files, it follows -that the flags \-1 to \-9 are irrelevant to and so ignored -during decompression. - -Compression and decompression requirements, -in bytes, can be estimated as: - - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) - -Larger block sizes give rapidly diminishing marginal returns. Most of -the compression comes from the first two or three hundred k of block -size, a fact worth bearing in mind when using -.I bzip2 -on small machines. -It is also important to appreciate that the decompression memory -requirement is set at compression time by the choice of block size. - -For files compressed with the default 900k block size, -.I bunzip2 -will require about 3700 kbytes to decompress. To support decompression -of any file on a 4 megabyte machine, -.I bunzip2 -has an option to -decompress using approximately half this amount of memory, about 2300 -kbytes. Decompression speed is also halved, so you should use this -option only where necessary. The relevant flag is -s. - -In general, try and use the largest block size memory constraints allow, -since that maximises the compression achieved. Compression and -decompression speed are virtually unaffected by block size. - -Another significant point applies to files which fit in a single block --- that means most files you'd encounter using a large block size. The -amount of real memory touched is proportional to the size of the file, -since the file is smaller than a block. For example, compressing a file -20,000 bytes long with the flag -9 will cause the compressor to -allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 -kbytes of it. Similarly, the decompressor will allocate 3700k but only -touch 100k + 20000 * 4 = 180 kbytes. - -Here is a table which summarises the maximum memory usage for different -block sizes. Also recorded is the total compressed size for 14 files of -the Calgary Text Compression Corpus totalling 3,141,622 bytes. This -column gives some feel for how compression varies with block size. -These figures tend to understate the advantage of larger block sizes for -larger files, since the Corpus is dominated by smaller files. - - Compress Decompress Decompress Corpus - Flag usage usage -s usage Size - - -1 1200k 500k 350k 914704 - -2 2000k 900k 600k 877703 - -3 2800k 1300k 850k 860338 - -4 3600k 1700k 1100k 846899 - -5 4400k 2100k 1350k 845160 - -6 5200k 2500k 1600k 838626 - -7 6100k 2900k 1850k 834096 - -8 6800k 3300k 2100k 828642 - -9 7600k 3700k 2350k 828642 - -.SH RECOVERING DATA FROM DAMAGED FILES -.I bzip2 -compresses files in blocks, usually 900kbytes long. Each -block is handled independently. If a media or transmission error causes -a multi-block .bz2 -file to become damaged, it may be possible to -recover data from the undamaged blocks in the file. - -The compressed representation of each block is delimited by a 48-bit -pattern, which makes it possible to find the block boundaries with -reasonable certainty. Each block also carries its own 32-bit CRC, so -damaged blocks can be distinguished from undamaged ones. - -.I bzip2recover -is a simple program whose purpose is to search for -blocks in .bz2 files, and write each block out into its own .bz2 -file. You can then use -.I bzip2 -\-t -to test the -integrity of the resulting files, and decompress those which are -undamaged. - -.I bzip2recover -takes a single argument, the name of the damaged file, -and writes a number of files "rec00001file.bz2", -"rec00002file.bz2", etc, containing the extracted blocks. -The output filenames are designed so that the use of -wildcards in subsequent processing -- for example, -"bzip2 -dc rec*file.bz2 > recovered_data" -- processes the files in -the correct order. - -.I bzip2recover -should be of most use dealing with large .bz2 -files, as these will contain many blocks. It is clearly -futile to use it on damaged single-block files, since a -damaged block cannot be recovered. If you wish to minimise -any potential data loss through media or transmission errors, -you might consider compressing with a smaller -block size. - -.SH PERFORMANCE NOTES -The sorting phase of compression gathers together similar strings in the -file. Because of this, files containing very long runs of repeated -symbols, like "aabaabaabaab ..." (repeated several hundred times) may -compress more slowly than normal. Versions 0.9.5 and above fare much -better than previous versions in this respect. The ratio between -worst-case and average-case compression time is in the region of 10:1. -For previous versions, this figure was more like 100:1. You can use the -\-vvvv option to monitor progress in great detail, if you want. - -Decompression speed is unaffected by these phenomena. - -.I bzip2 -usually allocates several megabytes of memory to operate -in, and then charges all over it in a fairly random fashion. This means -that performance, both for compressing and decompressing, is largely -determined by the speed at which your machine can service cache misses. -Because of this, small changes to the code to reduce the miss rate have -been observed to give disproportionately large performance improvements. -I imagine -.I bzip2 -will perform best on machines with very large caches. - -.SH CAVEATS -I/O error messages are not as helpful as they could be. -.I bzip2 -tries hard to detect I/O errors and exit cleanly, but the details of -what the problem is sometimes seem rather misleading. - -This manual page pertains to version 1.0.3 of -.I bzip2. -Compressed data created by this version is entirely forwards and -backwards compatible with the previous public releases, versions -0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1 and 1.0.2, but with the following -exception: 0.9.0 and above can correctly decompress multiple -concatenated compressed files. 0.1pl2 cannot do this; it will stop -after decompressing just the first file in the stream. - -.I bzip2recover -versions prior to 1.0.2 used 32-bit integers to represent -bit positions in compressed files, so they could not handle compressed -files more than 512 megabytes long. Versions 1.0.2 and above use -64-bit ints on some platforms which support them (GNU supported -targets, and Windows). To establish whether or not bzip2recover was -built with such a limitation, run it without arguments. In any event -you can build yourself an unlimited version if you can recompile it -with MaybeUInt64 set to be an unsigned 64-bit integer. - - - -.SH AUTHOR -Julian Seward, jsewardbzip.org. - -http://www.bzip.org - -The ideas embodied in -.I bzip2 -are due to (at least) the following -people: Michael Burrows and David Wheeler (for the block sorting -transformation), David Wheeler (again, for the Huffman coder), Peter -Fenwick (for the structured coding model in the original -.I bzip, -and many refinements), and Alistair Moffat, Radford Neal and Ian Witten -(for the arithmetic coder in the original -.I bzip). -I am much -indebted for their help, support and advice. See the manual in the -source distribution for pointers to sources of documentation. Christian -von Roques encouraged me to look for faster sorting algorithms, so as to -speed up compression. Bela Lubkin encouraged me to improve the -worst-case compression performance. -Donna Robinson XMLised the documentation. -The bz* scripts are derived from those of GNU gzip. -Many people sent patches, helped -with portability problems, lent machines, gave advice and were generally -helpful. diff --git a/commands/bzip2/bzip2.1.preformatted b/commands/bzip2/bzip2.1.preformatted deleted file mode 100644 index 129ca835c..000000000 --- a/commands/bzip2/bzip2.1.preformatted +++ /dev/null @@ -1,399 +0,0 @@ -bzip2(1) bzip2(1) - - - -NNAAMMEE - bzip2, bunzip2 − a block‐sorting file compressor, v1.0.3 - bzcat − decompresses files to stdout - bzip2recover − recovers data from damaged bzip2 files - - -SSYYNNOOPPSSIISS - bbzziipp22 [ −−ccddffkkqqssttvvzzVVLL112233445566778899 ] [ _f_i_l_e_n_a_m_e_s _._._. ] - bbuunnzziipp22 [ −−ffkkvvssVVLL ] [ _f_i_l_e_n_a_m_e_s _._._. ] - bbzzccaatt [ −−ss ] [ _f_i_l_e_n_a_m_e_s _._._. ] - bbzziipp22rreeccoovveerr _f_i_l_e_n_a_m_e - - -DDEESSCCRRIIPPTTIIOONN - _b_z_i_p_2 compresses files using the Burrows‐Wheeler block - sorting text compression algorithm, and Huffman coding. - Compression is generally considerably better than that - achieved by more conventional LZ77/LZ78‐based compressors, - and approaches the performance of the PPM family of sta­ - tistical compressors. - - The command‐line options are deliberately very similar to - those of _G_N_U _g_z_i_p_, but they are not identical. - - _b_z_i_p_2 expects a list of file names to accompany the com­ - mand‐line flags. Each file is replaced by a compressed - version of itself, with the name "original_name.bz2". - Each compressed file has the same modification date, per­ - missions, and, when possible, ownership as the correspond­ - ing original, so that these properties can be correctly - restored at decompression time. File name handling is - naive in the sense that there is no mechanism for preserv­ - ing original file names, permissions, ownerships or dates - in filesystems which lack these concepts, or have serious - file name length restrictions, such as MS‐DOS. - - _b_z_i_p_2 and _b_u_n_z_i_p_2 will by default not overwrite existing - files. If you want this to happen, specify the −f flag. - - If no file names are specified, _b_z_i_p_2 compresses from - standard input to standard output. In this case, _b_z_i_p_2 - will decline to write compressed output to a terminal, as - this would be entirely incomprehensible and therefore - pointless. - - _b_u_n_z_i_p_2 (or _b_z_i_p_2 _−_d_) decompresses all specified files. - Files which were not created by _b_z_i_p_2 will be detected and - ignored, and a warning issued. _b_z_i_p_2 attempts to guess - the filename for the decompressed file from that of the - compressed file as follows: - - filename.bz2 becomes filename - filename.bz becomes filename - filename.tbz2 becomes filename.tar - filename.tbz becomes filename.tar - anyothername becomes anyothername.out - - If the file does not end in one of the recognised endings, - _._b_z_2_, _._b_z_, _._t_b_z_2 or _._t_b_z_, _b_z_i_p_2 complains that it cannot - guess the name of the original file, and uses the original - name with _._o_u_t appended. - - As with compression, supplying no filenames causes decom­ - pression from standard input to standard output. - - _b_u_n_z_i_p_2 will correctly decompress a file which is the con­ - catenation of two or more compressed files. The result is - the concatenation of the corresponding uncompressed files. - Integrity testing (−t) of concatenated compressed files is - also supported. - - You can also compress or decompress files to the standard - output by giving the −c flag. Multiple files may be com­ - pressed and decompressed like this. The resulting outputs - are fed sequentially to stdout. Compression of multiple - files in this manner generates a stream containing multi­ - ple compressed file representations. Such a stream can be - decompressed correctly only by _b_z_i_p_2 version 0.9.0 or - later. Earlier versions of _b_z_i_p_2 will stop after decom­ - pressing the first file in the stream. - - _b_z_c_a_t (or _b_z_i_p_2 _‐_d_c_) decompresses all specified files to - the standard output. - - _b_z_i_p_2 will read arguments from the environment variables - _B_Z_I_P_2 and _B_Z_I_P_, in that order, and will process them - before any arguments read from the command line. This - gives a convenient way to supply default arguments. - - Compression is always performed, even if the compressed - file is slightly larger than the original. Files of less - than about one hundred bytes tend to get larger, since the - compression mechanism has a constant overhead in the - region of 50 bytes. Random data (including the output of - most file compressors) is coded at about 8.05 bits per - byte, giving an expansion of around 0.5%. - - As a self‐check for your protection, _b_z_i_p_2 uses 32‐bit - CRCs to make sure that the decompressed version of a file - is identical to the original. This guards against corrup­ - tion of the compressed data, and against undetected bugs - in _b_z_i_p_2 (hopefully very unlikely). The chances of data - corruption going undetected is microscopic, about one - chance in four billion for each file processed. Be aware, - though, that the check occurs upon decompression, so it - can only tell you that something is wrong. It can’t help - you recover the original uncompressed data. You can use - _b_z_i_p_2_r_e_c_o_v_e_r to try to recover data from damaged files. - - Return values: 0 for a normal exit, 1 for environmental - problems (file not found, invalid flags, I/O errors, &c), - 2 to indicate a corrupt compressed file, 3 for an internal - consistency error (eg, bug) which caused _b_z_i_p_2 to panic. - - -OOPPTTIIOONNSS - −−cc ‐‐‐‐ssttddoouutt - Compress or decompress to standard output. - - −−dd ‐‐‐‐ddeeccoommpprreessss - Force decompression. _b_z_i_p_2_, _b_u_n_z_i_p_2 and _b_z_c_a_t are - really the same program, and the decision about - what actions to take is done on the basis of which - name is used. This flag overrides that mechanism, - and forces _b_z_i_p_2 to decompress. - - −−zz ‐‐‐‐ccoommpprreessss - The complement to −d: forces compression, - regardless of the invocation name. - - −−tt ‐‐‐‐tteesstt - Check integrity of the specified file(s), but don’t - decompress them. This really performs a trial - decompression and throws away the result. - - −−ff ‐‐‐‐ffoorrccee - Force overwrite of output files. Normally, _b_z_i_p_2 - will not overwrite existing output files. Also - forces _b_z_i_p_2 to break hard links to files, which it - otherwise wouldn’t do. - - bzip2 normally declines to decompress files which - don’t have the correct magic header bytes. If - forced (‐f), however, it will pass such files - through unmodified. This is how GNU gzip behaves. - - −−kk ‐‐‐‐kkeeeepp - Keep (don’t delete) input files during compression - or decompression. - - −−ss ‐‐‐‐ssmmaallll - Reduce memory usage, for compression, decompression - and testing. Files are decompressed and tested - using a modified algorithm which only requires 2.5 - bytes per block byte. This means any file can be - decompressed in 2300k of memory, albeit at about - half the normal speed. - - During compression, −s selects a block size of - 200k, which limits memory use to around the same - figure, at the expense of your compression ratio. - In short, if your machine is low on memory (8 - megabytes or less), use −s for everything. See - MEMORY MANAGEMENT below. - - −−qq ‐‐‐‐qquuiieett - Suppress non‐essential warning messages. Messages - pertaining to I/O errors and other critical events - will not be suppressed. - - −−vv ‐‐‐‐vveerrbboossee - Verbose mode ‐‐ show the compression ratio for each - file processed. Further −v’s increase the ver­ - bosity level, spewing out lots of information which - is primarily of interest for diagnostic purposes. - - −−LL ‐‐‐‐lliicceennssee ‐‐VV ‐‐‐‐vveerrssiioonn - Display the software version, license terms and - conditions. - - −−11 ((oorr −−−−ffaasstt)) ttoo −−99 ((oorr −−−−bbeesstt)) - Set the block size to 100 k, 200 k .. 900 k when - compressing. Has no effect when decompressing. - See MEMORY MANAGEMENT below. The −−fast and −−best - aliases are primarily for GNU gzip compatibility. - In particular, −−fast doesn’t make things signifi­ - cantly faster. And −−best merely selects the - default behaviour. - - −−‐‐ Treats all subsequent arguments as file names, even - if they start with a dash. This is so you can han­ - dle files with names beginning with a dash, for - example: bzip2 −‐ −myfilename. - - −−‐‐rreeppeettiittiivvee‐‐ffaasstt ‐‐‐‐rreeppeettiittiivvee‐‐bbeesstt - These flags are redundant in versions 0.9.5 and - above. They provided some coarse control over the - behaviour of the sorting algorithm in earlier ver­ - sions, which was sometimes useful. 0.9.5 and above - have an improved algorithm which renders these - flags irrelevant. - - -MMEEMMOORRYY MMAANNAAGGEEMMEENNTT - _b_z_i_p_2 compresses large files in blocks. The block size - affects both the compression ratio achieved, and the - amount of memory needed for compression and decompression. - The flags −1 through −9 specify the block size to be - 100,000 bytes through 900,000 bytes (the default) respec­ - tively. At decompression time, the block size used for - compression is read from the header of the compressed - file, and _b_u_n_z_i_p_2 then allocates itself just enough memory - to decompress the file. Since block sizes are stored in - compressed files, it follows that the flags −1 to −9 are - irrelevant to and so ignored during decompression. - - Compression and decompression requirements, in bytes, can - be estimated as: - - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) - - Larger block sizes give rapidly diminishing marginal - returns. Most of the compression comes from the first two - or three hundred k of block size, a fact worth bearing in - mind when using _b_z_i_p_2 on small machines. It is also - important to appreciate that the decompression memory - requirement is set at compression time by the choice of - block size. - - For files compressed with the default 900k block size, - _b_u_n_z_i_p_2 will require about 3700 kbytes to decompress. To - support decompression of any file on a 4 megabyte machine, - _b_u_n_z_i_p_2 has an option to decompress using approximately - half this amount of memory, about 2300 kbytes. Decompres­ - sion speed is also halved, so you should use this option - only where necessary. The relevant flag is ‐s. - - In general, try and use the largest block size memory con­ - straints allow, since that maximises the compression - achieved. Compression and decompression speed are virtu­ - ally unaffected by block size. - - Another significant point applies to files which fit in a - single block ‐‐ that means most files you’d encounter - using a large block size. The amount of real memory - touched is proportional to the size of the file, since the - file is smaller than a block. For example, compressing a - file 20,000 bytes long with the flag ‐9 will cause the - compressor to allocate around 7600k of memory, but only - touch 400k + 20000 * 8 = 560 kbytes of it. Similarly, the - decompressor will allocate 3700k but only touch 100k + - 20000 * 4 = 180 kbytes. - - Here is a table which summarises the maximum memory usage - for different block sizes. Also recorded is the total - compressed size for 14 files of the Calgary Text Compres­ - sion Corpus totalling 3,141,622 bytes. This column gives - some feel for how compression varies with block size. - These figures tend to understate the advantage of larger - block sizes for larger files, since the Corpus is domi­ - nated by smaller files. - - Compress Decompress Decompress Corpus - Flag usage usage ‐s usage Size - - ‐1 1200k 500k 350k 914704 - ‐2 2000k 900k 600k 877703 - ‐3 2800k 1300k 850k 860338 - ‐4 3600k 1700k 1100k 846899 - ‐5 4400k 2100k 1350k 845160 - ‐6 5200k 2500k 1600k 838626 - ‐7 6100k 2900k 1850k 834096 - ‐8 6800k 3300k 2100k 828642 - ‐9 7600k 3700k 2350k 828642 - - -RREECCOOVVEERRIINNGG DDAATTAA FFRROOMM DDAAMMAAGGEEDD FFIILLEESS - _b_z_i_p_2 compresses files in blocks, usually 900kbytes long. - Each block is handled independently. If a media or trans­ - mission error causes a multi‐block .bz2 file to become - damaged, it may be possible to recover data from the - undamaged blocks in the file. - - The compressed representation of each block is delimited - by a 48‐bit pattern, which makes it possible to find the - block boundaries with reasonable certainty. Each block - also carries its own 32‐bit CRC, so damaged blocks can be - distinguished from undamaged ones. - - _b_z_i_p_2_r_e_c_o_v_e_r is a simple program whose purpose is to - search for blocks in .bz2 files, and write each block out - into its own .bz2 file. You can then use _b_z_i_p_2 −t to test - the integrity of the resulting files, and decompress those - which are undamaged. - - _b_z_i_p_2_r_e_c_o_v_e_r takes a single argument, the name of the dam­ - aged file, and writes a number of files - "rec00001file.bz2", "rec00002file.bz2", etc, containing - the extracted blocks. The output filenames are - designed so that the use of wildcards in subsequent pro­ - cessing ‐‐ for example, "bzip2 ‐dc rec*file.bz2 > recov­ - ered_data" ‐‐ processes the files in the correct order. - - _b_z_i_p_2_r_e_c_o_v_e_r should be of most use dealing with large .bz2 - files, as these will contain many blocks. It is clearly - futile to use it on damaged single‐block files, since a - damaged block cannot be recovered. If you wish to min­ - imise any potential data loss through media or transmis­ - sion errors, you might consider compressing with a smaller - block size. - - -PPEERRFFOORRMMAANNCCEE NNOOTTEESS - The sorting phase of compression gathers together similar - strings in the file. Because of this, files containing - very long runs of repeated symbols, like "aabaabaabaab - ..." (repeated several hundred times) may compress more - slowly than normal. Versions 0.9.5 and above fare much - better than previous versions in this respect. The ratio - between worst‐case and average‐case compression time is in - the region of 10:1. For previous versions, this figure - was more like 100:1. You can use the −vvvv option to mon­ - itor progress in great detail, if you want. - - Decompression speed is unaffected by these phenomena. - - _b_z_i_p_2 usually allocates several megabytes of memory to - operate in, and then charges all over it in a fairly ran­ - dom fashion. This means that performance, both for com­ - pressing and decompressing, is largely determined by the - speed at which your machine can service cache misses. - Because of this, small changes to the code to reduce the - miss rate have been observed to give disproportionately - large performance improvements. I imagine _b_z_i_p_2 will per­ - form best on machines with very large caches. - - -CCAAVVEEAATTSS - I/O error messages are not as helpful as they could be. - _b_z_i_p_2 tries hard to detect I/O errors and exit cleanly, - but the details of what the problem is sometimes seem - rather misleading. - - This manual page pertains to version 1.0.3 of _b_z_i_p_2_. Com­ - pressed data created by this version is entirely forwards - and backwards compatible with the previous public - releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1 and - 1.0.2, but with the following exception: 0.9.0 and above - can correctly decompress multiple concatenated compressed - files. 0.1pl2 cannot do this; it will stop after decom­ - pressing just the first file in the stream. - - _b_z_i_p_2_r_e_c_o_v_e_r versions prior to 1.0.2 used 32‐bit integers - to represent bit positions in compressed files, so they - could not handle compressed files more than 512 megabytes - long. Versions 1.0.2 and above use 64‐bit ints on some - platforms which support them (GNU supported targets, and - Windows). To establish whether or not bzip2recover was - built with such a limitation, run it without arguments. - In any event you can build yourself an unlimited version - if you can recompile it with MaybeUInt64 set to be an - unsigned 64‐bit integer. - - - - -AAUUTTHHOORR - Julian Seward, jsewardbzip.org. - - http://www.bzip.org - - The ideas embodied in _b_z_i_p_2 are due to (at least) the fol­ - lowing people: Michael Burrows and David Wheeler (for the - block sorting transformation), David Wheeler (again, for - the Huffman coder), Peter Fenwick (for the structured cod­ - ing model in the original _b_z_i_p_, and many refinements), and - Alistair Moffat, Radford Neal and Ian Witten (for the - arithmetic coder in the original _b_z_i_p_)_. I am much - indebted for their help, support and advice. See the man­ - ual in the source distribution for pointers to sources of - documentation. Christian von Roques encouraged me to look - for faster sorting algorithms, so as to speed up compres­ - sion. Bela Lubkin encouraged me to improve the worst‐case - compression performance. Donna Robinson XMLised the docu­ - mentation. The bz* scripts are derived from those of GNU - gzip. Many people sent patches, helped with portability - problems, lent machines, gave advice and were generally - helpful. - - - - bzip2(1) diff --git a/commands/bzip2/bzip2.txt b/commands/bzip2/bzip2.txt deleted file mode 100644 index bf895b6cb..000000000 --- a/commands/bzip2/bzip2.txt +++ /dev/null @@ -1,391 +0,0 @@ - -NAME - bzip2, bunzip2 - a block-sorting file compressor, v1.0.3 - bzcat - decompresses files to stdout - bzip2recover - recovers data from damaged bzip2 files - - -SYNOPSIS - bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ] - bunzip2 [ -fkvsVL ] [ filenames ... ] - bzcat [ -s ] [ filenames ... ] - bzip2recover filename - - -DESCRIPTION - bzip2 compresses files using the Burrows-Wheeler block - sorting text compression algorithm, and Huffman coding. - Compression is generally considerably better than that - achieved by more conventional LZ77/LZ78-based compressors, - and approaches the performance of the PPM family of sta- - tistical compressors. - - The command-line options are deliberately very similar to - those of GNU gzip, but they are not identical. - - bzip2 expects a list of file names to accompany the com- - mand-line flags. Each file is replaced by a compressed - version of itself, with the name "original_name.bz2". - Each compressed file has the same modification date, per- - missions, and, when possible, ownership as the correspond- - ing original, so that these properties can be correctly - restored at decompression time. File name handling is - naive in the sense that there is no mechanism for preserv- - ing original file names, permissions, ownerships or dates - in filesystems which lack these concepts, or have serious - file name length restrictions, such as MS-DOS. - - bzip2 and bunzip2 will by default not overwrite existing - files. If you want this to happen, specify the -f flag. - - If no file names are specified, bzip2 compresses from - standard input to standard output. In this case, bzip2 - will decline to write compressed output to a terminal, as - this would be entirely incomprehensible and therefore - pointless. - - bunzip2 (or bzip2 -d) decompresses all specified files. - Files which were not created by bzip2 will be detected and - ignored, and a warning issued. bzip2 attempts to guess - the filename for the decompressed file from that of the - compressed file as follows: - - filename.bz2 becomes filename - filename.bz becomes filename - filename.tbz2 becomes filename.tar - filename.tbz becomes filename.tar - anyothername becomes anyothername.out - - If the file does not end in one of the recognised endings, - .bz2, .bz, .tbz2 or .tbz, bzip2 complains that it cannot - guess the name of the original file, and uses the original - name with .out appended. - - As with compression, supplying no filenames causes decom- - pression from standard input to standard output. - - bunzip2 will correctly decompress a file which is the con- - catenation of two or more compressed files. The result is - the concatenation of the corresponding uncompressed files. - Integrity testing (-t) of concatenated compressed files is - also supported. - - You can also compress or decompress files to the standard - output by giving the -c flag. Multiple files may be com- - pressed and decompressed like this. The resulting outputs - are fed sequentially to stdout. Compression of multiple - files in this manner generates a stream containing multi- - ple compressed file representations. Such a stream can be - decompressed correctly only by bzip2 version 0.9.0 or - later. Earlier versions of bzip2 will stop after decom- - pressing the first file in the stream. - - bzcat (or bzip2 -dc) decompresses all specified files to - the standard output. - - bzip2 will read arguments from the environment variables - BZIP2 and BZIP, in that order, and will process them - before any arguments read from the command line. This - gives a convenient way to supply default arguments. - - Compression is always performed, even if the compressed - file is slightly larger than the original. Files of less - than about one hundred bytes tend to get larger, since the - compression mechanism has a constant overhead in the - region of 50 bytes. Random data (including the output of - most file compressors) is coded at about 8.05 bits per - byte, giving an expansion of around 0.5%. - - As a self-check for your protection, bzip2 uses 32-bit - CRCs to make sure that the decompressed version of a file - is identical to the original. This guards against corrup- - tion of the compressed data, and against undetected bugs - in bzip2 (hopefully very unlikely). The chances of data - corruption going undetected is microscopic, about one - chance in four billion for each file processed. Be aware, - though, that the check occurs upon decompression, so it - can only tell you that something is wrong. It can't help - you recover the original uncompressed data. You can use - bzip2recover to try to recover data from damaged files. - - Return values: 0 for a normal exit, 1 for environmental - problems (file not found, invalid flags, I/O errors, &c), - 2 to indicate a corrupt compressed file, 3 for an internal - consistency error (eg, bug) which caused bzip2 to panic. - - -OPTIONS - -c --stdout - Compress or decompress to standard output. - - -d --decompress - Force decompression. bzip2, bunzip2 and bzcat are - really the same program, and the decision about - what actions to take is done on the basis of which - name is used. This flag overrides that mechanism, - and forces bzip2 to decompress. - - -z --compress - The complement to -d: forces compression, - regardless of the invocation name. - - -t --test - Check integrity of the specified file(s), but don't - decompress them. This really performs a trial - decompression and throws away the result. - - -f --force - Force overwrite of output files. Normally, bzip2 - will not overwrite existing output files. Also - forces bzip2 to break hard links to files, which it - otherwise wouldn't do. - - bzip2 normally declines to decompress files which - don't have the correct magic header bytes. If - forced (-f), however, it will pass such files - through unmodified. This is how GNU gzip behaves. - - -k --keep - Keep (don't delete) input files during compression - or decompression. - - -s --small - Reduce memory usage, for compression, decompression - and testing. Files are decompressed and tested - using a modified algorithm which only requires 2.5 - bytes per block byte. This means any file can be - decompressed in 2300k of memory, albeit at about - half the normal speed. - - During compression, -s selects a block size of - 200k, which limits memory use to around the same - figure, at the expense of your compression ratio. - In short, if your machine is low on memory (8 - megabytes or less), use -s for everything. See - MEMORY MANAGEMENT below. - - -q --quiet - Suppress non-essential warning messages. Messages - pertaining to I/O errors and other critical events - will not be suppressed. - - -v --verbose - Verbose mode -- show the compression ratio for each - file processed. Further -v's increase the ver- - bosity level, spewing out lots of information which - is primarily of interest for diagnostic purposes. - - -L --license -V --version - Display the software version, license terms and - conditions. - - -1 (or --fast) to -9 (or --best) - Set the block size to 100 k, 200 k .. 900 k when - compressing. Has no effect when decompressing. - See MEMORY MANAGEMENT below. The --fast and --best - aliases are primarily for GNU gzip compatibility. - In particular, --fast doesn't make things signifi- - cantly faster. And --best merely selects the - default behaviour. - - -- Treats all subsequent arguments as file names, even - if they start with a dash. This is so you can han- - dle files with names beginning with a dash, for - example: bzip2 -- -myfilename. - - --repetitive-fast --repetitive-best - These flags are redundant in versions 0.9.5 and - above. They provided some coarse control over the - behaviour of the sorting algorithm in earlier ver- - sions, which was sometimes useful. 0.9.5 and above - have an improved algorithm which renders these - flags irrelevant. - - -MEMORY MANAGEMENT - bzip2 compresses large files in blocks. The block size - affects both the compression ratio achieved, and the - amount of memory needed for compression and decompression. - The flags -1 through -9 specify the block size to be - 100,000 bytes through 900,000 bytes (the default) respec- - tively. At decompression time, the block size used for - compression is read from the header of the compressed - file, and bunzip2 then allocates itself just enough memory - to decompress the file. Since block sizes are stored in - compressed files, it follows that the flags -1 to -9 are - irrelevant to and so ignored during decompression. - - Compression and decompression requirements, in bytes, can - be estimated as: - - Compression: 400k + ( 8 x block size ) - - Decompression: 100k + ( 4 x block size ), or - 100k + ( 2.5 x block size ) - - Larger block sizes give rapidly diminishing marginal - returns. Most of the compression comes from the first two - or three hundred k of block size, a fact worth bearing in - mind when using bzip2 on small machines. It is also - important to appreciate that the decompression memory - requirement is set at compression time by the choice of - block size. - - For files compressed with the default 900k block size, - bunzip2 will require about 3700 kbytes to decompress. To - support decompression of any file on a 4 megabyte machine, - bunzip2 has an option to decompress using approximately - half this amount of memory, about 2300 kbytes. Decompres- - sion speed is also halved, so you should use this option - only where necessary. The relevant flag is -s. - - In general, try and use the largest block size memory con- - straints allow, since that maximises the compression - achieved. Compression and decompression speed are virtu- - ally unaffected by block size. - - Another significant point applies to files which fit in a - single block -- that means most files you'd encounter - using a large block size. The amount of real memory - touched is proportional to the size of the file, since the - file is smaller than a block. For example, compressing a - file 20,000 bytes long with the flag -9 will cause the - compressor to allocate around 7600k of memory, but only - touch 400k + 20000 * 8 = 560 kbytes of it. Similarly, the - decompressor will allocate 3700k but only touch 100k + - 20000 * 4 = 180 kbytes. - - Here is a table which summarises the maximum memory usage - for different block sizes. Also recorded is the total - compressed size for 14 files of the Calgary Text Compres- - sion Corpus totalling 3,141,622 bytes. This column gives - some feel for how compression varies with block size. - These figures tend to understate the advantage of larger - block sizes for larger files, since the Corpus is domi- - nated by smaller files. - - Compress Decompress Decompress Corpus - Flag usage usage -s usage Size - - -1 1200k 500k 350k 914704 - -2 2000k 900k 600k 877703 - -3 2800k 1300k 850k 860338 - -4 3600k 1700k 1100k 846899 - -5 4400k 2100k 1350k 845160 - -6 5200k 2500k 1600k 838626 - -7 6100k 2900k 1850k 834096 - -8 6800k 3300k 2100k 828642 - -9 7600k 3700k 2350k 828642 - - -RECOVERING DATA FROM DAMAGED FILES - bzip2 compresses files in blocks, usually 900kbytes long. - Each block is handled independently. If a media or trans- - mission error causes a multi-block .bz2 file to become - damaged, it may be possible to recover data from the - undamaged blocks in the file. - - The compressed representation of each block is delimited - by a 48-bit pattern, which makes it possible to find the - block boundaries with reasonable certainty. Each block - also carries its own 32-bit CRC, so damaged blocks can be - distinguished from undamaged ones. - - bzip2recover is a simple program whose purpose is to - search for blocks in .bz2 files, and write each block out - into its own .bz2 file. You can then use bzip2 -t to test - the integrity of the resulting files, and decompress those - which are undamaged. - - bzip2recover takes a single argument, the name of the dam- - aged file, and writes a number of files - "rec00001file.bz2", "rec00002file.bz2", etc, containing - the extracted blocks. The output filenames are - designed so that the use of wildcards in subsequent pro- - cessing -- for example, "bzip2 -dc rec*file.bz2 > recov- - ered_data" -- processes the files in the correct order. - - bzip2recover should be of most use dealing with large .bz2 - files, as these will contain many blocks. It is clearly - futile to use it on damaged single-block files, since a - damaged block cannot be recovered. If you wish to min- - imise any potential data loss through media or transmis- - sion errors, you might consider compressing with a smaller - block size. - - -PERFORMANCE NOTES - The sorting phase of compression gathers together similar - strings in the file. Because of this, files containing - very long runs of repeated symbols, like "aabaabaabaab - ..." (repeated several hundred times) may compress more - slowly than normal. Versions 0.9.5 and above fare much - better than previous versions in this respect. The ratio - between worst-case and average-case compression time is in - the region of 10:1. For previous versions, this figure - was more like 100:1. You can use the -vvvv option to mon- - itor progress in great detail, if you want. - - Decompression speed is unaffected by these phenomena. - - bzip2 usually allocates several megabytes of memory to - operate in, and then charges all over it in a fairly ran- - dom fashion. This means that performance, both for com- - pressing and decompressing, is largely determined by the - speed at which your machine can service cache misses. - Because of this, small changes to the code to reduce the - miss rate have been observed to give disproportionately - large performance improvements. I imagine bzip2 will per- - form best on machines with very large caches. - - -CAVEATS - I/O error messages are not as helpful as they could be. - bzip2 tries hard to detect I/O errors and exit cleanly, - but the details of what the problem is sometimes seem - rather misleading. - - This manual page pertains to version 1.0.3 of bzip2. Com- - pressed data created by this version is entirely forwards - and backwards compatible with the previous public - releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1 and - 1.0.2, but with the following exception: 0.9.0 and above - can correctly decompress multiple concatenated compressed - files. 0.1pl2 cannot do this; it will stop after decom- - pressing just the first file in the stream. - - bzip2recover versions prior to 1.0.2 used 32-bit integers - to represent bit positions in compressed files, so they - could not handle compressed files more than 512 megabytes - long. Versions 1.0.2 and above use 64-bit ints on some - platforms which support them (GNU supported targets, and - Windows). To establish whether or not bzip2recover was - built with such a limitation, run it without arguments. - In any event you can build yourself an unlimited version - if you can recompile it with MaybeUInt64 set to be an - unsigned 64-bit integer. - - -AUTHOR - Julian Seward, jsewardbzip.org. - - http://www.bzip.org - - The ideas embodied in bzip2 are due to (at least) the fol- - lowing people: Michael Burrows and David Wheeler (for the - block sorting transformation), David Wheeler (again, for - the Huffman coder), Peter Fenwick (for the structured cod- - ing model in the original bzip, and many refinements), and - Alistair Moffat, Radford Neal and Ian Witten (for the - arithmetic coder in the original bzip). I am much - indebted for their help, support and advice. See the man- - ual in the source distribution for pointers to sources of - documentation. Christian von Roques encouraged me to look - for faster sorting algorithms, so as to speed up compres- - sion. Bela Lubkin encouraged me to improve the worst-case - compression performance. Donna Robinson XMLised the docu- - mentation. The bz* scripts are derived from those of GNU - gzip. Many people sent patches, helped with portability - problems, lent machines, gave advice and were generally - helpful. - diff --git a/commands/bzip2/mk251.c b/commands/bzip2/mk251.c deleted file mode 100644 index 205778a84..000000000 --- a/commands/bzip2/mk251.c +++ /dev/null @@ -1,16 +0,0 @@ - -/* Spew out a long sequence of the byte 251. When fed to bzip2 - versions 1.0.0 or 1.0.1, causes it to die with internal error - 1007 in blocksort.c. This assertion misses an extremely rare - case, which is fixed in this version (1.0.2) and above. -*/ - -#include - -int main () -{ - int i; - for (i = 0; i < 48500000 ; i++) - putchar(251); - return 0; -} diff --git a/commands/bzip2/words0 b/commands/bzip2/words0 deleted file mode 100644 index 164a8ed28..000000000 --- a/commands/bzip2/words0 +++ /dev/null @@ -1,5 +0,0 @@ - -If compilation produces errors, or a large number of warnings, -please read README.COMPILATION.PROBLEMS -- you might be able to -adjust the flags in this Makefile to improve matters. - diff --git a/commands/bzip2recover/Makefile b/commands/bzip2recover/Makefile deleted file mode 100644 index 194f63c3f..000000000 --- a/commands/bzip2recover/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -NOMAN= - -.include - -PROG= bzip2recover -CPPFLAGS+= -I ${BZ2DIR} - -BZ2DIR= ${MINIXSRCDIR}/commands/bzip2 -.PATH: ${BZ2DIR} - -.include diff --git a/commands/tar/Makefile b/commands/tar/Makefile index 8f5735212..0cd1aebcd 100644 --- a/commands/tar/Makefile +++ b/commands/tar/Makefile @@ -1,3 +1,5 @@ +NEED_NBSDLIBC= yes + .include PROG= bsdtar diff --git a/commands/tar/bsdtar.c b/commands/tar/bsdtar.c index d8f828684..3730ff0f3 100644 --- a/commands/tar/bsdtar.c +++ b/commands/tar/bsdtar.c @@ -81,6 +81,10 @@ __FBSDID("$FreeBSD: src/usr.bin/tar/bsdtar.c,v 1.93 2008/11/08 04:43:24 kientzle #define _PATH_DEFTAPE "\\\\.\\tape0" #endif +#ifdef _PATH_DEFTAPE +#undef _PATH_DEFTAPE +#endif + #ifndef _PATH_DEFTAPE #define _PATH_DEFTAPE "/dev/tape" #endif diff --git a/commands/bzip2/CHANGES b/dist/bzip2/CHANGES similarity index 88% rename from commands/bzip2/CHANGES rename to dist/bzip2/CHANGES index e31b03a01..6e4f65e2e 100644 --- a/commands/bzip2/CHANGES +++ b/dist/bzip2/CHANGES @@ -1,3 +1,16 @@ + ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ 0.9.0 @@ -261,7 +274,7 @@ Fixes some minor bugs since the last version, 1.0.2. decompressor to crash, loop or access memory which does not belong to it. If you are using bzip2 or the library to decompress bitstreams from untrusted sources, an upgrade - to 1.0.3 is recommended. + to 1.0.3 is recommended. This fixes CAN-2005-1260. * The documentation has been converted to XML, from which html and pdf can be derived. @@ -273,3 +286,34 @@ Fixes some minor bugs since the last version, 1.0.2. * The BZ_NO_STDIO cpp symbol was not properly observed in 1.0.2. This has been fixed. + + +1.0.4 (20 Dec 06) +~~~~~~~~~~~~~~~~~ +Fixes some minor bugs since the last version, 1.0.3. + +* Fix file permissions race problem (CAN-2005-0953). + +* Avoid possible segfault in BZ2_bzclose. From Coverity's NetBSD + scan. + +* 'const'/prototype cleanups in the C code. + +* Change default install location to /usr/local, and handle multiple + 'make install's without error. + +* Sanitise file names more carefully in bzgrep. Fixes CAN-2005-0758 + to the extent that applies to bzgrep. + +* Use 'mktemp' rather than 'tempfile' in bzdiff. + +* Tighten up a couple of assertions in blocksort.c following automated + analysis. + +* Fix minor doc/comment bugs. + + +1.0.5 (10 Dec 07) +~~~~~~~~~~~~~~~~~ +Security fix only. Fixes CERT-FI 20469 as it applies to bzip2. + diff --git a/commands/bzip2/LICENSE b/dist/bzip2/LICENSE similarity index 84% rename from commands/bzip2/LICENSE rename to dist/bzip2/LICENSE index e60845b4d..f420cffb6 100644 --- a/commands/bzip2/LICENSE +++ b/dist/bzip2/LICENSE @@ -1,6 +1,8 @@ +-------------------------------------------------------------------------- + This program, "bzip2", the associated library "libbzip2", and all -documentation, are copyright (C) 1996-2005 Julian R Seward. All +documentation, are copyright (C) 1996-2007 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -34,7 +36,7 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Julian Seward, Cambridge, UK. -jseward@acm.org -bzip2/libbzip2 version 1.0.3 of 15 February 2005 +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.5 of 10 December 2007 +-------------------------------------------------------------------------- diff --git a/commands/bzip2/Makefile.orig b/dist/bzip2/Makefile similarity index 62% rename from commands/bzip2/Makefile.orig rename to dist/bzip2/Makefile index 54a54ef9a..6feffb61b 100644 --- a/commands/bzip2/Makefile.orig +++ b/dist/bzip2/Makefile @@ -1,22 +1,30 @@ +# ------------------------------------------------------------------ +# This file is part of bzip2/libbzip2, a program and library for +# lossless, block-sorting data compression. +# +# bzip2/libbzip2 version 1.0.5 of 10 December 2007 +# Copyright (C) 1996-2007 Julian Seward +# +# Please read the WARNING, DISCLAIMER and PATENTS sections in the +# README file. +# +# This program is released under the terms of the license contained +# in the file LICENSE. +# ------------------------------------------------------------------ SHELL=/bin/sh # To assist in cross-compiling -CC=exec cc +CC=clang AR=ar -ARFLAGS=cr RANLIB=ranlib LDFLAGS= -BIGFILES=#-D_FILE_OFFSET_BITS=64 -CFLAGS=-Wall -Winline -O -g $(BIGFILES) -Dlstat=stat -D_POSIX_SOURCE=1 +BIGFILES=-D_FILE_OFFSET_BITS=64 +CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) # Where you want it installed when you do 'make install' PREFIX=/usr -PREFIX_BIN=$(PREFIX)/bin -PREFIX_LIB=$(PREFIX)/lib -PREFIX_MAN=$(PREFIX)/man -PREFIX_INC=$(PREFIX)/include OBJS= blocksort.o \ @@ -27,10 +35,7 @@ OBJS= blocksort.o \ decompress.o \ bzlib.o -all: all_notest - -all_notest: libbz2.a bzip2 bzip2recover - chmem =8000000 bzip2 +all: libbz2.a bzip2 bzip2recover test bzip2: libbz2.a bzip2.o $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2 @@ -40,7 +45,7 @@ bzip2recover: bzip2recover.o libbz2.a: $(OBJS) rm -f libbz2.a - $(AR) $(ARFLAGS) libbz2.a $(OBJS) + $(AR) cq libbz2.a $(OBJS) @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \ -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \ echo $(RANLIB) libbz2.a ; \ @@ -48,9 +53,7 @@ libbz2.a: $(OBJS) fi check: test -test: bzip2 test_nodep - -test_nodep: +test: bzip2 @cat words1 ./bzip2 -1 < sample1.ref > sample1.rb2 ./bzip2 -2 < sample2.ref > sample2.rb2 @@ -67,44 +70,43 @@ test_nodep: @cat words3 install: bzip2 bzip2recover - if ( test ! -d $(PREFIX_BIN) ) ; then mkdir -p $(PREFIX_BIN) ; fi - if ( test ! -d $(PREFIX_LIB) ) ; then mkdir -p $(PREFIX_LIB) ; fi - if ( test ! -d $(PREFIX_MAN) ) ; then mkdir -p $(PREFIX_MAN) ; fi - if ( test ! -d $(PREFIX_MAN)/man1 ) ; then mkdir -p $(PREFIX_MAN)/man1 ; fi - if ( test ! -d $(PREFIX_INC) ) ; then mkdir -p $(PREFIX_INC) ; fi - install -S 8M -o bin bzip2 $(PREFIX_BIN)/bzip2 - install -S 4M -o bin bzip2 $(PREFIX_BIN)/bunzip2 - install -S 2450k -o bin bzip2 $(PREFIX_BIN)/smallbunzip2 - install -o bin bzip2 $(PREFIX_BIN)/bzcat - install -o bin bzip2recover $(PREFIX_BIN)/bzip2recover - chmod a+x $(PREFIX_BIN)/bzip2 - chmod a+x $(PREFIX_BIN)/bunzip2 - chmod a+x $(PREFIX_BIN)/bzcat - chmod a+x $(PREFIX_BIN)/bzip2recover - install -o bin bzip2.1 $(PREFIX_MAN)/man1 - chmod a+r $(PREFIX_MAN)/man1/bzip2.1 - install -o bin bzlib.h $(PREFIX_INC) - chmod a+r $(PREFIX_INC)/bzlib.h - install -o bin libbz2.a $(PREFIX_LIB) - chmod a+r $(PREFIX_LIB)/libbz2.a - install -o bin bzgrep $(PREFIX_BIN)/bzgrep - ln -f $(PREFIX_BIN)/bzgrep $(PREFIX_BIN)/bzegrep - ln -f $(PREFIX_BIN)/bzgrep $(PREFIX_BIN)/bzfgrep - chmod a+x $(PREFIX_BIN)/bzgrep - install -o bin bzmore $(PREFIX_BIN)/bzmore - ln -f $(PREFIX_BIN)/bzmore $(PREFIX_BIN)/bzless - chmod a+x $(PREFIX_BIN)/bzmore - install -o bin bzdiff $(PREFIX_BIN)/bzdiff - ln -f $(PREFIX_BIN)/bzdiff $(PREFIX_BIN)/bzcmp - chmod a+x $(PREFIX_BIN)/bzdiff - install -o bin bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX_MAN)/man1 - chmod a+r $(PREFIX_MAN)/man1/bzgrep.1 - chmod a+r $(PREFIX_MAN)/man1/bzmore.1 - chmod a+r $(PREFIX_MAN)/man1/bzdiff.1 - echo ".so man1/bzgrep.1" > $(PREFIX_MAN)/man1/bzegrep.1 - echo ".so man1/bzgrep.1" > $(PREFIX_MAN)/man1/bzfgrep.1 - echo ".so man1/bzmore.1" > $(PREFIX_MAN)/man1/bzless.1 - echo ".so man1/bzdiff.1" > $(PREFIX_MAN)/man1/bzcmp.1 + if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi + if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi + if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi + if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi + if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi + cp -f bzip2 $(PREFIX)/bin/bzip2 + cp -f bzip2 $(PREFIX)/bin/bunzip2 + cp -f bzip2 $(PREFIX)/bin/bzcat + cp -f bzip2recover $(PREFIX)/bin/bzip2recover + chmod a+x $(PREFIX)/bin/bzip2 + chmod a+x $(PREFIX)/bin/bunzip2 + chmod a+x $(PREFIX)/bin/bzcat + chmod a+x $(PREFIX)/bin/bzip2recover + cp -f bzip2.1 $(PREFIX)/man/man1 + chmod a+r $(PREFIX)/man/man1/bzip2.1 + cp -f bzlib.h $(PREFIX)/include + chmod a+r $(PREFIX)/include/bzlib.h + cp -f libbz2.a $(PREFIX)/lib + chmod a+r $(PREFIX)/lib/libbz2.a + cp -f bzgrep $(PREFIX)/bin/bzgrep + ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep + ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep + chmod a+x $(PREFIX)/bin/bzgrep + cp -f bzmore $(PREFIX)/bin/bzmore + ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless + chmod a+x $(PREFIX)/bin/bzmore + cp -f bzdiff $(PREFIX)/bin/bzdiff + ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp + chmod a+x $(PREFIX)/bin/bzdiff + cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 + chmod a+r $(PREFIX)/man/man1/bzgrep.1 + chmod a+r $(PREFIX)/man/man1/bzmore.1 + chmod a+r $(PREFIX)/man/man1/bzdiff.1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 + echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 + echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 + echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 clean: rm -f *.o libbz2.a bzip2 bzip2recover \ @@ -135,10 +137,10 @@ bzip2recover.o: bzip2recover.c distclean: clean rm -f manual.ps manual.html manual.pdf -DISTNAME=bzip2-1.0.3 +DISTNAME=bzip2-1.0.5 dist: check manual rm -f $(DISTNAME) - ln -sf . $(DISTNAME) + ln -s -f . $(DISTNAME) tar cvf $(DISTNAME).tar \ $(DISTNAME)/blocksort.c \ $(DISTNAME)/huffman.c \ @@ -178,7 +180,6 @@ dist: check manual $(DISTNAME)/libbz2.dsp \ $(DISTNAME)/dlltest.dsp \ $(DISTNAME)/makefile.msc \ - $(DISTNAME)/Y2K_INFO \ $(DISTNAME)/unzcrash.c \ $(DISTNAME)/spewG.c \ $(DISTNAME)/mk251.c \ diff --git a/dist/bzip2/Makefile-libbz2_so b/dist/bzip2/Makefile-libbz2_so new file mode 100644 index 000000000..9a13c77e4 --- /dev/null +++ b/dist/bzip2/Makefile-libbz2_so @@ -0,0 +1,59 @@ + +# This Makefile builds a shared version of the library, +# libbz2.so.1.0.4, with soname libbz2.so.1.0, +# at least on x86-Linux (RedHat 7.2), +# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98). +# Please see the README file for some important info +# about building the library like this. + +# ------------------------------------------------------------------ +# This file is part of bzip2/libbzip2, a program and library for +# lossless, block-sorting data compression. +# +# bzip2/libbzip2 version 1.0.5 of 10 December 2007 +# Copyright (C) 1996-2007 Julian Seward +# +# Please read the WARNING, DISCLAIMER and PATENTS sections in the +# README file. +# +# This program is released under the terms of the license contained +# in the file LICENSE. +# ------------------------------------------------------------------ + + +SHELL=/bin/sh +CC=gcc +BIGFILES=-D_FILE_OFFSET_BITS=64 +CFLAGS=-fpic -fPIC -Wall -Winline -O2 -g $(BIGFILES) + +OBJS= blocksort.o \ + huffman.o \ + crctable.o \ + randtable.o \ + compress.o \ + decompress.o \ + bzlib.o + +all: $(OBJS) + $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.4 $(OBJS) + $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.4 + rm -f libbz2.so.1.0 + ln -s libbz2.so.1.0.4 libbz2.so.1.0 + +clean: + rm -f $(OBJS) bzip2.o libbz2.so.1.0.4 libbz2.so.1.0 bzip2-shared + +blocksort.o: blocksort.c + $(CC) $(CFLAGS) -c blocksort.c +huffman.o: huffman.c + $(CC) $(CFLAGS) -c huffman.c +crctable.o: crctable.c + $(CC) $(CFLAGS) -c crctable.c +randtable.o: randtable.c + $(CC) $(CFLAGS) -c randtable.c +compress.o: compress.c + $(CC) $(CFLAGS) -c compress.c +decompress.o: decompress.c + $(CC) $(CFLAGS) -c decompress.c +bzlib.o: bzlib.c + $(CC) $(CFLAGS) -c bzlib.c diff --git a/commands/bzip2/README b/dist/bzip2/README similarity index 67% rename from commands/bzip2/README rename to dist/bzip2/README index 1aff4487e..e17a84e04 100644 --- a/commands/bzip2/README +++ b/dist/bzip2/README @@ -1,33 +1,48 @@ -This is the README for bzip2, a block-sorting file compressor, version -1.0.3. This version is fully compatible with the previous public -releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1 and 1.0.2. +This is the README for bzip2/libzip2. +This version is fully compatible with the previous public releases. -bzip2-1.0.3 is distributed under a BSD-style license. For details, -see the file LICENSE. +------------------------------------------------------------------ +This file is part of bzip2/libbzip2, a program and library for +lossless, block-sorting data compression. + +bzip2/libbzip2 version 1.0.5 of 10 December 2007 +Copyright (C) 1996-2007 Julian Seward + +Please read the WARNING, DISCLAIMER and PATENTS sections in this file. + +This program is released under the terms of the license contained +in the file LICENSE. +------------------------------------------------------------------ Complete documentation is available in Postscript form (manual.ps), PDF (manual.pdf) or html (manual.html). A plain-text version of the -manual page is available as bzip2.txt. A statement about Y2K issues -is now included in the file Y2K_INFO. +manual page is available as bzip2.txt. HOW TO BUILD -- UNIX -Type `make'. This builds the library libbz2.a and then the -programs bzip2 and bzip2recover. Six self-tests are run. -If the self-tests complete ok, carry on to installation: +Type 'make'. This builds the library libbz2.a and then the programs +bzip2 and bzip2recover. Six self-tests are run. If the self-tests +complete ok, carry on to installation: + +To install in /usr/local/bin, /usr/local/lib, /usr/local/man and +/usr/local/include, type -To install in /usr/bin, /usr/lib, /usr/man and /usr/include, type make install -To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type + +To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type + make install PREFIX=/xxx/yyy + If you are (justifiably) paranoid and want to see what 'make install' is going to do, you can first do + make -n install or make -n install PREFIX=/xxx/yyy respectively. -The -n instructs make to show the commands it would execute, but -not actually execute them. + +The -n instructs make to show the commands it would execute, but not +actually execute them. HOW TO BUILD -- UNIX, shared library libbz2.so. @@ -49,23 +64,25 @@ Important note for people upgrading .so's from 0.9.0/0.9.5 to version bzCompress to BZ2_bzCompress, to avoid namespace pollution. Unfortunately this means that the libbz2.so created by Makefile-libbz2_so will not work with any program which used an older -version of the library. Sorry. I do encourage library clients to -make the effort to upgrade to use version 1.0, since it is both faster -and more robust than previous versions. +version of the library. I do encourage library clients to make the +effort to upgrade to use version 1.0, since it is both faster and more +robust than previous versions. HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. It's difficult for me to support compilation on all these platforms. My approach is to collect binaries for these platforms, and put them -on the master web page (http://sources.redhat.com/bzip2). Look there. -However (FWIW), bzip2-1.0.X is very standard ANSI C and should compile +on the master web site (http://www.bzip.org). Look there. However +(FWIW), bzip2-1.0.X is very standard ANSI C and should compile unmodified with MS Visual C. If you have difficulties building, you might want to read README.COMPILATION.PROBLEMS. At least using MS Visual C++ 6, you can build from the unmodified sources by issuing, in a command shell: + nmake -f makefile.msc + (you may need to first run the MSVC-provided script VCVARS32.BAT so as to set up paths to the MSVC tools correctly). @@ -86,18 +103,19 @@ Please read and be aware of the following: WARNING: - This program (attempts to) compress data by performing several - non-trivial transformations on it. Unless you are 100% familiar - with *all* the algorithms contained herein, and with the - consequences of modifying them, you should NOT meddle with the - compression or decompression machinery. Incorrect changes can and - very likely *will* lead to disastrous loss of data. + This program and library (attempts to) compress data by + performing several non-trivial transformations on it. + Unless you are 100% familiar with *all* the algorithms + contained herein, and with the consequences of modifying them, + you should NOT meddle with the compression or decompression + machinery. Incorrect changes can and very likely *will* + lead to disastrous loss of data. DISCLAIMER: I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE - USE OF THIS PROGRAM, HOWSOEVER CAUSED. + USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED. Every compression of a file implies an assumption that the compressed file can be decompressed to reproduce the original. @@ -110,19 +128,18 @@ DISCLAIMER: PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER SMALL, THAT THE DATA WILL NOT BE RECOVERABLE. - That is not to say this program is inherently unreliable. Indeed, - I very much hope the opposite is true. bzip2 has been carefully - constructed and extensively tested. + That is not to say this program is inherently unreliable. + Indeed, I very much hope the opposite is true. bzip2/libbzip2 + has been carefully constructed and extensively tested. PATENTS: - To the best of my knowledge, bzip2 does not use any patented - algorithms. However, I do not have the resources to carry out - a patent search. Therefore I cannot give any guarantee of the - above statement. + To the best of my knowledge, bzip2/libbzip2 does not use any + patented algorithms. However, I do not have the resources + to carry out a patent search. Therefore I cannot give any + guarantee of the above statement. -End of legalities. WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ? @@ -156,21 +173,27 @@ WHAT'S NEW IN 1.0.3 ? See the CHANGES file. +WHAT'S NEW IN 1.0.4 ? + + See the CHANGES file. + +WHAT'S NEW IN 1.0.5 ? + + See the CHANGES file. + I hope you find bzip2 useful. Feel free to contact me at jseward@bzip.org if you have any suggestions or queries. Many people mailed me with comments, suggestions and patches after the releases of bzip-0.15, -bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1 and -1.0.2, and the changes in bzip2 are largely a result of this feedback. -I thank you for your comments. +bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, +1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this +feedback. I thank you for your comments. -At least for the time being, bzip2's "home" is (or can be reached via) -http://www.bzip.org +bzip2's "home" is http://www.bzip.org/ Julian Seward jseward@bzip.org - Cambridge, UK. 18 July 1996 (version 0.15) @@ -183,3 +206,5 @@ Cambridge, UK. 5 May 2000 (bzip2, version 1.0pre8) 30 December 2001 (bzip2, version 1.0.2pre1) 15 February 2005 (bzip2, version 1.0.3) +20 December 2006 (bzip2, version 1.0.4) +10 December 2007 (bzip2, version 1.0.5) diff --git a/commands/bzip2/README.COMPILATION.PROBLEMS b/dist/bzip2/README.COMPILATION.PROBLEMS similarity index 53% rename from commands/bzip2/README.COMPILATION.PROBLEMS rename to dist/bzip2/README.COMPILATION.PROBLEMS index f1bc396b7..22b95c6cb 100644 --- a/commands/bzip2/README.COMPILATION.PROBLEMS +++ b/dist/bzip2/README.COMPILATION.PROBLEMS @@ -1,32 +1,47 @@ +------------------------------------------------------------------ +This file is part of bzip2/libbzip2, a program and library for +lossless, block-sorting data compression. -bzip2-1.0.3 should compile without problems on the vast majority of +bzip2/libbzip2 version 1.0.5 of 10 December 2007 +Copyright (C) 1996-2007 Julian Seward + +Please read the WARNING, DISCLAIMER and PATENTS sections in the +README file. + +This program is released under the terms of the license contained +in the file LICENSE. +------------------------------------------------------------------ + +bzip2-1.0.5 should compile without problems on the vast majority of platforms. Using the supplied Makefile, I've built and tested it -myself for x86-linux and x86_64-linux. With makefile.msc, Visual C++ +myself for x86-linux and amd64-linux. With makefile.msc, Visual C++ 6.0 and nmake, you can build a native Win32 version too. Large file -support seems to work correctly on at least alpha-tru64unix and -x86-cygwin32 (on Windows 2000). +support seems to work correctly on at least on amd64-linux. When I say "large file" I mean a file of size 2,147,483,648 (2^31) bytes or above. Many older OSs can't handle files above this size, but many newer ones can. Large files are pretty huge -- most files you'll encounter are not Large Files. -Earlier versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide -variety of platforms without difficulty, and I hope this version will -continue in that tradition. However, in order to support large files, -I've had to include the define -D_FILE_OFFSET_BITS=64 in the Makefile. -This can cause problems. +Early versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide variety +of platforms without difficulty, and I hope this version will continue +in that tradition. However, in order to support large files, I've had +to include the define -D_FILE_OFFSET_BITS=64 in the Makefile. This +can cause problems. The technique of adding -D_FILE_OFFSET_BITS=64 to get large file support is, as far as I know, the Recommended Way to get correct large file support. For more details, see the Large File Support Specification, published by the Large File Summit, at + http://ftp.sas.com/standards/large.file As a general comment, if you get compilation errors which you think are related to large file support, try removing the above define from the Makefile, ie, delete the line + BIGFILES=-D_FILE_OFFSET_BITS=64 + from the Makefile, and do 'make clean ; make'. This will give you a version of bzip2 without large file support, which, for most applications, is probably not a problem. @@ -37,3 +52,7 @@ You can use the spewG.c program to generate huge files to test bzip2's large file support, if you are feeling paranoid. Be aware though that any compilation problems which affect bzip2 will also affect spewG.c, alas. + +AIX: I have reports that for large file support, you need to specify +-D_LARGE_FILES rather than -D_FILE_OFFSET_BITS=64. I have not tested +this myself. diff --git a/commands/bzip2/README.XML.STUFF b/dist/bzip2/README.XML.STUFF similarity index 52% rename from commands/bzip2/README.XML.STUFF rename to dist/bzip2/README.XML.STUFF index 0ff209f44..1a5b4c55a 100644 --- a/commands/bzip2/README.XML.STUFF +++ b/dist/bzip2/README.XML.STUFF @@ -1,3 +1,17 @@ + ---------------------------------------------------------------- + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ---------------------------------------------------------------- + The script xmlproc.sh takes an xml file as input, and processes it to create .pdf, .html or .ps output. It uses format.pl, a perl script to format
 blocks nicely,
@@ -9,16 +23,16 @@ version, year, etc.
 
 Usage:
 
-  xmlproc.sh -v manual.xml
+  ./xmlproc.sh -v manual.xml
   Validates an xml file to ensure no dtd-compliance errors
 
-  xmlproc.sh -html manual.xml
+  ./xmlproc.sh -html manual.xml
   Output: manual.html
 
-  xmlproc.sh -pdf manual.xml
+  ./xmlproc.sh -pdf manual.xml
   Output: manual.pdf
 
-  xmlproc.sh -ps manual.xml
+  ./xmlproc.sh -ps manual.xml
   Output: manual.ps
 
 
diff --git a/commands/bzip2/blocksort.c b/dist/bzip2/blocksort.c
similarity index 92%
rename from commands/bzip2/blocksort.c
rename to dist/bzip2/blocksort.c
index 33ec9f5dc..bd2dec157 100644
--- a/commands/bzip2/blocksort.c
+++ b/dist/bzip2/blocksort.c
@@ -4,66 +4,19 @@
 /*---                                           blocksort.c ---*/
 /*-------------------------------------------------------------*/
 
-/*--
-  This file is a part of bzip2 and/or libbzip2, a program and
-  library for lossless, block-sorting data compression.
-
-  Copyright (C) 1996-2005 Julian R Seward.  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-  1. Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-  2. 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.
-
-  3. Altered source versions must be plainly marked as such, and must
-     not be misrepresented as being the original software.
-
-  4. The name of the author may not be used to endorse or promote 
-     products derived from this software without specific prior written 
-     permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-  Julian Seward, Cambridge, UK.
-  jseward@bzip.org
-  bzip2/libbzip2 version 1.0 of 21 March 2000
-
-  This program is based on (at least) the work of:
-     Mike Burrows
-     David Wheeler
-     Peter Fenwick
-     Alistair Moffat
-     Radford Neal
-     Ian H. Witten
-     Robert Sedgewick
-     Jon L. Bentley
-
-  For more information on these sources, see the manual.
-
-  To get some idea how the block sorting algorithms in this file 
-  work, read my paper 
-     On the Performance of BWT Sorting Algorithms
-  in Proceedings of the IEEE Data Compression Conference 2000,
-  Snowbird, Utah, USA, 27-30 March 2000.  The main sort in this
-  file implements the algorithm called  cache  in the paper.
---*/
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.5 of 10 December 2007
+   Copyright (C) 1996-2007 Julian Seward 
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
 
 
 #include "bzlib_private.h"
@@ -155,7 +108,7 @@ void fallbackQSort3 ( UInt32* fmap,
 
    while (sp > 0) {
 
-      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE, 1004 );
+      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );
 
       fpop ( lo, hi );
       if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
@@ -690,7 +643,7 @@ void mainQSort3 ( UInt32* ptr,
 
    while (sp > 0) {
 
-      AssertH ( sp < MAIN_QSORT_STACK_SIZE, 1001 );
+      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );
 
       mpop ( lo, hi, d );
       if (hi - lo < MAIN_QSORT_SMALL_THRESH || 
diff --git a/commands/bzip2/bz-common.xsl b/dist/bzip2/bz-common.xsl
similarity index 100%
rename from commands/bzip2/bz-common.xsl
rename to dist/bzip2/bz-common.xsl
diff --git a/commands/bzip2/bz-fo.xsl b/dist/bzip2/bz-fo.xsl
similarity index 92%
rename from commands/bzip2/bz-fo.xsl
rename to dist/bzip2/bz-fo.xsl
index 7f2a7674f..ba3e30123 100644
--- a/commands/bzip2/bz-fo.xsl
+++ b/dist/bzip2/bz-fo.xsl
@@ -254,4 +254,23 @@
 
 
 
+
+
+
+  always
+  
+    
+  
+  
+    
+    pt
+  
+  
+    
+    pt
+  
+  false
+
+
+
 
diff --git a/commands/bzip2/bz-html.xsl b/dist/bzip2/bz-html.xsl
similarity index 100%
rename from commands/bzip2/bz-html.xsl
rename to dist/bzip2/bz-html.xsl
diff --git a/commands/bzip2/bzdiff b/dist/bzip2/bzdiff
similarity index 95%
rename from commands/bzip2/bzdiff
rename to dist/bzip2/bzdiff
index 3c2eb859f..6fc38f92d 100644
--- a/commands/bzip2/bzdiff
+++ b/dist/bzip2/bzdiff
@@ -12,7 +12,7 @@
 # necessary) and fed to cmp or diff.  The exit status from cmp
 # or diff is preserved.
 
-PATH="/usr/bin:$PATH"; export PATH
+PATH="/usr/bin:/bin:$PATH"; export PATH
 prog=`echo $0 | sed 's|.*/||'`
 case "$prog" in
   *cmp) comp=${CMP-cmp}   ;;
@@ -37,7 +37,7 @@ if test -z "$FILES"; then
 	echo "Usage: $prog [${comp}_options] file [file]"
 	exit 1
 fi
-tmp=`tempfile -d /tmp -p bz` || {
+tmp=`mktemp ${TMPDIR:-/tmp}/bzdiff.XXXXXXXXXX` || {
       echo 'cannot create a temporary file' >&2
       exit 1
 }
diff --git a/commands/bzip2/bzdiff.1 b/dist/bzip2/bzdiff.1
similarity index 100%
rename from commands/bzip2/bzdiff.1
rename to dist/bzip2/bzdiff.1
diff --git a/commands/bzip2/bzgrep b/dist/bzip2/bzgrep
similarity index 90%
rename from commands/bzip2/bzgrep
rename to dist/bzip2/bzgrep
index dbfc00e8d..9a04b8337 100644
--- a/commands/bzip2/bzgrep
+++ b/dist/bzip2/bzgrep
@@ -63,7 +63,11 @@ for i do
     bzip2 -cdfq "$i" | $grep $opt "$pat"
     r=$?
   else
-    bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
+    j=${i//\\/\\\\}
+    j=${j//|/\\|}
+    j=${j//&/\\&}
+    j=`printf "%s" "$j" | tr '\n' ' '`
+    bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${j}:|"
     r=$?
   fi
   test "$r" -ne 0 && res="$r"
diff --git a/commands/bzip2/bzgrep.1 b/dist/bzip2/bzgrep.1
similarity index 100%
rename from commands/bzip2/bzgrep.1
rename to dist/bzip2/bzgrep.1
diff --git a/commands/bzip2/bzip.css b/dist/bzip2/bzip.css
similarity index 100%
rename from commands/bzip2/bzip.css
rename to dist/bzip2/bzip.css
diff --git a/dist/bzip2/bzip2 b/dist/bzip2/bzip2
new file mode 100755
index 0000000000000000000000000000000000000000..8eb3bc8ac9353d33d3ffb3447f82095bc518378c
GIT binary patch
literal 362104
zcmd444SbZvwLiX_Y+%8_6EtGPDAA@$5N)DVi3v7|*$`*~K?$M)a$7Ie*0xA@E7~L^
z?5^x&^6=7vwf$j>)!y1(+oD2v5ikoh8<0u@Tt(%!(Nf)YsRnEzptAq(IrBWb&xWAX
zzwL$3hwRLmw=-wXIdjg;JTnVjRTXx-eUQ!gmtsq`*%4md=x~n3@3dnMP8n;%XCU&}@ZZ^*YNP*Y1kA8;I>RcQPAC5RhS_Y7O}E(w80l00>b{4|_xUpraca$b
zINiG=eLJTX{H<2})qAK%cR6cf9>=ZW^8ntxEdCFvx7|J+C8Q@^)@SH5*E>RKk1cjO
zSKQ`wic9IQ|5(HIa-hG>ea({@z@}hl^t`#(Y9oDIe`#~3)3?`se&fk6c|OpmIql*?
z%2XPCC*;VrJu}c5{^mV)Tll_MEGA~=Iz?TsLyXN0Ux>oOksJOa663f~z{Dpvly-Qj
z(@AZ#r)8}`s6B1;WBl`ie%m?g1
zz(!3Xsc)7}G!`!8ES-c45&dRSoEu)}w%f+rQQ!PhkjROm>1OR2L9V^`Ruui+`F5N9
zGU4h!wop@86Sr-pKSbC1uOq`OCUd-bNA4PoXL#E@!fcJ|?jf{J(1Nz;(7E^*AJ3BJ
z0Kt7b-IFm-UDH)HhOO=h7hD1r)*!^X)c&n`Z#>+oGczi>~nuXsmz7<{2qn;S%8rKS{iR
z0%6zp?6$)8`hibU!=ha-bogVQ=e_k|o3^q|Yi-lZZT2TuqvxTt&7c^OSALmj03uUs
zv#GVV?{aII2J9Y!J;N~fU{x*!<&4yCQtA>_;wuJh9>E?~u&WK&_X##v!7egjKOoqx
z43nP2?rVXkorm1}r
z=3DH=*SL4TNN7hd)JB%mfKa6bke4+(iYEBl+|OuR+q}JBU0CjI+vDwZK3EsMUXCZ)
zgqMC9-L1<_7vOxNQqHCX>wcg?kRT-Z7k+h)-4@IBH$pvldutaC^!8S{)1za(y5L0KL(vKYgH
zDkA@Z?ipErO^ZKml3;cs1+%-PYe8#Q%Nwk@2^{h9%LgJ8c_MbQ(QwG4Vh
z9!NAW4;&x%s$6+bu$FQsgs^*KLLR=84tW4}V-tm!QQ->J>~^Es2sL|MyjhcXspQFz
z<6ZBeTFq8-(qnrQ#9XNs*cbdkHn_&W~-X-ZNzEj(|qTn`seLX>e|Rg_Umeu%`Ydj8L%rhj$b`GZIM$jbiADEDPVS@f&T=aM!LT8OJnO
zg)vAcs|>%)EHozb&?siP&h=pF<)GRpBHnq2-Bz$O{2DsKh~{Y{ZL<2Xw95w^(3?)`
z+`(Cp*y_U~JvZEip#PZg9QM4fs@;)0`|i7DZATUD@DL)qFoXz?2G)_u7+0RZ$@)K>
z!6Vx=-ZW)AL(RE$8H~$le7?5*A)zX6L7y7Ovp#c^$&*gDD|MC3TGnDCj5mN#5|hse~_^m
zR;uQE2_X@R=hwCd<%J~}6|J>A!~V3>Ju=x|)V5BrYpqoo_6f&=&Op%fzNqin0N%Al
z)0tkfzNa~TUx`8phCg$JUaBI^^8)R!E{n4g$0g`w8
z!1x%{)JFQFO%5LKEZC{)o7K~teO}-vIbfR7!Vb^-?TaXAlS4PrZ#bLKAJD9!EB+D^
z#vSQAsHXhH`|sZ=UU6S3_J|Wn_Oy6Oe%0aM={YWrhC6BIy2TMK2X#qRh3{r+xo;Ms
z5LpPe&;-(w>?oAqYqxpZ(ulC5bD)IkoDiN+eEL4N_fFl=%(TCS@_B1p*5BX
zX2<}HCy_J!Bp0$N{F@HD;qi%=+tb+H@*jJGbe(4qE5Dwhqyx<%XbUwGZRB=D4Fkm1iy)(X
z>~0`aetNw2T8$@RwI^)lD%m8ZNX><<>`{xeIZvU5bC|_`
z4hsqs;pH^iKRQmR^V*N*dk+0D1*I86XI7#4-$Y7+KKl^U{mc5$=U&6sT!U2UUyamC
z%qdHrKopv1WBZ>5IyWtUZJ-mXUGl<*n3kK#!(WxmR&5qyUC^haT5?Bi)KM$3sDsqs
zWtKYjpubjvzXW^QLafb*nmzSg&V_GJ2+X4USj_zYZONtieuXKO_38?;GRW54Mw8b1
zwC6BKj*r0{-H2Hu=1vhovN10GhmGb}|3Ksp`8R_LpF+N^HTa`UZqUf4Em?@aXg_WX
zTwpO42b0gBOjky_0D&*ZlahvAq2HCnKdU(}FGr)E2G=y87dD
zklC=$X|`}eZ+Ls*D*p$FZ_cR~fK3rjR|_!C0Bl{VjEE7w9knRz7h!PxZ4D!URJyrd
znn3Q)K+ZtT{iyD*A)L!|vvmJ770T58GgK%;_s>)zS{Fh8Dk+&UGxaNdKviiF^rN
zdlKsw7KV;e6hyGj7XSSbXx4s42CX|v1ajYJm8B%4B$_l6|H~tQ$Xo$p9vEUnWABBq_BBLKvQj9$`|vpC-=Lb0B?cW$w#y
zWUn@nHI|u8J=9~-Llc0kNuolX}df)=GIwhdXpy(^%Z(P;;b!(+3R
zW*!E-pLhxha>&z^jM>D@vJP1+{Riz5`yVvQ-%dnHQFvw%_ckIMCDvF~^YxHh$-*yn
zRt9?pg*@ZY-_v|mSmeY_`9#RSg8q?S=(w;1NyEeOXX7$Tm^lI@(5bV*-_qYKxsrYY
zD+iK7*%f>@Be3#$1`IF&&cMp&7?1`)K!29Px`Pt82cubm$5Sa73`Q~n`WjA4F#yhh
z{(A=4si6ON6!zN?mTH9k8vqIZmi}f*om8G&Ns++H7)|io7?fQEz>
zh`J8Yt4FmNUHIRL@OCQEgJi_Fp%jr-mCCrVm%(@JLQ)5ki26uE8yT0{u=<9QC_N*H
zBpNBB)EAv9X*ZPujM*MVuE|jFKNv-b5~|1@Lkx_G762Vb#a}isCXxVz|1(bE{|SVd
z!qh1P>pf_n2EZtJ6xogdMB@Vxb^j%RUIvK95Fm8_j{N|E1fz8tXvF`B_%3Y}K(jlw
zQ3vqz+EHy7HWsO&EXI5`dNZslHv@f1%VEgOZAeWU#o=L?FG*R}fVoX`Vg}5KgnTJi
z22y16On71q$*C*+#0LI7th>S_v8E1QdYF}MvEkM>j^`apPX^N2hk5@br)L}KO*_a7
zX7_$$Bj(X?Y&c}?Hy6PiitoRf{&LGG@J;{z@(`>plE0kCcAbv7A^#1w?1q!kMv9Hp
zCD3G#c_-3IS=AnZS0;X&&>}r^P)+YVOeOXVu*Q!ruJE=ANlI
ztvR0l{(c)ZXLz5{!Et+%{K!*~zT^v(Oe)%ibpTA8K{<9^
zE}YQzfofI2m}?(|mmFzT>XIuQfNGMR^Y41x&)Xv_kcWEzHmW-dV*eQv%qRB#cdpZV
z&y02K);O`P1AdLgJ>SP!m_Ye&B;0e&M+`&UVKusLP*%eXW9}Xp0bV@weOvk5brrV?WUq);-
z`@e8g$RN`Fy?v?)@O-F`Wy`VA+t+6&`
z^_^cP!_SyJegOfF`_3-*oxh@dXX|+il4Ps@ycsnl`_Ffxo<9EbH^2|#%NEx;p
z0x>xKyN!@?NPhtPUUEN_N&GFu3)=K8Y+42*ohXvD9
z>O-{3FyST;w*HV!^Vh%%m)s=0-fYQ5^p%|`X!z637Y9a^mQ{L=pH|6pH<*>2XQ@Q$
zjntOz!(UIC)M*5$NjJL8Cj6xsOSzK4)6{DBLo^354%Wg(`)ch#YrT;65}~W$ViR_(
z6Q{vPr|vO%NRR2RL!{}RzMdFC_^H>LuN*uhU5AJ>3Mt5_=@adOG4=L3G+ziiH
z(lIlgMljL=v|tdv8GV-3hrA~~)O=q>NBle8Y2FhKPd2ER#j6XL{tb5!YTgze0(MXX
z`5g7zbtt+d*`Kemc;3Y_}e4I7POr=q-!d%2hl6YYzd9CkT
zQFQhexbV4WlG!_elD57g{pk|-@^A|bgqWYSnN01DA+Y0*`sEA{cobIwsh=6OgvWhG%YsG
zFHp~?IGES|Ny$MOB|
z3YLXOpAsQZ@>-lxtYZ0x1fF09WP8Py+GBr5a(qm47q}yGplU4vcKxi
zr)C_vC8U35Q+55*bdH6lzj_DN?jRRgIn$lcdEw`<#T}jnQ($8wRrMrACsVYOqAMu+
z6-4Ggm=m6aKbms9_ev=(_<$fq2}lHjeu;4ZjTs&2U3aJKFsP*o^K6*du>K
zkuYAAJ@VfHNV+UoX*h}6qNM~fSC2_K(w<@}OQs_q+~Qr(SIT|c|x3(MnfXPi8~;Xs1%Rn8|na&JR7!l3a54E$aJA*?oI5f+d}?((M!@m
zn(u%6bkbq9%Qk?TCI$N4()cklSj~xth=mec+TWyTAG4^OXIQ}~c)n)PMgv}oHfg2(
z)5dCyUEZhF)Z|wG4sEls2eb@lAt9j!v?WdGEDKaW9?)*!Woow75U#ifbPIbxy5{>x0h{Yc?@ul*=9A%dOp{2Za5Hx=i
z*=ah{7S_|(p$Eu(^WQ|^_;7nF)JAyjtDNk<@d=u}XceI4W#W*23?S$L)0~W~MmQV*
z3gLb9=Vs8Lzam)jr6P0I;7C&&!iF6}xRD)V;`sAdfW#IW9XqdCoMwAnqv~lyJ<%VS
zHc7uW&=*wBHOLw6eG~eGx&;ce{nyt(hU5}@BWQ+y37Ml;_ty!d%6zKwm&m2gVA`8@
z&|In}=5DItV$`-VgK}Zv+P1NqLPRqjPwROyV_P0=Ip$crn2j*LlKS>Z=4uNvt7C*$
zU;yUQ_e41V*dO{ZF{zXDo(DQ_cY`7{zha=x36_Ykf&S10`^9|w>G;AXAY5}$11e$}
z7=q@Nsz#w6)Oyy4?}MqQPR`wjHskBrR{9w2*`7_b_c%(ObrbXAO~6m5CdzGeJ`Z1i
z)rptY@lEQl=F0@>Omjx_4?t`+o!j$aMn8cJy6Z9Pv^@wr0?;;dO+1n{g)vx;d<)j^
zV7hyPmY-m^@=>nVeLNOyQf+!u*$!kAnX?|#c@Aob&PxKVwp987A#?fs_^z=zI
zT^>h{f&|lQ
ztsVCT|A-vH@Odqpt@IWUrW+3C0lp_>;
z2fLS5x#tZ!VU!DWQakwnMY9I2wJ!G}OL?SSg#WqL^6AOt(~XKYcv=NVUpZ%!`0v+`WIiX*g(~9PsAbb%wmLr|JX)!6HAn|aVV?P^@;cv
zz^P!1QwZkD9Dfq^YK#94X7aafyo@5Q4pH4BC+FhSaeAmCw`a4%xsm>O8%EhY149*~
zGPXFJvSN%#95p~^?!UJvo0yX03%8j838K@LTlQY#%7X8S{WA2-k-Z)|a
zEu%QF*ntYzv5Za66%#U$+_as2i+)lwk!mSHO*?E38<)(IQ!=n-nk8?~^zU`!kiF*)
zIeiQX3=WsarjL?SGLbx_4=n36m_KIp0<i|+?5
z>0fAq`p{~Eg8-q$_ZV=ocpgID?SB(@S4vlgSbQ&{Fr~zVd~tiOm@+Cf0rnB-H6=$h
z;=M6mO4a5x|r?w
zs`tZGZ87;;8>mCE+{b%5@J(SX#r^6FBoN-1-MyFV!Ix`(8mur)`@XhKC}L9$xVA;M
ztE^my=3j@HY)CJ9*kJ&k0wDZ6!SlQg;}m>hot$1%G`)(y
zO{x2CsDcNY-Sp^x04=W2bGxiaFDg^DdnSeNKpnm|PI4D>6NI{_Ah~*iExc4#)D%@z
zu~|}=f$F&%M3QJqL7R7ngNMp0{|R}2AV;s5fsbwT+XAkm(aRI(6-h!+gDuk?gnV6d8--|+a&%jt|HU;GLD%nuueJIoBb`-u^x6SGLpzu|#h1tEq;f*;w
zml6Ry7a4um7FUyCfV|q0TM!CWloO_*3dPVBilHAd8CrcPL%Je~q3;Dp#U3FcMDOqy
zY?128>C@05bXzs_IzqC+k>7>^)BLoA1BcK2{-I1vABSGrsizJ()rn5xo3S-^Pg<-r
zeT`jCE|=3Q3%fM^2CC&|??MOcsnHakJXWIUK&^FL;U0I9_oN-$Q;!nnq7xIi*7{n(
z_TXF2>oXrO!2txpDedJ$XMkq8vZ6eYo)W7l7Y$>hO-(0>>oorZVECpJ%z*=O(&+pv
zQB}j(PzA)7&aopEX8Po1BEOAEgw+?s}q)`@v+CZzhyop9ST}4+v8O>u)7v
zJ@bo6SWiW&({)r<5;0I;I39bnk}_ZSfik|I-t*8&iCIVs?L5BPZ?zT`#4*udtO)ic1@RY-H
z#PI&6AaNp4IV#jR&CJ?Z6Ax9Hp^`CFT+GNAg$iu)(2I9Q7tjN4CG%-af{guyZjIcOcge{?8{x_X)`Ga46+f^<7D9V3o~GuL7I
zB8?6SM5mei$F9S&Bm*rqPj&`ilvX(9k~ts)8SGgF+hC|(pT3eMp23hwIUt4t15jD4
zGE>gWsu1(C{Kp`%CE3z-*t;MTO|BopO?nqVS3WM+l%Pf73CqS33?=S4*k9PL`F?~v
zh3#9h)f&^5eoNsTDoH2hAS;VS^?^X8^S*hxWT6PpAz3-D@QBLny&0J|@F?tErjO0&
zI)#tl3R~8fqZMuPE83KH(Vq8;_mti9mgtphXn2L^pxi(sF6z6r_1Tlftli?}uJ^Ro
z;v0i+rZm3k*!O<$os6b;P=RgGpT&Z4vILUi`2y%7Cud2AUNQ+fuOhQlOwMXLVS`d6
zLy`@fO5{O`tPaz1*AnV#QT2Y!*Mp(eT949V>k1rg+*xp>sQQ5WJhGZ9i}~|w6oidL
z`o5_CkkPfTgD6{7*Oa}Yrw{KsA!qdzZkDQlUD}i*;z(W>&3SK0&p~Z{dV{F$?0R2%
zy3wDTW%cgUx|CYqDgGoH#-U3P?6dDrilsj}{q;xlkHPS%j*tP6=*Uk&Y_lWQ`Ti{X
zv)j_2&VKr{`!n??)zY6D=-Si9NAu4_Hxs?sk3Be}7lyo?CH@C2`1dy+2R;-24u!wg
zx{KKg=WO>D?DB4Ni0SDGoO7%=+ddgzU@^T|R)dMM9|FeJ#6g9!`oL)vhfw@e>|?Th
zu%J^^6ytUi`j+z%5{}5LI4zLSmrxo10{wI2pikF77a&hu|3p=Rv(rCYk@;Vzf9$M(
zJYoI&cEOsn$OCn9IjPCkZAC89A*6ANBST5_Ts^=!S%-{Fpf}ghkJZp0&-SAqr3*vv
zSRh=aKU^4n$GC+42nV|}V9jW@R97cAi8LrVt5T3kDHM4O%{H$%vH&29LU5UyO<)#E
zD1`X@rT7#2+qd+L`mI7#@9qk-esc_v)uukM;I~_x5)}$PtBfC3G7j`K|140eD2~mC
z1FhIt?3uH`C%eLej49l4WCk5b;9`;2phHYfPqhDoc>6n(=W{)CXxB-a&wM{t^w_0M
zIVz6k?IP>;EmS>O$!lgQkRW+=*n@vb3A{#gSONzK-MA#7dkfPn&HdTX(uOT?Fj_<3
z^ScgyR{1;F&-{PTnE%uIk-x*n{7;krqsR~!zVBeUSFsFF{*y8JcLydr@0+Y9|LQOt
zlfqrb3|Xo&%Ozy2iRwc#eL2}GPV##iGI2{%j+~t(iy!A1yCL%yF*~d2!=xE|3Ndp-
zrkr(HzsoLuMoOu0yXN}}OV|C$4I3!^j(Q6d
zW$dHkNHF4*wLN0eIL748I3^DRlRFcbl(FqFg|a@ZFi8P8iYYXJBXqA-$z1GyxHeKJsk3pjsSf#
z1Gl6{OjdoLj=rxnMgd-47Vadl+D+yt)E?Gvb%;l)@0P~)7Hl)-wRlUF@s_mK9$eui
z9w-imouZUlyFzrxO0=i!v<0x!Did~Ei9u^vUJEkKv4uSbI}G=hc-zyInvL8HZ4oy(
zJLJ4^!qY9+Fq?Tg<-B6y*>9S%yXCy}=1OOv`k)N3wG2KCka1fos&`1(uNeYdTaqbU
z8(=3#o(Er>_O_?H$kSmkj)$eOEfA!Ns=FncNnavf4!-9^)8Id9vHAe)%EERxE-X6`
zeW<80uFaX5E$;;Et_Uc2i>cbUeeWQr0O%hA*Q0*`M
z2L>eMA`cDxOK{jfV6Vt802j5;xVzDW^t9nl54r%v^P|W@^aP4H(S_%b6*C8+?s!DB
zE7Vb${{0l;*-cF$0~T-F1R2G@K^UWleigpV3F-^hq#Ea(vBp%RMq+$a=e|2$6+t{T
zN!47OR1NWFQMF0;kGU8965AV0L#^I+2j(2yVK>aA8c`zhB3Pdn%ksd0hmUuOqsLz_
z+@)1?>F(in;n@s!QlYlvdsAz}TC3+^bbPXYr&A|Spc+{pZmvEU&}htF!gpr{AF!*X
z7FT%8CW!iQNx@Dg{Lc7jL(l&%eV9S}HqLuy5qsL1+WYOEp~8U^Ag77K-DmldZx)Woeal*JozS#YFzomtGc=zuFI&yw}sgpSDmF
zzpqm5r?>}%XloTm8L)l^x@71jAe{5TVX{7}DMni<4-W9wXQs`+sNfBJFUz~Bp#h+7
ztl*8vVI*TEM_Yea`myaLZX*kh0N6qUPO2#IMSEEhK7Rb_s0tmB>E6GiDrl;)JO3MQA2NV=p4Wu
zmkEC?^vKglqr?1S>r?nk6D@CVL3LnI|MzW@G`suyh(y%8l}YB=Woe$Wff9ogWH6~H
zx$5zYQR{<$kVCN+n!b@6dMR%^-zA_v6DQ>s{>O`Clz9fr0owW!I%&MZXrkU38mM~c
z{*`Kid-wl1IZa~AdLUYF5lq;qPo1yGk*+MT0dyNN1$cv)f;NGOH!y^1Cy>nqhBto7nYF6`I&2x>x36V=VmfpBQ4d&Gr;?U4hLCx1oQ;;h?
z)JV)i;K04xmWZ54sp?`&vWRFEIY0qK99jo$5~`eGK)~#;Z29Ib65E>
zHfBUf^JW>nYNRr1?7xDoTsi3U;aA@_AiphqYzy1u{*w?5v`91|F3|iD0I&_C`Q1#A
z44daFBb{mHxtL^p)LJG{qSW(LiYPRcGB>UQDv(QIXEG_+YKCPI475_PXBd`EFc3_^
z)-WuGU`g`N8g&R$hY3j3^rRaC2As;nm~}8MJ(EG(jcUu%;92nBI4=GUii-_YJbKXF
z&oTKey}$OZN2lx$UgNFLa6EXG^khSeL-JR)VKZ@M5cdW)og(?te!RoC+cPj{TO(Y^
z?1DF_Ce8OD4UESb*X~h@C$xJ!ADt89e8g+e-P;j2Rs7GfS}V5u-$>N@OEb5j=~p7&
z2lLaEJ@q;@q4AZn#}x31%KlhGc0n8b*JdqHmF18;Uz7;`nK0QC(Vr)#H4YHCXEL3p
zGo5Orq>6DkKvPX5&Ii1}lZt1snqBymfR|<$r50ii8Y^XxSd@4jNNB_XGXS;JDt20DpzM_iYc}>5?A$StB
zOm1ph<23z--EZ2P!1Sz|rI`)?+uYL>AX=5s?Z%Ad9-;DsMKJfcuT~i-79H8RwSzj~
z9-0t_SC1)S`1ueL2FGmPocD2SCckI*;Tko+Ueb4d9ZYgueHc^hSW5w#P(v=VSHJ@5
zhDL>vB_Z+>Qcd)&g$Zj*;ir%-(H$cpvIJ1lC>{u3k{*bcbblv7B?B0}i?CfnnovAK
znp3ZEVDdF*;jlKc1UsDC`U#}!_@cQ;9m&sDDq-^+>eE#6EK7SYJF?lPHK*lvqolji
zC`ps&32XPGlVGjQV78}l=x}W0{F3?~{;U}`{y&pALP$9!0feOVi&0fuO
zJ^8-(Ah&pg%sKH0Sqm_@mHmOmL|7K#D5eXX9}c+#sNDT4t~ib6st%AIck#uip8%0t43%pBPMN)(
z_{)^9a_Sjx6>B~my96_nRkEK(&yztyL#Di}&eBWCK~NbN^U0IiZ0||z<^Gz|>vNRX
zpe_C>q6rH;fN(B<>FtQ~!;1ZL)CD<~oqrt$q%u
zpM&%hm~nRd+Oj&EW(QcoSPz1vxjKbs2VM1l0~TgTmTrHOSg8oC>fZ*MEI=`j)p2T=H+kI`GVYFw1H4|an
zITXFKR6$~bKNUCbWF2YayW{7390jo`7An5yPWSdc=(&KuYmbf$@%3e>(-yrzYdwG?
zoEO-=ZJo!qJG63aIyc)((bN`Q=c~=qbN#Wo8y>XHePKS%BDoHPAGiRAAH}LPN{#0U
z-$l@nkD*^f~=ML2UG51ZR({=XjU?Nd}v?(upPYl{bMA9aAk(81nME*2>
z)A3^qKleUl>U!OOFHnOhXGrrdH@XN8pOzasRvnXsuH{1G|G@%&SwY)I{*>`0_XQjI
z!^M}}ES|Iei$<$y2MsT?3-nVGe-Lt5>Z)~yk3w7&bDYLcSvZbS?euOW)#q?u1I~sg
zlca83AA#S(KR*t4qWUB6P6s|pcc<}@Ht&usm>*VtQ|Djlj?Q#=D$rI=QcR?@s(Xpl
zCqM{qeXsrEw&R_HpjtAm_Dew-4^#2c
z8;@PcJxqOc8p5G?sDdY+g0kF^!v})m{l#?WkUR(BBrP?fP3{29DV*3--eAKSVys!(
z=rD|rQf;+ZO_8Nz<<Nsk0+5mg3R82#cGuK3~P$PZd
zP5(lTGmH=>>qdg8`MT*a9mNG3%F=Qi@_s-rCpsP9EBIGFOQ~2PeMN9c3OY*&2fS`D
z7DSBGwFr4%q=Sqpb-56YOmI*9i!N}HBfm4TQ2Wj^XbcVwhQIiG2v(F+(^E6;+r-o{
z-i=f{zB|QDE4EORfpA%!G+u4Z_}TZ?pra&*%c+DnI%iaN(}JUJ=}IFSXJ=sFPaZZpB-X
zg3mvrtqPD)-d>f^7e;&GtbpSpoF2tSSCxE(+v|1;4)oWaH<+)rb{XA6&$gZ3GahMe
z$-rAc9}u6Z>+K!5@H~n!5uy|2163+$!H0N6^*&l7Rmi92XWn<{#ylkhO1bR=Zl0W7C|HUadAQy2_
zw5I~-!>+t`ab#1e8r9bmeYdt#jCN>$8sk}^`r|yqcs^p*uL4wmQh(_D^1q`$SN@y&
zbKAeEKTNl`2E9(2fF;L^@nISphis38Z!QOS#>sAB&B@|Of;p}8HF57h&!2G?DTy

(VDifp@Z*#!`D0W5IUpCC{GtNHFB?g3J?Ir`>RHA0S*kHv zI!gH0!qJkYIl{l11G&P#3V~4RG!%ph`V1lz+CXc$efrzD8PgQf+}UE6)G246C52j$ zlctpl28c=1O5o3MH6_CT81gI_t)jZaPsl-KW5L>~H!eUy*fONDslo8o1F?p(h1+j9 zzo0GPOZz)YmlSbbb=aq*IYaoL0%409l@pQrelr1 zAQp^`{K6J0u9pvt$t~1voH`i@LO1&cQpW=RHGowJF4_D`YJS`f&ww)i$^^6e9i@}# zu_iU&>t&~c;gR~Zlv7pG$w_N@`v5xX%@iNi<{f z_{DsS7!%R#212q7j7a_PZlZ}iwQiK?lr`nDWE$Dyw4iPn?vB-#$$Z2wQIfb|8t%b` z4Xu}?D0TodEdAqGRALj=j~k(=Yi$cJfw{O5#|Xpk?IeR4vri(qX$xiQ0P88PM>$)a zOF@aL6_hsQ>%OF*Yrv=qN*r5vv4Y+WUqkzO8=d*U(LnAkaV4=n?ERI*(0N^3$t~0- z9>G@gI(lpBzFqV!4HS~zQgFo&fw4~PD0S`^U0FraDORqazdTyYB=_kj$F~qn>crgm zj11SSB7mL_EI1ayUIVO=qIE3UoMRIpIIM<$n*MYAwaABfg$8FuGx4JRsQ!?>a9jQ0 zBGvARx;OO+Xqf6Q;^rH^=H-U%Sd{l}p}xUs_AkS44*yj{4uMGJj(fXLNu6@#1#!F= zpA0nXoHytVo$~FJjI`$3qp(*scv657`96vxW*b9=6(hw|;D`*ll4TvA?@L7*xOX3D zquV~v?!^DmFXMM7-A}4+AT{nMsif{l8-T@vB7sCC50?Lp8a|2h;^D+bDlyd#+_DjULtiGp^1Wj3UwN7HH4af9KuGs z;25Rs2H=ENPB5Uq0FK7R#KhNzqV(@(5HXOR4i4#{Xth&cKId7C^U58Rb$RZOD9qd- z9@|Nbv{qF?gAO4>B;;?yUsBvj`cbDeatd|5lW??bj;_WP`$}%{V&4{OXzntTUbrcM z@S=jo{b$rt_}eJb6r#tWCVTcbZlT`TmA1iXBcg`RQysT&wbtvj)=eY@IIuqGxOk{n zYkiKs;sSI4q|ShT1Sr)C=wKWSQ_#XPZ!n`0$5c#-ru7gd2x6Dey9qyLKW)i>;vBl# z?_0+IAQstzuwsckT>ntuc}=p))7DqbO9{T|5PB!I4jJ4$m890`KCCR`W z7+9PP9LGS?EtWC5iGgF2fyE5WPX^x1z%j|d5(bV+29_}}HyK#Yz?@`Y1p~8_ft3u* zN(N41U}iF~ih&u)z{w0uPX^X7(3uRpm4S|A;4}u>l7Z71_z_E-A%#`*W-zcf8F(iH z|DFt-$-tgu;A{rciEYbp%wb^I3M`-ZwP3eH_zy8Kh2&i-o!}e1j3O^gjv&!FiV;dW<@i?^N?=@v!Y@?GqQ>> zFe8syBP*6Y+NOE|+4KHn0~w1kIS!daH^2unEI628n5&as5Au!M6h;VUiSQI_y%OL&YW ze61y%ZwX$HgeZ?J^NS;9A2!o`;G&6aS9C0u3+ms`RWmT;vdJjoKSvVFJitX;-%+T}J{$Cmt@!11B{pfw;KC~D6tC!8It}@hBk3qDDW& z5z+_r;W3t4l+P+3f12y^k%J0-@DyU~w$dFkd>|uz7?r%D5jTvm>)N!Pw83Q0KFKa~ ziQpe^Z<^-+BhCU~f0vg&ZmYoRkA|hC7iekeN9!qN8P+T5U0AFUJcA!kkFiREEiSn1 zO{5W;b;=-DK1O(~T#dh0f4n)P;Ei@xKelnZ+&RmdpShIoI}Wt)&n@HL4MaTAz-s{> zlRzZEl{NEvTVUC(z^Ej~i#MKDYVg_opOC)U43hIQ84aW{D!d{(cUghC67fO~QHNVr z%SsJ5DE&CB@O7=~^}>_dl#`{Ep7*`6^Xt;l>CM#XpS5DqwZEI3tRjrXXrj6#@~&VVz&Ywogk--Vk{7z92{>+&4^>SN4^^oug5AchnX1dXtygfRxTFf}>mxy|ysj63K5fMuh~lyi zXI&x9H=n6Klu}!CWvUVC7cT1uE%b>ql>E`!29c3gw=L^;YOESJ58+<%4z+k$^Zfyc zsr3$Kl*Zx$8%~V^M_1qSp9$Z8Pyb8Me=l=nhUz9%5s|=q0>nvGjAAYn=3l*qM9EYv zH5O$-ha3BH#zR#gM!iFvik6F0N%Tz6<2rM{ky+}K`QcLL2l+S&Js4s;4XD~{+?Hzc zjk9jtT$A5ue=%M^XAEM0kpunm8)>M#F15UhJ>3IwhVgFGjQWk`*d}6sJq^5C>lMe7_=(feMZvk%HP=L5bj+XD{ejc?0mea%+8@73E`YvVP$eHDl}r4~0lAEHFX>Aa zV0}p^ukyM!Ac2k~Sj8hnp{r&dOtm~kG2;?rbObuImIV-X?5h|UE?G(#YR3NCY50Mj z*pDUo8fWVBvyd+XKicN`B>XB*!%tiKFli|aYmw5opQ(M~SH{wijAVYDfq_)J3^ZTH zct=6t3V_v^)-8OTlXu)yfAcJS{H{=ZjERl7nGCxSGXnaGQ=8h7g3IYhnz7f!>}r*N zwH3qys&+ucN@6U1VnJb$7sZ1HbGdNajxU2O9JN$zS|(>Xu#nUiCe4GeD#2mr{Quc&I3)Yl6~aqS*AyOuTX(gWFIj-xbD2J zydz07mK~?MsD#@7lPi_)J8e>mnhxZu z0YB!wWY#UOah~J!8+?w_51ZX=&Yi3LhkMi+zg6cb{~5;y&RO|A{~V_u4q%+q{5Sj@ zrypK&KBwu26CLNY{AQoy^te_ar)u$@N?S#C_l&P zS838cnPQPjAIQ^!dXx#Uz(>SBp-pm*)uv|M#o^of1>jYbc~^h zzxZ_1NrxBt{G*PP#L1#dvEz%YIPj@E9aCLtIh0Y0%Q+hPin0uxIpKpDyo-**1eRL| zDie1OSogdC`TGWv?vJ3ykpCU`N6e>otUK3q-$MM}jnD5s4A;M@KjZ#Q{i*pk^=Fyc zpMLJcpbL2L`rEZQD&pO$ZrRDf6&OtnH~4v;n&XLR? zgI99<-j{>x;RRouqfV-Laejo44d9acmzs7^JA8kZXs5GzVvoL*&snIilQm!-PQe*h zO4FBKxdI_eN_dBvGHPXV%FFST(T^sltc|CP`Ehc}Pva@qK9-!)h?K~Z7wJrH{JbLF z|HKarO7k>~*t5_ne@?WBx+HGz;9&gxntV_lt{I9XzTAV8=`bA!sNR;2F96UJg7hm*2yI$8doa2U>7? zmjeM@WW<3Da``k4bjsy59B7owt2nSiF0bUkYPr0e1N-H2dUZq8cFX0(9M~b3kK@2v zxqK`K*2v}g99SinkKuq%E+55#&2o7z2X@QlIUHz{%dZHuT5 zi0Ta#>=f0F^t*!otj60K^xKWMOz3y5s9rKe5`H)RYw)AT zE)4uA82K4aC<1ZgCeS1_UCW}CN%)zh`#IQ(aGjrRq1~O?AfA|%L!?WIRXSu1-h-{d zd$9CcBQ7@#%Rxl97vgmDgvC&z+b-{kvQ2oWE#|%`;-Z@SjHhcE+QN{+hOu2;#d_cW3;IoiQ{gd?hM11Zw@%iE>;DcK<&VbMRSDXz# zl}@~5gquv&cqQ-wSJz-{dqrgq50|LS)l2u_qFzQyTf7{#dxM?mu$Yu9L7jQIvSdu- z!=r5Ouidw^WJszFUvxRtHB#!`@>l4VuSe+Z5z1aU=Dz9t_*U0RTp*M5z+OIEOHS7_jU2h=u|NA#CnV_&QWj9_}jRYCo>Yc{B+)8#^M)V zDri2l>W58~{qxih+q}IOX}&d3(3|KT7aSvYXGW%-2`Mt8qEkuy&Y&MgeBSth?@Jjo zptU9E478$ICOXOZ9wmuh%~a&`q!;kH!^G#BGvPzu-t>>pNjkRuIpcGsiO=Iyc^^H+ zymbB<@%iSz0H51Te1@C}p9{{2&+GWC;`64D8ZXV?z;)AQjhH&ecpuJBsiQYh*we1r zoA|6WI)iX6RhvdhhEc0bl>leG>gxxJk^6)S| zJNta;`%mCQ%Lsk&c^8W3{|p~8NBiJ&=V!;qzq4U2b>;kthVj+-mL0?i)MSK8*s49l zC|yigRG&eg?!sqVpFe#naYqmtgOy{?fYS)VX`*tCh+bWT+mk7rIMCji6n0?u982X zwY&*LNfsOLhwd=uetOKBR`ZZ#3pcDq#C3qeczD!Xe?Zfg(wa%gb&z4exAs8e=3)1f z;iUP_LlWidMYb51A)}bS9gR+~%y)xfbUsA>!%x9YB=E`zE>sQ#j9{#zmB9!u?9T|M z&rfo2r*bP5oRnROoZ6GY@8RLU1Gr}>)pfAlmqOjK$6N;^--VHY4gv{CiY;1(?|o1z z-u{Tst$po>ZFu=H;2TVoC>0%%pJ4Sg<~k7Rz%SYiExOlG&-~f9MSeWa#?8YCVVgTM zuwrN(%F88`xm55^8Q$RpSv{{9gA20{9h(Df;0>mbW48@n9ko#AppX3YvTWfxq~Dr@ z7YNP%#{IR?C`AM~qtkIlXDzi3^k!%6V?$qf-x?@tcjIgE2i1(e!Hd>q^=|FSj_+kg z+Mqp&vrcm=G0DQ%u=F3}X)~RWW-9eb`1RuyDI;5p<9Ecs54RY+6zuC6XQLs092jxw+chzT$)Y0auwD<53Nmf#N^ZjXm3*4XfUZv+Bf$H~Y z258CH3`Qz5sxGYE?16u`S=1howH;_wYZ;t^)rn(-osmadvJVJ@F#4kVanT0x-=bBx z%nPq$=!~$N=pe*=9nfMwsgGQUK-N191eB*96ejIYvA$m(Br;KXd0mQ`S zMIW8Og$t4T5IP?M{hFKBQbP(NY%X0U`_GO68N2!ZO*{9mUbs(0RZyL!~Pc8B~q zNu_>!iOA%)X>6z}t|)7NkE9>dgNC<=Sw0K?dIfEm1bhWQK$>203ZaKN^f5vYap)t2 z7I5f8gdXJ3Nrb-7p%VysIMj=fn?uJD`W}alAvB*u|3K&g4*eaWc^vuxq3?3&C_>-i z&=G{b&7mHI?nkJpy$7C>xX!!nqw#bdvS`=*F8mT#X-f}+GBgF?2lu_Yx|vypYmIQN zio6cf7}N#FUXFo_-eUNF*Fl~eNWX7V>9Q;v3$l1A2@6EqMPiZTX0c8?UU73NG-d!VScP1A1zO0sr^ek(ptzCg*);>tKi z@M~@Q{A}Sdm7z<0zYKYf>%$QSev@zmqp^VX65)rX=J~t`!}8n*zp%W{f2?6Wt3%vA z92WW7lSk)&>AupEKrK5qX&=rRo)tcAlI%BBS9%i(OjlB9eIFYLP80CRlI0uZ;vlUz@^m?0E(u z7G%#;`ic}5^4g~jt_Zo-6rdXgdwB)26YGwOC32~6;}f0vE&NRC%s(~x5Hl22ch+r? zwVk*h0+Yo&yoHmq@4Z0RCJaCJ-zHstRMc+p)^}zq7Fg<{cB(t^+ODj9y2#P2EvZMw zn2T0dz^PagRK}SP0fkYV-h)3Yim;|z!LAbxX0;1fK-O-s?;W%)ayO6t2EwTJnX4Vm z<8gzmTD`y{Ojrt#Sa;7{gjHKv>np5XtNFBnnA+>t;vJ)@sU&)}7Un$zXP8t!$~Y_eI^t?BR@2A zdj>z?=5%e*dCGj0i|Qbu_}V$84q5n@?8K@?C3x#euNrC>2-0$)=J%sNbXQJH9Ld|Y zm6%4Gc$C-g@^ zMYTJWXz9k4CquWA!s)$4|*;I8kyF1&ueKRVj<=i=?xkLI>{&C}D3 zd)McqapYBvzar}Qi#?*gJMuhfH8XM}=oCk5G!d;fUZJL6%z(8#g=pGhG5|@(1c=)D z*kR4Se4=;26~+^4^KU})x^LJIc#x5vv;WbnwnSH3Fp8nZd|r(q-rV) zI~M+>6gY{N4HU;KQ+F1$<@NHVfZD_ky}ZyKd^e@(EfDi7w28K2Fxe;)(`n04Dq#9^ z1$sjap4v^gSfY8=NJ+%0cLrA7NKJZ!AAtgup4VyMn1%Jqm}sWr&DCMNs=%2xQQYRa zP5&X;PaDV>DcEVsW5F>{%Q`>e{=rp+l+pfy(Vkv>U0~+Y?UTKydOTps!QQqWYWPH( zXPedv_keU-O9nYsvGPC(={E{DF2LgY`83*%%u&_gsLV>NFfD##fjp+EVogAF{wKe09?#I6|VxyRcom1T#-FhbakDOjkI^9wH7<^_J?Ok(>p!DD;Uif z^kHg=Ofd+j@?+MXU99+Dtu(sRt6me_WSoxf)zPLjEkSc=@D1u!lwAReQ zdOFQkw#GLd``!({mC^JTnz9W#39mSsZR!``w}u6jF`>;{xk>|9A52C5>VuS*`-7`jo8DyngHckM z!EpK)IoctDFzo~B<48f2j4i}!ng0Qd8@eRQ#)TG@fT-NY!}R#1dS??OO&ikK<)@`u zo3Z*<*vW>f<_*BElhwhH0E7fHS@KSejmu3ArGG$`}2n2$qE+sMx>m7eaxm&FHS)&b8R zVxmc7WqKeO!RBZm(!1|La{pvk{(ssfkat|DiI{?_iL@aA#yNfUYcx`$ zQA(dD({az*PaodNuN7DO(&P3HAYGEN5R}AZ;NI^ zjnlu#zBkwqI-Sw;ks7V&dmezUpZ&8D|CjiXv)l)tW`O?n z^ucZjX{k-n2e#-47#UB%;toH5H>?sz?k_0(D})PR0AohS}S&t7xK$juJ{&qiCYTg%VF6H%;Tf23#o1fdI~2 zbD%{u&EddfqUjzEJT3T$ope1Tn&^a`bUh`S=zyK*Y}&B`-9P=nqE4_Qrr3?DI|c*xO&Ot61(L!#%f^b_)0tBqE9b)pA9*;R*t_e83u zkA+zzb&9I~8r{?akDv~@l1ZR5lIc^0J`UK5mHGJVT}OY_J@wi|og#YG;1s!znzJ7j zT++Ud3MAHVR&tb%c?NrNB^y<)wVsdL-tcHAk3h_^% zuBw&><;v_Gf=l4pVy@6?&v3!!bUPl-l8pP@kfRiv3Eti-Ja2ioFtO|UHSuYi75O_dW5mj>4McnFKVUW-BobE3_hHUDT89J2MK*_{;bv!zKKVV7zzVP|W z@d|Xwc+TxlM=P+tY@T-v|3GvY;$h!K$I?f3owRRjIuXP0YfGz8nLf$hbb`umpg-E= z4$+whbTUwn;U)+@lOmJAoH-QGsXd{OL0GKJ#$UQSlt^UUH%$rBv0V7G5D0b;R)mt9 z^KDS5R~P4tEu$!hpKDFW8+W;gQXND>+(%14lB<{LO@jGeF@5lt#Fe;Jo_>^^$+b?d zb*!^!9o72%BDs#sGkGOfEga8EB^&7ld3bk^(u=q&3x8-P47MM^nlNLKs%KO6jJ@!2 zXT5&vlOyKm6s`+j15uYH6ABASeh1hC6a!3jY5qrOS(4dRFTvYBjVwFF0eU6g=30ZO zUg^YBnG`7bNca~ZK(7S`D5K75N?(gGuKUE_h@jyb*@$taTS5V8+?+;?V&gB5-h*Kl z&b)(4QkvxEbVq;|iEOgwBP??MIfh+;6?!@D@0S^uADu*DV3S6~gY3}Id;Ul2J}ypt z4Ua$^xxB-uv4u-UXHb32$XJor=f{GlMt)%(tFvjtV@m75;TeuA))_g^RkCFrHHlXR z#byr4bu0#%OOh%sDeS2Gm0W3Q-M5S|+r)@>;=^(7*NT;d^Z&=(+rURvocrUu$tG-I z$q5<}HDb_cjX`f>QCWi;ARD435nG_vinVXiR@?f+T|gW1;>poW4hQhosJAt(R_(RD zUQ4+I5eeqaY(T`I6cZtcFW0;4K@DP)2sHcuKF^%9FA34!U;TYP|L|eYoH;YkJoC&m z&ph+Y%roYX6Zl_$sD)yUndWa+R8w$g=fW_roB^cYreHF!AawA=DVt z$t!BMT_wr-$5L-k^=@M>uKDm!!**47VIv6+Cif>q?x(*UBRA2@B6pFaW}!PNyS9zc z2VL<9d?cH!tB#w@S=&O5Jc6cF)?xh%f2>u4V#a{z%H3D6qZa%`mkm^` zpDTvmh}1$hV>~@7`wUjwN_B%+$e2@Gn%k2|A7*ON{>Cv~(VGq-5zKhsP(PnhJu#Vw zB7O~?kVDm;a@h&q7{L@7T*03HKcot8S_=MV{*)DgW6O0MP7%wl;wrmLVWH}>d%JF5l&0-f}?fxTU>tvcPJt>H_up) zN3!uKe&J&qzet-6R^-%NfGB?OM1*12wot4@?={%N;CLACUdGFR0A`CQ^gj}iz$UuH zmJ9SeC>d_gwYWZyifYFW33MINNX2{iR0(^ynlBN9sREAa2|Pj&AH<~yxp{!f-D4q) zg?L&9&&M!^(Twa^p>IR|*ENDFv>%~q;n$tRdx39IE5=53ba;4a?nErQrXyU1AIsiv zv?5Y(JV3v!4(UylOw={q3P@s8Qx8{~WF+E>084CZqC&(&O$1-8X`%vjmT5?FJC)Ch z1oHNBUK#=Mr4-53jwHeG)fOtnp{)G|<4Z648jXuIcG1g28Wk)UF=N(5(Y%GQYTSn3 zT!Vh~I*qZ>2Iz%#6vLG&v~Eh*o!cX{y$J1Tp?pJqxEB%6pw^3DRNfK(0l1Llk5nu* zuD`1`nG@)Z1f;f(oZW`sHcJL*REF-l-^$%AbEnR3 zTj8GFUf;GNseX^%NC0%k&X|=Unn|=9t_-2M5l}Y6>$Mzc2oa$j=EPLE&>TphGlEhB z(KU)Uahj=^n*9V`oH7IJPr8;v8D^~)9%vJCRH1=Z%&M0|ol)!tR37v+8sv=P40zF& zgD4S6H>gCzg)SxsD59gzB^WMe9^)gpSd;v{b7`)6od+ve`k=BY6wGG*nQPhWlSV3#J9;Bi5tUM-`QvV0MM_5&e$TqWDj+zNg z;bp+eI$AL!0Ym8Mo(J_t$vv49^(H3zTY={!N9c`IkUr}^y@^?%g>r~lzZ0JOq}psO zJOgAP@TIabWwfqEG36YL5|NFdgey>Q3zfC^k+*nmC7U{=@gY@)dy?$tKVZ2Z zCb_>2myoC}+kjhUB|Kbm-{q8GE!>NPc-qal=Ep2J=&S5gLiTb)iY9|PzSSjgO%|u+ zzEWq91i=M0$Ozx?>Tpu!wLy(20gP}BIK^X_8G<;Jy~rp{5(aUMQ3}nGnu>Xa`f6CF zDk8dRn-CG<((M68TnQY)&y%%NicprWVhsx=-8g^@cwyXFpy7paYa|Y_xV1gE8~1*d zwUgKUd#Po+v0j%aS-z35x-L(4>1N_M?{201h~C6qp=ATU8gqVU%z9pGpi&YUuKT?^ zmGV9C3QyS!cC443(Ex)qGpEkks818KMb<{O&84j$i7X*3nUy*b^9*;Q+#X}$ z6d*;SK=O-mt<&4Bl(k_~=&e%i&W-DkHVh~ZdNTpdJwgDGqr45byCcHz{3ULEC$m;> zCSjmoEvAY&wQ843@H-}Sk-$5)0He~4Vke}}2|%!9r6m=p<Nj(tv#!W%rZS84CT7+a;tiv+&?#D| z^N81S-_)B(QY3RnOKzfEc}afpWK$8(1ZqhWo7eD>as! z6A0!Q>@EOyL{BL((9CO!=->g@PH*H~JXaK-O1g`noco0HkSsP|H>fvwU50D#1UFhz z@Oxz_d>Fk5<6(r~)fVnE%Gwj$x9CN8X(ym^Sd&#A4h@=ZF{xzFp;xNCE_)Qc5@F;J zYtZD2D8^lmgfMqGVr*+!O3nds4>S=#s+m0hJc<4(r@K5vk(4TA?p4-ZgH9@^Q2dEx zqctxi(M(KXP4;LEp%#(?h(!z6vmB~yN!DEu%NMCF@OtPDXeO4-Ls^s!8G>4MOQNOqzb4bqCNGxr* zaN#{k6=N<$u%yFFm@M%4^iS8H0Ebes(F^tWeNp|nWYj#51(mFQb&Z@qL>tvPV7imJ zV~PR0>Rf4v5pH0+(zAGUN~kng;G~sC?X5~;+EpKX6x|BQdO{@h_)Zdrfo zRb%R}GJ__otPbHpJrNJmGm~|#h_di7hQUT`Mz@xe4;Zq}$7mS7hlWJvU0s?67fuAJ5HWZpO(_JB3OI_z+mP(we5f0FbAd$m^VA5= z^QU!0T)(3nm>9Ml$Cigm%Cqn(ssw!|1`tEFF!wY1atR9LPFCD{E-B-ikEzstsc1ZiTCIbssDP zRIZ%AE1Rc8>KX|UE>rwe*BB%xx48*mu3>4Z|9h?6XXk1K*-{dvgUc$(r zDCn#7f*Z8x6Ptqr*aYKoR9#Wf8Ydqa7oPS##Pxw4Pi*24Msk7!OG=T~=Yc)Y=Yb*T z^K;t5XF2gqG3H_+9!lg)Bhw(s%L6I)4Dfb;Nr;~VPu@Ti+ds30D=Tr_LdJ|Y4z;xq z!YSC9q%-PiuC?|l9_)(s7~e#%rb+&9tF)mWS;`F8TD3h% zJysO>4_Q;=2A628L^;L{Zqc|3fuMF5ehJB_yktJX#D_jmzoRx^AJ@;;Oeed%(ERvL z)DCLv5u(2s6DVux;D&5}Su`x$c@pH#wqxgk+dS-(Jsb@Y66KAGHDzUq5 zBnA6U(p=Arp1FkvRi)}xSgP;@W6?vRiA@=q4Wg0xu1$UC9A1%o+J;lG%&N|*jrjjtmr%|eRbNUE z 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\+a}w__{zHO-OUb~3ENk0e}S-k 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͞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 + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. -/*----------------------------------------------------*/ -/*--- and now for something much more pleasant :-) ---*/ -/*----------------------------------------------------*/ + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ -/*---------------------------------------------*/ -/*-- - Place a 1 beside your platform, and 0 elsewhere. ---*/ -/*-- - Generic 32-bit Unix. - Also works on 64-bit Unix boxes. - This is the default. ---*/ +/* Place a 1 beside your platform, and 0 elsewhere. + Generic 32-bit Unix. + Also works on 64-bit Unix boxes. + This is the default. +*/ #define BZ_UNIX 1 /*-- @@ -302,18 +212,20 @@ Char progNameReally[FILE_NAME_LEN]; FILE *outputHandleJustInCase; Int32 workFactor; -static void panic ( Char* ) NORETURN; -static void ioError ( void ) NORETURN; -static void outOfMemory ( void ) NORETURN; -static void configError ( void ) NORETURN; -static void crcError ( void ) NORETURN; -static void cleanUpAndFail ( Int32 ) NORETURN; -static void compressedStreamEOF ( void ) NORETURN; +static void panic ( const Char* ) NORETURN; +static void ioError ( void ) NORETURN; +static void outOfMemory ( void ) NORETURN; +static void configError ( void ) NORETURN; +static void crcError ( void ) NORETURN; +static void cleanUpAndFail ( Int32 ) NORETURN; +static void compressedStreamEOF ( void ) NORETURN; -static void copyFileName ( Char*, Char* ); +static void copyFileName ( Char*, const Char* ); static void* myMalloc ( Int32 ); +static void applySavedFileAttrToOutputFile ( IntNative fd ); +static FILE* fopen_output_safely ( Char*, const char* ); /*---------------------------------------------------*/ /*--- An implementation of 64-bit ints. Sigh. ---*/ @@ -457,6 +369,9 @@ void compressStream ( FILE *stream, FILE *zStream ) ret = fflush ( zStream ); if (ret == EOF) goto errhandler_io; if (zStream != stdout) { + Int32 fd = fileno ( zStream ); + if (fd < 0) goto errhandler_io; + applySavedFileAttrToOutputFile ( fd ); ret = fclose ( zStream ); outputHandleJustInCase = NULL; if (ret == EOF) goto errhandler_io; @@ -525,7 +440,7 @@ Bool uncompressStream ( FILE *zStream, FILE *stream ) UChar obuf[5000]; UChar unused[BZ_MAX_UNUSED]; Int32 nUnused; - void* unusedTmpV; + void* unusedTmpV = NULL; UChar* unusedTmp; nUnused = 0; @@ -555,7 +470,7 @@ Bool uncompressStream ( FILE *zStream, FILE *stream ) } if (bzerr != BZ_STREAM_END) goto errhandler; - BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused ); + BZ2_bzReadGetUnused ( &bzerr, bzf, (void*)(&unusedTmpV), &nUnused ); if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" ); unusedTmp = (UChar*)unusedTmpV; @@ -569,6 +484,11 @@ Bool uncompressStream ( FILE *zStream, FILE *stream ) closeok: if (ferror(zStream)) goto errhandler_io; + if (stream != stdout) { + Int32 fd = fileno ( stream ); + if (fd < 0) goto errhandler_io; + applySavedFileAttrToOutputFile ( fd ); + } ret = fclose ( zStream ); if (ret == EOF) goto errhandler_io; @@ -641,8 +561,8 @@ Bool testStream ( FILE *zStream ) UChar obuf[5000]; UChar unused[BZ_MAX_UNUSED]; Int32 nUnused; - void* unusedTmpV; - UChar* unusedTmp; + void* unusedTmpV = NULL; + UChar* unusedTmp = NULL; nUnused = 0; streamNo = 0; @@ -665,7 +585,7 @@ Bool testStream ( FILE *zStream ) } if (bzerr != BZ_STREAM_END) goto errhandler; - BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused ); + BZ2_bzReadGetUnused ( &bzerr, bzf, (void*)(&unusedTmpV), &nUnused ); if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" ); unusedTmp = (UChar*)unusedTmpV; @@ -826,7 +746,7 @@ void cleanUpAndFail ( Int32 ec ) /*---------------------------------------------*/ static -void panic ( Char* s ) +void panic ( const Char* s ) { fprintf ( stderr, "\n%s: PANIC -- internal consistency error:\n" @@ -895,6 +815,7 @@ void mySignalCatcher ( IntNative n ) /*---------------------------------------------*/ +#ifndef SMALL static void mySIGSEGVorSIGBUScatcher ( IntNative n ) { @@ -948,6 +869,7 @@ void mySIGSEGVorSIGBUScatcher ( IntNative n ) cleanUpAndFail( 3 ); else { cadvise(); cleanUpAndFail( 2 ); } } +#endif /*---------------------------------------------*/ @@ -999,7 +921,7 @@ void pad ( Char *s ) /*---------------------------------------------*/ static -void copyFileName ( Char* to, Char* from ) +void copyFileName ( Char* to, const Char* from ) { if ( strlen(from) > FILE_NAME_LEN-10 ) { fprintf ( @@ -1039,6 +961,7 @@ Bool fileExists ( Char* name ) For non-Unix platforms, if we are not worrying about security issues, simple this simply behaves like fopen. */ +static FILE* fopen_output_safely ( Char* name, const char* mode ) { # if BZ_UNIX @@ -1129,7 +1052,7 @@ void saveInputFileMetaInfo ( Char *srcName ) static -void applySavedMetaInfoToOutputFile ( Char *dstName ) +void applySavedTimeInfoToOutputFile ( Char *dstName ) { # if BZ_UNIX IntNative retVal; @@ -1138,13 +1061,21 @@ void applySavedMetaInfoToOutputFile ( Char *dstName ) uTimBuf.actime = fileMetaInfo.st_atime; uTimBuf.modtime = fileMetaInfo.st_mtime; - retVal = chmod ( dstName, fileMetaInfo.st_mode ); + retVal = utime ( dstName, &uTimBuf ); ERROR_IF_NOT_ZERO ( retVal ); +# endif +} - retVal = utime ( dstName, &uTimBuf ); +static +void applySavedFileAttrToOutputFile ( IntNative fd ) +{ +# if BZ_UNIX + IntNative retVal; + + retVal = fchmod ( fd, fileMetaInfo.st_mode ); ERROR_IF_NOT_ZERO ( retVal ); - retVal = chown ( dstName, fileMetaInfo.st_uid, fileMetaInfo.st_gid ); + (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid ); /* chown() will in many cases return with EPERM, which can be safely ignored. */ @@ -1175,13 +1106,13 @@ Bool containsDubiousChars ( Char* name ) /*---------------------------------------------*/ #define BZ_N_SUFFIX_PAIRS 4 -Char* zSuffix[BZ_N_SUFFIX_PAIRS] +const Char* zSuffix[BZ_N_SUFFIX_PAIRS] = { ".bz2", ".bz", ".tbz2", ".tbz" }; -Char* unzSuffix[BZ_N_SUFFIX_PAIRS] +const Char* unzSuffix[BZ_N_SUFFIX_PAIRS] = { "", "", ".tar", ".tar" }; static -Bool hasSuffix ( Char* s, Char* suffix ) +Bool hasSuffix ( Char* s, const Char* suffix ) { Int32 ns = strlen(s); Int32 nx = strlen(suffix); @@ -1192,7 +1123,8 @@ Bool hasSuffix ( Char* s, Char* suffix ) static Bool mapSuffix ( Char* name, - Char* oldSuffix, Char* newSuffix ) + const Char* oldSuffix, + const Char* newSuffix ) { if (!hasSuffix(name,oldSuffix)) return False; name[strlen(name)-strlen(oldSuffix)] = 0; @@ -1370,7 +1302,7 @@ void compress ( Char *name ) /*--- If there was an I/O error, we won't get here. ---*/ if ( srcMode == SM_F2F ) { - applySavedMetaInfoToOutputFile ( outName ); + applySavedTimeInfoToOutputFile ( outName ); deleteOutputOnInterrupt = False; if ( !keepInputFiles ) { IntNative retVal = remove ( inName ); @@ -1548,7 +1480,7 @@ void uncompress ( Char *name ) /*--- If there was an I/O error, we won't get here. ---*/ if ( magicNumberOK ) { if ( srcMode == SM_F2F ) { - applySavedMetaInfoToOutputFile ( outName ); + applySavedTimeInfoToOutputFile ( outName ); deleteOutputOnInterrupt = False; if ( !keepInputFiles ) { IntNative retVal = remove ( inName ); @@ -1678,11 +1610,11 @@ void license ( void ) "bzip2, a block-sorting file compressor. " "Version %s.\n" " \n" - " Copyright (C) 1996-2005 by Julian Seward.\n" + " Copyright (C) 1996-2007 by Julian Seward.\n" " \n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms set out in the LICENSE file, which is included\n" - " in the bzip2-1.0 source distribution.\n" + " in the bzip2-1.0.5 source distribution.\n" " \n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" @@ -1817,7 +1749,7 @@ Cell *snocString ( Cell *root, Char *name ) /*---------------------------------------------*/ static -void addFlagsFromEnvVar ( Cell** argList, Char* varName ) +void addFlagsFromEnvVar ( Cell** argList, const Char* varName ) { Int32 i, j, k; Char *envbase, *p; @@ -1877,6 +1809,7 @@ IntNative main ( IntNative argc, Char *argv[] ) exitValue = 0; i = j = 0; /* avoid bogus warning from egcs-1.1.X */ +#ifndef SMALL /*-- Set up signal handlers for mem access errors --*/ signal (SIGSEGV, mySIGSEGVorSIGBUScatcher); # if BZ_UNIX @@ -1884,6 +1817,7 @@ IntNative main ( IntNative argc, Char *argv[] ) signal (SIGBUS, mySIGSEGVorSIGBUScatcher); # endif # endif +#endif copyFileName ( inName, "(none)" ); copyFileName ( outName, "(none)" ); @@ -1938,10 +1872,6 @@ IntNative main ( IntNative argc, Char *argv[] ) srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O; } - if(strstr ( progName, "small" ) != 0) { - smallMode = True; - } - /*-- Look at the flags. --*/ for (aa = argList; aa != NULL; aa = aa->link) { diff --git a/dist/bzip2/bzip2netbsd b/dist/bzip2/bzip2netbsd new file mode 100755 index 000000000..1184555c5 --- /dev/null +++ b/dist/bzip2/bzip2netbsd @@ -0,0 +1,123 @@ +#! /bin/sh +# +# $NetBSD: bzip2netbsd,v 1.3 2008/04/30 13:10:47 martin Exp $ +# +# Copyright (c) 1998, 1999, 2001 The NetBSD Foundation, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# bzip2netbsd: convert a bzip2 source tree into a +# netbsd bzip2 source tree, under basesrc/dist, +# based on the other *2netbsd scripts in the NetBSD source tree +# +# Rough instructions for importing new bzip2 release: +# +# $ cd /some/where/temporary +# $ tar xpfz /new/bzip2/release/tar/file +# $ sh /usr/src/dist/bzip2/bzip2netbsd bzip2-1.x.y `pwd` +# $ cd basesrc/dist/bzip2 +# $ cvs import -m "Import bzip2 1.x.y" basesrc/dist/bzip2 JSEWARD bzip2-1-x-y +# $ cd ../../.. +# $ rm -r basesrc bzip2-1.x.y +# +# - check makefiles to see if any extra sources have been added. +# - update distrib/sets if necessary. + +if [ $# -ne 2 ]; then echo "bzip2netbsd src dest"; exit 1; fi + +r=$1 +d=$2/basesrc/dist/bzip2 + +case "$d" in + /*) + ;; + *) + d=`/bin/pwd`/$d + ;; +esac + +case "$r" in + /*) + ;; + *) + r=`/bin/pwd`/$r + ;; +esac + +echo preparing directory $d +rm -rf $d +mkdir -p $d + +### Copy the files and directories +echo copying $r to $d +cd $r +pax -rw * $d + +# cd to import directory +cd $d + +### delete formatted manual pages +echo removing unneeded directories and files +rm -f bzip2.1.preformatted bzip2.txt + +### bzip2 distribution doesn't have RCS/CVS tags (!). + +### Add our NetBSD RCS Id +find $d -type f -name '*.[chly]' -print | while read c; do + sed 1q < $c | grep -q '\$NetBSD' || ( +echo "/* \$NetBSD\$ */" >/tmp/bzip3n$$ +echo "" >>/tmp/bzip3n$$ +cat $c >> /tmp/bzip3n$$ +mv /tmp/bzip3n$$ $c && echo added NetBSD RCS tag to $c + ) +done + +find $d -type f -name '*.[0-9]' -print | while read m; do + sed 1q < $m | grep -q '\$NetBSD' || ( +echo ".\\\" \$NetBSD\$" >/tmp/bzip2m$$ +echo ".\\\"" >>/tmp/bzip2m$$ +cat $m >> /tmp/bzip2m$$ +mv /tmp/bzip2m$$ $m && echo added NetBSD RCS tag to $m + ) +done + +echo done + +### Clean up any CVS directories that might be around. +echo "cleaning up CVS residue." +( + cd $d + find . -type d -name "CVS" -print | xargs rm -r +) +echo done + +### Fixing file and directory permissions. +echo "Fixing file/directory permissions." +( + cd $d + find . -type f -print | xargs chmod u+rw,go+r + find . -type d -print | xargs chmod u+rwx,go+rx +) +echo done + +exit 0 diff --git a/dist/bzip2/bzip2recover b/dist/bzip2/bzip2recover new file mode 100755 index 0000000000000000000000000000000000000000..7478212cbd5ad2a341de4fb23e74d4aff232d129 GIT binary patch literal 208802 zcmcG14}4U`wf}Ci2^&~)14cweh#LQ-_$N`U#Gnnz2DApT66+sOUu&tY+WK%Wpd}>n z?rMh1MQWw`TGOXh-=i(H)JHHP!Gy$Y0tf-ACMKa#d3M)D4T4Do%>KUT%)PsJ^9TCg z^M@a^bLY>QGv}N+bLO16bIZIp7CD{HG>7>w$&u`EBK>^1%RLRh$JZxu$uvh6N-lJq z=E&r7&O{vt{=e;)Ne=oyg)%c7T+VrCk87_!<7pm6>k;Uf=lgqnE0Ojrne; zIF%~RjQk_$%6{lisqWBEfotd|(P&gG$aah6*)B0HJ9H`<3s-jNZ4}0Ep@fCcjf79C zn3e4UoWfg2xkHN=I~+|Z8NWKkjh}~rp(8je+cOae;@3?y$FJ*Z`gLWmp`Obpf)=Ij zBqdPnaX9oP-1Bb%=ISjV)#B3u-9v2&JhjbTpXv_pCd_=?Ep-w)_OB9f@n2HiG$hJf zIstW>0=?>4Xy&0TJD73;Qz`KPHyxpg7-XPM@t+ASM7=0JAo7AUT_|w`XS(U9X{Kkf z9m4Z~fWByKp{b{#T1w_!7%w$Q$*@x15NCM1=_ju@FPc|Jz?&n5c2K#0j)Uq3+5k(W z3eEqa!=X$mbm-nrG3~9104ip@H3>huw@r9Ek!=(@1=4DdC_Shb9|-*blB4w}DgG(| z&`U$Q+O51a;1p`NGpcnv)B1%sq`cO2^~^knLrtqF4c&gr`M3Kf>1vPGru95-gK|}qPilpNF- zc8bidrQB*wn4dinRq>MviOA5s`$#Z!Z?iGaDL9{{!(pT3uOYvBapxCG zhU;zW43)o7#<||Qr}}g^XA(-B)BT%MP}(EB%@w7c^DrlsRbn6-1&cE13BN<+=lNIS zEV~#T+1c4`D;qbcECUi6&H!-G8^i_+O;Y6V!jSc8Oo#kF<*7Olc$;3@le1g*9z4BA z3p%w{2Z(W-7QK*&gK{R$93ZZjb_&fC1)}+~GsKPA9x;Fv zld9DwzxQVnsSbpG1r@24HanEn3%};^$EMvwHo{(w+8D3PKHJhxIniuegVy0Q2&5~U zXWJj|k+bd3m@vY-Q{)B<dc{8@WL_elqs_u zj`FXv)Z`{dZsAI|zePP%LoIWfjK`@XFo(1!Bj6_l%=EM9SnE$&o?Tw!LG?@2Gs|nn zBJl%te0fbe5|65BX zZ6)5bmF}>m-?S=hvJ!u`5--`RJ!@q?Y0K2C%tx)nzgmg=ti;_`;#N*b^lq>+XWBBa zure>QWoFsZnO21{RwBt(+6xPc>F}wQIKTi@WPT z$k0nd^`9upYkSkSi;`BYbf3dll<)1q(t=enzxbf?6fffbI`vX4U z7Tki&w>tTO7NUBnt1`LTyCp&ft5MgmO0+aOtTW$aA4qa zyhlJ8D;=_>J2?&FykjM{TZwurQNsxdhqg0J%olB$&sdqOtwg{|EVmL5b3y|7v6Xq3 zl_;^5UT>N?# zuB_LKT8*9JiDSrfu>n`6Y(Gy;UTKZgn^m7dD(fie|Gub|Vrm@)N8pe!{j7Rg)pSKwk9tzNPb4F^R^2 z(Tpiy;aTcCHS`#$MO(?Ewi|tQi1gStph({FYg zk4D8Kz`P-_7nna1!+f0as8i%uo&n5nl$iT(mYC0uVSZK|^LHHBDPtVab=c7X1&8*r zQ~awdG7i7aj{UK^8Q;6T%!3>r)WZ*X@P7a%?e?E+7ds(inY&4ab zVzi<}4nJZ1Cj7zM)O&0&n!roI;C=QVPte!zWIY;TXgu{r`}KbU{vsRv8%_ZK8XNpq z=aXxorhE4kcSGDofd0r`;nr2R^4eTaphZ13)CT)K=m1#9n`Fv|Uq?z`ksEv>gAm2P z;1eD*l~>nW@Ai>B9l8uzBB&Q-VZSp@pF2r-vZJkmx<^tNi1J#IXI(jjxG009aV_Sj zUX-i5v2#4rxV12Uk8cbbgi2+8kh`G@dUXcp#tnk$yu%Y(N(kF{+C@)z}){8Q8jzOtJ#+dWp8O&)wt&SCw^`c2J4~;83dh11jy0Q<- z=Xwfjh^Us_+VP>@WnVX2ea#uJFU2+={}=s1zI3m9QLqq9l!Ok-tz2wlM>_~dun>Dk z`hnL6k{K)nf%Q4LL8iD~Xl(j*R82?iyp+BvDzSEo^`o{ zDFlx&Wbk2H-xB-Rld)3@Oh7(3|MPUryY0|Kw0l}bc{EfE*)3ZU`W!x;A6|p zl(Bgoo)cS?lezh78`papHaGnXK1O>2`e$rDj=za5o+Hcr)r*Myk8OY))4$+j8_krl zc^*mn4wwW?EKR=|!g(wrRwsMOZW33j2X3E%1 zR$5{ovrr~p%?1a9kKG3L%RUyEDUmE1^y^&ucin~Nd=|UrKsZ*v1&4?+cm5)6g~y>r zNY7yIFiR4(O|VGLogz7Rip;q~%8B$9cSi~7LK$K1wA~3^wrzez1F3;1?13h=fm~|2T4N^LE|NabH(1>;II15S z_=+^I+gc24{_*7oJKtQo*CU7WtM`Zm7_dK#mKfW$$D&cv6Yt|uFLuM1BwJwFBJH;c zXoT*9)(g}vyG%6ndJnmMw;A3_avF(A*`bI31^B|;$_hQw4`G;2d2hn?6#6M1#dNuJ z<@H8Z)Hr$^j&r@Mu6C5exIC5WJwx@bMZKWo*XTX6w*t609LvXsF6K;Ievhd%QsPaz}%Q0ah*-`i==Hi(@)w6Our1n zn<2c%F%)<$Jv1ULAhakCpapCBm_ZTK?|HpJZx0F6ApHx^-!d0Go@eQ|xnZv@(thD_ z_(o%t(GqtWxTrPEzex>~rxb3joW#aF~JRNL9+iB@W~qX0({{h za*=&HmN!Q>1rkY5ly6IZ9$@*&5P?>x9DswtG!j3X0=rPh5pvc;=2azR2B*CB5heZ^i~T!Ra5^)pd13n zKKiGT=?HqCr5__uN!i0#Z?|GELV)x+o<-URUoR5H>yd_bDSkztGf5P0(F-p^EC6s} zstND&!n+~pUFU$U6ZCGBKQ+_?1u*nt-t-yj^CY;P=n>N|xNICf{R~@wtQXc6!MlE4 zp*l+Rhadem_g_B8Q;4Sr@DvOjgsLN$I+Iic{CGA3w_$i9z!Na=EYiWi^F&Pi3kIHx zr4E9mqz8h5ElAP7V4wyms>fkIBZMarsKZ~=FE{8`SAc!9Utp?$R`ktGXk_P-UJtPLVvrAbd$JnT$QOhY%c!J~2D_3SyUS zu>BI*^4fmFQStwN8c~LDGkm$uroe6*dsE;r5e*{@^q?ddpvv@5H;5v_=%l}a1Ndvj zKV-`+F`#UnT%^}hv+$Fkk~RNiAIjE=#zRi+*tZn_J9$`p#u*QHYXf&EPdqWj;Rq*z zTE=y)vO6NN)}JOpEu9@TNy})XNUx^U{k@}|O@foL4hkg~00^?Z_&o_gmLi~0O+&@{ zAs9vN*c9c-Wf)j^U@|ym(^vNgM;ps0wvGVxgYsk9>K3h*WlMmjL=dYFCD0FH#Uud@ z1&g1)RtgGegd! zJ%b3Wr(p)BLU<(srq=F64%uO+Aulr86fZ5cVDO9(P8<{oF@IR5i1VWxn{%$z|5 z&gwa?WP@k5L79TngXVSuZCg$rniA*A zz&E+x-Pb%a5g(m8XpS@`talH&l9`9Yax!6IITY{RRX5}$4(9*c`t)CKjf})w7bYU%tR}`HG+RsC z9)~(c1SksI8>LF?6!T}#0U`Yj&Rug={lTOCejpjO*P-ItBkYWGn> zSzS*4B>Awy9W^L7;)xnmEy`Oo%Uq%z^FL+GC1}sVN`CMT?B|Um)3D-#L>fvu$%&&g zZpzlY|Jw{o&<`iWwV`2TT>o}{BCc`+T>Jv5StX8mvD1Jxtx9P=J#MC_4FZf zhlx~|(-1k0Bp~MhvF1}lqW(ShP3qs!wvmT+^t{BOX$=Yb_cm8@73n6ye+Stlqsn4y z{$lv^al|!nF&%V_ISRrz;ZZU+pCxojsxT#$_p9*1RMBR+x523@@$GGxyeT^SZB{xe z14m%WTXIV2Z(dG=^&=CgJv)&=iE>KA$Zr&_SB8cy2&S%q^6W%HB^oNa!FJH~Q5@~D_9-W`t51ea$qBIe@nCG2ZByC85}YPs zUgpH^Pl?&DlC_r4M(+2BncuX$Jy$z28DGgtB;z+EZ>u2>I7d<(m$k^^L=IV-3N|B$ zcf#0YWhOkt|24$!XxK9H!2Sj=q}_tFwDCH&8gzF3ikU7cw9fkBCy-(UakkA|?;=+Z zLEzdGATWP00_L*eQv9`7McRv|HJsnid;;@uurc@hkz4y0 zp+Wdx079>#Nmp^K95Sn{`i}{u`pAt*#J8!xYU)WeM5^^_ z+L<-EQh^n3YpNI%w$;tO`m$LPVLDhOb+nA$V4+0RvF<8zWQZzqJNYh|$|^X&O*%nV zOcwh^HI+m%^(s=%6jE{{Z?k z*Nk9>@7ovzsu)Y0qIxG1dNp~-VPE*c1IPV54v+4dEH|6FZ?Y>)F3{ef%Qt(3roJ&| zGw1$@Vn(s( zCzeO6U$@!sWWkKVX^6L68MlBmUcf}Yy*CmVu2KS0X z;qQ>bOoY+0MsInLoH zZA15@hkuF3-ugmc!3Yh&9ScM7H1Z=02Xn-fck`g8y>D6EeUiBwYY$GIH@H3W#tq8T z(`gzrOV;wPWt-DCMXRN`@9=qaW>(r4YHDOO4q>KNR#9-G;$^BC#Wv^-iXE9+LFe`r zAC{p=tlfwjrapQEV5ou2)VXL;-!{?^Z;T^4a@`M{f(a_4j%kO~Jj?ZXp;k-H9frZ) zQ}#D0{;$wfI|l9$s!HIK7^I31956No`vU^KD-H4jRI-;qEs%R~gi|w>t(=8qhR#)y z;!_UN&q+>Q=st-|_)*!HdcRS{D6ncYs=g1%GTtjU9`)J>qqLS>vAyyXWqnVwRAf;` z@VoV&C8zbM@0vqV{8s^FUaxj2H|>z(zZefq$+@I_X*A)pxW5dw*xsLQJrRc`V#-T9 zCTSliD?M&~Ej6sXA$o)0RQ+cz(Vlilsv>oFcn27z9Ygg039KdvWukH#z4_T|zWIrl zMrP201kpti79^Zf@qo8{0Gjk?=srwitvR+%&&hi^<#JcF6fcp&yZm>60^8s3P}j*VBIX~3pwExl6H5c(KP zxWB`~U-5rmp`I-m05}*-Xxbk!iaLb%n0Yg?1d*T{Gcj}8kYJx13&hVbrBICSh#p4|q__V`;cUEszstDTK%aBKLV#__|-D%!gZ zzpe*)&1bT*yFxY>)kH;6O$dgs#1O5OpK)LG2b$J&3eO6`(8ABw6200S*oju)DlPmt zCHE9~b3aRlN1v2yuA9DGbK!4v`3eVVJ4>@-U0|3VXH#rlAREiRE<_>D#+i0!{ z>Ko9O6HFlbq*SZ#R9EB-Q$rTHO?YtcuzpiT03hluXP+ z)`n%iqz$(rQOQS6f-JRUS@=fFbQW0|9FY)x^`B4C`kc-_Gwx*a&36}DX+xQh<2c0p zj!W9>I%;c3MOAMkRp85>WK=iH)I>wZIed71dO7qyD_hj?bj-*OO~+}b$Q>g0JbLv+ua2V`o^1~*T|LT{{jjx5Pih0*AjL)eH9$@!-OnTK`4&= zsW)GcGxj4!aFJqk*Q00)9AIq&^`89LZbF^dk$Qkr1W>A?qn>HbBYWB$Ku^O9g zHMSxxjkz*_wDxmS?_+1<2rE!pra@GX(~uAaZAX@N?8oX4@hktmNEE{}ml*HCH?KL-9`8-?VMHl}~eyQAPR2q{|K7 z=I1vURewZ=XcJ$Esu~RF;h$LN-Bvz#D%Gu=SQyxAe9x(VZdCmV&pC%>#YmyDl@+D7 zD@z;rkx|WXstJaAN>hNIa*b+gAvjZO$kjPfIT_J@swTZrMiq@R2b*=yW2zXgiE?kQ z9dnjl6Xe4f7`3(UMhqec&WI{rv#Z(w3P$D*!Ja0)ij<3K#L+wQQRWj>r)__HWLYEN>ZvkTI48>XAc-Jl%eu#dOS{Iz1-!B zTt!|FyDMN&b8Fd-89%Z0`P;H{F**DlsA+gO)Yp518A{+jPzlC|`X_QSOdSC+#ZSTi zn1>*I2v5DiEXB`<_2S#>|0y<=lf!=nD9ci0N|`>QB+Tf4#zzF#x`kMxkLVc`5VgK* z8`DnWXPnq4pjOOBgp=5G1x9`Nl0(#%toE3v%H}8fSCElygpt#O!JE7p~S@k(|2^X5~Mw08erH>6KZ7(|Fv#bHrgnfd> zb=Dr?OsV#;3WPRb_QFol0Z1DH<#|k!F_sty8*@^X20>U zlWf5B)1}41mxGvxfQaAdJ=V)w@=D8I-a{|*VT8eZ9Pf#Yu2czK2`mGO;S11#c$Z$e z-ack6;jW$;=rz`|e}r8SzB|Z0!%6ifW$Ri#jlrw6zLpd&UHv5eOGsr%w@}50?7N}v z>4g)x0I+Q~PtAQ1@{U87OhlPART}W@u*SNo7=MA1AuEPfJ5x)Wwgazda?`3;k$Mn3 zf%U45oThDew%D|TN)mWXLxN#o46UeWR?*Sv(aZNFjLN6X`% z1-vrKeQ}w`JekP5WO+Q>2eg@1+`QY5EFJ_)_I3al-3k-*Z_3kCTZJ6W21<+YUOpiL(w zE;5xZ9H*w0<~vQE1S+47Eslh*1jeF+Ah+KDZbcqfwx%*ciQH*&DP4LQ-nU?S%Vx^f zIY|iKGKAfd_La?x_e&1WmM=HNSh47zV8t53ky!Dc@)!=gl6<4?KRm22i1)39w6c)g zf<`yI4eByKj51=*38p%|X2q?zdN>0uC7H@0$Kl6e^GOD{!;jkRze3+x(w?dK=*_>Q z#STXnv=*B@;qS%T6o!kCjxTZHD{UY$KzweXeY6|aWB z{w)3op$-2XkAoLW#XladE4jP`93Y@n{K3O7+tyAqkgy}Rc7E52yPV0o8Ox8U&S*bw zNTvinp$((gP48qymP!o}`MJ5#z#7_cDr8c1(**~SpNFd9Jq&FiFRAVAmPnx)vGrX% zBwBmqIZ_}T&t+Be9LX^LL2R&$TTk(|n@_Ql)8xCUc{YG0)-%|r&rJCv=XW^>-? z#Ye<|v8-E*;}^bTd#9o$91%? zq(1iURK5AZ<=L^3iLXL0U?}l{*jp13)&_n5SM*^5H zfaxIm(D|f9`h<^Sl3^Ie3a8fpEhW&$kE7(MI%rg-8<(EN^dNn=1M5ptQG7f_Lfr_( zhA|c8H`vG29(o(2h>z(6#Ro5P=yw)JjVSLizxKj*y( z)i#zjn|Dii59yfVErsD`(mlmn$Yu|3F&kvyo)_;Ht$VlDoF!2CC0RKm{9BpG3O{AG z0{-F0%`~a5N6nhlEiNP3sRUfe8A^r~Xc#Bw1UNE=;cYld=X8p<0MM4+#th$gaC>Nh zcjusKba?_Ox|MGbD2&Vz-Uv{=h)xU-<8vSoN9T#5Fvb#$hZu%?1Q>rxfN|YW7?|#k z@I`>JE^7o3_a%U!Ym5gC1w(a&!&nF;as4k2D`RITfO#DT_8>6GafE*lFvKRj6TQ+7>vx?+Y-R^K)?nK1ScmP;dZQF z2ojAzQ@ZakK8*E4VUUFzUdu2>5|364AP(ccp)jx>I>I*t#)zyn5`{ z_&UO~0Ar|JJdx0L%FwnbcZA(&d(vq?BLUPtsLestz{b-Nu7zbV^0e;<0`Z}cl{yFp zUiWf@=~@rSml8-h(cE310BhDzSWx_qFkS1xb9cBI_mcz=&Y>V6%8u|SFo1?q_Tq%L zZ-I}4hJtcO_!TmqhEt-Sp|dz89v|BL6l(r+G&dPD;vim1fHY$$BzQI);q!(a#C-{E zDRePt5Qu(5|KWZP1S0~U<5w$f991?7W}@znoO^$9qerXvkny++bAjHz$96%~n-WYwo@}xtMlX+ zH_}boC3Wf(cw48m4)?(r#jW|pb-uBBaUG4|MkoZjV{sOnt9*YP?w_BBq4L#y>eaZ; zz;2(3?b?TnaMQ0mDU}vTSW_(j5PuV(7J6gu+ z^YY*GQQldI50z3PbES7;Wzm4vG>{i9e*}j>l4s&IvP9?cJ(e*im{9YEid(KV;Ex1u!DMw(bF_ z(m>touw0|QQqf>|YPkf5L~#K&UH$+sSm-~=`_)!Z+EY5Ih~OT=>lufP%$l69)&zkG zh`P;ny?O+<#EK+dPDN;p$r4tQ&V;Qp3Hv!C3`D&0`Y^{<+ zTZ}aYe@WP@MLxDhB7ZR+zRxgzvz(d|3T}ixQ*oWiT--Xdr+1rME$Q8sVb1p_Fo51| zE*!glS#q}K^3?h&M1TxMyzsW3L4 zii32P(!8w2+ZOaVaC|0dcRYCm~u`CcP*24^&hW9R~`-Oo?My?i)Z zHohr^QqC9X4nBBYlA^7sMoUnr{3mFF;6BpSl=GfL-f$rIL1$Za=1@EH2F_0GZtWZ% z{yss-Z$_Y3FZDnNtLMBv4+w1r`q4J&?N^7VJF1n&2MpEcLl746& zo4yQUHbR81!M%}X_;v=J_wc&&XM239S{cx4)n~gvv^=fMMA!X9 zMwyS%)&ef)9@XDKzEPPJr|4H#>7zty4UIZKxHzq*d?qLSv?`9G3*36bKL#;gpcZpp zq`#Q3XK1B8pa`jxT#|-lbc#T%+M^z%`;h3yUed=T5A)&##Vm@PVP8*9Oy8dYKa0Lu zxGX1j(Ii>Zj$!F+ySs|`j{a@;x2?cN#wKVa@Ibu=+XPESP@nlT39pis;>!w(pYFBQ zuh@W>?cvj2Jqu4-P|^O;Z@d`U8P ziDX_~@FnFnY^6I!T-#8U}A5-+uMSO~% zd?WhYek1dm{OwCW!To9<^AUSmUD~lLB}1qN;3c}^uKwV4{e+PD42_kHnJvzu!9?+i zhSDAjX zs$fzg{EEd@-m+#axYC`!W3fx05J?v|Uehmb?Z?95xkgODL~x0W$Ubo@5h=1Wbd#-1 zpp>M(PAqv>vcmmLwPc9^nifkQ`~eJ(-pDVpc>8I5B)``8c<8>@@$!DZ(BI&05W(A=ieTEJl34E^N%h)EB~n4qd(d&R`ds2^s7LN{79;} znpy#v;YrQ^YU#PSU2uxAAlIFLY_SVIJlKo5{bFuEE&MalE3&4_A?8IxJ=lnVre}yC zMf^DA27X+XhHAi-HpO%~t~J*a>4p3CXukMw08L(CTGW+Yg4=vgx0wDSRxXnkbuY>a z>R5vNQ|S5dDQK3zq<<+NjLkCVP_@ah2zs^{w&floHjNQ;=;^xrzNM}iIM^bt5m%U* zev-zJ1B%FH&!68|)M)mRCfJ0T)u>dEo z>&HcwxQ08~ngf=$V*N(zEmK=%YJDoH1RBXDgw zZs4x?m~@%XZT!-WbuH(MobAq5e7pz?S0-QI7q{O@pKAwkg&Sl{WqMfs^_u-*@uhKa zf0Jn(#r*)(o$PaK^{yOz5vgAvy9WGvVHN&}ZE4%pd{jpxN9aw67VOmYmXjOyVO?ufmrSQ zvDD{crfIoJQw#nITZ^lxg}2|B;}+X1K4h%ZQkaY&p&TTc>3pW0HkM@4WI!R(H-|i= z)$!}5ZFA@$3?GWzw=_S6x?YmPqs~tuYCW9tBK;6C-Nw`I&$s@0znJG5fqB}|wB;8$ zw;6NNpv;rR_SZqTXimLzk1YO#FI=GtC|9U( z#;e5~!d7z#TWom!WC4bN`!I*&C-1nRq|O85ph~|*<_}^Z@v1TOKyLcd29_;(oowhs z+*N4puQ6lAE(@2fIirRz?JL{mS`bz(M1ZD^tXzFGZdTlH5^z2ak<9|c#C z2tCY$?KU-y)#4Ugi{)rha0Q9h60Ykok+JH|x7D48x_T<+-1#KB9}lYeeOt}*xu&ry zmE<&kuFJ_K+8io9hJZ1;cK;Ee@@VLo=@47 ztZdqm-|S=T=MCxs5*Cxpr_jT7H>tbGl8`L1?9)X3X|ZF2gyk~zJL|K#fI<3`OcVOv z+(~8WEIBNjfW&o!B}?tR#b1^xm2GJA7tv^fevjE7v^qXO)=+RZ8AdmMNz1e9%Ik=X z$5BOG6KkG|2|a_=leWBaX^sO!DmI@(mpu=Q4_=2JFq7|S!W144%@`6sutIg`U(r(o z=TxajG%UIDg-+PNx@!aCyL<*4cA?cQbUO}`>&5iRG5*38P=itGg0&c#A**?^OodA! z*;uo4==?d|ZwvK@?U!j@Y$ca{sOWJTB^jSv7US`Wf2W;hk8l^1W-LzGdJd|@xtK7# zHMi;jr)<)59Ck$}`JMp|iPNHHA zUt{C>grDqZvaO$4#wIE-@&CW}hmKv49yboV`0@)QM|6B8#bx|5fgUX&1H|JD|EH8l zj*P1hXW%PJNGC;7khx>dR6vn3aO?MP(Q&4YBs3EaoNdWIW#t*ucc@sZ{2jh~u8kao zbnYhU{EF$Np8?;U*l)Z+J?8DI_>AN;t*&`%Z& zpkRzFh=MbJz4LCHERqmFA7}@s=heX{m_N1#liZhwZ|WKN?j9&kbCu#7mVFk5X>NMr zmW|fEM_!}`>Ph{$Fc+625(u<7_Zq1Pn$m zaep!dKYROAZ0&z|()QgvK8ytP0xp^Cc*fZ5qdMCLaa`i4jxcsMd?Y-(tej(O{SK_H z6OU(T`*UsWe?`_BHuUgyfTR!`$e8q>S@ay*p59BfcybH3-w;)kS9%Z7i$aq1!2cF( zV5YNE^N7CCgG29F?0o0Y;;LZ7TS(uWT-d2EJVHl;y+;s|S=cSq1CjA`f(H|VD*k!^ zE6~DDnZwfrw2BE`8+0GKy9+KbbADO!N|Gw2)+R}$DJ^-el1*dNiP{6*X=oIv!z!s} z1ijrD8QixA@z)UolK!5IgsSy1Vpb#B)Ro;Xr z8ezHhVzxUt8_XxCxpxCrJCwXCW@q4MqnMqEpG{)+MEul<*^_V@LCh|!@1G)O&(d)u zYjzesNG4`qh=`?_olADp0@HmtEAIbUz$|P-oCC68l(t&8@?VQSErh#42}uJo;X`|V zZPMTcdTPLvqyc=)VqqH({eT5#k`2tinP4z(e%U&4+{X~o#6Z>&2iGH{!k;WM$6X}H zT_nd{B*$GO$6dtZF5+<)@wkh4+(kU@BHOr00mb}FgXMt^(2pb!*VzWK4{4h`ytURY z53k`VE)V|}2RTF@F0+BGFhLG44*nFiFG)Y?{#>4W4s?0DyVlkr-Tv9%!(DCa)JJo4bz(4;@U=msM?gD* zZEEO02-+!tX5jPS*jgBHTjEXGt^k3-YsT1+T|S2a*xg?St~#5vug+e6ZcRFx=JXh= z$0HAKaiHQmpWqWAOsRLe(^@0S>z_dga}MF~I2CsD=Ojo?IR5@%YuCcIx!5sg3?zFy zWrsXke1=qQ#5dIOt%we9W9QiEAYGTYxh-WL5}jiU>2Jy${M}#QUYiOwF46=16Xc&V zPy3(wQSf6&Nu7Kq!jk3>>;ooCU0rRF2{?b);oZ{S!W2*XMJg^2MH%iA#or11M#mC- zePIKh2(d_>&gEUMx7WM|l$g%4vGU9|Wz*iAJ%TI9CNxOwUvm!SGzakNWGkRhRvF&Y zpmd-G_d4KoKa%u0Me(F>r+4RRR)!L=0@ zxYCR?dT@fv;;}}o`0$kol*+b|ha^O*OGhyzjs$;2nyzMwYO0ENi(?HC z{$b#eE8`6%QBd8uF&Fp4@TV5&>SAhz%NXdg0Hh)*TL~@}QcQu|%jFa}2$wQm7D6#z zTgTt@_Rr*h$`k2OLR}qQ?OknMZMX{sg(K+~Z)Lb&gJdP_?&G4XuKqP+0g`lGJEUfIa|tX}+_?~*qe2|mxGap;w%CLS`SdJ zZY-z2Yo+WwgtVx>m;M?){Ot-*PJ7+^2IaM-+{V!8{nxDyN8Rz{>IaYv?A2>2OZ};+ zy$!#jdIA2nr7U0>Cu)ODj;;WewYPMHmz+kzqE{0Vc)tvP^LoR7#9Gka(%v1PaHLpb zqV)KGKro~zh1+R(uD?}+&v><;z$^Y_2yIupsGZ0C&!?VJ?m_?i4|TpwdALIY74a4- zAAM>MwWknaBGVSFY2Vg%fUxRnSDttYc;>&?zC$tSgS~AnT~*W3wsZSz(2i2NF#~@^ zfG&p-#*O&f#p(817t&Cr{1fCKQl8>{vZk^q`u@w5Zr{-n zQ69e^DdHUyiG@H&f#CTWPQn^9Tygj#pxj=Ygw{ZWe}eo&i14G}M~rptMbsH*>H$iN zz=ik=RB(F^$W-YRwYijCJq>@~f0+uw2}z{i)Zv;VcRgzfIAOlfjyl_0It{9?1j=Ya zTBMG+yV{cZp}nq+xzWD8561OxO#q~S-wxgBe> zX{4N`8sprSRu z-RN01!Y732L9pee*LpZj3RLGDQ9BVidM)LM+DS-v1tTdOQ0Cf%F5aJOH4QUbPdi>#wWTpBH^dy zqK#fUCC-MwhsVx3=!-mRYMn2TAn?A;jC}Pf2tqzfm>OzI&BY}IXtyCRl5H9#W6b_` zAx^l?3ByQ=2}Ml@>g0Nd$rt_$p6%$cPJw&5mTZm4Os#f3ei7`g2wo19BJMX~JUXV9 z_L$pPER?UA3uOZ!Icv!tN#@4VUeGx0STPk>NfD$K=ioI_BnqnOaXD^(q2COFes|Z z>-w`Mx|vjmO)T;(r$^J5GX)*m;t8ur2_dW&$EUD}IBU>_j?g`6+RG%^K(p_AD}m9V*NkCJ)GA+ghA0 z4Rplw9NlH`+l<4@#Hc=7R>st`5M$-#nQWR_9oFA5kT-)mq>>1hR0YM|8kdPvF(zWR1VYl zR&Fe(2fhSM4r^)2C{Ml(@EY6E$v&t>5{nci@EYf`v9oN3iL(5T9ts#O+6{*WE|yZy zWFb$3!P1MvI*m-8GA};b0f>F?26>}Jjin7DwQcxzfN2|hFN_1e%Mn%Wdljjf9)3e= z8e9mA@+Lhm+5Y7NN%SZ|Q6`jSDy3|E%jwJYxZ0x9F+!51jz7SBbI7HbS0;rJ=dw8?0_2Yh)7P6V4e)OG0NN03L^~Zs3xN<)yMRz~q0g&J z3o2_HLSsQ?vzb~TXOq)+8RCnVgqP50*nl=}%Eg^x=o@dK<6NxoWuo^xIV4P^X;2U6 zK$OaDB)@D%Na%IQ4BQ9gOt^~wPCVc}*uX7>@vo@5+-(g@t?#h_Si(|?@k#DUi8Qy` z(f}qgi_M13=h0|skv4e&)kTr-523vwNW5v}r3QnzM2ZNTD%fS5i%z5fXv;8#Mr+Gx z+Gs%3BJHDg`LG1725Ta5l&LOVK{32&&Abmi;{yok*k4{HmjdiMbLGs*$A!F%tWlUJ zHGX7*Rr0M^3BJXUDqF_bA0}6iSyL^N*?3VTpTk{of3qxLdq@fV8cp!JhV&ZXiyEMj zx*rNk>Z?dutiQ;!vNxiasUacHJl@cD=w?&;*OC&$l_GQ+EA&_{k8(9enJRiu3U97PNKnPrNRn9pdpEsU^dND}~ zUByp~HL$vfo>(y!NJ}simLRVBBCQr=gAg<^Yc%1eZ{BcX2R;!Wt}e~OMWwi54OMkD z3jqSA7@eK1Xe56rM>P_>ukrIBGvG1pxDYoambNLcsomtiQ1s%70w)*S^x{rL2@w{i z%Mc50z##iwORt015c{KwrfqMcJ2+QMGxd@T_>rU8fi+lftV8V=AOSITL?$Bvt>B29 ziUd@gBjO3|!X+Jeq8SMhp9B>!5$wstanlR~=RI)N!Qd}1^T`$%XLSfGb3C}>JC1S) zLuzmore>MeIKvv7^baFq*5!3~m4xtS4Sa`u`mz)Ey8%z(q-z&Xy`D#*Jh2{K!-)i> zHvnmN^%6EjKl8-}dbIqk*PIRAwh+Ss^v<#C(4uQ$x9){66MY;IUi6W99ywD}=+d0X zj~O0eXoE+~0pPKh__Hj)8%wj8e9VI?60uN`-NkQFMVhan-{PVT#O`7pB^@X7gHeHA zUVUNI^=Z-cpm$$7+AmKQrTg^aeWX_N00Y5IgaT0jC&OBR)4luPLDBltOCKUetNZZv zS2&~5q|LZKCBJyzl55erptxpt{?o9Oyr+1$y0crLXc-xlV!)Q-|-#1(ZP}+c#{i;i)i%uIzFH6}7HnP*o7B)oL`8N&hLta`{q<`hm5Q5)IZod1-)=z zom#UKL$7q=0QZC%MdGz+jj=3RzT7#0lh3{*gwV9qqwZ~{si8| zYoC#=yaqXF0`8bM^`E7kM;{5V4~ zkyd)j47d6d92goGg$}s!O96UFa2?nEtfp@R#Efj@896CP=jxG_J=~03e-D6S(tR@@kYqywg$Y%!SjS$P}5JdJ1N(2Dk1c_~%=jAmuZ4w{wFHFd0O z8WCfby+_}q-l268rYEBK&2U2V^lZjO95g+jLJSysBsM+Sx#HcTyjF*yAU4hOG^2D0 z-j~+ZW;svMcBgUusQlvQB{u*}LGjKd*S-$*18OzXJl&Z%Pn-3UxB9O4wrS4m zc6p(Bsy0_nm@8BqjdNjUss{;)$~^#x+a}6epro5CaoYcpteSDMe|!7H`MHzlr&2bV z=I80e2cDl>G+ZffPSM{&e`=-KJVmo(Q}lE~A5(M<&(BP2e(t3Cxzl=EmX=a09_fb^ zB*Y_MJQLd67LUxt5e?oU=k@Z(N89m&vS`vi-mMpBiaf1*6fP$1cPUTQBOkIKBH357 zf~mC5>E3KBhG>`54QCLD@RMjUTvfZI24vNHxvCql5(J)yl|WsdEqa!p%02OW5D+doJiWn4{LUV%3u&(xZ-=BS^F=3pU78qD`f z^hhb(j>X|MF*8G-RgpoM{xA#9leQe(e?^sKaDeiU@wCGCz|<5R-iS<=eg;CFO1}n| zbhRg^ni?hJa7XpCvDUDr9qQ#&>lw^*rZ6j_I5X(cG7ZiJg}{uYiB=F67v^&>)3S9F zDD`11PmPMw&QK<{BV7waIOndz!ZGRypW<%3QK>l2Ek1|~brE?L#RqgAjWI2imr8ur zjP9`QPuYP;YM`#e+i8VFyN3&ju1Lpn-{EcR9NPwIq7doF=ms89{t5CAc|`e9@MA~G zKKU#|r2Ayt%?gpWc6eLuAyRTZ1gM)58@}wJh0{f*XY+8;yqE)2O z^uTzVb&e{N-NcbSGi-*~t`$YCS2nfeG|T=a1OR~9OhnA-&uI$O1q17lrd-4;t0^6* zGaiCf{t}WDNTpvYHoejaq_VTb$rW%ZlvymQ{YW8@%B49BsSn>gV$_Pk2q^gxp zL?D&65|ocXsyb0RQltaUD1sMl14`jqBg8n#Au$9}S0SG$fj}z!!aMO4K8#1)-i#yy zsmE#BSJV7M;G09<-N>d$9$W*CM?!Hc zK!YqB@fgQI_8wU#bEukDI?2H%?_jX!Qw+$;^h+=!*Toy@?D0o^W7d^) zi9d>QuF#lvrR)!p*wHddj5o_Xrm4@JU{4MgL)EELzwDrs5b#lxwA26w;WO8Vw*=)Q z)?!>Mjth@b#9`8@oYZ-j-&>D^*0N0Qqw$FZ)Js*KtCKrt8P>IR*52Z~58d-5#OVPnNJ^&_30_yVOjKvSv zk@XaC1c&48hJo2e!Qwdp*0~+mWdn|G(38HFg2aexgZRR@4Qa7<0sfl7@Vd4m?X@4G zHZ&Fg1o?+F6+a4o?5LVgKsZYeP+A1$;V*lHsV{g|+8f?CC=a1G#8{Qbi;zZ?`2DVS z3dIr8l)!r+iL#Qek&mkki{7NA^y)SEE4|_2{ji%P0E;Q%J3wI>v=-GAz&4eW=~H^h ziHlUNlLf>rtWZSbE)H`?uD0f%;1Ho$n+XVo(0pASK(q%ki!2IKAX8t0^FrJ8Z{3y?>bW}}46Pcw4D2+2B*&@J!UeJtw_lLWxF2t{H z@Lw4nr@04@J1fS@*#kJiRlvrm5-31bVNlRiter&7TWB(oYyqcjGMq}s32@BeeU9Pt zoW+L;fL-_!h)R3Q{tt;KrjDdT8!RA8=13*V23|~G$Tc$NPa}T&A{JBCR7JlOIg+7d z^M${K$G9?n7EcbPvKLI3Dh)yCFdn3WjRm23;d|s#sr?;g=f{s+nOTZB9lInMoUH@Q z@O*@9ECEQIIFTD@0CD_ju8>Mn{JVgk#pn=nXdaoomS_5Sd9dOP>rum8FxZ)At{K(G zk>ABWI~lazk7vjL{{;DmWPl$9KXz0dK^2*0dW_kJi=ee6t{J-SK`nde`dTnoS;-;? z1!JExq%Xt#u}Y58I@MH)P)ELPE}B01m`=g#rT=ZlqEC(UND@E%_;K7h<@Ei-ToKz-c5W%ygP}a*`_9t-DHs{OhpIu&2d(V>S;O~YNq8?OU4@C zz#vZ_Im=3<88wwHdtB6rHAoMT{N&*9A`A^ze$Vo=L@nhE1L@zB|pmWZVd|zqyyGamifS20>L(@z5570 z2}qXgRM~{7U@G(=V-LKbwWv>QJRtcHeL_y!v`%gt>OY0*kkXQtkYmMVTJ1}CbgTgQ zHY5tz1YV9%J!J#498TnLp|pT;*kg4y;K!Dr$N7PJMkHMBZ6deg3)uvKqpj2-c1y78 zMoo}b-IrMJC}>Y5=7x=8<}zLeB*~oF!*$G3xIw03+7~c!@d5(xpdxuw`I!Sm)3PID zDG}S?p}S|J=yR!_RnyW;%Q=KBkrzkI4pn6IXlqV8Kc`w3-t=UT~C{Ms_L3#SF-PSD7l7jL~ z{h>j5FofdrSLh5?#^FgSWT-(t6B~8zTRsygt?77VI)&-+T`j7Q5`^UwTH-mOC7xx= zNz`dA)pe}EnNmt5Zj~PcaU_i`VL~+?0CS&)Nqglxxf(rL#vaamkiwK30y9R>wYl9s zv)y5qnMdAVDTKo`ew7=`d7=3400{G3hw>!d zUL^UPtgOQKK&+Bwg?cSxD&Ic=)8e7|9|9c7HkVUqUY^_n1#+bHKY0Yz`_?vMd_lHw zxjFA{Xl0Z3nWetWUP2d-rOs&(96}bS*q!iSP4K~z=S6|}&hv|uDG6#qV z0R)KPer7ip0z@nTaHpoqV=)MSq#@aidT?OO#KLH;Q{*JI)+ra#@sk9EVHY1dljfMD zgQAgjBe#UJB}D5u0rfeU3|Sz9s3rW&^FXw)S^6gM6iVaUY@SYZKN60-N}kx2Ku9Ha zS_Y0JZKVs}ykP<|wKoEGzS^T0uV4okBi1l-vJ&JYA)5}9z+BGBMrQU#%1w<*=LcBS zShVSY5e;y#9=wT_kK7e2ett{P-0dVB9aslNLp?SDGej^MX?;!xu4coiC@|(W3h6az zmr>-QDOS^ft`d$8d<>;R5d46^l!_Bh3Ve7Cq?-J%CmQ*hF%rr(ga?mT;$oSK9}*$u zL5ai(0sQF*%{*>z&agl_dJG>%zycpA18t;4N};Iqz*Mmq68H&ZCQPpl1Ugo{BW;c( z-}dm!u+J$>|9ik0!~PLxpI(6>y#o1ndEmDZtIZXwAZS&XUU;8-Ung`q3Ni zI7icb#s46Ta|Gfcn*EGg)7@G=wd%&s7;btp-JE~6pJZAav`fC4&bvf z_=`w2P7GPv`%)-&fPa$ChsM~@kHJI-Q8fGtGUL1e>Z{9({ppsYB);s0cU&@kwm z7+hZ-JXw(HjLFvXsAQ>(Gvb1-Jh_JoNYDa7h7%LN!BfCKM0+p3)Fe5^e`5b?-|~bn z?FYsA?*86 z&XD`5Ts|v974n%<>W5f;rKhbhPFQp6{utgPX6J8P@+Ik`E>hZcK987=YZ6|hxAExsi6-x*r1b~!vKYLK zlfyG4yqR%$dA)$22OE54dZpXnBIb@*zc9N^KZydR;?nD$GerYDl_PQ)a9!)X6Nng>oexB&cJQ3sAYUFQZyO%qmguIRJUFO2DKSVMouVOcukx4o`+l^~`M$IN zl#)*U8nb3jklw|1XdO7+-6pO%b741qn6b%)8#oFObXth3K)b1ecyCFKUeb!!SheN9 zM9eGOxbc^s8$?M@WYik1{&=*wr=a-Yk`xV>gY@7!VS3&5<_u7mPEuhMbkFG((sZb# z6I*&Q?(fZ{;8n331IeqiMzA-pca2_pAo(=yUEC{@^Uh}KTzlV<(;!Yiv!q-5&`iFv!utn4gepC{WW%w#iees;EaxBjz~{9TIi|CoFG_^7IDZ+uQN zArlxli9`*G5;b~>@g-4I#(*ZkgdhY#3E~TCTg%mAdjV$@+PqA9W@=6jN3oLDdy7}7 zwxzwazLZxDkO`Oxs1RO?L8t^pIpc{sqRk7?%=2AqpP5VoSfAhh{qdlm%sKn)z4qE` zuf6u#d#}CLQdF-YhmLyHR@hJ@hr@dnClzHXAGO0FacsVFro%zkv~)Z8-_^4yV%|-; zv* znK1o;8|mx`uALR|^=YQ7mEY*@Z&dI<5nhT7U#6Kj@18-vs_ieXgxe^L#vvL!jq;0m z*QWdlaP77qc3Nsv?#|%Js}0UgzD$-*)||}7=y+;~?(9~FQg(BQ za+KW={&WrYOvpLi1>{h5fg^VKTLh7b;_Q_!=1#SUx`iB|4%bTUTBc42sW=Yi2lhXD z_iRwfsbzFFrFyO=hbxjCcmZ%ao02@k_I##h@R$z=kQDqZ39rx$Y~~V*2Aba0gw>Y~ z%0R1ll9xBp5sPEqAF(J)g0F-1dxIa@^+mCS18N&?{dI1W@e!dwm7Uh}2`ZHYFES{D z8+W_JJB&P+a~|>ZFaCK#s0vP1dk&ye?R%+a$o$4^f-G-!gOg88bM8jG1D>Ie!w`kd6ZWiJPP_r-- zr`tTAiI@JfY=8X-{v(}q0FH1>4$l?nypcFeqlp$;V{D;TaL5?ShAnEy^ON8gNpP@d zS5KKgSd~AO<{3Hg43M*U8;qT$Uc!uh|66@?PB8aiuqPR6L`{!1zs$*2FX8zm&e$V< zPjUelPErUiH5i^@VRR{+0uE$$o^?V+nG3=D7N@^VR4jaut2AJA}ov||*PEmSdR>AC#1X(09{_Q~Q0&7e_X-=R=zxW1B z34PXcnWTaq9R+cM-Fj9+`{u_2?1Mt13ff(J7M(DsZOTUf=V2}r>gvKwvTjI#uVMP= z*!OYTDK!hDT)S=GmsGmh?m7T{Y^>sLPr`HvS3K=B?%a`5nrw>Gc}js}XXspKs3mA` z-<)E*hxC(lbRbN45keu|)#|b5wwl-K6~BUKgXhwfW>#?H@?Dd(drrHWyfPGXC3L!g zJRX~{xpg&d1fxV3eZ%^U`FZSoI#GWh6pPY{Us%+-f^y(*XgyJARt*hMebO(|p|SUC zf4=t9)2=RW9u#Y(=`{Swe!hw%EI9fanp(~xZ5O(_;GK%GslWrx4dxSx+$C5`X-c-( zXs}+KW$_RupDg4zyuSq#A;LjmhwT3|AcTss4?{ofvOZKSG>&4S61G_55~Gwdg)2}X z7hc%FUNo1xk1a+A!L{2lN}*?@QD?DMgE3)EBu4PZ9izl#f^nghx1W77St7Jsx6n{> zTY@mZE^Ftg6#G7cLAma%XZ2(!76nr4cosv$z!ti5k2RkRvozghtNM+Uw}CtI5ib=( z_8wM?9sL{1A3M}yC+-^1{_rHMMldyUuR=;&F2Obu5ejw`?8Q=R-ZI#CXk!NDjY)kA zsk9W#-9;=qMjEjXi$Q%_DlJqBVHkaoS7VD{jtWdA4gP4#Bf95}OsNSALDz{zH!Dj{ zlSyW{KhxRzy@_4>?I ze|RR;?%CJ=Rvt>^p+xOLts=*{@5@5WI$YuLf}b{YT%jmTU1Q25IokAOK@1n>d(PV5H3H6dp4LE;Id#R?frfZaGl#yJ$aa2 zU z{ElY?Pe5>sz7Lbk*Q8F~n^_y&_nC=#F`~}F?g^#M%z|GE7BR{PQEa}1X$?n9+N-Q3 z?Q(uk@;LW=CKj~RIxJ|veK{K(u$&)fs z2M8`f$Y(-~(JY`eW{WmJ411s#cj(Kd_n`2RORl3b^MgA`Y zL8HOKT3h&^)NB&xx+lkMQSj2Cwb9K2YNB( z5%LzhHgy@aD^Z*7-|M-!n51QbK2euZJ3}fiqWwvBYKHk)>Bz=G6vCV|!r!ttWz*}3 zPZ4N*^BsPBQ@nXoHqrwIDqWC+@<*FgU=d2ebRb4BT*^Xt*k_<1&7;^Ww zyWsIrvlZwnO;z=qp*NS|-MdqKx(?5&MmEV<&IPu0Z1QZwv zVrJ`sZg3hX01-$xv_T!BCkgy4BFZwNC+JF-uZ%Six~mAo)k&UfjQ>XC^?EKoOL(%T zjDJt)fYZ|uafb8TJy#%r0o4Q+p=_UsY;?8E_y@*^$R>FQ*K8+pKll(l^8XoLBm40W z^UJsQ-xSP^%Jy{OW^mQRm!&$k_4NnJ!@DP(7m{~R!s2?WejZk~=o~P0vw9Pipj|`; z(3fB7y@*xJr!tIRuZHNPB@Wd6secrEj+R$Lk)KxknBPP0ZvY)T*xmGlI&naubYHY+ zsId+Q8zCDEC2VHKsu|c{mtT%7N<~ImkLl2WKzAJi5C{TKWA^JbRdDr-;SIK(c5+39 zsE^JQKoLi&(mhyy8qp!)9K$>9wKBHuK*^ zV)iE34%o~QMsKo&eGx>6ejChVDW#SSm=j?QP)>|66*(yKl})v z79a>xe+Fea#RA68*q1T{U?216i~6&^YhhBc82iNig_@3QGQc;1wO?X*1-|)$hco)y zL1UKs9ffR0BNi1z*lmaz0n^$)+D=ESJ=a0!Lf9`So#bMB_F&CXWc4XKu27vU5*Hi; zBV2{kd=$cI5c)?e%Bnr+JDQ3MD)P%MvT_^x#yD04*f^k#pze8H+q#pzwB{Hxhwd^v zb$u;P(=32503f48#fFZy*~Zg_;VtwBvsLp(y4y+Dm<&MD{Wo#RKnGrEQ7PA6jIP(Q zo)+}vc8$fM5eI-GRy67!B`k3jajjmq5gcvT%h%Eo&3QjUK~8bP>j9C7OeS=KY+?2i zHMMXhieo+ek$Q(yzccFUMih+}Q6M)2KTMSUr*^41hFVf+g5!5o@RwI%upHG9kbI_7 zzef~og(pZ9$Zb;jSHBC&OF~(0mMURYw}v1zzC`Uv@!pS%gOb!-x11YayL>3opl<0+ zf5lJjQclF%8{&-;oBjNDYmu1^S9^pZn%%EyuM+%~gkj(qzQY?H{=%l+#jlGT&=SOl zb@TxjZSXf2)?Ew?l1{59I_dT#L3d{n?ErzlUI$!QgBostc11ucgl}UOp;MV5Miusi zNnOS@HO4FVE0urYpbp@0|CoPaB22)?TtGy(t2aO>5x!6^gXjd%_YK1SqbsRnoZ1w) z>c1S(1=lSGv%^YWt*^j?Ahf@YnNe)0;-toExX$zq zs{9LI3q)URBnJ-TL8-)+r3F{VGnyAHRyLNK)ENNxxU}o&2#JsKEykPK$G(;NX)OeIyAj z!Qw*(j*!{6V1L+6B`9F!iq0+2B_mJ|X|xRN@mF4F0#N1dTp& z*aU3!07C<(LLsNIVSMoiAv2cX(9Zh+5W>zMwC_Q5cz*|W0wI|w9xE;BjgKr=#>o{a z^d#YoEhl+q@uaP!S48U^)|^65*EXjVytwI!Flu1~~B5i#M>^-UUi1lWV^D7|Sp_D1guXaP~ic$XlVYn9%?-g$rpd6wjvOHvLWSu>FEgv>1@fR4OGEV_6+ z8DUcYSkyk&M{S~NQGZ%vL>a&MJqrutINYQbXIXyWbS~gjK4AQFjp7Ic6 z36WFcXs86Zp*fxRnK~k8Yj;FjF0Tc)-Ag&JWz%vpv)TWw`Qt8BCuQ%o8 zZ;(j$9|v=V#-$LnH0l%k@FbLPBKW!bFqC2d2oX!!?%>0_#PzDs=dr{@-B>nxl2!PZ z6BtcLNCM15edyp@CLxoG5J}5Hseza*_*a;eSZL7N!#ckb^jJmYB!+npLL`(zZ%o0I zV|XGWhEj-B^duS)-!CWpXJF-lEAJ@&3>8l#eyD_Zk`=b-q4N@rcKLR!>IO7iDjiC{ z{mwJ--Jum{VIvMsazTxmS@gNz`ik{o?95vF@OMzDZ}|tfmehHU560yYZNw^1nlVUD zYBjonpn)Z5kzgt4M$b1^X~LiBh4sYQ>)!|h`G&-n`~CI$H)3GU+Me%%PXct~kwj<% z>2vn=MnZ9LPJiUiXK+}vaQjf61Toet=O#`9G~<1UYq4ga^%k#xNd~FAJeLSD5|;*~ zs2F4aQ;3sEiE@HQeoUyOzKmfzhz8X|R(Tpe#O^G0yI;VI7~JL{r3zts$1?j7IG>d< z0-0jG3UeuvTjvSxj9{Nea3`YnmhgtC5?hDI43@b4=^U>Ig8cTHo}vk|t>Qf6kufOC z3u;~^n^#(k?#F@#+5~3O-E=xfI06Hkk@;Vc$BprAf*5$j&msn=%?ubnS)SpsBaX$1 z=Q7?*#Gz~+nZv;MeHwN&37Y4kjYPKxw^`|f=-kGW!W)qT!VN8(EpNbi7q)V%v7+js zzqF^VVdo_Ve+S?%Pdz^6`an5J^s3~h>CxaX&WG=NFW(>Ml<=v|o*rfF)k@tYf<5ajco zVm9p%&}i&Get^D+#>fQrOyH1wLyZ%sxz#>ufac>WVIYLnUpGyhN;B>7)2tbtInt^s z->Rycwl7KIPKw)$Wg9OOIB({+(Fd;e{@3(D(DyUwL&p3h=OFIRAXAowyQiQ(nG*Il zMgM+$>iY8>VM5YXB%J4 zKV&9H`?&*#S-#bbF$0>Bz&|v;j8}SqKE_evXtIV9*)RzOG&*yf1@4pU1XZk|)K4E^ zc(cA6JlY~BDNx@ZUY`IX`IdzdZX{#x*|-kpn{&h6xA(;_uNhx7O(;U%kaJCDKEZi|yL;6v{{3dv4E~L*n#R8!t4jIT zST%`%kF6@=Uz|d}yA{$~hqoq(Hk$GPm}XA;F|Mr#ozN|MSv#!~>9e&B&NJt2*v!$r zt=1xyq-so<8p+RMf)mD9al`0Vf=Oa6p_)Nd%~ikQD*5@=FbdjpFw@wKU6^6dkf)o{ zfw_?kq(%D;0~_cuit~JH=__Ydzfg51p@H9Y`ZabgCnXfB3WGrT*)uR*Q#5Q(p3;lS z-q?5z&DFSxWD|3BrkMVNe$WPsiB0&WshQ*Cp}eqA#&m?uOQ>}n-gM*1ID|0KfTkH( zb)>;=N1JJ{+Dj3t<ol}w^uc=`SmFWd_lw8VyBhMQY+ZnN_&I}Rn588l53|tI z|G?^>?8hFV5@DPeQ1n+%rr=Xi;oYLblr68MAX0VUYj85j9*aAfH2~I0+bsaJk^tqe zU>vdOtCzrcP6vvB`m~r27&H*(ey!_Yg=-Rk*1c52G%CQFm$Ev?GQC#t6^C%<2PgK~13XR~s0y7vZDM7uhk z_Xrf#_Jo-KWAN57Jo7Kg$sc(BsGNM<^NQ=>6D#p`viTe3q{sV}`8-^?3H&&oIO(xD zzS~8AcrMcKk$lyXcoVtQ_vOG`46>T-)R&fn!?=Bc$Lc)vzRkF28T9q;C?A!`e!5dY z$1}@FV$cA2^p~_u$I=te4SH1MGZ$%y%7!Z_w^q?tF6(&^JNk%`%6t3B{2zb|OVWa1 zuzS>v?)_;kfH5-1D1{W|{N{B8@-cwahR8c=demrb)cbdI7s)W=XeC$s9$A95l0`9_ zqI>#ZDTs|%KB9HQ&)F!95Gja(l+jc`Ta9c!u{#(Y1w(1+R7Ow1DWFi$gc-$I&|}F& zAxLoM1v{SHAel1QMjX&8BR5t$mn2~~zASQM89kkd8EeF(Rm>lq(vd@F1lGb4hJ3iR zo-Q58Xe~GZhJ<4|Cx(9vg7;W6t-NE&`Gf|9i-n1b=u$0I zc~1Yf6Bgn=#RJ;3oC+xRi`CY&7O#sHRa||!sewjVLyiyNZQfM1DSRXaqjFZx0&OWL zsu_6k;EVvDw&RlvpXBEoUDI+r^7Gq0Nww|RPPx8dZw!XoD*IQQ14O}IwKZIgkMl6@ z?m{&lK!(smaL?{}XzQ$bXzFaFE>OS55gmAB%sl*=L&^84umwg&PtG0l&?nPi;2p;6 zw4CYl&`~oAcHnU&z>WoYn~oHuQUGKpo&S%-5(n33aC!{uwE(7RTNIR4aN0~aHpWiD zm$6Du669elZ^7PqU0=<^*=sk5^i}X9*gc`a8yeGE=^eO^6=`Fvgphb$Aa7_(+o!g1 zrnh4>@mzqGw{?A``2|VSLq(7|um<^*z>bwSw5FX19#5Ayybb%Khwup`AIr{Nu?q={ zC&Ee>4an5*pdHbic^GZy>7XJ|84V!$_{}y)BZZcW`N)zTn-8LRo`;(^@SfxOS}&qK zjM2P|%R`YsW7Q?RRHPSieuvJPbQ_65_z(1+07`_VjM>*tEy7c_J`3&{_9AXWGXRb@XR*V|JWtLT zbZi!SezabdG(dlqH{61fS?bsO%(QLu)Q5UeatsV|KE)pL9csjTgy0f1eNw3-4}Cfh zi#5)IznQ=QwWELaDZPOm)r0X!W(4Wxq&I0y=gk6-_18auMZUbD!UGmlPl-Ao@Z2FF z?mJ!rMDwwst#*44sNH}DCX}p-K-nzHhhImW!aAsl1Uo)}4JX;BskqyUjO0a>HcWsx ze)Ie06TrNNQsoV^N|WRb9*8y2XP!2uR4=AYW#XBvd9G$}DmGLkn|YbMp_zkCgXv%~ zrUvC#;Yjm+FjO)+!`1WT&}2ApF0Fy~FWDBg$2tx@m1C=#vxNjHs?4D=!|P3X!>#hG z-P!}Nv>SONEakwTkI(PS{b%0eIb&eeHg=x+_|H0npQm^IUEc6d$nr5tQ!jS(r+Awg zbM&FSVa#-S!>&B^JcxM>`hN60)w!q!3O6vA2Vuc=Pv@g~f*JbRy!dyPqp8Hk)EFfvZWV- z%R$0x8 zoLzfe2deEfRnQko*T-Ez<)l#8hq(uGn~7gw#hcU{<8%k%tIwM0$b;1o?GMTuEFaAja{YKKx+K61N8#u+=*ZV3e3? z50^;LH(;26P5LG08*}1-S*r=xV{Jz_>SVu$Cu;fzIz)DO5ChP`UQREPle(><}~jcAkWGo7~J;7{-Yq8QW>#%|3YT>#iy}E z(CBu95=6M;W9BiOVatIw%0x(b`o=T1`k%~%qmPO!sOr*@D(gEG4wLuUsA{!Yer6&n zhqVA)Tw)-`Py+=X@PTc-j@&ATbeq~s=oQmV#uMsHN3J&_c?rFU?4J-r4^F?2X$wz7 zCDIDWgN}tBh^#GSI;$;L+9trrgZ_9QDD*}u@1c(_ZDD$D7qIZSKDq?ALa6hW(V+Vfh4U6>CNFe=V6ZEIxhM`pUEHH@CwcOr8@j$ycUQm* zJe_(BB{s zl=6v5dQgt=If8sB?wjH)5`1=Luox9U>gl>f(tOUm?g(BLa@)^4w1~xY1 z_A1t}<)S=y2MPfk6n_(IxQM<`vJw&-NVsb=GlBk-H){7fqX=xrK zzAosrfQHG#M8EOwLGQ{NN}Mo5%+yOJs)KMY7b?jll7&CTAAB1&o@@xb!?w~m47ryg z)n?wKS1vCR=

@WxH5@ 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≠Y#@~7*%yE(`}f$H0`i<4zsZ5?HZkk} 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 z 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 literal 0 HcmV?d00001 diff --git a/commands/bzip2/bzip2recover.c b/dist/bzip2/bzip2recover.c similarity index 84% rename from commands/bzip2/bzip2recover.c rename to dist/bzip2/bzip2recover.c index 5cd405dd4..f30af3759 100644 --- a/commands/bzip2/bzip2recover.c +++ b/dist/bzip2/bzip2recover.c @@ -1,56 +1,27 @@ +/* $NetBSD: bzip2recover.c,v 1.7 2008/03/18 17:35:36 christos Exp $ */ + /*-----------------------------------------------------------*/ /*--- Block recoverer program for bzip2 ---*/ /*--- bzip2recover.c ---*/ /*-----------------------------------------------------------*/ -/*-- - This program is bzip2recover, a program to attempt data - salvage from damaged files created by the accompanying - bzip2-1.0.3 program. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0.3 of 15 February 2005 ---*/ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. -/*-- - This program is a complete hack and should be rewritten - properly. It isn't very complicated. ---*/ + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + +/* This program is a complete hack and should be rewritten properly. + It isn't very complicated. */ #include #include @@ -98,6 +69,32 @@ Char progName[BZ_MAX_FILENAME]; MaybeUInt64 bytesOut = 0; MaybeUInt64 bytesIn = 0; +/*---------------------------------------------------*/ +/*--- Bit stream I/O ---*/ +/*---------------------------------------------------*/ + +typedef + struct { + FILE* handle; + Int32 buffer; + Int32 buffLive; + Char mode; + } + BitStream; + +static void readError ( void ); +static void writeError ( void ); +static void mallocFail ( Int32 n ); +static BitStream* bsOpenReadStream ( FILE* stream ); +static BitStream* bsOpenWriteStream ( FILE* stream ); +static void bsPutBit ( BitStream* bs, Int32 bit ); +static Int32 bsGetBit ( BitStream* bs ); +static void bsClose ( BitStream* bs ); +static void bsPutUChar ( BitStream* bs, UChar c ); +static void bsPutUInt32 ( BitStream* bs, UInt32 c ); +static Bool endsInBz2 ( Char* name ); +static void tooManyBlocks ( Int32 max_handled_blocks ); + /*---------------------------------------------------*/ /*--- Header bytes ---*/ @@ -114,7 +111,7 @@ MaybeUInt64 bytesIn = 0; /*---------------------------------------------------*/ /*---------------------------------------------*/ -void readError ( void ) +static void readError ( void ) { fprintf ( stderr, "%s: I/O error reading `%s', possible reason follows.\n", @@ -127,7 +124,7 @@ void readError ( void ) /*---------------------------------------------*/ -void writeError ( void ) +static void writeError ( void ) { fprintf ( stderr, "%s: I/O error reading `%s', possible reason follows.\n", @@ -140,7 +137,7 @@ void writeError ( void ) /*---------------------------------------------*/ -void mallocFail ( Int32 n ) +static void mallocFail ( Int32 n ) { fprintf ( stderr, "%s: malloc failed on request for %d bytes.\n", @@ -152,7 +149,7 @@ void mallocFail ( Int32 n ) /*---------------------------------------------*/ -void tooManyBlocks ( Int32 max_handled_blocks ) +static void tooManyBlocks ( Int32 max_handled_blocks ) { fprintf ( stderr, "%s: `%s' appears to contain more than %d blocks\n", @@ -168,22 +165,8 @@ void tooManyBlocks ( Int32 max_handled_blocks ) -/*---------------------------------------------------*/ -/*--- Bit stream I/O ---*/ -/*---------------------------------------------------*/ - -typedef - struct { - FILE* handle; - Int32 buffer; - Int32 buffLive; - Char mode; - } - BitStream; - - /*---------------------------------------------*/ -BitStream* bsOpenReadStream ( FILE* stream ) +static BitStream* bsOpenReadStream ( FILE* stream ) { BitStream *bs = malloc ( sizeof(BitStream) ); if (bs == NULL) mallocFail ( sizeof(BitStream) ); @@ -196,7 +179,7 @@ BitStream* bsOpenReadStream ( FILE* stream ) /*---------------------------------------------*/ -BitStream* bsOpenWriteStream ( FILE* stream ) +static BitStream* bsOpenWriteStream ( FILE* stream ) { BitStream *bs = malloc ( sizeof(BitStream) ); if (bs == NULL) mallocFail ( sizeof(BitStream) ); @@ -209,7 +192,7 @@ BitStream* bsOpenWriteStream ( FILE* stream ) /*---------------------------------------------*/ -void bsPutBit ( BitStream* bs, Int32 bit ) +static void bsPutBit ( BitStream* bs, Int32 bit ) { if (bs->buffLive == 8) { Int32 retVal = putc ( (UChar) bs->buffer, bs->handle ); @@ -228,7 +211,7 @@ void bsPutBit ( BitStream* bs, Int32 bit ) /*-- Returns 0 or 1, or 2 to indicate EOF. --*/ -Int32 bsGetBit ( BitStream* bs ) +static Int32 bsGetBit ( BitStream* bs ) { if (bs->buffLive > 0) { bs->buffLive --; @@ -247,7 +230,7 @@ Int32 bsGetBit ( BitStream* bs ) /*---------------------------------------------*/ -void bsClose ( BitStream* bs ) +static void bsClose ( BitStream* bs ) { Int32 retVal; @@ -271,7 +254,7 @@ void bsClose ( BitStream* bs ) /*---------------------------------------------*/ -void bsPutUChar ( BitStream* bs, UChar c ) +static void bsPutUChar ( BitStream* bs, UChar c ) { Int32 i; for (i = 7; i >= 0; i--) @@ -280,7 +263,7 @@ void bsPutUChar ( BitStream* bs, UChar c ) /*---------------------------------------------*/ -void bsPutUInt32 ( BitStream* bs, UInt32 c ) +static void bsPutUInt32 ( BitStream* bs, UInt32 c ) { Int32 i; @@ -290,7 +273,7 @@ void bsPutUInt32 ( BitStream* bs, UInt32 c ) /*---------------------------------------------*/ -Bool endsInBz2 ( Char* name ) +static Bool endsInBz2 ( Char* name ) { Int32 n = strlen ( name ); if (n <= 4) return False; @@ -345,7 +328,7 @@ Int32 main ( Int32 argc, Char** argv ) inFileName[0] = outFileName[0] = 0; fprintf ( stderr, - "bzip2recover 1.0.3: extracts blocks from damaged .bz2 files.\n" ); + "bzip2recover 1.0.5: extracts blocks from damaged .bz2 files.\n" ); if (argc != 2) { fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n", diff --git a/commands/bzip2/bzlib.c b/dist/bzip2/bzlib.c similarity index 94% rename from commands/bzip2/bzlib.c rename to dist/bzip2/bzlib.c index e9c1e879d..8b5ca35f5 100644 --- a/commands/bzip2/bzlib.c +++ b/dist/bzip2/bzlib.c @@ -1,77 +1,34 @@ +/* $NetBSD: bzlib.c,v 1.4 2008/03/18 14:47:07 christos Exp $ */ + /*-------------------------------------------------------------*/ /*--- Library top-level functions. ---*/ /*--- bzlib.c ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. -/*-- - CHANGES - ~~~~~~~ - 0.9.0 -- original version. + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward - 0.9.0a/b -- no changes in this file. + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. - 0.9.0c - * made zero-length BZ_FLUSH work correctly in bzCompress(). - * fixed bzWrite/bzRead to ignore zero-length requests. - * fixed bzread to correctly handle read requests after EOF. - * wrong parameter order in call to bzDecompressInit in - bzBuffToBuffDecompress. Fixed. ---*/ + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + +/* CHANGES + 0.9.0 -- original version. + 0.9.0a/b -- no changes in this file. + 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress(). + fixed bzWrite/bzRead to ignore zero-length requests. + fixed bzread to correctly handle read requests after EOF. + wrong parameter order in call to bzDecompressInit in + bzBuffToBuffDecompress. Fixed. +*/ #include "bzlib_private.h" @@ -93,7 +50,7 @@ void BZ2_bz__AssertH__fail ( int errcode ) "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" - "quality software. Thanks. Julian Seward, 15 February 2005.\n\n", + "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", errcode, BZ2_bzlibVersion() ); @@ -643,6 +600,7 @@ Bool unRLE_obuf_to_output_FAST ( DState* s ) UInt32 c_tPos = s->tPos; char* cs_next_out = s->strm->next_out; unsigned int cs_avail_out = s->strm->avail_out; + Int32 ro_blockSize100k = s->blockSize100k; /* end restore */ UInt32 avail_out_INIT = cs_avail_out; @@ -1394,8 +1352,7 @@ int BZ_API(BZ2_bzBuffToBuffDecompress) /*---------------------------------------------------*/ /*-- - Code contributed by Yoshioka Tsuneo - (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp), + Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the @@ -1406,7 +1363,7 @@ int BZ_API(BZ2_bzBuffToBuffDecompress) /*---------------------------------------------------*/ /*-- - return version like "0.9.0c". + return version like "0.9.5d, 4-Sept-1999". --*/ const char * BZ_API(BZ2_bzlibVersion)(void) { @@ -1453,7 +1410,7 @@ BZFILE * bzopen_or_bzdopen case 's': smallMode = 1; break; default: - if (isdigit((int)(*mode))) { + if (isdigit((unsigned char)(*mode))) { blockSize100k = *mode-BZ_HDR_0; } } @@ -1559,9 +1516,10 @@ int BZ_API(BZ2_bzflush) (BZFILE *b) void BZ_API(BZ2_bzclose) (BZFILE* b) { int bzerr; - FILE *fp = ((bzFile *)b)->handle; + FILE *fp; if (b==NULL) {return;} + fp = ((bzFile *)b)->handle; if(((bzFile*)b)->writing){ BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); if(bzerr != BZ_OK){ @@ -1580,7 +1538,7 @@ void BZ_API(BZ2_bzclose) (BZFILE* b) /*-- return last error code --*/ -static char *bzerrorstrings[] = { +static const char *bzerrorstrings[] = { "OK" ,"SEQUENCE_ERROR" ,"PARAM_ERROR" diff --git a/commands/bzip2/bzlib.h b/dist/bzip2/bzlib.h similarity index 71% rename from commands/bzip2/bzlib.h rename to dist/bzip2/bzlib.h index 323724394..c5b75d6d8 100644 --- a/commands/bzip2/bzlib.h +++ b/dist/bzip2/bzlib.h @@ -4,59 +4,19 @@ /*--- bzlib.h ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ #ifndef _BZLIB_H @@ -262,8 +222,7 @@ BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( /*-- - Code contributed by Yoshioka Tsuneo - (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp), + Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the diff --git a/commands/bzip2/bzlib_private.h b/dist/bzip2/bzlib_private.h similarity index 82% rename from commands/bzip2/bzlib_private.h rename to dist/bzip2/bzlib_private.h index ca76fe62b..23427879b 100644 --- a/commands/bzip2/bzlib_private.h +++ b/dist/bzip2/bzlib_private.h @@ -4,59 +4,19 @@ /*--- bzlib_private.h ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ #ifndef _BZLIB_PRIVATE_H @@ -76,7 +36,7 @@ /*-- General stuff. --*/ -#define BZ_VERSION "1.0.3, 15-Feb-2005" +#define BZ_VERSION "1.0.5, 10-Dec-2007" typedef char Char; typedef unsigned char Bool; @@ -94,9 +54,11 @@ typedef unsigned short UInt16; #endif #ifndef BZ_NO_STDIO + extern void BZ2_bz__AssertH__fail ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } + #if BZ_DEBUG #define AssertD(cond,msg) \ { if (!(cond)) { \ @@ -107,6 +69,7 @@ extern void BZ2_bz__AssertH__fail ( int errcode ); #else #define AssertD(cond,msg) /* */ #endif + #define VPrintf0(zf) \ fprintf(stderr,zf) #define VPrintf1(zf,za1) \ @@ -119,17 +82,20 @@ extern void BZ2_bz__AssertH__fail ( int errcode ); fprintf(stderr,zf,za1,za2,za3,za4) #define VPrintf5(zf,za1,za2,za3,za4,za5) \ fprintf(stderr,zf,za1,za2,za3,za4,za5) + #else + extern void bz_internal_error ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) bz_internal_error ( errcode ); } -#define AssertD(cond,msg) /* */ -#define VPrintf0(zf) /* */ -#define VPrintf1(zf,za1) /* */ -#define VPrintf2(zf,za1,za2) /* */ -#define VPrintf3(zf,za1,za2,za3) /* */ -#define VPrintf4(zf,za1,za2,za3,za4) /* */ -#define VPrintf5(zf,za1,za2,za3,za4,za5) /* */ +#define AssertD(cond,msg) do { } while (0) +#define VPrintf0(zf) do { } while (0) +#define VPrintf1(zf,za1) do { } while (0) +#define VPrintf2(zf,za1,za2) do { } while (0) +#define VPrintf3(zf,za1,za2,za3) do { } while (0) +#define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) +#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) + #endif @@ -476,11 +442,15 @@ typedef /*-- Macros for decompression. --*/ #define BZ_GET_FAST(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ s->tPos = s->tt[s->tPos]; \ cccc = (UChar)(s->tPos & 0xff); \ s->tPos >>= 8; #define BZ_GET_FAST_C(cccc) \ + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ c_tPos = c_tt[c_tPos]; \ cccc = (UChar)(c_tPos & 0xff); \ c_tPos >>= 8; @@ -503,8 +473,10 @@ typedef (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) #define BZ_GET_SMALL(cccc) \ - cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ - s->tPos = GET_LL(s->tPos); + /* c_tPos is unsigned, hence test < 0 is pointless. */ \ + if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ + cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ + s->tPos = GET_LL(s->tPos); /*-- externs for decompression. --*/ diff --git a/commands/bzip2/bzmore b/dist/bzip2/bzmore similarity index 100% rename from commands/bzip2/bzmore rename to dist/bzip2/bzmore diff --git a/commands/bzip2/bzmore.1 b/dist/bzip2/bzmore.1 similarity index 100% rename from commands/bzip2/bzmore.1 rename to dist/bzip2/bzmore.1 diff --git a/commands/bzip2/compress.c b/dist/bzip2/compress.c similarity index 89% rename from commands/bzip2/compress.c rename to dist/bzip2/compress.c index 7e0c29155..8c80a0797 100644 --- a/commands/bzip2/compress.c +++ b/dist/bzip2/compress.c @@ -4,71 +4,27 @@ /*--- compress.c ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ - -/*-- - CHANGES - ~~~~~~~ - 0.9.0 -- original version. - - 0.9.0a/b -- no changes in this file. - - 0.9.0c - * changed setting of nGroups in sendMTFValues() so as to - do a bit better on small files ---*/ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +/* CHANGES + 0.9.0 -- original version. + 0.9.0a/b -- no changes in this file. + 0.9.0c -- changed setting of nGroups in sendMTFValues() + so as to do a bit better on small files +*/ #include "bzlib_private.h" diff --git a/commands/bzip2/crctable.c b/dist/bzip2/crctable.c similarity index 66% rename from commands/bzip2/crctable.c rename to dist/bzip2/crctable.c index b6dadfc62..215687b2c 100644 --- a/commands/bzip2/crctable.c +++ b/dist/bzip2/crctable.c @@ -4,59 +4,19 @@ /*--- crctable.c ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ #include "bzlib_private.h" diff --git a/commands/bzip2/decompress.c b/dist/bzip2/decompress.c similarity index 90% rename from commands/bzip2/decompress.c rename to dist/bzip2/decompress.c index 81c3d2cc3..af1d4d09a 100644 --- a/commands/bzip2/decompress.c +++ b/dist/bzip2/decompress.c @@ -4,59 +4,19 @@ /*--- decompress.c ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ #include "bzlib_private.h" @@ -421,6 +381,13 @@ Int32 BZ2_decompress ( DState* s ) es = -1; N = 1; do { + /* Check that N doesn't get too big, so that es doesn't + go negative. The maximum value that can be + RUNA/RUNB encoded is equal to the block size (post + the initial RLE), viz, 900k, so bounding N at 2 + million should guard against overflow without + rejecting any legitimate inputs. */ + if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR); if (nextSym == BZ_RUNA) es = es + (0+1) * N; else if (nextSym == BZ_RUNB) es = es + (1+1) * N; N = N * 2; diff --git a/commands/bzip2/dlltest.c b/dist/bzip2/dlltest.c similarity index 92% rename from commands/bzip2/dlltest.c rename to dist/bzip2/dlltest.c index 2d7dcca4c..03fa14620 100644 --- a/commands/bzip2/dlltest.c +++ b/dist/bzip2/dlltest.c @@ -1,9 +1,8 @@ /* minibz2 libbz2.dll test program. - by Yoshioka Tsuneo(QWF00133@nifty.ne.jp/tsuneo-y@is.aist-nara.ac.jp) - This file is Public Domain. - welcome any email to me. + by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) + This file is Public Domain. Welcome any email to me. usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename] */ diff --git a/commands/bzip2/dlltest.dsp b/dist/bzip2/dlltest.dsp similarity index 100% rename from commands/bzip2/dlltest.dsp rename to dist/bzip2/dlltest.dsp diff --git a/commands/bzip2/entities.xml b/dist/bzip2/entities.xml similarity index 58% rename from commands/bzip2/entities.xml rename to dist/bzip2/entities.xml index 6d0975fdb..e9e0553b7 100644 --- a/commands/bzip2/entities.xml +++ b/dist/bzip2/entities.xml @@ -1,9 +1,9 @@ - + - - + + diff --git a/commands/bzip2/format.pl b/dist/bzip2/format.pl similarity index 68% rename from commands/bzip2/format.pl rename to dist/bzip2/format.pl index 8ab47acd3..1928d1573 100755 --- a/commands/bzip2/format.pl +++ b/dist/bzip2/format.pl @@ -1,4 +1,19 @@ #!/usr/bin/perl -w +# +# ------------------------------------------------------------------ +# This file is part of bzip2/libbzip2, a program and library for +# lossless, block-sorting data compression. +# +# bzip2/libbzip2 version 1.0.5 of 10 December 2007 +# Copyright (C) 1996-2007 Julian Seward +# +# Please read the WARNING, DISCLAIMER and PATENTS sections in the +# README file. +# +# This program is released under the terms of the license contained +# in the file LICENSE. +# ------------------------------------------------------------------ +# use strict; # get command line values: diff --git a/commands/bzip2/huffman.c b/dist/bzip2/huffman.c similarity index 75% rename from commands/bzip2/huffman.c rename to dist/bzip2/huffman.c index 5bf190be9..87e79e38a 100644 --- a/commands/bzip2/huffman.c +++ b/dist/bzip2/huffman.c @@ -4,59 +4,19 @@ /*--- huffman.c ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. - - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ #include "bzlib_private.h" diff --git a/commands/bzip2/libbz2.def b/dist/bzip2/libbz2.def similarity index 100% rename from commands/bzip2/libbz2.def rename to dist/bzip2/libbz2.def diff --git a/commands/bzip2/libbz2.dsp b/dist/bzip2/libbz2.dsp similarity index 100% rename from commands/bzip2/libbz2.dsp rename to dist/bzip2/libbz2.dsp diff --git a/commands/bzip2/makefile.msc b/dist/bzip2/makefile.msc similarity index 100% rename from commands/bzip2/makefile.msc rename to dist/bzip2/makefile.msc diff --git a/dist/bzip2/manual.html b/dist/bzip2/manual.html new file mode 100644 index 000000000..bd9eac859 --- /dev/null +++ b/dist/bzip2/manual.html @@ -0,0 +1,2540 @@ + + + +bzip2 and libbzip2, version 1.0.5 + + + +

+
+
+

+bzip2 and libbzip2, version 1.0.5

+

A program and library for data compression

+
+

+Julian Seward +

+
http://www.bzip.org
+
+

Version 1.0.5 of 10 December 2007

+
+
+

This program, bzip2, the + associated library libbzip2, and + all documentation, are copyright © 1996-2007 Julian Seward. + All rights reserved.

+

Redistribution and use in source and binary forms, with + or without modification, are permitted provided that the + following conditions are met:

+
    +
  • Redistributions of source code must retain the + above copyright notice, this list of conditions and the + following disclaimer.

  • +
  • 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.

  • +
  • Altered source versions must be plainly marked + as such, and must not be misrepresented as being the original + software.

  • +
  • The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission.

  • +
+

THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE.

+

PATENTS: To the best of my knowledge, + bzip2 and + libbzip2 do not use any patented + algorithms. However, I do not have the resources to carry + out a patent search. Therefore I cannot give any guarantee of + the above statement. +

+
+
+
+
+ +
+

+1. Introduction

+

bzip2 compresses files +using the Burrows-Wheeler block-sorting text compression +algorithm, and Huffman coding. Compression is generally +considerably better than that achieved by more conventional +LZ77/LZ78-based compressors, and approaches the performance of +the PPM family of statistical compressors.

+

bzip2 is built on top of +libbzip2, a flexible library for +handling compressed data in the +bzip2 format. This manual +describes both how to use the program and how to work with the +library interface. Most of the manual is devoted to this +library, not the program, which is good news if your interest is +only in the program.

+
    +
  • How to use bzip2 describes how to use + bzip2; this is the only part + you need to read if you just want to know how to operate the + program.

  • +
  • Programming with libbzip2 describes the + programming interfaces in detail, and

  • +
  • Miscellanea records some + miscellaneous notes which I thought ought to be recorded + somewhere.

  • +
+
+
+

+2. How to use bzip2

+ +

This chapter contains a copy of the +bzip2 man page, and nothing +else.

+
+

+2.1. NAME

+
    +
  • bzip2, + bunzip2 - a block-sorting file + compressor, v1.0.4

  • +
  • bzcat - + decompresses files to stdout

  • +
  • bzip2recover - + recovers data from damaged bzip2 files

  • +
+
+
+

+2.2. SYNOPSIS

+
    +
  • bzip2 [ + -cdfkqstvzVL123456789 ] [ filenames ... ]

  • +
  • bunzip2 [ + -fkvsVL ] [ filenames ... ]

  • +
  • bzcat [ -s ] [ + filenames ... ]

  • +
  • bzip2recover + filename

  • +
+
+
+

+2.3. DESCRIPTION

+

bzip2 compresses files +using the Burrows-Wheeler block sorting text compression +algorithm, and Huffman coding. Compression is generally +considerably better than that achieved by more conventional +LZ77/LZ78-based compressors, and approaches the performance of +the PPM family of statistical compressors.

+

The command-line options are deliberately very similar to +those of GNU gzip, but they are +not identical.

+

bzip2 expects a list of +file names to accompany the command-line flags. Each file is +replaced by a compressed version of itself, with the name +original_name.bz2. Each +compressed file has the same modification date, permissions, and, +when possible, ownership as the corresponding original, so that +these properties can be correctly restored at decompression time. +File name handling is naive in the sense that there is no +mechanism for preserving original file names, permissions, +ownerships or dates in filesystems which lack these concepts, or +have serious file name length restrictions, such as +MS-DOS.

+

bzip2 and +bunzip2 will by default not +overwrite existing files. If you want this to happen, specify +the -f flag.

+

If no file names are specified, +bzip2 compresses from standard +input to standard output. In this case, +bzip2 will decline to write +compressed output to a terminal, as this would be entirely +incomprehensible and therefore pointless.

+

bunzip2 (or +bzip2 -d) decompresses all +specified files. Files which were not created by +bzip2 will be detected and +ignored, and a warning issued. +bzip2 attempts to guess the +filename for the decompressed file from that of the compressed +file as follows:

+
    +
  • filename.bz2 + becomes + filename

  • +
  • filename.bz + becomes + filename

  • +
  • filename.tbz2 + becomes + filename.tar

  • +
  • filename.tbz + becomes + filename.tar

  • +
  • anyothername + becomes + anyothername.out

  • +
+

If the file does not end in one of the recognised endings, +.bz2, +.bz, +.tbz2 or +.tbz, +bzip2 complains that it cannot +guess the name of the original file, and uses the original name +with .out appended.

+

As with compression, supplying no filenames causes +decompression from standard input to standard output.

+

bunzip2 will correctly +decompress a file which is the concatenation of two or more +compressed files. The result is the concatenation of the +corresponding uncompressed files. Integrity testing +(-t) of concatenated compressed +files is also supported.

+

You can also compress or decompress files to the standard +output by giving the -c flag. +Multiple files may be compressed and decompressed like this. The +resulting outputs are fed sequentially to stdout. Compression of +multiple files in this manner generates a stream containing +multiple compressed file representations. Such a stream can be +decompressed correctly only by +bzip2 version 0.9.0 or later. +Earlier versions of bzip2 will +stop after decompressing the first file in the stream.

+

bzcat (or +bzip2 -dc) decompresses all +specified files to the standard output.

+

bzip2 will read arguments +from the environment variables +BZIP2 and +BZIP, in that order, and will +process them before any arguments read from the command line. +This gives a convenient way to supply default arguments.

+

Compression is always performed, even if the compressed +file is slightly larger than the original. Files of less than +about one hundred bytes tend to get larger, since the compression +mechanism has a constant overhead in the region of 50 bytes. +Random data (including the output of most file compressors) is +coded at about 8.05 bits per byte, giving an expansion of around +0.5%.

+

As a self-check for your protection, +bzip2 uses 32-bit CRCs to make +sure that the decompressed version of a file is identical to the +original. This guards against corruption of the compressed data, +and against undetected bugs in +bzip2 (hopefully very unlikely). +The chances of data corruption going undetected is microscopic, +about one chance in four billion for each file processed. Be +aware, though, that the check occurs upon decompression, so it +can only tell you that something is wrong. It can't help you +recover the original uncompressed data. You can use +bzip2recover to try to recover +data from damaged files.

+

Return values: 0 for a normal exit, 1 for environmental +problems (file not found, invalid flags, I/O errors, etc.), 2 +to indicate a corrupt compressed file, 3 for an internal +consistency error (eg, bug) which caused +bzip2 to panic.

+
+
+

+2.4. OPTIONS

+
+
-c --stdout
+

Compress or decompress to standard + output.

+
-d --decompress
+

Force decompression. + bzip2, + bunzip2 and + bzcat are really the same + program, and the decision about what actions to take is done on + the basis of which name is used. This flag overrides that + mechanism, and forces bzip2 to decompress.

+
-z --compress
+

The complement to + -d: forces compression, + regardless of the invokation name.

+
-t --test
+

Check integrity of the specified file(s), but + don't decompress them. This really performs a trial + decompression and throws away the result.

+
-f --force
+
+

Force overwrite of output files. Normally, + bzip2 will not overwrite + existing output files. Also forces + bzip2 to break hard links to + files, which it otherwise wouldn't do.

+

bzip2 normally declines + to decompress files which don't have the correct magic header + bytes. If forced (-f), + however, it will pass such files through unmodified. This is + how GNU gzip behaves.

+
+
-k --keep
+

Keep (don't delete) input files during + compression or decompression.

+
-s --small
+
+

Reduce memory usage, for compression, + decompression and testing. Files are decompressed and tested + using a modified algorithm which only requires 2.5 bytes per + block byte. This means any file can be decompressed in 2300k + of memory, albeit at about half the normal speed.

+

During compression, -s + selects a block size of 200k, which limits memory use to around + the same figure, at the expense of your compression ratio. In + short, if your machine is low on memory (8 megabytes or less), + use -s for everything. See + MEMORY MANAGEMENT below.

+
+
-q --quiet
+

Suppress non-essential warning messages. + Messages pertaining to I/O errors and other critical events + will not be suppressed.

+
-v --verbose
+

Verbose mode -- show the compression ratio for + each file processed. Further + -v's increase the verbosity + level, spewing out lots of information which is primarily of + interest for diagnostic purposes.

+
-L --license -V --version
+

Display the software version, license terms and + conditions.

+
-1 (or + --fast) to + -9 (or + -best)
+

Set the block size to 100 k, 200 k ... 900 k + when compressing. Has no effect when decompressing. See MEMORY MANAGEMENT below. The + --fast and + --best aliases are primarily + for GNU gzip compatibility. + In particular, --fast doesn't + make things significantly faster. And + --best merely selects the + default behaviour.

+
--
+

Treats all subsequent arguments as file names, + even if they start with a dash. This is so you can handle + files with names beginning with a dash, for example: + bzip2 -- + -myfilename.

+
+--repetitive-fast, --repetitive-best +
+

These flags are redundant in versions 0.9.5 and + above. They provided some coarse control over the behaviour of + the sorting algorithm in earlier versions, which was sometimes + useful. 0.9.5 and above have an improved algorithm which + renders these flags irrelevant.

+
+
+
+

+2.5. MEMORY MANAGEMENT

+

bzip2 compresses large +files in blocks. The block size affects both the compression +ratio achieved, and the amount of memory needed for compression +and decompression. The flags -1 +through -9 specify the block +size to be 100,000 bytes through 900,000 bytes (the default) +respectively. At decompression time, the block size used for +compression is read from the header of the compressed file, and +bunzip2 then allocates itself +just enough memory to decompress the file. Since block sizes are +stored in compressed files, it follows that the flags +-1 to +-9 are irrelevant to and so +ignored during decompression.

+

Compression and decompression requirements, in bytes, can be +estimated as:

+
Compression:   400k + ( 8 x block size )
+
+Decompression: 100k + ( 4 x block size ), or
+               100k + ( 2.5 x block size )
+

Larger block sizes give rapidly diminishing marginal +returns. Most of the compression comes from the first two or +three hundred k of block size, a fact worth bearing in mind when +using bzip2 on small machines. +It is also important to appreciate that the decompression memory +requirement is set at compression time by the choice of block +size.

+

For files compressed with the default 900k block size, +bunzip2 will require about 3700 +kbytes to decompress. To support decompression of any file on a +4 megabyte machine, bunzip2 has +an option to decompress using approximately half this amount of +memory, about 2300 kbytes. Decompression speed is also halved, +so you should use this option only where necessary. The relevant +flag is -s.

+

In general, try and use the largest block size memory +constraints allow, since that maximises the compression achieved. +Compression and decompression speed are virtually unaffected by +block size.

+

Another significant point applies to files which fit in a +single block -- that means most files you'd encounter using a +large block size. The amount of real memory touched is +proportional to the size of the file, since the file is smaller +than a block. For example, compressing a file 20,000 bytes long +with the flag -9 will cause the +compressor to allocate around 7600k of memory, but only touch +400k + 20000 * 8 = 560 kbytes of it. Similarly, the decompressor +will allocate 3700k but only touch 100k + 20000 * 4 = 180 +kbytes.

+

Here is a table which summarises the maximum memory usage +for different block sizes. Also recorded is the total compressed +size for 14 files of the Calgary Text Compression Corpus +totalling 3,141,622 bytes. This column gives some feel for how +compression varies with block size. These figures tend to +understate the advantage of larger block sizes for larger files, +since the Corpus is dominated by smaller files.

+
        Compress   Decompress   Decompress   Corpus
+Flag     usage      usage       -s usage     Size
+
+ -1      1200k       500k         350k      914704
+ -2      2000k       900k         600k      877703
+ -3      2800k      1300k         850k      860338
+ -4      3600k      1700k        1100k      846899
+ -5      4400k      2100k        1350k      845160
+ -6      5200k      2500k        1600k      838626
+ -7      6100k      2900k        1850k      834096
+ -8      6800k      3300k        2100k      828642
+ -9      7600k      3700k        2350k      828642
+
+
+

+2.6. RECOVERING DATA FROM DAMAGED FILES

+

bzip2 compresses files in +blocks, usually 900kbytes long. Each block is handled +independently. If a media or transmission error causes a +multi-block .bz2 file to become +damaged, it may be possible to recover data from the undamaged +blocks in the file.

+

The compressed representation of each block is delimited by +a 48-bit pattern, which makes it possible to find the block +boundaries with reasonable certainty. Each block also carries +its own 32-bit CRC, so damaged blocks can be distinguished from +undamaged ones.

+

bzip2recover is a simple +program whose purpose is to search for blocks in +.bz2 files, and write each block +out into its own .bz2 file. You +can then use bzip2 -t to test +the integrity of the resulting files, and decompress those which +are undamaged.

+

bzip2recover takes a +single argument, the name of the damaged file, and writes a +number of files rec0001file.bz2, +rec0002file.bz2, etc, containing +the extracted blocks. The output filenames are designed so that +the use of wildcards in subsequent processing -- for example, +bzip2 -dc rec*file.bz2 > +recovered_data -- lists the files in the correct +order.

+

bzip2recover should be of +most use dealing with large .bz2 +files, as these will contain many blocks. It is clearly futile +to use it on damaged single-block files, since a damaged block +cannot be recovered. If you wish to minimise any potential data +loss through media or transmission errors, you might consider +compressing with a smaller block size.

+
+
+

+2.7. PERFORMANCE NOTES

+

The sorting phase of compression gathers together similar +strings in the file. Because of this, files containing very long +runs of repeated symbols, like "aabaabaabaab ..." (repeated +several hundred times) may compress more slowly than normal. +Versions 0.9.5 and above fare much better than previous versions +in this respect. The ratio between worst-case and average-case +compression time is in the region of 10:1. For previous +versions, this figure was more like 100:1. You can use the +-vvvv option to monitor progress +in great detail, if you want.

+

Decompression speed is unaffected by these +phenomena.

+

bzip2 usually allocates +several megabytes of memory to operate in, and then charges all +over it in a fairly random fashion. This means that performance, +both for compressing and decompressing, is largely determined by +the speed at which your machine can service cache misses. +Because of this, small changes to the code to reduce the miss +rate have been observed to give disproportionately large +performance improvements. I imagine +bzip2 will perform best on +machines with very large caches.

+
+
+

+2.8. CAVEATS

+

I/O error messages are not as helpful as they could be. +bzip2 tries hard to detect I/O +errors and exit cleanly, but the details of what the problem is +sometimes seem rather misleading.

+

This manual page pertains to version 1.0.5 of +bzip2. Compressed data created by +this version is entirely forwards and backwards compatible with the +previous public releases, versions 0.1pl2, 0.9.0 and 0.9.5, 1.0.0, +1.0.1, 1.0.2 and 1.0.3, but with the following exception: 0.9.0 and +above can correctly decompress multiple concatenated compressed files. +0.1pl2 cannot do this; it will stop after decompressing just the first +file in the stream.

+

bzip2recover versions +prior to 1.0.2 used 32-bit integers to represent bit positions in +compressed files, so it could not handle compressed files more +than 512 megabytes long. Versions 1.0.2 and above use 64-bit ints +on some platforms which support them (GNU supported targets, and +Windows). To establish whether or not +bzip2recover was built with such +a limitation, run it without arguments. In any event you can +build yourself an unlimited version if you can recompile it with +MaybeUInt64 set to be an +unsigned 64-bit integer.

+
+
+

+2.9. AUTHOR

+

Julian Seward, +jseward@bzip.org

+

The ideas embodied in +bzip2 are due to (at least) the +following people: Michael Burrows and David Wheeler (for the +block sorting transformation), David Wheeler (again, for the +Huffman coder), Peter Fenwick (for the structured coding model in +the original bzip, and many +refinements), and Alistair Moffat, Radford Neal and Ian Witten +(for the arithmetic coder in the original +bzip). I am much indebted for +their help, support and advice. See the manual in the source +distribution for pointers to sources of documentation. Christian +von Roques encouraged me to look for faster sorting algorithms, +so as to speed up compression. Bela Lubkin encouraged me to +improve the worst-case compression performance. +Donna Robinson XMLised the documentation. +Many people sent +patches, helped with portability problems, lent machines, gave +advice and were generally helpful.

+
+
+
+

+3.  +Programming with libbzip2 +

+ +

This chapter describes the programming interface to +libbzip2.

+

For general background information, particularly about +memory use and performance aspects, you'd be well advised to read +How to use bzip2 as well.

+
+

+3.1. Top-level structure

+

libbzip2 is a flexible +library for compressing and decompressing data in the +bzip2 data format. Although +packaged as a single entity, it helps to regard the library as +three separate parts: the low level interface, and the high level +interface, and some utility functions.

+

The structure of +libbzip2's interfaces is similar +to that of Jean-loup Gailly's and Mark Adler's excellent +zlib library.

+

All externally visible symbols have names beginning +BZ2_. This is new in version +1.0. The intention is to minimise pollution of the namespaces of +library clients.

+

To use any part of the library, you need to +#include <bzlib.h> +into your sources.

+
+

+3.1.1. Low-level summary

+

This interface provides services for compressing and +decompressing data in memory. There's no provision for dealing +with files, streams or any other I/O mechanisms, just straight +memory-to-memory work. In fact, this part of the library can be +compiled without inclusion of +stdio.h, which may be helpful +for embedded applications.

+

The low-level part of the library has no global variables +and is therefore thread-safe.

+

Six routines make up the low level interface: +BZ2_bzCompressInit, +BZ2_bzCompress, and +BZ2_bzCompressEnd for +compression, and a corresponding trio +BZ2_bzDecompressInit, +BZ2_bzDecompress and +BZ2_bzDecompressEnd for +decompression. The *Init +functions allocate memory for compression/decompression and do +other initialisations, whilst the +*End functions close down +operations and release memory.

+

The real work is done by +BZ2_bzCompress and +BZ2_bzDecompress. These +compress and decompress data from a user-supplied input buffer to +a user-supplied output buffer. These buffers can be any size; +arbitrary quantities of data are handled by making repeated calls +to these functions. This is a flexible mechanism allowing a +consumer-pull style of activity, or producer-push, or a mixture +of both.

+
+
+

+3.1.2. High-level summary

+

This interface provides some handy wrappers around the +low-level interface to facilitate reading and writing +bzip2 format files +(.bz2 files). The routines +provide hooks to facilitate reading files in which the +bzip2 data stream is embedded +within some larger-scale file structure, or where there are +multiple bzip2 data streams +concatenated end-to-end.

+

For reading files, +BZ2_bzReadOpen, +BZ2_bzRead, +BZ2_bzReadClose and +BZ2_bzReadGetUnused are +supplied. For writing files, +BZ2_bzWriteOpen, +BZ2_bzWrite and +BZ2_bzWriteFinish are +available.

+

As with the low-level library, no global variables are used +so the library is per se thread-safe. However, if I/O errors +occur whilst reading or writing the underlying compressed files, +you may have to consult errno to +determine the cause of the error. In that case, you'd need a C +library which correctly supports +errno in a multithreaded +environment.

+

To make the library a little simpler and more portable, +BZ2_bzReadOpen and +BZ2_bzWriteOpen require you to +pass them file handles (FILE*s) +which have previously been opened for reading or writing +respectively. That avoids portability problems associated with +file operations and file attributes, whilst not being much of an +imposition on the programmer.

+
+
+

+3.1.3. Utility functions summary

+

For very simple needs, +BZ2_bzBuffToBuffCompress and +BZ2_bzBuffToBuffDecompress are +provided. These compress data in memory from one buffer to +another buffer in a single function call. You should assess +whether these functions fulfill your memory-to-memory +compression/decompression requirements before investing effort in +understanding the more general but more complex low-level +interface.

+

Yoshioka Tsuneo +(tsuneo@rr.iij4u.or.jp) has +contributed some functions to give better +zlib compatibility. These +functions are BZ2_bzopen, +BZ2_bzread, +BZ2_bzwrite, +BZ2_bzflush, +BZ2_bzclose, +BZ2_bzerror and +BZ2_bzlibVersion. You may find +these functions more convenient for simple file reading and +writing, than those in the high-level interface. These functions +are not (yet) officially part of the library, and are minimally +documented here. If they break, you get to keep all the pieces. +I hope to document them properly when time permits.

+

Yoshioka also contributed modifications to allow the +library to be built as a Windows DLL.

+
+
+
+

+3.2. Error handling

+

The library is designed to recover cleanly in all +situations, including the worst-case situation of decompressing +random data. I'm not 100% sure that it can always do this, so +you might want to add a signal handler to catch segmentation +violations during decompression if you are feeling especially +paranoid. I would be interested in hearing more about the +robustness of the library to corrupted compressed data.

+

Version 1.0.3 more robust in this respect than any +previous version. Investigations with Valgrind (a tool for detecting +problems with memory management) indicate +that, at least for the few files I tested, all single-bit errors +in the decompressed data are caught properly, with no +segmentation faults, no uses of uninitialised data, no out of +range reads or writes, and no infinite looping in the decompressor. +So it's certainly pretty robust, although +I wouldn't claim it to be totally bombproof.

+

The file bzlib.h contains +all definitions needed to use the library. In particular, you +should definitely not include +bzlib_private.h.

+

In bzlib.h, the various +return values are defined. The following list is not intended as +an exhaustive description of the circumstances in which a given +value may be returned -- those descriptions are given later. +Rather, it is intended to convey the rough meaning of each return +value. The first five actions are normal and not intended to +denote an error situation.

+
+
BZ_OK
+

The requested action was completed + successfully.

+
BZ_RUN_OK, BZ_FLUSH_OK, + BZ_FINISH_OK
+

In + BZ2_bzCompress, the requested + flush/finish/nothing-special action was completed + successfully.

+
BZ_STREAM_END
+

Compression of data was completed, or the + logical stream end was detected during + decompression.

+
+

The following return values indicate an error of some +kind.

+
+
BZ_CONFIG_ERROR
+

Indicates that the library has been improperly + compiled on your platform -- a major configuration error. + Specifically, it means that + sizeof(char), + sizeof(short) and + sizeof(int) are not 1, 2 and + 4 respectively, as they should be. Note that the library + should still work properly on 64-bit platforms which follow + the LP64 programming model -- that is, where + sizeof(long) and + sizeof(void*) are 8. Under + LP64, sizeof(int) is still 4, + so libbzip2, which doesn't + use the long type, is + OK.

+
BZ_SEQUENCE_ERROR
+

When using the library, it is important to call + the functions in the correct sequence and with data structures + (buffers etc) in the correct states. + libbzip2 checks as much as it + can to ensure this is happening, and returns + BZ_SEQUENCE_ERROR if not. + Code which complies precisely with the function semantics, as + detailed below, should never receive this value; such an event + denotes buggy code which you should + investigate.

+
BZ_PARAM_ERROR
+

Returned when a parameter to a function call is + out of range or otherwise manifestly incorrect. As with + BZ_SEQUENCE_ERROR, this + denotes a bug in the client code. The distinction between + BZ_PARAM_ERROR and + BZ_SEQUENCE_ERROR is a bit + hazy, but still worth making.

+
BZ_MEM_ERROR
+

Returned when a request to allocate memory + failed. Note that the quantity of memory needed to decompress + a stream cannot be determined until the stream's header has + been read. So + BZ2_bzDecompress and + BZ2_bzRead may return + BZ_MEM_ERROR even though some + of the compressed data has been read. The same is not true + for compression; once + BZ2_bzCompressInit or + BZ2_bzWriteOpen have + successfully completed, + BZ_MEM_ERROR cannot + occur.

+
BZ_DATA_ERROR
+

Returned when a data integrity error is + detected during decompression. Most importantly, this means + when stored and computed CRCs for the data do not match. This + value is also returned upon detection of any other anomaly in + the compressed data.

+
BZ_DATA_ERROR_MAGIC
+

As a special case of + BZ_DATA_ERROR, it is + sometimes useful to know when the compressed stream does not + start with the correct magic bytes ('B' 'Z' + 'h').

+
BZ_IO_ERROR
+

Returned by + BZ2_bzRead and + BZ2_bzWrite when there is an + error reading or writing in the compressed file, and by + BZ2_bzReadOpen and + BZ2_bzWriteOpen for attempts + to use a file for which the error indicator (viz, + ferror(f)) is set. On + receipt of BZ_IO_ERROR, the + caller should consult errno + and/or perror to acquire + operating-system specific information about the + problem.

+
BZ_UNEXPECTED_EOF
+

Returned by + BZ2_bzRead when the + compressed file finishes before the logical end of stream is + detected.

+
BZ_OUTBUFF_FULL
+

Returned by + BZ2_bzBuffToBuffCompress and + BZ2_bzBuffToBuffDecompress to + indicate that the output data will not fit into the output + buffer provided.

+
+
+
+

+3.3. Low-level interface

+
+

+3.3.1. BZ2_bzCompressInit

+
typedef struct {
+  char *next_in;
+  unsigned int avail_in;
+  unsigned int total_in_lo32;
+  unsigned int total_in_hi32;
+
+  char *next_out;
+  unsigned int avail_out;
+  unsigned int total_out_lo32;
+  unsigned int total_out_hi32;
+
+  void *state;
+
+  void *(*bzalloc)(void *,int,int);
+  void (*bzfree)(void *,void *);
+  void *opaque;
+} bz_stream;
+
+int BZ2_bzCompressInit ( bz_stream *strm, 
+                         int blockSize100k, 
+                         int verbosity,
+                         int workFactor );
+

Prepares for compression. The +bz_stream structure holds all +data pertaining to the compression activity. A +bz_stream structure should be +allocated and initialised prior to the call. The fields of +bz_stream comprise the entirety +of the user-visible data. state +is a pointer to the private data structures required for +compression.

+

Custom memory allocators are supported, via fields +bzalloc, +bzfree, and +opaque. The value +opaque is passed to as the first +argument to all calls to bzalloc +and bzfree, but is otherwise +ignored by the library. The call bzalloc ( +opaque, n, m ) is expected to return a pointer +p to n * +m bytes of memory, and bzfree ( +opaque, p ) should free that memory.

+

If you don't want to use a custom memory allocator, set +bzalloc, +bzfree and +opaque to +NULL, and the library will then +use the standard malloc / +free routines.

+

Before calling +BZ2_bzCompressInit, fields +bzalloc, +bzfree and +opaque should be filled +appropriately, as just described. Upon return, the internal +state will have been allocated and initialised, and +total_in_lo32, +total_in_hi32, +total_out_lo32 and +total_out_hi32 will have been +set to zero. These four fields are used by the library to inform +the caller of the total amount of data passed into and out of the +library, respectively. You should not try to change them. As of +version 1.0, 64-bit counts are maintained, even on 32-bit +platforms, using the _hi32 +fields to store the upper 32 bits of the count. So, for example, +the total amount of data in is (total_in_hi32 +<< 32) + total_in_lo32.

+

Parameter blockSize100k +specifies the block size to be used for compression. It should +be a value between 1 and 9 inclusive, and the actual block size +used is 100000 x this figure. 9 gives the best compression but +takes most memory.

+

Parameter verbosity should +be set to a number between 0 and 4 inclusive. 0 is silent, and +greater numbers give increasingly verbose monitoring/debugging +output. If the library has been compiled with +-DBZ_NO_STDIO, no such output +will appear for any verbosity setting.

+

Parameter workFactor +controls how the compression phase behaves when presented with +worst case, highly repetitive, input data. If compression runs +into difficulties caused by repetitive data, the library switches +from the standard sorting algorithm to a fallback algorithm. The +fallback is slower than the standard algorithm by perhaps a +factor of three, but always behaves reasonably, no matter how bad +the input.

+

Lower values of workFactor +reduce the amount of effort the standard algorithm will expend +before resorting to the fallback. You should set this parameter +carefully; too low, and many inputs will be handled by the +fallback algorithm and so compress rather slowly, too high, and +your average-to-worst case compression times can become very +large. The default value of 30 gives reasonable behaviour over a +wide range of circumstances.

+

Allowable values range from 0 to 250 inclusive. 0 is a +special case, equivalent to using the default value of 30.

+

Note that the compressed output generated is the same +regardless of whether or not the fallback algorithm is +used.

+

Be aware also that this parameter may disappear entirely in +future versions of the library. In principle it should be +possible to devise a good way to automatically choose which +algorithm to use. Such a mechanism would render the parameter +obsolete.

+

Possible return values:

+
BZ_CONFIG_ERROR
+  if the library has been mis-compiled
+BZ_PARAM_ERROR
+  if strm is NULL 
+  or blockSize < 1 or blockSize > 9
+  or verbosity < 0 or verbosity > 4
+  or workFactor < 0 or workFactor > 250
+BZ_MEM_ERROR 
+  if not enough memory is available
+BZ_OK 
+  otherwise
+

Allowable next actions:

+
BZ2_bzCompress
+  if BZ_OK is returned
+  no specific action needed in case of error
+
+
+

+3.3.2. BZ2_bzCompress

+
int BZ2_bzCompress ( bz_stream *strm, int action );
+

Provides more input and/or output buffer space for the +library. The caller maintains input and output buffers, and +calls BZ2_bzCompress to transfer +data between them.

+

Before each call to +BZ2_bzCompress, +next_in should point at the data +to be compressed, and avail_in +should indicate how many bytes the library may read. +BZ2_bzCompress updates +next_in, +avail_in and +total_in to reflect the number +of bytes it has read.

+

Similarly, next_out should +point to a buffer in which the compressed data is to be placed, +with avail_out indicating how +much output space is available. +BZ2_bzCompress updates +next_out, +avail_out and +total_out to reflect the number +of bytes output.

+

You may provide and remove as little or as much data as you +like on each call of +BZ2_bzCompress. In the limit, +it is acceptable to supply and remove data one byte at a time, +although this would be terribly inefficient. You should always +ensure that at least one byte of output space is available at +each call.

+

A second purpose of +BZ2_bzCompress is to request a +change of mode of the compressed stream.

+

Conceptually, a compressed stream can be in one of four +states: IDLE, RUNNING, FLUSHING and FINISHING. Before +initialisation +(BZ2_bzCompressInit) and after +termination (BZ2_bzCompressEnd), +a stream is regarded as IDLE.

+

Upon initialisation +(BZ2_bzCompressInit), the stream +is placed in the RUNNING state. Subsequent calls to +BZ2_bzCompress should pass +BZ_RUN as the requested action; +other actions are illegal and will result in +BZ_SEQUENCE_ERROR.

+

At some point, the calling program will have provided all +the input data it wants to. It will then want to finish up -- in +effect, asking the library to process any data it might have +buffered internally. In this state, +BZ2_bzCompress will no longer +attempt to read data from +next_in, but it will want to +write data to next_out. Because +the output buffer supplied by the user can be arbitrarily small, +the finishing-up operation cannot necessarily be done with a +single call of +BZ2_bzCompress.

+

Instead, the calling program passes +BZ_FINISH as an action to +BZ2_bzCompress. This changes +the stream's state to FINISHING. Any remaining input (ie, +next_in[0 .. avail_in-1]) is +compressed and transferred to the output buffer. To do this, +BZ2_bzCompress must be called +repeatedly until all the output has been consumed. At that +point, BZ2_bzCompress returns +BZ_STREAM_END, and the stream's +state is set back to IDLE. +BZ2_bzCompressEnd should then be +called.

+

Just to make sure the calling program does not cheat, the +library makes a note of avail_in +at the time of the first call to +BZ2_bzCompress which has +BZ_FINISH as an action (ie, at +the time the program has announced its intention to not supply +any more input). By comparing this value with that of +avail_in over subsequent calls +to BZ2_bzCompress, the library +can detect any attempts to slip in more data to compress. Any +calls for which this is detected will return +BZ_SEQUENCE_ERROR. This +indicates a programming mistake which should be corrected.

+

Instead of asking to finish, the calling program may ask +BZ2_bzCompress to take all the +remaining input, compress it and terminate the current +(Burrows-Wheeler) compression block. This could be useful for +error control purposes. The mechanism is analogous to that for +finishing: call BZ2_bzCompress +with an action of BZ_FLUSH, +remove output data, and persist with the +BZ_FLUSH action until the value +BZ_RUN is returned. As with +finishing, BZ2_bzCompress +detects any attempt to provide more input data once the flush has +begun.

+

Once the flush is complete, the stream returns to the +normal RUNNING state.

+

This all sounds pretty complex, but isn't really. Here's a +table which shows which actions are allowable in each state, what +action will be taken, what the next state is, and what the +non-error return values are. Note that you can't explicitly ask +what state the stream is in, but nor do you need to -- it can be +inferred from the values returned by +BZ2_bzCompress.

+
IDLE/any
+  Illegal.  IDLE state only exists after BZ2_bzCompressEnd or
+  before BZ2_bzCompressInit.
+  Return value = BZ_SEQUENCE_ERROR
+
+RUNNING/BZ_RUN
+  Compress from next_in to next_out as much as possible.
+  Next state = RUNNING
+  Return value = BZ_RUN_OK
+
+RUNNING/BZ_FLUSH
+  Remember current value of next_in. Compress from next_in
+  to next_out as much as possible, but do not accept any more input.
+  Next state = FLUSHING
+  Return value = BZ_FLUSH_OK
+
+RUNNING/BZ_FINISH
+  Remember current value of next_in. Compress from next_in
+  to next_out as much as possible, but do not accept any more input.
+  Next state = FINISHING
+  Return value = BZ_FINISH_OK
+
+FLUSHING/BZ_FLUSH
+  Compress from next_in to next_out as much as possible, 
+  but do not accept any more input.
+  If all the existing input has been used up and all compressed
+  output has been removed
+    Next state = RUNNING; Return value = BZ_RUN_OK
+  else
+    Next state = FLUSHING; Return value = BZ_FLUSH_OK
+
+FLUSHING/other     
+  Illegal.
+  Return value = BZ_SEQUENCE_ERROR
+
+FINISHING/BZ_FINISH
+  Compress from next_in to next_out as much as possible,
+  but to not accept any more input.  
+  If all the existing input has been used up and all compressed
+  output has been removed
+    Next state = IDLE; Return value = BZ_STREAM_END
+  else
+    Next state = FINISHING; Return value = BZ_FINISH_OK
+
+FINISHING/other
+  Illegal.
+  Return value = BZ_SEQUENCE_ERROR
+

That still looks complicated? Well, fair enough. The +usual sequence of calls for compressing a load of data is:

+
    +
  1. Get started with + BZ2_bzCompressInit.

  2. +
  3. Shovel data in and shlurp out its compressed form + using zero or more calls of + BZ2_bzCompress with action = + BZ_RUN.

  4. +
  5. Finish up. Repeatedly call + BZ2_bzCompress with action = + BZ_FINISH, copying out the + compressed output, until + BZ_STREAM_END is + returned.

  6. +
  7. Close up and go home. Call + BZ2_bzCompressEnd.

  8. +
+

If the data you want to compress fits into your input +buffer all at once, you can skip the calls of +BZ2_bzCompress ( ..., BZ_RUN ) +and just do the BZ2_bzCompress ( ..., BZ_FINISH +) calls.

+

All required memory is allocated by +BZ2_bzCompressInit. The +compression library can accept any data at all (obviously). So +you shouldn't get any error return values from the +BZ2_bzCompress calls. If you +do, they will be +BZ_SEQUENCE_ERROR, and indicate +a bug in your programming.

+

Trivial other possible return values:

+
BZ_PARAM_ERROR
+  if strm is NULL, or strm->s is NULL
+
+
+

+3.3.3. BZ2_bzCompressEnd

+
int BZ2_bzCompressEnd ( bz_stream *strm );
+

Releases all memory associated with a compression +stream.

+

Possible return values:

+
BZ_PARAM_ERROR  if strm is NULL or strm->s is NULL
+BZ_OK           otherwise
+
+
+

+3.3.4. BZ2_bzDecompressInit

+
int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );
+

Prepares for decompression. As with +BZ2_bzCompressInit, a +bz_stream record should be +allocated and initialised before the call. Fields +bzalloc, +bzfree and +opaque should be set if a custom +memory allocator is required, or made +NULL for the normal +malloc / +free routines. Upon return, the +internal state will have been initialised, and +total_in and +total_out will be zero.

+

For the meaning of parameter +verbosity, see +BZ2_bzCompressInit.

+

If small is nonzero, the +library will use an alternative decompression algorithm which +uses less memory but at the cost of decompressing more slowly +(roughly speaking, half the speed, but the maximum memory +requirement drops to around 2300k). See How to use bzip2 +for more information on memory management.

+

Note that the amount of memory needed to decompress a +stream cannot be determined until the stream's header has been +read, so even if +BZ2_bzDecompressInit succeeds, a +subsequent BZ2_bzDecompress +could fail with +BZ_MEM_ERROR.

+

Possible return values:

+
BZ_CONFIG_ERROR
+  if the library has been mis-compiled
+BZ_PARAM_ERROR
+  if ( small != 0 && small != 1 )
+  or (verbosity <; 0 || verbosity > 4)
+BZ_MEM_ERROR
+  if insufficient memory is available
+

Allowable next actions:

+
BZ2_bzDecompress
+  if BZ_OK was returned
+  no specific action required in case of error
+
+
+

+3.3.5. BZ2_bzDecompress

+
int BZ2_bzDecompress ( bz_stream *strm );
+

Provides more input and/out output buffer space for the +library. The caller maintains input and output buffers, and uses +BZ2_bzDecompress to transfer +data between them.

+

Before each call to +BZ2_bzDecompress, +next_in should point at the +compressed data, and avail_in +should indicate how many bytes the library may read. +BZ2_bzDecompress updates +next_in, +avail_in and +total_in to reflect the number +of bytes it has read.

+

Similarly, next_out should +point to a buffer in which the uncompressed output is to be +placed, with avail_out +indicating how much output space is available. +BZ2_bzCompress updates +next_out, +avail_out and +total_out to reflect the number +of bytes output.

+

You may provide and remove as little or as much data as you +like on each call of +BZ2_bzDecompress. In the limit, +it is acceptable to supply and remove data one byte at a time, +although this would be terribly inefficient. You should always +ensure that at least one byte of output space is available at +each call.

+

Use of BZ2_bzDecompress is +simpler than +BZ2_bzCompress.

+

You should provide input and remove output as described +above, and repeatedly call +BZ2_bzDecompress until +BZ_STREAM_END is returned. +Appearance of BZ_STREAM_END +denotes that BZ2_bzDecompress +has detected the logical end of the compressed stream. +BZ2_bzDecompress will not +produce BZ_STREAM_END until all +output data has been placed into the output buffer, so once +BZ_STREAM_END appears, you are +guaranteed to have available all the decompressed output, and +BZ2_bzDecompressEnd can safely +be called.

+

If case of an error return value, you should call +BZ2_bzDecompressEnd to clean up +and release memory.

+

Possible return values:

+
BZ_PARAM_ERROR
+  if strm is NULL or strm->s is NULL
+  or strm->avail_out < 1
+BZ_DATA_ERROR
+  if a data integrity error is detected in the compressed stream
+BZ_DATA_ERROR_MAGIC
+  if the compressed stream doesn't begin with the right magic bytes
+BZ_MEM_ERROR
+  if there wasn't enough memory available
+BZ_STREAM_END
+  if the logical end of the data stream was detected and all
+  output in has been consumed, eg s-->avail_out > 0
+BZ_OK
+  otherwise
+

Allowable next actions:

+
BZ2_bzDecompress
+  if BZ_OK was returned
+BZ2_bzDecompressEnd
+  otherwise
+
+
+

+3.3.6. BZ2_bzDecompressEnd

+
int BZ2_bzDecompressEnd ( bz_stream *strm );
+

Releases all memory associated with a decompression +stream.

+

Possible return values:

+
BZ_PARAM_ERROR
+  if strm is NULL or strm->s is NULL
+BZ_OK
+  otherwise
+

Allowable next actions:

+
  None.
+
+
+
+

+3.4. High-level interface

+

This interface provides functions for reading and writing +bzip2 format files. First, some +general points.

+
    +
  • All of the functions take an + int* first argument, + bzerror. After each call, + bzerror should be consulted + first to determine the outcome of the call. If + bzerror is + BZ_OK, the call completed + successfully, and only then should the return value of the + function (if any) be consulted. If + bzerror is + BZ_IO_ERROR, there was an + error reading/writing the underlying compressed file, and you + should then consult errno / + perror to determine the cause + of the difficulty. bzerror + may also be set to various other values; precise details are + given on a per-function basis below.

  • +
  • If bzerror indicates + an error (ie, anything except + BZ_OK and + BZ_STREAM_END), you should + immediately call + BZ2_bzReadClose (or + BZ2_bzWriteClose, depending on + whether you are attempting to read or to write) to free up all + resources associated with the stream. Once an error has been + indicated, behaviour of all calls except + BZ2_bzReadClose + (BZ2_bzWriteClose) is + undefined. The implication is that (1) + bzerror should be checked + after each call, and (2) if + bzerror indicates an error, + BZ2_bzReadClose + (BZ2_bzWriteClose) should then + be called to clean up.

  • +
  • The FILE* arguments + passed to BZ2_bzReadOpen / + BZ2_bzWriteOpen should be set + to binary mode. Most Unix systems will do this by default, but + other platforms, including Windows and Mac, will not. If you + omit this, you may encounter problems when moving code to new + platforms.

  • +
  • Memory allocation requests are handled by + malloc / + free. At present there is no + facility for user-defined memory allocators in the file I/O + functions (could easily be added, though).

  • +
+
+

+3.4.1. BZ2_bzReadOpen

+
typedef void BZFILE;
+
+BZFILE *BZ2_bzReadOpen( int *bzerror, FILE *f, 
+                        int verbosity, int small,
+                        void *unused, int nUnused );
+

Prepare to read compressed data from file handle +f. +f should refer to a file which +has been opened for reading, and for which the error indicator +(ferror(f))is not set. If +small is 1, the library will try +to decompress using less memory, at the expense of speed.

+

For reasons explained below, +BZ2_bzRead will decompress the +nUnused bytes starting at +unused, before starting to read +from the file f. At most +BZ_MAX_UNUSED bytes may be +supplied like this. If this facility is not required, you should +pass NULL and +0 for +unused and +nUnused respectively.

+

For the meaning of parameters +small and +verbosity, see +BZ2_bzDecompressInit.

+

The amount of memory needed to decompress a file cannot be +determined until the file's header has been read. So it is +possible that BZ2_bzReadOpen +returns BZ_OK but a subsequent +call of BZ2_bzRead will return +BZ_MEM_ERROR.

+

Possible assignments to +bzerror:

+
BZ_CONFIG_ERROR
+  if the library has been mis-compiled
+BZ_PARAM_ERROR
+  if f is NULL
+  or small is neither 0 nor 1
+  or ( unused == NULL && nUnused != 0 )
+  or ( unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED) )
+BZ_IO_ERROR
+  if ferror(f) is nonzero
+BZ_MEM_ERROR
+  if insufficient memory is available
+BZ_OK
+  otherwise.
+

Possible return values:

+
Pointer to an abstract BZFILE
+  if bzerror is BZ_OK
+NULL
+  otherwise
+

Allowable next actions:

+
BZ2_bzRead
+  if bzerror is BZ_OK
+BZ2_bzClose
+  otherwise
+
+
+

+3.4.2. BZ2_bzRead

+
int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );
+

Reads up to len +(uncompressed) bytes from the compressed file +b into the buffer +buf. If the read was +successful, bzerror is set to +BZ_OK and the number of bytes +read is returned. If the logical end-of-stream was detected, +bzerror will be set to +BZ_STREAM_END, and the number of +bytes read is returned. All other +bzerror values denote an +error.

+

BZ2_bzRead will supply +len bytes, unless the logical +stream end is detected or an error occurs. Because of this, it +is possible to detect the stream end by observing when the number +of bytes returned is less than the number requested. +Nevertheless, this is regarded as inadvisable; you should instead +check bzerror after every call +and watch out for +BZ_STREAM_END.

+

Internally, BZ2_bzRead +copies data from the compressed file in chunks of size +BZ_MAX_UNUSED bytes before +decompressing it. If the file contains more bytes than strictly +needed to reach the logical end-of-stream, +BZ2_bzRead will almost certainly +read some of the trailing data before signalling +BZ_SEQUENCE_END. To collect the +read but unused data once +BZ_SEQUENCE_END has appeared, +call BZ2_bzReadGetUnused +immediately before +BZ2_bzReadClose.

+

Possible assignments to +bzerror:

+
BZ_PARAM_ERROR
+  if b is NULL or buf is NULL or len < 0
+BZ_SEQUENCE_ERROR
+  if b was opened with BZ2_bzWriteOpen
+BZ_IO_ERROR
+  if there is an error reading from the compressed file
+BZ_UNEXPECTED_EOF
+  if the compressed file ended before 
+  the logical end-of-stream was detected
+BZ_DATA_ERROR
+  if a data integrity error was detected in the compressed stream
+BZ_DATA_ERROR_MAGIC
+  if the stream does not begin with the requisite header bytes 
+  (ie, is not a bzip2 data file).  This is really 
+  a special case of BZ_DATA_ERROR.
+BZ_MEM_ERROR
+  if insufficient memory was available
+BZ_STREAM_END
+  if the logical end of stream was detected.
+BZ_OK
+  otherwise.
+

Possible return values:

+
number of bytes read
+  if bzerror is BZ_OK or BZ_STREAM_END
+undefined
+  otherwise
+

Allowable next actions:

+
collect data from buf, then BZ2_bzRead or BZ2_bzReadClose
+  if bzerror is BZ_OK
+collect data from buf, then BZ2_bzReadClose or BZ2_bzReadGetUnused
+  if bzerror is BZ_SEQUENCE_END
+BZ2_bzReadClose
+  otherwise
+
+
+

+3.4.3. BZ2_bzReadGetUnused

+
void BZ2_bzReadGetUnused( int* bzerror, BZFILE *b, 
+                          void** unused, int* nUnused );
+

Returns data which was read from the compressed file but +was not needed to get to the logical end-of-stream. +*unused is set to the address of +the data, and *nUnused to the +number of bytes. *nUnused will +be set to a value between 0 and +BZ_MAX_UNUSED inclusive.

+

This function may only be called once +BZ2_bzRead has signalled +BZ_STREAM_END but before +BZ2_bzReadClose.

+

Possible assignments to +bzerror:

+
BZ_PARAM_ERROR
+  if b is NULL
+  or unused is NULL or nUnused is NULL
+BZ_SEQUENCE_ERROR
+  if BZ_STREAM_END has not been signalled
+  or if b was opened with BZ2_bzWriteOpen
+BZ_OK
+  otherwise
+

Allowable next actions:

+
BZ2_bzReadClose
+
+
+

+3.4.4. BZ2_bzReadClose

+
void BZ2_bzReadClose ( int *bzerror, BZFILE *b );
+

Releases all memory pertaining to the compressed file +b. +BZ2_bzReadClose does not call +fclose on the underlying file +handle, so you should do that yourself if appropriate. +BZ2_bzReadClose should be called +to clean up after all error situations.

+

Possible assignments to +bzerror:

+
BZ_SEQUENCE_ERROR
+  if b was opened with BZ2_bzOpenWrite
+BZ_OK
+  otherwise
+

Allowable next actions:

+
none
+
+
+

+3.4.5. BZ2_bzWriteOpen

+
BZFILE *BZ2_bzWriteOpen( int *bzerror, FILE *f, 
+                         int blockSize100k, int verbosity,
+                         int workFactor );
+

Prepare to write compressed data to file handle +f. +f should refer to a file which +has been opened for writing, and for which the error indicator +(ferror(f))is not set.

+

For the meaning of parameters +blockSize100k, +verbosity and +workFactor, see +BZ2_bzCompressInit.

+

All required memory is allocated at this stage, so if the +call completes successfully, +BZ_MEM_ERROR cannot be signalled +by a subsequent call to +BZ2_bzWrite.

+

Possible assignments to +bzerror:

+
BZ_CONFIG_ERROR
+  if the library has been mis-compiled
+BZ_PARAM_ERROR
+  if f is NULL
+  or blockSize100k < 1 or blockSize100k > 9
+BZ_IO_ERROR
+  if ferror(f) is nonzero
+BZ_MEM_ERROR
+  if insufficient memory is available
+BZ_OK
+  otherwise
+

Possible return values:

+
Pointer to an abstract BZFILE
+  if bzerror is BZ_OK
+NULL
+  otherwise
+

Allowable next actions:

+
BZ2_bzWrite
+  if bzerror is BZ_OK
+  (you could go directly to BZ2_bzWriteClose, but this would be pretty pointless)
+BZ2_bzWriteClose
+  otherwise
+
+
+

+3.4.6. BZ2_bzWrite

+
void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );
+

Absorbs len bytes from the +buffer buf, eventually to be +compressed and written to the file.

+

Possible assignments to +bzerror:

+
BZ_PARAM_ERROR
+  if b is NULL or buf is NULL or len < 0
+BZ_SEQUENCE_ERROR
+  if b was opened with BZ2_bzReadOpen
+BZ_IO_ERROR
+  if there is an error writing the compressed file.
+BZ_OK
+  otherwise
+
+
+

+3.4.7. BZ2_bzWriteClose

+
void BZ2_bzWriteClose( int *bzerror, BZFILE* f,
+                       int abandon,
+                       unsigned int* nbytes_in,
+                       unsigned int* nbytes_out );
+
+void BZ2_bzWriteClose64( int *bzerror, BZFILE* f,
+                         int abandon,
+                         unsigned int* nbytes_in_lo32,
+                         unsigned int* nbytes_in_hi32,
+                         unsigned int* nbytes_out_lo32,
+                         unsigned int* nbytes_out_hi32 );
+

Compresses and flushes to the compressed file all data so +far supplied by BZ2_bzWrite. +The logical end-of-stream markers are also written, so subsequent +calls to BZ2_bzWrite are +illegal. All memory associated with the compressed file +b is released. +fflush is called on the +compressed file, but it is not +fclose'd.

+

If BZ2_bzWriteClose is +called to clean up after an error, the only action is to release +the memory. The library records the error codes issued by +previous calls, so this situation will be detected automatically. +There is no attempt to complete the compression operation, nor to +fflush the compressed file. You +can force this behaviour to happen even in the case of no error, +by passing a nonzero value to +abandon.

+

If nbytes_in is non-null, +*nbytes_in will be set to be the +total volume of uncompressed data handled. Similarly, +nbytes_out will be set to the +total volume of compressed data written. For compatibility with +older versions of the library, +BZ2_bzWriteClose only yields the +lower 32 bits of these counts. Use +BZ2_bzWriteClose64 if you want +the full 64 bit counts. These two functions are otherwise +absolutely identical.

+

Possible assignments to +bzerror:

+
BZ_SEQUENCE_ERROR
+  if b was opened with BZ2_bzReadOpen
+BZ_IO_ERROR
+  if there is an error writing the compressed file
+BZ_OK
+  otherwise
+
+
+

+3.4.8. Handling embedded compressed data streams

+

The high-level library facilitates use of +bzip2 data streams which form +some part of a surrounding, larger data stream.

+
    +
  • For writing, the library takes an open file handle, + writes compressed data to it, + fflushes it but does not + fclose it. The calling + application can write its own data before and after the + compressed data stream, using that same file handle.

  • +
  • Reading is more complex, and the facilities are not as + general as they could be since generality is hard to reconcile + with efficiency. BZ2_bzRead + reads from the compressed file in blocks of size + BZ_MAX_UNUSED bytes, and in + doing so probably will overshoot the logical end of compressed + stream. To recover this data once decompression has ended, + call BZ2_bzReadGetUnused after + the last call of BZ2_bzRead + (the one returning + BZ_STREAM_END) but before + calling + BZ2_bzReadClose.

  • +
+

This mechanism makes it easy to decompress multiple +bzip2 streams placed end-to-end. +As the end of one stream, when +BZ2_bzRead returns +BZ_STREAM_END, call +BZ2_bzReadGetUnused to collect +the unused data (copy it into your own buffer somewhere). That +data forms the start of the next compressed stream. To start +uncompressing that next stream, call +BZ2_bzReadOpen again, feeding in +the unused data via the unused / +nUnused parameters. Keep doing +this until BZ_STREAM_END return +coincides with the physical end of file +(feof(f)). In this situation +BZ2_bzReadGetUnused will of +course return no data.

+

This should give some feel for how the high-level interface +can be used. If you require extra flexibility, you'll have to +bite the bullet and get to grips with the low-level +interface.

+
+
+

+3.4.9. Standard file-reading/writing code

+

Here's how you'd write data to a compressed file:

+
FILE*   f;
+BZFILE* b;
+int     nBuf;
+char    buf[ /* whatever size you like */ ];
+int     bzerror;
+int     nWritten;
+
+f = fopen ( "myfile.bz2", "w" );
+if ( !f ) {
+ /* handle error */
+}
+b = BZ2_bzWriteOpen( &bzerror, f, 9 );
+if (bzerror != BZ_OK) {
+ BZ2_bzWriteClose ( b );
+ /* handle error */
+}
+
+while ( /* condition */ ) {
+ /* get data to write into buf, and set nBuf appropriately */
+ nWritten = BZ2_bzWrite ( &bzerror, b, buf, nBuf );
+ if (bzerror == BZ_IO_ERROR) { 
+   BZ2_bzWriteClose ( &bzerror, b );
+   /* handle error */
+ }
+}
+
+BZ2_bzWriteClose( &bzerror, b );
+if (bzerror == BZ_IO_ERROR) {
+ /* handle error */
+}
+

And to read from a compressed file:

+
FILE*   f;
+BZFILE* b;
+int     nBuf;
+char    buf[ /* whatever size you like */ ];
+int     bzerror;
+int     nWritten;
+
+f = fopen ( "myfile.bz2", "r" );
+if ( !f ) {
+  /* handle error */
+}
+b = BZ2_bzReadOpen ( &bzerror, f, 0, NULL, 0 );
+if ( bzerror != BZ_OK ) {
+  BZ2_bzReadClose ( &bzerror, b );
+  /* handle error */
+}
+
+bzerror = BZ_OK;
+while ( bzerror == BZ_OK && /* arbitrary other conditions */) {
+  nBuf = BZ2_bzRead ( &bzerror, b, buf, /* size of buf */ );
+  if ( bzerror == BZ_OK ) {
+    /* do something with buf[0 .. nBuf-1] */
+  }
+}
+if ( bzerror != BZ_STREAM_END ) {
+   BZ2_bzReadClose ( &bzerror, b );
+   /* handle error */
+} else {
+   BZ2_bzReadClose ( &bzerror, b );
+}
+
+
+
+

+3.5. Utility functions

+
+

+3.5.1. BZ2_bzBuffToBuffCompress

+
int BZ2_bzBuffToBuffCompress( char*         dest,
+                              unsigned int* destLen,
+                              char*         source,
+                              unsigned int  sourceLen,
+                              int           blockSize100k,
+                              int           verbosity,
+                              int           workFactor );
+

Attempts to compress the data in source[0 +.. sourceLen-1] into the destination buffer, +dest[0 .. *destLen-1]. If the +destination buffer is big enough, +*destLen is set to the size of +the compressed data, and BZ_OK +is returned. If the compressed data won't fit, +*destLen is unchanged, and +BZ_OUTBUFF_FULL is +returned.

+

Compression in this manner is a one-shot event, done with a +single call to this function. The resulting compressed data is a +complete bzip2 format data +stream. There is no mechanism for making additional calls to +provide extra input data. If you want that kind of mechanism, +use the low-level interface.

+

For the meaning of parameters +blockSize100k, +verbosity and +workFactor, see +BZ2_bzCompressInit.

+

To guarantee that the compressed data will fit in its +buffer, allocate an output buffer of size 1% larger than the +uncompressed data, plus six hundred extra bytes.

+

BZ2_bzBuffToBuffDecompress +will not write data at or beyond +dest[*destLen], even in case of +buffer overflow.

+

Possible return values:

+
BZ_CONFIG_ERROR
+  if the library has been mis-compiled
+BZ_PARAM_ERROR
+  if dest is NULL or destLen is NULL
+  or blockSize100k < 1 or blockSize100k > 9
+  or verbosity < 0 or verbosity > 4
+  or workFactor < 0 or workFactor > 250
+BZ_MEM_ERROR
+  if insufficient memory is available 
+BZ_OUTBUFF_FULL
+  if the size of the compressed data exceeds *destLen
+BZ_OK
+  otherwise
+
+
+

+3.5.2. BZ2_bzBuffToBuffDecompress

+
int BZ2_bzBuffToBuffDecompress( char*         dest,
+                                unsigned int* destLen,
+                                char*         source,
+                                unsigned int  sourceLen,
+                                int           small,
+                                int           verbosity );
+

Attempts to decompress the data in source[0 +.. sourceLen-1] into the destination buffer, +dest[0 .. *destLen-1]. If the +destination buffer is big enough, +*destLen is set to the size of +the uncompressed data, and BZ_OK +is returned. If the compressed data won't fit, +*destLen is unchanged, and +BZ_OUTBUFF_FULL is +returned.

+

source is assumed to hold +a complete bzip2 format data +stream. +BZ2_bzBuffToBuffDecompress tries +to decompress the entirety of the stream into the output +buffer.

+

For the meaning of parameters +small and +verbosity, see +BZ2_bzDecompressInit.

+

Because the compression ratio of the compressed data cannot +be known in advance, there is no easy way to guarantee that the +output buffer will be big enough. You may of course make +arrangements in your code to record the size of the uncompressed +data, but such a mechanism is beyond the scope of this +library.

+

BZ2_bzBuffToBuffDecompress +will not write data at or beyond +dest[*destLen], even in case of +buffer overflow.

+

Possible return values:

+
BZ_CONFIG_ERROR
+  if the library has been mis-compiled
+BZ_PARAM_ERROR
+  if dest is NULL or destLen is NULL
+  or small != 0 && small != 1
+  or verbosity < 0 or verbosity > 4
+BZ_MEM_ERROR
+  if insufficient memory is available 
+BZ_OUTBUFF_FULL
+  if the size of the compressed data exceeds *destLen
+BZ_DATA_ERROR
+  if a data integrity error was detected in the compressed data
+BZ_DATA_ERROR_MAGIC
+  if the compressed data doesn't begin with the right magic bytes
+BZ_UNEXPECTED_EOF
+  if the compressed data ends unexpectedly
+BZ_OK
+  otherwise
+
+
+
+

+3.6. zlib compatibility functions

+

Yoshioka Tsuneo has contributed some functions to give +better zlib compatibility. +These functions are BZ2_bzopen, +BZ2_bzread, +BZ2_bzwrite, +BZ2_bzflush, +BZ2_bzclose, +BZ2_bzerror and +BZ2_bzlibVersion. These +functions are not (yet) officially part of the library. If they +break, you get to keep all the pieces. Nevertheless, I think +they work ok.

+
typedef void BZFILE;
+
+const char * BZ2_bzlibVersion ( void );
+

Returns a string indicating the library version.

+
BZFILE * BZ2_bzopen  ( const char *path, const char *mode );
+BZFILE * BZ2_bzdopen ( int        fd,    const char *mode );
+

Opens a .bz2 file for +reading or writing, using either its name or a pre-existing file +descriptor. Analogous to fopen +and fdopen.

+
int BZ2_bzread  ( BZFILE* b, void* buf, int len );
+int BZ2_bzwrite ( BZFILE* b, void* buf, int len );
+

Reads/writes data from/to a previously opened +BZFILE. Analogous to +fread and +fwrite.

+
int  BZ2_bzflush ( BZFILE* b );
+void BZ2_bzclose ( BZFILE* b );
+

Flushes/closes a BZFILE. +BZ2_bzflush doesn't actually do +anything. Analogous to fflush +and fclose.

+
const char * BZ2_bzerror ( BZFILE *b, int *errnum )
+

Returns a string describing the more recent error status of +b, and also sets +*errnum to its numerical +value.

+
+
+

+3.7. Using the library in a stdio-free environment

+
+

+3.7.1. Getting rid of stdio

+

In a deeply embedded application, you might want to use +just the memory-to-memory functions. You can do this +conveniently by compiling the library with preprocessor symbol +BZ_NO_STDIO defined. Doing this +gives you a library containing only the following eight +functions:

+

BZ2_bzCompressInit, +BZ2_bzCompress, +BZ2_bzCompressEnd +BZ2_bzDecompressInit, +BZ2_bzDecompress, +BZ2_bzDecompressEnd +BZ2_bzBuffToBuffCompress, +BZ2_bzBuffToBuffDecompress

+

When compiled like this, all functions will ignore +verbosity settings.

+
+
+

+3.7.2. Critical error handling

+

libbzip2 contains a number +of internal assertion checks which should, needless to say, never +be activated. Nevertheless, if an assertion should fail, +behaviour depends on whether or not the library was compiled with +BZ_NO_STDIO set.

+

For a normal compile, an assertion failure yields the +message:

+
+

bzip2/libbzip2: internal error number N.

+

This is a bug in bzip2/libbzip2, 1.0.5 of 10 December 2007. +Please report it to me at: jseward@bzip.org. If this happened +when you were using some program which uses libbzip2 as a +component, you should also report this bug to the author(s) +of that program. Please make an effort to report this bug; +timely and accurate bug reports eventually lead to higher +quality software. Thanks. Julian Seward, 10 December 2007. +

+
+

where N is some error code +number. If N == 1007, it also +prints some extra text advising the reader that unreliable memory +is often associated with internal error 1007. (This is a +frequently-observed-phenomenon with versions 1.0.0/1.0.1).

+

exit(3) is then +called.

+

For a stdio-free library, +assertion failures result in a call to a function declared +as:

+
extern void bz_internal_error ( int errcode );
+

The relevant code is passed as a parameter. You should +supply such a function.

+

In either case, once an assertion failure has occurred, any +bz_stream records involved can +be regarded as invalid. You should not attempt to resume normal +operation with them.

+

You may, of course, change critical error handling to suit +your needs. As I said above, critical errors indicate bugs in +the library and should not occur. All "normal" error situations +are indicated via error return codes from functions, and can be +recovered from.

+
+
+
+

+3.8. Making a Windows DLL

+

Everything related to Windows has been contributed by +Yoshioka Tsuneo +(tsuneo@rr.iij4u.or.jp), so +you should send your queries to him (but perhaps Cc: me, +jseward@bzip.org).

+

My vague understanding of what to do is: using Visual C++ +5.0, open the project file +libbz2.dsp, and build. That's +all.

+

If you can't open the project file for some reason, make a +new one, naming these files: +blocksort.c, +bzlib.c, +compress.c, +crctable.c, +decompress.c, +huffman.c, +randtable.c and +libbz2.def. You will also need +to name the header files bzlib.h +and bzlib_private.h.

+

If you don't use VC++, you may need to define the +proprocessor symbol +_WIN32.

+

Finally, dlltest.c is a +sample program using the DLL. It has a project file, +dlltest.dsp.

+

If you just want a makefile for Visual C, have a look at +makefile.msc.

+

Be aware that if you compile +bzip2 itself on Win32, you must +set BZ_UNIX to 0 and +BZ_LCCWIN32 to 1, in the file +bzip2.c, before compiling. +Otherwise the resulting binary won't work correctly.

+

I haven't tried any of this stuff myself, but it all looks +plausible.

+
+
+
+

+4. Miscellanea

+ +

These are just some random thoughts of mine. Your mileage +may vary.

+
+

+4.1. Limitations of the compressed file format

+

bzip2-1.0.X, +0.9.5 and +0.9.0 use exactly the same file +format as the original version, +bzip2-0.1. This decision was +made in the interests of stability. Creating yet another +incompatible compressed file format would create further +confusion and disruption for users.

+

Nevertheless, this is not a painless decision. Development +work since the release of +bzip2-0.1 in August 1997 has +shown complexities in the file format which slow down +decompression and, in retrospect, are unnecessary. These +are:

+
    +
  • The run-length encoder, which is the first of the + compression transformations, is entirely irrelevant. The + original purpose was to protect the sorting algorithm from the + very worst case input: a string of repeated symbols. But + algorithm steps Q6a and Q6b in the original Burrows-Wheeler + technical report (SRC-124) show how repeats can be handled + without difficulty in block sorting.

  • +
  • +

    The randomisation mechanism doesn't really need to be + there. Udi Manber and Gene Myers published a suffix array + construction algorithm a few years back, which can be employed + to sort any block, no matter how repetitive, in O(N log N) + time. Subsequent work by Kunihiko Sadakane has produced a + derivative O(N (log N)^2) algorithm which usually outperforms + the Manber-Myers algorithm.

    +

    I could have changed to Sadakane's algorithm, but I find + it to be slower than bzip2's + existing algorithm for most inputs, and the randomisation + mechanism protects adequately against bad cases. I didn't + think it was a good tradeoff to make. Partly this is due to + the fact that I was not flooded with email complaints about + bzip2-0.1's performance on + repetitive data, so perhaps it isn't a problem for real + inputs.

    +

    Probably the best long-term solution, and the one I have + incorporated into 0.9.5 and above, is to use the existing + sorting algorithm initially, and fall back to a O(N (log N)^2) + algorithm if the standard algorithm gets into + difficulties.

    +
  • +
  • The compressed file format was never designed to be + handled by a library, and I have had to jump though some hoops + to produce an efficient implementation of decompression. It's + a bit hairy. Try passing + decompress.c through the C + preprocessor and you'll see what I mean. Much of this + complexity could have been avoided if the compressed size of + each block of data was recorded in the data stream.

  • +
  • An Adler-32 checksum, rather than a CRC32 checksum, + would be faster to compute.

  • +
+

It would be fair to say that the +bzip2 format was frozen before I +properly and fully understood the performance consequences of +doing so.

+

Improvements which I was able to incorporate into 0.9.0, +despite using the same file format, are:

+
    +
  • Single array implementation of the inverse BWT. This + significantly speeds up decompression, presumably because it + reduces the number of cache misses.

  • +
  • Faster inverse MTF transform for large MTF values. + The new implementation is based on the notion of sliding blocks + of values.

  • +
  • bzip2-0.9.0 now reads + and writes files with fread + and fwrite; version 0.1 used + putc and + getc. Duh! Well, you live + and learn.

  • +
+

Further ahead, it would be nice to be able to do random +access into files. This will require some careful design of +compressed file formats.

+
+
+

+4.2. Portability issues

+

After some consideration, I have decided not to use GNU +autoconf to configure 0.9.5 or +1.0.

+

autoconf, admirable and +wonderful though it is, mainly assists with portability problems +between Unix-like platforms. But +bzip2 doesn't have much in the +way of portability problems on Unix; most of the difficulties +appear when porting to the Mac, or to Microsoft's operating +systems. autoconf doesn't help +in those cases, and brings in a whole load of new +complexity.

+

Most people should be able to compile the library and +program under Unix straight out-of-the-box, so to speak, +especially if you have a version of GNU C available.

+

There are a couple of +__inline__ directives in the +code. GNU C (gcc) should be +able to handle them. If you're not using GNU C, your C compiler +shouldn't see them at all. If your compiler does, for some +reason, see them and doesn't like them, just +#define +__inline__ to be +/* */. One easy way to do this +is to compile with the flag +-D__inline__=, which should be +understood by most Unix compilers.

+

If you still have difficulties, try compiling with the +macro BZ_STRICT_ANSI defined. +This should enable you to build the library in a strictly ANSI +compliant environment. Building the program itself like this is +dangerous and not supported, since you remove +bzip2's checks against +compressing directories, symbolic links, devices, and other +not-really-a-file entities. This could cause filesystem +corruption!

+

One other thing: if you create a +bzip2 binary for public distribution, +please consider linking it statically (gcc +-static). This avoids all sorts of library-version +issues that others may encounter later on.

+

If you build bzip2 on +Win32, you must set BZ_UNIX to 0 +and BZ_LCCWIN32 to 1, in the +file bzip2.c, before compiling. +Otherwise the resulting binary won't work correctly.

+
+
+

+4.3. Reporting bugs

+

I tried pretty hard to make sure +bzip2 is bug free, both by +design and by testing. Hopefully you'll never need to read this +section for real.

+

Nevertheless, if bzip2 dies +with a segmentation fault, a bus error or an internal assertion +failure, it will ask you to email me a bug report. Experience from +years of feedback of bzip2 users indicates that almost all these +problems can be traced to either compiler bugs or hardware +problems.

+
    +
  • +

    Recompile the program with no optimisation, and + see if it works. And/or try a different compiler. I heard all + sorts of stories about various flavours of GNU C (and other + compilers) generating bad code for + bzip2, and I've run across two + such examples myself.

    +

    2.7.X versions of GNU C are known to generate bad code + from time to time, at high optimisation levels. If you get + problems, try using the flags + -O2 + -fomit-frame-pointer + -fno-strength-reduce. You + should specifically not use + -funroll-loops.

    +

    You may notice that the Makefile runs six tests as part + of the build process. If the program passes all of these, it's + a pretty good (but not 100%) indication that the compiler has + done its job correctly.

    +
  • +
  • +

    If bzip2 + crashes randomly, and the crashes are not repeatable, you may + have a flaky memory subsystem. + bzip2 really hammers your + memory hierarchy, and if it's a bit marginal, you may get these + problems. Ditto if your disk or I/O subsystem is slowly + failing. Yup, this really does happen.

    +

    Try using a different machine of the same type, and see + if you can repeat the problem.

    +
  • +
  • This isn't really a bug, but ... If + bzip2 tells you your file is + corrupted on decompression, and you obtained the file via FTP, + there is a possibility that you forgot to tell FTP to do a + binary mode transfer. That absolutely will cause the file to + be non-decompressible. You'll have to transfer it + again.

  • +
+

If you've incorporated +libbzip2 into your own program +and are getting problems, please, please, please, check that the +parameters you are passing in calls to the library, are correct, +and in accordance with what the documentation says is allowable. +I have tried to make the library robust against such problems, +but I'm sure I haven't succeeded.

+

Finally, if the above comments don't help, you'll have to +send me a bug report. Now, it's just amazing how many people +will send me a bug report saying something like:

+
bzip2 crashed with segmentation fault on my machine
+

and absolutely nothing else. Needless to say, a such a +report is totally, utterly, completely and +comprehensively 100% useless; a waste of your time, my time, and +net bandwidth. With no details at all, there's no way +I can possibly begin to figure out what the problem is.

+

The rules of the game are: facts, facts, facts. Don't omit +them because "oh, they won't be relevant". At the bare +minimum:

+
Machine type.  Operating system version.  
+Exact version of bzip2 (do bzip2 -V).  
+Exact version of the compiler used.  
+Flags passed to the compiler.
+

However, the most important single thing that will help me +is the file that you were trying to compress or decompress at the +time the problem happened. Without that, my ability to do +anything more than speculate about the cause, is limited.

+
+
+

+4.4. Did you get the right package?

+

bzip2 is a resource hog. +It soaks up large amounts of CPU cycles and memory. Also, it +gives very large latencies. In the worst case, you can feed many +megabytes of uncompressed data into the library before getting +any compressed output, so this probably rules out applications +requiring interactive behaviour.

+

These aren't faults of my implementation, I hope, but more +an intrinsic property of the Burrows-Wheeler transform +(unfortunately). Maybe this isn't what you want.

+

If you want a compressor and/or library which is faster, +uses less memory but gets pretty good compression, and has +minimal latency, consider Jean-loup Gailly's and Mark Adler's +work, zlib-1.2.1 and +gzip-1.2.4. Look for them at +http://www.zlib.org and +http://www.gzip.org +respectively.

+

For something faster and lighter still, you might try Markus F +X J Oberhumer's LZO real-time +compression/decompression library, at +http://www.oberhumer.com/opensource.

+
+
+

+4.5. Further Reading

+

bzip2 is not research +work, in the sense that it doesn't present any new ideas. +Rather, it's an engineering exercise based on existing +ideas.

+

Four documents describe essentially all the ideas behind +bzip2:

+

Michael Burrows and D. J. Wheeler:
+  "A block-sorting lossless data compression algorithm"
+   10th May 1994. 
+   Digital SRC Research Report 124.
+   ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz
+   If you have trouble finding it, try searching at the
+   New Zealand Digital Library, http://www.nzdl.org.
+
+Daniel S. Hirschberg and Debra A. LeLewer
+  "Efficient Decoding of Prefix Codes"
+   Communications of the ACM, April 1990, Vol 33, Number 4.
+   You might be able to get an electronic copy of this
+   from the ACM Digital Library.
+
+David J. Wheeler
+   Program bred3.c and accompanying document bred3.ps.
+   This contains the idea behind the multi-table Huffman coding scheme.
+   ftp://ftp.cl.cam.ac.uk/users/djw3/
+
+Jon L. Bentley and Robert Sedgewick
+  "Fast Algorithms for Sorting and Searching Strings"
+   Available from Sedgewick's web page,
+   www.cs.princeton.edu/~rs
+

+

The following paper gives valuable additional insights into +the algorithm, but is not immediately the basis of any code used +in bzip2.

+

Peter Fenwick:
+   Block Sorting Text Compression
+   Proceedings of the 19th Australasian Computer Science Conference,
+     Melbourne, Australia.  Jan 31 - Feb 2, 1996.
+   ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps

+

Kunihiko Sadakane's sorting algorithm, mentioned above, is +available from:

+

http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz
+

+

The Manber-Myers suffix array construction algorithm is +described in a paper available from:

+

http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps
+

+

Finally, the following papers document some +investigations I made into the performance of sorting +and decompression algorithms:

+

Julian Seward
+   On the Performance of BWT Sorting Algorithms
+   Proceedings of the IEEE Data Compression Conference 2000
+     Snowbird, Utah.  28-30 March 2000.
+
+Julian Seward
+   Space-time Tradeoffs in the Inverse B-W Transform
+   Proceedings of the IEEE Data Compression Conference 2001
+     Snowbird, Utah.  27-29 March 2001.
+

+
+
+
+ diff --git a/dist/bzip2/manual.xml b/dist/bzip2/manual.xml new file mode 100644 index 000000000..f22413602 --- /dev/null +++ b/dist/bzip2/manual.xml @@ -0,0 +1,2964 @@ + + + %common-ents; +]> + + + + + bzip2 and libbzip2, version 1.0.5 + A program and library for data compression + + &bz-lifespan; + Julian Seward + + Version &bz-version; of &bz-date; + + + + Julian + Seward + + &bz-url; + + + + + + + This program, bzip2, the + associated library libbzip2, and + all documentation, are copyright © &bz-lifespan; Julian Seward. + All rights reserved. + + Redistribution and use in source and binary forms, with + or without modification, are permitted provided that the + following conditions are met: + + + + Redistributions of source code must retain the + above copyright notice, this list of conditions and the + following disclaimer. + + 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. + + Altered source versions must be plainly marked + as such, and must not be misrepresented as being the original + software. + + The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + + + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + + PATENTS: To the best of my knowledge, + bzip2 and + libbzip2 do not use any patented + algorithms. However, I do not have the resources to carry + out a patent search. Therefore I cannot give any guarantee of + the above statement. + + + + + + + + + +Introduction + +bzip2 compresses files +using the Burrows-Wheeler block-sorting text compression +algorithm, and Huffman coding. Compression is generally +considerably better than that achieved by more conventional +LZ77/LZ78-based compressors, and approaches the performance of +the PPM family of statistical compressors. + +bzip2 is built on top of +libbzip2, a flexible library for +handling compressed data in the +bzip2 format. This manual +describes both how to use the program and how to work with the +library interface. Most of the manual is devoted to this +library, not the program, which is good news if your interest is +only in the program. + + + + describes how to use + bzip2; this is the only part + you need to read if you just want to know how to operate the + program. + + describes the + programming interfaces in detail, and + + records some + miscellaneous notes which I thought ought to be recorded + somewhere. + + + + + + + +How to use bzip2 + +This chapter contains a copy of the +bzip2 man page, and nothing +else. + + +NAME + + + + bzip2, + bunzip2 - a block-sorting file + compressor, v1.0.4 + + bzcat - + decompresses files to stdout + + bzip2recover - + recovers data from damaged bzip2 files + + + + + + + +SYNOPSIS + + + + bzip2 [ + -cdfkqstvzVL123456789 ] [ filenames ... ] + + bunzip2 [ + -fkvsVL ] [ filenames ... ] + + bzcat [ -s ] [ + filenames ... ] + + bzip2recover + filename + + + + + + + +DESCRIPTION + +bzip2 compresses files +using the Burrows-Wheeler block sorting text compression +algorithm, and Huffman coding. Compression is generally +considerably better than that achieved by more conventional +LZ77/LZ78-based compressors, and approaches the performance of +the PPM family of statistical compressors. + +The command-line options are deliberately very similar to +those of GNU gzip, but they are +not identical. + +bzip2 expects a list of +file names to accompany the command-line flags. Each file is +replaced by a compressed version of itself, with the name +original_name.bz2. Each +compressed file has the same modification date, permissions, and, +when possible, ownership as the corresponding original, so that +these properties can be correctly restored at decompression time. +File name handling is naive in the sense that there is no +mechanism for preserving original file names, permissions, +ownerships or dates in filesystems which lack these concepts, or +have serious file name length restrictions, such as +MS-DOS. + +bzip2 and +bunzip2 will by default not +overwrite existing files. If you want this to happen, specify +the -f flag. + +If no file names are specified, +bzip2 compresses from standard +input to standard output. In this case, +bzip2 will decline to write +compressed output to a terminal, as this would be entirely +incomprehensible and therefore pointless. + +bunzip2 (or +bzip2 -d) decompresses all +specified files. Files which were not created by +bzip2 will be detected and +ignored, and a warning issued. +bzip2 attempts to guess the +filename for the decompressed file from that of the compressed +file as follows: + + + + filename.bz2 + becomes + filename + + filename.bz + becomes + filename + + filename.tbz2 + becomes + filename.tar + + filename.tbz + becomes + filename.tar + + anyothername + becomes + anyothername.out + + + +If the file does not end in one of the recognised endings, +.bz2, +.bz, +.tbz2 or +.tbz, +bzip2 complains that it cannot +guess the name of the original file, and uses the original name +with .out appended. + +As with compression, supplying no filenames causes +decompression from standard input to standard output. + +bunzip2 will correctly +decompress a file which is the concatenation of two or more +compressed files. The result is the concatenation of the +corresponding uncompressed files. Integrity testing +(-t) of concatenated compressed +files is also supported. + +You can also compress or decompress files to the standard +output by giving the -c flag. +Multiple files may be compressed and decompressed like this. The +resulting outputs are fed sequentially to stdout. Compression of +multiple files in this manner generates a stream containing +multiple compressed file representations. Such a stream can be +decompressed correctly only by +bzip2 version 0.9.0 or later. +Earlier versions of bzip2 will +stop after decompressing the first file in the stream. + +bzcat (or +bzip2 -dc) decompresses all +specified files to the standard output. + +bzip2 will read arguments +from the environment variables +BZIP2 and +BZIP, in that order, and will +process them before any arguments read from the command line. +This gives a convenient way to supply default arguments. + +Compression is always performed, even if the compressed +file is slightly larger than the original. Files of less than +about one hundred bytes tend to get larger, since the compression +mechanism has a constant overhead in the region of 50 bytes. +Random data (including the output of most file compressors) is +coded at about 8.05 bits per byte, giving an expansion of around +0.5%. + +As a self-check for your protection, +bzip2 uses 32-bit CRCs to make +sure that the decompressed version of a file is identical to the +original. This guards against corruption of the compressed data, +and against undetected bugs in +bzip2 (hopefully very unlikely). +The chances of data corruption going undetected is microscopic, +about one chance in four billion for each file processed. Be +aware, though, that the check occurs upon decompression, so it +can only tell you that something is wrong. It can't help you +recover the original uncompressed data. You can use +bzip2recover to try to recover +data from damaged files. + +Return values: 0 for a normal exit, 1 for environmental +problems (file not found, invalid flags, I/O errors, etc.), 2 +to indicate a corrupt compressed file, 3 for an internal +consistency error (eg, bug) which caused +bzip2 to panic. + + + + + +OPTIONS + + + + + -c --stdout + Compress or decompress to standard + output. + + + + -d --decompress + Force decompression. + bzip2, + bunzip2 and + bzcat are really the same + program, and the decision about what actions to take is done on + the basis of which name is used. This flag overrides that + mechanism, and forces bzip2 to decompress. + + + + -z --compress + The complement to + -d: forces compression, + regardless of the invokation name. + + + + -t --test + Check integrity of the specified file(s), but + don't decompress them. This really performs a trial + decompression and throws away the result. + + + + -f --force + Force overwrite of output files. Normally, + bzip2 will not overwrite + existing output files. Also forces + bzip2 to break hard links to + files, which it otherwise wouldn't do. + bzip2 normally declines + to decompress files which don't have the correct magic header + bytes. If forced (-f), + however, it will pass such files through unmodified. This is + how GNU gzip behaves. + + + + + -k --keep + Keep (don't delete) input files during + compression or decompression. + + + + -s --small + Reduce memory usage, for compression, + decompression and testing. Files are decompressed and tested + using a modified algorithm which only requires 2.5 bytes per + block byte. This means any file can be decompressed in 2300k + of memory, albeit at about half the normal speed. + During compression, -s + selects a block size of 200k, which limits memory use to around + the same figure, at the expense of your compression ratio. In + short, if your machine is low on memory (8 megabytes or less), + use -s for everything. See + below. + + + + -q --quiet + Suppress non-essential warning messages. + Messages pertaining to I/O errors and other critical events + will not be suppressed. + + + + -v --verbose + Verbose mode -- show the compression ratio for + each file processed. Further + -v's increase the verbosity + level, spewing out lots of information which is primarily of + interest for diagnostic purposes. + + + + -L --license -V --version + Display the software version, license terms and + conditions. + + + + -1 (or + --fast) to + -9 (or + -best) + Set the block size to 100 k, 200 k ... 900 k + when compressing. Has no effect when decompressing. See below. The + --fast and + --best aliases are primarily + for GNU gzip compatibility. + In particular, --fast doesn't + make things significantly faster. And + --best merely selects the + default behaviour. + + + + -- + Treats all subsequent arguments as file names, + even if they start with a dash. This is so you can handle + files with names beginning with a dash, for example: + bzip2 -- + -myfilename. + + + + --repetitive-fast + --repetitive-best + These flags are redundant in versions 0.9.5 and + above. They provided some coarse control over the behaviour of + the sorting algorithm in earlier versions, which was sometimes + useful. 0.9.5 and above have an improved algorithm which + renders these flags irrelevant. + + + + + + + + +MEMORY MANAGEMENT + +bzip2 compresses large +files in blocks. The block size affects both the compression +ratio achieved, and the amount of memory needed for compression +and decompression. The flags -1 +through -9 specify the block +size to be 100,000 bytes through 900,000 bytes (the default) +respectively. At decompression time, the block size used for +compression is read from the header of the compressed file, and +bunzip2 then allocates itself +just enough memory to decompress the file. Since block sizes are +stored in compressed files, it follows that the flags +-1 to +-9 are irrelevant to and so +ignored during decompression. + +Compression and decompression requirements, in bytes, can be +estimated as: + +Compression: 400k + ( 8 x block size ) + +Decompression: 100k + ( 4 x block size ), or + 100k + ( 2.5 x block size ) + + +Larger block sizes give rapidly diminishing marginal +returns. Most of the compression comes from the first two or +three hundred k of block size, a fact worth bearing in mind when +using bzip2 on small machines. +It is also important to appreciate that the decompression memory +requirement is set at compression time by the choice of block +size. + +For files compressed with the default 900k block size, +bunzip2 will require about 3700 +kbytes to decompress. To support decompression of any file on a +4 megabyte machine, bunzip2 has +an option to decompress using approximately half this amount of +memory, about 2300 kbytes. Decompression speed is also halved, +so you should use this option only where necessary. The relevant +flag is -s. + +In general, try and use the largest block size memory +constraints allow, since that maximises the compression achieved. +Compression and decompression speed are virtually unaffected by +block size. + +Another significant point applies to files which fit in a +single block -- that means most files you'd encounter using a +large block size. The amount of real memory touched is +proportional to the size of the file, since the file is smaller +than a block. For example, compressing a file 20,000 bytes long +with the flag -9 will cause the +compressor to allocate around 7600k of memory, but only touch +400k + 20000 * 8 = 560 kbytes of it. Similarly, the decompressor +will allocate 3700k but only touch 100k + 20000 * 4 = 180 +kbytes. + +Here is a table which summarises the maximum memory usage +for different block sizes. Also recorded is the total compressed +size for 14 files of the Calgary Text Compression Corpus +totalling 3,141,622 bytes. This column gives some feel for how +compression varies with block size. These figures tend to +understate the advantage of larger block sizes for larger files, +since the Corpus is dominated by smaller files. + + + Compress Decompress Decompress Corpus +Flag usage usage -s usage Size + + -1 1200k 500k 350k 914704 + -2 2000k 900k 600k 877703 + -3 2800k 1300k 850k 860338 + -4 3600k 1700k 1100k 846899 + -5 4400k 2100k 1350k 845160 + -6 5200k 2500k 1600k 838626 + -7 6100k 2900k 1850k 834096 + -8 6800k 3300k 2100k 828642 + -9 7600k 3700k 2350k 828642 + + + + + + +RECOVERING DATA FROM DAMAGED FILES + +bzip2 compresses files in +blocks, usually 900kbytes long. Each block is handled +independently. If a media or transmission error causes a +multi-block .bz2 file to become +damaged, it may be possible to recover data from the undamaged +blocks in the file. + +The compressed representation of each block is delimited by +a 48-bit pattern, which makes it possible to find the block +boundaries with reasonable certainty. Each block also carries +its own 32-bit CRC, so damaged blocks can be distinguished from +undamaged ones. + +bzip2recover is a simple +program whose purpose is to search for blocks in +.bz2 files, and write each block +out into its own .bz2 file. You +can then use bzip2 -t to test +the integrity of the resulting files, and decompress those which +are undamaged. + +bzip2recover takes a +single argument, the name of the damaged file, and writes a +number of files rec0001file.bz2, +rec0002file.bz2, etc, containing +the extracted blocks. The output filenames are designed so that +the use of wildcards in subsequent processing -- for example, +bzip2 -dc rec*file.bz2 > +recovered_data -- lists the files in the correct +order. + +bzip2recover should be of +most use dealing with large .bz2 +files, as these will contain many blocks. It is clearly futile +to use it on damaged single-block files, since a damaged block +cannot be recovered. If you wish to minimise any potential data +loss through media or transmission errors, you might consider +compressing with a smaller block size. + + + + + +PERFORMANCE NOTES + +The sorting phase of compression gathers together similar +strings in the file. Because of this, files containing very long +runs of repeated symbols, like "aabaabaabaab ..." (repeated +several hundred times) may compress more slowly than normal. +Versions 0.9.5 and above fare much better than previous versions +in this respect. The ratio between worst-case and average-case +compression time is in the region of 10:1. For previous +versions, this figure was more like 100:1. You can use the +-vvvv option to monitor progress +in great detail, if you want. + +Decompression speed is unaffected by these +phenomena. + +bzip2 usually allocates +several megabytes of memory to operate in, and then charges all +over it in a fairly random fashion. This means that performance, +both for compressing and decompressing, is largely determined by +the speed at which your machine can service cache misses. +Because of this, small changes to the code to reduce the miss +rate have been observed to give disproportionately large +performance improvements. I imagine +bzip2 will perform best on +machines with very large caches. + + + + + + +CAVEATS + +I/O error messages are not as helpful as they could be. +bzip2 tries hard to detect I/O +errors and exit cleanly, but the details of what the problem is +sometimes seem rather misleading. + +This manual page pertains to version &bz-version; of +bzip2. Compressed data created by +this version is entirely forwards and backwards compatible with the +previous public releases, versions 0.1pl2, 0.9.0 and 0.9.5, 1.0.0, +1.0.1, 1.0.2 and 1.0.3, but with the following exception: 0.9.0 and +above can correctly decompress multiple concatenated compressed files. +0.1pl2 cannot do this; it will stop after decompressing just the first +file in the stream. + +bzip2recover versions +prior to 1.0.2 used 32-bit integers to represent bit positions in +compressed files, so it could not handle compressed files more +than 512 megabytes long. Versions 1.0.2 and above use 64-bit ints +on some platforms which support them (GNU supported targets, and +Windows). To establish whether or not +bzip2recover was built with such +a limitation, run it without arguments. In any event you can +build yourself an unlimited version if you can recompile it with +MaybeUInt64 set to be an +unsigned 64-bit integer. + + + + + + +AUTHOR + +Julian Seward, +&bz-email; + +The ideas embodied in +bzip2 are due to (at least) the +following people: Michael Burrows and David Wheeler (for the +block sorting transformation), David Wheeler (again, for the +Huffman coder), Peter Fenwick (for the structured coding model in +the original bzip, and many +refinements), and Alistair Moffat, Radford Neal and Ian Witten +(for the arithmetic coder in the original +bzip). I am much indebted for +their help, support and advice. See the manual in the source +distribution for pointers to sources of documentation. Christian +von Roques encouraged me to look for faster sorting algorithms, +so as to speed up compression. Bela Lubkin encouraged me to +improve the worst-case compression performance. +Donna Robinson XMLised the documentation. +Many people sent +patches, helped with portability problems, lent machines, gave +advice and were generally helpful. + + + + + + + + + +Programming with <computeroutput>libbzip2</computeroutput> + + +This chapter describes the programming interface to +libbzip2. + +For general background information, particularly about +memory use and performance aspects, you'd be well advised to read + as well. + + + +Top-level structure + +libbzip2 is a flexible +library for compressing and decompressing data in the +bzip2 data format. Although +packaged as a single entity, it helps to regard the library as +three separate parts: the low level interface, and the high level +interface, and some utility functions. + +The structure of +libbzip2's interfaces is similar +to that of Jean-loup Gailly's and Mark Adler's excellent +zlib library. + +All externally visible symbols have names beginning +BZ2_. This is new in version +1.0. The intention is to minimise pollution of the namespaces of +library clients. + +To use any part of the library, you need to +#include <bzlib.h> +into your sources. + + + + +Low-level summary + +This interface provides services for compressing and +decompressing data in memory. There's no provision for dealing +with files, streams or any other I/O mechanisms, just straight +memory-to-memory work. In fact, this part of the library can be +compiled without inclusion of +stdio.h, which may be helpful +for embedded applications. + +The low-level part of the library has no global variables +and is therefore thread-safe. + +Six routines make up the low level interface: +BZ2_bzCompressInit, +BZ2_bzCompress, and +BZ2_bzCompressEnd for +compression, and a corresponding trio +BZ2_bzDecompressInit, +BZ2_bzDecompress and +BZ2_bzDecompressEnd for +decompression. The *Init +functions allocate memory for compression/decompression and do +other initialisations, whilst the +*End functions close down +operations and release memory. + +The real work is done by +BZ2_bzCompress and +BZ2_bzDecompress. These +compress and decompress data from a user-supplied input buffer to +a user-supplied output buffer. These buffers can be any size; +arbitrary quantities of data are handled by making repeated calls +to these functions. This is a flexible mechanism allowing a +consumer-pull style of activity, or producer-push, or a mixture +of both. + + + + + +High-level summary + +This interface provides some handy wrappers around the +low-level interface to facilitate reading and writing +bzip2 format files +(.bz2 files). The routines +provide hooks to facilitate reading files in which the +bzip2 data stream is embedded +within some larger-scale file structure, or where there are +multiple bzip2 data streams +concatenated end-to-end. + +For reading files, +BZ2_bzReadOpen, +BZ2_bzRead, +BZ2_bzReadClose and +BZ2_bzReadGetUnused are +supplied. For writing files, +BZ2_bzWriteOpen, +BZ2_bzWrite and +BZ2_bzWriteFinish are +available. + +As with the low-level library, no global variables are used +so the library is per se thread-safe. However, if I/O errors +occur whilst reading or writing the underlying compressed files, +you may have to consult errno to +determine the cause of the error. In that case, you'd need a C +library which correctly supports +errno in a multithreaded +environment. + +To make the library a little simpler and more portable, +BZ2_bzReadOpen and +BZ2_bzWriteOpen require you to +pass them file handles (FILE*s) +which have previously been opened for reading or writing +respectively. That avoids portability problems associated with +file operations and file attributes, whilst not being much of an +imposition on the programmer. + + + + + +Utility functions summary + +For very simple needs, +BZ2_bzBuffToBuffCompress and +BZ2_bzBuffToBuffDecompress are +provided. These compress data in memory from one buffer to +another buffer in a single function call. You should assess +whether these functions fulfill your memory-to-memory +compression/decompression requirements before investing effort in +understanding the more general but more complex low-level +interface. + +Yoshioka Tsuneo +(tsuneo@rr.iij4u.or.jp) has +contributed some functions to give better +zlib compatibility. These +functions are BZ2_bzopen, +BZ2_bzread, +BZ2_bzwrite, +BZ2_bzflush, +BZ2_bzclose, +BZ2_bzerror and +BZ2_bzlibVersion. You may find +these functions more convenient for simple file reading and +writing, than those in the high-level interface. These functions +are not (yet) officially part of the library, and are minimally +documented here. If they break, you get to keep all the pieces. +I hope to document them properly when time permits. + +Yoshioka also contributed modifications to allow the +library to be built as a Windows DLL. + + + + + + + +Error handling + +The library is designed to recover cleanly in all +situations, including the worst-case situation of decompressing +random data. I'm not 100% sure that it can always do this, so +you might want to add a signal handler to catch segmentation +violations during decompression if you are feeling especially +paranoid. I would be interested in hearing more about the +robustness of the library to corrupted compressed data. + +Version 1.0.3 more robust in this respect than any +previous version. Investigations with Valgrind (a tool for detecting +problems with memory management) indicate +that, at least for the few files I tested, all single-bit errors +in the decompressed data are caught properly, with no +segmentation faults, no uses of uninitialised data, no out of +range reads or writes, and no infinite looping in the decompressor. +So it's certainly pretty robust, although +I wouldn't claim it to be totally bombproof. + +The file bzlib.h contains +all definitions needed to use the library. In particular, you +should definitely not include +bzlib_private.h. + +In bzlib.h, the various +return values are defined. The following list is not intended as +an exhaustive description of the circumstances in which a given +value may be returned -- those descriptions are given later. +Rather, it is intended to convey the rough meaning of each return +value. The first five actions are normal and not intended to +denote an error situation. + + + + + BZ_OK + The requested action was completed + successfully. + + + + BZ_RUN_OK, BZ_FLUSH_OK, + BZ_FINISH_OK + In + BZ2_bzCompress, the requested + flush/finish/nothing-special action was completed + successfully. + + + + BZ_STREAM_END + Compression of data was completed, or the + logical stream end was detected during + decompression. + + + + +The following return values indicate an error of some +kind. + + + + + BZ_CONFIG_ERROR + Indicates that the library has been improperly + compiled on your platform -- a major configuration error. + Specifically, it means that + sizeof(char), + sizeof(short) and + sizeof(int) are not 1, 2 and + 4 respectively, as they should be. Note that the library + should still work properly on 64-bit platforms which follow + the LP64 programming model -- that is, where + sizeof(long) and + sizeof(void*) are 8. Under + LP64, sizeof(int) is still 4, + so libbzip2, which doesn't + use the long type, is + OK. + + + + BZ_SEQUENCE_ERROR + When using the library, it is important to call + the functions in the correct sequence and with data structures + (buffers etc) in the correct states. + libbzip2 checks as much as it + can to ensure this is happening, and returns + BZ_SEQUENCE_ERROR if not. + Code which complies precisely with the function semantics, as + detailed below, should never receive this value; such an event + denotes buggy code which you should + investigate. + + + + BZ_PARAM_ERROR + Returned when a parameter to a function call is + out of range or otherwise manifestly incorrect. As with + BZ_SEQUENCE_ERROR, this + denotes a bug in the client code. The distinction between + BZ_PARAM_ERROR and + BZ_SEQUENCE_ERROR is a bit + hazy, but still worth making. + + + + BZ_MEM_ERROR + Returned when a request to allocate memory + failed. Note that the quantity of memory needed to decompress + a stream cannot be determined until the stream's header has + been read. So + BZ2_bzDecompress and + BZ2_bzRead may return + BZ_MEM_ERROR even though some + of the compressed data has been read. The same is not true + for compression; once + BZ2_bzCompressInit or + BZ2_bzWriteOpen have + successfully completed, + BZ_MEM_ERROR cannot + occur. + + + + BZ_DATA_ERROR + Returned when a data integrity error is + detected during decompression. Most importantly, this means + when stored and computed CRCs for the data do not match. This + value is also returned upon detection of any other anomaly in + the compressed data. + + + + BZ_DATA_ERROR_MAGIC + As a special case of + BZ_DATA_ERROR, it is + sometimes useful to know when the compressed stream does not + start with the correct magic bytes ('B' 'Z' + 'h'). + + + + BZ_IO_ERROR + Returned by + BZ2_bzRead and + BZ2_bzWrite when there is an + error reading or writing in the compressed file, and by + BZ2_bzReadOpen and + BZ2_bzWriteOpen for attempts + to use a file for which the error indicator (viz, + ferror(f)) is set. On + receipt of BZ_IO_ERROR, the + caller should consult errno + and/or perror to acquire + operating-system specific information about the + problem. + + + + BZ_UNEXPECTED_EOF + Returned by + BZ2_bzRead when the + compressed file finishes before the logical end of stream is + detected. + + + + BZ_OUTBUFF_FULL + Returned by + BZ2_bzBuffToBuffCompress and + BZ2_bzBuffToBuffDecompress to + indicate that the output data will not fit into the output + buffer provided. + + + + + + + + + +Low-level interface + + + +<computeroutput>BZ2_bzCompressInit</computeroutput> + + +typedef struct { + char *next_in; + unsigned int avail_in; + unsigned int total_in_lo32; + unsigned int total_in_hi32; + + char *next_out; + unsigned int avail_out; + unsigned int total_out_lo32; + unsigned int total_out_hi32; + + void *state; + + void *(*bzalloc)(void *,int,int); + void (*bzfree)(void *,void *); + void *opaque; +} bz_stream; + +int BZ2_bzCompressInit ( bz_stream *strm, + int blockSize100k, + int verbosity, + int workFactor ); + + +Prepares for compression. The +bz_stream structure holds all +data pertaining to the compression activity. A +bz_stream structure should be +allocated and initialised prior to the call. The fields of +bz_stream comprise the entirety +of the user-visible data. state +is a pointer to the private data structures required for +compression. + +Custom memory allocators are supported, via fields +bzalloc, +bzfree, and +opaque. The value +opaque is passed to as the first +argument to all calls to bzalloc +and bzfree, but is otherwise +ignored by the library. The call bzalloc ( +opaque, n, m ) is expected to return a pointer +p to n * +m bytes of memory, and bzfree ( +opaque, p ) should free that memory. + +If you don't want to use a custom memory allocator, set +bzalloc, +bzfree and +opaque to +NULL, and the library will then +use the standard malloc / +free routines. + +Before calling +BZ2_bzCompressInit, fields +bzalloc, +bzfree and +opaque should be filled +appropriately, as just described. Upon return, the internal +state will have been allocated and initialised, and +total_in_lo32, +total_in_hi32, +total_out_lo32 and +total_out_hi32 will have been +set to zero. These four fields are used by the library to inform +the caller of the total amount of data passed into and out of the +library, respectively. You should not try to change them. As of +version 1.0, 64-bit counts are maintained, even on 32-bit +platforms, using the _hi32 +fields to store the upper 32 bits of the count. So, for example, +the total amount of data in is (total_in_hi32 +<< 32) + total_in_lo32. + +Parameter blockSize100k +specifies the block size to be used for compression. It should +be a value between 1 and 9 inclusive, and the actual block size +used is 100000 x this figure. 9 gives the best compression but +takes most memory. + +Parameter verbosity should +be set to a number between 0 and 4 inclusive. 0 is silent, and +greater numbers give increasingly verbose monitoring/debugging +output. If the library has been compiled with +-DBZ_NO_STDIO, no such output +will appear for any verbosity setting. + +Parameter workFactor +controls how the compression phase behaves when presented with +worst case, highly repetitive, input data. If compression runs +into difficulties caused by repetitive data, the library switches +from the standard sorting algorithm to a fallback algorithm. The +fallback is slower than the standard algorithm by perhaps a +factor of three, but always behaves reasonably, no matter how bad +the input. + +Lower values of workFactor +reduce the amount of effort the standard algorithm will expend +before resorting to the fallback. You should set this parameter +carefully; too low, and many inputs will be handled by the +fallback algorithm and so compress rather slowly, too high, and +your average-to-worst case compression times can become very +large. The default value of 30 gives reasonable behaviour over a +wide range of circumstances. + +Allowable values range from 0 to 250 inclusive. 0 is a +special case, equivalent to using the default value of 30. + +Note that the compressed output generated is the same +regardless of whether or not the fallback algorithm is +used. + +Be aware also that this parameter may disappear entirely in +future versions of the library. In principle it should be +possible to devise a good way to automatically choose which +algorithm to use. Such a mechanism would render the parameter +obsolete. + +Possible return values: + + +BZ_CONFIG_ERROR + if the library has been mis-compiled +BZ_PARAM_ERROR + if strm is NULL + or blockSize < 1 or blockSize > 9 + or verbosity < 0 or verbosity > 4 + or workFactor < 0 or workFactor > 250 +BZ_MEM_ERROR + if not enough memory is available +BZ_OK + otherwise + + +Allowable next actions: + + +BZ2_bzCompress + if BZ_OK is returned + no specific action needed in case of error + + + + + + +<computeroutput>BZ2_bzCompress</computeroutput> + + +int BZ2_bzCompress ( bz_stream *strm, int action ); + + +Provides more input and/or output buffer space for the +library. The caller maintains input and output buffers, and +calls BZ2_bzCompress to transfer +data between them. + +Before each call to +BZ2_bzCompress, +next_in should point at the data +to be compressed, and avail_in +should indicate how many bytes the library may read. +BZ2_bzCompress updates +next_in, +avail_in and +total_in to reflect the number +of bytes it has read. + +Similarly, next_out should +point to a buffer in which the compressed data is to be placed, +with avail_out indicating how +much output space is available. +BZ2_bzCompress updates +next_out, +avail_out and +total_out to reflect the number +of bytes output. + +You may provide and remove as little or as much data as you +like on each call of +BZ2_bzCompress. In the limit, +it is acceptable to supply and remove data one byte at a time, +although this would be terribly inefficient. You should always +ensure that at least one byte of output space is available at +each call. + +A second purpose of +BZ2_bzCompress is to request a +change of mode of the compressed stream. + +Conceptually, a compressed stream can be in one of four +states: IDLE, RUNNING, FLUSHING and FINISHING. Before +initialisation +(BZ2_bzCompressInit) and after +termination (BZ2_bzCompressEnd), +a stream is regarded as IDLE. + +Upon initialisation +(BZ2_bzCompressInit), the stream +is placed in the RUNNING state. Subsequent calls to +BZ2_bzCompress should pass +BZ_RUN as the requested action; +other actions are illegal and will result in +BZ_SEQUENCE_ERROR. + +At some point, the calling program will have provided all +the input data it wants to. It will then want to finish up -- in +effect, asking the library to process any data it might have +buffered internally. In this state, +BZ2_bzCompress will no longer +attempt to read data from +next_in, but it will want to +write data to next_out. Because +the output buffer supplied by the user can be arbitrarily small, +the finishing-up operation cannot necessarily be done with a +single call of +BZ2_bzCompress. + +Instead, the calling program passes +BZ_FINISH as an action to +BZ2_bzCompress. This changes +the stream's state to FINISHING. Any remaining input (ie, +next_in[0 .. avail_in-1]) is +compressed and transferred to the output buffer. To do this, +BZ2_bzCompress must be called +repeatedly until all the output has been consumed. At that +point, BZ2_bzCompress returns +BZ_STREAM_END, and the stream's +state is set back to IDLE. +BZ2_bzCompressEnd should then be +called. + +Just to make sure the calling program does not cheat, the +library makes a note of avail_in +at the time of the first call to +BZ2_bzCompress which has +BZ_FINISH as an action (ie, at +the time the program has announced its intention to not supply +any more input). By comparing this value with that of +avail_in over subsequent calls +to BZ2_bzCompress, the library +can detect any attempts to slip in more data to compress. Any +calls for which this is detected will return +BZ_SEQUENCE_ERROR. This +indicates a programming mistake which should be corrected. + +Instead of asking to finish, the calling program may ask +BZ2_bzCompress to take all the +remaining input, compress it and terminate the current +(Burrows-Wheeler) compression block. This could be useful for +error control purposes. The mechanism is analogous to that for +finishing: call BZ2_bzCompress +with an action of BZ_FLUSH, +remove output data, and persist with the +BZ_FLUSH action until the value +BZ_RUN is returned. As with +finishing, BZ2_bzCompress +detects any attempt to provide more input data once the flush has +begun. + +Once the flush is complete, the stream returns to the +normal RUNNING state. + +This all sounds pretty complex, but isn't really. Here's a +table which shows which actions are allowable in each state, what +action will be taken, what the next state is, and what the +non-error return values are. Note that you can't explicitly ask +what state the stream is in, but nor do you need to -- it can be +inferred from the values returned by +BZ2_bzCompress. + + +IDLE/any + Illegal. IDLE state only exists after BZ2_bzCompressEnd or + before BZ2_bzCompressInit. + Return value = BZ_SEQUENCE_ERROR + +RUNNING/BZ_RUN + Compress from next_in to next_out as much as possible. + Next state = RUNNING + Return value = BZ_RUN_OK + +RUNNING/BZ_FLUSH + Remember current value of next_in. Compress from next_in + to next_out as much as possible, but do not accept any more input. + Next state = FLUSHING + Return value = BZ_FLUSH_OK + +RUNNING/BZ_FINISH + Remember current value of next_in. Compress from next_in + to next_out as much as possible, but do not accept any more input. + Next state = FINISHING + Return value = BZ_FINISH_OK + +FLUSHING/BZ_FLUSH + Compress from next_in to next_out as much as possible, + but do not accept any more input. + If all the existing input has been used up and all compressed + output has been removed + Next state = RUNNING; Return value = BZ_RUN_OK + else + Next state = FLUSHING; Return value = BZ_FLUSH_OK + +FLUSHING/other + Illegal. + Return value = BZ_SEQUENCE_ERROR + +FINISHING/BZ_FINISH + Compress from next_in to next_out as much as possible, + but to not accept any more input. + If all the existing input has been used up and all compressed + output has been removed + Next state = IDLE; Return value = BZ_STREAM_END + else + Next state = FINISHING; Return value = BZ_FINISH_OK + +FINISHING/other + Illegal. + Return value = BZ_SEQUENCE_ERROR + + + +That still looks complicated? Well, fair enough. The +usual sequence of calls for compressing a load of data is: + + + + Get started with + BZ2_bzCompressInit. + + Shovel data in and shlurp out its compressed form + using zero or more calls of + BZ2_bzCompress with action = + BZ_RUN. + + Finish up. Repeatedly call + BZ2_bzCompress with action = + BZ_FINISH, copying out the + compressed output, until + BZ_STREAM_END is + returned. Close up and go home. Call + BZ2_bzCompressEnd. + + + +If the data you want to compress fits into your input +buffer all at once, you can skip the calls of +BZ2_bzCompress ( ..., BZ_RUN ) +and just do the BZ2_bzCompress ( ..., BZ_FINISH +) calls. + +All required memory is allocated by +BZ2_bzCompressInit. The +compression library can accept any data at all (obviously). So +you shouldn't get any error return values from the +BZ2_bzCompress calls. If you +do, they will be +BZ_SEQUENCE_ERROR, and indicate +a bug in your programming. + +Trivial other possible return values: + + +BZ_PARAM_ERROR + if strm is NULL, or strm->s is NULL + + + + + + +<computeroutput>BZ2_bzCompressEnd</computeroutput> + + +int BZ2_bzCompressEnd ( bz_stream *strm ); + + +Releases all memory associated with a compression +stream. + +Possible return values: + + +BZ_PARAM_ERROR if strm is NULL or strm->s is NULL +BZ_OK otherwise + + + + + + +<computeroutput>BZ2_bzDecompressInit</computeroutput> + + +int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small ); + + +Prepares for decompression. As with +BZ2_bzCompressInit, a +bz_stream record should be +allocated and initialised before the call. Fields +bzalloc, +bzfree and +opaque should be set if a custom +memory allocator is required, or made +NULL for the normal +malloc / +free routines. Upon return, the +internal state will have been initialised, and +total_in and +total_out will be zero. + +For the meaning of parameter +verbosity, see +BZ2_bzCompressInit. + +If small is nonzero, the +library will use an alternative decompression algorithm which +uses less memory but at the cost of decompressing more slowly +(roughly speaking, half the speed, but the maximum memory +requirement drops to around 2300k). See +for more information on memory management. + +Note that the amount of memory needed to decompress a +stream cannot be determined until the stream's header has been +read, so even if +BZ2_bzDecompressInit succeeds, a +subsequent BZ2_bzDecompress +could fail with +BZ_MEM_ERROR. + +Possible return values: + + +BZ_CONFIG_ERROR + if the library has been mis-compiled +BZ_PARAM_ERROR + if ( small != 0 && small != 1 ) + or (verbosity <; 0 || verbosity > 4) +BZ_MEM_ERROR + if insufficient memory is available + + +Allowable next actions: + + +BZ2_bzDecompress + if BZ_OK was returned + no specific action required in case of error + + + + + + +<computeroutput>BZ2_bzDecompress</computeroutput> + + +int BZ2_bzDecompress ( bz_stream *strm ); + + +Provides more input and/out output buffer space for the +library. The caller maintains input and output buffers, and uses +BZ2_bzDecompress to transfer +data between them. + +Before each call to +BZ2_bzDecompress, +next_in should point at the +compressed data, and avail_in +should indicate how many bytes the library may read. +BZ2_bzDecompress updates +next_in, +avail_in and +total_in to reflect the number +of bytes it has read. + +Similarly, next_out should +point to a buffer in which the uncompressed output is to be +placed, with avail_out +indicating how much output space is available. +BZ2_bzCompress updates +next_out, +avail_out and +total_out to reflect the number +of bytes output. + +You may provide and remove as little or as much data as you +like on each call of +BZ2_bzDecompress. In the limit, +it is acceptable to supply and remove data one byte at a time, +although this would be terribly inefficient. You should always +ensure that at least one byte of output space is available at +each call. + +Use of BZ2_bzDecompress is +simpler than +BZ2_bzCompress. + +You should provide input and remove output as described +above, and repeatedly call +BZ2_bzDecompress until +BZ_STREAM_END is returned. +Appearance of BZ_STREAM_END +denotes that BZ2_bzDecompress +has detected the logical end of the compressed stream. +BZ2_bzDecompress will not +produce BZ_STREAM_END until all +output data has been placed into the output buffer, so once +BZ_STREAM_END appears, you are +guaranteed to have available all the decompressed output, and +BZ2_bzDecompressEnd can safely +be called. + +If case of an error return value, you should call +BZ2_bzDecompressEnd to clean up +and release memory. + +Possible return values: + + +BZ_PARAM_ERROR + if strm is NULL or strm->s is NULL + or strm->avail_out < 1 +BZ_DATA_ERROR + if a data integrity error is detected in the compressed stream +BZ_DATA_ERROR_MAGIC + if the compressed stream doesn't begin with the right magic bytes +BZ_MEM_ERROR + if there wasn't enough memory available +BZ_STREAM_END + if the logical end of the data stream was detected and all + output in has been consumed, eg s-->avail_out > 0 +BZ_OK + otherwise + + +Allowable next actions: + + +BZ2_bzDecompress + if BZ_OK was returned +BZ2_bzDecompressEnd + otherwise + + + + + + +<computeroutput>BZ2_bzDecompressEnd</computeroutput> + + +int BZ2_bzDecompressEnd ( bz_stream *strm ); + + +Releases all memory associated with a decompression +stream. + +Possible return values: + + +BZ_PARAM_ERROR + if strm is NULL or strm->s is NULL +BZ_OK + otherwise + + +Allowable next actions: + + + None. + + + + + + + + +High-level interface + +This interface provides functions for reading and writing +bzip2 format files. First, some +general points. + + + + All of the functions take an + int* first argument, + bzerror. After each call, + bzerror should be consulted + first to determine the outcome of the call. If + bzerror is + BZ_OK, the call completed + successfully, and only then should the return value of the + function (if any) be consulted. If + bzerror is + BZ_IO_ERROR, there was an + error reading/writing the underlying compressed file, and you + should then consult errno / + perror to determine the cause + of the difficulty. bzerror + may also be set to various other values; precise details are + given on a per-function basis below. + + If bzerror indicates + an error (ie, anything except + BZ_OK and + BZ_STREAM_END), you should + immediately call + BZ2_bzReadClose (or + BZ2_bzWriteClose, depending on + whether you are attempting to read or to write) to free up all + resources associated with the stream. Once an error has been + indicated, behaviour of all calls except + BZ2_bzReadClose + (BZ2_bzWriteClose) is + undefined. The implication is that (1) + bzerror should be checked + after each call, and (2) if + bzerror indicates an error, + BZ2_bzReadClose + (BZ2_bzWriteClose) should then + be called to clean up. + + The FILE* arguments + passed to BZ2_bzReadOpen / + BZ2_bzWriteOpen should be set + to binary mode. Most Unix systems will do this by default, but + other platforms, including Windows and Mac, will not. If you + omit this, you may encounter problems when moving code to new + platforms. + + Memory allocation requests are handled by + malloc / + free. At present there is no + facility for user-defined memory allocators in the file I/O + functions (could easily be added, though). + + + + + + +<computeroutput>BZ2_bzReadOpen</computeroutput> + + +typedef void BZFILE; + +BZFILE *BZ2_bzReadOpen( int *bzerror, FILE *f, + int verbosity, int small, + void *unused, int nUnused ); + + +Prepare to read compressed data from file handle +f. +f should refer to a file which +has been opened for reading, and for which the error indicator +(ferror(f))is not set. If +small is 1, the library will try +to decompress using less memory, at the expense of speed. + +For reasons explained below, +BZ2_bzRead will decompress the +nUnused bytes starting at +unused, before starting to read +from the file f. At most +BZ_MAX_UNUSED bytes may be +supplied like this. If this facility is not required, you should +pass NULL and +0 for +unused and +nUnused respectively. + +For the meaning of parameters +small and +verbosity, see +BZ2_bzDecompressInit. + +The amount of memory needed to decompress a file cannot be +determined until the file's header has been read. So it is +possible that BZ2_bzReadOpen +returns BZ_OK but a subsequent +call of BZ2_bzRead will return +BZ_MEM_ERROR. + +Possible assignments to +bzerror: + + +BZ_CONFIG_ERROR + if the library has been mis-compiled +BZ_PARAM_ERROR + if f is NULL + or small is neither 0 nor 1 + or ( unused == NULL && nUnused != 0 ) + or ( unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED) ) +BZ_IO_ERROR + if ferror(f) is nonzero +BZ_MEM_ERROR + if insufficient memory is available +BZ_OK + otherwise. + + +Possible return values: + + +Pointer to an abstract BZFILE + if bzerror is BZ_OK +NULL + otherwise + + +Allowable next actions: + + +BZ2_bzRead + if bzerror is BZ_OK +BZ2_bzClose + otherwise + + + + + + +<computeroutput>BZ2_bzRead</computeroutput> + + +int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len ); + + +Reads up to len +(uncompressed) bytes from the compressed file +b into the buffer +buf. If the read was +successful, bzerror is set to +BZ_OK and the number of bytes +read is returned. If the logical end-of-stream was detected, +bzerror will be set to +BZ_STREAM_END, and the number of +bytes read is returned. All other +bzerror values denote an +error. + +BZ2_bzRead will supply +len bytes, unless the logical +stream end is detected or an error occurs. Because of this, it +is possible to detect the stream end by observing when the number +of bytes returned is less than the number requested. +Nevertheless, this is regarded as inadvisable; you should instead +check bzerror after every call +and watch out for +BZ_STREAM_END. + +Internally, BZ2_bzRead +copies data from the compressed file in chunks of size +BZ_MAX_UNUSED bytes before +decompressing it. If the file contains more bytes than strictly +needed to reach the logical end-of-stream, +BZ2_bzRead will almost certainly +read some of the trailing data before signalling +BZ_SEQUENCE_END. To collect the +read but unused data once +BZ_SEQUENCE_END has appeared, +call BZ2_bzReadGetUnused +immediately before +BZ2_bzReadClose. + +Possible assignments to +bzerror: + + +BZ_PARAM_ERROR + if b is NULL or buf is NULL or len < 0 +BZ_SEQUENCE_ERROR + if b was opened with BZ2_bzWriteOpen +BZ_IO_ERROR + if there is an error reading from the compressed file +BZ_UNEXPECTED_EOF + if the compressed file ended before + the logical end-of-stream was detected +BZ_DATA_ERROR + if a data integrity error was detected in the compressed stream +BZ_DATA_ERROR_MAGIC + if the stream does not begin with the requisite header bytes + (ie, is not a bzip2 data file). This is really + a special case of BZ_DATA_ERROR. +BZ_MEM_ERROR + if insufficient memory was available +BZ_STREAM_END + if the logical end of stream was detected. +BZ_OK + otherwise. + + +Possible return values: + + +number of bytes read + if bzerror is BZ_OK or BZ_STREAM_END +undefined + otherwise + + +Allowable next actions: + + +collect data from buf, then BZ2_bzRead or BZ2_bzReadClose + if bzerror is BZ_OK +collect data from buf, then BZ2_bzReadClose or BZ2_bzReadGetUnused + if bzerror is BZ_SEQUENCE_END +BZ2_bzReadClose + otherwise + + + + + + +<computeroutput>BZ2_bzReadGetUnused</computeroutput> + + +void BZ2_bzReadGetUnused( int* bzerror, BZFILE *b, + void** unused, int* nUnused ); + + +Returns data which was read from the compressed file but +was not needed to get to the logical end-of-stream. +*unused is set to the address of +the data, and *nUnused to the +number of bytes. *nUnused will +be set to a value between 0 and +BZ_MAX_UNUSED inclusive. + +This function may only be called once +BZ2_bzRead has signalled +BZ_STREAM_END but before +BZ2_bzReadClose. + +Possible assignments to +bzerror: + + +BZ_PARAM_ERROR + if b is NULL + or unused is NULL or nUnused is NULL +BZ_SEQUENCE_ERROR + if BZ_STREAM_END has not been signalled + or if b was opened with BZ2_bzWriteOpen +BZ_OK + otherwise + + +Allowable next actions: + + +BZ2_bzReadClose + + + + + + +<computeroutput>BZ2_bzReadClose</computeroutput> + + +void BZ2_bzReadClose ( int *bzerror, BZFILE *b ); + + +Releases all memory pertaining to the compressed file +b. +BZ2_bzReadClose does not call +fclose on the underlying file +handle, so you should do that yourself if appropriate. +BZ2_bzReadClose should be called +to clean up after all error situations. + +Possible assignments to +bzerror: + + +BZ_SEQUENCE_ERROR + if b was opened with BZ2_bzOpenWrite +BZ_OK + otherwise + + +Allowable next actions: + + +none + + + + + + +<computeroutput>BZ2_bzWriteOpen</computeroutput> + + +BZFILE *BZ2_bzWriteOpen( int *bzerror, FILE *f, + int blockSize100k, int verbosity, + int workFactor ); + + +Prepare to write compressed data to file handle +f. +f should refer to a file which +has been opened for writing, and for which the error indicator +(ferror(f))is not set. + +For the meaning of parameters +blockSize100k, +verbosity and +workFactor, see +BZ2_bzCompressInit. + +All required memory is allocated at this stage, so if the +call completes successfully, +BZ_MEM_ERROR cannot be signalled +by a subsequent call to +BZ2_bzWrite. + +Possible assignments to +bzerror: + + +BZ_CONFIG_ERROR + if the library has been mis-compiled +BZ_PARAM_ERROR + if f is NULL + or blockSize100k < 1 or blockSize100k > 9 +BZ_IO_ERROR + if ferror(f) is nonzero +BZ_MEM_ERROR + if insufficient memory is available +BZ_OK + otherwise + + +Possible return values: + + +Pointer to an abstract BZFILE + if bzerror is BZ_OK +NULL + otherwise + + +Allowable next actions: + + +BZ2_bzWrite + if bzerror is BZ_OK + (you could go directly to BZ2_bzWriteClose, but this would be pretty pointless) +BZ2_bzWriteClose + otherwise + + + + + + +<computeroutput>BZ2_bzWrite</computeroutput> + + +void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len ); + + +Absorbs len bytes from the +buffer buf, eventually to be +compressed and written to the file. + +Possible assignments to +bzerror: + + +BZ_PARAM_ERROR + if b is NULL or buf is NULL or len < 0 +BZ_SEQUENCE_ERROR + if b was opened with BZ2_bzReadOpen +BZ_IO_ERROR + if there is an error writing the compressed file. +BZ_OK + otherwise + + + + + + +<computeroutput>BZ2_bzWriteClose</computeroutput> + + +void BZ2_bzWriteClose( int *bzerror, BZFILE* f, + int abandon, + unsigned int* nbytes_in, + unsigned int* nbytes_out ); + +void BZ2_bzWriteClose64( int *bzerror, BZFILE* f, + int abandon, + unsigned int* nbytes_in_lo32, + unsigned int* nbytes_in_hi32, + unsigned int* nbytes_out_lo32, + unsigned int* nbytes_out_hi32 ); + + +Compresses and flushes to the compressed file all data so +far supplied by BZ2_bzWrite. +The logical end-of-stream markers are also written, so subsequent +calls to BZ2_bzWrite are +illegal. All memory associated with the compressed file +b is released. +fflush is called on the +compressed file, but it is not +fclose'd. + +If BZ2_bzWriteClose is +called to clean up after an error, the only action is to release +the memory. The library records the error codes issued by +previous calls, so this situation will be detected automatically. +There is no attempt to complete the compression operation, nor to +fflush the compressed file. You +can force this behaviour to happen even in the case of no error, +by passing a nonzero value to +abandon. + +If nbytes_in is non-null, +*nbytes_in will be set to be the +total volume of uncompressed data handled. Similarly, +nbytes_out will be set to the +total volume of compressed data written. For compatibility with +older versions of the library, +BZ2_bzWriteClose only yields the +lower 32 bits of these counts. Use +BZ2_bzWriteClose64 if you want +the full 64 bit counts. These two functions are otherwise +absolutely identical. + +Possible assignments to +bzerror: + + +BZ_SEQUENCE_ERROR + if b was opened with BZ2_bzReadOpen +BZ_IO_ERROR + if there is an error writing the compressed file +BZ_OK + otherwise + + + + + + +Handling embedded compressed data streams + +The high-level library facilitates use of +bzip2 data streams which form +some part of a surrounding, larger data stream. + + + + For writing, the library takes an open file handle, + writes compressed data to it, + fflushes it but does not + fclose it. The calling + application can write its own data before and after the + compressed data stream, using that same file handle. + + Reading is more complex, and the facilities are not as + general as they could be since generality is hard to reconcile + with efficiency. BZ2_bzRead + reads from the compressed file in blocks of size + BZ_MAX_UNUSED bytes, and in + doing so probably will overshoot the logical end of compressed + stream. To recover this data once decompression has ended, + call BZ2_bzReadGetUnused after + the last call of BZ2_bzRead + (the one returning + BZ_STREAM_END) but before + calling + BZ2_bzReadClose. + + + +This mechanism makes it easy to decompress multiple +bzip2 streams placed end-to-end. +As the end of one stream, when +BZ2_bzRead returns +BZ_STREAM_END, call +BZ2_bzReadGetUnused to collect +the unused data (copy it into your own buffer somewhere). That +data forms the start of the next compressed stream. To start +uncompressing that next stream, call +BZ2_bzReadOpen again, feeding in +the unused data via the unused / +nUnused parameters. Keep doing +this until BZ_STREAM_END return +coincides with the physical end of file +(feof(f)). In this situation +BZ2_bzReadGetUnused will of +course return no data. + +This should give some feel for how the high-level interface +can be used. If you require extra flexibility, you'll have to +bite the bullet and get to grips with the low-level +interface. + + + + + +Standard file-reading/writing code + +Here's how you'd write data to a compressed file: + + +FILE* f; +BZFILE* b; +int nBuf; +char buf[ /* whatever size you like */ ]; +int bzerror; +int nWritten; + +f = fopen ( "myfile.bz2", "w" ); +if ( !f ) { + /* handle error */ +} +b = BZ2_bzWriteOpen( &bzerror, f, 9 ); +if (bzerror != BZ_OK) { + BZ2_bzWriteClose ( b ); + /* handle error */ +} + +while ( /* condition */ ) { + /* get data to write into buf, and set nBuf appropriately */ + nWritten = BZ2_bzWrite ( &bzerror, b, buf, nBuf ); + if (bzerror == BZ_IO_ERROR) { + BZ2_bzWriteClose ( &bzerror, b ); + /* handle error */ + } +} + +BZ2_bzWriteClose( &bzerror, b ); +if (bzerror == BZ_IO_ERROR) { + /* handle error */ +} + + +And to read from a compressed file: + + +FILE* f; +BZFILE* b; +int nBuf; +char buf[ /* whatever size you like */ ]; +int bzerror; +int nWritten; + +f = fopen ( "myfile.bz2", "r" ); +if ( !f ) { + /* handle error */ +} +b = BZ2_bzReadOpen ( &bzerror, f, 0, NULL, 0 ); +if ( bzerror != BZ_OK ) { + BZ2_bzReadClose ( &bzerror, b ); + /* handle error */ +} + +bzerror = BZ_OK; +while ( bzerror == BZ_OK && /* arbitrary other conditions */) { + nBuf = BZ2_bzRead ( &bzerror, b, buf, /* size of buf */ ); + if ( bzerror == BZ_OK ) { + /* do something with buf[0 .. nBuf-1] */ + } +} +if ( bzerror != BZ_STREAM_END ) { + BZ2_bzReadClose ( &bzerror, b ); + /* handle error */ +} else { + BZ2_bzReadClose ( &bzerror, b ); +} + + + + + + + + +Utility functions + + + +<computeroutput>BZ2_bzBuffToBuffCompress</computeroutput> + + +int BZ2_bzBuffToBuffCompress( char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int blockSize100k, + int verbosity, + int workFactor ); + + +Attempts to compress the data in source[0 +.. sourceLen-1] into the destination buffer, +dest[0 .. *destLen-1]. If the +destination buffer is big enough, +*destLen is set to the size of +the compressed data, and BZ_OK +is returned. If the compressed data won't fit, +*destLen is unchanged, and +BZ_OUTBUFF_FULL is +returned. + +Compression in this manner is a one-shot event, done with a +single call to this function. The resulting compressed data is a +complete bzip2 format data +stream. There is no mechanism for making additional calls to +provide extra input data. If you want that kind of mechanism, +use the low-level interface. + +For the meaning of parameters +blockSize100k, +verbosity and +workFactor, see +BZ2_bzCompressInit. + +To guarantee that the compressed data will fit in its +buffer, allocate an output buffer of size 1% larger than the +uncompressed data, plus six hundred extra bytes. + +BZ2_bzBuffToBuffDecompress +will not write data at or beyond +dest[*destLen], even in case of +buffer overflow. + +Possible return values: + + +BZ_CONFIG_ERROR + if the library has been mis-compiled +BZ_PARAM_ERROR + if dest is NULL or destLen is NULL + or blockSize100k < 1 or blockSize100k > 9 + or verbosity < 0 or verbosity > 4 + or workFactor < 0 or workFactor > 250 +BZ_MEM_ERROR + if insufficient memory is available +BZ_OUTBUFF_FULL + if the size of the compressed data exceeds *destLen +BZ_OK + otherwise + + + + + + +<computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput> + + +int BZ2_bzBuffToBuffDecompress( char* dest, + unsigned int* destLen, + char* source, + unsigned int sourceLen, + int small, + int verbosity ); + + +Attempts to decompress the data in source[0 +.. sourceLen-1] into the destination buffer, +dest[0 .. *destLen-1]. If the +destination buffer is big enough, +*destLen is set to the size of +the uncompressed data, and BZ_OK +is returned. If the compressed data won't fit, +*destLen is unchanged, and +BZ_OUTBUFF_FULL is +returned. + +source is assumed to hold +a complete bzip2 format data +stream. +BZ2_bzBuffToBuffDecompress tries +to decompress the entirety of the stream into the output +buffer. + +For the meaning of parameters +small and +verbosity, see +BZ2_bzDecompressInit. + +Because the compression ratio of the compressed data cannot +be known in advance, there is no easy way to guarantee that the +output buffer will be big enough. You may of course make +arrangements in your code to record the size of the uncompressed +data, but such a mechanism is beyond the scope of this +library. + +BZ2_bzBuffToBuffDecompress +will not write data at or beyond +dest[*destLen], even in case of +buffer overflow. + +Possible return values: + + +BZ_CONFIG_ERROR + if the library has been mis-compiled +BZ_PARAM_ERROR + if dest is NULL or destLen is NULL + or small != 0 && small != 1 + or verbosity < 0 or verbosity > 4 +BZ_MEM_ERROR + if insufficient memory is available +BZ_OUTBUFF_FULL + if the size of the compressed data exceeds *destLen +BZ_DATA_ERROR + if a data integrity error was detected in the compressed data +BZ_DATA_ERROR_MAGIC + if the compressed data doesn't begin with the right magic bytes +BZ_UNEXPECTED_EOF + if the compressed data ends unexpectedly +BZ_OK + otherwise + + + + + + + + +<computeroutput>zlib</computeroutput> compatibility functions + +Yoshioka Tsuneo has contributed some functions to give +better zlib compatibility. +These functions are BZ2_bzopen, +BZ2_bzread, +BZ2_bzwrite, +BZ2_bzflush, +BZ2_bzclose, +BZ2_bzerror and +BZ2_bzlibVersion. These +functions are not (yet) officially part of the library. If they +break, you get to keep all the pieces. Nevertheless, I think +they work ok. + + +typedef void BZFILE; + +const char * BZ2_bzlibVersion ( void ); + + +Returns a string indicating the library version. + + +BZFILE * BZ2_bzopen ( const char *path, const char *mode ); +BZFILE * BZ2_bzdopen ( int fd, const char *mode ); + + +Opens a .bz2 file for +reading or writing, using either its name or a pre-existing file +descriptor. Analogous to fopen +and fdopen. + + +int BZ2_bzread ( BZFILE* b, void* buf, int len ); +int BZ2_bzwrite ( BZFILE* b, void* buf, int len ); + + +Reads/writes data from/to a previously opened +BZFILE. Analogous to +fread and +fwrite. + + +int BZ2_bzflush ( BZFILE* b ); +void BZ2_bzclose ( BZFILE* b ); + + +Flushes/closes a BZFILE. +BZ2_bzflush doesn't actually do +anything. Analogous to fflush +and fclose. + + +const char * BZ2_bzerror ( BZFILE *b, int *errnum ) + + +Returns a string describing the more recent error status of +b, and also sets +*errnum to its numerical +value. + + + + + +Using the library in a <computeroutput>stdio</computeroutput>-free environment + + + +Getting rid of <computeroutput>stdio</computeroutput> + +In a deeply embedded application, you might want to use +just the memory-to-memory functions. You can do this +conveniently by compiling the library with preprocessor symbol +BZ_NO_STDIO defined. Doing this +gives you a library containing only the following eight +functions: + +BZ2_bzCompressInit, +BZ2_bzCompress, +BZ2_bzCompressEnd +BZ2_bzDecompressInit, +BZ2_bzDecompress, +BZ2_bzDecompressEnd +BZ2_bzBuffToBuffCompress, +BZ2_bzBuffToBuffDecompress + +When compiled like this, all functions will ignore +verbosity settings. + + + + + +Critical error handling + +libbzip2 contains a number +of internal assertion checks which should, needless to say, never +be activated. Nevertheless, if an assertion should fail, +behaviour depends on whether or not the library was compiled with +BZ_NO_STDIO set. + +For a normal compile, an assertion failure yields the +message: + +
+bzip2/libbzip2: internal error number N. +This is a bug in bzip2/libbzip2, &bz-version; of &bz-date;. +Please report it to me at: &bz-email;. If this happened +when you were using some program which uses libbzip2 as a +component, you should also report this bug to the author(s) +of that program. Please make an effort to report this bug; +timely and accurate bug reports eventually lead to higher +quality software. Thanks. Julian Seward, &bz-date;. +
+ +where N is some error code +number. If N == 1007, it also +prints some extra text advising the reader that unreliable memory +is often associated with internal error 1007. (This is a +frequently-observed-phenomenon with versions 1.0.0/1.0.1). + +exit(3) is then +called. + +For a stdio-free library, +assertion failures result in a call to a function declared +as: + + +extern void bz_internal_error ( int errcode ); + + +The relevant code is passed as a parameter. You should +supply such a function. + +In either case, once an assertion failure has occurred, any +bz_stream records involved can +be regarded as invalid. You should not attempt to resume normal +operation with them. + +You may, of course, change critical error handling to suit +your needs. As I said above, critical errors indicate bugs in +the library and should not occur. All "normal" error situations +are indicated via error return codes from functions, and can be +recovered from. + +
+ +
+ + + +Making a Windows DLL + +Everything related to Windows has been contributed by +Yoshioka Tsuneo +(tsuneo@rr.iij4u.or.jp), so +you should send your queries to him (but perhaps Cc: me, +&bz-email;). + +My vague understanding of what to do is: using Visual C++ +5.0, open the project file +libbz2.dsp, and build. That's +all. + +If you can't open the project file for some reason, make a +new one, naming these files: +blocksort.c, +bzlib.c, +compress.c, +crctable.c, +decompress.c, +huffman.c, +randtable.c and +libbz2.def. You will also need +to name the header files bzlib.h +and bzlib_private.h. + +If you don't use VC++, you may need to define the +proprocessor symbol +_WIN32. + +Finally, dlltest.c is a +sample program using the DLL. It has a project file, +dlltest.dsp. + +If you just want a makefile for Visual C, have a look at +makefile.msc. + +Be aware that if you compile +bzip2 itself on Win32, you must +set BZ_UNIX to 0 and +BZ_LCCWIN32 to 1, in the file +bzip2.c, before compiling. +Otherwise the resulting binary won't work correctly. + +I haven't tried any of this stuff myself, but it all looks +plausible. + + + +
+ + + + +Miscellanea + +These are just some random thoughts of mine. Your mileage +may vary. + + + +Limitations of the compressed file format + +bzip2-1.0.X, +0.9.5 and +0.9.0 use exactly the same file +format as the original version, +bzip2-0.1. This decision was +made in the interests of stability. Creating yet another +incompatible compressed file format would create further +confusion and disruption for users. + +Nevertheless, this is not a painless decision. Development +work since the release of +bzip2-0.1 in August 1997 has +shown complexities in the file format which slow down +decompression and, in retrospect, are unnecessary. These +are: + + + + The run-length encoder, which is the first of the + compression transformations, is entirely irrelevant. The + original purpose was to protect the sorting algorithm from the + very worst case input: a string of repeated symbols. But + algorithm steps Q6a and Q6b in the original Burrows-Wheeler + technical report (SRC-124) show how repeats can be handled + without difficulty in block sorting. + + The randomisation mechanism doesn't really need to be + there. Udi Manber and Gene Myers published a suffix array + construction algorithm a few years back, which can be employed + to sort any block, no matter how repetitive, in O(N log N) + time. Subsequent work by Kunihiko Sadakane has produced a + derivative O(N (log N)^2) algorithm which usually outperforms + the Manber-Myers algorithm. + + I could have changed to Sadakane's algorithm, but I find + it to be slower than bzip2's + existing algorithm for most inputs, and the randomisation + mechanism protects adequately against bad cases. I didn't + think it was a good tradeoff to make. Partly this is due to + the fact that I was not flooded with email complaints about + bzip2-0.1's performance on + repetitive data, so perhaps it isn't a problem for real + inputs. + + Probably the best long-term solution, and the one I have + incorporated into 0.9.5 and above, is to use the existing + sorting algorithm initially, and fall back to a O(N (log N)^2) + algorithm if the standard algorithm gets into + difficulties. + + The compressed file format was never designed to be + handled by a library, and I have had to jump though some hoops + to produce an efficient implementation of decompression. It's + a bit hairy. Try passing + decompress.c through the C + preprocessor and you'll see what I mean. Much of this + complexity could have been avoided if the compressed size of + each block of data was recorded in the data stream. + + An Adler-32 checksum, rather than a CRC32 checksum, + would be faster to compute. + + + +It would be fair to say that the +bzip2 format was frozen before I +properly and fully understood the performance consequences of +doing so. + +Improvements which I was able to incorporate into 0.9.0, +despite using the same file format, are: + + + + Single array implementation of the inverse BWT. This + significantly speeds up decompression, presumably because it + reduces the number of cache misses. + + Faster inverse MTF transform for large MTF values. + The new implementation is based on the notion of sliding blocks + of values. + + bzip2-0.9.0 now reads + and writes files with fread + and fwrite; version 0.1 used + putc and + getc. Duh! Well, you live + and learn. + + + +Further ahead, it would be nice to be able to do random +access into files. This will require some careful design of +compressed file formats. + + + + + +Portability issues + +After some consideration, I have decided not to use GNU +autoconf to configure 0.9.5 or +1.0. + +autoconf, admirable and +wonderful though it is, mainly assists with portability problems +between Unix-like platforms. But +bzip2 doesn't have much in the +way of portability problems on Unix; most of the difficulties +appear when porting to the Mac, or to Microsoft's operating +systems. autoconf doesn't help +in those cases, and brings in a whole load of new +complexity. + +Most people should be able to compile the library and +program under Unix straight out-of-the-box, so to speak, +especially if you have a version of GNU C available. + +There are a couple of +__inline__ directives in the +code. GNU C (gcc) should be +able to handle them. If you're not using GNU C, your C compiler +shouldn't see them at all. If your compiler does, for some +reason, see them and doesn't like them, just +#define +__inline__ to be +/* */. One easy way to do this +is to compile with the flag +-D__inline__=, which should be +understood by most Unix compilers. + +If you still have difficulties, try compiling with the +macro BZ_STRICT_ANSI defined. +This should enable you to build the library in a strictly ANSI +compliant environment. Building the program itself like this is +dangerous and not supported, since you remove +bzip2's checks against +compressing directories, symbolic links, devices, and other +not-really-a-file entities. This could cause filesystem +corruption! + +One other thing: if you create a +bzip2 binary for public distribution, +please consider linking it statically (gcc +-static). This avoids all sorts of library-version +issues that others may encounter later on. + +If you build bzip2 on +Win32, you must set BZ_UNIX to 0 +and BZ_LCCWIN32 to 1, in the +file bzip2.c, before compiling. +Otherwise the resulting binary won't work correctly. + + + + + +Reporting bugs + +I tried pretty hard to make sure +bzip2 is bug free, both by +design and by testing. Hopefully you'll never need to read this +section for real. + +Nevertheless, if bzip2 dies +with a segmentation fault, a bus error or an internal assertion +failure, it will ask you to email me a bug report. Experience from +years of feedback of bzip2 users indicates that almost all these +problems can be traced to either compiler bugs or hardware +problems. + + + + Recompile the program with no optimisation, and + see if it works. And/or try a different compiler. I heard all + sorts of stories about various flavours of GNU C (and other + compilers) generating bad code for + bzip2, and I've run across two + such examples myself. + + 2.7.X versions of GNU C are known to generate bad code + from time to time, at high optimisation levels. If you get + problems, try using the flags + -O2 + -fomit-frame-pointer + -fno-strength-reduce. You + should specifically not use + -funroll-loops. + + You may notice that the Makefile runs six tests as part + of the build process. If the program passes all of these, it's + a pretty good (but not 100%) indication that the compiler has + done its job correctly. + + If bzip2 + crashes randomly, and the crashes are not repeatable, you may + have a flaky memory subsystem. + bzip2 really hammers your + memory hierarchy, and if it's a bit marginal, you may get these + problems. Ditto if your disk or I/O subsystem is slowly + failing. Yup, this really does happen. + + Try using a different machine of the same type, and see + if you can repeat the problem. + + This isn't really a bug, but ... If + bzip2 tells you your file is + corrupted on decompression, and you obtained the file via FTP, + there is a possibility that you forgot to tell FTP to do a + binary mode transfer. That absolutely will cause the file to + be non-decompressible. You'll have to transfer it + again. + + + +If you've incorporated +libbzip2 into your own program +and are getting problems, please, please, please, check that the +parameters you are passing in calls to the library, are correct, +and in accordance with what the documentation says is allowable. +I have tried to make the library robust against such problems, +but I'm sure I haven't succeeded. + +Finally, if the above comments don't help, you'll have to +send me a bug report. Now, it's just amazing how many people +will send me a bug report saying something like: + + +bzip2 crashed with segmentation fault on my machine + + +and absolutely nothing else. Needless to say, a such a +report is totally, utterly, completely and +comprehensively 100% useless; a waste of your time, my time, and +net bandwidth. With no details at all, there's no way +I can possibly begin to figure out what the problem is. + +The rules of the game are: facts, facts, facts. Don't omit +them because "oh, they won't be relevant". At the bare +minimum: + + +Machine type. Operating system version. +Exact version of bzip2 (do bzip2 -V). +Exact version of the compiler used. +Flags passed to the compiler. + + +However, the most important single thing that will help me +is the file that you were trying to compress or decompress at the +time the problem happened. Without that, my ability to do +anything more than speculate about the cause, is limited. + + + + + +Did you get the right package? + +bzip2 is a resource hog. +It soaks up large amounts of CPU cycles and memory. Also, it +gives very large latencies. In the worst case, you can feed many +megabytes of uncompressed data into the library before getting +any compressed output, so this probably rules out applications +requiring interactive behaviour. + +These aren't faults of my implementation, I hope, but more +an intrinsic property of the Burrows-Wheeler transform +(unfortunately). Maybe this isn't what you want. + +If you want a compressor and/or library which is faster, +uses less memory but gets pretty good compression, and has +minimal latency, consider Jean-loup Gailly's and Mark Adler's +work, zlib-1.2.1 and +gzip-1.2.4. Look for them at +http://www.zlib.org and +http://www.gzip.org +respectively. + +For something faster and lighter still, you might try Markus F +X J Oberhumer's LZO real-time +compression/decompression library, at +http://www.oberhumer.com/opensource. + + + + + + +Further Reading + +bzip2 is not research +work, in the sense that it doesn't present any new ideas. +Rather, it's an engineering exercise based on existing +ideas. + +Four documents describe essentially all the ideas behind +bzip2: + +Michael Burrows and D. J. Wheeler: + "A block-sorting lossless data compression algorithm" + 10th May 1994. + Digital SRC Research Report 124. + ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz + If you have trouble finding it, try searching at the + New Zealand Digital Library, http://www.nzdl.org. + +Daniel S. Hirschberg and Debra A. LeLewer + "Efficient Decoding of Prefix Codes" + Communications of the ACM, April 1990, Vol 33, Number 4. + You might be able to get an electronic copy of this + from the ACM Digital Library. + +David J. Wheeler + Program bred3.c and accompanying document bred3.ps. + This contains the idea behind the multi-table Huffman coding scheme. + ftp://ftp.cl.cam.ac.uk/users/djw3/ + +Jon L. Bentley and Robert Sedgewick + "Fast Algorithms for Sorting and Searching Strings" + Available from Sedgewick's web page, + www.cs.princeton.edu/~rs + + +The following paper gives valuable additional insights into +the algorithm, but is not immediately the basis of any code used +in bzip2. + +Peter Fenwick: + Block Sorting Text Compression + Proceedings of the 19th Australasian Computer Science Conference, + Melbourne, Australia. Jan 31 - Feb 2, 1996. + ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps + +Kunihiko Sadakane's sorting algorithm, mentioned above, is +available from: + +http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz + + +The Manber-Myers suffix array construction algorithm is +described in a paper available from: + +http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps + + +Finally, the following papers document some +investigations I made into the performance of sorting +and decompression algorithms: + +Julian Seward + On the Performance of BWT Sorting Algorithms + Proceedings of the IEEE Data Compression Conference 2000 + Snowbird, Utah. 28-30 March 2000. + +Julian Seward + Space-time Tradeoffs in the Inverse B-W Transform + Proceedings of the IEEE Data Compression Conference 2001 + Snowbird, Utah. 27-29 March 2001. + + + + + + +
diff --git a/dist/bzip2/mk251.c b/dist/bzip2/mk251.c new file mode 100644 index 000000000..39e94c057 --- /dev/null +++ b/dist/bzip2/mk251.c @@ -0,0 +1,31 @@ + +/* Spew out a long sequence of the byte 251. When fed to bzip2 + versions 1.0.0 or 1.0.1, causes it to die with internal error + 1007 in blocksort.c. This assertion misses an extremely rare + case, which is fixed in this version (1.0.2) and above. +*/ + +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + +#include + +int main () +{ + int i; + for (i = 0; i < 48500000 ; i++) + putchar(251); + return 0; +} diff --git a/commands/bzip2/randtable.c b/dist/bzip2/randtable.c similarity index 60% rename from commands/bzip2/randtable.c rename to dist/bzip2/randtable.c index 940462d69..068b76367 100644 --- a/commands/bzip2/randtable.c +++ b/dist/bzip2/randtable.c @@ -4,59 +4,19 @@ /*--- randtable.c ---*/ /*-------------------------------------------------------------*/ -/*-- - This file is a part of bzip2 and/or libbzip2, a program and - library for lossless, block-sorting data compression. +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. - Copyright (C) 1996-2005 Julian R Seward. All rights reserved. + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. 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. - - 3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - - 4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Julian Seward, Cambridge, UK. - jseward@bzip.org - bzip2/libbzip2 version 1.0 of 21 March 2000 - - This program is based on (at least) the work of: - Mike Burrows - David Wheeler - Peter Fenwick - Alistair Moffat - Radford Neal - Ian H. Witten - Robert Sedgewick - Jon L. Bentley - - For more information on these sources, see the manual. ---*/ + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ #include "bzlib_private.h" diff --git a/commands/bzip2/sample1.bz2 b/dist/bzip2/sample1.bz2 similarity index 100% rename from commands/bzip2/sample1.bz2 rename to dist/bzip2/sample1.bz2 diff --git a/dist/bzip2/sample1.rb2 b/dist/bzip2/sample1.rb2 new file mode 100644 index 0000000000000000000000000000000000000000..18dea60043b692c86b095c06123809f10430fd03 GIT binary patch literal 32348 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 T9V3)BU;ZxSig2MJnd56pDt(C> literal 0 HcmV?d00001 diff --git a/commands/bzip2/sample1.ref b/dist/bzip2/sample1.ref similarity index 100% rename from commands/bzip2/sample1.ref rename to dist/bzip2/sample1.ref diff --git a/dist/bzip2/sample1.tst b/dist/bzip2/sample1.tst new file mode 100644 index 0000000000000000000000000000000000000000..a56e52b77f90faf637e2c1e87ee60eaffa4c5056 GIT binary patch literal 98696 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 Z(Zy#cUu01QmiqtNR=obJ?T`8Y`~PZf1y}$8 literal 0 HcmV?d00001 diff --git a/commands/bzip2/sample2.bz2 b/dist/bzip2/sample2.bz2 similarity index 100% rename from commands/bzip2/sample2.bz2 rename to dist/bzip2/sample2.bz2 diff --git a/dist/bzip2/sample2.rb2 b/dist/bzip2/sample2.rb2 new file mode 100644 index 0000000000000000000000000000000000000000..d5a6160ba20903121617cb8bf4fbdb71ba1ca1e7 GIT binary patch literal 73732 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
gnIFfvi(O?e$J0;1+%xLGi@k}ivMjcJIU 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
    oa|c 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 literal 0 HcmV?d00001 diff --git a/commands/bzip2/sample3.bz2 b/dist/bzip2/sample3.bz2 similarity index 100% rename from commands/bzip2/sample3.bz2 rename to dist/bzip2/sample3.bz2 diff --git a/dist/bzip2/sample3.rb2 b/dist/bzip2/sample3.rb2 new file mode 100644 index 0000000000000000000000000000000000000000..d90cff9208fe3f15eebd888e978f639248752126 GIT binary patch literal 235 zcmVGUXb&m7Q)GuvY4W7DBi0bybO}v|xtYG6|~5=Sd|%uMPkN zKoB6Yo`4Dni@uED{RR!AUXhJ4Aj_`^@cN^s$CJ95fR!nP>-4u_Z0JO2Gf1zI+FWf9 lNldh8X=%unLauTcBrdZ|@<43xY-0cb literal 0 HcmV?d00001 diff --git a/commands/bzip2/sample3.ref b/dist/bzip2/sample3.ref similarity index 100% rename from commands/bzip2/sample3.ref rename to dist/bzip2/sample3.ref diff --git a/dist/bzip2/sample3.tst b/dist/bzip2/sample3.tst new file mode 100644 index 000000000..775a2f68e --- /dev/null +++ b/dist/bzip2/sample3.tst @@ -0,0 +1,30007 @@ +This file is exceedingly boring. If you find yourself +reading it, please (1) take it from me that you can safely +guess what the rest of the file says, and (2) seek professional +help. + +ps. there are no further sarcastic remarks in this file. + +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh +ugh diff --git a/commands/bzip2/spewG.c b/dist/bzip2/spewG.c similarity index 68% rename from commands/bzip2/spewG.c rename to dist/bzip2/spewG.c index 7934e7658..5892b92c3 100644 --- a/commands/bzip2/spewG.c +++ b/dist/bzip2/spewG.c @@ -9,6 +9,21 @@ (but is otherwise harmless). */ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + #define _FILE_OFFSET_BITS 64 #include diff --git a/commands/bzip2/unzcrash.c b/dist/bzip2/unzcrash.c similarity index 83% rename from commands/bzip2/unzcrash.c rename to dist/bzip2/unzcrash.c index f0f17fcca..a1b75463a 100644 --- a/commands/bzip2/unzcrash.c +++ b/dist/bzip2/unzcrash.c @@ -8,11 +8,26 @@ This should not cause any invalid memory accesses. If it does, I want to know about it! - p.s. As you can see from the above description, the process is + PS. As you can see from the above description, the process is incredibly slow. A file of size eg 5KB will cause it to run for many hours. */ +/* ------------------------------------------------------------------ + This file is part of bzip2/libbzip2, a program and library for + lossless, block-sorting data compression. + + bzip2/libbzip2 version 1.0.5 of 10 December 2007 + Copyright (C) 1996-2007 Julian Seward + + Please read the WARNING, DISCLAIMER and PATENTS sections in the + README file. + + This program is released under the terms of the license contained + in the file LICENSE. + ------------------------------------------------------------------ */ + + #include #include #include "bzlib.h" diff --git a/dist/bzip2/words0 b/dist/bzip2/words0 new file mode 100644 index 000000000..fbf442ad6 --- /dev/null +++ b/dist/bzip2/words0 @@ -0,0 +1,9 @@ + +If compilation produces errors, or a large number of warnings, +please read README.COMPILATION.PROBLEMS -- you might be able to +adjust the flags in this Makefile to improve matters. + +Also in README.COMPILATION.PROBLEMS are some hints that may help +if your build produces an executable which is unable to correctly +handle so-called 'large files' -- files of size 2GB or more. + diff --git a/commands/bzip2/words1 b/dist/bzip2/words1 similarity index 100% rename from commands/bzip2/words1 rename to dist/bzip2/words1 diff --git a/commands/bzip2/words2 b/dist/bzip2/words2 similarity index 69% rename from commands/bzip2/words2 rename to dist/bzip2/words2 index 203ee39c4..caddcf422 100644 --- a/commands/bzip2/words2 +++ b/dist/bzip2/words2 @@ -1,5 +1,5 @@ Checking test results. If any of the four "cmp"s which follow report any differences, something is wrong. If you can't easily -figure out what, please let me know (jseward@acm.org). +figure out what, please let me know (jseward@bzip.org). diff --git a/commands/bzip2/words3 b/dist/bzip2/words3 similarity index 80% rename from commands/bzip2/words3 rename to dist/bzip2/words3 index 7a6b46244..697266990 100644 --- a/commands/bzip2/words3 +++ b/dist/bzip2/words3 @@ -1,22 +1,29 @@ -If you got this far and the "cmp"s didn't complain, it looks +If you got this far and the 'cmp's didn't complain, it looks like you're in business. -To install in /usr/bin, /usr/lib, /usr/man and /usr/include, type +To install in /usr/local/bin, /usr/local/lib, /usr/local/man and +/usr/local/include, type + make install + To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type + make install PREFIX=/xxx/yyy + If you are (justifiably) paranoid and want to see what 'make install' is going to do, you can first do + make -n install or make -n install PREFIX=/xxx/yyy respectively. + The -n instructs make to show the commands it would execute, but not actually execute them. Instructions for use are in the preformatted manual page, in the file bzip2.txt. For more detailed documentation, read the full manual. It is available in Postscript form (manual.ps), PDF form (manual.pdf), -and HTML form (manual_toc.html). +and HTML form (manual.html). You can also do "bzip2 --help" to see some helpful information. "bzip2 -L" displays the software license. diff --git a/commands/bzip2/xmlproc.sh b/dist/bzip2/xmlproc.sh similarity index 79% rename from commands/bzip2/xmlproc.sh rename to dist/bzip2/xmlproc.sh index 6fe4d5748..53841773d 100755 --- a/commands/bzip2/xmlproc.sh +++ b/dist/bzip2/xmlproc.sh @@ -1,5 +1,20 @@ #!/bin/bash -# see the README in this directory for usage etc. +# see the README file for usage etc. +# +# ------------------------------------------------------------------ +# This file is part of bzip2/libbzip2, a program and library for +# lossless, block-sorting data compression. +# +# bzip2/libbzip2 version 1.0.5 of 10 December 2007 +# Copyright (C) 1996-2007 Julian Seward +# +# Please read the WARNING, DISCLAIMER and PATENTS sections in the +# README file. +# +# This program is released under the terms of the license contained +# in the file LICENSE. +# ---------------------------------------------------------------- + usage() { echo ''; @@ -45,7 +60,7 @@ export XML_CATALOG_FILES=/etc/xml/catalog # post-processing tidy up cleanup() { - echo "Cleaning up: # $@" + echo "Cleaning up: $@" while [ $# != 0 ] do arg=$1; shift; diff --git a/etc/mtree/minix.tree b/etc/mtree/minix.tree index b8a650273..f8f28a683 100644 --- a/etc/mtree/minix.tree +++ b/etc/mtree/minix.tree @@ -74,6 +74,8 @@ 755 root operator /usr/run 755 root operator /usr/share 755 root operator /usr/share/doc +755 root operator /usr/share/doc/html +755 root operator /usr/share/doc/html/bzip2 755 root operator /usr/share/doc/psd 755 root operator /usr/share/doc/psd/19.curses 755 root operator /usr/share/mk diff --git a/lib/Makefile b/lib/Makefile index 16b9ed77e..75a6708dd 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -17,14 +17,14 @@ LIBMINLIB_DIR?= LIBASYN_DIR?= SUBDIR= csu ${LIBCOMPAT_DIR} ${LIBC_DIR} libdriver libnetdriver \ - libedit ${LIBM_DIR} libsys libtimers ${LIBUTIL_DIR} libbz2 libl libhgfs \ + libedit ${LIBM_DIR} libsys libtimers ${LIBUTIL_DIR} libl libhgfs \ libz libfetch libarchive libvtreefs libaudiodriver libmthread \ libexec libdevman libusb ${LIBMINLIB_DIR} ${LIBASYN_DIR} \ libddekit libminixfs libbdev .if defined(NBSD_LIBC) && (${NBSD_LIBC} != "no") SUBDIR+= libelf libminc libcrypt libterminfo libcurses libvassert libutil \ - libpuffs librefuse + libpuffs librefuse libbz2 .endif .if ${COMPILER_TYPE} == "ack" diff --git a/lib/libbz2/Makefile b/lib/libbz2/Makefile index fc7295541..3471a60d0 100644 --- a/lib/libbz2/Makefile +++ b/lib/libbz2/Makefile @@ -1,18 +1,40 @@ +# $NetBSD: Makefile,v 1.14 2008/08/29 00:02:22 gmcgarry Exp $ + +.if defined(__MINIX) +# ssp-buffer-size=0, __SSP_FORTIFY_LEVEL=0 +USE_FORT=no +.else +USE_FORT?= yes # data driven bugs? +.endif + +NOMAN= # defined + .include LIB= bz2 -BZ2DIR= ${MINIXSRCDIR}/commands/bzip2 -.PATH: ${BZ2DIR} +DIST= ${NETBSDSRCDIR}/dist/bzip2 +.PATH: ${DIST} -SRCS= bzlib.c blocksort.c compress.c crctable.c decompress.c \ - huffman.c randtable.c -CPPFLAGS+= -I ${BZ2DIR} +SRCS= blocksort.c huffman.c crctable.c randtable.c compress.c \ + decompress.c bzlib.c INCS= bzlib.h +INCSDIR= /usr/include -.if (${NBSD_LIBC} != "no") -INCSDIR= /usr/include -.else -INCSDIR= /usr/include.ack +# XXX huffman.c gets mis-compiled with 2.95.3 +.if ${MACHINE_ARCH} == "vax" +COPTS+= -O0 +.endif + +# XXX blocksort.c gets mis-compiled with 4.1 +.if (${MACHINE_ARCH} == "sh3el" || ${MACHINE_ARCH} == "sh3eb") && \ + (defined(HAVE_GCC) && ${HAVE_GCC} == 4) +COPTS.blocksort.c+= -fno-loop-optimize +.endif + +.if ${MKSHARE} != "no" +FILESDIR= ${HTMLDOCDIR}/bzip2 +FILES= manual.html .endif +.include .include diff --git a/lib/libbz2/shlib_version b/lib/libbz2/shlib_version new file mode 100644 index 000000000..45ca00de4 --- /dev/null +++ b/lib/libbz2/shlib_version @@ -0,0 +1,5 @@ +# $NetBSD: shlib_version,v 1.4 2008/03/19 17:10:52 bjs Exp $ +# Remember to update distrib/sets/lists/base/shl.* when changing +# +major=1 +minor=1 diff --git a/share/mk/Makefile b/share/mk/Makefile index 72868ff6a..9c2540f05 100644 --- a/share/mk/Makefile +++ b/share/mk/Makefile @@ -4,7 +4,7 @@ NOOBJ= # defined .if ${MKSHARE} != "no" FILES= bsd.dep.mk bsd.files.mk \ - bsd.inc.mk \ + bsd.inc.mk bsd.info.mk \ bsd.init.mk bsd.kinc.mk bsd.klinks.mk bsd.lib.mk \ bsd.links.mk bsd.man.mk bsd.obj.mk bsd.own.mk \ bsd.prog.mk bsd.subdir.mk bsd.sys.mk bsd.doc.mk \ diff --git a/share/mk/bsd.info.mk b/share/mk/bsd.info.mk new file mode 100644 index 000000000..a24761a07 --- /dev/null +++ b/share/mk/bsd.info.mk @@ -0,0 +1,92 @@ +# $NetBSD: bsd.info.mk,v 1.39 2009/02/28 19:18:52 joerg Exp $ + +.include + +##### Basic targets +cleandir: cleaninfo +realinstall: infoinstall + +##### Default values +INFOFLAGS?= + +INFOFILES?= + +##### Build rules +.if ${MKINFO} != "no" + +INFOFILES= ${TEXINFO:C/\.te?xi(nfo)?$/.info/} + +realall: ${INFOFILES} +.NOPATH: ${INFOFILES} + +.SUFFIXES: .txi .texi .texinfo .info + +.txi.info .texi.info .texinfo.info: + ${_MKTARGET_CREATE} + ${TOOL_MAKEINFO} ${INFOFLAGS} --no-split --no-version-header -o ${.TARGET} ${.IMPSRC} + +.endif # ${MKINFO} != "no" + +##### Install rules +infoinstall:: # ensure existence +.PHONY: infoinstall + +.if ${MKINFO} != "no" + +INFODIRFILE=${DESTDIR}${INFODIR}/dir + +# serialize access to ${INFODIRFILE}; needed for parallel makes +__infoinstall: .USE + ${_MKTARGET_INSTALL} + ${INSTALL_FILE} \ + -o ${INFOOWN_${.ALLSRC:T}:U${INFOOWN}} \ + -g ${INFOGRP_${.ALLSRC:T}:U${INFOGRP}} \ + -m ${INFOMODE_${.ALLSRC:T}:U${INFOMODE}} \ + ${.ALLSRC} ${.TARGET} + @[ -f ${INFODIRFILE} ] && \ + while ! ln ${INFODIRFILE} ${INFODIRFILE}.lock 2> /dev/null; \ + do sleep 1; done; \ + ${TOOL_INSTALL_INFO} -d ${INFODIRFILE} -r ${.TARGET} 2> /dev/null; \ + ${TOOL_INSTALL_INFO} -d ${INFODIRFILE} ${.TARGET}; \ + rm -f ${INFODIRFILE}.lock + + +.for F in ${INFOFILES:O:u} +_FDIR:= ${INFODIR_${F}:U${INFODIR}} # dir overrides +_FNAME:= ${INFONAME_${F}:U${INFONAME:U${F:T}}} # name overrides +_F:= ${DESTDIR}${_FDIR}/${_FNAME} # installed path + +.if ${MKUPDATE} == "no" +${_F}! ${F} __infoinstall # install rule +.if !defined(BUILD) && !make(all) && !make(${F}) +${_F}! .MADE # no build at install +.endif +.else +${_F}: ${F} __infoinstall # install rule +.if !defined(BUILD) && !make(all) && !make(${F}) +${_F}: .MADE # no build at install +.endif +.endif + +infoinstall:: ${_F} +.PRECIOUS: ${_F} # keep if install fails +.endfor + +.undef _FDIR +.undef _FNAME +.undef _F +.endif # ${MKINFO} != "no" + +##### Clean rules +CLEANFILES+= ${INFOFILES} + +cleaninfo: .PHONY +.if !empty(CLEANFILES) + rm -f ${CLEANFILES} +.endif + +##### Pull in related .mk logic +.include +.include + +${TARGETS}: # ensure existence diff --git a/tools/nbsd_ports b/tools/nbsd_ports index 701faa270..452da13b1 100644 --- a/tools/nbsd_ports +++ b/tools/nbsd_ports @@ -6,6 +6,7 @@ lib/libterminfo src/lib/libterminfo lib/libcurses src/lib/libcurses lib/libutil src/lib/libutil common/lib/libutil src/common/lib/libutil +lib/libbz2 src/lib/libbz2 nbsd_include src/include bin/mkdir src/bin/mkdir usr.bin/chpass src/usr.bin/chpass @@ -24,4 +25,7 @@ usr.bin/mdocml src/external/bsd/mdocml usr.sbin/pwd_mkdb src/usr.sbin/pwd_mkdb usr.sbin/user src/usr.sbin/user usr.sbin/vipw src/usr.sbin/vipw +usr.bin/bzip2 src/usr.bin/bzip2 +usr.bin/bzip2recover src/usr.bin/bzip2recover libexec/makewhatis src/libexec/makewhatis +dist/bzip2 dist/bzip2 diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 036d6c34b..0b3d6a6ec 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -4,7 +4,7 @@ # NetBSD imports SUBDIR= indent m4 stat tic sed mkdep uniq seq man mdocml \ - apropos chpass newgrp passwd + apropos chpass newgrp passwd bzip2 bzip2recover # Non-NetBSD imports SUBDIR+= ministat diff --git a/usr.bin/bzip2/Makefile b/usr.bin/bzip2/Makefile new file mode 100644 index 000000000..6ff127f7d --- /dev/null +++ b/usr.bin/bzip2/Makefile @@ -0,0 +1,39 @@ +# $NetBSD: Makefile,v 1.10 2007/05/28 12:06:24 tls Exp $ + +.include # for MKDYNAMICROOT definition + +.if defined(__MINIX) +MKDYNAMICROOT= no +SMALLPROG= yes +USE_FORT=no # __SSP_FORTIFY_LEVEL=0 +.else +USE_FORT?= yes # data-driven bugs? +.endif + +PROG= bzip2 +LDDIR!= cd ${NETBSDSRCDIR}/lib/libbz2 && ${PRINTOBJDIR} +LDADD+= -L${LDDIR} -lbz2 +DPADD+= ${LIBBZ2} + +.if (${MKDYNAMICROOT} == "no") +LDSTATIC?= -static +.endif +.ifdef SMALLPROG +CPPFLAGS+= -DSMALL +.endif + +DIST= ${NETBSDSRCDIR}/dist/bzip2 +.PATH: ${DIST} + +MLINKS+= bzip2.1 bunzip2.1\ + bzip2.1 bzcat.1\ + bzip2.1 bzip2recover.1 + +LINKS+= ${BINDIR}/bzip2 ${BINDIR}/bunzip2 +LINKS+= ${BINDIR}/bzip2 ${BINDIR}/bzcat + +test: + make -C dist/bzip2 test +install-extra: + make -C dist/bzip2 install +.include diff --git a/usr.bin/bzip2recover/Makefile b/usr.bin/bzip2recover/Makefile new file mode 100644 index 000000000..998a364d4 --- /dev/null +++ b/usr.bin/bzip2recover/Makefile @@ -0,0 +1,25 @@ +# $NetBSD: Makefile,v 1.8 2007/05/28 12:06:25 tls Exp $ + +.if defined(__MINIX) +USE_FORT=no # __SSP_FORTIFY_LEVEL=0 +.else +USE_FORT?= yes # data-driven bugs? +.endif +NOMAN= # defined + +.include # for MKDYNAMICROOT definition + +.if defined(__MINIX) +MKDYNAMICROOT= no +.endif + +PROG= bzip2recover + +.if (${MKDYNAMICROOT} == "no") +LDSTATIC?= -static +.endif + +DIST= ${NETBSDSRCDIR}/dist/bzip2 +.PATH: ${DIST} + +.include -- 2.44.0