summaryrefslogtreecommitdiffstats
path: root/contrib/bzip2
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2001-06-21 18:37:17 +0000
committerobrien <obrien@FreeBSD.org>2001-06-21 18:37:17 +0000
commitda41d3ce6ee0a7c399e6438525caf651b761080b (patch)
treedd474847b5cb872a4c00011987d2276b9e7075d0 /contrib/bzip2
downloadFreeBSD-src-da41d3ce6ee0a7c399e6438525caf651b761080b.zip
FreeBSD-src-da41d3ce6ee0a7c399e6438525caf651b761080b.tar.gz
Virgin import (trimmed) of Bzip2 version 1.0.1.
Diffstat (limited to 'contrib/bzip2')
-rw-r--r--contrib/bzip2/CHANGES167
-rw-r--r--contrib/bzip2/LICENSE39
-rw-r--r--contrib/bzip2/Makefile141
-rw-r--r--contrib/bzip2/Makefile-libbz2_so43
-rw-r--r--contrib/bzip2/README166
-rw-r--r--contrib/bzip2/README.COMPILATION.PROBLEMS130
-rw-r--r--contrib/bzip2/Y2K_INFO34
-rw-r--r--contrib/bzip2/blocksort.c1134
-rw-r--r--contrib/bzip2/bzip2.1439
-rw-r--r--contrib/bzip2/bzip2.c2044
-rw-r--r--contrib/bzip2/bzip2recover.c435
-rw-r--r--contrib/bzip2/bzlib.c1564
-rw-r--r--contrib/bzip2/bzlib.h319
-rw-r--r--contrib/bzip2/bzlib_private.h530
-rw-r--r--contrib/bzip2/compress.c714
-rw-r--r--contrib/bzip2/crctable.c144
-rw-r--r--contrib/bzip2/decompress.c660
-rw-r--r--contrib/bzip2/dlltest.c176
-rw-r--r--contrib/bzip2/huffman.c228
-rw-r--r--contrib/bzip2/libbz2.def27
-rw-r--r--contrib/bzip2/makefile.msc63
-rw-r--r--contrib/bzip2/manual.texi2215
-rw-r--r--contrib/bzip2/randtable.c124
-rw-r--r--contrib/bzip2/sample1.bz2.uu722
-rw-r--r--contrib/bzip2/sample1.ref.gz.uu848
-rw-r--r--contrib/bzip2/sample2.bz2.uu1642
-rw-r--r--contrib/bzip2/sample2.ref.gz.uu1933
-rw-r--r--contrib/bzip2/sample3.bz2.uu9
-rw-r--r--contrib/bzip2/sample3.ref.gz.uu11
-rw-r--r--contrib/bzip2/spewG.c39
-rw-r--r--contrib/bzip2/unzcrash.c126
-rw-r--r--contrib/bzip2/words05
-rw-r--r--contrib/bzip2/words14
-rw-r--r--contrib/bzip2/words25
-rw-r--r--contrib/bzip2/words323
35 files changed, 16903 insertions, 0 deletions
diff --git a/contrib/bzip2/CHANGES b/contrib/bzip2/CHANGES
new file mode 100644
index 0000000..ecaf417
--- /dev/null
+++ b/contrib/bzip2/CHANGES
@@ -0,0 +1,167 @@
+
+
+0.9.0
+~~~~~
+First version.
+
+
+0.9.0a
+~~~~~~
+Removed 'ranlib' from Makefile, since most modern Unix-es
+don't need it, or even know about it.
+
+
+0.9.0b
+~~~~~~
+Fixed a problem with error reporting in bzip2.c. This does not effect
+the library in any way. Problem is: versions 0.9.0 and 0.9.0a (of the
+program proper) compress and decompress correctly, but give misleading
+error messages (internal panics) when an I/O error occurs, instead of
+reporting the problem correctly. This shouldn't give any data loss
+(as far as I can see), but is confusing.
+
+Made the inline declarations disappear for non-GCC compilers.
+
+
+0.9.0c
+~~~~~~
+Fixed some problems in the library pertaining to some boundary cases.
+This makes the library behave more correctly in those situations. The
+fixes apply only to features (calls and parameters) not used by
+bzip2.c, so the non-fixedness of them in previous versions has no
+effect on reliability of bzip2.c.
+
+In bzlib.c:
+ * 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.
+
+In compress.c:
+ * changed setting of nGroups in sendMTFValues() so as to
+ do a bit better on small files. This _does_ effect
+ bzip2.c.
+
+
+0.9.5a
+~~~~~~
+Major change: add a fallback sorting algorithm (blocksort.c)
+to give reasonable behaviour even for very repetitive inputs.
+Nuked --repetitive-best and --repetitive-fast since they are
+no longer useful.
+
+Minor changes: mostly a whole bunch of small changes/
+bugfixes in the driver (bzip2.c). Changes pertaining to the
+user interface are:
+
+ allow decompression of symlink'd files to stdout
+ decompress/test files even without .bz2 extension
+ give more accurate error messages for I/O errors
+ when compressing/decompressing to stdout, don't catch control-C
+ read flags from BZIP2 and BZIP environment variables
+ decline to break hard links to a file unless forced with -f
+ allow -c flag even with no filenames
+ preserve file ownerships as far as possible
+ make -s -1 give the expected block size (100k)
+ add a flag -q --quiet to suppress nonessential warnings
+ stop decoding flags after --, so files beginning in - can be handled
+ resolved inconsistent naming: bzcat or bz2cat ?
+ bzip2 --help now returns 0
+
+Programming-level changes are:
+
+ fixed syntax error in GET_LL4 for Borland C++ 5.02
+ let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC}
+ fix overshoot of mode-string end in bzopen_or_bzdopen
+ wrapped bzlib.h in #ifdef __cplusplus ... extern "C" { ... }
+ close file handles under all error conditions
+ added minor mods so it compiles with DJGPP out of the box
+ fixed Makefile so it doesn't give problems with BSD make
+ fix uninitialised memory reads in dlltest.c
+
+0.9.5b
+~~~~~~
+Open stdin/stdout in binary mode for DJGPP.
+
+0.9.5c
+~~~~~~
+Changed BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1. The + 1
+version could cause the sorted order to be wrong in some extremely
+obscure cases. Also changed setting of quadrant in blocksort.c.
+
+0.9.5d
+~~~~~~
+The only functional change is to make bzlibVersion() in the library
+return the correct string. This has no effect whatsoever on the
+functioning of the bzip2 program or library. Added a couple of casts
+so the library compiles without warnings at level 3 in MS Visual
+Studio 6.0. Included a Y2K statement in the file Y2K_INFO. All other
+changes are minor documentation changes.
+
+1.0
+~~~
+Several minor bugfixes and enhancements:
+
+* Large file support. The library uses 64-bit counters to
+ count the volume of data passing through it. bzip2.c
+ is now compiled with -D_FILE_OFFSET_BITS=64 to get large
+ file support from the C library. -v correctly prints out
+ file sizes greater than 4 gigabytes. All these changes have
+ been made without assuming a 64-bit platform or a C compiler
+ which supports 64-bit ints, so, except for the C library
+ aspect, they are fully portable.
+
+* Decompression robustness. The library/program should be
+ robust to any corruption of compressed data, detecting and
+ handling _all_ corruption, instead of merely relying on
+ the CRCs. What this means is that the program should
+ never crash, given corrupted data, and the library should
+ always return BZ_DATA_ERROR.
+
+* Fixed an obscure race-condition bug only ever observed on
+ Solaris, in which, if you were very unlucky and issued
+ control-C at exactly the wrong time, both input and output
+ files would be deleted.
+
+* Don't run out of file handles on test/decompression when
+ large numbers of files have invalid magic numbers.
+
+* Avoid library namespace pollution. Prefix all exported
+ symbols with BZ2_.
+
+* Minor sorting enhancements from my DCC2000 paper.
+
+* Advance the version number to 1.0, so as to counteract the
+ (false-in-this-case) impression some people have that programs
+ with version numbers less than 1.0 are in someway, experimental,
+ pre-release versions.
+
+* Create an initial Makefile-libbz2_so to build a shared library.
+ Yes, I know I should really use libtool et al ...
+
+* Make the program exit with 2 instead of 0 when decompression
+ fails due to a bad magic number (ie, an invalid bzip2 header).
+ Also exit with 1 (as the manual claims :-) whenever a diagnostic
+ message would have been printed AND the corresponding operation
+ is aborted, for example
+ bzip2: Output file xx already exists.
+ When a diagnostic message is printed but the operation is not
+ aborted, for example
+ bzip2: Can't guess original name for wurble -- using wurble.out
+ then the exit value 0 is returned, unless some other problem is
+ also detected.
+
+ I think it corresponds more closely to what the manual claims now.
+
+
+1.0.1
+~~~~~
+* Modified dlltest.c so it uses the new BZ2_ naming scheme.
+* Modified makefile-msc to fix minor build probs on Win2k.
+* Updated README.COMPILATION.PROBLEMS.
+
+There are no functionality changes or bug fixes relative to version
+1.0.0. This is just a documentation update + a fix for minor Win32
+build problems. For almost everyone, upgrading from 1.0.0 to 1.0.1 is
+utterly pointless. Don't bother.
diff --git a/contrib/bzip2/LICENSE b/contrib/bzip2/LICENSE
new file mode 100644
index 0000000..88fa6d8
--- /dev/null
+++ b/contrib/bzip2/LICENSE
@@ -0,0 +1,39 @@
+
+This program, "bzip2" and associated library "libbzip2", are
+copyright (C) 1996-2000 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@acm.org
+bzip2/libbzip2 version 1.0 of 21 March 2000
+
diff --git a/contrib/bzip2/Makefile b/contrib/bzip2/Makefile
new file mode 100644
index 0000000..ab17f49
--- /dev/null
+++ b/contrib/bzip2/Makefile
@@ -0,0 +1,141 @@
+
+SHELL=/bin/sh
+CC=gcc
+BIGFILES=-D_FILE_OFFSET_BITS=64
+CFLAGS=-Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce $(BIGFILES)
+
+OBJS= blocksort.o \
+ huffman.o \
+ crctable.o \
+ randtable.o \
+ compress.o \
+ decompress.o \
+ bzlib.o
+
+all: libbz2.a bzip2 bzip2recover test
+
+bzip2: libbz2.a bzip2.o
+ $(CC) $(CFLAGS) -o bzip2 bzip2.o -L. -lbz2
+
+bzip2recover: bzip2recover.o
+ $(CC) $(CFLAGS) -o bzip2recover bzip2recover.o
+
+libbz2.a: $(OBJS)
+ rm -f libbz2.a
+ ar cq libbz2.a $(OBJS)
+ @if ( test -f /usr/bin/ranlib -o -f /bin/ranlib -o \
+ -f /usr/ccs/bin/ranlib ) ; then \
+ echo ranlib libbz2.a ; \
+ ranlib libbz2.a ; \
+ fi
+
+test: bzip2
+ @cat words1
+ ./bzip2 -1 < sample1.ref > sample1.rb2
+ ./bzip2 -2 < sample2.ref > sample2.rb2
+ ./bzip2 -3 < sample3.ref > sample3.rb2
+ ./bzip2 -d < sample1.bz2 > sample1.tst
+ ./bzip2 -d < sample2.bz2 > sample2.tst
+ ./bzip2 -ds < sample3.bz2 > sample3.tst
+ cmp sample1.bz2 sample1.rb2
+ cmp sample2.bz2 sample2.rb2
+ cmp sample3.bz2 sample3.rb2
+ cmp sample1.tst sample1.ref
+ cmp sample2.tst sample2.ref
+ cmp sample3.tst sample3.ref
+ @cat words3
+
+PREFIX=/usr
+
+install: bzip2 bzip2recover
+ if ( test ! -d $(PREFIX)/bin ) ; then mkdir $(PREFIX)/bin ; fi
+ if ( test ! -d $(PREFIX)/lib ) ; then mkdir $(PREFIX)/lib ; fi
+ if ( test ! -d $(PREFIX)/man ) ; then mkdir $(PREFIX)/man ; fi
+ if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir $(PREFIX)/man/man1 ; fi
+ if ( test ! -d $(PREFIX)/include ) ; then mkdir $(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
+
+clean:
+ rm -f *.o libbz2.a bzip2 bzip2recover \
+ sample1.rb2 sample2.rb2 sample3.rb2 \
+ sample1.tst sample2.tst sample3.tst
+
+blocksort.o: blocksort.c
+ @cat words0
+ $(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
+bzip2.o: bzip2.c
+ $(CC) $(CFLAGS) -c bzip2.c
+bzip2recover.o: bzip2recover.c
+ $(CC) $(CFLAGS) -c bzip2recover.c
+
+DISTNAME=bzip2-1.0.1
+tarfile:
+ rm -f $(DISTNAME)
+ ln -sf . $(DISTNAME)
+ tar cvf $(DISTNAME).tar \
+ $(DISTNAME)/blocksort.c \
+ $(DISTNAME)/huffman.c \
+ $(DISTNAME)/crctable.c \
+ $(DISTNAME)/randtable.c \
+ $(DISTNAME)/compress.c \
+ $(DISTNAME)/decompress.c \
+ $(DISTNAME)/bzlib.c \
+ $(DISTNAME)/bzip2.c \
+ $(DISTNAME)/bzip2recover.c \
+ $(DISTNAME)/bzlib.h \
+ $(DISTNAME)/bzlib_private.h \
+ $(DISTNAME)/Makefile \
+ $(DISTNAME)/manual.texi \
+ $(DISTNAME)/manual.ps \
+ $(DISTNAME)/LICENSE \
+ $(DISTNAME)/bzip2.1 \
+ $(DISTNAME)/bzip2.1.preformatted \
+ $(DISTNAME)/bzip2.txt \
+ $(DISTNAME)/words0 \
+ $(DISTNAME)/words1 \
+ $(DISTNAME)/words2 \
+ $(DISTNAME)/words3 \
+ $(DISTNAME)/sample1.ref \
+ $(DISTNAME)/sample2.ref \
+ $(DISTNAME)/sample3.ref \
+ $(DISTNAME)/sample1.bz2 \
+ $(DISTNAME)/sample2.bz2 \
+ $(DISTNAME)/sample3.bz2 \
+ $(DISTNAME)/dlltest.c \
+ $(DISTNAME)/*.html \
+ $(DISTNAME)/README \
+ $(DISTNAME)/README.COMPILATION.PROBLEMS \
+ $(DISTNAME)/CHANGES \
+ $(DISTNAME)/libbz2.def \
+ $(DISTNAME)/libbz2.dsp \
+ $(DISTNAME)/dlltest.dsp \
+ $(DISTNAME)/makefile.msc \
+ $(DISTNAME)/Y2K_INFO \
+ $(DISTNAME)/unzcrash.c \
+ $(DISTNAME)/spewG.c \
+ $(DISTNAME)/Makefile-libbz2_so
diff --git a/contrib/bzip2/Makefile-libbz2_so b/contrib/bzip2/Makefile-libbz2_so
new file mode 100644
index 0000000..a347c50
--- /dev/null
+++ b/contrib/bzip2/Makefile-libbz2_so
@@ -0,0 +1,43 @@
+
+# This Makefile builds a shared version of the library,
+# libbz2.so.1.0.1, with soname libbz2.so.1.0,
+# at least on x86-Linux (RedHat 5.2),
+# with gcc-2.7.2.3. 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 -O2 -fomit-frame-pointer -fno-strength-reduce $(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.1 $(OBJS)
+ $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.1
+ rm -f libbz2.so.1.0
+ ln -s libbz2.so.1.0.1 libbz2.so.1.0
+
+clean:
+ rm -f $(OBJS) bzip2.o libbz2.so.1.0.1 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/contrib/bzip2/README b/contrib/bzip2/README
new file mode 100644
index 0000000..22945a2
--- /dev/null
+++ b/contrib/bzip2/README
@@ -0,0 +1,166 @@
+
+This is the README for bzip2, a block-sorting file compressor, version
+1.0. This version is fully compatible with the previous public
+releases, bzip2-0.1pl2, bzip2-0.9.0 and bzip2-0.9.5.
+
+bzip2-1.0 is distributed under a BSD-style license. For details,
+see the file LICENSE.
+
+Complete documentation is available in Postscript form (manual.ps) or
+html (manual_toc.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.
+
+
+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:
+
+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
+ 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.
+
+
+HOW TO BUILD -- UNIX, shared library libbz2.so.
+
+Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for
+Linux-ELF (RedHat 5.2 on an x86 box), with gcc. I make no claims
+that it works for any other platform, though I suspect it probably
+will work for most platforms employing both ELF and gcc.
+
+bzip2-shared, a client of the shared library, is also build, but
+not self-tested. So I suggest you also build using the normal
+Makefile, since that conducts a self-test.
+
+Important note for people upgrading .so's from 0.9.0/0.9.5 to
+version 1.0. All the functions in the library have been renamed,
+from (eg) 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.
+
+
+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://sourceware.cygnus.com/bzip2). Look
+there. However (FWIW), bzip2-1.0 is very standard ANSI C and should
+compile unmodified with MS Visual C. For Win32, there is one
+important caveat: in bzip2.c, you must set BZ_UNIX to 0 and
+BZ_LCCWIN32 to 1 before building. If you have difficulties building,
+you might want to read README.COMPILATION.PROBLEMS.
+
+
+VALIDATION
+
+Correct operation, in the sense that a compressed file can always be
+decompressed to reproduce the original, is obviously of paramount
+importance. To validate bzip2, I used a modified version of Mark
+Nelson's churn program. Churn is an automated test driver which
+recursively traverses a directory structure, using bzip2 to compress
+and then decompress each file it encounters, and checking that the
+decompressed data is the same as the original. There are more details
+in Section 4 of the user guide.
+
+
+
+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.
+
+
+DISCLAIMER:
+
+ I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE
+ USE OF THIS PROGRAM, HOWSOEVER CAUSED.
+
+ Every compression of a file implies an assumption that the
+ compressed file can be decompressed to reproduce the original.
+ Great efforts in design, coding and testing have been made to
+ ensure that this program works correctly. However, the complexity
+ of the algorithms, and, in particular, the presence of various
+ special cases in the code which occur with very low but non-zero
+ probability make it impossible to rule out the possibility of bugs
+ remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS
+ 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.
+
+
+PATENTS:
+
+ To the best of my knowledge, bzip2 does not use any patented
+ algorithms. However, I do not have the resources available to
+ carry out a full 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) ?
+
+ * Approx 10% faster compression, 30% faster decompression
+ * -t (test mode) is a lot quicker
+ * Can decompress concatenated compressed files
+ * Programming interface, so programs can directly read/write .bz2 files
+ * Less restrictive (BSD-style) licensing
+ * Flag handling more compatible with GNU gzip
+ * Much more documentation, i.e., a proper user manual
+ * Hopefully, improved portability (at least of the library)
+
+WHAT'S NEW IN 0.9.5 ?
+
+ * Compression speed is much less sensitive to the input
+ data than in previous versions. Specifically, the very
+ slow performance caused by repetitive data is fixed.
+ * Many small improvements in file and flag handling.
+ * A Y2K statement.
+
+WHAT'S NEW IN 1.0
+
+ See the CHANGES file.
+
+I hope you find bzip2 useful. Feel free to contact me at
+ jseward@acm.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, bzip2-0.1pl2 and bzip2-0.9.0, 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.muraroa.demon.co.uk.
+
+Julian Seward
+jseward@acm.org
+
+Cambridge, UK
+18 July 1996 (version 0.15)
+25 August 1996 (version 0.21)
+ 7 August 1997 (bzip2, version 0.1)
+29 August 1997 (bzip2, version 0.1pl2)
+23 August 1998 (bzip2, version 0.9.0)
+ 8 June 1999 (bzip2, version 0.9.5)
+ 4 Sept 1999 (bzip2, version 0.9.5d)
+ 5 May 2000 (bzip2, version 1.0pre8)
diff --git a/contrib/bzip2/README.COMPILATION.PROBLEMS b/contrib/bzip2/README.COMPILATION.PROBLEMS
new file mode 100644
index 0000000..d621ad5
--- /dev/null
+++ b/contrib/bzip2/README.COMPILATION.PROBLEMS
@@ -0,0 +1,130 @@
+
+bzip2-1.0 should compile without problems on the vast majority of
+platforms. Using the supplied Makefile, I've built and tested it
+myself for x86-linux, sparc-solaris, alpha-linux, x86-cygwin32 and
+alpha-tru64unix. 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).
+
+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.
+
+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://www.sas.com/standard/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.
+
+Alternatively, try some of the platform-specific hints listed below.
+
+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.
+
+
+Known problems as of 1.0pre8:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* HP/UX 10.20 and 11.00, using gcc (2.7.2.3 and 2.95.2): A large
+ number of warnings appear, including the following:
+
+ /usr/include/sys/resource.h: In function `getrlimit':
+ /usr/include/sys/resource.h:168:
+ warning: implicit declaration of function `__getrlimit64'
+ /usr/include/sys/resource.h: In function `setrlimit':
+ /usr/include/sys/resource.h:170:
+ warning: implicit declaration of function `__setrlimit64'
+
+ This would appear to be a problem with large file support, header
+ files and gcc. gcc may or may not give up at this point. If it
+ fails, you might be able to improve matters by adding
+ -D__STDC_EXT__=1
+ to the BIGFILES variable in the Makefile (ie, change its definition
+ to
+ BIGFILES=-D_FILE_OFFSET_BITS=64 -D__STDC_EXT__=1
+
+ Even if gcc does produce a binary which appears to work (ie passes
+ its self-tests), you might want to test it to see if it works properly
+ on large files.
+
+
+* HP/UX 10.20 and 11.00, using HP's cc compiler.
+
+ No specific problems for this combination, except that you'll need to
+ specify the -Ae flag, and zap the gcc-specific stuff
+ -Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce.
+ You should retain -D_FILE_OFFSET_BITS=64 in order to get large
+ file support -- which is reported to work ok for this HP/UX + cc
+ combination.
+
+
+* SunOS 4.1.X.
+
+ Amazingly, there are still people out there using this venerable old
+ banger. I shouldn't be too rude -- I started life on SunOS, and
+ it was a pretty darn good OS, way back then. Anyway:
+
+ SunOS doesn't seem to have strerror(), so you'll have to use
+ perror(), perhaps by doing adding this (warning: UNTESTED CODE):
+
+ char* strerror ( int errnum )
+ {
+ if (errnum < 0 || errnum >= sys_nerr)
+ return "Unknown error";
+ else
+ return sys_errlist[errnum];
+ }
+
+ Or you could comment out the relevant calls to strerror; they're
+ not mission-critical. Or you could upgrade to Solaris. Ha ha ha!
+ (what?? you think I've got Bad Attitude?)
+
+
+* Making a shared library on Solaris. (Not really a compilation
+ problem, but many people ask ...)
+
+ Firstly, if you have Solaris 8, either you have libbz2.so already
+ on your system, or you can install it from the Solaris CD.
+
+ Secondly, be aware that there are potential naming conflicts
+ between the .so file supplied with Solaris 8, and the .so file
+ which Makefile-libbz2_so will make. Makefile-libbz2_so creates
+ a .so which has the names which I intend to be "official" as
+ of version 1.0.0 and onwards. Unfortunately, the .so in
+ Solaris 8 appeared before I decided on the final names, so
+ the two libraries are incompatible. We have since communicated
+ and I hope that the problems will have been solved in the next
+ version of Solaris, whenever that might appear.
+
+ All that said: you might be able to get somewhere
+ by finding the line in Makefile-libbz2_so which says
+
+ $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.1 $(OBJS)
+
+ and replacing with
+
+ ($CC) -G -shared -o libbz2.so.1.0.1 -h libbz2.so.1.0 $(OBJS)
+
+ If gcc objects to the combination -fpic -fPIC, get rid of
+ the second one, leaving just "-fpic".
+
+
+That's the end of the currently known compilation problems.
diff --git a/contrib/bzip2/Y2K_INFO b/contrib/bzip2/Y2K_INFO
new file mode 100644
index 0000000..55fd56a
--- /dev/null
+++ b/contrib/bzip2/Y2K_INFO
@@ -0,0 +1,34 @@
+
+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/contrib/bzip2/blocksort.c b/contrib/bzip2/blocksort.c
new file mode 100644
index 0000000..ec42672
--- /dev/null
+++ b/contrib/bzip2/blocksort.c
@@ -0,0 +1,1134 @@
+
+/*-------------------------------------------------------------*/
+/*--- Block sorting machinery ---*/
+/*--- 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-2000 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@acm.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.
+--*/
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------*/
+/*--- Fallback O(N log(N)^2) sorting ---*/
+/*--- algorithm, for repetitive blocks ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+__inline__
+void fallbackSimpleSort ( UInt32* fmap,
+ UInt32* eclass,
+ Int32 lo,
+ Int32 hi )
+{
+ Int32 i, j, tmp;
+ UInt32 ec_tmp;
+
+ if (lo == hi) return;
+
+ if (hi - lo > 3) {
+ for ( i = hi-4; i >= lo; i-- ) {
+ tmp = fmap[i];
+ ec_tmp = eclass[tmp];
+ for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
+ fmap[j-4] = fmap[j];
+ fmap[j-4] = tmp;
+ }
+ }
+
+ for ( i = hi-1; i >= lo; i-- ) {
+ tmp = fmap[i];
+ ec_tmp = eclass[tmp];
+ for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
+ fmap[j-1] = fmap[j];
+ fmap[j-1] = tmp;
+ }
+}
+
+
+/*---------------------------------------------*/
+#define fswap(zz1, zz2) \
+ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define fvswap(zzp1, zzp2, zzn) \
+{ \
+ Int32 yyp1 = (zzp1); \
+ Int32 yyp2 = (zzp2); \
+ Int32 yyn = (zzn); \
+ while (yyn > 0) { \
+ fswap(fmap[yyp1], fmap[yyp2]); \
+ yyp1++; yyp2++; yyn--; \
+ } \
+}
+
+
+#define fmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define fpush(lz,hz) { stackLo[sp] = lz; \
+ stackHi[sp] = hz; \
+ sp++; }
+
+#define fpop(lz,hz) { sp--; \
+ lz = stackLo[sp]; \
+ hz = stackHi[sp]; }
+
+#define FALLBACK_QSORT_SMALL_THRESH 10
+#define FALLBACK_QSORT_STACK_SIZE 100
+
+
+static
+void fallbackQSort3 ( UInt32* fmap,
+ UInt32* eclass,
+ Int32 loSt,
+ Int32 hiSt )
+{
+ Int32 unLo, unHi, ltLo, gtHi, n, m;
+ Int32 sp, lo, hi;
+ UInt32 med, r, r3;
+ Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
+ Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];
+
+ r = 0;
+
+ sp = 0;
+ fpush ( loSt, hiSt );
+
+ while (sp > 0) {
+
+ AssertH ( sp < FALLBACK_QSORT_STACK_SIZE, 1004 );
+
+ fpop ( lo, hi );
+ if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
+ fallbackSimpleSort ( fmap, eclass, lo, hi );
+ continue;
+ }
+
+ /* Random partitioning. Median of 3 sometimes fails to
+ avoid bad cases. Median of 9 seems to help but
+ looks rather expensive. This too seems to work but
+ is cheaper. Guidance for the magic constants
+ 7621 and 32768 is taken from Sedgewick's algorithms
+ book, chapter 35.
+ */
+ r = ((r * 7621) + 1) % 32768;
+ r3 = r % 3;
+ if (r3 == 0) med = eclass[fmap[lo]]; else
+ if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
+ med = eclass[fmap[hi]];
+
+ unLo = ltLo = lo;
+ unHi = gtHi = hi;
+
+ while (1) {
+ while (1) {
+ if (unLo > unHi) break;
+ n = (Int32)eclass[fmap[unLo]] - (Int32)med;
+ if (n == 0) {
+ fswap(fmap[unLo], fmap[ltLo]);
+ ltLo++; unLo++;
+ continue;
+ };
+ if (n > 0) break;
+ unLo++;
+ }
+ while (1) {
+ if (unLo > unHi) break;
+ n = (Int32)eclass[fmap[unHi]] - (Int32)med;
+ if (n == 0) {
+ fswap(fmap[unHi], fmap[gtHi]);
+ gtHi--; unHi--;
+ continue;
+ };
+ if (n < 0) break;
+ unHi--;
+ }
+ if (unLo > unHi) break;
+ fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
+ }
+
+ AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );
+
+ if (gtHi < ltLo) continue;
+
+ n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
+ m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);
+
+ n = lo + unLo - ltLo - 1;
+ m = hi - (gtHi - unHi) + 1;
+
+ if (n - lo > hi - m) {
+ fpush ( lo, n );
+ fpush ( m, hi );
+ } else {
+ fpush ( m, hi );
+ fpush ( lo, n );
+ }
+ }
+}
+
+#undef fmin
+#undef fpush
+#undef fpop
+#undef fswap
+#undef fvswap
+#undef FALLBACK_QSORT_SMALL_THRESH
+#undef FALLBACK_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+ nblock > 0
+ eclass exists for [0 .. nblock-1]
+ ((UChar*)eclass) [0 .. nblock-1] holds block
+ ptr exists for [0 .. nblock-1]
+
+ Post:
+ ((UChar*)eclass) [0 .. nblock-1] holds block
+ All other areas of eclass destroyed
+ fmap [0 .. nblock-1] holds sorted order
+ bhtab [ 0 .. 2+(nblock/32) ] destroyed
+*/
+
+#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
+#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
+#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
+#define WORD_BH(zz) bhtab[(zz) >> 5]
+#define UNALIGNED_BH(zz) ((zz) & 0x01f)
+
+static
+void fallbackSort ( UInt32* fmap,
+ UInt32* eclass,
+ UInt32* bhtab,
+ Int32 nblock,
+ Int32 verb )
+{
+ Int32 ftab[257];
+ Int32 ftabCopy[256];
+ Int32 H, i, j, k, l, r, cc, cc1;
+ Int32 nNotDone;
+ Int32 nBhtab;
+ UChar* eclass8 = (UChar*)eclass;
+
+ /*--
+ Initial 1-char radix sort to generate
+ initial fmap and initial BH bits.
+ --*/
+ if (verb >= 4)
+ VPrintf0 ( " bucket sorting ...\n" );
+ for (i = 0; i < 257; i++) ftab[i] = 0;
+ for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
+ for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i];
+ for (i = 1; i < 257; i++) ftab[i] += ftab[i-1];
+
+ for (i = 0; i < nblock; i++) {
+ j = eclass8[i];
+ k = ftab[j] - 1;
+ ftab[j] = k;
+ fmap[k] = i;
+ }
+
+ nBhtab = 2 + (nblock / 32);
+ for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
+ for (i = 0; i < 256; i++) SET_BH(ftab[i]);
+
+ /*--
+ Inductively refine the buckets. Kind-of an
+ "exponential radix sort" (!), inspired by the
+ Manber-Myers suffix array construction algorithm.
+ --*/
+
+ /*-- set sentinel bits for block-end detection --*/
+ for (i = 0; i < 32; i++) {
+ SET_BH(nblock + 2*i);
+ CLEAR_BH(nblock + 2*i + 1);
+ }
+
+ /*-- the log(N) loop --*/
+ H = 1;
+ while (1) {
+
+ if (verb >= 4)
+ VPrintf1 ( " depth %6d has ", H );
+
+ j = 0;
+ for (i = 0; i < nblock; i++) {
+ if (ISSET_BH(i)) j = i;
+ k = fmap[i] - H; if (k < 0) k += nblock;
+ eclass[k] = j;
+ }
+
+ nNotDone = 0;
+ r = -1;
+ while (1) {
+
+ /*-- find the next non-singleton bucket --*/
+ k = r + 1;
+ while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+ if (ISSET_BH(k)) {
+ while (WORD_BH(k) == 0xffffffff) k += 32;
+ while (ISSET_BH(k)) k++;
+ }
+ l = k - 1;
+ if (l >= nblock) break;
+ while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+ if (!ISSET_BH(k)) {
+ while (WORD_BH(k) == 0x00000000) k += 32;
+ while (!ISSET_BH(k)) k++;
+ }
+ r = k - 1;
+ if (r >= nblock) break;
+
+ /*-- now [l, r] bracket current bucket --*/
+ if (r > l) {
+ nNotDone += (r - l + 1);
+ fallbackQSort3 ( fmap, eclass, l, r );
+
+ /*-- scan bucket and generate header bits-- */
+ cc = -1;
+ for (i = l; i <= r; i++) {
+ cc1 = eclass[fmap[i]];
+ if (cc != cc1) { SET_BH(i); cc = cc1; };
+ }
+ }
+ }
+
+ if (verb >= 4)
+ VPrintf1 ( "%6d unresolved strings\n", nNotDone );
+
+ H *= 2;
+ if (H > nblock || nNotDone == 0) break;
+ }
+
+ /*--
+ Reconstruct the original block in
+ eclass8 [0 .. nblock-1], since the
+ previous phase destroyed it.
+ --*/
+ if (verb >= 4)
+ VPrintf0 ( " reconstructing block ...\n" );
+ j = 0;
+ for (i = 0; i < nblock; i++) {
+ while (ftabCopy[j] == 0) j++;
+ ftabCopy[j]--;
+ eclass8[fmap[i]] = (UChar)j;
+ }
+ AssertH ( j < 256, 1005 );
+}
+
+#undef SET_BH
+#undef CLEAR_BH
+#undef ISSET_BH
+#undef WORD_BH
+#undef UNALIGNED_BH
+
+
+/*---------------------------------------------*/
+/*--- The main, O(N^2 log(N)) sorting ---*/
+/*--- algorithm. Faster for "normal" ---*/
+/*--- non-repetitive blocks. ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+__inline__
+Bool mainGtU ( UInt32 i1,
+ UInt32 i2,
+ UChar* block,
+ UInt16* quadrant,
+ UInt32 nblock,
+ Int32* budget )
+{
+ Int32 k;
+ UChar c1, c2;
+ UInt16 s1, s2;
+
+ AssertD ( i1 != i2, "mainGtU" );
+ /* 1 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 2 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 3 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 4 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 5 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 6 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 7 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 8 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 9 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 10 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 11 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+ /* 12 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ i1++; i2++;
+
+ k = nblock + 8;
+
+ do {
+ /* 1 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 2 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 3 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 4 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 5 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 6 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 7 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+ /* 8 */
+ c1 = block[i1]; c2 = block[i2];
+ if (c1 != c2) return (c1 > c2);
+ s1 = quadrant[i1]; s2 = quadrant[i2];
+ if (s1 != s2) return (s1 > s2);
+ i1++; i2++;
+
+ if (i1 >= nblock) i1 -= nblock;
+ if (i2 >= nblock) i2 -= nblock;
+
+ k -= 8;
+ (*budget)--;
+ }
+ while (k >= 0);
+
+ return False;
+}
+
+
+/*---------------------------------------------*/
+/*--
+ Knuth's increments seem to work better
+ than Incerpi-Sedgewick here. Possibly
+ because the number of elems to sort is
+ usually small, typically <= 20.
+--*/
+static
+Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
+ 9841, 29524, 88573, 265720,
+ 797161, 2391484 };
+
+static
+void mainSimpleSort ( UInt32* ptr,
+ UChar* block,
+ UInt16* quadrant,
+ Int32 nblock,
+ Int32 lo,
+ Int32 hi,
+ Int32 d,
+ Int32* budget )
+{
+ Int32 i, j, h, bigN, hp;
+ UInt32 v;
+
+ bigN = hi - lo + 1;
+ if (bigN < 2) return;
+
+ hp = 0;
+ while (incs[hp] < bigN) hp++;
+ hp--;
+
+ for (; hp >= 0; hp--) {
+ h = incs[hp];
+
+ i = lo + h;
+ while (True) {
+
+ /*-- copy 1 --*/
+ if (i > hi) break;
+ v = ptr[i];
+ j = i;
+ while ( mainGtU (
+ ptr[j-h]+d, v+d, block, quadrant, nblock, budget
+ ) ) {
+ ptr[j] = ptr[j-h];
+ j = j - h;
+ if (j <= (lo + h - 1)) break;
+ }
+ ptr[j] = v;
+ i++;
+
+ /*-- copy 2 --*/
+ if (i > hi) break;
+ v = ptr[i];
+ j = i;
+ while ( mainGtU (
+ ptr[j-h]+d, v+d, block, quadrant, nblock, budget
+ ) ) {
+ ptr[j] = ptr[j-h];
+ j = j - h;
+ if (j <= (lo + h - 1)) break;
+ }
+ ptr[j] = v;
+ i++;
+
+ /*-- copy 3 --*/
+ if (i > hi) break;
+ v = ptr[i];
+ j = i;
+ while ( mainGtU (
+ ptr[j-h]+d, v+d, block, quadrant, nblock, budget
+ ) ) {
+ ptr[j] = ptr[j-h];
+ j = j - h;
+ if (j <= (lo + h - 1)) break;
+ }
+ ptr[j] = v;
+ i++;
+
+ if (*budget < 0) return;
+ }
+ }
+}
+
+
+/*---------------------------------------------*/
+/*--
+ The following is an implementation of
+ an elegant 3-way quicksort for strings,
+ described in a paper "Fast Algorithms for
+ Sorting and Searching Strings", by Robert
+ Sedgewick and Jon L. Bentley.
+--*/
+
+#define mswap(zz1, zz2) \
+ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define mvswap(zzp1, zzp2, zzn) \
+{ \
+ Int32 yyp1 = (zzp1); \
+ Int32 yyp2 = (zzp2); \
+ Int32 yyn = (zzn); \
+ while (yyn > 0) { \
+ mswap(ptr[yyp1], ptr[yyp2]); \
+ yyp1++; yyp2++; yyn--; \
+ } \
+}
+
+static
+__inline__
+UChar mmed3 ( UChar a, UChar b, UChar c )
+{
+ UChar t;
+ if (a > b) { t = a; a = b; b = t; };
+ if (b > c) {
+ b = c;
+ if (a > b) b = a;
+ }
+ return b;
+}
+
+#define mmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
+ stackHi[sp] = hz; \
+ stackD [sp] = dz; \
+ sp++; }
+
+#define mpop(lz,hz,dz) { sp--; \
+ lz = stackLo[sp]; \
+ hz = stackHi[sp]; \
+ dz = stackD [sp]; }
+
+
+#define mnextsize(az) (nextHi[az]-nextLo[az])
+
+#define mnextswap(az,bz) \
+ { Int32 tz; \
+ tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
+ tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
+ tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }
+
+
+#define MAIN_QSORT_SMALL_THRESH 20
+#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
+#define MAIN_QSORT_STACK_SIZE 100
+
+static
+void mainQSort3 ( UInt32* ptr,
+ UChar* block,
+ UInt16* quadrant,
+ Int32 nblock,
+ Int32 loSt,
+ Int32 hiSt,
+ Int32 dSt,
+ Int32* budget )
+{
+ Int32 unLo, unHi, ltLo, gtHi, n, m, med;
+ Int32 sp, lo, hi, d;
+
+ Int32 stackLo[MAIN_QSORT_STACK_SIZE];
+ Int32 stackHi[MAIN_QSORT_STACK_SIZE];
+ Int32 stackD [MAIN_QSORT_STACK_SIZE];
+
+ Int32 nextLo[3];
+ Int32 nextHi[3];
+ Int32 nextD [3];
+
+ sp = 0;
+ mpush ( loSt, hiSt, dSt );
+
+ while (sp > 0) {
+
+ AssertH ( sp < MAIN_QSORT_STACK_SIZE, 1001 );
+
+ mpop ( lo, hi, d );
+ if (hi - lo < MAIN_QSORT_SMALL_THRESH ||
+ d > MAIN_QSORT_DEPTH_THRESH) {
+ mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
+ if (*budget < 0) return;
+ continue;
+ }
+
+ med = (Int32)
+ mmed3 ( block[ptr[ lo ]+d],
+ block[ptr[ hi ]+d],
+ block[ptr[ (lo+hi)>>1 ]+d] );
+
+ unLo = ltLo = lo;
+ unHi = gtHi = hi;
+
+ while (True) {
+ while (True) {
+ if (unLo > unHi) break;
+ n = ((Int32)block[ptr[unLo]+d]) - med;
+ if (n == 0) {
+ mswap(ptr[unLo], ptr[ltLo]);
+ ltLo++; unLo++; continue;
+ };
+ if (n > 0) break;
+ unLo++;
+ }
+ while (True) {
+ if (unLo > unHi) break;
+ n = ((Int32)block[ptr[unHi]+d]) - med;
+ if (n == 0) {
+ mswap(ptr[unHi], ptr[gtHi]);
+ gtHi--; unHi--; continue;
+ };
+ if (n < 0) break;
+ unHi--;
+ }
+ if (unLo > unHi) break;
+ mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
+ }
+
+ AssertD ( unHi == unLo-1, "mainQSort3(2)" );
+
+ if (gtHi < ltLo) {
+ mpush(lo, hi, d+1 );
+ continue;
+ }
+
+ n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
+ m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);
+
+ n = lo + unLo - ltLo - 1;
+ m = hi - (gtHi - unHi) + 1;
+
+ nextLo[0] = lo; nextHi[0] = n; nextD[0] = d;
+ nextLo[1] = m; nextHi[1] = hi; nextD[1] = d;
+ nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
+
+ if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+ if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
+ if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+
+ AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
+ AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );
+
+ mpush (nextLo[0], nextHi[0], nextD[0]);
+ mpush (nextLo[1], nextHi[1], nextD[1]);
+ mpush (nextLo[2], nextHi[2], nextD[2]);
+ }
+}
+
+#undef mswap
+#undef mvswap
+#undef mpush
+#undef mpop
+#undef mmin
+#undef mnextsize
+#undef mnextswap
+#undef MAIN_QSORT_SMALL_THRESH
+#undef MAIN_QSORT_DEPTH_THRESH
+#undef MAIN_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+ nblock > N_OVERSHOOT
+ block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
+ ((UChar*)block32) [0 .. nblock-1] holds block
+ ptr exists for [0 .. nblock-1]
+
+ Post:
+ ((UChar*)block32) [0 .. nblock-1] holds block
+ All other areas of block32 destroyed
+ ftab [0 .. 65536 ] destroyed
+ ptr [0 .. nblock-1] holds sorted order
+ if (*budget < 0), sorting was abandoned
+*/
+
+#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
+#define SETMASK (1 << 21)
+#define CLEARMASK (~(SETMASK))
+
+static
+void mainSort ( UInt32* ptr,
+ UChar* block,
+ UInt16* quadrant,
+ UInt32* ftab,
+ Int32 nblock,
+ Int32 verb,
+ Int32* budget )
+{
+ Int32 i, j, k, ss, sb;
+ Int32 runningOrder[256];
+ Bool bigDone[256];
+ Int32 copyStart[256];
+ Int32 copyEnd [256];
+ UChar c1;
+ Int32 numQSorted;
+ UInt16 s;
+ if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" );
+
+ /*-- set up the 2-byte frequency table --*/
+ for (i = 65536; i >= 0; i--) ftab[i] = 0;
+
+ j = block[0] << 8;
+ i = nblock-1;
+ for (; i >= 3; i -= 4) {
+ quadrant[i] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+ ftab[j]++;
+ quadrant[i-1] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
+ ftab[j]++;
+ quadrant[i-2] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
+ ftab[j]++;
+ quadrant[i-3] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
+ ftab[j]++;
+ }
+ for (; i >= 0; i--) {
+ quadrant[i] = 0;
+ j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+ ftab[j]++;
+ }
+
+ /*-- (emphasises close relationship of block & quadrant) --*/
+ for (i = 0; i < BZ_N_OVERSHOOT; i++) {
+ block [nblock+i] = block[i];
+ quadrant[nblock+i] = 0;
+ }
+
+ if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" );
+
+ /*-- Complete the initial radix sort --*/
+ for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
+
+ s = block[0] << 8;
+ i = nblock-1;
+ for (; i >= 3; i -= 4) {
+ s = (s >> 8) | (block[i] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i;
+ s = (s >> 8) | (block[i-1] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i-1;
+ s = (s >> 8) | (block[i-2] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i-2;
+ s = (s >> 8) | (block[i-3] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i-3;
+ }
+ for (; i >= 0; i--) {
+ s = (s >> 8) | (block[i] << 8);
+ j = ftab[s] -1;
+ ftab[s] = j;
+ ptr[j] = i;
+ }
+
+ /*--
+ Now ftab contains the first loc of every small bucket.
+ Calculate the running order, from smallest to largest
+ big bucket.
+ --*/
+ for (i = 0; i <= 255; i++) {
+ bigDone [i] = False;
+ runningOrder[i] = i;
+ }
+
+ {
+ Int32 vv;
+ Int32 h = 1;
+ do h = 3 * h + 1; while (h <= 256);
+ do {
+ h = h / 3;
+ for (i = h; i <= 255; i++) {
+ vv = runningOrder[i];
+ j = i;
+ while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
+ runningOrder[j] = runningOrder[j-h];
+ j = j - h;
+ if (j <= (h - 1)) goto zero;
+ }
+ zero:
+ runningOrder[j] = vv;
+ }
+ } while (h != 1);
+ }
+
+ /*--
+ The main sorting loop.
+ --*/
+
+ numQSorted = 0;
+
+ for (i = 0; i <= 255; i++) {
+
+ /*--
+ Process big buckets, starting with the least full.
+ Basically this is a 3-step process in which we call
+ mainQSort3 to sort the small buckets [ss, j], but
+ also make a big effort to avoid the calls if we can.
+ --*/
+ ss = runningOrder[i];
+
+ /*--
+ Step 1:
+ Complete the big bucket [ss] by quicksorting
+ any unsorted small buckets [ss, j], for j != ss.
+ Hopefully previous pointer-scanning phases have already
+ completed many of the small buckets [ss, j], so
+ we don't have to sort them at all.
+ --*/
+ for (j = 0; j <= 255; j++) {
+ if (j != ss) {
+ sb = (ss << 8) + j;
+ if ( ! (ftab[sb] & SETMASK) ) {
+ Int32 lo = ftab[sb] & CLEARMASK;
+ Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
+ if (hi > lo) {
+ if (verb >= 4)
+ VPrintf4 ( " qsort [0x%x, 0x%x] "
+ "done %d this %d\n",
+ ss, j, numQSorted, hi - lo + 1 );
+ mainQSort3 (
+ ptr, block, quadrant, nblock,
+ lo, hi, BZ_N_RADIX, budget
+ );
+ numQSorted += (hi - lo + 1);
+ if (*budget < 0) return;
+ }
+ }
+ ftab[sb] |= SETMASK;
+ }
+ }
+
+ AssertH ( !bigDone[ss], 1006 );
+
+ /*--
+ Step 2:
+ Now scan this big bucket [ss] so as to synthesise the
+ sorted order for small buckets [t, ss] for all t,
+ including, magically, the bucket [ss,ss] too.
+ This will avoid doing Real Work in subsequent Step 1's.
+ --*/
+ {
+ for (j = 0; j <= 255; j++) {
+ copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK;
+ copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
+ }
+ for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
+ k = ptr[j]-1; if (k < 0) k += nblock;
+ c1 = block[k];
+ if (!bigDone[c1])
+ ptr[ copyStart[c1]++ ] = k;
+ }
+ for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
+ k = ptr[j]-1; if (k < 0) k += nblock;
+ c1 = block[k];
+ if (!bigDone[c1])
+ ptr[ copyEnd[c1]-- ] = k;
+ }
+ }
+
+ AssertH ( copyStart[ss]-1 == copyEnd[ss], 1007 );
+
+ for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
+
+ /*--
+ Step 3:
+ The [ss] big bucket is now done. Record this fact,
+ and update the quadrant descriptors. Remember to
+ update quadrants in the overshoot area too, if
+ necessary. The "if (i < 255)" test merely skips
+ this updating for the last bucket processed, since
+ updating for the last bucket is pointless.
+
+ The quadrant array provides a way to incrementally
+ cache sort orderings, as they appear, so as to
+ make subsequent comparisons in fullGtU() complete
+ faster. For repetitive blocks this makes a big
+ difference (but not big enough to be able to avoid
+ the fallback sorting mechanism, exponential radix sort).
+
+ The precise meaning is: at all times:
+
+ for 0 <= i < nblock and 0 <= j <= nblock
+
+ if block[i] != block[j],
+
+ then the relative values of quadrant[i] and
+ quadrant[j] are meaningless.
+
+ else {
+ if quadrant[i] < quadrant[j]
+ then the string starting at i lexicographically
+ precedes the string starting at j
+
+ else if quadrant[i] > quadrant[j]
+ then the string starting at j lexicographically
+ precedes the string starting at i
+
+ else
+ the relative ordering of the strings starting
+ at i and j has not yet been determined.
+ }
+ --*/
+ bigDone[ss] = True;
+
+ if (i < 255) {
+ Int32 bbStart = ftab[ss << 8] & CLEARMASK;
+ Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
+ Int32 shifts = 0;
+
+ while ((bbSize >> shifts) > 65534) shifts++;
+
+ for (j = bbSize-1; j >= 0; j--) {
+ Int32 a2update = ptr[bbStart + j];
+ UInt16 qVal = (UInt16)(j >> shifts);
+ quadrant[a2update] = qVal;
+ if (a2update < BZ_N_OVERSHOOT)
+ quadrant[a2update + nblock] = qVal;
+ }
+ AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
+ }
+
+ }
+
+ if (verb >= 4)
+ VPrintf3 ( " %d pointers, %d sorted, %d scanned\n",
+ nblock, numQSorted, nblock - numQSorted );
+}
+
+#undef BIGFREQ
+#undef SETMASK
+#undef CLEARMASK
+
+
+/*---------------------------------------------*/
+/* Pre:
+ nblock > 0
+ arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
+ ((UChar*)arr2) [0 .. nblock-1] holds block
+ arr1 exists for [0 .. nblock-1]
+
+ Post:
+ ((UChar*)arr2) [0 .. nblock-1] holds block
+ All other areas of block destroyed
+ ftab [ 0 .. 65536 ] destroyed
+ arr1 [0 .. nblock-1] holds sorted order
+*/
+void BZ2_blockSort ( EState* s )
+{
+ UInt32* ptr = s->ptr;
+ UChar* block = s->block;
+ UInt32* ftab = s->ftab;
+ Int32 nblock = s->nblock;
+ Int32 verb = s->verbosity;
+ Int32 wfact = s->workFactor;
+ UInt16* quadrant;
+ Int32 budget;
+ Int32 budgetInit;
+ Int32 i;
+
+ if (nblock < 10000) {
+ fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+ } else {
+ /* Calculate the location for quadrant, remembering to get
+ the alignment right. Assumes that &(block[0]) is at least
+ 2-byte aligned -- this should be ok since block is really
+ the first section of arr2.
+ */
+ i = nblock+BZ_N_OVERSHOOT;
+ if (i & 1) i++;
+ quadrant = (UInt16*)(&(block[i]));
+
+ /* (wfact-1) / 3 puts the default-factor-30
+ transition point at very roughly the same place as
+ with v0.1 and v0.9.0.
+ Not that it particularly matters any more, since the
+ resulting compressed stream is now the same regardless
+ of whether or not we use the main sort or fallback sort.
+ */
+ if (wfact < 1 ) wfact = 1;
+ if (wfact > 100) wfact = 100;
+ budgetInit = nblock * ((wfact-1) / 3);
+ budget = budgetInit;
+
+ mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
+ if (verb >= 3)
+ VPrintf3 ( " %d work, %d block, ratio %5.2f\n",
+ budgetInit - budget,
+ nblock,
+ (float)(budgetInit - budget) /
+ (float)(nblock==0 ? 1 : nblock) );
+ if (budget < 0) {
+ if (verb >= 2)
+ VPrintf0 ( " too repetitive; using fallback"
+ " sorting algorithm\n" );
+ fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+ }
+ }
+
+ s->origPtr = -1;
+ for (i = 0; i < s->nblock; i++)
+ if (ptr[i] == 0)
+ { s->origPtr = i; break; };
+
+ AssertH( s->origPtr != -1, 1003 );
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end blocksort.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/bzip2.1 b/contrib/bzip2/bzip2.1
new file mode 100644
index 0000000..7de54a0
--- /dev/null
+++ b/contrib/bzip2/bzip2.1
@@ -0,0 +1,439 @@
+.PU
+.TH bzip2 1
+.SH NAME
+bzip2, bunzip2 \- a block-sorting file compressor, v1.0
+.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 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. 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
+invokation 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.
+.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 to \-9
+Set the block size to 100 k, 200 k .. 900 k when compressing. Has no
+effect when decompressing. See MEMORY MANAGEMENT below.
+.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 "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.
+
+.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 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
+and 0.9.5,
+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
+uses 32-bit integers to represent bit positions in
+compressed files, so it cannot handle compressed files more than 512
+megabytes long. This could easily be fixed.
+
+.SH AUTHOR
+Julian Seward, jseward@acm.org.
+
+http://sourceware.cygnus.com/bzip2
+http://www.muraroa.demon.co.uk
+
+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. Many people sent patches, helped
+with portability problems, lent machines, gave advice and were generally
+helpful.
diff --git a/contrib/bzip2/bzip2.c b/contrib/bzip2/bzip2.c
new file mode 100644
index 0000000..56adfdc
--- /dev/null
+++ b/contrib/bzip2/bzip2.c
@@ -0,0 +1,2044 @@
+
+/*-----------------------------------------------------------*/
+/*--- A block-sorting, lossless compressor bzip2.c ---*/
+/*-----------------------------------------------------------*/
+
+/*--
+ This file is a part of bzip2 and/or libbzip2, a program and
+ library for lossless, block-sorting data compression.
+
+ Copyright (C) 1996-2000 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@acm.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.
+--*/
+
+
+/*----------------------------------------------------*/
+/*--- IMPORTANT ---*/
+/*----------------------------------------------------*/
+
+/*--
+ WARNING:
+ 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 disasterous loss of data.
+
+ DISCLAIMER:
+ I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE
+ USE OF THIS PROGRAM, HOWSOEVER CAUSED.
+
+ Every compression of a file implies an assumption that the
+ compressed file can be decompressed to reproduce the original.
+ Great efforts in design, coding and testing have been made to
+ ensure that this program works correctly. However, the
+ complexity of the algorithms, and, in particular, the presence
+ of various special cases in the code which occur with very low
+ but non-zero probability make it impossible to rule out the
+ possibility of bugs remaining in the program. DO NOT COMPRESS
+ ANY DATA WITH THIS PROGRAM AND/OR LIBRARY 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/libbzip2
+ has been carefully constructed and extensively tested.
+
+ PATENTS:
+ To the best of my knowledge, bzip2/libbzip2 does not use any
+ patented algorithms. However, I do not have the resources
+ available to carry out a full patent search. Therefore I cannot
+ give any guarantee of the above statement.
+--*/
+
+
+
+/*----------------------------------------------------*/
+/*--- and now for something much more pleasant :-) ---*/
+/*----------------------------------------------------*/
+
+/*---------------------------------------------*/
+/*--
+ Place a 1 beside your platform, and 0 elsewhere.
+--*/
+
+/*--
+ Generic 32-bit Unix.
+ Also works on 64-bit Unix boxes.
+--*/
+#define BZ_UNIX 1
+
+/*--
+ Win32, as seen by Jacob Navia's excellent
+ port of (Chris Fraser & David Hanson)'s excellent
+ lcc compiler.
+--*/
+#define BZ_LCCWIN32 0
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#undef BZ_LCCWIN32
+#define BZ_LCCWIN32 1
+#undef BZ_UNIX
+#define BZ_UNIX 0
+#endif
+
+
+/*---------------------------------------------*/
+/*--
+ Some stuff for all platforms.
+--*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <math.h>
+#include <errno.h>
+#include <ctype.h>
+#include "bzlib.h"
+
+#define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); }
+#define ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); }
+#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); }
+
+
+/*---------------------------------------------*/
+/*--
+ Platform-specific stuff.
+--*/
+
+#if BZ_UNIX
+# include <sys/types.h>
+# include <utime.h>
+# include <unistd.h>
+# include <sys/stat.h>
+# include <sys/times.h>
+
+# define PATH_SEP '/'
+# define MY_LSTAT lstat
+# define MY_S_IFREG S_ISREG
+# define MY_STAT stat
+
+# define APPEND_FILESPEC(root, name) \
+ root=snocString((root), (name))
+
+# define APPEND_FLAG(root, name) \
+ root=snocString((root), (name))
+
+# define SET_BINARY_MODE(fd) /**/
+
+# ifdef __GNUC__
+# define NORETURN __attribute__ ((noreturn))
+# else
+# define NORETURN /**/
+# endif
+# ifdef __DJGPP__
+# include <io.h>
+# include <fcntl.h>
+# undef MY_LSTAT
+# define MY_LSTAT stat
+# undef SET_BINARY_MODE
+# define SET_BINARY_MODE(fd) \
+ do { \
+ int retVal = setmode ( fileno ( fd ), \
+ O_BINARY ); \
+ ERROR_IF_MINUS_ONE ( retVal ); \
+ } while ( 0 )
+# endif
+# ifdef __CYGWIN__
+# include <io.h>
+# include <fcntl.h>
+# undef SET_BINARY_MODE
+# define SET_BINARY_MODE(fd) \
+ do { \
+ int retVal = setmode ( fileno ( fd ), \
+ O_BINARY ); \
+ ERROR_IF_MINUS_ONE ( retVal ); \
+ } while ( 0 )
+# endif
+#endif
+
+
+
+#if BZ_LCCWIN32
+# include <io.h>
+# include <fcntl.h>
+# include <sys\stat.h>
+
+# define NORETURN /**/
+# define PATH_SEP '\\'
+# define MY_LSTAT _stat
+# define MY_STAT _stat
+# define MY_S_IFREG(x) ((x) & _S_IFREG)
+
+# define APPEND_FLAG(root, name) \
+ root=snocString((root), (name))
+
+# if 0
+ /*-- lcc-win32 seems to expand wildcards itself --*/
+# define APPEND_FILESPEC(root, spec) \
+ do { \
+ if ((spec)[0] == '-') { \
+ root = snocString((root), (spec)); \
+ } else { \
+ struct _finddata_t c_file; \
+ long hFile; \
+ hFile = _findfirst((spec), &c_file); \
+ if ( hFile == -1L ) { \
+ root = snocString ((root), (spec)); \
+ } else { \
+ int anInt = 0; \
+ while ( anInt == 0 ) { \
+ root = snocString((root), \
+ &c_file.name[0]); \
+ anInt = _findnext(hFile, &c_file); \
+ } \
+ } \
+ } \
+ } while ( 0 )
+# else
+# define APPEND_FILESPEC(root, name) \
+ root = snocString ((root), (name))
+# endif
+
+# define SET_BINARY_MODE(fd) \
+ do { \
+ int retVal = setmode ( fileno ( fd ), \
+ O_BINARY ); \
+ ERROR_IF_MINUS_ONE ( retVal ); \
+ } while ( 0 )
+
+#endif
+
+
+/*---------------------------------------------*/
+/*--
+ Some more stuff for all platforms :-)
+--*/
+
+typedef char Char;
+typedef unsigned char Bool;
+typedef unsigned char UChar;
+typedef int Int32;
+typedef unsigned int UInt32;
+typedef short Int16;
+typedef unsigned short UInt16;
+
+#define True ((Bool)1)
+#define False ((Bool)0)
+
+/*--
+ IntNative is your platform's `native' int size.
+ Only here to avoid probs with 64-bit platforms.
+--*/
+typedef int IntNative;
+
+
+/*---------------------------------------------------*/
+/*--- Misc (file handling) data decls ---*/
+/*---------------------------------------------------*/
+
+Int32 verbosity;
+Bool keepInputFiles, smallMode, deleteOutputOnInterrupt;
+Bool forceOverwrite, testFailsExist, unzFailsExist, noisy;
+Int32 numFileNames, numFilesProcessed, blockSize100k;
+Int32 exitValue;
+
+/*-- source modes; F==file, I==stdin, O==stdout --*/
+#define SM_I2O 1
+#define SM_F2O 2
+#define SM_F2F 3
+
+/*-- operation modes --*/
+#define OM_Z 1
+#define OM_UNZ 2
+#define OM_TEST 3
+
+Int32 opMode;
+Int32 srcMode;
+
+#define FILE_NAME_LEN 1034
+
+Int32 longestFileName;
+Char inName [FILE_NAME_LEN];
+Char outName[FILE_NAME_LEN];
+Char tmpName[FILE_NAME_LEN];
+Char *progName;
+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 copyFileName ( Char*, Char* );
+static void* myMalloc ( Int32 );
+
+
+
+/*---------------------------------------------------*/
+/*--- An implementation of 64-bit ints. Sigh. ---*/
+/*--- Roll on widespread deployment of ANSI C9X ! ---*/
+/*---------------------------------------------------*/
+
+typedef
+ struct { UChar b[8]; }
+ UInt64;
+
+static
+void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
+{
+ n->b[7] = (UChar)((hi32 >> 24) & 0xFF);
+ n->b[6] = (UChar)((hi32 >> 16) & 0xFF);
+ n->b[5] = (UChar)((hi32 >> 8) & 0xFF);
+ n->b[4] = (UChar) (hi32 & 0xFF);
+ n->b[3] = (UChar)((lo32 >> 24) & 0xFF);
+ n->b[2] = (UChar)((lo32 >> 16) & 0xFF);
+ n->b[1] = (UChar)((lo32 >> 8) & 0xFF);
+ n->b[0] = (UChar) (lo32 & 0xFF);
+}
+
+static
+double uInt64_to_double ( UInt64* n )
+{
+ Int32 i;
+ double base = 1.0;
+ double sum = 0.0;
+ for (i = 0; i < 8; i++) {
+ sum += base * (double)(n->b[i]);
+ base *= 256.0;
+ }
+ return sum;
+}
+
+static
+void uInt64_add ( UInt64* src, UInt64* dst )
+{
+ Int32 i;
+ Int32 carry = 0;
+ for (i = 0; i < 8; i++) {
+ carry += ( ((Int32)src->b[i]) + ((Int32)dst->b[i]) );
+ dst->b[i] = (UChar)(carry & 0xFF);
+ carry >>= 8;
+ }
+}
+
+static
+void uInt64_sub ( UInt64* src, UInt64* dst )
+{
+ Int32 t, i;
+ Int32 borrow = 0;
+ for (i = 0; i < 8; i++) {
+ t = ((Int32)dst->b[i]) - ((Int32)src->b[i]) - borrow;
+ if (t < 0) {
+ dst->b[i] = (UChar)(t + 256);
+ borrow = 1;
+ } else {
+ dst->b[i] = (UChar)t;
+ borrow = 0;
+ }
+ }
+}
+
+static
+void uInt64_mul ( UInt64* a, UInt64* b, UInt64* r_hi, UInt64* r_lo )
+{
+ UChar sum[16];
+ Int32 ia, ib, carry;
+ for (ia = 0; ia < 16; ia++) sum[ia] = 0;
+ for (ia = 0; ia < 8; ia++) {
+ carry = 0;
+ for (ib = 0; ib < 8; ib++) {
+ carry += ( ((Int32)sum[ia+ib])
+ + ((Int32)a->b[ia]) * ((Int32)b->b[ib]) );
+ sum[ia+ib] = (UChar)(carry & 0xFF);
+ carry >>= 8;
+ }
+ sum[ia+8] = (UChar)(carry & 0xFF);
+ if ((carry >>= 8) != 0) panic ( "uInt64_mul" );
+ }
+
+ for (ia = 0; ia < 8; ia++) r_hi->b[ia] = sum[ia+8];
+ for (ia = 0; ia < 8; ia++) r_lo->b[ia] = sum[ia];
+}
+
+
+static
+void uInt64_shr1 ( UInt64* n )
+{
+ Int32 i;
+ for (i = 0; i < 8; i++) {
+ n->b[i] >>= 1;
+ if (i < 7 && (n->b[i+1] & 1)) n->b[i] |= 0x80;
+ }
+}
+
+static
+void uInt64_shl1 ( UInt64* n )
+{
+ Int32 i;
+ for (i = 7; i >= 0; i--) {
+ n->b[i] <<= 1;
+ if (i > 0 && (n->b[i-1] & 0x80)) n->b[i]++;
+ }
+}
+
+static
+Bool uInt64_isZero ( UInt64* n )
+{
+ Int32 i;
+ for (i = 0; i < 8; i++)
+ if (n->b[i] != 0) return 0;
+ return 1;
+}
+
+static
+Int32 uInt64_qrm10 ( UInt64* n )
+{
+ /* Divide *n by 10, and return the remainder. Long division
+ is difficult, so we cheat and instead multiply by
+ 0xCCCC CCCC CCCC CCCD, which is 0.8 (viz, 0.1 << 3).
+ */
+ Int32 i;
+ UInt64 tmp1, tmp2, n_orig, zero_point_eight;
+
+ zero_point_eight.b[1] = zero_point_eight.b[2] =
+ zero_point_eight.b[3] = zero_point_eight.b[4] =
+ zero_point_eight.b[5] = zero_point_eight.b[6] =
+ zero_point_eight.b[7] = 0xCC;
+ zero_point_eight.b[0] = 0xCD;
+
+ n_orig = *n;
+
+ /* divide n by 10,
+ by multiplying by 0.8 and then shifting right 3 times */
+ uInt64_mul ( n, &zero_point_eight, &tmp1, &tmp2 );
+ uInt64_shr1(&tmp1); uInt64_shr1(&tmp1); uInt64_shr1(&tmp1);
+ *n = tmp1;
+
+ /* tmp1 = 8*n, tmp2 = 2*n */
+ uInt64_shl1(&tmp1); uInt64_shl1(&tmp1); uInt64_shl1(&tmp1);
+ tmp2 = *n; uInt64_shl1(&tmp2);
+
+ /* tmp1 = 10*n */
+ uInt64_add ( &tmp2, &tmp1 );
+
+ /* n_orig = n_orig - 10*n */
+ uInt64_sub ( &tmp1, &n_orig );
+
+ /* n_orig should now hold quotient, in range 0 .. 9 */
+ for (i = 7; i >= 1; i--)
+ if (n_orig.b[i] != 0) panic ( "uInt64_qrm10(1)" );
+ if (n_orig.b[0] > 9)
+ panic ( "uInt64_qrm10(2)" );
+
+ return (int)n_orig.b[0];
+}
+
+/* ... and the Whole Entire Point of all this UInt64 stuff is
+ so that we can supply the following function.
+*/
+static
+void uInt64_toAscii ( char* outbuf, UInt64* n )
+{
+ Int32 i, q;
+ UChar buf[32];
+ Int32 nBuf = 0;
+ UInt64 n_copy = *n;
+ do {
+ q = uInt64_qrm10 ( &n_copy );
+ buf[nBuf] = q + '0';
+ nBuf++;
+ } while (!uInt64_isZero(&n_copy));
+ outbuf[nBuf] = 0;
+ for (i = 0; i < nBuf; i++) outbuf[i] = buf[nBuf-i-1];
+}
+
+
+/*---------------------------------------------------*/
+/*--- Processing of complete files and streams ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+Bool myfeof ( FILE* f )
+{
+ Int32 c = fgetc ( f );
+ if (c == EOF) return True;
+ ungetc ( c, f );
+ return False;
+}
+
+
+/*---------------------------------------------*/
+static
+void compressStream ( FILE *stream, FILE *zStream )
+{
+ BZFILE* bzf = NULL;
+ UChar ibuf[5000];
+ Int32 nIbuf;
+ UInt32 nbytes_in_lo32, nbytes_in_hi32;
+ UInt32 nbytes_out_lo32, nbytes_out_hi32;
+ Int32 bzerr, bzerr_dummy, ret;
+
+ SET_BINARY_MODE(stream);
+ SET_BINARY_MODE(zStream);
+
+ if (ferror(stream)) goto errhandler_io;
+ if (ferror(zStream)) goto errhandler_io;
+
+ bzf = BZ2_bzWriteOpen ( &bzerr, zStream,
+ blockSize100k, verbosity, workFactor );
+ if (bzerr != BZ_OK) goto errhandler;
+
+ if (verbosity >= 2) fprintf ( stderr, "\n" );
+
+ while (True) {
+
+ if (myfeof(stream)) break;
+ nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream );
+ if (ferror(stream)) goto errhandler_io;
+ if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf );
+ if (bzerr != BZ_OK) goto errhandler;
+
+ }
+
+ BZ2_bzWriteClose64 ( &bzerr, bzf, 0,
+ &nbytes_in_lo32, &nbytes_in_hi32,
+ &nbytes_out_lo32, &nbytes_out_hi32 );
+ if (bzerr != BZ_OK) goto errhandler;
+
+ if (ferror(zStream)) goto errhandler_io;
+ ret = fflush ( zStream );
+ if (ret == EOF) goto errhandler_io;
+ if (zStream != stdout) {
+ ret = fclose ( zStream );
+ if (ret == EOF) goto errhandler_io;
+ }
+ if (ferror(stream)) goto errhandler_io;
+ ret = fclose ( stream );
+ if (ret == EOF) goto errhandler_io;
+
+ if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0)
+ nbytes_in_lo32 = 1;
+
+ if (verbosity >= 1) {
+ Char buf_nin[32], buf_nout[32];
+ UInt64 nbytes_in, nbytes_out;
+ double nbytes_in_d, nbytes_out_d;
+ uInt64_from_UInt32s ( &nbytes_in,
+ nbytes_in_lo32, nbytes_in_hi32 );
+ uInt64_from_UInt32s ( &nbytes_out,
+ nbytes_out_lo32, nbytes_out_hi32 );
+ nbytes_in_d = uInt64_to_double ( &nbytes_in );
+ nbytes_out_d = uInt64_to_double ( &nbytes_out );
+ uInt64_toAscii ( buf_nin, &nbytes_in );
+ uInt64_toAscii ( buf_nout, &nbytes_out );
+ fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
+ "%5.2f%% saved, %s in, %s out.\n",
+ nbytes_in_d / nbytes_out_d,
+ (8.0 * nbytes_out_d) / nbytes_in_d,
+ 100.0 * (1.0 - nbytes_out_d / nbytes_in_d),
+ buf_nin,
+ buf_nout
+ );
+ }
+
+ return;
+
+ errhandler:
+ BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1,
+ &nbytes_in_lo32, &nbytes_in_hi32,
+ &nbytes_out_lo32, &nbytes_out_hi32 );
+ switch (bzerr) {
+ case BZ_CONFIG_ERROR:
+ configError(); break;
+ case BZ_MEM_ERROR:
+ outOfMemory (); break;
+ case BZ_IO_ERROR:
+ errhandler_io:
+ ioError(); break;
+ default:
+ panic ( "compress:unexpected error" );
+ }
+
+ panic ( "compress:end" );
+ /*notreached*/
+}
+
+
+
+/*---------------------------------------------*/
+static
+Bool uncompressStream ( FILE *zStream, FILE *stream )
+{
+ BZFILE* bzf = NULL;
+ Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i;
+ UChar obuf[5000];
+ UChar unused[BZ_MAX_UNUSED];
+ Int32 nUnused;
+ UChar* unusedTmp;
+
+ nUnused = 0;
+ streamNo = 0;
+
+ SET_BINARY_MODE(stream);
+ SET_BINARY_MODE(zStream);
+
+ if (ferror(stream)) goto errhandler_io;
+ if (ferror(zStream)) goto errhandler_io;
+
+ while (True) {
+
+ bzf = BZ2_bzReadOpen (
+ &bzerr, zStream, verbosity,
+ (int)smallMode, unused, nUnused
+ );
+ if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+ streamNo++;
+
+ while (bzerr == BZ_OK) {
+ nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+ if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
+ if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
+ fwrite ( obuf, sizeof(UChar), nread, stream );
+ if (ferror(stream)) goto errhandler_io;
+ }
+ if (bzerr != BZ_STREAM_END) goto errhandler;
+
+ BZ2_bzReadGetUnused ( &bzerr, bzf, (void**)(&unusedTmp), &nUnused );
+ if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+ for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+ BZ2_bzReadClose ( &bzerr, bzf );
+ if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+ if (nUnused == 0 && myfeof(zStream)) break;
+
+ }
+
+ if (ferror(zStream)) goto errhandler_io;
+ ret = fclose ( zStream );
+ if (ret == EOF) goto errhandler_io;
+
+ if (ferror(stream)) goto errhandler_io;
+ ret = fflush ( stream );
+ if (ret != 0) goto errhandler_io;
+ if (stream != stdout) {
+ ret = fclose ( stream );
+ if (ret == EOF) goto errhandler_io;
+ }
+ if (verbosity >= 2) fprintf ( stderr, "\n " );
+ return True;
+
+ errhandler:
+ BZ2_bzReadClose ( &bzerr_dummy, bzf );
+ switch (bzerr) {
+ case BZ_CONFIG_ERROR:
+ configError(); break;
+ case BZ_IO_ERROR:
+ errhandler_io:
+ ioError(); break;
+ case BZ_DATA_ERROR:
+ crcError();
+ case BZ_MEM_ERROR:
+ outOfMemory();
+ case BZ_UNEXPECTED_EOF:
+ compressedStreamEOF();
+ case BZ_DATA_ERROR_MAGIC:
+ if (zStream != stdin) fclose(zStream);
+ if (stream != stdout) fclose(stream);
+ if (streamNo == 1) {
+ return False;
+ } else {
+ if (noisy)
+ fprintf ( stderr,
+ "\n%s: %s: trailing garbage after EOF ignored\n",
+ progName, inName );
+ return True;
+ }
+ default:
+ panic ( "decompress:unexpected error" );
+ }
+
+ panic ( "decompress:end" );
+ return True; /*notreached*/
+}
+
+
+/*---------------------------------------------*/
+static
+Bool testStream ( FILE *zStream )
+{
+ BZFILE* bzf = NULL;
+ Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i;
+ UChar obuf[5000];
+ UChar unused[BZ_MAX_UNUSED];
+ Int32 nUnused;
+ UChar* unusedTmp;
+
+ nUnused = 0;
+ streamNo = 0;
+
+ SET_BINARY_MODE(zStream);
+ if (ferror(zStream)) goto errhandler_io;
+
+ while (True) {
+
+ bzf = BZ2_bzReadOpen (
+ &bzerr, zStream, verbosity,
+ (int)smallMode, unused, nUnused
+ );
+ if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+ streamNo++;
+
+ while (bzerr == BZ_OK) {
+ nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+ if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
+ }
+ if (bzerr != BZ_STREAM_END) goto errhandler;
+
+ BZ2_bzReadGetUnused ( &bzerr, bzf, (void**)(&unusedTmp), &nUnused );
+ if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+
+ for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+ BZ2_bzReadClose ( &bzerr, bzf );
+ if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+ if (nUnused == 0 && myfeof(zStream)) break;
+
+ }
+
+ if (ferror(zStream)) goto errhandler_io;
+ ret = fclose ( zStream );
+ if (ret == EOF) goto errhandler_io;
+
+ if (verbosity >= 2) fprintf ( stderr, "\n " );
+ return True;
+
+ errhandler:
+ BZ2_bzReadClose ( &bzerr_dummy, bzf );
+ if (verbosity == 0)
+ fprintf ( stderr, "%s: %s: ", progName, inName );
+ switch (bzerr) {
+ case BZ_CONFIG_ERROR:
+ configError(); break;
+ case BZ_IO_ERROR:
+ errhandler_io:
+ ioError(); break;
+ case BZ_DATA_ERROR:
+ fprintf ( stderr,
+ "data integrity (CRC) error in data\n" );
+ return False;
+ case BZ_MEM_ERROR:
+ outOfMemory();
+ case BZ_UNEXPECTED_EOF:
+ fprintf ( stderr,
+ "file ends unexpectedly\n" );
+ return False;
+ case BZ_DATA_ERROR_MAGIC:
+ if (zStream != stdin) fclose(zStream);
+ if (streamNo == 1) {
+ fprintf ( stderr,
+ "bad magic number (file not created by bzip2)\n" );
+ return False;
+ } else {
+ if (noisy)
+ fprintf ( stderr,
+ "trailing garbage after EOF ignored\n" );
+ return True;
+ }
+ default:
+ panic ( "test:unexpected error" );
+ }
+
+ panic ( "test:end" );
+ return True; /*notreached*/
+}
+
+
+/*---------------------------------------------------*/
+/*--- Error [non-] handling grunge ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+void setExit ( Int32 v )
+{
+ if (v > exitValue) exitValue = v;
+}
+
+
+/*---------------------------------------------*/
+static
+void cadvise ( void )
+{
+ if (noisy)
+ fprintf (
+ stderr,
+ "\nIt is possible that the compressed file(s) have become corrupted.\n"
+ "You can use the -tvv option to test integrity of such files.\n\n"
+ "You can use the `bzip2recover' program to *attempt* to recover\n"
+ "data from undamaged sections of corrupted files.\n\n"
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void showFileNames ( void )
+{
+ if (noisy)
+ fprintf (
+ stderr,
+ "\tInput file = %s, output file = %s\n",
+ inName, outName
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void cleanUpAndFail ( Int32 ec )
+{
+ IntNative retVal;
+
+ if ( srcMode == SM_F2F
+ && opMode != OM_TEST
+ && deleteOutputOnInterrupt ) {
+ if (noisy)
+ fprintf ( stderr, "%s: Deleting output file %s, if it exists.\n",
+ progName, outName );
+ if (outputHandleJustInCase != NULL)
+ fclose ( outputHandleJustInCase );
+ retVal = remove ( outName );
+ if (retVal != 0)
+ fprintf ( stderr,
+ "%s: WARNING: deletion of output file (apparently) failed.\n",
+ progName );
+ }
+ if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {
+ fprintf ( stderr,
+ "%s: WARNING: some files have not been processed:\n"
+ "\t%d specified on command line, %d not processed yet.\n\n",
+ progName, numFileNames,
+ numFileNames - numFilesProcessed );
+ }
+ setExit(ec);
+ exit(exitValue);
+}
+
+
+/*---------------------------------------------*/
+static
+void panic ( Char* s )
+{
+ fprintf ( stderr,
+ "\n%s: PANIC -- internal consistency error:\n"
+ "\t%s\n"
+ "\tThis is a BUG. Please report it to me at:\n"
+ "\tjseward@acm.org\n",
+ progName, s );
+ showFileNames();
+ cleanUpAndFail( 3 );
+}
+
+
+/*---------------------------------------------*/
+static
+void crcError ( void )
+{
+ fprintf ( stderr,
+ "\n%s: Data integrity error when decompressing.\n",
+ progName );
+ showFileNames();
+ cadvise();
+ cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static
+void compressedStreamEOF ( void )
+{
+ fprintf ( stderr,
+ "\n%s: Compressed file ends unexpectedly;\n\t"
+ "perhaps it is corrupted? *Possible* reason follows.\n",
+ progName );
+ perror ( progName );
+ showFileNames();
+ cadvise();
+ cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static
+void ioError ( void )
+{
+ fprintf ( stderr,
+ "\n%s: I/O or other error, bailing out. "
+ "Possible reason follows.\n",
+ progName );
+ perror ( progName );
+ showFileNames();
+ cleanUpAndFail( 1 );
+}
+
+
+/*---------------------------------------------*/
+static
+void mySignalCatcher ( IntNative n )
+{
+ fprintf ( stderr,
+ "\n%s: Control-C or similar caught, quitting.\n",
+ progName );
+ cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static
+void mySIGSEGVorSIGBUScatcher ( IntNative n )
+{
+ if (opMode == OM_Z)
+ fprintf (
+ stderr,
+ "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\n"
+ "\n"
+ " Possible causes are (most likely first):\n"
+ " (1) This computer has unreliable memory or cache hardware\n"
+ " (a surprisingly common problem; try a different machine.)\n"
+ " (2) A bug in the compiler used to create this executable\n"
+ " (unlikely, if you didn't compile bzip2 yourself.)\n"
+ " (3) A real bug in bzip2 -- I hope this should never be the case.\n"
+ " The user's manual, Section 4.3, has more info on (1) and (2).\n"
+ " \n"
+ " If you suspect this is a bug in bzip2, or are unsure about (1)\n"
+ " or (2), feel free to report it to me at: jseward@acm.org.\n"
+ " Section 4.3 of the user's manual describes the info a useful\n"
+ " bug report should have. If the manual is available on your\n"
+ " system, please try and read it before mailing me. If you don't\n"
+ " have the manual or can't be bothered to read it, mail me anyway.\n"
+ "\n",
+ progName );
+ else
+ fprintf (
+ stderr,
+ "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\n"
+ "\n"
+ " Possible causes are (most likely first):\n"
+ " (1) The compressed data is corrupted, and bzip2's usual checks\n"
+ " failed to detect this. Try bzip2 -tvv my_file.bz2.\n"
+ " (2) This computer has unreliable memory or cache hardware\n"
+ " (a surprisingly common problem; try a different machine.)\n"
+ " (3) A bug in the compiler used to create this executable\n"
+ " (unlikely, if you didn't compile bzip2 yourself.)\n"
+ " (4) A real bug in bzip2 -- I hope this should never be the case.\n"
+ " The user's manual, Section 4.3, has more info on (2) and (3).\n"
+ " \n"
+ " If you suspect this is a bug in bzip2, or are unsure about (2)\n"
+ " or (3), feel free to report it to me at: jseward@acm.org.\n"
+ " Section 4.3 of the user's manual describes the info a useful\n"
+ " bug report should have. If the manual is available on your\n"
+ " system, please try and read it before mailing me. If you don't\n"
+ " have the manual or can't be bothered to read it, mail me anyway.\n"
+ "\n",
+ progName );
+
+ showFileNames();
+ if (opMode == OM_Z)
+ cleanUpAndFail( 3 ); else
+ { cadvise(); cleanUpAndFail( 2 ); }
+}
+
+
+/*---------------------------------------------*/
+static
+void outOfMemory ( void )
+{
+ fprintf ( stderr,
+ "\n%s: couldn't allocate enough memory\n",
+ progName );
+ showFileNames();
+ cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static
+void configError ( void )
+{
+ fprintf ( stderr,
+ "bzip2: I'm not configured correctly for this platform!\n"
+ "\tI require Int32, Int16 and Char to have sizes\n"
+ "\tof 4, 2 and 1 bytes to run properly, and they don't.\n"
+ "\tProbably you can fix this by defining them correctly,\n"
+ "\tand recompiling. Bye!\n" );
+ setExit(3);
+ exit(exitValue);
+}
+
+
+/*---------------------------------------------------*/
+/*--- The main driver machinery ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+void pad ( Char *s )
+{
+ Int32 i;
+ if ( (Int32)strlen(s) >= longestFileName ) return;
+ for (i = 1; i <= longestFileName - (Int32)strlen(s); i++)
+ fprintf ( stderr, " " );
+}
+
+
+/*---------------------------------------------*/
+static
+void copyFileName ( Char* to, Char* from )
+{
+ if ( strlen(from) > FILE_NAME_LEN-10 ) {
+ fprintf (
+ stderr,
+ "bzip2: file name\n`%s'\n"
+ "is suspiciously (more than %d chars) long.\n"
+ "Try using a reasonable file name instead. Sorry! :-)\n",
+ from, FILE_NAME_LEN-10
+ );
+ setExit(1);
+ exit(exitValue);
+ }
+
+ strncpy(to,from,FILE_NAME_LEN-10);
+ to[FILE_NAME_LEN-10]='\0';
+}
+
+
+/*---------------------------------------------*/
+static
+Bool fileExists ( Char* name )
+{
+ FILE *tmp = fopen ( name, "rb" );
+ Bool exists = (tmp != NULL);
+ if (tmp != NULL) fclose ( tmp );
+ return exists;
+}
+
+
+/*---------------------------------------------*/
+/*--
+ if in doubt, return True
+--*/
+static
+Bool notAStandardFile ( Char* name )
+{
+ IntNative i;
+ struct MY_STAT statBuf;
+
+ i = MY_LSTAT ( name, &statBuf );
+ if (i != 0) return True;
+ if (MY_S_IFREG(statBuf.st_mode)) return False;
+ return True;
+}
+
+
+/*---------------------------------------------*/
+/*--
+ rac 11/21/98 see if file has hard links to it
+--*/
+static
+Int32 countHardLinks ( Char* name )
+{
+ IntNative i;
+ struct MY_STAT statBuf;
+
+ i = MY_LSTAT ( name, &statBuf );
+ if (i != 0) return 0;
+ return (statBuf.st_nlink - 1);
+}
+
+
+/*---------------------------------------------*/
+static
+void copyDatePermissionsAndOwner ( Char *srcName, Char *dstName )
+{
+#if BZ_UNIX
+ IntNative retVal;
+ struct MY_STAT statBuf;
+ struct utimbuf uTimBuf;
+
+ retVal = MY_LSTAT ( srcName, &statBuf );
+ ERROR_IF_NOT_ZERO ( retVal );
+ uTimBuf.actime = statBuf.st_atime;
+ uTimBuf.modtime = statBuf.st_mtime;
+
+ retVal = chmod ( dstName, statBuf.st_mode );
+ ERROR_IF_NOT_ZERO ( retVal );
+
+ retVal = utime ( dstName, &uTimBuf );
+ ERROR_IF_NOT_ZERO ( retVal );
+
+ retVal = chown ( dstName, statBuf.st_uid, statBuf.st_gid );
+ /* chown() will in many cases return with EPERM, which can
+ be safely ignored.
+ */
+#endif
+}
+
+
+/*---------------------------------------------*/
+static
+void setInterimPermissions ( Char *dstName )
+{
+#if BZ_UNIX
+ IntNative retVal;
+ retVal = chmod ( dstName, S_IRUSR | S_IWUSR );
+ ERROR_IF_NOT_ZERO ( retVal );
+#endif
+}
+
+
+/*---------------------------------------------*/
+static
+Bool containsDubiousChars ( Char* name )
+{
+ Bool cdc = False;
+ for (; *name != '\0'; name++)
+ if (*name == '?' || *name == '*') cdc = True;
+ return cdc;
+}
+
+
+/*---------------------------------------------*/
+#define BZ_N_SUFFIX_PAIRS 4
+
+Char* zSuffix[BZ_N_SUFFIX_PAIRS]
+ = { ".bz2", ".bz", ".tbz2", ".tbz" };
+Char* unzSuffix[BZ_N_SUFFIX_PAIRS]
+ = { "", "", ".tar", ".tar" };
+
+static
+Bool hasSuffix ( Char* s, Char* suffix )
+{
+ Int32 ns = strlen(s);
+ Int32 nx = strlen(suffix);
+ if (ns < nx) return False;
+ if (strcmp(s + ns - nx, suffix) == 0) return True;
+ return False;
+}
+
+static
+Bool mapSuffix ( Char* name,
+ Char* oldSuffix, Char* newSuffix )
+{
+ if (!hasSuffix(name,oldSuffix)) return False;
+ name[strlen(name)-strlen(oldSuffix)] = 0;
+ strcat ( name, newSuffix );
+ return True;
+}
+
+
+/*---------------------------------------------*/
+static
+void compress ( Char *name )
+{
+ FILE *inStr;
+ FILE *outStr;
+ Int32 n, i;
+
+ deleteOutputOnInterrupt = False;
+
+ if (name == NULL && srcMode != SM_I2O)
+ panic ( "compress: bad modes\n" );
+
+ switch (srcMode) {
+ case SM_I2O:
+ copyFileName ( inName, "(stdin)" );
+ copyFileName ( outName, "(stdout)" );
+ break;
+ case SM_F2F:
+ copyFileName ( inName, name );
+ copyFileName ( outName, name );
+ strcat ( outName, ".bz2" );
+ break;
+ case SM_F2O:
+ copyFileName ( inName, name );
+ copyFileName ( outName, "(stdout)" );
+ break;
+ }
+
+ if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+ if (noisy)
+ fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ }
+ for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) {
+ if (hasSuffix(inName, zSuffix[i])) {
+ if (noisy)
+ fprintf ( stderr,
+ "%s: Input file %s already has %s suffix.\n",
+ progName, inName, zSuffix[i] );
+ setExit(1);
+ return;
+ }
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+ if (noisy)
+ fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite && fileExists ( outName ) ) {
+ fprintf ( stderr, "%s: Output file %s already exists.\n",
+ progName, outName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite &&
+ (n=countHardLinks ( inName )) > 0) {
+ fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+ progName, inName, n, n > 1 ? "s" : "" );
+ setExit(1);
+ return;
+ }
+
+ switch ( srcMode ) {
+
+ case SM_I2O:
+ inStr = stdin;
+ outStr = stdout;
+ if ( isatty ( fileno ( stdout ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't write compressed data to a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2O:
+ inStr = fopen ( inName, "rb" );
+ outStr = stdout;
+ if ( isatty ( fileno ( stdout ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't write compressed data to a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ };
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2F:
+ inStr = fopen ( inName, "rb" );
+ outStr = fopen ( outName, "wb" );
+ if ( outStr == NULL) {
+ fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+ progName, outName, strerror(errno) );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ }
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ if ( outStr != NULL ) fclose ( outStr );
+ setExit(1);
+ return;
+ };
+ setInterimPermissions ( outName );
+ break;
+
+ default:
+ panic ( "compress: bad srcMode" );
+ break;
+ }
+
+ if (verbosity >= 1) {
+ fprintf ( stderr, " %s: ", inName );
+ pad ( inName );
+ fflush ( stderr );
+ }
+
+ /*--- Now the input and output handles are sane. Do the Biz. ---*/
+ outputHandleJustInCase = outStr;
+ deleteOutputOnInterrupt = True;
+ compressStream ( inStr, outStr );
+ outputHandleJustInCase = NULL;
+
+ /*--- If there was an I/O error, we won't get here. ---*/
+ if ( srcMode == SM_F2F ) {
+ copyDatePermissionsAndOwner ( inName, outName );
+ deleteOutputOnInterrupt = False;
+ if ( !keepInputFiles ) {
+ IntNative retVal = remove ( inName );
+ ERROR_IF_NOT_ZERO ( retVal );
+ }
+ }
+
+ deleteOutputOnInterrupt = False;
+}
+
+
+/*---------------------------------------------*/
+static
+void uncompress ( Char *name )
+{
+ FILE *inStr;
+ FILE *outStr;
+ Int32 n, i;
+ Bool magicNumberOK;
+ Bool cantGuess;
+
+ deleteOutputOnInterrupt = False;
+
+ if (name == NULL && srcMode != SM_I2O)
+ panic ( "uncompress: bad modes\n" );
+
+ cantGuess = False;
+ switch (srcMode) {
+ case SM_I2O:
+ copyFileName ( inName, "(stdin)" );
+ copyFileName ( outName, "(stdout)" );
+ break;
+ case SM_F2F:
+ copyFileName ( inName, name );
+ copyFileName ( outName, name );
+ for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)
+ if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))
+ goto zzz;
+ cantGuess = True;
+ strcat ( outName, ".out" );
+ break;
+ case SM_F2O:
+ copyFileName ( inName, name );
+ copyFileName ( outName, "(stdout)" );
+ break;
+ }
+
+ zzz:
+ if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+ if (noisy)
+ fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+ if (noisy)
+ fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( /* srcMode == SM_F2F implied && */ cantGuess ) {
+ if (noisy)
+ fprintf ( stderr,
+ "%s: Can't guess original name for %s -- using %s\n",
+ progName, inName, outName );
+ /* just a warning, no return */
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite && fileExists ( outName ) ) {
+ fprintf ( stderr, "%s: Output file %s already exists.\n",
+ progName, outName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode == SM_F2F && !forceOverwrite &&
+ (n=countHardLinks ( inName ) ) > 0) {
+ fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+ progName, inName, n, n > 1 ? "s" : "" );
+ setExit(1);
+ return;
+ }
+
+ switch ( srcMode ) {
+
+ case SM_I2O:
+ inStr = stdin;
+ outStr = stdout;
+ if ( isatty ( fileno ( stdin ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't read compressed data from a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2O:
+ inStr = fopen ( inName, "rb" );
+ outStr = stdout;
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+ progName, inName, strerror(errno) );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ };
+ break;
+
+ case SM_F2F:
+ inStr = fopen ( inName, "rb" );
+ outStr = fopen ( outName, "wb" );
+ if ( outStr == NULL) {
+ fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+ progName, outName, strerror(errno) );
+ if ( inStr != NULL ) fclose ( inStr );
+ setExit(1);
+ return;
+ }
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+ progName, inName, strerror(errno) );
+ if ( outStr != NULL ) fclose ( outStr );
+ setExit(1);
+ return;
+ };
+ setInterimPermissions ( outName );
+ break;
+
+ default:
+ panic ( "uncompress: bad srcMode" );
+ break;
+ }
+
+ if (verbosity >= 1) {
+ fprintf ( stderr, " %s: ", inName );
+ pad ( inName );
+ fflush ( stderr );
+ }
+
+ /*--- Now the input and output handles are sane. Do the Biz. ---*/
+ outputHandleJustInCase = outStr;
+ deleteOutputOnInterrupt = True;
+ magicNumberOK = uncompressStream ( inStr, outStr );
+ outputHandleJustInCase = NULL;
+
+ /*--- If there was an I/O error, we won't get here. ---*/
+ if ( magicNumberOK ) {
+ if ( srcMode == SM_F2F ) {
+ copyDatePermissionsAndOwner ( inName, outName );
+ deleteOutputOnInterrupt = False;
+ if ( !keepInputFiles ) {
+ IntNative retVal = remove ( inName );
+ ERROR_IF_NOT_ZERO ( retVal );
+ }
+ }
+ } else {
+ unzFailsExist = True;
+ deleteOutputOnInterrupt = False;
+ if ( srcMode == SM_F2F ) {
+ IntNative retVal = remove ( outName );
+ ERROR_IF_NOT_ZERO ( retVal );
+ }
+ }
+ deleteOutputOnInterrupt = False;
+
+ if ( magicNumberOK ) {
+ if (verbosity >= 1)
+ fprintf ( stderr, "done\n" );
+ } else {
+ setExit(2);
+ if (verbosity >= 1)
+ fprintf ( stderr, "not a bzip2 file.\n" ); else
+ fprintf ( stderr,
+ "%s: %s is not a bzip2 file.\n",
+ progName, inName );
+ }
+
+}
+
+
+/*---------------------------------------------*/
+static
+void testf ( Char *name )
+{
+ FILE *inStr;
+ Bool allOK;
+
+ deleteOutputOnInterrupt = False;
+
+ if (name == NULL && srcMode != SM_I2O)
+ panic ( "testf: bad modes\n" );
+
+ copyFileName ( outName, "(none)" );
+ switch (srcMode) {
+ case SM_I2O: copyFileName ( inName, "(stdin)" ); break;
+ case SM_F2F: copyFileName ( inName, name ); break;
+ case SM_F2O: copyFileName ( inName, name ); break;
+ }
+
+ if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+ if (noisy)
+ fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+ progName, inName );
+ setExit(1);
+ return;
+ }
+ if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+ fprintf ( stderr, "%s: Can't open input %s: %s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ }
+
+ switch ( srcMode ) {
+
+ case SM_I2O:
+ if ( isatty ( fileno ( stdin ) ) ) {
+ fprintf ( stderr,
+ "%s: I won't read compressed data from a terminal.\n",
+ progName );
+ fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+ progName, progName );
+ setExit(1);
+ return;
+ };
+ inStr = stdin;
+ break;
+
+ case SM_F2O: case SM_F2F:
+ inStr = fopen ( inName, "rb" );
+ if ( inStr == NULL ) {
+ fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+ progName, inName, strerror(errno) );
+ setExit(1);
+ return;
+ };
+ break;
+
+ default:
+ panic ( "testf: bad srcMode" );
+ break;
+ }
+
+ if (verbosity >= 1) {
+ fprintf ( stderr, " %s: ", inName );
+ pad ( inName );
+ fflush ( stderr );
+ }
+
+ /*--- Now the input handle is sane. Do the Biz. ---*/
+ allOK = testStream ( inStr );
+
+ if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
+ if (!allOK) testFailsExist = True;
+}
+
+
+/*---------------------------------------------*/
+static
+void license ( void )
+{
+ fprintf ( stderr,
+
+ "bzip2, a block-sorting file compressor. "
+ "Version %s.\n"
+ " \n"
+ " Copyright (C) 1996-2000 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"
+ " \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"
+ " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+ " LICENSE file for more details.\n"
+ " \n",
+ BZ2_bzlibVersion()
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void usage ( Char *fullProgName )
+{
+ fprintf (
+ stderr,
+ "bzip2, a block-sorting file compressor. "
+ "Version %s.\n"
+ "\n usage: %s [flags and input files in any order]\n"
+ "\n"
+ " -h --help print this message\n"
+ " -d --decompress force decompression\n"
+ " -z --compress force compression\n"
+ " -k --keep keep (don't delete) input files\n"
+ " -f --force overwrite existing output files\n"
+ " -t --test test compressed file integrity\n"
+ " -c --stdout output to standard out\n"
+ " -q --quiet suppress noncritical error messages\n"
+ " -v --verbose be verbose (a 2nd -v gives more)\n"
+ " -L --license display software version & license\n"
+ " -V --version display software version & license\n"
+ " -s --small use less memory (at most 2500k)\n"
+ " -1 .. -9 set block size to 100k .. 900k\n"
+ "\n"
+ " If invoked as `bzip2', default action is to compress.\n"
+ " as `bunzip2', default action is to decompress.\n"
+ " as `bzcat', default action is to decompress to stdout.\n"
+ "\n"
+ " If no file names are given, bzip2 compresses or decompresses\n"
+ " from standard input to standard output. You can combine\n"
+ " short flags, so `-v -4' means the same as -v4 or -4v, &c.\n"
+#if BZ_UNIX
+ "\n"
+#endif
+ ,
+
+ BZ2_bzlibVersion(),
+ fullProgName
+ );
+}
+
+
+/*---------------------------------------------*/
+static
+void redundant ( Char* flag )
+{
+ fprintf (
+ stderr,
+ "%s: %s is redundant in versions 0.9.5 and above\n",
+ progName, flag );
+}
+
+
+/*---------------------------------------------*/
+/*--
+ All the garbage from here to main() is purely to
+ implement a linked list of command-line arguments,
+ into which main() copies argv[1 .. argc-1].
+
+ The purpose of this exercise is to facilitate
+ the expansion of wildcard characters * and ? in
+ filenames for OSs which don't know how to do it
+ themselves, like MSDOS, Windows 95 and NT.
+
+ The actual Dirty Work is done by the platform-
+ specific macro APPEND_FILESPEC.
+--*/
+
+typedef
+ struct zzzz {
+ Char *name;
+ struct zzzz *link;
+ }
+ Cell;
+
+
+/*---------------------------------------------*/
+static
+void *myMalloc ( Int32 n )
+{
+ void* p;
+
+ p = malloc ( (size_t)n );
+ if (p == NULL) outOfMemory ();
+ return p;
+}
+
+
+/*---------------------------------------------*/
+static
+Cell *mkCell ( void )
+{
+ Cell *c;
+
+ c = (Cell*) myMalloc ( sizeof ( Cell ) );
+ c->name = NULL;
+ c->link = NULL;
+ return c;
+}
+
+
+/*---------------------------------------------*/
+static
+Cell *snocString ( Cell *root, Char *name )
+{
+ if (root == NULL) {
+ Cell *tmp = mkCell();
+ tmp->name = (Char*) myMalloc ( 5 + strlen(name) );
+ strcpy ( tmp->name, name );
+ return tmp;
+ } else {
+ Cell *tmp = root;
+ while (tmp->link != NULL) tmp = tmp->link;
+ tmp->link = snocString ( tmp->link, name );
+ return root;
+ }
+}
+
+
+/*---------------------------------------------*/
+static
+void addFlagsFromEnvVar ( Cell** argList, Char* varName )
+{
+ Int32 i, j, k;
+ Char *envbase, *p;
+
+ envbase = getenv(varName);
+ if (envbase != NULL) {
+ p = envbase;
+ i = 0;
+ while (True) {
+ if (p[i] == 0) break;
+ p += i;
+ i = 0;
+ while (isspace((Int32)(p[0]))) p++;
+ while (p[i] != 0 && !isspace((Int32)(p[i]))) i++;
+ if (i > 0) {
+ k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10;
+ for (j = 0; j < k; j++) tmpName[j] = p[j];
+ tmpName[k] = 0;
+ APPEND_FLAG(*argList, tmpName);
+ }
+ }
+ }
+}
+
+
+/*---------------------------------------------*/
+#define ISFLAG(s) (strcmp(aa->name, (s))==0)
+
+IntNative main ( IntNative argc, Char *argv[] )
+{
+ Int32 i, j;
+ Char *tmp;
+ Cell *argList;
+ Cell *aa;
+ Bool decode;
+
+ /*-- Be really really really paranoid :-) --*/
+ if (sizeof(Int32) != 4 || sizeof(UInt32) != 4 ||
+ sizeof(Int16) != 2 || sizeof(UInt16) != 2 ||
+ sizeof(Char) != 1 || sizeof(UChar) != 1)
+ configError();
+
+ /*-- Initialise --*/
+ outputHandleJustInCase = NULL;
+ smallMode = False;
+ keepInputFiles = False;
+ forceOverwrite = False;
+ noisy = True;
+ verbosity = 0;
+ blockSize100k = 9;
+ testFailsExist = False;
+ unzFailsExist = False;
+ numFileNames = 0;
+ numFilesProcessed = 0;
+ workFactor = 30;
+ deleteOutputOnInterrupt = False;
+ exitValue = 0;
+ i = j = 0; /* avoid bogus warning from egcs-1.1.X */
+
+ /*-- Set up signal handlers for mem access errors --*/
+ signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
+#if BZ_UNIX
+#ifndef __DJGPP__
+ signal (SIGBUS, mySIGSEGVorSIGBUScatcher);
+#endif
+#endif
+
+ copyFileName ( inName, "(none)" );
+ copyFileName ( outName, "(none)" );
+
+ copyFileName ( progNameReally, argv[0] );
+ progName = &progNameReally[0];
+ for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++)
+ if (*tmp == PATH_SEP) progName = tmp + 1;
+
+
+ /*-- Copy flags from env var BZIP2, and
+ expand filename wildcards in arg list.
+ --*/
+ argList = NULL;
+ addFlagsFromEnvVar ( &argList, "BZIP2" );
+ addFlagsFromEnvVar ( &argList, "BZIP" );
+ for (i = 1; i <= argc-1; i++)
+ APPEND_FILESPEC(argList, argv[i]);
+
+
+ /*-- Find the length of the longest filename --*/
+ longestFileName = 7;
+ numFileNames = 0;
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFileNames++;
+ if (longestFileName < (Int32)strlen(aa->name) )
+ longestFileName = (Int32)strlen(aa->name);
+ }
+
+
+ /*-- Determine source modes; flag handling may change this too. --*/
+ if (numFileNames == 0)
+ srcMode = SM_I2O; else srcMode = SM_F2F;
+
+
+ /*-- Determine what to do (compress/uncompress/test/cat). --*/
+ /*-- Note that subsequent flag handling may change this. --*/
+ opMode = OM_Z;
+
+ if ( (strstr ( progName, "unzip" ) != 0) ||
+ (strstr ( progName, "UNZIP" ) != 0) )
+ opMode = OM_UNZ;
+
+ if ( (strstr ( progName, "z2cat" ) != 0) ||
+ (strstr ( progName, "Z2CAT" ) != 0) ||
+ (strstr ( progName, "zcat" ) != 0) ||
+ (strstr ( progName, "ZCAT" ) != 0) ) {
+ opMode = OM_UNZ;
+ srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O;
+ }
+
+
+ /*-- Look at the flags. --*/
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) break;
+ if (aa->name[0] == '-' && aa->name[1] != '-') {
+ for (j = 1; aa->name[j] != '\0'; j++) {
+ switch (aa->name[j]) {
+ case 'c': srcMode = SM_F2O; break;
+ case 'd': opMode = OM_UNZ; break;
+ case 'z': opMode = OM_Z; break;
+ case 'f': forceOverwrite = True; break;
+ case 't': opMode = OM_TEST; break;
+ case 'k': keepInputFiles = True; break;
+ case 's': smallMode = True; break;
+ case 'q': noisy = False; break;
+ case '1': blockSize100k = 1; break;
+ case '2': blockSize100k = 2; break;
+ case '3': blockSize100k = 3; break;
+ case '4': blockSize100k = 4; break;
+ case '5': blockSize100k = 5; break;
+ case '6': blockSize100k = 6; break;
+ case '7': blockSize100k = 7; break;
+ case '8': blockSize100k = 8; break;
+ case '9': blockSize100k = 9; break;
+ case 'V':
+ case 'L': license(); break;
+ case 'v': verbosity++; break;
+ case 'h': usage ( progName );
+ exit ( 0 );
+ break;
+ default: fprintf ( stderr, "%s: Bad flag `%s'\n",
+ progName, aa->name );
+ usage ( progName );
+ exit ( 1 );
+ break;
+ }
+ }
+ }
+ }
+
+ /*-- And again ... --*/
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) break;
+ if (ISFLAG("--stdout")) srcMode = SM_F2O; else
+ if (ISFLAG("--decompress")) opMode = OM_UNZ; else
+ if (ISFLAG("--compress")) opMode = OM_Z; else
+ if (ISFLAG("--force")) forceOverwrite = True; else
+ if (ISFLAG("--test")) opMode = OM_TEST; else
+ if (ISFLAG("--keep")) keepInputFiles = True; else
+ if (ISFLAG("--small")) smallMode = True; else
+ if (ISFLAG("--quiet")) noisy = False; else
+ if (ISFLAG("--version")) license(); else
+ if (ISFLAG("--license")) license(); else
+ if (ISFLAG("--exponential")) workFactor = 1; else
+ if (ISFLAG("--repetitive-best")) redundant(aa->name); else
+ if (ISFLAG("--repetitive-fast")) redundant(aa->name); else
+ if (ISFLAG("--verbose")) verbosity++; else
+ if (ISFLAG("--help")) { usage ( progName ); exit ( 0 ); }
+ else
+ if (strncmp ( aa->name, "--", 2) == 0) {
+ fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name );
+ usage ( progName );
+ exit ( 1 );
+ }
+ }
+
+ if (verbosity > 4) verbosity = 4;
+ if (opMode == OM_Z && smallMode && blockSize100k > 2)
+ blockSize100k = 2;
+
+ if (opMode == OM_TEST && srcMode == SM_F2O) {
+ fprintf ( stderr, "%s: -c and -t cannot be used together.\n",
+ progName );
+ exit ( 1 );
+ }
+
+ if (srcMode == SM_F2O && numFileNames == 0)
+ srcMode = SM_I2O;
+
+ if (opMode != OM_Z) blockSize100k = 0;
+
+ if (srcMode == SM_F2F) {
+ signal (SIGINT, mySignalCatcher);
+ signal (SIGTERM, mySignalCatcher);
+# if BZ_UNIX
+ signal (SIGHUP, mySignalCatcher);
+# endif
+ }
+
+ if (opMode == OM_Z) {
+ if (srcMode == SM_I2O) {
+ compress ( NULL );
+ } else {
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFilesProcessed++;
+ compress ( aa->name );
+ }
+ }
+ }
+ else
+
+ if (opMode == OM_UNZ) {
+ unzFailsExist = False;
+ if (srcMode == SM_I2O) {
+ uncompress ( NULL );
+ } else {
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFilesProcessed++;
+ uncompress ( aa->name );
+ }
+ }
+ if (unzFailsExist) {
+ setExit(2);
+ exit(exitValue);
+ }
+ }
+
+ else {
+ testFailsExist = False;
+ if (srcMode == SM_I2O) {
+ testf ( NULL );
+ } else {
+ decode = True;
+ for (aa = argList; aa != NULL; aa = aa->link) {
+ if (ISFLAG("--")) { decode = False; continue; }
+ if (aa->name[0] == '-' && decode) continue;
+ numFilesProcessed++;
+ testf ( aa->name );
+ }
+ }
+ if (testFailsExist && noisy) {
+ fprintf ( stderr,
+ "\n"
+ "You can use the `bzip2recover' program to attempt to recover\n"
+ "data from undamaged sections of corrupted files.\n\n"
+ );
+ setExit(2);
+ exit(exitValue);
+ }
+ }
+
+ /* Free the argument list memory to mollify leak detectors
+ (eg) Purify, Checker. Serves no other useful purpose.
+ */
+ aa = argList;
+ while (aa != NULL) {
+ Cell* aa2 = aa->link;
+ if (aa->name != NULL) free(aa->name);
+ free(aa);
+ aa = aa2;
+ }
+
+ return exitValue;
+}
+
+
+/*-----------------------------------------------------------*/
+/*--- end bzip2.c ---*/
+/*-----------------------------------------------------------*/
diff --git a/contrib/bzip2/bzip2recover.c b/contrib/bzip2/bzip2recover.c
new file mode 100644
index 0000000..ba3d175
--- /dev/null
+++ b/contrib/bzip2/bzip2recover.c
@@ -0,0 +1,435 @@
+
+/*-----------------------------------------------------------*/
+/*--- 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 program.
+
+ Copyright (C) 1996-2000 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@acm.org
+ bzip2/libbzip2 version 1.0 of 21 March 2000
+--*/
+
+/*--
+ This program is a complete hack and should be rewritten
+ properly. It isn't very complicated.
+--*/
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef unsigned int UInt32;
+typedef int Int32;
+typedef unsigned char UChar;
+typedef char Char;
+typedef unsigned char Bool;
+#define True ((Bool)1)
+#define False ((Bool)0)
+
+
+Char inFileName[2000];
+Char outFileName[2000];
+Char progName[2000];
+
+UInt32 bytesOut = 0;
+UInt32 bytesIn = 0;
+
+
+/*---------------------------------------------------*/
+/*--- I/O errors ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+void readError ( void )
+{
+ fprintf ( stderr,
+ "%s: I/O error reading `%s', possible reason follows.\n",
+ progName, inFileName );
+ perror ( progName );
+ fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+ progName );
+ exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+void writeError ( void )
+{
+ fprintf ( stderr,
+ "%s: I/O error reading `%s', possible reason follows.\n",
+ progName, inFileName );
+ perror ( progName );
+ fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+ progName );
+ exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+void mallocFail ( Int32 n )
+{
+ fprintf ( stderr,
+ "%s: malloc failed on request for %d bytes.\n",
+ progName, n );
+ fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+ progName );
+ exit ( 1 );
+}
+
+
+/*---------------------------------------------------*/
+/*--- Bit stream I/O ---*/
+/*---------------------------------------------------*/
+
+typedef
+ struct {
+ FILE* handle;
+ Int32 buffer;
+ Int32 buffLive;
+ Char mode;
+ }
+ BitStream;
+
+
+/*---------------------------------------------*/
+BitStream* bsOpenReadStream ( FILE* stream )
+{
+ BitStream *bs = malloc ( sizeof(BitStream) );
+ if (bs == NULL) mallocFail ( sizeof(BitStream) );
+ bs->handle = stream;
+ bs->buffer = 0;
+ bs->buffLive = 0;
+ bs->mode = 'r';
+ return bs;
+}
+
+
+/*---------------------------------------------*/
+BitStream* bsOpenWriteStream ( FILE* stream )
+{
+ BitStream *bs = malloc ( sizeof(BitStream) );
+ if (bs == NULL) mallocFail ( sizeof(BitStream) );
+ bs->handle = stream;
+ bs->buffer = 0;
+ bs->buffLive = 0;
+ bs->mode = 'w';
+ return bs;
+}
+
+
+/*---------------------------------------------*/
+void bsPutBit ( BitStream* bs, Int32 bit )
+{
+ if (bs->buffLive == 8) {
+ Int32 retVal = putc ( (UChar) bs->buffer, bs->handle );
+ if (retVal == EOF) writeError();
+ bytesOut++;
+ bs->buffLive = 1;
+ bs->buffer = bit & 0x1;
+ } else {
+ bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) );
+ bs->buffLive++;
+ };
+}
+
+
+/*---------------------------------------------*/
+/*--
+ Returns 0 or 1, or 2 to indicate EOF.
+--*/
+Int32 bsGetBit ( BitStream* bs )
+{
+ if (bs->buffLive > 0) {
+ bs->buffLive --;
+ return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 );
+ } else {
+ Int32 retVal = getc ( bs->handle );
+ if ( retVal == EOF ) {
+ if (errno != 0) readError();
+ return 2;
+ }
+ bs->buffLive = 7;
+ bs->buffer = retVal;
+ return ( ((bs->buffer) >> 7) & 0x1 );
+ }
+}
+
+
+/*---------------------------------------------*/
+void bsClose ( BitStream* bs )
+{
+ Int32 retVal;
+
+ if ( bs->mode == 'w' ) {
+ while ( bs->buffLive < 8 ) {
+ bs->buffLive++;
+ bs->buffer <<= 1;
+ };
+ retVal = putc ( (UChar) (bs->buffer), bs->handle );
+ if (retVal == EOF) writeError();
+ bytesOut++;
+ retVal = fflush ( bs->handle );
+ if (retVal == EOF) writeError();
+ }
+ retVal = fclose ( bs->handle );
+ if (retVal == EOF) {
+ if (bs->mode == 'w') writeError(); else readError();
+ }
+ free ( bs );
+}
+
+
+/*---------------------------------------------*/
+void bsPutUChar ( BitStream* bs, UChar c )
+{
+ Int32 i;
+ for (i = 7; i >= 0; i--)
+ bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 );
+}
+
+
+/*---------------------------------------------*/
+void bsPutUInt32 ( BitStream* bs, UInt32 c )
+{
+ Int32 i;
+
+ for (i = 31; i >= 0; i--)
+ bsPutBit ( bs, (c >> i) & 0x1 );
+}
+
+
+/*---------------------------------------------*/
+Bool endsInBz2 ( Char* name )
+{
+ Int32 n = strlen ( name );
+ if (n <= 4) return False;
+ return
+ (name[n-4] == '.' &&
+ name[n-3] == 'b' &&
+ name[n-2] == 'z' &&
+ name[n-1] == '2');
+}
+
+
+/*---------------------------------------------------*/
+/*--- ---*/
+/*---------------------------------------------------*/
+
+#define BLOCK_HEADER_HI 0x00003141UL
+#define BLOCK_HEADER_LO 0x59265359UL
+
+#define BLOCK_ENDMARK_HI 0x00001772UL
+#define BLOCK_ENDMARK_LO 0x45385090UL
+
+
+UInt32 bStart[20000];
+UInt32 bEnd[20000];
+UInt32 rbStart[20000];
+UInt32 rbEnd[20000];
+
+Int32 main ( Int32 argc, Char** argv )
+{
+ FILE* inFile;
+ FILE* outFile;
+ BitStream* bsIn, *bsWr;
+ Int32 currBlock, b, wrBlock;
+ UInt32 bitsRead;
+ Int32 rbCtr;
+
+
+ UInt32 buffHi, buffLo, blockCRC;
+ Char* p;
+
+ strcpy ( progName, argv[0] );
+ inFileName[0] = outFileName[0] = 0;
+
+ fprintf ( stderr, "bzip2recover 1.0: extracts blocks from damaged .bz2 files.\n" );
+
+ if (argc != 2) {
+ fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n",
+ progName, progName );
+ exit(1);
+ }
+
+ strcpy ( inFileName, argv[1] );
+
+ inFile = fopen ( inFileName, "rb" );
+ if (inFile == NULL) {
+ fprintf ( stderr, "%s: can't read `%s'\n", progName, inFileName );
+ exit(1);
+ }
+
+ bsIn = bsOpenReadStream ( inFile );
+ fprintf ( stderr, "%s: searching for block boundaries ...\n", progName );
+
+ bitsRead = 0;
+ buffHi = buffLo = 0;
+ currBlock = 0;
+ bStart[currBlock] = 0;
+
+ rbCtr = 0;
+
+ while (True) {
+ b = bsGetBit ( bsIn );
+ bitsRead++;
+ if (b == 2) {
+ if (bitsRead >= bStart[currBlock] &&
+ (bitsRead - bStart[currBlock]) >= 40) {
+ bEnd[currBlock] = bitsRead-1;
+ if (currBlock > 0)
+ fprintf ( stderr, " block %d runs from %d to %d (incomplete)\n",
+ currBlock, bStart[currBlock], bEnd[currBlock] );
+ } else
+ currBlock--;
+ break;
+ }
+ buffHi = (buffHi << 1) | (buffLo >> 31);
+ buffLo = (buffLo << 1) | (b & 1);
+ if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI
+ && buffLo == BLOCK_HEADER_LO)
+ ||
+ ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI
+ && buffLo == BLOCK_ENDMARK_LO)
+ ) {
+ if (bitsRead > 49)
+ bEnd[currBlock] = bitsRead-49; else
+ bEnd[currBlock] = 0;
+ if (currBlock > 0 &&
+ (bEnd[currBlock] - bStart[currBlock]) >= 130) {
+ fprintf ( stderr, " block %d runs from %d to %d\n",
+ rbCtr+1, bStart[currBlock], bEnd[currBlock] );
+ rbStart[rbCtr] = bStart[currBlock];
+ rbEnd[rbCtr] = bEnd[currBlock];
+ rbCtr++;
+ }
+ currBlock++;
+
+ bStart[currBlock] = bitsRead;
+ }
+ }
+
+ bsClose ( bsIn );
+
+ /*-- identified blocks run from 1 to rbCtr inclusive. --*/
+
+ if (rbCtr < 1) {
+ fprintf ( stderr,
+ "%s: sorry, I couldn't find any block boundaries.\n",
+ progName );
+ exit(1);
+ };
+
+ fprintf ( stderr, "%s: splitting into blocks\n", progName );
+
+ inFile = fopen ( inFileName, "rb" );
+ if (inFile == NULL) {
+ fprintf ( stderr, "%s: can't open `%s'\n", progName, inFileName );
+ exit(1);
+ }
+ bsIn = bsOpenReadStream ( inFile );
+
+ /*-- placate gcc's dataflow analyser --*/
+ blockCRC = 0; bsWr = 0;
+
+ bitsRead = 0;
+ outFile = NULL;
+ wrBlock = 0;
+ while (True) {
+ b = bsGetBit(bsIn);
+ if (b == 2) break;
+ buffHi = (buffHi << 1) | (buffLo >> 31);
+ buffLo = (buffLo << 1) | (b & 1);
+ if (bitsRead == 47+rbStart[wrBlock])
+ blockCRC = (buffHi << 16) | (buffLo >> 16);
+
+ if (outFile != NULL && bitsRead >= rbStart[wrBlock]
+ && bitsRead <= rbEnd[wrBlock]) {
+ bsPutBit ( bsWr, b );
+ }
+
+ bitsRead++;
+
+ if (bitsRead == rbEnd[wrBlock]+1) {
+ if (outFile != NULL) {
+ bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 );
+ bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 );
+ bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 );
+ bsPutUInt32 ( bsWr, blockCRC );
+ bsClose ( bsWr );
+ }
+ if (wrBlock >= rbCtr) break;
+ wrBlock++;
+ } else
+ if (bitsRead == rbStart[wrBlock]) {
+ outFileName[0] = 0;
+ sprintf ( outFileName, "rec%4d", wrBlock+1 );
+ for (p = outFileName; *p != 0; p++) if (*p == ' ') *p = '0';
+ strcat ( outFileName, inFileName );
+ if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" );
+
+ fprintf ( stderr, " writing block %d to `%s' ...\n",
+ wrBlock+1, outFileName );
+
+ outFile = fopen ( outFileName, "wb" );
+ if (outFile == NULL) {
+ fprintf ( stderr, "%s: can't write `%s'\n",
+ progName, outFileName );
+ exit(1);
+ }
+ bsWr = bsOpenWriteStream ( outFile );
+ bsPutUChar ( bsWr, 'B' ); bsPutUChar ( bsWr, 'Z' );
+ bsPutUChar ( bsWr, 'h' ); bsPutUChar ( bsWr, '9' );
+ bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 );
+ bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 );
+ bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 );
+ }
+ }
+
+ fprintf ( stderr, "%s: finished\n", progName );
+ return 0;
+}
+
+
+
+/*-----------------------------------------------------------*/
+/*--- end bzip2recover.c ---*/
+/*-----------------------------------------------------------*/
diff --git a/contrib/bzip2/bzlib.c b/contrib/bzip2/bzlib.c
new file mode 100644
index 0000000..4a06d9f
--- /dev/null
+++ b/contrib/bzip2/bzlib.c
@@ -0,0 +1,1564 @@
+
+/*-------------------------------------------------------------*/
+/*--- 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-2000 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@acm.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
+ * 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"
+
+
+/*---------------------------------------------------*/
+/*--- Compression stuff ---*/
+/*---------------------------------------------------*/
+
+
+/*---------------------------------------------------*/
+#ifndef BZ_NO_STDIO
+void BZ2_bz__AssertH__fail ( int errcode )
+{
+ fprintf(stderr,
+ "\n\nbzip2/libbzip2: internal error number %d.\n"
+ "This is a bug in bzip2/libbzip2, %s.\n"
+ "Please report it to me at: jseward@acm.org. If this happened\n"
+ "when you were using some program which uses libbzip2 as a\n"
+ "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, 21 March 2000.\n\n",
+ errcode,
+ BZ2_bzlibVersion()
+ );
+ exit(3);
+}
+#endif
+
+
+/*---------------------------------------------------*/
+static
+int bz_config_ok ( void )
+{
+ if (sizeof(int) != 4) return 0;
+ if (sizeof(short) != 2) return 0;
+ if (sizeof(char) != 1) return 0;
+ return 1;
+}
+
+
+/*---------------------------------------------------*/
+static
+void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
+{
+ void* v = malloc ( items * size );
+ return v;
+}
+
+static
+void default_bzfree ( void* opaque, void* addr )
+{
+ if (addr != NULL) free ( addr );
+}
+
+
+/*---------------------------------------------------*/
+static
+void prepare_new_block ( EState* s )
+{
+ Int32 i;
+ s->nblock = 0;
+ s->numZ = 0;
+ s->state_out_pos = 0;
+ BZ_INITIALISE_CRC ( s->blockCRC );
+ for (i = 0; i < 256; i++) s->inUse[i] = False;
+ s->blockNo++;
+}
+
+
+/*---------------------------------------------------*/
+static
+void init_RL ( EState* s )
+{
+ s->state_in_ch = 256;
+ s->state_in_len = 0;
+}
+
+
+static
+Bool isempty_RL ( EState* s )
+{
+ if (s->state_in_ch < 256 && s->state_in_len > 0)
+ return False; else
+ return True;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressInit)
+ ( bz_stream* strm,
+ int blockSize100k,
+ int verbosity,
+ int workFactor )
+{
+ Int32 n;
+ EState* s;
+
+ if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+ if (strm == NULL ||
+ blockSize100k < 1 || blockSize100k > 9 ||
+ workFactor < 0 || workFactor > 250)
+ return BZ_PARAM_ERROR;
+
+ if (workFactor == 0) workFactor = 30;
+ if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+ if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+ s = BZALLOC( sizeof(EState) );
+ if (s == NULL) return BZ_MEM_ERROR;
+ s->strm = strm;
+
+ s->arr1 = NULL;
+ s->arr2 = NULL;
+ s->ftab = NULL;
+
+ n = 100000 * blockSize100k;
+ s->arr1 = BZALLOC( n * sizeof(UInt32) );
+ s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );
+ s->ftab = BZALLOC( 65537 * sizeof(UInt32) );
+
+ if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {
+ if (s->arr1 != NULL) BZFREE(s->arr1);
+ if (s->arr2 != NULL) BZFREE(s->arr2);
+ if (s->ftab != NULL) BZFREE(s->ftab);
+ if (s != NULL) BZFREE(s);
+ return BZ_MEM_ERROR;
+ }
+
+ s->blockNo = 0;
+ s->state = BZ_S_INPUT;
+ s->mode = BZ_M_RUNNING;
+ s->combinedCRC = 0;
+ s->blockSize100k = blockSize100k;
+ s->nblockMAX = 100000 * blockSize100k - 19;
+ s->verbosity = verbosity;
+ s->workFactor = workFactor;
+
+ s->block = (UChar*)s->arr2;
+ s->mtfv = (UInt16*)s->arr1;
+ s->zbits = NULL;
+ s->ptr = (UInt32*)s->arr1;
+
+ strm->state = s;
+ strm->total_in_lo32 = 0;
+ strm->total_in_hi32 = 0;
+ strm->total_out_lo32 = 0;
+ strm->total_out_hi32 = 0;
+ init_RL ( s );
+ prepare_new_block ( s );
+ return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+static
+void add_pair_to_block ( EState* s )
+{
+ Int32 i;
+ UChar ch = (UChar)(s->state_in_ch);
+ for (i = 0; i < s->state_in_len; i++) {
+ BZ_UPDATE_CRC( s->blockCRC, ch );
+ }
+ s->inUse[s->state_in_ch] = True;
+ switch (s->state_in_len) {
+ case 1:
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ break;
+ case 2:
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ break;
+ case 3:
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ break;
+ default:
+ s->inUse[s->state_in_len-4] = True;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = (UChar)ch; s->nblock++;
+ s->block[s->nblock] = ((UChar)(s->state_in_len-4));
+ s->nblock++;
+ break;
+ }
+}
+
+
+/*---------------------------------------------------*/
+static
+void flush_RL ( EState* s )
+{
+ if (s->state_in_ch < 256) add_pair_to_block ( s );
+ init_RL ( s );
+}
+
+
+/*---------------------------------------------------*/
+#define ADD_CHAR_TO_BLOCK(zs,zchh0) \
+{ \
+ UInt32 zchh = (UInt32)(zchh0); \
+ /*-- fast track the common case --*/ \
+ if (zchh != zs->state_in_ch && \
+ zs->state_in_len == 1) { \
+ UChar ch = (UChar)(zs->state_in_ch); \
+ BZ_UPDATE_CRC( zs->blockCRC, ch ); \
+ zs->inUse[zs->state_in_ch] = True; \
+ zs->block[zs->nblock] = (UChar)ch; \
+ zs->nblock++; \
+ zs->state_in_ch = zchh; \
+ } \
+ else \
+ /*-- general, uncommon cases --*/ \
+ if (zchh != zs->state_in_ch || \
+ zs->state_in_len == 255) { \
+ if (zs->state_in_ch < 256) \
+ add_pair_to_block ( zs ); \
+ zs->state_in_ch = zchh; \
+ zs->state_in_len = 1; \
+ } else { \
+ zs->state_in_len++; \
+ } \
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_input_until_stop ( EState* s )
+{
+ Bool progress_in = False;
+
+ if (s->mode == BZ_M_RUNNING) {
+
+ /*-- fast track the common case --*/
+ while (True) {
+ /*-- block full? --*/
+ if (s->nblock >= s->nblockMAX) break;
+ /*-- no input? --*/
+ if (s->strm->avail_in == 0) break;
+ progress_in = True;
+ ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
+ s->strm->next_in++;
+ s->strm->avail_in--;
+ s->strm->total_in_lo32++;
+ if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+ }
+
+ } else {
+
+ /*-- general, uncommon case --*/
+ while (True) {
+ /*-- block full? --*/
+ if (s->nblock >= s->nblockMAX) break;
+ /*-- no input? --*/
+ if (s->strm->avail_in == 0) break;
+ /*-- flush/finish end? --*/
+ if (s->avail_in_expect == 0) break;
+ progress_in = True;
+ ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
+ s->strm->next_in++;
+ s->strm->avail_in--;
+ s->strm->total_in_lo32++;
+ if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+ s->avail_in_expect--;
+ }
+ }
+ return progress_in;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_output_until_stop ( EState* s )
+{
+ Bool progress_out = False;
+
+ while (True) {
+
+ /*-- no output space? --*/
+ if (s->strm->avail_out == 0) break;
+
+ /*-- block done? --*/
+ if (s->state_out_pos >= s->numZ) break;
+
+ progress_out = True;
+ *(s->strm->next_out) = s->zbits[s->state_out_pos];
+ s->state_out_pos++;
+ s->strm->avail_out--;
+ s->strm->next_out++;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ return progress_out;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool handle_compress ( bz_stream* strm )
+{
+ Bool progress_in = False;
+ Bool progress_out = False;
+ EState* s = strm->state;
+
+ while (True) {
+
+ if (s->state == BZ_S_OUTPUT) {
+ progress_out |= copy_output_until_stop ( s );
+ if (s->state_out_pos < s->numZ) break;
+ if (s->mode == BZ_M_FINISHING &&
+ s->avail_in_expect == 0 &&
+ isempty_RL(s)) break;
+ prepare_new_block ( s );
+ s->state = BZ_S_INPUT;
+ if (s->mode == BZ_M_FLUSHING &&
+ s->avail_in_expect == 0 &&
+ isempty_RL(s)) break;
+ }
+
+ if (s->state == BZ_S_INPUT) {
+ progress_in |= copy_input_until_stop ( s );
+ if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
+ flush_RL ( s );
+ BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );
+ s->state = BZ_S_OUTPUT;
+ }
+ else
+ if (s->nblock >= s->nblockMAX) {
+ BZ2_compressBlock ( s, False );
+ s->state = BZ_S_OUTPUT;
+ }
+ else
+ if (s->strm->avail_in == 0) {
+ break;
+ }
+ }
+
+ }
+
+ return progress_in || progress_out;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )
+{
+ Bool progress;
+ EState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ preswitch:
+ switch (s->mode) {
+
+ case BZ_M_IDLE:
+ return BZ_SEQUENCE_ERROR;
+
+ case BZ_M_RUNNING:
+ if (action == BZ_RUN) {
+ progress = handle_compress ( strm );
+ return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
+ }
+ else
+ if (action == BZ_FLUSH) {
+ s->avail_in_expect = strm->avail_in;
+ s->mode = BZ_M_FLUSHING;
+ goto preswitch;
+ }
+ else
+ if (action == BZ_FINISH) {
+ s->avail_in_expect = strm->avail_in;
+ s->mode = BZ_M_FINISHING;
+ goto preswitch;
+ }
+ else
+ return BZ_PARAM_ERROR;
+
+ case BZ_M_FLUSHING:
+ if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
+ if (s->avail_in_expect != s->strm->avail_in)
+ return BZ_SEQUENCE_ERROR;
+ progress = handle_compress ( strm );
+ if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+ s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
+ s->mode = BZ_M_RUNNING;
+ return BZ_RUN_OK;
+
+ case BZ_M_FINISHING:
+ if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
+ if (s->avail_in_expect != s->strm->avail_in)
+ return BZ_SEQUENCE_ERROR;
+ progress = handle_compress ( strm );
+ if (!progress) return BZ_SEQUENCE_ERROR;
+ if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+ s->state_out_pos < s->numZ) return BZ_FINISH_OK;
+ s->mode = BZ_M_IDLE;
+ return BZ_STREAM_END;
+ }
+ return BZ_OK; /*--not reached--*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm )
+{
+ EState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ if (s->arr1 != NULL) BZFREE(s->arr1);
+ if (s->arr2 != NULL) BZFREE(s->arr2);
+ if (s->ftab != NULL) BZFREE(s->ftab);
+ BZFREE(strm->state);
+
+ strm->state = NULL;
+
+ return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+/*--- Decompression stuff ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressInit)
+ ( bz_stream* strm,
+ int verbosity,
+ int small )
+{
+ DState* s;
+
+ if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ if (small != 0 && small != 1) return BZ_PARAM_ERROR;
+ if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;
+
+ if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+ if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+ s = BZALLOC( sizeof(DState) );
+ if (s == NULL) return BZ_MEM_ERROR;
+ s->strm = strm;
+ strm->state = s;
+ s->state = BZ_X_MAGIC_1;
+ s->bsLive = 0;
+ s->bsBuff = 0;
+ s->calculatedCombinedCRC = 0;
+ strm->total_in_lo32 = 0;
+ strm->total_in_hi32 = 0;
+ strm->total_out_lo32 = 0;
+ strm->total_out_hi32 = 0;
+ s->smallDecompress = (Bool)small;
+ s->ll4 = NULL;
+ s->ll16 = NULL;
+ s->tt = NULL;
+ s->currBlockNo = 0;
+ s->verbosity = verbosity;
+
+ return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+static
+void unRLE_obuf_to_output_FAST ( DState* s )
+{
+ UChar k1;
+
+ if (s->blockRandomised) {
+
+ while (True) {
+ /* try to finish existing run */
+ while (True) {
+ if (s->strm->avail_out == 0) return;
+ if (s->state_out_len == 0) break;
+ *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+ BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+ s->state_out_len--;
+ s->strm->next_out++;
+ s->strm->avail_out--;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ /* can a new run be started? */
+ if (s->nblock_used == s->save_nblock+1) return;
+
+
+ s->state_out_len = 1;
+ s->state_out_ch = s->k0;
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 2;
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 3;
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ s->state_out_len = ((Int32)k1) + 4;
+ BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK;
+ s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+ }
+
+ } else {
+
+ /* restore */
+ UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC;
+ UChar c_state_out_ch = s->state_out_ch;
+ Int32 c_state_out_len = s->state_out_len;
+ Int32 c_nblock_used = s->nblock_used;
+ Int32 c_k0 = s->k0;
+ UInt32* c_tt = s->tt;
+ UInt32 c_tPos = s->tPos;
+ char* cs_next_out = s->strm->next_out;
+ unsigned int cs_avail_out = s->strm->avail_out;
+ /* end restore */
+
+ UInt32 avail_out_INIT = cs_avail_out;
+ Int32 s_save_nblockPP = s->save_nblock+1;
+ unsigned int total_out_lo32_old;
+
+ while (True) {
+
+ /* try to finish existing run */
+ if (c_state_out_len > 0) {
+ while (True) {
+ if (cs_avail_out == 0) goto return_notr;
+ if (c_state_out_len == 1) break;
+ *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+ BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+ c_state_out_len--;
+ cs_next_out++;
+ cs_avail_out--;
+ }
+ s_state_out_len_eq_one:
+ {
+ if (cs_avail_out == 0) {
+ c_state_out_len = 1; goto return_notr;
+ };
+ *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+ BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+ cs_next_out++;
+ cs_avail_out--;
+ }
+ }
+ /* can a new run be started? */
+ if (c_nblock_used == s_save_nblockPP) {
+ c_state_out_len = 0; goto return_notr;
+ };
+ c_state_out_ch = c_k0;
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ if (k1 != c_k0) {
+ c_k0 = k1; goto s_state_out_len_eq_one;
+ };
+ if (c_nblock_used == s_save_nblockPP)
+ goto s_state_out_len_eq_one;
+
+ c_state_out_len = 2;
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ if (c_nblock_used == s_save_nblockPP) continue;
+ if (k1 != c_k0) { c_k0 = k1; continue; };
+
+ c_state_out_len = 3;
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ if (c_nblock_used == s_save_nblockPP) continue;
+ if (k1 != c_k0) { c_k0 = k1; continue; };
+
+ BZ_GET_FAST_C(k1); c_nblock_used++;
+ c_state_out_len = ((Int32)k1) + 4;
+ BZ_GET_FAST_C(c_k0); c_nblock_used++;
+ }
+
+ return_notr:
+ total_out_lo32_old = s->strm->total_out_lo32;
+ s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
+ if (s->strm->total_out_lo32 < total_out_lo32_old)
+ s->strm->total_out_hi32++;
+
+ /* save */
+ s->calculatedBlockCRC = c_calculatedBlockCRC;
+ s->state_out_ch = c_state_out_ch;
+ s->state_out_len = c_state_out_len;
+ s->nblock_used = c_nblock_used;
+ s->k0 = c_k0;
+ s->tt = c_tt;
+ s->tPos = c_tPos;
+ s->strm->next_out = cs_next_out;
+ s->strm->avail_out = cs_avail_out;
+ /* end save */
+ }
+}
+
+
+
+/*---------------------------------------------------*/
+__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
+{
+ Int32 nb, na, mid;
+ nb = 0;
+ na = 256;
+ do {
+ mid = (nb + na) >> 1;
+ if (indx >= cftab[mid]) nb = mid; else na = mid;
+ }
+ while (na - nb != 1);
+ return nb;
+}
+
+
+/*---------------------------------------------------*/
+static
+void unRLE_obuf_to_output_SMALL ( DState* s )
+{
+ UChar k1;
+
+ if (s->blockRandomised) {
+
+ while (True) {
+ /* try to finish existing run */
+ while (True) {
+ if (s->strm->avail_out == 0) return;
+ if (s->state_out_len == 0) break;
+ *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+ BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+ s->state_out_len--;
+ s->strm->next_out++;
+ s->strm->avail_out--;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ /* can a new run be started? */
+ if (s->nblock_used == s->save_nblock+1) return;
+
+
+ s->state_out_len = 1;
+ s->state_out_ch = s->k0;
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 2;
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 3;
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
+ k1 ^= BZ_RAND_MASK; s->nblock_used++;
+ s->state_out_len = ((Int32)k1) + 4;
+ BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK;
+ s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+ }
+
+ } else {
+
+ while (True) {
+ /* try to finish existing run */
+ while (True) {
+ if (s->strm->avail_out == 0) return;
+ if (s->state_out_len == 0) break;
+ *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+ BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+ s->state_out_len--;
+ s->strm->next_out++;
+ s->strm->avail_out--;
+ s->strm->total_out_lo32++;
+ if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+ }
+
+ /* can a new run be started? */
+ if (s->nblock_used == s->save_nblock+1) return;
+
+ s->state_out_len = 1;
+ s->state_out_ch = s->k0;
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 2;
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ s->state_out_len = 3;
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ if (s->nblock_used == s->save_nblock+1) continue;
+ if (k1 != s->k0) { s->k0 = k1; continue; };
+
+ BZ_GET_SMALL(k1); s->nblock_used++;
+ s->state_out_len = ((Int32)k1) + 4;
+ BZ_GET_SMALL(s->k0); s->nblock_used++;
+ }
+
+ }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
+{
+ DState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ while (True) {
+ if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
+ if (s->state == BZ_X_OUTPUT) {
+ if (s->smallDecompress)
+ unRLE_obuf_to_output_SMALL ( s ); else
+ unRLE_obuf_to_output_FAST ( s );
+ if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
+ BZ_FINALISE_CRC ( s->calculatedBlockCRC );
+ if (s->verbosity >= 3)
+ VPrintf2 ( " {0x%x, 0x%x}", s->storedBlockCRC,
+ s->calculatedBlockCRC );
+ if (s->verbosity >= 2) VPrintf0 ( "]" );
+ if (s->calculatedBlockCRC != s->storedBlockCRC)
+ return BZ_DATA_ERROR;
+ s->calculatedCombinedCRC
+ = (s->calculatedCombinedCRC << 1) |
+ (s->calculatedCombinedCRC >> 31);
+ s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
+ s->state = BZ_X_BLKHDR_1;
+ } else {
+ return BZ_OK;
+ }
+ }
+ if (s->state >= BZ_X_MAGIC_1) {
+ Int32 r = BZ2_decompress ( s );
+ if (r == BZ_STREAM_END) {
+ if (s->verbosity >= 3)
+ VPrintf2 ( "\n combined CRCs: stored = 0x%x, computed = 0x%x",
+ s->storedCombinedCRC, s->calculatedCombinedCRC );
+ if (s->calculatedCombinedCRC != s->storedCombinedCRC)
+ return BZ_DATA_ERROR;
+ return r;
+ }
+ if (s->state != BZ_X_OUTPUT) return r;
+ }
+ }
+
+ AssertH ( 0, 6001 );
+
+ return 0; /*NOTREACHED*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm )
+{
+ DState* s;
+ if (strm == NULL) return BZ_PARAM_ERROR;
+ s = strm->state;
+ if (s == NULL) return BZ_PARAM_ERROR;
+ if (s->strm != strm) return BZ_PARAM_ERROR;
+
+ if (s->tt != NULL) BZFREE(s->tt);
+ if (s->ll16 != NULL) BZFREE(s->ll16);
+ if (s->ll4 != NULL) BZFREE(s->ll4);
+
+ BZFREE(strm->state);
+ strm->state = NULL;
+
+ return BZ_OK;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+/*--- File I/O stuff ---*/
+/*---------------------------------------------------*/
+
+#define BZ_SETERR(eee) \
+{ \
+ if (bzerror != NULL) *bzerror = eee; \
+ if (bzf != NULL) bzf->lastErr = eee; \
+}
+
+typedef
+ struct {
+ FILE* handle;
+ Char buf[BZ_MAX_UNUSED];
+ Int32 bufN;
+ Bool writing;
+ bz_stream strm;
+ Int32 lastErr;
+ Bool initialisedOk;
+ }
+ bzFile;
+
+
+/*---------------------------------------------*/
+static Bool myfeof ( FILE* f )
+{
+ Int32 c = fgetc ( f );
+ if (c == EOF) return True;
+ ungetc ( c, f );
+ return False;
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzWriteOpen)
+ ( int* bzerror,
+ FILE* f,
+ int blockSize100k,
+ int verbosity,
+ int workFactor )
+{
+ Int32 ret;
+ bzFile* bzf = NULL;
+
+ BZ_SETERR(BZ_OK);
+
+ if (f == NULL ||
+ (blockSize100k < 1 || blockSize100k > 9) ||
+ (workFactor < 0 || workFactor > 250) ||
+ (verbosity < 0 || verbosity > 4))
+ { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+ if (ferror(f))
+ { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+ bzf = malloc ( sizeof(bzFile) );
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+ BZ_SETERR(BZ_OK);
+ bzf->initialisedOk = False;
+ bzf->bufN = 0;
+ bzf->handle = f;
+ bzf->writing = True;
+ bzf->strm.bzalloc = NULL;
+ bzf->strm.bzfree = NULL;
+ bzf->strm.opaque = NULL;
+
+ if (workFactor == 0) workFactor = 30;
+ ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k,
+ verbosity, workFactor );
+ if (ret != BZ_OK)
+ { BZ_SETERR(ret); free(bzf); return NULL; };
+
+ bzf->strm.avail_in = 0;
+ bzf->initialisedOk = True;
+ return bzf;
+}
+
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWrite)
+ ( int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len )
+{
+ Int32 n, n2, ret;
+ bzFile* bzf = (bzFile*)b;
+
+ BZ_SETERR(BZ_OK);
+ if (bzf == NULL || buf == NULL || len < 0)
+ { BZ_SETERR(BZ_PARAM_ERROR); return; };
+ if (!(bzf->writing))
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+
+ if (len == 0)
+ { BZ_SETERR(BZ_OK); return; };
+
+ bzf->strm.avail_in = len;
+ bzf->strm.next_in = buf;
+
+ while (True) {
+ bzf->strm.avail_out = BZ_MAX_UNUSED;
+ bzf->strm.next_out = bzf->buf;
+ ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );
+ if (ret != BZ_RUN_OK)
+ { BZ_SETERR(ret); return; };
+
+ if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+ n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+ n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
+ n, bzf->handle );
+ if (n != n2 || ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+ }
+
+ if (bzf->strm.avail_in == 0)
+ { BZ_SETERR(BZ_OK); return; };
+ }
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWriteClose)
+ ( int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in,
+ unsigned int* nbytes_out )
+{
+ BZ2_bzWriteClose64 ( bzerror, b, abandon,
+ nbytes_in, NULL, nbytes_out, NULL );
+}
+
+
+void BZ_API(BZ2_bzWriteClose64)
+ ( int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in_lo32,
+ unsigned int* nbytes_in_hi32,
+ unsigned int* nbytes_out_lo32,
+ unsigned int* nbytes_out_hi32 )
+{
+ Int32 n, n2, ret;
+ bzFile* bzf = (bzFile*)b;
+
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_OK); return; };
+ if (!(bzf->writing))
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+
+ if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;
+ if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;
+ if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;
+ if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;
+
+ if ((!abandon) && bzf->lastErr == BZ_OK) {
+ while (True) {
+ bzf->strm.avail_out = BZ_MAX_UNUSED;
+ bzf->strm.next_out = bzf->buf;
+ ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );
+ if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)
+ { BZ_SETERR(ret); return; };
+
+ if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+ n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+ n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
+ n, bzf->handle );
+ if (n != n2 || ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+ }
+
+ if (ret == BZ_STREAM_END) break;
+ }
+ }
+
+ if ( !abandon && !ferror ( bzf->handle ) ) {
+ fflush ( bzf->handle );
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return; };
+ }
+
+ if (nbytes_in_lo32 != NULL)
+ *nbytes_in_lo32 = bzf->strm.total_in_lo32;
+ if (nbytes_in_hi32 != NULL)
+ *nbytes_in_hi32 = bzf->strm.total_in_hi32;
+ if (nbytes_out_lo32 != NULL)
+ *nbytes_out_lo32 = bzf->strm.total_out_lo32;
+ if (nbytes_out_hi32 != NULL)
+ *nbytes_out_hi32 = bzf->strm.total_out_hi32;
+
+ BZ_SETERR(BZ_OK);
+ BZ2_bzCompressEnd ( &(bzf->strm) );
+ free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzReadOpen)
+ ( int* bzerror,
+ FILE* f,
+ int verbosity,
+ int small,
+ void* unused,
+ int nUnused )
+{
+ bzFile* bzf = NULL;
+ int ret;
+
+ BZ_SETERR(BZ_OK);
+
+ if (f == NULL ||
+ (small != 0 && small != 1) ||
+ (verbosity < 0 || verbosity > 4) ||
+ (unused == NULL && nUnused != 0) ||
+ (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))
+ { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+ if (ferror(f))
+ { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+ bzf = malloc ( sizeof(bzFile) );
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+ BZ_SETERR(BZ_OK);
+
+ bzf->initialisedOk = False;
+ bzf->handle = f;
+ bzf->bufN = 0;
+ bzf->writing = False;
+ bzf->strm.bzalloc = NULL;
+ bzf->strm.bzfree = NULL;
+ bzf->strm.opaque = NULL;
+
+ while (nUnused > 0) {
+ bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;
+ unused = ((void*)( 1 + ((UChar*)(unused)) ));
+ nUnused--;
+ }
+
+ ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );
+ if (ret != BZ_OK)
+ { BZ_SETERR(ret); free(bzf); return NULL; };
+
+ bzf->strm.avail_in = bzf->bufN;
+ bzf->strm.next_in = bzf->buf;
+
+ bzf->initialisedOk = True;
+ return bzf;
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )
+{
+ bzFile* bzf = (bzFile*)b;
+
+ BZ_SETERR(BZ_OK);
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_OK); return; };
+
+ if (bzf->writing)
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+
+ if (bzf->initialisedOk)
+ (void)BZ2_bzDecompressEnd ( &(bzf->strm) );
+ free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzRead)
+ ( int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len )
+{
+ Int32 n, ret;
+ bzFile* bzf = (bzFile*)b;
+
+ BZ_SETERR(BZ_OK);
+
+ if (bzf == NULL || buf == NULL || len < 0)
+ { BZ_SETERR(BZ_PARAM_ERROR); return 0; };
+
+ if (bzf->writing)
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };
+
+ if (len == 0)
+ { BZ_SETERR(BZ_OK); return 0; };
+
+ bzf->strm.avail_out = len;
+ bzf->strm.next_out = buf;
+
+ while (True) {
+
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return 0; };
+
+ if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {
+ n = fread ( bzf->buf, sizeof(UChar),
+ BZ_MAX_UNUSED, bzf->handle );
+ if (ferror(bzf->handle))
+ { BZ_SETERR(BZ_IO_ERROR); return 0; };
+ bzf->bufN = n;
+ bzf->strm.avail_in = bzf->bufN;
+ bzf->strm.next_in = bzf->buf;
+ }
+
+ ret = BZ2_bzDecompress ( &(bzf->strm) );
+
+ if (ret != BZ_OK && ret != BZ_STREAM_END)
+ { BZ_SETERR(ret); return 0; };
+
+ if (ret == BZ_OK && myfeof(bzf->handle) &&
+ bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)
+ { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };
+
+ if (ret == BZ_STREAM_END)
+ { BZ_SETERR(BZ_STREAM_END);
+ return len - bzf->strm.avail_out; };
+ if (bzf->strm.avail_out == 0)
+ { BZ_SETERR(BZ_OK); return len; };
+
+ }
+
+ return 0; /*not reached*/
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadGetUnused)
+ ( int* bzerror,
+ BZFILE* b,
+ void** unused,
+ int* nUnused )
+{
+ bzFile* bzf = (bzFile*)b;
+ if (bzf == NULL)
+ { BZ_SETERR(BZ_PARAM_ERROR); return; };
+ if (bzf->lastErr != BZ_STREAM_END)
+ { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+ if (unused == NULL || nUnused == NULL)
+ { BZ_SETERR(BZ_PARAM_ERROR); return; };
+
+ BZ_SETERR(BZ_OK);
+ *nUnused = bzf->strm.avail_in;
+ *unused = bzf->strm.next_in;
+}
+#endif
+
+
+/*---------------------------------------------------*/
+/*--- Misc convenience stuff ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffCompress)
+ ( char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int blockSize100k,
+ int verbosity,
+ int workFactor )
+{
+ bz_stream strm;
+ int ret;
+
+ if (dest == NULL || destLen == NULL ||
+ source == NULL ||
+ blockSize100k < 1 || blockSize100k > 9 ||
+ verbosity < 0 || verbosity > 4 ||
+ workFactor < 0 || workFactor > 250)
+ return BZ_PARAM_ERROR;
+
+ if (workFactor == 0) workFactor = 30;
+ strm.bzalloc = NULL;
+ strm.bzfree = NULL;
+ strm.opaque = NULL;
+ ret = BZ2_bzCompressInit ( &strm, blockSize100k,
+ verbosity, workFactor );
+ if (ret != BZ_OK) return ret;
+
+ strm.next_in = source;
+ strm.next_out = dest;
+ strm.avail_in = sourceLen;
+ strm.avail_out = *destLen;
+
+ ret = BZ2_bzCompress ( &strm, BZ_FINISH );
+ if (ret == BZ_FINISH_OK) goto output_overflow;
+ if (ret != BZ_STREAM_END) goto errhandler;
+
+ /* normal termination */
+ *destLen -= strm.avail_out;
+ BZ2_bzCompressEnd ( &strm );
+ return BZ_OK;
+
+ output_overflow:
+ BZ2_bzCompressEnd ( &strm );
+ return BZ_OUTBUFF_FULL;
+
+ errhandler:
+ BZ2_bzCompressEnd ( &strm );
+ return ret;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffDecompress)
+ ( char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int small,
+ int verbosity )
+{
+ bz_stream strm;
+ int ret;
+
+ if (dest == NULL || destLen == NULL ||
+ source == NULL ||
+ (small != 0 && small != 1) ||
+ verbosity < 0 || verbosity > 4)
+ return BZ_PARAM_ERROR;
+
+ strm.bzalloc = NULL;
+ strm.bzfree = NULL;
+ strm.opaque = NULL;
+ ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
+ if (ret != BZ_OK) return ret;
+
+ strm.next_in = source;
+ strm.next_out = dest;
+ strm.avail_in = sourceLen;
+ strm.avail_out = *destLen;
+
+ ret = BZ2_bzDecompress ( &strm );
+ if (ret == BZ_OK) goto output_overflow_or_eof;
+ if (ret != BZ_STREAM_END) goto errhandler;
+
+ /* normal termination */
+ *destLen -= strm.avail_out;
+ BZ2_bzDecompressEnd ( &strm );
+ return BZ_OK;
+
+ output_overflow_or_eof:
+ if (strm.avail_out > 0) {
+ BZ2_bzDecompressEnd ( &strm );
+ return BZ_UNEXPECTED_EOF;
+ } else {
+ BZ2_bzDecompressEnd ( &strm );
+ return BZ_OUTBUFF_FULL;
+ };
+
+ errhandler:
+ BZ2_bzDecompressEnd ( &strm );
+ return ret;
+}
+
+
+/*---------------------------------------------------*/
+/*--
+ Code contributed by Yoshioka Tsuneo
+ (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.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
+ threading-safeness of it.
+ If this code breaks, please contact both Yoshioka and me.
+--*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+/*--
+ return version like "0.9.0c".
+--*/
+const char * BZ_API(BZ2_bzlibVersion)(void)
+{
+ return BZ_VERSION;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+
+#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
+# include <fcntl.h>
+# include <io.h>
+# define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+static
+BZFILE * bzopen_or_bzdopen
+ ( const char *path, /* no use when bzdopen */
+ int fd, /* no use when bzdopen */
+ const char *mode,
+ int open_mode) /* bzopen: 0, bzdopen:1 */
+{
+ int bzerr;
+ char unused[BZ_MAX_UNUSED];
+ int blockSize100k = 9;
+ int writing = 0;
+ char mode2[10] = "";
+ FILE *fp = NULL;
+ BZFILE *bzfp = NULL;
+ int verbosity = 0;
+ int workFactor = 30;
+ int smallMode = 0;
+ int nUnused = 0;
+
+ if (mode == NULL) return NULL;
+ while (*mode) {
+ switch (*mode) {
+ case 'r':
+ writing = 0; break;
+ case 'w':
+ writing = 1; break;
+ case 's':
+ smallMode = 1; break;
+ default:
+ if (isdigit((int)(*mode))) {
+ blockSize100k = *mode-'0';
+ }
+ }
+ mode++;
+ }
+ strcat(mode2, writing ? "w" : "r" );
+ strcat(mode2,"b"); /* binary mode */
+
+ if (open_mode==0) {
+ if (path==NULL || strcmp(path,"")==0) {
+ fp = (writing ? stdout : stdin);
+ SET_BINARY_MODE(fp);
+ } else {
+ fp = fopen(path,mode2);
+ }
+ } else {
+#ifdef BZ_STRICT_ANSI
+ fp = NULL;
+#else
+ fp = fdopen(fd,mode2);
+#endif
+ }
+ if (fp == NULL) return NULL;
+
+ if (writing) {
+ /* Guard against total chaos and anarchy -- JRS */
+ if (blockSize100k < 1) blockSize100k = 1;
+ if (blockSize100k > 9) blockSize100k = 9;
+ bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,
+ verbosity,workFactor);
+ } else {
+ bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,
+ unused,nUnused);
+ }
+ if (bzfp == NULL) {
+ if (fp != stdin && fp != stdout) fclose(fp);
+ return NULL;
+ }
+ return bzfp;
+}
+
+
+/*---------------------------------------------------*/
+/*--
+ open file for read or write.
+ ex) bzopen("file","w9")
+ case path="" or NULL => use stdin or stdout.
+--*/
+BZFILE * BZ_API(BZ2_bzopen)
+ ( const char *path,
+ const char *mode )
+{
+ return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);
+}
+
+
+/*---------------------------------------------------*/
+BZFILE * BZ_API(BZ2_bzdopen)
+ ( int fd,
+ const char *mode )
+{
+ return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )
+{
+ int bzerr, nread;
+ if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;
+ nread = BZ2_bzRead(&bzerr,b,buf,len);
+ if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {
+ return nread;
+ } else {
+ return -1;
+ }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )
+{
+ int bzerr;
+
+ BZ2_bzWrite(&bzerr,b,buf,len);
+ if(bzerr == BZ_OK){
+ return len;
+ }else{
+ return -1;
+ }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzflush) (BZFILE *b)
+{
+ /* do nothing now... */
+ return 0;
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzclose) (BZFILE* b)
+{
+ int bzerr;
+ FILE *fp = ((bzFile *)b)->handle;
+
+ if (b==NULL) {return;}
+ if(((bzFile*)b)->writing){
+ BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);
+ if(bzerr != BZ_OK){
+ BZ2_bzWriteClose(NULL,b,1,NULL,NULL);
+ }
+ }else{
+ BZ2_bzReadClose(&bzerr,b);
+ }
+ if(fp!=stdin && fp!=stdout){
+ fclose(fp);
+ }
+}
+
+
+/*---------------------------------------------------*/
+/*--
+ return last error code
+--*/
+static char *bzerrorstrings[] = {
+ "OK"
+ ,"SEQUENCE_ERROR"
+ ,"PARAM_ERROR"
+ ,"MEM_ERROR"
+ ,"DATA_ERROR"
+ ,"DATA_ERROR_MAGIC"
+ ,"IO_ERROR"
+ ,"UNEXPECTED_EOF"
+ ,"OUTBUFF_FULL"
+ ,"CONFIG_ERROR"
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+};
+
+
+const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)
+{
+ int err = ((bzFile *)b)->lastErr;
+
+ if(err>0) err = 0;
+ *errnum = err;
+ return bzerrorstrings[err*-1];
+}
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end bzlib.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/bzlib.h b/contrib/bzip2/bzlib.h
new file mode 100644
index 0000000..c9447a2
--- /dev/null
+++ b/contrib/bzip2/bzlib.h
@@ -0,0 +1,319 @@
+
+/*-------------------------------------------------------------*/
+/*--- Public header file for the library. ---*/
+/*--- 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-2000 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@acm.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.
+--*/
+
+
+#ifndef _BZLIB_H
+#define _BZLIB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BZ_RUN 0
+#define BZ_FLUSH 1
+#define BZ_FINISH 2
+
+#define BZ_OK 0
+#define BZ_RUN_OK 1
+#define BZ_FLUSH_OK 2
+#define BZ_FINISH_OK 3
+#define BZ_STREAM_END 4
+#define BZ_SEQUENCE_ERROR (-1)
+#define BZ_PARAM_ERROR (-2)
+#define BZ_MEM_ERROR (-3)
+#define BZ_DATA_ERROR (-4)
+#define BZ_DATA_ERROR_MAGIC (-5)
+#define BZ_IO_ERROR (-6)
+#define BZ_UNEXPECTED_EOF (-7)
+#define BZ_OUTBUFF_FULL (-8)
+#define BZ_CONFIG_ERROR (-9)
+
+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;
+
+
+#ifndef BZ_IMPORT
+#define BZ_EXPORT
+#endif
+
+#ifdef _WIN32
+# include <stdio.h>
+# include <windows.h>
+# ifdef small
+ /* windows.h define small to char */
+# undef small
+# endif
+# ifdef BZ_EXPORT
+# define BZ_API(func) WINAPI func
+# define BZ_EXTERN extern
+# else
+ /* import windows dll dynamically */
+# define BZ_API(func) (WINAPI * func)
+# define BZ_EXTERN
+# endif
+#else
+# define BZ_API(func) func
+# define BZ_EXTERN extern
+#endif
+
+
+/*-- Core (low-level) library functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressInit) (
+ bz_stream* strm,
+ int blockSize100k,
+ int verbosity,
+ int workFactor
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompress) (
+ bz_stream* strm,
+ int action
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (
+ bz_stream* strm
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (
+ bz_stream *strm,
+ int verbosity,
+ int small
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompress) (
+ bz_stream* strm
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (
+ bz_stream *strm
+ );
+
+
+
+/*-- High(er) level library functions --*/
+
+#ifndef BZ_NO_STDIO
+#define BZ_MAX_UNUSED 5000
+
+typedef void BZFILE;
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (
+ int* bzerror,
+ FILE* f,
+ int verbosity,
+ int small,
+ void* unused,
+ int nUnused
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadClose) (
+ int* bzerror,
+ BZFILE* b
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (
+ int* bzerror,
+ BZFILE* b,
+ void** unused,
+ int* nUnused
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzRead) (
+ int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (
+ int* bzerror,
+ FILE* f,
+ int blockSize100k,
+ int verbosity,
+ int workFactor
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzWrite) (
+ int* bzerror,
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose) (
+ int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in,
+ unsigned int* nbytes_out
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (
+ int* bzerror,
+ BZFILE* b,
+ int abandon,
+ unsigned int* nbytes_in_lo32,
+ unsigned int* nbytes_in_hi32,
+ unsigned int* nbytes_out_lo32,
+ unsigned int* nbytes_out_hi32
+ );
+#endif
+
+
+/*-- Utility functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
+ char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int blockSize100k,
+ int verbosity,
+ int workFactor
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (
+ char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int small,
+ int verbosity
+ );
+
+
+/*--
+ Code contributed by Yoshioka Tsuneo
+ (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.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
+ threading-safeness of it.
+ If this code breaks, please contact both Yoshioka and me.
+--*/
+
+BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
+ void
+ );
+
+#ifndef BZ_NO_STDIO
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
+ const char *path,
+ const char *mode
+ );
+
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
+ int fd,
+ const char *mode
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzread) (
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzwrite) (
+ BZFILE* b,
+ void* buf,
+ int len
+ );
+
+BZ_EXTERN int BZ_API(BZ2_bzflush) (
+ BZFILE* b
+ );
+
+BZ_EXTERN void BZ_API(BZ2_bzclose) (
+ BZFILE* b
+ );
+
+BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
+ BZFILE *b,
+ int *errnum
+ );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*-------------------------------------------------------------*/
+/*--- end bzlib.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/bzlib_private.h b/contrib/bzip2/bzlib_private.h
new file mode 100644
index 0000000..fb51c7a
--- /dev/null
+++ b/contrib/bzip2/bzlib_private.h
@@ -0,0 +1,530 @@
+
+/*-------------------------------------------------------------*/
+/*--- Private header file for the library. ---*/
+/*--- 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-2000 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@acm.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.
+--*/
+
+
+#ifndef _BZLIB_PRIVATE_H
+#define _BZLIB_PRIVATE_H
+
+#include <stdlib.h>
+
+#ifndef BZ_NO_STDIO
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#endif
+
+#include "bzlib.h"
+
+
+
+/*-- General stuff. --*/
+
+#define BZ_VERSION "1.0.1, 23-June-2000"
+
+typedef char Char;
+typedef unsigned char Bool;
+typedef unsigned char UChar;
+typedef int Int32;
+typedef unsigned int UInt32;
+typedef short Int16;
+typedef unsigned short UInt16;
+
+#define True ((Bool)1)
+#define False ((Bool)0)
+
+#ifndef __GNUC__
+#define __inline__ /* */
+#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)) { \
+ fprintf ( stderr, \
+ "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
+ exit(1); \
+ }}
+#else
+#define AssertD(cond,msg) /* */
+#endif
+#define VPrintf0(zf) \
+ fprintf(stderr,zf)
+#define VPrintf1(zf,za1) \
+ fprintf(stderr,zf,za1)
+#define VPrintf2(zf,za1,za2) \
+ fprintf(stderr,zf,za1,za2)
+#define VPrintf3(zf,za1,za2,za3) \
+ fprintf(stderr,zf,za1,za2,za3)
+#define VPrintf4(zf,za1,za2,za3,za4) \
+ 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) /* */
+#endif
+
+
+#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
+#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
+
+
+/*-- Constants for the back end. --*/
+
+#define BZ_MAX_ALPHA_SIZE 258
+#define BZ_MAX_CODE_LEN 23
+
+#define BZ_RUNA 0
+#define BZ_RUNB 1
+
+#define BZ_N_GROUPS 6
+#define BZ_G_SIZE 50
+#define BZ_N_ITERS 4
+
+#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
+
+
+
+/*-- Stuff for randomising repetitive blocks. --*/
+
+extern Int32 BZ2_rNums[512];
+
+#define BZ_RAND_DECLS \
+ Int32 rNToGo; \
+ Int32 rTPos \
+
+#define BZ_RAND_INIT_MASK \
+ s->rNToGo = 0; \
+ s->rTPos = 0 \
+
+#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
+
+#define BZ_RAND_UPD_MASK \
+ if (s->rNToGo == 0) { \
+ s->rNToGo = BZ2_rNums[s->rTPos]; \
+ s->rTPos++; \
+ if (s->rTPos == 512) s->rTPos = 0; \
+ } \
+ s->rNToGo--;
+
+
+
+/*-- Stuff for doing CRCs. --*/
+
+extern UInt32 BZ2_crc32Table[256];
+
+#define BZ_INITIALISE_CRC(crcVar) \
+{ \
+ crcVar = 0xffffffffL; \
+}
+
+#define BZ_FINALISE_CRC(crcVar) \
+{ \
+ crcVar = ~(crcVar); \
+}
+
+#define BZ_UPDATE_CRC(crcVar,cha) \
+{ \
+ crcVar = (crcVar << 8) ^ \
+ BZ2_crc32Table[(crcVar >> 24) ^ \
+ ((UChar)cha)]; \
+}
+
+
+
+/*-- States and modes for compression. --*/
+
+#define BZ_M_IDLE 1
+#define BZ_M_RUNNING 2
+#define BZ_M_FLUSHING 3
+#define BZ_M_FINISHING 4
+
+#define BZ_S_OUTPUT 1
+#define BZ_S_INPUT 2
+
+#define BZ_N_RADIX 2
+#define BZ_N_QSORT 12
+#define BZ_N_SHELL 18
+#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
+
+
+
+
+/*-- Structure holding all the compression-side stuff. --*/
+
+typedef
+ struct {
+ /* pointer back to the struct bz_stream */
+ bz_stream* strm;
+
+ /* mode this stream is in, and whether inputting */
+ /* or outputting data */
+ Int32 mode;
+ Int32 state;
+
+ /* remembers avail_in when flush/finish requested */
+ UInt32 avail_in_expect;
+
+ /* for doing the block sorting */
+ UInt32* arr1;
+ UInt32* arr2;
+ UInt32* ftab;
+ Int32 origPtr;
+
+ /* aliases for arr1 and arr2 */
+ UInt32* ptr;
+ UChar* block;
+ UInt16* mtfv;
+ UChar* zbits;
+
+ /* for deciding when to use the fallback sorting algorithm */
+ Int32 workFactor;
+
+ /* run-length-encoding of the input */
+ UInt32 state_in_ch;
+ Int32 state_in_len;
+ BZ_RAND_DECLS;
+
+ /* input and output limits and current posns */
+ Int32 nblock;
+ Int32 nblockMAX;
+ Int32 numZ;
+ Int32 state_out_pos;
+
+ /* map of bytes used in block */
+ Int32 nInUse;
+ Bool inUse[256];
+ UChar unseqToSeq[256];
+
+ /* the buffer for bit stream creation */
+ UInt32 bsBuff;
+ Int32 bsLive;
+
+ /* block and combined CRCs */
+ UInt32 blockCRC;
+ UInt32 combinedCRC;
+
+ /* misc administratium */
+ Int32 verbosity;
+ Int32 blockNo;
+ Int32 blockSize100k;
+
+ /* stuff for coding the MTF values */
+ Int32 nMTF;
+ Int32 mtfFreq [BZ_MAX_ALPHA_SIZE];
+ UChar selector [BZ_MAX_SELECTORS];
+ UChar selectorMtf[BZ_MAX_SELECTORS];
+
+ UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ /* second dimension: only 3 needed; 4 makes index calculations faster */
+ UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4];
+
+ }
+ EState;
+
+
+
+/*-- externs for compression. --*/
+
+extern void
+BZ2_blockSort ( EState* );
+
+extern void
+BZ2_compressBlock ( EState*, Bool );
+
+extern void
+BZ2_bsInitWrite ( EState* );
+
+extern void
+BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
+
+extern void
+BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
+
+
+
+/*-- states for decompression. --*/
+
+#define BZ_X_IDLE 1
+#define BZ_X_OUTPUT 2
+
+#define BZ_X_MAGIC_1 10
+#define BZ_X_MAGIC_2 11
+#define BZ_X_MAGIC_3 12
+#define BZ_X_MAGIC_4 13
+#define BZ_X_BLKHDR_1 14
+#define BZ_X_BLKHDR_2 15
+#define BZ_X_BLKHDR_3 16
+#define BZ_X_BLKHDR_4 17
+#define BZ_X_BLKHDR_5 18
+#define BZ_X_BLKHDR_6 19
+#define BZ_X_BCRC_1 20
+#define BZ_X_BCRC_2 21
+#define BZ_X_BCRC_3 22
+#define BZ_X_BCRC_4 23
+#define BZ_X_RANDBIT 24
+#define BZ_X_ORIGPTR_1 25
+#define BZ_X_ORIGPTR_2 26
+#define BZ_X_ORIGPTR_3 27
+#define BZ_X_MAPPING_1 28
+#define BZ_X_MAPPING_2 29
+#define BZ_X_SELECTOR_1 30
+#define BZ_X_SELECTOR_2 31
+#define BZ_X_SELECTOR_3 32
+#define BZ_X_CODING_1 33
+#define BZ_X_CODING_2 34
+#define BZ_X_CODING_3 35
+#define BZ_X_MTF_1 36
+#define BZ_X_MTF_2 37
+#define BZ_X_MTF_3 38
+#define BZ_X_MTF_4 39
+#define BZ_X_MTF_5 40
+#define BZ_X_MTF_6 41
+#define BZ_X_ENDHDR_2 42
+#define BZ_X_ENDHDR_3 43
+#define BZ_X_ENDHDR_4 44
+#define BZ_X_ENDHDR_5 45
+#define BZ_X_ENDHDR_6 46
+#define BZ_X_CCRC_1 47
+#define BZ_X_CCRC_2 48
+#define BZ_X_CCRC_3 49
+#define BZ_X_CCRC_4 50
+
+
+
+/*-- Constants for the fast MTF decoder. --*/
+
+#define MTFA_SIZE 4096
+#define MTFL_SIZE 16
+
+
+
+/*-- Structure holding all the decompression-side stuff. --*/
+
+typedef
+ struct {
+ /* pointer back to the struct bz_stream */
+ bz_stream* strm;
+
+ /* state indicator for this stream */
+ Int32 state;
+
+ /* for doing the final run-length decoding */
+ UChar state_out_ch;
+ Int32 state_out_len;
+ Bool blockRandomised;
+ BZ_RAND_DECLS;
+
+ /* the buffer for bit stream reading */
+ UInt32 bsBuff;
+ Int32 bsLive;
+
+ /* misc administratium */
+ Int32 blockSize100k;
+ Bool smallDecompress;
+ Int32 currBlockNo;
+ Int32 verbosity;
+
+ /* for undoing the Burrows-Wheeler transform */
+ Int32 origPtr;
+ UInt32 tPos;
+ Int32 k0;
+ Int32 unzftab[256];
+ Int32 nblock_used;
+ Int32 cftab[257];
+ Int32 cftabCopy[257];
+
+ /* for undoing the Burrows-Wheeler transform (FAST) */
+ UInt32 *tt;
+
+ /* for undoing the Burrows-Wheeler transform (SMALL) */
+ UInt16 *ll16;
+ UChar *ll4;
+
+ /* stored and calculated CRCs */
+ UInt32 storedBlockCRC;
+ UInt32 storedCombinedCRC;
+ UInt32 calculatedBlockCRC;
+ UInt32 calculatedCombinedCRC;
+
+ /* map of bytes used in block */
+ Int32 nInUse;
+ Bool inUse[256];
+ Bool inUse16[16];
+ UChar seqToUnseq[256];
+
+ /* for decoding the MTF values */
+ UChar mtfa [MTFA_SIZE];
+ Int32 mtfbase[256 / MTFL_SIZE];
+ UChar selector [BZ_MAX_SELECTORS];
+ UChar selectorMtf[BZ_MAX_SELECTORS];
+ UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+
+ Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 minLens[BZ_N_GROUPS];
+
+ /* save area for scalars in the main decompress code */
+ Int32 save_i;
+ Int32 save_j;
+ Int32 save_t;
+ Int32 save_alphaSize;
+ Int32 save_nGroups;
+ Int32 save_nSelectors;
+ Int32 save_EOB;
+ Int32 save_groupNo;
+ Int32 save_groupPos;
+ Int32 save_nextSym;
+ Int32 save_nblockMAX;
+ Int32 save_nblock;
+ Int32 save_es;
+ Int32 save_N;
+ Int32 save_curr;
+ Int32 save_zt;
+ Int32 save_zn;
+ Int32 save_zvec;
+ Int32 save_zj;
+ Int32 save_gSel;
+ Int32 save_gMinlen;
+ Int32* save_gLimit;
+ Int32* save_gBase;
+ Int32* save_gPerm;
+
+ }
+ DState;
+
+
+
+/*-- Macros for decompression. --*/
+
+#define BZ_GET_FAST(cccc) \
+ s->tPos = s->tt[s->tPos]; \
+ cccc = (UChar)(s->tPos & 0xff); \
+ s->tPos >>= 8;
+
+#define BZ_GET_FAST_C(cccc) \
+ c_tPos = c_tt[c_tPos]; \
+ cccc = (UChar)(c_tPos & 0xff); \
+ c_tPos >>= 8;
+
+#define SET_LL4(i,n) \
+ { if (((i) & 0x1) == 0) \
+ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \
+ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \
+ }
+
+#define GET_LL4(i) \
+ ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
+
+#define SET_LL(i,n) \
+ { s->ll16[i] = (UInt16)(n & 0x0000ffff); \
+ SET_LL4(i, n >> 16); \
+ }
+
+#define GET_LL(i) \
+ (((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);
+
+
+/*-- externs for decompression. --*/
+
+extern Int32
+BZ2_indexIntoF ( Int32, Int32* );
+
+extern Int32
+BZ2_decompress ( DState* );
+
+extern void
+BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
+ Int32, Int32, Int32 );
+
+
+#endif
+
+
+/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
+
+#ifdef BZ_NO_STDIO
+#ifndef NULL
+#define NULL 0
+#endif
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end bzlib_private.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/compress.c b/contrib/bzip2/compress.c
new file mode 100644
index 0000000..cc5e31d
--- /dev/null
+++ b/contrib/bzip2/compress.c
@@ -0,0 +1,714 @@
+
+/*-------------------------------------------------------------*/
+/*--- Compression machinery (not incl block sorting) ---*/
+/*--- 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-2000 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@acm.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
+--*/
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+/*--- Bit stream I/O ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+void BZ2_bsInitWrite ( EState* s )
+{
+ s->bsLive = 0;
+ s->bsBuff = 0;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsFinishWrite ( EState* s )
+{
+ while (s->bsLive > 0) {
+ s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
+ s->numZ++;
+ s->bsBuff <<= 8;
+ s->bsLive -= 8;
+ }
+}
+
+
+/*---------------------------------------------------*/
+#define bsNEEDW(nz) \
+{ \
+ while (s->bsLive >= 8) { \
+ s->zbits[s->numZ] \
+ = (UChar)(s->bsBuff >> 24); \
+ s->numZ++; \
+ s->bsBuff <<= 8; \
+ s->bsLive -= 8; \
+ } \
+}
+
+
+/*---------------------------------------------------*/
+static
+__inline__
+void bsW ( EState* s, Int32 n, UInt32 v )
+{
+ bsNEEDW ( n );
+ s->bsBuff |= (v << (32 - s->bsLive - n));
+ s->bsLive += n;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUInt32 ( EState* s, UInt32 u )
+{
+ bsW ( s, 8, (u >> 24) & 0xffL );
+ bsW ( s, 8, (u >> 16) & 0xffL );
+ bsW ( s, 8, (u >> 8) & 0xffL );
+ bsW ( s, 8, u & 0xffL );
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUChar ( EState* s, UChar c )
+{
+ bsW( s, 8, (UInt32)c );
+}
+
+
+/*---------------------------------------------------*/
+/*--- The back end proper ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+static
+void makeMaps_e ( EState* s )
+{
+ Int32 i;
+ s->nInUse = 0;
+ for (i = 0; i < 256; i++)
+ if (s->inUse[i]) {
+ s->unseqToSeq[i] = s->nInUse;
+ s->nInUse++;
+ }
+}
+
+
+/*---------------------------------------------------*/
+static
+void generateMTFValues ( EState* s )
+{
+ UChar yy[256];
+ Int32 i, j;
+ Int32 zPend;
+ Int32 wr;
+ Int32 EOB;
+
+ /*
+ After sorting (eg, here),
+ s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
+ and
+ ((UChar*)s->arr2) [ 0 .. s->nblock-1 ]
+ holds the original block data.
+
+ The first thing to do is generate the MTF values,
+ and put them in
+ ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
+ Because there are strictly fewer or equal MTF values
+ than block values, ptr values in this area are overwritten
+ with MTF values only when they are no longer needed.
+
+ The final compressed bitstream is generated into the
+ area starting at
+ (UChar*) (&((UChar*)s->arr2)[s->nblock])
+
+ These storage aliases are set up in bzCompressInit(),
+ except for the last one, which is arranged in
+ compressBlock().
+ */
+ UInt32* ptr = s->ptr;
+ UChar* block = s->block;
+ UInt16* mtfv = s->mtfv;
+
+ makeMaps_e ( s );
+ EOB = s->nInUse+1;
+
+ for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
+
+ wr = 0;
+ zPend = 0;
+ for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
+
+ for (i = 0; i < s->nblock; i++) {
+ UChar ll_i;
+ AssertD ( wr <= i, "generateMTFValues(1)" );
+ j = ptr[i]-1; if (j < 0) j += s->nblock;
+ ll_i = s->unseqToSeq[block[j]];
+ AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
+
+ if (yy[0] == ll_i) {
+ zPend++;
+ } else {
+
+ if (zPend > 0) {
+ zPend--;
+ while (True) {
+ if (zPend & 1) {
+ mtfv[wr] = BZ_RUNB; wr++;
+ s->mtfFreq[BZ_RUNB]++;
+ } else {
+ mtfv[wr] = BZ_RUNA; wr++;
+ s->mtfFreq[BZ_RUNA]++;
+ }
+ if (zPend < 2) break;
+ zPend = (zPend - 2) / 2;
+ };
+ zPend = 0;
+ }
+ {
+ register UChar rtmp;
+ register UChar* ryy_j;
+ register UChar rll_i;
+ rtmp = yy[1];
+ yy[1] = yy[0];
+ ryy_j = &(yy[1]);
+ rll_i = ll_i;
+ while ( rll_i != rtmp ) {
+ register UChar rtmp2;
+ ryy_j++;
+ rtmp2 = rtmp;
+ rtmp = *ryy_j;
+ *ryy_j = rtmp2;
+ };
+ yy[0] = rtmp;
+ j = ryy_j - &(yy[0]);
+ mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
+ }
+
+ }
+ }
+
+ if (zPend > 0) {
+ zPend--;
+ while (True) {
+ if (zPend & 1) {
+ mtfv[wr] = BZ_RUNB; wr++;
+ s->mtfFreq[BZ_RUNB]++;
+ } else {
+ mtfv[wr] = BZ_RUNA; wr++;
+ s->mtfFreq[BZ_RUNA]++;
+ }
+ if (zPend < 2) break;
+ zPend = (zPend - 2) / 2;
+ };
+ zPend = 0;
+ }
+
+ mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
+
+ s->nMTF = wr;
+}
+
+
+/*---------------------------------------------------*/
+#define BZ_LESSER_ICOST 0
+#define BZ_GREATER_ICOST 15
+
+static
+void sendMTFValues ( EState* s )
+{
+ Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
+ Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
+ Int32 nGroups, nBytes;
+
+ /*--
+ UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ is a global since the decoder also needs it.
+
+ Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+ are also globals only used in this proc.
+ Made global to keep stack frame size small.
+ --*/
+
+
+ UInt16 cost[BZ_N_GROUPS];
+ Int32 fave[BZ_N_GROUPS];
+
+ UInt16* mtfv = s->mtfv;
+
+ if (s->verbosity >= 3)
+ VPrintf3( " %d in block, %d after MTF & 1-2 coding, "
+ "%d+2 syms in use\n",
+ s->nblock, s->nMTF, s->nInUse );
+
+ alphaSize = s->nInUse+2;
+ for (t = 0; t < BZ_N_GROUPS; t++)
+ for (v = 0; v < alphaSize; v++)
+ s->len[t][v] = BZ_GREATER_ICOST;
+
+ /*--- Decide how many coding tables to use ---*/
+ AssertH ( s->nMTF > 0, 3001 );
+ if (s->nMTF < 200) nGroups = 2; else
+ if (s->nMTF < 600) nGroups = 3; else
+ if (s->nMTF < 1200) nGroups = 4; else
+ if (s->nMTF < 2400) nGroups = 5; else
+ nGroups = 6;
+
+ /*--- Generate an initial set of coding tables ---*/
+ {
+ Int32 nPart, remF, tFreq, aFreq;
+
+ nPart = nGroups;
+ remF = s->nMTF;
+ gs = 0;
+ while (nPart > 0) {
+ tFreq = remF / nPart;
+ ge = gs-1;
+ aFreq = 0;
+ while (aFreq < tFreq && ge < alphaSize-1) {
+ ge++;
+ aFreq += s->mtfFreq[ge];
+ }
+
+ if (ge > gs
+ && nPart != nGroups && nPart != 1
+ && ((nGroups-nPart) % 2 == 1)) {
+ aFreq -= s->mtfFreq[ge];
+ ge--;
+ }
+
+ if (s->verbosity >= 3)
+ VPrintf5( " initial group %d, [%d .. %d], "
+ "has %d syms (%4.1f%%)\n",
+ nPart, gs, ge, aFreq,
+ (100.0 * (float)aFreq) / (float)(s->nMTF) );
+
+ for (v = 0; v < alphaSize; v++)
+ if (v >= gs && v <= ge)
+ s->len[nPart-1][v] = BZ_LESSER_ICOST; else
+ s->len[nPart-1][v] = BZ_GREATER_ICOST;
+
+ nPart--;
+ gs = ge+1;
+ remF -= aFreq;
+ }
+ }
+
+ /*---
+ Iterate up to BZ_N_ITERS times to improve the tables.
+ ---*/
+ for (iter = 0; iter < BZ_N_ITERS; iter++) {
+
+ for (t = 0; t < nGroups; t++) fave[t] = 0;
+
+ for (t = 0; t < nGroups; t++)
+ for (v = 0; v < alphaSize; v++)
+ s->rfreq[t][v] = 0;
+
+ /*---
+ Set up an auxiliary length table which is used to fast-track
+ the common case (nGroups == 6).
+ ---*/
+ if (nGroups == 6) {
+ for (v = 0; v < alphaSize; v++) {
+ s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
+ s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
+ s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
+ }
+ }
+
+ nSelectors = 0;
+ totc = 0;
+ gs = 0;
+ while (True) {
+
+ /*--- Set group start & end marks. --*/
+ if (gs >= s->nMTF) break;
+ ge = gs + BZ_G_SIZE - 1;
+ if (ge >= s->nMTF) ge = s->nMTF-1;
+
+ /*--
+ Calculate the cost of this group as coded
+ by each of the coding tables.
+ --*/
+ for (t = 0; t < nGroups; t++) cost[t] = 0;
+
+ if (nGroups == 6 && 50 == ge-gs+1) {
+ /*--- fast track the common case ---*/
+ register UInt32 cost01, cost23, cost45;
+ register UInt16 icv;
+ cost01 = cost23 = cost45 = 0;
+
+# define BZ_ITER(nn) \
+ icv = mtfv[gs+(nn)]; \
+ cost01 += s->len_pack[icv][0]; \
+ cost23 += s->len_pack[icv][1]; \
+ cost45 += s->len_pack[icv][2]; \
+
+ BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4);
+ BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9);
+ BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
+ BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
+ BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
+ BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
+ BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
+ BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
+ BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
+ BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);
+
+# undef BZ_ITER
+
+ cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
+ cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
+ cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
+
+ } else {
+ /*--- slow version which correctly handles all situations ---*/
+ for (i = gs; i <= ge; i++) {
+ UInt16 icv = mtfv[i];
+ for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
+ }
+ }
+
+ /*--
+ Find the coding table which is best for this group,
+ and record its identity in the selector table.
+ --*/
+ bc = 999999999; bt = -1;
+ for (t = 0; t < nGroups; t++)
+ if (cost[t] < bc) { bc = cost[t]; bt = t; };
+ totc += bc;
+ fave[bt]++;
+ s->selector[nSelectors] = bt;
+ nSelectors++;
+
+ /*--
+ Increment the symbol frequencies for the selected table.
+ --*/
+ if (nGroups == 6 && 50 == ge-gs+1) {
+ /*--- fast track the common case ---*/
+
+# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
+
+ BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4);
+ BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9);
+ BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
+ BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
+ BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
+ BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
+ BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
+ BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
+ BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
+ BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);
+
+# undef BZ_ITUR
+
+ } else {
+ /*--- slow version which correctly handles all situations ---*/
+ for (i = gs; i <= ge; i++)
+ s->rfreq[bt][ mtfv[i] ]++;
+ }
+
+ gs = ge+1;
+ }
+ if (s->verbosity >= 3) {
+ VPrintf2 ( " pass %d: size is %d, grp uses are ",
+ iter+1, totc/8 );
+ for (t = 0; t < nGroups; t++)
+ VPrintf1 ( "%d ", fave[t] );
+ VPrintf0 ( "\n" );
+ }
+
+ /*--
+ Recompute the tables based on the accumulated frequencies.
+ --*/
+ for (t = 0; t < nGroups; t++)
+ BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
+ alphaSize, 20 );
+ }
+
+
+ AssertH( nGroups < 8, 3002 );
+ AssertH( nSelectors < 32768 &&
+ nSelectors <= (2 + (900000 / BZ_G_SIZE)),
+ 3003 );
+
+
+ /*--- Compute MTF values for the selectors. ---*/
+ {
+ UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
+ for (i = 0; i < nGroups; i++) pos[i] = i;
+ for (i = 0; i < nSelectors; i++) {
+ ll_i = s->selector[i];
+ j = 0;
+ tmp = pos[j];
+ while ( ll_i != tmp ) {
+ j++;
+ tmp2 = tmp;
+ tmp = pos[j];
+ pos[j] = tmp2;
+ };
+ pos[0] = tmp;
+ s->selectorMtf[i] = j;
+ }
+ };
+
+ /*--- Assign actual codes for the tables. --*/
+ for (t = 0; t < nGroups; t++) {
+ minLen = 32;
+ maxLen = 0;
+ for (i = 0; i < alphaSize; i++) {
+ if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+ if (s->len[t][i] < minLen) minLen = s->len[t][i];
+ }
+ AssertH ( !(maxLen > 20), 3004 );
+ AssertH ( !(minLen < 1), 3005 );
+ BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
+ minLen, maxLen, alphaSize );
+ }
+
+ /*--- Transmit the mapping table. ---*/
+ {
+ Bool inUse16[16];
+ for (i = 0; i < 16; i++) {
+ inUse16[i] = False;
+ for (j = 0; j < 16; j++)
+ if (s->inUse[i * 16 + j]) inUse16[i] = True;
+ }
+
+ nBytes = s->numZ;
+ for (i = 0; i < 16; i++)
+ if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
+
+ for (i = 0; i < 16; i++)
+ if (inUse16[i])
+ for (j = 0; j < 16; j++) {
+ if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
+ }
+
+ if (s->verbosity >= 3)
+ VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes );
+ }
+
+ /*--- Now the selectors. ---*/
+ nBytes = s->numZ;
+ bsW ( s, 3, nGroups );
+ bsW ( s, 15, nSelectors );
+ for (i = 0; i < nSelectors; i++) {
+ for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
+ bsW(s,1,0);
+ }
+ if (s->verbosity >= 3)
+ VPrintf1( "selectors %d, ", s->numZ-nBytes );
+
+ /*--- Now the coding tables. ---*/
+ nBytes = s->numZ;
+
+ for (t = 0; t < nGroups; t++) {
+ Int32 curr = s->len[t][0];
+ bsW ( s, 5, curr );
+ for (i = 0; i < alphaSize; i++) {
+ while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
+ while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
+ bsW ( s, 1, 0 );
+ }
+ }
+
+ if (s->verbosity >= 3)
+ VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
+
+ /*--- And finally, the block data proper ---*/
+ nBytes = s->numZ;
+ selCtr = 0;
+ gs = 0;
+ while (True) {
+ if (gs >= s->nMTF) break;
+ ge = gs + BZ_G_SIZE - 1;
+ if (ge >= s->nMTF) ge = s->nMTF-1;
+ AssertH ( s->selector[selCtr] < nGroups, 3006 );
+
+ if (nGroups == 6 && 50 == ge-gs+1) {
+ /*--- fast track the common case ---*/
+ UInt16 mtfv_i;
+ UChar* s_len_sel_selCtr
+ = &(s->len[s->selector[selCtr]][0]);
+ Int32* s_code_sel_selCtr
+ = &(s->code[s->selector[selCtr]][0]);
+
+# define BZ_ITAH(nn) \
+ mtfv_i = mtfv[gs+(nn)]; \
+ bsW ( s, \
+ s_len_sel_selCtr[mtfv_i], \
+ s_code_sel_selCtr[mtfv_i] )
+
+ BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4);
+ BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9);
+ BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
+ BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
+ BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
+ BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
+ BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
+ BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
+ BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
+ BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);
+
+# undef BZ_ITAH
+
+ } else {
+ /*--- slow version which correctly handles all situations ---*/
+ for (i = gs; i <= ge; i++) {
+ bsW ( s,
+ s->len [s->selector[selCtr]] [mtfv[i]],
+ s->code [s->selector[selCtr]] [mtfv[i]] );
+ }
+ }
+
+
+ gs = ge+1;
+ selCtr++;
+ }
+ AssertH( selCtr == nSelectors, 3007 );
+
+ if (s->verbosity >= 3)
+ VPrintf1( "codes %d\n", s->numZ-nBytes );
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_compressBlock ( EState* s, Bool is_last_block )
+{
+ if (s->nblock > 0) {
+
+ BZ_FINALISE_CRC ( s->blockCRC );
+ s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
+ s->combinedCRC ^= s->blockCRC;
+ if (s->blockNo > 1) s->numZ = 0;
+
+ if (s->verbosity >= 2)
+ VPrintf4( " block %d: crc = 0x%8x, "
+ "combined CRC = 0x%8x, size = %d\n",
+ s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
+
+ BZ2_blockSort ( s );
+ }
+
+ s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
+
+ /*-- If this is the first block, create the stream header. --*/
+ if (s->blockNo == 1) {
+ BZ2_bsInitWrite ( s );
+ bsPutUChar ( s, 'B' );
+ bsPutUChar ( s, 'Z' );
+ bsPutUChar ( s, 'h' );
+ bsPutUChar ( s, (UChar)('0' + s->blockSize100k) );
+ }
+
+ if (s->nblock > 0) {
+
+ bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
+ bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
+ bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
+
+ /*-- Now the block's CRC, so it is in a known place. --*/
+ bsPutUInt32 ( s, s->blockCRC );
+
+ /*--
+ Now a single bit indicating (non-)randomisation.
+ As of version 0.9.5, we use a better sorting algorithm
+ which makes randomisation unnecessary. So always set
+ the randomised bit to 'no'. Of course, the decoder
+ still needs to be able to handle randomised blocks
+ so as to maintain backwards compatibility with
+ older versions of bzip2.
+ --*/
+ bsW(s,1,0);
+
+ bsW ( s, 24, s->origPtr );
+ generateMTFValues ( s );
+ sendMTFValues ( s );
+ }
+
+
+ /*-- If this is the last block, add the stream trailer. --*/
+ if (is_last_block) {
+
+ bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
+ bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
+ bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
+ bsPutUInt32 ( s, s->combinedCRC );
+ if (s->verbosity >= 2)
+ VPrintf1( " final combined CRC = 0x%x\n ", s->combinedCRC );
+ bsFinishWrite ( s );
+ }
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end compress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/crctable.c b/contrib/bzip2/crctable.c
new file mode 100644
index 0000000..61c040c
--- /dev/null
+++ b/contrib/bzip2/crctable.c
@@ -0,0 +1,144 @@
+
+/*-------------------------------------------------------------*/
+/*--- Table for doing CRCs ---*/
+/*--- 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-2000 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@acm.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.
+--*/
+
+
+#include "bzlib_private.h"
+
+/*--
+ I think this is an implementation of the AUTODIN-II,
+ Ethernet & FDDI 32-bit CRC standard. Vaguely derived
+ from code by Rob Warnock, in Section 51 of the
+ comp.compression FAQ.
+--*/
+
+UInt32 BZ2_crc32Table[256] = {
+
+ /*-- Ugly, innit? --*/
+
+ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
+ 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
+ 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
+ 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
+ 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
+ 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
+ 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
+ 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
+ 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
+ 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
+ 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
+ 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
+ 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
+ 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
+ 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
+ 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
+ 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
+ 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
+ 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
+ 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
+ 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
+ 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
+ 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
+ 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
+ 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
+ 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
+ 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
+ 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
+ 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
+ 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
+ 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
+ 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
+ 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
+ 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
+ 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
+ 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
+ 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
+ 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
+ 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
+ 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
+ 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
+ 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
+ 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
+ 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
+ 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
+ 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
+ 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
+ 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
+ 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
+ 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
+ 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
+ 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
+ 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
+ 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
+ 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
+ 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
+ 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
+ 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
+ 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
+ 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
+ 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
+ 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
+ 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
+ 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end crctable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/decompress.c b/contrib/bzip2/decompress.c
new file mode 100644
index 0000000..cdced18
--- /dev/null
+++ b/contrib/bzip2/decompress.c
@@ -0,0 +1,660 @@
+
+/*-------------------------------------------------------------*/
+/*--- Decompression machinery ---*/
+/*--- 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-2000 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@acm.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.
+--*/
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+static
+void makeMaps_d ( DState* s )
+{
+ Int32 i;
+ s->nInUse = 0;
+ for (i = 0; i < 256; i++)
+ if (s->inUse[i]) {
+ s->seqToUnseq[s->nInUse] = i;
+ s->nInUse++;
+ }
+}
+
+
+/*---------------------------------------------------*/
+#define RETURN(rrr) \
+ { retVal = rrr; goto save_state_and_return; };
+
+#define GET_BITS(lll,vvv,nnn) \
+ case lll: s->state = lll; \
+ while (True) { \
+ if (s->bsLive >= nnn) { \
+ UInt32 v; \
+ v = (s->bsBuff >> \
+ (s->bsLive-nnn)) & ((1 << nnn)-1); \
+ s->bsLive -= nnn; \
+ vvv = v; \
+ break; \
+ } \
+ if (s->strm->avail_in == 0) RETURN(BZ_OK); \
+ s->bsBuff \
+ = (s->bsBuff << 8) | \
+ ((UInt32) \
+ (*((UChar*)(s->strm->next_in)))); \
+ s->bsLive += 8; \
+ s->strm->next_in++; \
+ s->strm->avail_in--; \
+ s->strm->total_in_lo32++; \
+ if (s->strm->total_in_lo32 == 0) \
+ s->strm->total_in_hi32++; \
+ }
+
+#define GET_UCHAR(lll,uuu) \
+ GET_BITS(lll,uuu,8)
+
+#define GET_BIT(lll,uuu) \
+ GET_BITS(lll,uuu,1)
+
+/*---------------------------------------------------*/
+#define GET_MTF_VAL(label1,label2,lval) \
+{ \
+ if (groupPos == 0) { \
+ groupNo++; \
+ if (groupNo >= nSelectors) \
+ RETURN(BZ_DATA_ERROR); \
+ groupPos = BZ_G_SIZE; \
+ gSel = s->selector[groupNo]; \
+ gMinlen = s->minLens[gSel]; \
+ gLimit = &(s->limit[gSel][0]); \
+ gPerm = &(s->perm[gSel][0]); \
+ gBase = &(s->base[gSel][0]); \
+ } \
+ groupPos--; \
+ zn = gMinlen; \
+ GET_BITS(label1, zvec, zn); \
+ while (1) { \
+ if (zn > 20 /* the longest code */) \
+ RETURN(BZ_DATA_ERROR); \
+ if (zvec <= gLimit[zn]) break; \
+ zn++; \
+ GET_BIT(label2, zj); \
+ zvec = (zvec << 1) | zj; \
+ }; \
+ if (zvec - gBase[zn] < 0 \
+ || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
+ RETURN(BZ_DATA_ERROR); \
+ lval = gPerm[zvec - gBase[zn]]; \
+}
+
+
+/*---------------------------------------------------*/
+Int32 BZ2_decompress ( DState* s )
+{
+ UChar uc;
+ Int32 retVal;
+ Int32 minLen, maxLen;
+ bz_stream* strm = s->strm;
+
+ /* stuff that needs to be saved/restored */
+ Int32 i;
+ Int32 j;
+ Int32 t;
+ Int32 alphaSize;
+ Int32 nGroups;
+ Int32 nSelectors;
+ Int32 EOB;
+ Int32 groupNo;
+ Int32 groupPos;
+ Int32 nextSym;
+ Int32 nblockMAX;
+ Int32 nblock;
+ Int32 es;
+ Int32 N;
+ Int32 curr;
+ Int32 zt;
+ Int32 zn;
+ Int32 zvec;
+ Int32 zj;
+ Int32 gSel;
+ Int32 gMinlen;
+ Int32* gLimit;
+ Int32* gBase;
+ Int32* gPerm;
+
+ if (s->state == BZ_X_MAGIC_1) {
+ /*initialise the save area*/
+ s->save_i = 0;
+ s->save_j = 0;
+ s->save_t = 0;
+ s->save_alphaSize = 0;
+ s->save_nGroups = 0;
+ s->save_nSelectors = 0;
+ s->save_EOB = 0;
+ s->save_groupNo = 0;
+ s->save_groupPos = 0;
+ s->save_nextSym = 0;
+ s->save_nblockMAX = 0;
+ s->save_nblock = 0;
+ s->save_es = 0;
+ s->save_N = 0;
+ s->save_curr = 0;
+ s->save_zt = 0;
+ s->save_zn = 0;
+ s->save_zvec = 0;
+ s->save_zj = 0;
+ s->save_gSel = 0;
+ s->save_gMinlen = 0;
+ s->save_gLimit = NULL;
+ s->save_gBase = NULL;
+ s->save_gPerm = NULL;
+ }
+
+ /*restore from the save area*/
+ i = s->save_i;
+ j = s->save_j;
+ t = s->save_t;
+ alphaSize = s->save_alphaSize;
+ nGroups = s->save_nGroups;
+ nSelectors = s->save_nSelectors;
+ EOB = s->save_EOB;
+ groupNo = s->save_groupNo;
+ groupPos = s->save_groupPos;
+ nextSym = s->save_nextSym;
+ nblockMAX = s->save_nblockMAX;
+ nblock = s->save_nblock;
+ es = s->save_es;
+ N = s->save_N;
+ curr = s->save_curr;
+ zt = s->save_zt;
+ zn = s->save_zn;
+ zvec = s->save_zvec;
+ zj = s->save_zj;
+ gSel = s->save_gSel;
+ gMinlen = s->save_gMinlen;
+ gLimit = s->save_gLimit;
+ gBase = s->save_gBase;
+ gPerm = s->save_gPerm;
+
+ retVal = BZ_OK;
+
+ switch (s->state) {
+
+ GET_UCHAR(BZ_X_MAGIC_1, uc);
+ if (uc != 'B') RETURN(BZ_DATA_ERROR_MAGIC);
+
+ GET_UCHAR(BZ_X_MAGIC_2, uc);
+ if (uc != 'Z') RETURN(BZ_DATA_ERROR_MAGIC);
+
+ GET_UCHAR(BZ_X_MAGIC_3, uc)
+ if (uc != 'h') RETURN(BZ_DATA_ERROR_MAGIC);
+
+ GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
+ if (s->blockSize100k < '1' ||
+ s->blockSize100k > '9') RETURN(BZ_DATA_ERROR_MAGIC);
+ s->blockSize100k -= '0';
+
+ if (s->smallDecompress) {
+ s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
+ s->ll4 = BZALLOC(
+ ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)
+ );
+ if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
+ } else {
+ s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
+ if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
+ }
+
+ GET_UCHAR(BZ_X_BLKHDR_1, uc);
+
+ if (uc == 0x17) goto endhdr_2;
+ if (uc != 0x31) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_2, uc);
+ if (uc != 0x41) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_3, uc);
+ if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_4, uc);
+ if (uc != 0x26) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_5, uc);
+ if (uc != 0x53) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_BLKHDR_6, uc);
+ if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+
+ s->currBlockNo++;
+ if (s->verbosity >= 2)
+ VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo );
+
+ s->storedBlockCRC = 0;
+ GET_UCHAR(BZ_X_BCRC_1, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_BCRC_2, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_BCRC_3, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_BCRC_4, uc);
+ s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+
+ GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
+
+ s->origPtr = 0;
+ GET_UCHAR(BZ_X_ORIGPTR_1, uc);
+ s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+ GET_UCHAR(BZ_X_ORIGPTR_2, uc);
+ s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+ GET_UCHAR(BZ_X_ORIGPTR_3, uc);
+ s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+
+ if (s->origPtr < 0)
+ RETURN(BZ_DATA_ERROR);
+ if (s->origPtr > 10 + 100000*s->blockSize100k)
+ RETURN(BZ_DATA_ERROR);
+
+ /*--- Receive the mapping table ---*/
+ for (i = 0; i < 16; i++) {
+ GET_BIT(BZ_X_MAPPING_1, uc);
+ if (uc == 1)
+ s->inUse16[i] = True; else
+ s->inUse16[i] = False;
+ }
+
+ for (i = 0; i < 256; i++) s->inUse[i] = False;
+
+ for (i = 0; i < 16; i++)
+ if (s->inUse16[i])
+ for (j = 0; j < 16; j++) {
+ GET_BIT(BZ_X_MAPPING_2, uc);
+ if (uc == 1) s->inUse[i * 16 + j] = True;
+ }
+ makeMaps_d ( s );
+ if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
+ alphaSize = s->nInUse+2;
+
+ /*--- Now the selectors ---*/
+ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
+ if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
+ GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
+ if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
+ for (i = 0; i < nSelectors; i++) {
+ j = 0;
+ while (True) {
+ GET_BIT(BZ_X_SELECTOR_3, uc);
+ if (uc == 0) break;
+ j++;
+ if (j >= nGroups) RETURN(BZ_DATA_ERROR);
+ }
+ s->selectorMtf[i] = j;
+ }
+
+ /*--- Undo the MTF values for the selectors. ---*/
+ {
+ UChar pos[BZ_N_GROUPS], tmp, v;
+ for (v = 0; v < nGroups; v++) pos[v] = v;
+
+ for (i = 0; i < nSelectors; i++) {
+ v = s->selectorMtf[i];
+ tmp = pos[v];
+ while (v > 0) { pos[v] = pos[v-1]; v--; }
+ pos[0] = tmp;
+ s->selector[i] = tmp;
+ }
+ }
+
+ /*--- Now the coding tables ---*/
+ for (t = 0; t < nGroups; t++) {
+ GET_BITS(BZ_X_CODING_1, curr, 5);
+ for (i = 0; i < alphaSize; i++) {
+ while (True) {
+ if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
+ GET_BIT(BZ_X_CODING_2, uc);
+ if (uc == 0) break;
+ GET_BIT(BZ_X_CODING_3, uc);
+ if (uc == 0) curr++; else curr--;
+ }
+ s->len[t][i] = curr;
+ }
+ }
+
+ /*--- Create the Huffman decoding tables ---*/
+ for (t = 0; t < nGroups; t++) {
+ minLen = 32;
+ maxLen = 0;
+ for (i = 0; i < alphaSize; i++) {
+ if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+ if (s->len[t][i] < minLen) minLen = s->len[t][i];
+ }
+ BZ2_hbCreateDecodeTables (
+ &(s->limit[t][0]),
+ &(s->base[t][0]),
+ &(s->perm[t][0]),
+ &(s->len[t][0]),
+ minLen, maxLen, alphaSize
+ );
+ s->minLens[t] = minLen;
+ }
+
+ /*--- Now the MTF values ---*/
+
+ EOB = s->nInUse+1;
+ nblockMAX = 100000 * s->blockSize100k;
+ groupNo = -1;
+ groupPos = 0;
+
+ for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
+
+ /*-- MTF init --*/
+ {
+ Int32 ii, jj, kk;
+ kk = MTFA_SIZE-1;
+ for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
+ for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+ s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
+ kk--;
+ }
+ s->mtfbase[ii] = kk + 1;
+ }
+ }
+ /*-- end MTF init --*/
+
+ nblock = 0;
+ GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
+
+ while (True) {
+
+ if (nextSym == EOB) break;
+
+ if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
+
+ es = -1;
+ N = 1;
+ do {
+ if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
+ if (nextSym == BZ_RUNB) es = es + (1+1) * N;
+ N = N * 2;
+ GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
+ }
+ while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
+
+ es++;
+ uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
+ s->unzftab[uc] += es;
+
+ if (s->smallDecompress)
+ while (es > 0) {
+ if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+ s->ll16[nblock] = (UInt16)uc;
+ nblock++;
+ es--;
+ }
+ else
+ while (es > 0) {
+ if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+ s->tt[nblock] = (UInt32)uc;
+ nblock++;
+ es--;
+ };
+
+ continue;
+
+ } else {
+
+ if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+
+ /*-- uc = MTF ( nextSym-1 ) --*/
+ {
+ Int32 ii, jj, kk, pp, lno, off;
+ UInt32 nn;
+ nn = (UInt32)(nextSym - 1);
+
+ if (nn < MTFL_SIZE) {
+ /* avoid general-case expense */
+ pp = s->mtfbase[0];
+ uc = s->mtfa[pp+nn];
+ while (nn > 3) {
+ Int32 z = pp+nn;
+ s->mtfa[(z) ] = s->mtfa[(z)-1];
+ s->mtfa[(z)-1] = s->mtfa[(z)-2];
+ s->mtfa[(z)-2] = s->mtfa[(z)-3];
+ s->mtfa[(z)-3] = s->mtfa[(z)-4];
+ nn -= 4;
+ }
+ while (nn > 0) {
+ s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
+ };
+ s->mtfa[pp] = uc;
+ } else {
+ /* general case */
+ lno = nn / MTFL_SIZE;
+ off = nn % MTFL_SIZE;
+ pp = s->mtfbase[lno] + off;
+ uc = s->mtfa[pp];
+ while (pp > s->mtfbase[lno]) {
+ s->mtfa[pp] = s->mtfa[pp-1]; pp--;
+ };
+ s->mtfbase[lno]++;
+ while (lno > 0) {
+ s->mtfbase[lno]--;
+ s->mtfa[s->mtfbase[lno]]
+ = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
+ lno--;
+ }
+ s->mtfbase[0]--;
+ s->mtfa[s->mtfbase[0]] = uc;
+ if (s->mtfbase[0] == 0) {
+ kk = MTFA_SIZE-1;
+ for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
+ for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+ s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
+ kk--;
+ }
+ s->mtfbase[ii] = kk + 1;
+ }
+ }
+ }
+ }
+ /*-- end uc = MTF ( nextSym-1 ) --*/
+
+ s->unzftab[s->seqToUnseq[uc]]++;
+ if (s->smallDecompress)
+ s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
+ s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
+ nblock++;
+
+ GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
+ continue;
+ }
+ }
+
+ /* Now we know what nblock is, we can do a better sanity
+ check on s->origPtr.
+ */
+ if (s->origPtr < 0 || s->origPtr >= nblock)
+ RETURN(BZ_DATA_ERROR);
+
+ s->state_out_len = 0;
+ s->state_out_ch = 0;
+ BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
+ s->state = BZ_X_OUTPUT;
+ if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
+
+ /*-- Set up cftab to facilitate generation of T^(-1) --*/
+ s->cftab[0] = 0;
+ for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
+ for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
+
+ if (s->smallDecompress) {
+
+ /*-- Make a copy of cftab, used in generation of T --*/
+ for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
+
+ /*-- compute the T vector --*/
+ for (i = 0; i < nblock; i++) {
+ uc = (UChar)(s->ll16[i]);
+ SET_LL(i, s->cftabCopy[uc]);
+ s->cftabCopy[uc]++;
+ }
+
+ /*-- Compute T^(-1) by pointer reversal on T --*/
+ i = s->origPtr;
+ j = GET_LL(i);
+ do {
+ Int32 tmp = GET_LL(j);
+ SET_LL(j, i);
+ i = j;
+ j = tmp;
+ }
+ while (i != s->origPtr);
+
+ s->tPos = s->origPtr;
+ s->nblock_used = 0;
+ if (s->blockRandomised) {
+ BZ_RAND_INIT_MASK;
+ BZ_GET_SMALL(s->k0); s->nblock_used++;
+ BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
+ } else {
+ BZ_GET_SMALL(s->k0); s->nblock_used++;
+ }
+
+ } else {
+
+ /*-- compute the T^(-1) vector --*/
+ for (i = 0; i < nblock; i++) {
+ uc = (UChar)(s->tt[i] & 0xff);
+ s->tt[s->cftab[uc]] |= (i << 8);
+ s->cftab[uc]++;
+ }
+
+ s->tPos = s->tt[s->origPtr] >> 8;
+ s->nblock_used = 0;
+ if (s->blockRandomised) {
+ BZ_RAND_INIT_MASK;
+ BZ_GET_FAST(s->k0); s->nblock_used++;
+ BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
+ } else {
+ BZ_GET_FAST(s->k0); s->nblock_used++;
+ }
+
+ }
+
+ RETURN(BZ_OK);
+
+
+
+ endhdr_2:
+
+ GET_UCHAR(BZ_X_ENDHDR_2, uc);
+ if (uc != 0x72) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_3, uc);
+ if (uc != 0x45) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_4, uc);
+ if (uc != 0x38) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_5, uc);
+ if (uc != 0x50) RETURN(BZ_DATA_ERROR);
+ GET_UCHAR(BZ_X_ENDHDR_6, uc);
+ if (uc != 0x90) RETURN(BZ_DATA_ERROR);
+
+ s->storedCombinedCRC = 0;
+ GET_UCHAR(BZ_X_CCRC_1, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_CCRC_2, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_CCRC_3, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+ GET_UCHAR(BZ_X_CCRC_4, uc);
+ s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+
+ s->state = BZ_X_IDLE;
+ RETURN(BZ_STREAM_END);
+
+ default: AssertH ( False, 4001 );
+ }
+
+ AssertH ( False, 4002 );
+
+ save_state_and_return:
+
+ s->save_i = i;
+ s->save_j = j;
+ s->save_t = t;
+ s->save_alphaSize = alphaSize;
+ s->save_nGroups = nGroups;
+ s->save_nSelectors = nSelectors;
+ s->save_EOB = EOB;
+ s->save_groupNo = groupNo;
+ s->save_groupPos = groupPos;
+ s->save_nextSym = nextSym;
+ s->save_nblockMAX = nblockMAX;
+ s->save_nblock = nblock;
+ s->save_es = es;
+ s->save_N = N;
+ s->save_curr = curr;
+ s->save_zt = zt;
+ s->save_zn = zn;
+ s->save_zvec = zvec;
+ s->save_zj = zj;
+ s->save_gSel = gSel;
+ s->save_gMinlen = gMinlen;
+ s->save_gLimit = gLimit;
+ s->save_gBase = gBase;
+ s->save_gPerm = gPerm;
+
+ return retVal;
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end decompress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/dlltest.c b/contrib/bzip2/dlltest.c
new file mode 100644
index 0000000..f79279c
--- /dev/null
+++ b/contrib/bzip2/dlltest.c
@@ -0,0 +1,176 @@
+/*
+ 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.
+
+ usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
+*/
+
+#define BZ_IMPORT
+#include <stdio.h>
+#include <stdlib.h>
+#include "bzlib.h"
+#ifdef _WIN32
+#include <io.h>
+#endif
+
+
+#ifdef _WIN32
+
+#define BZ2_LIBNAME "libbz2-1.0.0.DLL"
+
+#include <windows.h>
+static int BZ2DLLLoaded = 0;
+static HINSTANCE BZ2DLLhLib;
+int BZ2DLLLoadLibrary(void)
+{
+ HINSTANCE hLib;
+
+ if(BZ2DLLLoaded==1){return 0;}
+ hLib=LoadLibrary(BZ2_LIBNAME);
+ if(hLib == NULL){
+ fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
+ return -1;
+ }
+ BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
+ BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
+ BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
+ BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
+ BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
+ BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
+ BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
+ BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");
+
+ if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
+ || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
+ || !BZ2_bzclose || !BZ2_bzerror) {
+ fprintf(stderr,"GetProcAddress failed.\n");
+ return -1;
+ }
+ BZ2DLLLoaded=1;
+ BZ2DLLhLib=hLib;
+ return 0;
+
+}
+int BZ2DLLFreeLibrary(void)
+{
+ if(BZ2DLLLoaded==0){return 0;}
+ FreeLibrary(BZ2DLLhLib);
+ BZ2DLLLoaded=0;
+}
+#endif /* WIN32 */
+
+void usage(void)
+{
+ puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
+}
+
+int main(int argc,char *argv[])
+{
+ int decompress = 0;
+ int level = 9;
+ char *fn_r = NULL;
+ char *fn_w = NULL;
+
+#ifdef _WIN32
+ if(BZ2DLLLoadLibrary()<0){
+ fprintf(stderr,"Loading of %s failed. Giving up.\n", BZ2_LIBNAME);
+ exit(1);
+ }
+ printf("Loading of %s succeeded. Library version is %s.\n",
+ BZ2_LIBNAME, BZ2_bzlibVersion() );
+#endif
+ while(++argv,--argc){
+ if(**argv =='-' || **argv=='/'){
+ char *p;
+
+ for(p=*argv+1;*p;p++){
+ if(*p=='d'){
+ decompress = 1;
+ }else if('1'<=*p && *p<='9'){
+ level = *p - '0';
+ }else{
+ usage();
+ exit(1);
+ }
+ }
+ }else{
+ break;
+ }
+ }
+ if(argc>=1){
+ fn_r = *argv;
+ argc--;argv++;
+ }else{
+ fn_r = NULL;
+ }
+ if(argc>=1){
+ fn_w = *argv;
+ argc--;argv++;
+ }else{
+ fn_w = NULL;
+ }
+ {
+ int len;
+ char buff[0x1000];
+ char mode[10];
+
+ if(decompress){
+ BZFILE *BZ2fp_r = NULL;
+ FILE *fp_w = NULL;
+
+ if(fn_w){
+ if((fp_w = fopen(fn_w,"wb"))==NULL){
+ printf("can't open [%s]\n",fn_w);
+ perror("reason:");
+ exit(1);
+ }
+ }else{
+ fp_w = stdout;
+ }
+ if((BZ2fp_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
+ || (BZ2fp_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
+ printf("can't bz2openstream\n");
+ exit(1);
+ }
+ while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
+ fwrite(buff,1,len,fp_w);
+ }
+ BZ2_bzclose(BZ2fp_r);
+ if(fp_w != stdout) fclose(fp_w);
+ }else{
+ BZFILE *BZ2fp_w = NULL;
+ FILE *fp_r = NULL;
+
+ if(fn_r){
+ if((fp_r = fopen(fn_r,"rb"))==NULL){
+ printf("can't open [%s]\n",fn_r);
+ perror("reason:");
+ exit(1);
+ }
+ }else{
+ fp_r = stdin;
+ }
+ mode[0]='w';
+ mode[1] = '0' + level;
+ mode[2] = '\0';
+
+ if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
+ || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
+ printf("can't bz2openstream\n");
+ exit(1);
+ }
+ while((len=fread(buff,1,0x1000,fp_r))>0){
+ BZ2_bzwrite(BZ2fp_w,buff,len);
+ }
+ BZ2_bzclose(BZ2fp_w);
+ if(fp_r!=stdin)fclose(fp_r);
+ }
+ }
+#ifdef _WIN32
+ BZ2DLLFreeLibrary();
+#endif
+ return 0;
+}
diff --git a/contrib/bzip2/huffman.c b/contrib/bzip2/huffman.c
new file mode 100644
index 0000000..9b446c4
--- /dev/null
+++ b/contrib/bzip2/huffman.c
@@ -0,0 +1,228 @@
+
+/*-------------------------------------------------------------*/
+/*--- Huffman coding low-level stuff ---*/
+/*--- 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-2000 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@acm.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.
+--*/
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------------*/
+#define WEIGHTOF(zz0) ((zz0) & 0xffffff00)
+#define DEPTHOF(zz1) ((zz1) & 0x000000ff)
+#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))
+
+#define ADDWEIGHTS(zw1,zw2) \
+ (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \
+ (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))
+
+#define UPHEAP(z) \
+{ \
+ Int32 zz, tmp; \
+ zz = z; tmp = heap[zz]; \
+ while (weight[tmp] < weight[heap[zz >> 1]]) { \
+ heap[zz] = heap[zz >> 1]; \
+ zz >>= 1; \
+ } \
+ heap[zz] = tmp; \
+}
+
+#define DOWNHEAP(z) \
+{ \
+ Int32 zz, yy, tmp; \
+ zz = z; tmp = heap[zz]; \
+ while (True) { \
+ yy = zz << 1; \
+ if (yy > nHeap) break; \
+ if (yy < nHeap && \
+ weight[heap[yy+1]] < weight[heap[yy]]) \
+ yy++; \
+ if (weight[tmp] < weight[heap[yy]]) break; \
+ heap[zz] = heap[yy]; \
+ zz = yy; \
+ } \
+ heap[zz] = tmp; \
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbMakeCodeLengths ( UChar *len,
+ Int32 *freq,
+ Int32 alphaSize,
+ Int32 maxLen )
+{
+ /*--
+ Nodes and heap entries run from 1. Entry 0
+ for both the heap and nodes is a sentinel.
+ --*/
+ Int32 nNodes, nHeap, n1, n2, i, j, k;
+ Bool tooLong;
+
+ Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ];
+ Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
+ Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ];
+
+ for (i = 0; i < alphaSize; i++)
+ weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
+
+ while (True) {
+
+ nNodes = alphaSize;
+ nHeap = 0;
+
+ heap[0] = 0;
+ weight[0] = 0;
+ parent[0] = -2;
+
+ for (i = 1; i <= alphaSize; i++) {
+ parent[i] = -1;
+ nHeap++;
+ heap[nHeap] = i;
+ UPHEAP(nHeap);
+ }
+
+ AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
+
+ while (nHeap > 1) {
+ n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+ n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+ nNodes++;
+ parent[n1] = parent[n2] = nNodes;
+ weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
+ parent[nNodes] = -1;
+ nHeap++;
+ heap[nHeap] = nNodes;
+ UPHEAP(nHeap);
+ }
+
+ AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );
+
+ tooLong = False;
+ for (i = 1; i <= alphaSize; i++) {
+ j = 0;
+ k = i;
+ while (parent[k] >= 0) { k = parent[k]; j++; }
+ len[i-1] = j;
+ if (j > maxLen) tooLong = True;
+ }
+
+ if (! tooLong) break;
+
+ for (i = 1; i < alphaSize; i++) {
+ j = weight[i] >> 8;
+ j = 1 + (j / 2);
+ weight[i] = j << 8;
+ }
+ }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbAssignCodes ( Int32 *code,
+ UChar *length,
+ Int32 minLen,
+ Int32 maxLen,
+ Int32 alphaSize )
+{
+ Int32 n, vec, i;
+
+ vec = 0;
+ for (n = minLen; n <= maxLen; n++) {
+ for (i = 0; i < alphaSize; i++)
+ if (length[i] == n) { code[i] = vec; vec++; };
+ vec <<= 1;
+ }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbCreateDecodeTables ( Int32 *limit,
+ Int32 *base,
+ Int32 *perm,
+ UChar *length,
+ Int32 minLen,
+ Int32 maxLen,
+ Int32 alphaSize )
+{
+ Int32 pp, i, j, vec;
+
+ pp = 0;
+ for (i = minLen; i <= maxLen; i++)
+ for (j = 0; j < alphaSize; j++)
+ if (length[j] == i) { perm[pp] = j; pp++; };
+
+ for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
+ for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
+
+ for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];
+
+ for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
+ vec = 0;
+
+ for (i = minLen; i <= maxLen; i++) {
+ vec += (base[i+1] - base[i]);
+ limit[i] = vec-1;
+ vec <<= 1;
+ }
+ for (i = minLen + 1; i <= maxLen; i++)
+ base[i] = ((limit[i-1] + 1) << 1) - base[i];
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end huffman.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/libbz2.def b/contrib/bzip2/libbz2.def
new file mode 100644
index 0000000..2dc0dd8
--- /dev/null
+++ b/contrib/bzip2/libbz2.def
@@ -0,0 +1,27 @@
+LIBRARY LIBBZ2
+DESCRIPTION "libbzip2: library for data compression"
+EXPORTS
+ BZ2_bzCompressInit
+ BZ2_bzCompress
+ BZ2_bzCompressEnd
+ BZ2_bzDecompressInit
+ BZ2_bzDecompress
+ BZ2_bzDecompressEnd
+ BZ2_bzReadOpen
+ BZ2_bzReadClose
+ BZ2_bzReadGetUnused
+ BZ2_bzRead
+ BZ2_bzWriteOpen
+ BZ2_bzWrite
+ BZ2_bzWriteClose
+ BZ2_bzWriteClose64
+ BZ2_bzBuffToBuffCompress
+ BZ2_bzBuffToBuffDecompress
+ BZ2_bzlibVersion
+ BZ2_bzopen
+ BZ2_bzdopen
+ BZ2_bzread
+ BZ2_bzwrite
+ BZ2_bzflush
+ BZ2_bzclose
+ BZ2_bzerror
diff --git a/contrib/bzip2/makefile.msc b/contrib/bzip2/makefile.msc
new file mode 100644
index 0000000..3fe4232
--- /dev/null
+++ b/contrib/bzip2/makefile.msc
@@ -0,0 +1,63 @@
+# Makefile for Microsoft Visual C++ 6.0
+# usage: nmake -f makefile.msc
+# K.M. Syring (syring@gsf.de)
+# Fixed up by JRS for bzip2-0.9.5d release.
+
+CC=cl
+CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64
+
+OBJS= blocksort.obj \
+ huffman.obj \
+ crctable.obj \
+ randtable.obj \
+ compress.obj \
+ decompress.obj \
+ bzlib.obj
+
+all: lib bzip2 test
+
+bzip2: lib
+ $(CC) $(CFLAGS) -o bzip2 bzip2.c libbz2.lib setargv.obj
+ $(CC) $(CFLAGS) -o bzip2recover bzip2recover.c
+
+lib: $(OBJS)
+ lib /out:libbz2.lib $(OBJS)
+
+test: bzip2
+ type words1
+ .\\bzip2 -1 < sample1.ref > sample1.rb2
+ .\\bzip2 -2 < sample2.ref > sample2.rb2
+ .\\bzip2 -3 < sample3.ref > sample3.rb2
+ .\\bzip2 -d < sample1.bz2 > sample1.tst
+ .\\bzip2 -d < sample2.bz2 > sample2.tst
+ .\\bzip2 -ds < sample3.bz2 > sample3.tst
+ @echo All six of the fc's should find no differences.
+ @echo If fc finds an error on sample3.bz2, this could be
+ @echo because WinZip's 'TAR file smart CR/LF conversion'
+ @echo is too clever for its own good. Disable this option.
+ @echo The correct size for sample3.ref is 120,244. If it
+ @echo is 150,251, WinZip has messed it up.
+ fc sample1.bz2 sample1.rb2
+ fc sample2.bz2 sample2.rb2
+ fc sample3.bz2 sample3.rb2
+ fc sample1.tst sample1.ref
+ fc sample2.tst sample2.ref
+ fc sample3.tst sample3.ref
+
+
+
+clean:
+ del *.obj
+ del libbz2.lib
+ del bzip2.exe
+ del bzip2recover.exe
+ del sample1.rb2
+ del sample2.rb2
+ del sample3.rb2
+ del sample1.tst
+ del sample2.tst
+ del sample3.tst
+
+.c.obj:
+ $(CC) $(CFLAGS) -c $*.c -o $*.obj
+
diff --git a/contrib/bzip2/manual.texi b/contrib/bzip2/manual.texi
new file mode 100644
index 0000000..336776a
--- /dev/null
+++ b/contrib/bzip2/manual.texi
@@ -0,0 +1,2215 @@
+\input texinfo @c -*- Texinfo -*-
+@setfilename bzip2.info
+
+@ignore
+This file documents bzip2 version 1.0, and associated library
+libbzip2, written by Julian Seward (jseward@acm.org).
+
+Copyright (C) 1996-2000 Julian R Seward
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for verbatim copies.
+@end ignore
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* Bzip2: (bzip2). A program and library for data compression.
+END-INFO-DIR-ENTRY
+@end format
+
+@end ifinfo
+
+@iftex
+@c @finalout
+@settitle bzip2 and libbzip2
+@titlepage
+@title bzip2 and libbzip2
+@subtitle a program and library for data compression
+@subtitle copyright (C) 1996-2000 Julian Seward
+@subtitle version 1.0 of 21 March 2000
+@author Julian Seward
+
+@end titlepage
+
+@parindent 0mm
+@parskip 2mm
+
+@end iftex
+@node Top, Overview, (dir), (dir)
+
+This program, @code{bzip2},
+and associated library @code{libbzip2}, are
+Copyright (C) 1996-2000 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:
+@itemize @bullet
+@item
+ Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+@item
+ 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.
+@item
+ Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+@item
+ The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+@end itemize
+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.
+
+@code{jseward@@acm.org}
+
+@code{http://sourceware.cygnus.com/bzip2}
+
+@code{http://www.cacheprof.org}
+
+@code{http://www.muraroa.demon.co.uk}
+
+@code{bzip2}/@code{libbzip2} version 1.0 of 21 March 2000.
+
+PATENTS: To the best of my knowledge, @code{bzip2} does not use any patented
+algorithms. However, I do not have the resources available to carry out
+a full patent search. Therefore I cannot give any guarantee of the
+above statement.
+
+
+
+
+
+
+
+@node Overview, Implementation, Top, Top
+@chapter Introduction
+
+@code{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.
+
+@code{bzip2} is built on top of @code{libbzip2}, a flexible library
+for handling compressed data in the @code{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.
+
+Chapter 2 describes how to use @code{bzip2}; this is the only part
+you need to read if you just want to know how to operate the program.
+Chapter 3 describes the programming interfaces in detail, and
+Chapter 4 records some miscellaneous notes which I thought
+ought to be recorded somewhere.
+
+
+@chapter How to use @code{bzip2}
+
+This chapter contains a copy of the @code{bzip2} man page,
+and nothing else.
+
+@quotation
+
+@unnumberedsubsubsec NAME
+@itemize
+@item @code{bzip2}, @code{bunzip2}
+- a block-sorting file compressor, v1.0
+@item @code{bzcat}
+- decompresses files to stdout
+@item @code{bzip2recover}
+- recovers data from damaged bzip2 files
+@end itemize
+
+@unnumberedsubsubsec SYNOPSIS
+@itemize
+@item @code{bzip2} [ -cdfkqstvzVL123456789 ] [ filenames ... ]
+@item @code{bunzip2} [ -fkvsVL ] [ filenames ... ]
+@item @code{bzcat} [ -s ] [ filenames ... ]
+@item @code{bzip2recover} filename
+@end itemize
+
+@unnumberedsubsubsec DESCRIPTION
+
+@code{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
+@code{gzip}, but they are not identical.
+
+@code{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 @code{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.
+
+@code{bzip2} and @code{bunzip2} will by default not overwrite existing
+files. If you want this to happen, specify the @code{-f} flag.
+
+If no file names are specified, @code{bzip2} compresses from standard
+input to standard output. In this case, @code{bzip2} will decline to
+write compressed output to a terminal, as this would be entirely
+incomprehensible and therefore pointless.
+
+@code{bunzip2} (or @code{bzip2 -d}) decompresses all
+specified files. Files which were not created by @code{bzip2}
+will be detected and ignored, and a warning issued.
+@code{bzip2} attempts to guess the filename for the decompressed file
+from that of the compressed file as follows:
+@itemize
+@item @code{filename.bz2 } becomes @code{filename}
+@item @code{filename.bz } becomes @code{filename}
+@item @code{filename.tbz2} becomes @code{filename.tar}
+@item @code{filename.tbz } becomes @code{filename.tar}
+@item @code{anyothername } becomes @code{anyothername.out}
+@end itemize
+If the file does not end in one of the recognised endings,
+@code{.bz2}, @code{.bz},
+@code{.tbz2} or @code{.tbz}, @code{bzip2} complains that it cannot
+guess the name of the original file, and uses the original name
+with @code{.out} appended.
+
+As with compression, supplying no
+filenames causes decompression from standard input to standard output.
+
+@code{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 (@code{-t}) of concatenated compressed files is also supported.
+
+You can also compress or decompress files to the standard output by
+giving the @code{-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 @code{bzip2} version 0.9.0 or
+later. Earlier versions of @code{bzip2} will stop after decompressing
+the first file in the stream.
+
+@code{bzcat} (or @code{bzip2 -dc}) decompresses all specified files to
+the standard output.
+
+@code{bzip2} will read arguments from the environment variables
+@code{BZIP2} and @code{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, @code{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 @code{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 @code{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 @code{bzip2} to panic.
+
+
+@unnumberedsubsubsec OPTIONS
+@table @code
+@item -c --stdout
+Compress or decompress to standard output.
+@item -d --decompress
+Force decompression. @code{bzip2}, @code{bunzip2} and @code{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.
+@item -z --compress
+The complement to @code{-d}: forces compression, regardless of the
+invokation name.
+@item -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.
+@item -f --force
+Force overwrite of output files. Normally, @code{bzip2} will not overwrite
+existing output files. Also forces @code{bzip2} to break hard links
+to files, which it otherwise wouldn't do.
+@item -k --keep
+Keep (don't delete) input files during compression
+or decompression.
+@item -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, @code{-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.
+@item -q --quiet
+Suppress non-essential warning messages. Messages pertaining to
+I/O errors and other critical events will not be suppressed.
+@item -v --verbose
+Verbose mode -- show the compression ratio for each file processed.
+Further @code{-v}'s increase the verbosity level, spewing out lots of
+information which is primarily of interest for diagnostic purposes.
+@item -L --license -V --version
+Display the software version, license terms and conditions.
+@item -1 to -9
+Set the block size to 100 k, 200 k .. 900 k when compressing. Has no
+effect when decompressing. See MEMORY MANAGEMENT below.
+@item --
+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: @code{bzip2 -- -myfilename}.
+@item --repetitive-fast
+@item --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.
+@end table
+
+
+@unnumberedsubsubsec MEMORY MANAGEMENT
+
+@code{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 @code{-1} through @code{-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
+@code{bunzip2} then allocates itself just enough memory to decompress
+the file. Since block sizes are stored in compressed files, it follows
+that the flags @code{-1} to @code{-9} are irrelevant to and so ignored
+during decompression.
+
+Compression and decompression requirements, in bytes, can be estimated
+as:
+@example
+ Compression: 400k + ( 8 x block size )
+
+ Decompression: 100k + ( 4 x block size ), or
+ 100k + ( 2.5 x block size )
+@end example
+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 @code{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, @code{bunzip2}
+will require about 3700 kbytes to decompress. To support decompression
+of any file on a 4 megabyte machine, @code{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 @code{-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 @code{-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.
+@example
+ 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
+@end example
+
+@unnumberedsubsubsec RECOVERING DATA FROM DAMAGED FILES
+
+@code{bzip2} compresses files in blocks, usually 900kbytes long. Each
+block is handled independently. If a media or transmission error causes
+a multi-block @code{.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.
+
+@code{bzip2recover} is a simple program whose purpose is to search for
+blocks in @code{.bz2} files, and write each block out into its own
+@code{.bz2} file. You can then use @code{bzip2 -t} to test the
+integrity of the resulting files, and decompress those which are
+undamaged.
+
+@code{bzip2recover}
+takes a single argument, the name of the damaged file,
+and writes a number of files @code{rec0001file.bz2},
+ @code{rec0002file.bz2}, etc, containing the extracted blocks.
+ The output filenames are designed so that the use of
+ wildcards in subsequent processing -- for example,
+@code{bzip2 -dc rec*file.bz2 > recovered_data} -- lists the files in
+ the correct order.
+
+@code{bzip2recover} should be of most use dealing with large @code{.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.
+
+
+@unnumberedsubsubsec 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
+@code{-vvvv} option to monitor progress in great detail, if you want.
+
+Decompression speed is unaffected by these phenomena.
+
+@code{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 @code{bzip2} will perform best on machines with very large
+caches.
+
+
+@unnumberedsubsubsec CAVEATS
+
+I/O error messages are not as helpful as they could be. @code{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 of @code{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, 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.
+
+@code{bzip2recover} uses 32-bit integers to represent bit positions in
+compressed files, so it cannot handle compressed files more than 512
+megabytes long. This could easily be fixed.
+
+
+@unnumberedsubsubsec AUTHOR
+Julian Seward, @code{jseward@@acm.org}.
+
+The ideas embodied in @code{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 @code{bzip},
+and many refinements), and Alistair Moffat, Radford Neal and Ian Witten
+(for the arithmetic coder in the original @code{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. Many people sent patches, helped
+with portability problems, lent machines, gave advice and were generally
+helpful.
+
+@end quotation
+
+
+
+
+@chapter Programming with @code{libbzip2}
+
+This chapter describes the programming interface to @code{libbzip2}.
+
+For general background information, particularly about memory
+use and performance aspects, you'd be well advised to read Chapter 2
+as well.
+
+@section Top-level structure
+
+@code{libbzip2} is a flexible library for compressing and decompressing
+data in the @code{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 @code{libbzip2}'s interfaces is similar to
+that of Jean-loup Gailly's and Mark Adler's excellent @code{zlib}
+library.
+
+All externally visible symbols have names beginning @code{BZ2_}.
+This is new in version 1.0. The intention is to minimise pollution
+of the namespaces of library clients.
+
+@subsection 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 @code{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:
+@code{BZ2_bzCompressInit}, @code{BZ2_bzCompress}, and @* @code{BZ2_bzCompressEnd}
+for compression,
+and a corresponding trio @code{BZ2_bzDecompressInit}, @* @code{BZ2_bzDecompress}
+and @code{BZ2_bzDecompressEnd} for decompression.
+The @code{*Init} functions allocate
+memory for compression/decompression and do other
+initialisations, whilst the @code{*End} functions close down operations
+and release memory.
+
+The real work is done by @code{BZ2_bzCompress} and @code{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.
+
+
+
+@subsection High-level summary
+
+This interface provides some handy wrappers around the low-level
+interface to facilitate reading and writing @code{bzip2} format
+files (@code{.bz2} files). The routines provide hooks to facilitate
+reading files in which the @code{bzip2} data stream is embedded
+within some larger-scale file structure, or where there are
+multiple @code{bzip2} data streams concatenated end-to-end.
+
+For reading files, @code{BZ2_bzReadOpen}, @code{BZ2_bzRead},
+@code{BZ2_bzReadClose} and @* @code{BZ2_bzReadGetUnused} are supplied. For
+writing files, @code{BZ2_bzWriteOpen}, @code{BZ2_bzWrite} and
+@code{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 @code{errno} to determine the cause of
+the error. In that case, you'd need a C library which correctly
+supports @code{errno} in a multithreaded environment.
+
+To make the library a little simpler and more portable,
+@code{BZ2_bzReadOpen} and @code{BZ2_bzWriteOpen} require you to pass them file
+handles (@code{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.
+
+
+
+@subsection Utility functions summary
+For very simple needs, @code{BZ2_bzBuffToBuffCompress} and
+@code{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 (@code{QWF00133@@niftyserve.or.jp} /
+@code{tsuneo-y@@is.aist-nara.ac.jp}) has contributed some functions to
+give better @code{zlib} compatibility. These functions are
+@code{BZ2_bzopen}, @code{BZ2_bzread}, @code{BZ2_bzwrite}, @code{BZ2_bzflush},
+@code{BZ2_bzclose},
+@code{BZ2_bzerror} and @code{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.
+
+
+@section 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 is much more robust in this respect than
+0.9.0 or 0.9.5. Investigations with Checker (a tool for
+detecting problems with memory management, similar to Purify)
+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 reads of uninitialised data and no
+out of range reads or writes. So it's certainly much improved,
+although I wouldn't claim it to be totally bombproof.
+
+The file @code{bzlib.h} contains all definitions needed to use
+the library. In particular, you should definitely not include
+@code{bzlib_private.h}.
+
+In @code{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.
+@table @code
+@item BZ_OK
+The requested action was completed successfully.
+@item BZ_RUN_OK
+@itemx BZ_FLUSH_OK
+@itemx BZ_FINISH_OK
+In @code{BZ2_bzCompress}, the requested flush/finish/nothing-special action
+was completed successfully.
+@item BZ_STREAM_END
+Compression of data was completed, or the logical stream end was
+detected during decompression.
+@end table
+
+The following return values indicate an error of some kind.
+@table @code
+@item BZ_CONFIG_ERROR
+Indicates that the library has been improperly compiled on your
+platform -- a major configuration error. Specifically, it means
+that @code{sizeof(char)}, @code{sizeof(short)} and @code{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 @code{sizeof(long)}
+and @code{sizeof(void*)} are 8. Under LP64, @code{sizeof(int)} is
+still 4, so @code{libbzip2}, which doesn't use the @code{long} type,
+is OK.
+@item 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. @code{libbzip2} checks as much as it can to ensure this is
+happening, and returns @code{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.
+@item BZ_PARAM_ERROR
+Returned when a parameter to a function call is out of range
+or otherwise manifestly incorrect. As with @code{BZ_SEQUENCE_ERROR},
+this denotes a bug in the client code. The distinction between
+@code{BZ_PARAM_ERROR} and @code{BZ_SEQUENCE_ERROR} is a bit hazy, but still worth
+making.
+@item 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 @code{BZ2_bzDecompress} and
+@code{BZ2_bzRead} may return @code{BZ_MEM_ERROR} even though some of
+the compressed data has been read. The same is not true for
+compression; once @code{BZ2_bzCompressInit} or @code{BZ2_bzWriteOpen} have
+successfully completed, @code{BZ_MEM_ERROR} cannot occur.
+@item 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.
+@item BZ_DATA_ERROR_MAGIC
+As a special case of @code{BZ_DATA_ERROR}, it is sometimes useful to
+know when the compressed stream does not start with the correct
+magic bytes (@code{'B' 'Z' 'h'}).
+@item BZ_IO_ERROR
+Returned by @code{BZ2_bzRead} and @code{BZ2_bzWrite} when there is an error
+reading or writing in the compressed file, and by @code{BZ2_bzReadOpen}
+and @code{BZ2_bzWriteOpen} for attempts to use a file for which the
+error indicator (viz, @code{ferror(f)}) is set.
+On receipt of @code{BZ_IO_ERROR}, the caller should consult
+@code{errno} and/or @code{perror} to acquire operating-system
+specific information about the problem.
+@item BZ_UNEXPECTED_EOF
+Returned by @code{BZ2_bzRead} when the compressed file finishes
+before the logical end of stream is detected.
+@item BZ_OUTBUFF_FULL
+Returned by @code{BZ2_bzBuffToBuffCompress} and
+@code{BZ2_bzBuffToBuffDecompress} to indicate that the output data
+will not fit into the output buffer provided.
+@end table
+
+
+
+@section Low-level interface
+
+@subsection @code{BZ2_bzCompressInit}
+@example
+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 );
+
+@end example
+
+Prepares for compression. The @code{bz_stream} structure
+holds all data pertaining to the compression activity.
+A @code{bz_stream} structure should be allocated and initialised
+prior to the call.
+The fields of @code{bz_stream}
+comprise the entirety of the user-visible data. @code{state}
+is a pointer to the private data structures required for compression.
+
+Custom memory allocators are supported, via fields @code{bzalloc},
+@code{bzfree},
+and @code{opaque}. The value
+@code{opaque} is passed to as the first argument to
+all calls to @code{bzalloc} and @code{bzfree}, but is
+otherwise ignored by the library.
+The call @code{bzalloc ( opaque, n, m )} is expected to return a
+pointer @code{p} to
+@code{n * m} bytes of memory, and @code{bzfree ( opaque, p )}
+should free
+that memory.
+
+If you don't want to use a custom memory allocator, set @code{bzalloc},
+@code{bzfree} and
+@code{opaque} to @code{NULL},
+and the library will then use the standard @code{malloc}/@code{free}
+routines.
+
+Before calling @code{BZ2_bzCompressInit}, fields @code{bzalloc},
+@code{bzfree} and @code{opaque} should
+be filled appropriately, as just described. Upon return, the internal
+state will have been allocated and initialised, and @code{total_in_lo32},
+@code{total_in_hi32}, @code{total_out_lo32} and
+@code{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 @code{_hi32} fields to store the upper 32 bits
+of the count. So, for example, the total amount of data in
+is @code{(total_in_hi32 << 32) + total_in_lo32}.
+
+Parameter @code{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 @code{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
+@code{-DBZ_NO_STDIO}, no such output will appear for any verbosity
+setting.
+
+Parameter @code{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 @code{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:
+@display
+ @code{BZ_CONFIG_ERROR}
+ if the library has been mis-compiled
+ @code{BZ_PARAM_ERROR}
+ if @code{strm} is @code{NULL}
+ or @code{blockSize} < 1 or @code{blockSize} > 9
+ or @code{verbosity} < 0 or @code{verbosity} > 4
+ or @code{workFactor} < 0 or @code{workFactor} > 250
+ @code{BZ_MEM_ERROR}
+ if not enough memory is available
+ @code{BZ_OK}
+ otherwise
+@end display
+Allowable next actions:
+@display
+ @code{BZ2_bzCompress}
+ if @code{BZ_OK} is returned
+ no specific action needed in case of error
+@end display
+
+@subsection @code{BZ2_bzCompress}
+@example
+ int BZ2_bzCompress ( bz_stream *strm, int action );
+@end example
+Provides more input and/or output buffer space for the library. The
+caller maintains input and output buffers, and calls @code{BZ2_bzCompress} to
+transfer data between them.
+
+Before each call to @code{BZ2_bzCompress}, @code{next_in} should point at
+the data to be compressed, and @code{avail_in} should indicate how many
+bytes the library may read. @code{BZ2_bzCompress} updates @code{next_in},
+@code{avail_in} and @code{total_in} to reflect the number of bytes it
+has read.
+
+Similarly, @code{next_out} should point to a buffer in which the
+compressed data is to be placed, with @code{avail_out} indicating how
+much output space is available. @code{BZ2_bzCompress} updates
+@code{next_out}, @code{avail_out} and @code{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 @code{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 @code{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
+(@code{BZ2_bzCompressInit}) and after termination (@code{BZ2_bzCompressEnd}), a
+stream is regarded as IDLE.
+
+Upon initialisation (@code{BZ2_bzCompressInit}), the stream is placed in the
+RUNNING state. Subsequent calls to @code{BZ2_bzCompress} should pass
+@code{BZ_RUN} as the requested action; other actions are illegal and
+will result in @code{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, @code{BZ2_bzCompress} will no longer attempt to read data from
+@code{next_in}, but it will want to write data to @code{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 @code{BZ2_bzCompress}.
+
+Instead, the calling program passes @code{BZ_FINISH} as an action to
+@code{BZ2_bzCompress}. This changes the stream's state to FINISHING. Any
+remaining input (ie, @code{next_in[0 .. avail_in-1]}) is compressed and
+transferred to the output buffer. To do this, @code{BZ2_bzCompress} must be
+called repeatedly until all the output has been consumed. At that
+point, @code{BZ2_bzCompress} returns @code{BZ_STREAM_END}, and the stream's
+state is set back to IDLE. @code{BZ2_bzCompressEnd} should then be
+called.
+
+Just to make sure the calling program does not cheat, the library makes
+a note of @code{avail_in} at the time of the first call to
+@code{BZ2_bzCompress} which has @code{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 @code{avail_in} over
+subsequent calls to @code{BZ2_bzCompress}, the library can detect any
+attempts to slip in more data to compress. Any calls for which this is
+detected will return @code{BZ_SEQUENCE_ERROR}. This indicates a
+programming mistake which should be corrected.
+
+Instead of asking to finish, the calling program may ask
+@code{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 @code{BZ2_bzCompress} with an action of
+@code{BZ_FLUSH}, remove output data, and persist with the
+@code{BZ_FLUSH} action until the value @code{BZ_RUN} is returned. As
+with finishing, @code{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 @code{BZ2_bzCompress}.
+@display
+IDLE/@code{any}
+ Illegal. IDLE state only exists after @code{BZ2_bzCompressEnd} or
+ before @code{BZ2_bzCompressInit}.
+ Return value = @code{BZ_SEQUENCE_ERROR}
+
+RUNNING/@code{BZ_RUN}
+ Compress from @code{next_in} to @code{next_out} as much as possible.
+ Next state = RUNNING
+ Return value = @code{BZ_RUN_OK}
+
+RUNNING/@code{BZ_FLUSH}
+ Remember current value of @code{next_in}. Compress from @code{next_in}
+ to @code{next_out} as much as possible, but do not accept any more input.
+ Next state = FLUSHING
+ Return value = @code{BZ_FLUSH_OK}
+
+RUNNING/@code{BZ_FINISH}
+ Remember current value of @code{next_in}. Compress from @code{next_in}
+ to @code{next_out} as much as possible, but do not accept any more input.
+ Next state = FINISHING
+ Return value = @code{BZ_FINISH_OK}
+
+FLUSHING/@code{BZ_FLUSH}
+ Compress from @code{next_in} to @code{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 = @code{BZ_RUN_OK}
+ else
+ Next state = FLUSHING; Return value = @code{BZ_FLUSH_OK}
+
+FLUSHING/other
+ Illegal.
+ Return value = @code{BZ_SEQUENCE_ERROR}
+
+FINISHING/@code{BZ_FINISH}
+ Compress from @code{next_in} to @code{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 = @code{BZ_STREAM_END}
+ else
+ Next state = FINISHING; Return value = @code{BZ_FINISHING}
+
+FINISHING/other
+ Illegal.
+ Return value = @code{BZ_SEQUENCE_ERROR}
+@end display
+
+That still looks complicated? Well, fair enough. The usual sequence
+of calls for compressing a load of data is:
+@itemize @bullet
+@item Get started with @code{BZ2_bzCompressInit}.
+@item Shovel data in and shlurp out its compressed form using zero or more
+calls of @code{BZ2_bzCompress} with action = @code{BZ_RUN}.
+@item Finish up.
+Repeatedly call @code{BZ2_bzCompress} with action = @code{BZ_FINISH},
+copying out the compressed output, until @code{BZ_STREAM_END} is returned.
+@item Close up and go home. Call @code{BZ2_bzCompressEnd}.
+@end itemize
+If the data you want to compress fits into your input buffer all
+at once, you can skip the calls of @code{BZ2_bzCompress ( ..., BZ_RUN )} and
+just do the @code{BZ2_bzCompress ( ..., BZ_FINISH )} calls.
+
+All required memory is allocated by @code{BZ2_bzCompressInit}. The
+compression library can accept any data at all (obviously). So you
+shouldn't get any error return values from the @code{BZ2_bzCompress} calls.
+If you do, they will be @code{BZ_SEQUENCE_ERROR}, and indicate a bug in
+your programming.
+
+Trivial other possible return values:
+@display
+ @code{BZ_PARAM_ERROR}
+ if @code{strm} is @code{NULL}, or @code{strm->s} is @code{NULL}
+@end display
+
+@subsection @code{BZ2_bzCompressEnd}
+@example
+int BZ2_bzCompressEnd ( bz_stream *strm );
+@end example
+Releases all memory associated with a compression stream.
+
+Possible return values:
+@display
+ @code{BZ_PARAM_ERROR} if @code{strm} is @code{NULL} or @code{strm->s} is @code{NULL}
+ @code{BZ_OK} otherwise
+@end display
+
+
+@subsection @code{BZ2_bzDecompressInit}
+@example
+int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );
+@end example
+Prepares for decompression. As with @code{BZ2_bzCompressInit}, a
+@code{bz_stream} record should be allocated and initialised before the
+call. Fields @code{bzalloc}, @code{bzfree} and @code{opaque} should be
+set if a custom memory allocator is required, or made @code{NULL} for
+the normal @code{malloc}/@code{free} routines. Upon return, the internal
+state will have been initialised, and @code{total_in} and
+@code{total_out} will be zero.
+
+For the meaning of parameter @code{verbosity}, see @code{BZ2_bzCompressInit}.
+
+If @code{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 Chapter 2 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 @code{BZ2_bzDecompressInit} succeeds, a subsequent
+@code{BZ2_bzDecompress} could fail with @code{BZ_MEM_ERROR}.
+
+Possible return values:
+@display
+ @code{BZ_CONFIG_ERROR}
+ if the library has been mis-compiled
+ @code{BZ_PARAM_ERROR}
+ if @code{(small != 0 && small != 1)}
+ or @code{(verbosity < 0 || verbosity > 4)}
+ @code{BZ_MEM_ERROR}
+ if insufficient memory is available
+@end display
+
+Allowable next actions:
+@display
+ @code{BZ2_bzDecompress}
+ if @code{BZ_OK} was returned
+ no specific action required in case of error
+@end display
+
+
+
+@subsection @code{BZ2_bzDecompress}
+@example
+int BZ2_bzDecompress ( bz_stream *strm );
+@end example
+Provides more input and/out output buffer space for the library. The
+caller maintains input and output buffers, and uses @code{BZ2_bzDecompress}
+to transfer data between them.
+
+Before each call to @code{BZ2_bzDecompress}, @code{next_in}
+should point at the compressed data,
+and @code{avail_in} should indicate how many bytes the library
+may read. @code{BZ2_bzDecompress} updates @code{next_in}, @code{avail_in}
+and @code{total_in}
+to reflect the number of bytes it has read.
+
+Similarly, @code{next_out} should point to a buffer in which the uncompressed
+output is to be placed, with @code{avail_out} indicating how much output space
+is available. @code{BZ2_bzCompress} updates @code{next_out},
+@code{avail_out} and @code{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 @code{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 @code{BZ2_bzDecompress} is simpler than @code{BZ2_bzCompress}.
+
+You should provide input and remove output as described above, and
+repeatedly call @code{BZ2_bzDecompress} until @code{BZ_STREAM_END} is
+returned. Appearance of @code{BZ_STREAM_END} denotes that
+@code{BZ2_bzDecompress} has detected the logical end of the compressed
+stream. @code{BZ2_bzDecompress} will not produce @code{BZ_STREAM_END} until
+all output data has been placed into the output buffer, so once
+@code{BZ_STREAM_END} appears, you are guaranteed to have available all
+the decompressed output, and @code{BZ2_bzDecompressEnd} can safely be
+called.
+
+If case of an error return value, you should call @code{BZ2_bzDecompressEnd}
+to clean up and release memory.
+
+Possible return values:
+@display
+ @code{BZ_PARAM_ERROR}
+ if @code{strm} is @code{NULL} or @code{strm->s} is @code{NULL}
+ or @code{strm->avail_out < 1}
+ @code{BZ_DATA_ERROR}
+ if a data integrity error is detected in the compressed stream
+ @code{BZ_DATA_ERROR_MAGIC}
+ if the compressed stream doesn't begin with the right magic bytes
+ @code{BZ_MEM_ERROR}
+ if there wasn't enough memory available
+ @code{BZ_STREAM_END}
+ if the logical end of the data stream was detected and all
+ output in has been consumed, eg @code{s->avail_out > 0}
+ @code{BZ_OK}
+ otherwise
+@end display
+Allowable next actions:
+@display
+ @code{BZ2_bzDecompress}
+ if @code{BZ_OK} was returned
+ @code{BZ2_bzDecompressEnd}
+ otherwise
+@end display
+
+
+@subsection @code{BZ2_bzDecompressEnd}
+@example
+int BZ2_bzDecompressEnd ( bz_stream *strm );
+@end example
+Releases all memory associated with a decompression stream.
+
+Possible return values:
+@display
+ @code{BZ_PARAM_ERROR}
+ if @code{strm} is @code{NULL} or @code{strm->s} is @code{NULL}
+ @code{BZ_OK}
+ otherwise
+@end display
+
+Allowable next actions:
+@display
+ None.
+@end display
+
+
+@section High-level interface
+
+This interface provides functions for reading and writing
+@code{bzip2} format files. First, some general points.
+
+@itemize @bullet
+@item All of the functions take an @code{int*} first argument,
+ @code{bzerror}.
+ After each call, @code{bzerror} should be consulted first to determine
+ the outcome of the call. If @code{bzerror} is @code{BZ_OK},
+ the call completed
+ successfully, and only then should the return value of the function
+ (if any) be consulted. If @code{bzerror} is @code{BZ_IO_ERROR},
+ there was an error
+ reading/writing the underlying compressed file, and you should
+ then consult @code{errno}/@code{perror} to determine the
+ cause of the difficulty.
+ @code{bzerror} may also be set to various other values; precise details are
+ given on a per-function basis below.
+@item If @code{bzerror} indicates an error
+ (ie, anything except @code{BZ_OK} and @code{BZ_STREAM_END}),
+ you should immediately call @code{BZ2_bzReadClose} (or @code{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 @code{BZ2_bzReadClose} (@code{BZ2_bzWriteClose}) is undefined.
+ The implication is that (1) @code{bzerror} should
+ be checked after each call, and (2) if @code{bzerror} indicates an error,
+ @code{BZ2_bzReadClose} (@code{BZ2_bzWriteClose}) should then be called to clean up.
+@item The @code{FILE*} arguments passed to
+ @code{BZ2_bzReadOpen}/@code{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.
+@item Memory allocation requests are handled by
+ @code{malloc}/@code{free}.
+ At present
+ there is no facility for user-defined memory allocators in the file I/O
+ functions (could easily be added, though).
+@end itemize
+
+
+
+@subsection @code{BZ2_bzReadOpen}
+@example
+ typedef void BZFILE;
+
+ BZFILE *BZ2_bzReadOpen ( int *bzerror, FILE *f,
+ int small, int verbosity,
+ void *unused, int nUnused );
+@end example
+Prepare to read compressed data from file handle @code{f}. @code{f}
+should refer to a file which has been opened for reading, and for which
+the error indicator (@code{ferror(f)})is not set. If @code{small} is 1,
+the library will try to decompress using less memory, at the expense of
+speed.
+
+For reasons explained below, @code{BZ2_bzRead} will decompress the
+@code{nUnused} bytes starting at @code{unused}, before starting to read
+from the file @code{f}. At most @code{BZ_MAX_UNUSED} bytes may be
+supplied like this. If this facility is not required, you should pass
+@code{NULL} and @code{0} for @code{unused} and n@code{Unused}
+respectively.
+
+For the meaning of parameters @code{small} and @code{verbosity},
+see @code{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
+@code{BZ2_bzReadOpen} returns @code{BZ_OK} but a subsequent call of
+@code{BZ2_bzRead} will return @code{BZ_MEM_ERROR}.
+
+Possible assignments to @code{bzerror}:
+@display
+ @code{BZ_CONFIG_ERROR}
+ if the library has been mis-compiled
+ @code{BZ_PARAM_ERROR}
+ if @code{f} is @code{NULL}
+ or @code{small} is neither @code{0} nor @code{1}
+ or @code{(unused == NULL && nUnused != 0)}
+ or @code{(unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED))}
+ @code{BZ_IO_ERROR}
+ if @code{ferror(f)} is nonzero
+ @code{BZ_MEM_ERROR}
+ if insufficient memory is available
+ @code{BZ_OK}
+ otherwise.
+@end display
+
+Possible return values:
+@display
+ Pointer to an abstract @code{BZFILE}
+ if @code{bzerror} is @code{BZ_OK}
+ @code{NULL}
+ otherwise
+@end display
+
+Allowable next actions:
+@display
+ @code{BZ2_bzRead}
+ if @code{bzerror} is @code{BZ_OK}
+ @code{BZ2_bzClose}
+ otherwise
+@end display
+
+
+@subsection @code{BZ2_bzRead}
+@example
+ int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );
+@end example
+Reads up to @code{len} (uncompressed) bytes from the compressed file
+@code{b} into
+the buffer @code{buf}. If the read was successful,
+@code{bzerror} is set to @code{BZ_OK}
+and the number of bytes read is returned. If the logical end-of-stream
+was detected, @code{bzerror} will be set to @code{BZ_STREAM_END},
+and the number
+of bytes read is returned. All other @code{bzerror} values denote an error.
+
+@code{BZ2_bzRead} will supply @code{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 @code{bzerror} after every call and watch out for
+@code{BZ_STREAM_END}.
+
+Internally, @code{BZ2_bzRead} copies data from the compressed file in chunks
+of size @code{BZ_MAX_UNUSED} bytes
+before decompressing it. If the file contains more bytes than strictly
+needed to reach the logical end-of-stream, @code{BZ2_bzRead} will almost certainly
+read some of the trailing data before signalling @code{BZ_SEQUENCE_END}.
+To collect the read but unused data once @code{BZ_SEQUENCE_END} has
+appeared, call @code{BZ2_bzReadGetUnused} immediately before @code{BZ2_bzReadClose}.
+
+Possible assignments to @code{bzerror}:
+@display
+ @code{BZ_PARAM_ERROR}
+ if @code{b} is @code{NULL} or @code{buf} is @code{NULL} or @code{len < 0}
+ @code{BZ_SEQUENCE_ERROR}
+ if @code{b} was opened with @code{BZ2_bzWriteOpen}
+ @code{BZ_IO_ERROR}
+ if there is an error reading from the compressed file
+ @code{BZ_UNEXPECTED_EOF}
+ if the compressed file ended before the logical end-of-stream was detected
+ @code{BZ_DATA_ERROR}
+ if a data integrity error was detected in the compressed stream
+ @code{BZ_DATA_ERROR_MAGIC}
+ if the stream does not begin with the requisite header bytes (ie, is not
+ a @code{bzip2} data file). This is really a special case of @code{BZ_DATA_ERROR}.
+ @code{BZ_MEM_ERROR}
+ if insufficient memory was available
+ @code{BZ_STREAM_END}
+ if the logical end of stream was detected.
+ @code{BZ_OK}
+ otherwise.
+@end display
+
+Possible return values:
+@display
+ number of bytes read
+ if @code{bzerror} is @code{BZ_OK} or @code{BZ_STREAM_END}
+ undefined
+ otherwise
+@end display
+
+Allowable next actions:
+@display
+ collect data from @code{buf}, then @code{BZ2_bzRead} or @code{BZ2_bzReadClose}
+ if @code{bzerror} is @code{BZ_OK}
+ collect data from @code{buf}, then @code{BZ2_bzReadClose} or @code{BZ2_bzReadGetUnused}
+ if @code{bzerror} is @code{BZ_SEQUENCE_END}
+ @code{BZ2_bzReadClose}
+ otherwise
+@end display
+
+
+
+@subsection @code{BZ2_bzReadGetUnused}
+@example
+ void BZ2_bzReadGetUnused ( int* bzerror, BZFILE *b,
+ void** unused, int* nUnused );
+@end example
+Returns data which was read from the compressed file but was not needed
+to get to the logical end-of-stream. @code{*unused} is set to the address
+of the data, and @code{*nUnused} to the number of bytes. @code{*nUnused} will
+be set to a value between @code{0} and @code{BZ_MAX_UNUSED} inclusive.
+
+This function may only be called once @code{BZ2_bzRead} has signalled
+@code{BZ_STREAM_END} but before @code{BZ2_bzReadClose}.
+
+Possible assignments to @code{bzerror}:
+@display
+ @code{BZ_PARAM_ERROR}
+ if @code{b} is @code{NULL}
+ or @code{unused} is @code{NULL} or @code{nUnused} is @code{NULL}
+ @code{BZ_SEQUENCE_ERROR}
+ if @code{BZ_STREAM_END} has not been signalled
+ or if @code{b} was opened with @code{BZ2_bzWriteOpen}
+ @code{BZ_OK}
+ otherwise
+@end display
+
+Allowable next actions:
+@display
+ @code{BZ2_bzReadClose}
+@end display
+
+
+@subsection @code{BZ2_bzReadClose}
+@example
+ void BZ2_bzReadClose ( int *bzerror, BZFILE *b );
+@end example
+Releases all memory pertaining to the compressed file @code{b}.
+@code{BZ2_bzReadClose} does not call @code{fclose} on the underlying file
+handle, so you should do that yourself if appropriate.
+@code{BZ2_bzReadClose} should be called to clean up after all error
+situations.
+
+Possible assignments to @code{bzerror}:
+@display
+ @code{BZ_SEQUENCE_ERROR}
+ if @code{b} was opened with @code{BZ2_bzOpenWrite}
+ @code{BZ_OK}
+ otherwise
+@end display
+
+Allowable next actions:
+@display
+ none
+@end display
+
+
+
+@subsection @code{BZ2_bzWriteOpen}
+@example
+ BZFILE *BZ2_bzWriteOpen ( int *bzerror, FILE *f,
+ int blockSize100k, int verbosity,
+ int workFactor );
+@end example
+Prepare to write compressed data to file handle @code{f}.
+@code{f} should refer to
+a file which has been opened for writing, and for which the error
+indicator (@code{ferror(f)})is not set.
+
+For the meaning of parameters @code{blockSize100k},
+@code{verbosity} and @code{workFactor}, see
+@* @code{BZ2_bzCompressInit}.
+
+All required memory is allocated at this stage, so if the call
+completes successfully, @code{BZ_MEM_ERROR} cannot be signalled by a
+subsequent call to @code{BZ2_bzWrite}.
+
+Possible assignments to @code{bzerror}:
+@display
+ @code{BZ_CONFIG_ERROR}
+ if the library has been mis-compiled
+ @code{BZ_PARAM_ERROR}
+ if @code{f} is @code{NULL}
+ or @code{blockSize100k < 1} or @code{blockSize100k > 9}
+ @code{BZ_IO_ERROR}
+ if @code{ferror(f)} is nonzero
+ @code{BZ_MEM_ERROR}
+ if insufficient memory is available
+ @code{BZ_OK}
+ otherwise
+@end display
+
+Possible return values:
+@display
+ Pointer to an abstract @code{BZFILE}
+ if @code{bzerror} is @code{BZ_OK}
+ @code{NULL}
+ otherwise
+@end display
+
+Allowable next actions:
+@display
+ @code{BZ2_bzWrite}
+ if @code{bzerror} is @code{BZ_OK}
+ (you could go directly to @code{BZ2_bzWriteClose}, but this would be pretty pointless)
+ @code{BZ2_bzWriteClose}
+ otherwise
+@end display
+
+
+
+@subsection @code{BZ2_bzWrite}
+@example
+ void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );
+@end example
+Absorbs @code{len} bytes from the buffer @code{buf}, eventually to be
+compressed and written to the file.
+
+Possible assignments to @code{bzerror}:
+@display
+ @code{BZ_PARAM_ERROR}
+ if @code{b} is @code{NULL} or @code{buf} is @code{NULL} or @code{len < 0}
+ @code{BZ_SEQUENCE_ERROR}
+ if b was opened with @code{BZ2_bzReadOpen}
+ @code{BZ_IO_ERROR}
+ if there is an error writing the compressed file.
+ @code{BZ_OK}
+ otherwise
+@end display
+
+
+
+
+@subsection @code{BZ2_bzWriteClose}
+@example
+ 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 );
+@end example
+
+Compresses and flushes to the compressed file all data so far supplied
+by @code{BZ2_bzWrite}. The logical end-of-stream markers are also written, so
+subsequent calls to @code{BZ2_bzWrite} are illegal. All memory associated
+with the compressed file @code{b} is released.
+@code{fflush} is called on the
+compressed file, but it is not @code{fclose}'d.
+
+If @code{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 @code{fflush} the compressed file. You can force this
+behaviour to happen even in the case of no error, by passing a nonzero
+value to @code{abandon}.
+
+If @code{nbytes_in} is non-null, @code{*nbytes_in} will be set to be the
+total volume of uncompressed data handled. Similarly, @code{nbytes_out}
+will be set to the total volume of compressed data written. For
+compatibility with older versions of the library, @code{BZ2_bzWriteClose}
+only yields the lower 32 bits of these counts. Use
+@code{BZ2_bzWriteClose64} if you want the full 64 bit counts. These
+two functions are otherwise absolutely identical.
+
+
+Possible assignments to @code{bzerror}:
+@display
+ @code{BZ_SEQUENCE_ERROR}
+ if @code{b} was opened with @code{BZ2_bzReadOpen}
+ @code{BZ_IO_ERROR}
+ if there is an error writing the compressed file
+ @code{BZ_OK}
+ otherwise
+@end display
+
+@subsection Handling embedded compressed data streams
+
+The high-level library facilitates use of
+@code{bzip2} data streams which form some part of a surrounding, larger
+data stream.
+@itemize @bullet
+@item For writing, the library takes an open file handle, writes
+compressed data to it, @code{fflush}es it but does not @code{fclose} it.
+The calling application can write its own data before and after the
+compressed data stream, using that same file handle.
+@item Reading is more complex, and the facilities are not as general
+as they could be since generality is hard to reconcile with efficiency.
+@code{BZ2_bzRead} reads from the compressed file in blocks of size
+@code{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 @code{BZ2_bzReadGetUnused} after the last call of @code{BZ2_bzRead}
+(the one returning @code{BZ_STREAM_END}) but before calling
+@code{BZ2_bzReadClose}.
+@end itemize
+
+This mechanism makes it easy to decompress multiple @code{bzip2}
+streams placed end-to-end. As the end of one stream, when @code{BZ2_bzRead}
+returns @code{BZ_STREAM_END}, call @code{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 @code{BZ2_bzReadOpen} again,
+feeding in the unused data via the @code{unused}/@code{nUnused}
+parameters.
+Keep doing this until @code{BZ_STREAM_END} return coincides with the
+physical end of file (@code{feof(f)}). In this situation
+@code{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.
+
+@subsection Standard file-reading/writing code
+Here's how you'd write data to a compressed file:
+@example @code
+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 */
+@}
+@end example
+And to read from a compressed file:
+@example
+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 );
+@}
+@end example
+
+
+
+@section Utility functions
+@subsection @code{BZ2_bzBuffToBuffCompress}
+@example
+ int BZ2_bzBuffToBuffCompress( char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int blockSize100k,
+ int verbosity,
+ int workFactor );
+@end example
+Attempts to compress the data in @code{source[0 .. sourceLen-1]}
+into the destination buffer, @code{dest[0 .. *destLen-1]}.
+If the destination buffer is big enough, @code{*destLen} is
+set to the size of the compressed data, and @code{BZ_OK} is
+returned. If the compressed data won't fit, @code{*destLen}
+is unchanged, and @code{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
+@code{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 @code{blockSize100k}, @code{verbosity}
+and @code{workFactor}, @* see @code{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.
+
+@code{BZ2_bzBuffToBuffDecompress} will not write data at or
+beyond @code{dest[*destLen]}, even in case of buffer overflow.
+
+Possible return values:
+@display
+ @code{BZ_CONFIG_ERROR}
+ if the library has been mis-compiled
+ @code{BZ_PARAM_ERROR}
+ if @code{dest} is @code{NULL} or @code{destLen} is @code{NULL}
+ or @code{blockSize100k < 1} or @code{blockSize100k > 9}
+ or @code{verbosity < 0} or @code{verbosity > 4}
+ or @code{workFactor < 0} or @code{workFactor > 250}
+ @code{BZ_MEM_ERROR}
+ if insufficient memory is available
+ @code{BZ_OUTBUFF_FULL}
+ if the size of the compressed data exceeds @code{*destLen}
+ @code{BZ_OK}
+ otherwise
+@end display
+
+
+
+@subsection @code{BZ2_bzBuffToBuffDecompress}
+@example
+ int BZ2_bzBuffToBuffDecompress ( char* dest,
+ unsigned int* destLen,
+ char* source,
+ unsigned int sourceLen,
+ int small,
+ int verbosity );
+@end example
+Attempts to decompress the data in @code{source[0 .. sourceLen-1]}
+into the destination buffer, @code{dest[0 .. *destLen-1]}.
+If the destination buffer is big enough, @code{*destLen} is
+set to the size of the uncompressed data, and @code{BZ_OK} is
+returned. If the compressed data won't fit, @code{*destLen}
+is unchanged, and @code{BZ_OUTBUFF_FULL} is returned.
+
+@code{source} is assumed to hold a complete @code{bzip2} format
+data stream. @* @code{BZ2_bzBuffToBuffDecompress} tries to decompress
+the entirety of the stream into the output buffer.
+
+For the meaning of parameters @code{small} and @code{verbosity},
+see @code{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.
+
+@code{BZ2_bzBuffToBuffDecompress} will not write data at or
+beyond @code{dest[*destLen]}, even in case of buffer overflow.
+
+Possible return values:
+@display
+ @code{BZ_CONFIG_ERROR}
+ if the library has been mis-compiled
+ @code{BZ_PARAM_ERROR}
+ if @code{dest} is @code{NULL} or @code{destLen} is @code{NULL}
+ or @code{small != 0 && small != 1}
+ or @code{verbosity < 0} or @code{verbosity > 4}
+ @code{BZ_MEM_ERROR}
+ if insufficient memory is available
+ @code{BZ_OUTBUFF_FULL}
+ if the size of the compressed data exceeds @code{*destLen}
+ @code{BZ_DATA_ERROR}
+ if a data integrity error was detected in the compressed data
+ @code{BZ_DATA_ERROR_MAGIC}
+ if the compressed data doesn't begin with the right magic bytes
+ @code{BZ_UNEXPECTED_EOF}
+ if the compressed data ends unexpectedly
+ @code{BZ_OK}
+ otherwise
+@end display
+
+
+
+@section @code{zlib} compatibility functions
+Yoshioka Tsuneo has contributed some functions to
+give better @code{zlib} compatibility. These functions are
+@code{BZ2_bzopen}, @code{BZ2_bzread}, @code{BZ2_bzwrite}, @code{BZ2_bzflush},
+@code{BZ2_bzclose},
+@code{BZ2_bzerror} and @code{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.
+@example
+typedef void BZFILE;
+
+const char * BZ2_bzlibVersion ( void );
+@end example
+Returns a string indicating the library version.
+@example
+BZFILE * BZ2_bzopen ( const char *path, const char *mode );
+BZFILE * BZ2_bzdopen ( int fd, const char *mode );
+@end example
+Opens a @code{.bz2} file for reading or writing, using either its name
+or a pre-existing file descriptor.
+Analogous to @code{fopen} and @code{fdopen}.
+@example
+int BZ2_bzread ( BZFILE* b, void* buf, int len );
+int BZ2_bzwrite ( BZFILE* b, void* buf, int len );
+@end example
+Reads/writes data from/to a previously opened @code{BZFILE}.
+Analogous to @code{fread} and @code{fwrite}.
+@example
+int BZ2_bzflush ( BZFILE* b );
+void BZ2_bzclose ( BZFILE* b );
+@end example
+Flushes/closes a @code{BZFILE}. @code{BZ2_bzflush} doesn't actually do
+anything. Analogous to @code{fflush} and @code{fclose}.
+
+@example
+const char * BZ2_bzerror ( BZFILE *b, int *errnum )
+@end example
+Returns a string describing the more recent error status of
+@code{b}, and also sets @code{*errnum} to its numerical value.
+
+
+@section Using the library in a @code{stdio}-free environment
+
+@subsection Getting rid of @code{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 @code{BZ_NO_STDIO}
+defined. Doing this gives you a library containing only the following
+eight functions:
+
+@code{BZ2_bzCompressInit}, @code{BZ2_bzCompress}, @code{BZ2_bzCompressEnd} @*
+@code{BZ2_bzDecompressInit}, @code{BZ2_bzDecompress}, @code{BZ2_bzDecompressEnd} @*
+@code{BZ2_bzBuffToBuffCompress}, @code{BZ2_bzBuffToBuffDecompress}
+
+When compiled like this, all functions will ignore @code{verbosity}
+settings.
+
+@subsection Critical error handling
+@code{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 @code{BZ_NO_STDIO} set.
+
+For a normal compile, an assertion failure yields the message
+@example
+ bzip2/libbzip2: internal error number N.
+ This is a bug in bzip2/libbzip2, 1.0 of 21-Mar-2000.
+ Please report it to me at: jseward@@acm.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, 21 March 2000.
+@end example
+where @code{N} is some error code number. @code{exit(3)}
+is then called.
+
+For a @code{stdio}-free library, assertion failures result
+in a call to a function declared as:
+@example
+ extern void bz_internal_error ( int errcode );
+@end example
+The relevant code is passed as a parameter. You should supply
+such a function.
+
+In either case, once an assertion failure has occurred, any
+@code{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.
+
+
+@section Making a Windows DLL
+Everything related to Windows has been contributed by Yoshioka Tsuneo
+@* (@code{QWF00133@@niftyserve.or.jp} /
+@code{tsuneo-y@@is.aist-nara.ac.jp}), so you should send your queries to
+him (but perhaps Cc: me, @code{jseward@@acm.org}).
+
+My vague understanding of what to do is: using Visual C++ 5.0,
+open the project file @code{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:
+@code{blocksort.c}, @code{bzlib.c}, @code{compress.c},
+@code{crctable.c}, @code{decompress.c}, @code{huffman.c}, @*
+@code{randtable.c} and @code{libbz2.def}. You will also need
+to name the header files @code{bzlib.h} and @code{bzlib_private.h}.
+
+If you don't use VC++, you may need to define the proprocessor symbol
+@code{_WIN32}.
+
+Finally, @code{dlltest.c} is a sample program using the DLL. It has a
+project file, @code{dlltest.dsp}.
+
+If you just want a makefile for Visual C, have a look at
+@code{makefile.msc}.
+
+Be aware that if you compile @code{bzip2} itself on Win32, you must set
+@code{BZ_UNIX} to 0 and @code{BZ_LCCWIN32} to 1, in the file
+@code{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.
+
+
+
+@chapter Miscellanea
+
+These are just some random thoughts of mine. Your mileage may
+vary.
+
+@section Limitations of the compressed file format
+@code{bzip2-1.0}, @code{0.9.5} and @code{0.9.0}
+use exactly the same file format as the previous
+version, @code{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 @code{bzip2-0.1} in August 1997
+has shown complexities in the file format which slow down
+decompression and, in retrospect, are unnecessary. These are:
+@itemize @bullet
+@item 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.
+@item 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 @code{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
+ @code{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.
+@item 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
+ @code{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.
+@item An Adler-32 checksum, rather than a CRC32 checksum,
+ would be faster to compute.
+@end itemize
+It would be fair to say that the @code{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:
+@itemize @bullet
+@item Single array implementation of the inverse BWT. This
+ significantly speeds up decompression, presumably
+ because it reduces the number of cache misses.
+@item Faster inverse MTF transform for large MTF values. The
+ new implementation is based on the notion of sliding blocks
+ of values.
+@item @code{bzip2-0.9.0} now reads and writes files with @code{fread}
+ and @code{fwrite}; version 0.1 used @code{putc} and @code{getc}.
+ Duh! Well, you live and learn.
+
+@end itemize
+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.
+
+
+
+@section Portability issues
+After some consideration, I have decided not to use
+GNU @code{autoconf} to configure 0.9.5 or 1.0.
+
+@code{autoconf}, admirable and wonderful though it is,
+mainly assists with portability problems between Unix-like
+platforms. But @code{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.
+@code{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 @code{__inline__} directives in the code. GNU C
+(@code{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 @code{#define} @code{__inline__} to be @code{/* */}. One
+easy way to do this is to compile with the flag @code{-D__inline__=},
+which should be understood by most Unix compilers.
+
+If you still have difficulties, try compiling with the macro
+@code{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
+@code{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 @code{bzip2} binary for public
+distribution, please try and link it statically (@code{gcc -s}). This
+avoids all sorts of library-version issues that others may encounter
+later on.
+
+If you build @code{bzip2} on Win32, you must set @code{BZ_UNIX} to 0 and
+@code{BZ_LCCWIN32} to 1, in the file @code{bzip2.c}, before compiling.
+Otherwise the resulting binary won't work correctly.
+
+
+
+@section Reporting bugs
+I tried pretty hard to make sure @code{bzip2} is
+bug free, both by design and by testing. Hopefully
+you'll never need to read this section for real.
+
+Nevertheless, if @code{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 with
+version 0.1 shows that almost all these problems can
+be traced to either compiler bugs or hardware problems.
+@itemize @bullet
+@item
+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
+@code{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
+@code{-O2} @code{-fomit-frame-pointer} @code{-fno-strength-reduce}.
+You should specifically @emph{not} use @code{-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.
+@item
+If @code{bzip2} crashes randomly, and the crashes are not
+repeatable, you may have a flaky memory subsystem. @code{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.
+@item This isn't really a bug, but ... If @code{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.
+@end itemize
+
+If you've incorporated @code{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
+@display
+ bzip2 crashed with segmentation fault on my machine
+@end display
+and absolutely nothing else. Needless to say, a such a report
+is @emph{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:
+@display
+ Machine type. Operating system version.
+ Exact version of @code{bzip2} (do @code{bzip2 -V}).
+ Exact version of the compiler used.
+ Flags passed to the compiler.
+@end display
+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.
+
+Please remember that I connect to the Internet with a modem, so
+you should contact me before mailing me huge files.
+
+
+@section Did you get the right package?
+
+@code{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, @code{zlib-1.1.2} and
+@code{gzip-1.2.4}. Look for them at
+
+@code{http://www.cdrom.com/pub/infozip/zlib} and
+@code{http://www.gzip.org} respectively.
+
+For something faster and lighter still, you might try Markus F X J
+Oberhumer's @code{LZO} real-time compression/decompression library, at
+@* @code{http://wildsau.idv.uni-linz.ac.at/mfx/lzo.html}.
+
+If you want to use the @code{bzip2} algorithms to compress small blocks
+of data, 64k bytes or smaller, for example on an on-the-fly disk
+compressor, you'd be well advised not to use this library. Instead,
+I've made a special library tuned for that kind of use. It's part of
+@code{e2compr-0.40}, an on-the-fly disk compressor for the Linux
+@code{ext2} filesystem. Look at
+@code{http://www.netspace.net.au/~reiter/e2compr}.
+
+
+
+@section Testing
+
+A record of the tests I've done.
+
+First, some data sets:
+@itemize @bullet
+@item B: a directory containing 6001 files, one for every length in the
+ range 0 to 6000 bytes. The files contain random lowercase
+ letters. 18.7 megabytes.
+@item H: my home directory tree. Documents, source code, mail files,
+ compressed data. H contains B, and also a directory of
+ files designed as boundary cases for the sorting; mostly very
+ repetitive, nasty files. 565 megabytes.
+@item A: directory tree holding various applications built from source:
+ @code{egcs}, @code{gcc-2.8.1}, KDE, GTK, Octave, etc.
+ 2200 megabytes.
+@end itemize
+The tests conducted are as follows. Each test means compressing
+(a copy of) each file in the data set, decompressing it and
+comparing it against the original.
+
+First, a bunch of tests with block sizes and internal buffer
+sizes set very small,
+to detect any problems with the
+blocking and buffering mechanisms.
+This required modifying the source code so as to try to
+break it.
+@enumerate
+@item Data set H, with
+ buffer size of 1 byte, and block size of 23 bytes.
+@item Data set B, buffer sizes 1 byte, block size 1 byte.
+@item As (2) but small-mode decompression.
+@item As (2) with block size 2 bytes.
+@item As (2) with block size 3 bytes.
+@item As (2) with block size 4 bytes.
+@item As (2) with block size 5 bytes.
+@item As (2) with block size 6 bytes and small-mode decompression.
+@item H with buffer size of 1 byte, but normal block
+ size (up to 900000 bytes).
+@end enumerate
+Then some tests with unmodified source code.
+@enumerate
+@item H, all settings normal.
+@item As (1), with small-mode decompress.
+@item H, compress with flag @code{-1}.
+@item H, compress with flag @code{-s}, decompress with flag @code{-s}.
+@item Forwards compatibility: H, @code{bzip2-0.1pl2} compressing,
+ @code{bzip2-0.9.5} decompressing, all settings normal.
+@item Backwards compatibility: H, @code{bzip2-0.9.5} compressing,
+ @code{bzip2-0.1pl2} decompressing, all settings normal.
+@item Bigger tests: A, all settings normal.
+@item As (7), using the fallback (Sadakane-like) sorting algorithm.
+@item As (8), compress with flag @code{-1}, decompress with flag
+ @code{-s}.
+@item H, using the fallback sorting algorithm.
+@item Forwards compatibility: A, @code{bzip2-0.1pl2} compressing,
+ @code{bzip2-0.9.5} decompressing, all settings normal.
+@item Backwards compatibility: A, @code{bzip2-0.9.5} compressing,
+ @code{bzip2-0.1pl2} decompressing, all settings normal.
+@item Misc test: about 400 megabytes of @code{.tar} files with
+ @code{bzip2} compiled with Checker (a memory access error
+ detector, like Purify).
+@item Misc tests to make sure it builds and runs ok on non-Linux/x86
+ platforms.
+@end enumerate
+These tests were conducted on a 225 MHz IDT WinChip machine, running
+Linux 2.0.36. They represent nearly a week of continuous computation.
+All tests completed successfully.
+
+
+@section Further reading
+@code{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 @code{bzip2}:
+@example
+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
+@end example
+The following paper gives valuable additional insights into the
+algorithm, but is not immediately the basis of any code
+used in bzip2.
+@example
+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
+@end example
+Kunihiko Sadakane's sorting algorithm, mentioned above,
+is available from:
+@example
+http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz
+@end example
+The Manber-Myers suffix array construction
+algorithm is described in a paper
+available from:
+@example
+http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps
+@end example
+Finally, the following paper documents some recent investigations
+I made into the performance of sorting algorithms:
+@example
+Julian Seward:
+ On the Performance of BWT Sorting Algorithms
+ Proceedings of the IEEE Data Compression Conference 2000
+ Snowbird, Utah. 28-30 March 2000.
+@end example
+
+
+@contents
+
+@bye
+
diff --git a/contrib/bzip2/randtable.c b/contrib/bzip2/randtable.c
new file mode 100644
index 0000000..983089d
--- /dev/null
+++ b/contrib/bzip2/randtable.c
@@ -0,0 +1,124 @@
+
+/*-------------------------------------------------------------*/
+/*--- Table for randomising repetitive blocks ---*/
+/*--- randtable.c ---*/
+/*-------------------------------------------------------------*/
+
+/*--
+ This file is a part of bzip2 and/or libbzip2, a program and
+ library for lossless, block-sorting data compression.
+
+ Copyright (C) 1996-2000 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@acm.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.
+--*/
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------*/
+Int32 BZ2_rNums[512] = {
+ 619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
+ 985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
+ 733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
+ 419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
+ 878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
+ 862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
+ 150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
+ 170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
+ 73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
+ 909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
+ 641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
+ 161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
+ 382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
+ 98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
+ 227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
+ 469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
+ 184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
+ 715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
+ 951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
+ 652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
+ 645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
+ 609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
+ 653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
+ 411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
+ 170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
+ 857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
+ 669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
+ 944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
+ 344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
+ 897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
+ 433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
+ 686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
+ 946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
+ 978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
+ 680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
+ 707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
+ 297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
+ 134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
+ 343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
+ 140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
+ 170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
+ 369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
+ 804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
+ 896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
+ 661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
+ 768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
+ 61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
+ 372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
+ 780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
+ 920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
+ 645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
+ 936, 638
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end randtable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/contrib/bzip2/sample1.bz2.uu b/contrib/bzip2/sample1.bz2.uu
new file mode 100644
index 0000000..0464d68
--- /dev/null
+++ b/contrib/bzip2/sample1.bz2.uu
@@ -0,0 +1,722 @@
+begin 644 sample1.bz2
+M0EIH,3%!62936<SQM:4`OJ;_____________________________________
+M________X)3?>``^"5D```4[8=N[8K7,-JP,#+WT`WUMF`[!Z#H>Z]G#Z!`$
+M``&]F(!NO=V[[M9NCTWNY[8+SDJPX]LV]K.-S+;KAZ-ZL2V8*;.;77MW;VVY
+M<Z=;<KNX=;`!B(0#3707KV-OK'VU;'D[L^AH#L\MTTF[Q[5O>![U3J;CKVY>
+M\YVVWMWO&V7L-Y[M$'&]!PCH&04`HUY\]VFG;-C"?8WPIWN^ONQOM?6^^^/1
+MO*SK10%$ADGQ7`:;'-UKT/24A0V\]MZ?7OC;Y];=[SO;W<NO>=U-O.57L]5/
+M=N>K8(O1\OO;P^M\^0LKXN=W6^`!YY0>;#);![[YOO7VNVSU#H^@*`Q5;8S'
+MUIUUT((&@Z``&]M7#[83W@`6P'U0KW6XQ8:T%="V!09>]R3<%]5![-K&A-C`
+M`"]C4^]W,$;9@)6UCTU="4TB!`$TTT`":!HT$P$TT&F09$PTT9#0"9,"8FFR
+M4ST4\`*GY,3*>:%/3313\(T4_(:1Z8B9B:9/13::,4\B/(GJ;31IHF:-$84&
+MIZ`@(($@!`D>A4]Z2>)ZC$8*;5,U/4_43U-J'J``&@#$T`-``>H`>HT::`&@
+M'J`````````#1D```TQ$$(")IJ8(;5--&DGH;4/29-(T,T&D>IF:IIIZFCTF
+MGZIB&T33U/2,@-&GI,``"9,:$8AH9&3$80R8F`3333$T-`&C33$T&02:2(A`
+M01H"3$IXD_3(:!JF]4\HTT]3TTTCR>BFC$/U(]3R@>HVH:::9&CU&F@_5&F0
+M>B::>H`-#0;4`!Z@/4T/4#0`]0>H>H:::8CTF@`(E(FA">DPFJG^FJ>U,)IH
+MTD_0--39-$\B:GHT](]3U)@--,RFGI/4]3:*9/R3U,DVIX2'J;:1Z3TIZFT,
+MRIO2-1XB>D]&C3U#330:`T:>IM)/4]/34TT)ZC1[13-,U$$B(0(!`"$\DP!-
+M&43RI^FD]&IZ:IX-&)I3TG^JFQ,1/:DT\2>4-'HRF90/%/4&T-1M1^I-'I/4
+M>4/0TT8AJ'J9E--`TR:>4&3]34-,AH/4R>HVH:=\9D)$$ZM>S:PQRS9]&G5H
+MU[-K:V(2/Y"8\C(Q)9!V$HB&:-'42&;`39!PD30DX(`'VXR!]S]4?EFN`3TR
+MZI#2Y485N#3[NW+I<E%2FDQP0S`QA,A+"2I#,Q5%%:UI2HL&*(NFBD8P4BQI
+M:+&*BJ*L1%5AF88*Q"TI]`.(2&&0059NRL%%&;MAEJ+EH@C$MRY<N4JMM2T*
+M(9:L6*1BJP55&**I6I!<:CEHQ1;*VHXT5%@L5'&IF%Q10&(QK1MJY:HJKBT*
+MHHJ8U54&VL%/0=B14:8+JE&I=W!2T2I<18BQ6(B(L%4:(F9BQ9Q]V>^(*P8*
+M+%6+"?N\S$"NN6K^!G2+PF?**'^9`UY!,:(7CH3J3[A6#WQZ4J-T5H'2G.&>
+M-2=B7#IC:(I<#LF+;AA'-E`S4$.`0-1%;3`.JA(I(#(C(FAB`!=^50!=C)$:
+MH"I;(BF^4A`6*AN8B7("'&P6M5@%N,HM`DI;!"0/Q)*,&`L!$0()&04("@A_
+MOV%D2$D5[-%(JQ108Q09(10D"1A(WT%.P>Q6B\E!>^K6O^R""3OW/_[ZS0'#
+M4-22"H@",@XDJ31#1\`)/HDQN>')A%TJ]$V1+&-)*&>W?PP0?X?+7I+[+[VP
+M3PC6GVWGC>+*F46#Z6^(-:L&)_:@J<*EMI^3EQ&(A^YY(&L#0Q8JL3K^4S]I
+M#>_8,KJU:*E_<Y@(P51<:BR?;M%9EO\P$+1<9;041%)6+;1K6TJGUE*JHJ*N
+M4K:4L6V148*7L@2Y22%HE98HJBHE*H51E:EJ-!0BQ5A;:(B%I45J2E1LC%1$
+ME:H,Z#146*>@DB8.E4=-4ME5J(UBE%1&VPK5&,MA1506(BHQ+;+8(V*U610J
+M+6*VHA4H*T?UR5$9@Q1JREI2L6L+:-**1+18I4JH*%&#4L6I4%B4=X8F);0J
+M5K1$48%92T;0:T4$9*Q&VR5@H)0MHB6+`:-%X,IE6@K2UH:$S/VUS+:N[1$1
+M$14RRB6MK4&,;8VE+%;:E%*E$1JVJM8I6*"4A&D4JMLJV86IBN$2X5:,LME&
+M4M:U:WTY`PQ$:E11:J6V5;449+,+\U,1-62]1+/N;K$*VCQEF)RU3/\+6]?@
+M[X)#"F_D^[8!_T6KS/*A2S_2##C82P;;N0TM7XA(!X3^(([YDGIB5D`1#U]`
+MZ?3G,`]G$@<H2=`$2`DBDA!$A)4K)*A`4(*`-GPG[!'$4#C;CIT34HBXJI&H
+M(Q/7F7JN&&:IP=3L,8QM1&@8OK>Y^6Y,_MO@S(;S-8F)M-B(&`-RB0J*L*D[
+MX2=IW3O.[H:?RO,DZ2(2-IU8"))B!1`EM"L`;8H12$%!&$@R`R`L(H`L@2H"
+MR5@19%(L%)$C(H2*0K(L"02,"0)$)"2<[:WY?BIW:8'Q_`]W\82"<2#X(X38
+MTW)^-;\@+GF2)/(-P_R>>J:4:4E,.N)1M%VF%>$DEAF*Z&1TGC@])U7NFCU+
+MN>`[7?^W3>OO'<3HB]U2E#[5*?*_?.[/3N@K(B@OW%#YF82H^O80Z.&^PU"7
+MW?_R[Z6Q?@$YES!1'*,-Q:OO\]#N,$&6I9_/F;*6,T@9!,3_1(URE_OYGI_"
+MY<5`;Z@-S2I$*GA,L]#XW4S2?!DU_O]QO_9AI!Y\>Y1!J>"31EX>WE4+!V$\
+M>613_ON\Q']NN^YSVZYS[UJ[O+#'=(J=:GX5$K*#,P97R/#:USLO6?(H@>/M
+MWIF_9J'IG<$7^F$E]%@/WG=R&)]J%Q!C>'ZU#IS>Y'(F-W92NO[];">J.WPY
+M>:CX^4,,2G](D8=DW.N`>)OM%+S&;1)4X:`R3_Q9%63GFS$DTD6#$0!!FTPT
+M(C^`FFR:$.)W9]47GR3R96]+1^%[M'![K+?@<:(D`)`&09%9$0UJ0:1"D615
+MD0&D4D0H0&0$B,$)BY6X\Z&:PLYX?M_C>@!&$)"?F4%BD6+"*H*L%BR180%D
+MD!@H`P@**1!6"PBD%(I!2"P4$!@Q$(L404$9%%"10!818HLD$3"9@8"6E=LC
+M=ZY$MR2016]73O"\R>!Y:>K[G^FHFKA?H)!21$R`"(4DB%SE4]R9>JY?E4X&
+MI\XGESTX-"[H/;_T,"%:]7P,3@-S5ZTXV'+3TZX^BX)@?N13"Q]R<6\>WJ2J
+ME=AB28A3W4U`3K>S\+9S=EPX0#/1D#A8LBR((R06I(5"%10HDJ+!MJ$4%6$0
+M18"@I%50B@H2I(*2H5A*P%DBQ0BP*J2LA*0@RHLE$*P(LK`44(H419)1JI%@
+MB(R4+)81C&("P1("A*J*L$9$8"?@!^+Y6,K1(3B'3Z'IN*\WM_1.)S9:QJ#V
+M.UX(P-9-;H6^$I0T`0W9>9]S#+.@--Q^NL4@RVBR1W]!.:.+^0H9W.2O'GTT
+M#,`&83,V914O]3MOSE7G(<NLZ[MSCG])IB18(G?%E@*-WYDA)(F.!\V>#1\0
+M*($#9<1&-`[,Z.F3H`4'!R759LB%L+C7R@9Q,?8/(<QUO#KRH20"*AY<G71P
+M\;ON<*10B7!A=YVV_FDOE9+ZJ<HI5H$JS&\[SG.SFJ3!OM['=9J\<W;W2C0+
+M7SN!="RQH=*CH>&Z@T&L!$X91X.2"9^*%((2(C(B$B#)2"R)<QSO#!-\<2>T
+MY/?['L,W\PE4_\NZ$[_H=_CG'(`!W4NY<XOW<;A/PY?.$<G.$'T$9-!H#.S<
+M^DIVE3R4::!G,=#]U-);]+51]*)Q7]MAV+?[(MNV#]*?EE_KG\-U^VE=OU?;
+M]3]5OT+<.,\OL--?VV.S?CD#95.L@CN@!>[Z>IS^)YMA'WF+CCR584:K[\+[
+MNWNE?U'YVR>\7?&/T?A7%?'#R;1?/H]UW!VYCE])@;%D/K[Q?:R;62DEJA&1
+MU3=%4)4^XQ+Y-(?*ZFZP7CEQ#LZ[L,Q\4L9;):%S'2$FXK<ZLDD3HDSAU=B!
+M8:E0\>_BU^\16NQ))N=?`@(NB\EAP;YC&WJ5^<0NFM$;/LFN9F9L1V!#U:\U
+M(5H?SO]&9_M??V\["^4:W!77DH<\;](V?F]5I<1VDHW[#LD0.RJ)L[:*6")Y
+M*)DL7V)(\H0#](ZFBD&:I8DTQE#M*^A-;;*$?T`R>72#AEPSH^>V'F0M6#?G
+MAUYBGV06[9Z6TW']6,^:-#7U\MGU=F`:BWF+VUA7=.XSX9E2POZK2TLW/+P7
+M;1A<Z7S3NGWM=3S7K8DQC'X_S.OD:.S&;7Z'&53.9E1.U9;N3<Y=&T11:IUW
+MP*2+JM6K5"Q2NZDTQX:+^I.*E"\HT.9A4MW]GZFO&_`F<*N_K]:8\6Z5YQJ(
+MKOQJ^^`]G1.B-6RQB;C'#%NF-;Z]/C]'RTCQFCQ:K/T$+U30+O$D'YG<\_H]
+M^A8L=7JI"$DCN\DF];2225)$E$E$GA[3\)E+>N1P).,)2(^DZA\O??]XKL;O
+M'&WO(R*^!FM//G(39;-4I:,_"G//K=7/4C3HU>+8F?'6-=3+%/O/AK\5H$4L
+MM98SGJ@\'QQT3QR7[D?4;6+X3`M]Z+#YB4C+??UJ]+/:3A%M1]_)N,/FNRPM
+M4P:9(^S3['^Q[_W/*+V^/RTK[%(?Y54,4\*%6RA$L@^7C$#X.WK7Y*[PTE`9
+M+A=+OGSTHNWHO,N4].&@X+Y$NW!M"6=?0PGX4#%[]9C_*F?6#KR#><\9^YYE
+MU9.8G[+H:;3=/4WZP.V.OGCZN?=GSCB/*R*5?G*J>ZW6'J^NIF`?+B<G+Q:Z
+M`QZ*4H/L1Y-'LSP;)X?N6^?91^[FG'\Y&F07TO<L0I'"('+>KJ]!:F3M*?2O
+M+/R!CC;QWG1>/IPZY'B<T)I8S+EJ.-6@*G\335\BU3GTLM.Q'#EQ/P]MC:3-
+MK9%_[?WOOU;W=Y.VWKH^TK59<(>OK23*U&M4@L[JM0CRM!OE$YO"TF-B'@PE
+MJRF\H6CF47?M;OPF*J;YI;I'*2&NIU)!JON`FYA#%^'88!SA&_M51OR0;8[O
+MOVSANL(J,8P?'^%@O/4WJ4^S$]8N?P,M*2=CY\F8[[#@2SW!X9Q^83.(=).O
+M@)TD"A\Z%$S8_P\TRPQG&/1_?_B^V>I/O.<VR#,%,8H9:R\Z7-V:#-YSBMGH
+M$$]Y!3G`B*2`!(*R,.A"&&2&82&`YLU.MQ#0Y%FH5:^FU.E)$==(Q)@O-F51
+M'=8W(YC-9M/E3RYMU-NUU+-/<+P8QRP''IMOEMV5BU<,QF!IV1)=-E[W<8C8
+MAA[D8),17*]6FH5R=)1B,D*4DP*7XH0KRWT"_P<*0N%0#/\HL`^2>X"LY[`P
+M4P4`UUA9ZR5VPZ1?8`P<-ECJ:G1]55S.FQBFIJBK63-X./#&=5)S\5!+)<O9
+MI&%-JY'CX8VXX%*>X5^;C`5L?JL-''I3OW]VTT_EZ_ZN;>&V_`N_ZS'Q*DDD
+M]PBJ6<CEHYJ>SH,G]4\Q\#?I^4Z;T:Q>&%@W=Z484,:,R,8?@2Y<H>^?+8V)
+MPLF;5DO9+''%(L7O\N3]+^G_$8U3PJ&JU![?#;%:1H/!6;V?!O[13VPM@(XV
+MX(?,3\=^;BV;T7IMP'P)N7R-T+INPM9P/H,S:-E#$G2X*^M\PR&YLUOQ.NYM
+MR$&BT>,V,S%&7YA2@[F6EE`QRKF]?QY_9ER<6H5M=Y6!T-;8*9,VKTW%WV]T
+MV)+@/H=UG^/I4OL2*R(LBI)"$C(DD(C(@V#:$VOH,3<-)7*SZ73W_(['F.S2
+ME*4T>4;QC[/<_EGB#7S_[+V_V78B`B1@<NSB(Q;XU(*RY_&>?>E1#<^0IFS=
+M=/!Z]!-QCG^QZ40T7/XWWC^W8\=4&4(.;SAOK]-IQR='][GO./,,[EKJK?EW
+M]?(3,&Z@Y\XED)))(4/^+AQX7\ZTJ/G=Y/U9D_C^WY4^W5-@^-R]9V$QI%)Q
+M!T2@C92_ZF^CN9G==UIR5,]Z'XPB,'JG99HL?E.O#:LP<E=#'?C%S\':?1OH
+MYPVB,#I_8XG9=<<1ZN@Z^2,'<?NNSKZ,W,I+"Q(\YNO#S$1NTX[K]9U,F-T;
+M%:@J\E].QFO@='+-@H?U*O\54I,^AV[T<PYXV/@0:UX%;D_BB9C>!,[)2H2H
+M%85@L*P*PA6?G?D'0\.Z]'(7<-PC`^UV7/7.(_?,47>[0@D;S7_?OAJH$I+A
+MU-&>&;=7EYBT4+F.AR=EF42;C-L\]=Q/8=X.[F?OWM1'.D3$J8AX=U=#R1].
+MF0S<Y)NA&!!#IQ/V1?D)N,?LL$-G\2CZ-/_TDT5S,24_$HA"/]7;VOQ/FE=3
+M>\N1TY6U9\L#`5U8Y#*3&!IC_[8/+_#PMJ-*Z3YJ.[0T\H[2K(VNE)MA:T)%
+MKJBC*RFZLA&^?=U7@_[Y+2T$2F7UO?#LWI];]3?*&"G4E7]DY%G75>QUD.YW
+M1R[G?U_:<A4U;J#N.4)SX/^;[8/MYZ:M8`5K)4`MM&MB%:"%&(P%6"@I&,%6
+M$8,4BJQD%J,8(A$8L!4%2+$$60J%:R`I&V!4@LA4%@5"VV-9"H*"A61I48`P
+M:R01%)4D*@QA59&T+!@H$MI4@I1%BBD*@LA1)6QC$"I6I6)!)4BP615%B*JJ
+MHP1((J!$19!$)4%BBR*0$F!EC:BGM2]IF"=W/"RIK#OTD+V%WJU$U\S!M,":
+M&F%1!YBS)T8PZ&*F=R+<]LMQY(Z4+G8AE97T!W5E/Y8]3RT$BV"]Q%:+[W[,
+M,%,T6`ZE-*E`<7)5(PT6#+\/X^@S\8/U>-)L`:W>%0J\=3#ZD9?=X_LL,8;1
+M&7$_7?\Y?XW!U"L>&GN+SNN_OYW#DFSV1>-)4_]X6SV]ML'(J5O0<K^,YQN(
+MYF;7`]UYM0U);Z#EN!]ZIKLCC\;Z+YF^."G+R.:AX5WSK9&@DZ5??%_LFN8J
+MFFXV-C-S-P$^`H&>%=<YQK,?G.9;N;%C].RYJZU`+>OMQ4*Y;]@F.4,$S"FP
+MVF1P@VWQR7T?!JX&)3\:W(\-TZF->+_DQ<:Q))[:!Z3OQR;<P[)NO:V,S7R+
+M4WTB](Y&^:BF>.I/&M:QC*J2U4ST/Y^3DP/#5+Y>A@<NBDJ2J0>WR)7Z:(G;
+M[\"U`9="@Z0SW]Q!CO\XV$7+F2=.@A`J^I-G(78]Y"_4(F%"A43=73!@T/L?
+MS+KJ"@X*7ZGBD?R6!V[&T0.5C#AMR\.=K-+^V^R][>N[U=QSQG*53?KF\/QH
+M1S*ZV?R=-$MWM&=#PHDC;'HMZ6;V%5B5OX)NC3',UL?.X5+KY'7.Y>R:[_-\
+M>K>6^<O>`-1QB]#<>3:O^$?/5L*@S1Q/5&V`&`VY$Y;!V=]H_3^7<EW,MA0R
+M/R^#\^3,:U['<YO=<Q44\N'[;F;!73<%=<K2^M&-;.)''IMSY5Y*!0CO4.R!
+MK.B>_O+;)`U[Y6#?M2\YZ*:\[G)8;OX[UN6>JDM2RXSDM1;*R-T7/UOK+$I3
+M0$/66BLW?"XEE-21P+YC@VZRJ(S";ZZ!DF$O61B8-?F,#:"L!Z>""ME>%#BL
+M7`QMO4T2PHXL&V?\BL^,[^!T=D$-BYL=J5[>:]:ZJ9+S#JL&,;:$($O_B*AR
+M\U6)XZ-1LI*2ILZ5-KN;K.U]R.O4IB8D&Q,$':/W#41:,S)2\++WRK6;)#)3
+M1XO@M;`/\)LUDXLGU;-62J?X[]-<FCM'J9;$$@/^0!&`1=NHA"`J$B*!&C(*
+M"2(H#$(K-S<MF#=765EBW\'.0]M>HM^,(H1#8_V4#C>D[1Q>6W^]R/V^B#WF
+M0UUOASW&>+K?$3?SP\,1'_]"_6'K_0,2E<)2PF)M=L2K`[WVJ".&]SO.$K7@
+MQO>==F9CPL&SS6+QP2_#](ENQ'`=`^5W])JFDWW^U9M.FKGSW^0Q^2"=G=D(
+M2H-7N=$PUC#(P!NU46KTLB!3EIU*90#-H$))"$S84]Z:_)SOQ.4NR5$UO^<8
+M#7_>O5]AY=E8GBD;/Y;^Y&K6!@Q/CU+/Z:/T%]0=/N$!TD3Z^ETLDD2.^Q_7
+MC^W:CJY.=\)"27&[1=U'LOD^!!^J[Y_@TGHE)/!BH3J!\O\<%"2W$L^K2Z2-
+M06FP'@][+)/XWO8/^%2F55-#T*FTEIS3'KY!6O9,#\!(7-7I_!B:)CSSZIQY
+MH-4FX#2TNSAQZZXWK1'T9F!JYT7W3GO2JU/]80%Z<YBG<-4^Z^3YI7_U\WD0
+M?()E2QL41"APS\[WUV*[59PHON*Q"L`_$&3YS"!M%-IPBSA1?P+^%^\_$Z?:
+M^X>A.Z-H<IEFBA<#K(J/:OL6/M(%F_G$+VE-FNXOL2@0Y(Q@5_>D5<>#ASI7
+MKY[AM$6/UZ5=O01+ZND-^Q71\K'STG&N#67*:F5:'S(-"<>;X4TY:%5%":D>
+M0T4+,U&/T5&TY_X=CDOQM:%M]UZ$3EFZ7BG-XL$ZF,"VT`R+^4E%E))'416%
+MDDHHR%0[ID8PIOPIT8[SQV7R8\&'#!\8FOO\@JAA?HY@R-'P\P'M7\VO]+(^
+MASL%!$)THNPQS'QY\=>E5(J'!""\(AR)W:O?NFQ;"P2_H.AQT5&?46B<TZ^F
+M<:=NM7$CYK4Z<HM2%]TSW+)6@W`AB5F!F_M\BSI'"HL#HA,4@@2LBN>>>M-I
+MUX\.X]/7CD0K_IE_IUK:Z,*6L'CYBL*&!JJ44H?',`5:&VO#P%CEM]MGL7LD
+M?[Y#!X>S2`0:@$1I,$>XB4/W['-;EDTJ\0SG_?4O0&IESL!1BZ3!_A-0@/1P
+M8B8]6@(<#FA7'I3X@8UZDQ'(T>DT^#FR'5B\W=,5"R&,QVQ<&DJ[[3[/!)2/
+MJZU"8^#DPMH?R5[S+85MA39CH"";(QBM3KNZFRTR@H$X83IK5M=[P05XX5>=
+M7?)/?U,XPQ:J_I,]CV:7T8T>@A'`Y*0.'"IGWGQ8,T/`SSL&L40220A&4G+#
+M7R9\)EJ,.7B?S_[U@EG,0HS3-R?4XNU=3V<(/CM+V;+/F,O>+#C:?-@7JGZ]
+MEY;F-=+0MY>MIDS94]C,%[?FLK)TJ/1/84EG=V$Q$R:ICUZJ_?X8N>X0J(,2
+M'>3T]H2-C'/!0_V?Q*3HS^+9/UK\]-)!9.HJATOT9X8>IT[N6D\UEWL='R/&
+MS-=(WE',9&)`L]G4O['P;!^C\U#&]JX7(47EUAZ?NYO27U97&A.F>,YV5]*U
+M5Z^=[J%YU].X^\QBE;T8%!-I=C,5IFGP)V]_SF4>G,V:CBE%'/:"K2,?.$8#
+M!L8%AN98RB:5,B?S';Y#D@"U**:2I^_2#!`(-7E&O1"BZ6_(Z%7%TZ)T9"9)
+M6'*$?J1&ZI@%IDFBB/*__<4V:/F\HC<W^1F2;"EVC2<IBO/$M2B-YB5!]3Q<
+M7P\Q&W'&SLEK]7@`M#M9E;PK;AT5OK!BM+SJ'^7G+/%7W;=*#[$5<F-/2:</
+M=SNHN2#<$5:8P%@"RV?@<K9V_IWO:;M6OZO:SEGIU7D.Y46/%L2F>FYNI`V2
+MQT9Z6O=,XN81D3$<$>SOPRLJW0H9^AT()I6"5CXM`.0BD@2:NE*\&4RA`>]C
+M'8W^178I+B50750'[[^+O_0L.1\CQJ?+O-ATF4CW4$+45$,BA-@(];ZBU`$P
+M2)W0(],.=5WY'LWM7FM&WAWF=]$DR4/.GLL(6GTIWH-$4)H/DFG!%<DR(#1"
+MGV(WR0E.F[BPK<7%D9+NM@[&LH"`;L??="-B0]K61T"0;(Q":%6=0A()19Y@
+MN59NZHJVKL=CC!)&!9NX-TF"_)::(N<YUH>K5B.Y];P=Z;6(R21Y1UUGHG#=
+M!62:?,1:#JT^':71*Z9F4)A-X1T*$T)G)N8<I"D:I6JQO*(L:+L\8`.^B@@2
+MIFF&PTJ0408I9$E+]58BSWP/A]GLND?$T'6%$B.RY%R:6R4YW2KA:R*6`K]'
+M^*Z)4Q>L](9L03'D;YUFAX#\\N4BS;PD[.+M+<5&PH/F9KA@KA9#NT$Z/>7P
+MTV),..N_1(CHNMUD.W3#%JO42$M9%N)1A>^[6[#EY!D\%/F'=9.=@9,<]@/%
+M`A5V7OH;==0^9JW<)M)8T9`B<VGTMC2TFT5C27DP5OPH]!,!WKZK0+@K5D1J
+M?3A:*?].7M<!C@=!@CE-(VDPPRZFR^U":.*[."^],!C#A_AE*+=-LYF66Y'X
+M^1GW2BFZ[\J=>W?&3YQKX_6KX8R7#;&P:&-IM(L1@B@B**B*,$145%%T[,0X
+MIKRW@E;HK/F&TG;?-O->IL`II,%\=%[<-J;++)H$_I/`[EYG:_(HJ\LY<DDC
+MC$'HT(C=^TE7:5&K#>#.M.)1MFMA"YM(_^ZZGVV?59%'SW'KI\<#AI4&O1C(
+M1O.'V]**9"#4C3/1#2'E[+Q\[?+_.?;8]+['_*XCI'LONL`X&[BQTKC_%4E1
+M-[NUC+W%U*U=2(,@')=9'!"ZBB/BC$3!]B:-[4"`N4Y@R?KRHZP$98<6^1:^
+M^^E[:%XJQ/(AEZU[\JF8T3#:8Z$I:<.B8IECP3(]$".]XL@6-\KMJ0P1=#&Y
+M=3'LF>JM@J<[A.@L;2+0NQS\"+2G3.5W:ZHG(!66U1/-2@#P<52:':)J<#Z^
+M\>?U)O'[A`P>(;N;\07TU2^5G#Q'B><YMI?T]I6W\7BMN;C(96R%$^])XFH:
+M;I3J0:AGK6MC%7E0'Q?RO+S^Z9HN1MQ,C7Y<<Q$KRU:)RMN8.$-Z6MC2C:%M
+M#3&-H>V$&Y6]\-QUH57,?L_>TOS),A%%+1!Q_)QI(GS:89,7-HV"`LKL>"Z!
+MABCITF]V[RF1%L$7CVNV;U2O;BBE3-4$0[<^';@O'&-/V]G5.C,RX5NQ$2]<
+MN3B(56G!DD[R%[P1A9%FS"Z4XP%FO%5A]58\JZ/9-$7?42KU>_*%\$8,.D*"
+M`8P8SX6"N^)RHGPOWCO]NV&OT5A<@_Q.7/Z_*(?(M=?U>&*FF5DHP20>4-:^
+M1(\J1Y/^T'ZS,VSZJ7(\<NO*<!?^.EVM$-_4Q`%DXO!^)-&J?J,ZAS"ZMGT2
+M8"8@\.+6H023*L[>=`U<\0X28SR:)'BLP9THK=[39B]1E?P6M6=T+WC,B&C4
+M!(9G80P&Q#[KU^OW5;T8800\(E"J"JX-'!^9^>.[6N.O3/LVNBC"70]9UUK`
+MZ;+E+$ME#4.%;.([)D=R7"IIF]!4A-3HYDMPLHL,:6Q+BY#"%@8%29);6HF#
+M)TV!][T0^9M/A-=:D'G1*=@/?ZAX?-M9I]5!#!JHDCBC**FE2TBE9#43SZB"
+M==FB;3KE[R\7CG'H=+:BJE:(HM3J]'8JCB+)[77IN?Q^=7M#P<Z0X`?%?O^3
+MN^)OUOCXTCVO8T6WSJ8M:)1**J9)^97FY$:$X6NY8-H'>S.U.,*!HV^]#Z[_
+M5N[9'OV8R^DON%0=Z@<7C$B8P@5*9@EX^.[5$@9!#!HJ[%[O#&B^UST0_TLA
+M>QHW?R(=+U!WC.7H(/>S#+)(H`^N00CN:#GRY!QAI^PJ\50MOOOJFD>FI.)\
+MWUDZX;M7AI[=\G)W]IB&5.UHBI^NI.<LYM11^BLZLP\V6?N'R#+/+"&>`:\*
+M9;*SI2E*K5/!-M>.I3$VG]/]Q.I.A\_G&-(;H$RM$E3+)&E%R6Y":(!`_!8G
+MV]1CM&]]2/Z?.\,"F6(1WF;A<Z5@D)C$Q)]RM;\FR&S@I:QL'\NEF1HO0WXR
+MR+Y\&!BW,"6-O)T])^AT\3%E;!AQ1N.H\VU/F_<Q^N[/3DARPN>.(B$SNN$?
+MF$_QOE:'Q/YRQMAIC0`.`Q,EB9!0(],FXW'HL&)6PL!]06*71A"ZI@@A@H8'
+MGES+8SC68AIL<4RZHVVVX9C+<<.:C41<-7(K6H<X^AUKG=Y71RXB?2WIG"F%
+M'C1AB<.QPHX\'&MM=9"CB\&LU:5<XPT")%QAK"PX2?S/[+>]3NXIUM#6Q%Z(
+M57PYW4,RL^M?!G"^#QB\+A?!\J43)V;:5@F;)$@I27)",FY%]$S`QJN14Y2L
+MB**HZ:]6&GT6ZB#-VQ446=UO.:>=[NKB,RS5UCJX[5QDRQ=G)GK,II2P(!L8
+MZLCV'7@6;YE=*S93:)P>BTZW*O?9;FB[*V*>#%??>8)'D>GX6@2O3Q_(X(Z&
+MOC9])U^EMROT+"6UQSFB6`B>JS81_52!(ZITFM,,4;A593^[(ZIB`T!:(NTF
+MTCZ^Z6T_'W&5W&%35H$##=)KG90\J0<W2_JJE:U&"JE[Q=X)W(N6PD5)PFYT
+M^N_7\J[T3T'DIH;/+99S132T7*J3V.)"L/N-@I$CY/E]EO5,(=0)M42YH8!'
+MVLO]+U2#B^(@X9$P4128P1\I@?7_TB"]$#TF=TIF>Q:J#4,+#91.%%55?&YZ
+M$O%/4HX*UG;`Z;4]UE70A6D"!Y-+/A"R'CC#7W\+#`MJ"Y5:5=G>LRB!WV6V
+M%1M[J9._6B""E*8-,L74U<G%FDVX@*([7TIF;M:P7A!M%B@Y[B:9B(O2;C%#
+MD!*&D1L#%=*I2ZIEJ1+J$U/GGJS>K=5E,R^UT+=9^"\P7%\G+P<D4=\,B(DU
+MYTLZ!LP*7<S+.ML+)JZ&]'PP#H<=)K9L52)KMETV$[=ZH'&/CQ[=<]!2V=(B
+MBJ`D!"NOG%0<T;'F"B=R_HZ.+JW2R[#I(]!24'4KFVRKSZ`DR]QN$[^!;<AO
+M:I87M[7$Y6<\"N4PF>\Z3*)2\TQS-F:)5C*!"SD)67`)`9S*@A`!$DHXF1_N
+MV<#/=2\!`7680(GCW<S3@`_F/4=<CDTN5R$<9A2(Q;A-RRT0D%!N5*)VMRR@
+M<9CQ9`SP6C)*L560IS6@&_Y;UF@0@FI3'F%E":<*.TS)J,[>V##+Q#+5K(-A
+MUF'+$7Z$N'$WRYP@H=5,UW4',Q"U?85SEG3.!K-%[5827G8M;G<YKTR7''GY
+M#F&YN>JXBG9GNWR8<??_K_/I.+Q.GP)\)V=\GL)RUSG5&)&UQ0*.]N*SS_6<
+M7)8N$@P#`[C/PCZ>@T4M@8`56/V\EC"R)^J:1A6N!@32Y%N+6O+S4=2]=Q2]
+MUY]_8N+FWT)^+8'K.Q3M'Y:&\>3M8H;^T,15I/QSGP]_,]%V!NYUMYMM`<WE
+M5ZFH25K#*5;8-[+V36O3X+ND7!`OP^K9\313X4/F&%7W/67`8IL5]U,8BO^;
+M?<_A/1UL0,'OW1[ACY0ORZ`W1T3Z0]=X))KW%-F20/+Q/@]7SOO8S6WMQ1/I
+MHRE@B^(:3YW"!G6(2)64$O+-]-D!?\4;R\U5(OO%I#PJMC5M8(Z'Y2LGWEHO
+M2/8H84OL4/"YLH$FND,40!Y)$O21>-MAU`Z!\.E*I)M"-KI#+R[-:J`H0J*#
+M#KU,4<*5@EW(*):G?X[0:6P,*X#PPV.A5E8&.I"@)&,,DI0LU)/JC,V71-HL
+M!2&V;'&2>P9`1`C2;F>/5`RH%S0M91!"0)$M'1&F.!M5F@9XR"Y,L2@2:Q6_
+MEI46UT0P,6X1*!$#O&+!U!+PF1<B9G<'J*AG8TKA-)64[2)Q08W7:-K7M6$3
+M%II`R5H`2"43*1B9D^YR*!*M8*RE&1=\+OOA0PBJ?:'=T@V^>WF=#\ODM!=K
+M^8"HVD2&W9RWZ(OB*@A$,L&+3:E1F9CET!:$RCIO$#6C(VY.7*6>*)F=IX9Y
+M_'OZE.WKOYO.&UY(]TJC>[VQ`@FCK`8ED)([4]KVQ298Y]3+01%+>0[K`7LB
+M&[IXE]F]2AB)$H_F2HG%&K6>/4*JV4N'&5B+PD/13=$JP6!.Y&U@E9265((:
+ME2V1%'U=EA-LLBAPZ7,Q8+'LA5D'"A2E("XH*W@PY7#3E02Q+(A6`U[&Z.S(
+M_:-U*;X:];VNJV%F1$!;+7@:NFKO<-05(%&P#%JDHLX>M18-(4+?"BVAFH"W
+M`<$HP(-"`RI:BD7"L*`DA0XM"LQRQ3;&G:V)-3#M!!!4ARIA@F8DXTE2J0+)
+M#J:JQ4,UQ=G>(7-2$+ULZ_:OF]GBUY0DEX3,IIXLP.U,V#0^+-B&A6H#:SS`
+M@+$76JUV%AS?T_;^KZK`?(/PO2/&=]^G=N>_D\#OJ_3?P]R$Z7:`M+1,O1[6
+M5X]0FT-3`O[B-)%YHG082Q*WP)=TN%-[]KT,T+`$>3UZ3.3IB:.73JD`X(&K
+MH7FC%TI*.AA60P/(L]MXN&)"L](/$Q?S5C-R;F6'44PDB(6VGJ8+DRB,Q]J5
+M]ZL+B;(=B&'!P+I06,I4/85-$)()*-H47?F**"]SNQ!:EDN4&'*B5>,/]XBQ
+M".C37WXH)6%B&N2(,BG&C*X2\#%6=(WLA9.%('`W!(LJI*SJ1=MD8F]"KV=3
+M!(<4R*-]X\6O&ID2)LB<!T':A63<AY4`D@Y,9!@;.;$F1=*U-@KA,B20;88O
+MQ'/6;P=%'`L@[:%#N@("3"Z@$>-)T('L!H$,'Q@;>K:QT*@^%31=74="2U#U
+M(10@Y7F&*N5R"4)V5VL4`MR\Q2%2U@B%\-&F-F!#"$!O1*DV%65FPS3$0A#L
+M"TNYJ.LGJ&KXE05%RER`40KC"8I(<$AH#59V2L*O?->7K+&68`_P_XGI*VO6
+M5K9%8+AX`GIZ/(@J'"FA(GA18@5ZQ3%!Y=/P)T^+P!L,RGQ*OQ(CYVO4T'@K
+M`N"(>C@*@H("!"Y\\S/4P$M[6=W(Q9%+!%22[QMZW4S>PGWG>R-9:N^V&[M0
+M;D*7'JO/5^(=CQ0Y.^E9/!^@F*]/-OX>SWL/$[4O"6M%-F#;-0FEU0(26(#%
+MB![#D&*O'#T?41T<9SE;K922:+@D@UQ!:)A#(%^$'V(F0P4B_N0#!T(HV.@6
+M.K:@S$D!;T,84304!F2,2$CN5JE((+7"G>JO6WP3B(1-LRH5[H[9(I@X$&JE
+M\M72-A-VR;)O#&#53?VE"PMG#,U?0RUS<)7.O+E#^4F8O(.Z!)A`C,:8P45H
+M6&@L^:*CH(!8$/U(J+Y5+0M&2R+8PX)6!<J"4(E4@`N@90`HU:G67.HJUC[2
+MI`Y^'N%(WYW'7TIP.5-!0+T4G(9*,"3WUE@&K[!Q!U&!@<]==KNN6@2J6RLN
+MC\)G(1DO+"<KWM/=\5)IG%GC'KM3M:0NCT;8XB&L,\9-NV?9(0Y:[EQ=S3?V
+MWVZ]%GKI[5+`58-J;7<;M5X_D7Z#/X7$77$O9K21D8(:WF9B(A2MS87P>!=#
+ML)&DC[;VJ6U'A1%%NZ:3(T3KZ9H7*S4Y+!28D`D]<55!0+<1!NL,]?^9QOV^
+M(%07\TP/WJ9NH62OSIN<00W]P_6FL#>738;"0Q<WZ6`BQ@OK,0PQHE'%^2XQ
+MFN%[&5HY>6#QUD@32&U@QET2S2XY7QKI\>)W25[+T\DFAG:6<'(H&A#:H8YC
+M[NND_EDRPG-2CB/JQQD2@UZ]XZGS/C]C@$DPJN6A&\):,!L9EJFCHO<,^:_:
+MT5N2D'0V=.Z2/@?^J\>.3Y&SDJM_6,#!`G\-#D8;LC9I2B'1$1<6+)@0)%"D
+M73P!N)"H]Y.GMZ`]!T+B2;2&T#HR0L2'+0%6B=T<!)^>)G@^^:L61I\V6-F?
+MUC[MEZ=XX(</T;KURLR:H4.J/`L%G;:F_JEPZ[&11K`=\$$0FHO[G"PR3+\&
+MB*`KA1C:@YP)PCQNYO%9@7D4S2A466FGH&4Z*(+:+W&%N<$G]_)F",D2((C%
+M8J"$8L.QTS?=F=3`EY51+8>::)ZE$&@QOO11BS&(QH1/YUN7`^M#7?WX9A83
+MN`-,,T+UM/-E>DSUY=0[B0O8*<ZC=%LE0*2-405US/>##;32"=)H?@_N::7%
+MR(&I?)`-RRJ;'>="11B`3#(1!"`HC%%445&%K9!]NXR*'P)-/+*)+HI3+>U*
+MDKUZ;PF[25)4+&"QM+TI58JBS2:>:V%8?IN@?II`E&\GH,>D5BMC8=_C:.#S
+M#JR5_BC5CO,QP!3\AG"IOHRJU"HEH58QVB?=LR-#S$-4LH%3EB)"697$,H:O
+MSGD4NRXF:!W[]$#"DQE42MC'"'>P81!@B$8D8>VT<UZN+,-&Z&"XE$1!:;NG
+M<4%=QZ9*B:P>3''/`T(OLD9U)F"7\TPOH90OI(\.PW8O!.BLXX`Q8A"4OQU%
+M53B"R4",%(*.7G*N6KDCB)HJU*.6SC"FJ:\._4-+L]G8*`DZ],AL0ZL35V%<
+M("2*?T'X,-\XC<\)-O>--'!/MBM.'J#%"Y[]79R/'-GI8?JV'6>0L8/?<58I
+M^*]>U-'JNG#2')H,')J:#G#-)8&+UH7<LGXV_CO/V'7S$S7,[I;9NXDG9/RS
+M(5\DJ1210%@H*:0HB4O'.8/AE+E'$;-)BA35JDT`H(FS0<"V5V7%,W'NUM#7
+M!=RK_Y+#T'?71.AV\7,:E4K+T[72C!6.YQ[=USOR?C>_==CBX(N2^D,A^Z<#
+MN860=E*]4S*ARF2^/'BS#8LAWX4.;2!8<[V65T8Q0F"+%""@HI(+%@LK(%B*
+M"V>^A=]7U.998Q51=9A7"Q42VVO$M^TLZOQ'L=S>7:(G/T=VQW2L4*E&+44H
+MQ46I:-54*[L"YY=M2DY0W?4F2.'J!YE);6LN"2=N4^^=%ZLI[*/47-MLQYPC
+MVW0?9#2/8=*U7-'LI2#Z]`$LAS(0MO`XB@EMBW$7*LT\P+B@+(@H,Y\YV55)
+M`#$#U2+?#LU%-H.1S21E5;%,L9AQZE#<U6CBS+H\2-I(*32.DA0A*J+;2-!4
+MFMQ<JD9YI:CQ1F.EYX)QC!2S.GORLQ@T[$5P(WSW&8?GBMK/:RM7-H7N_!,A
+M&(_Y$1`Z1[X+^<1ES<T22O::FQ-I\\A'NS9*DHQ>=G.S66Q,>43+Q]6458?S
+M_AU`['K3N#XTH()E+[P%\6$)&)C;45N069CF.VWF2^Y/L<L09R-'3V_LGD^V
+MZ&P]CCHQ;TO=6..XD6)/><'+]H42J--^T<+WK(+<[\68V&#8HA@G3_"O&MYC
+M\TP[SH8E#CU6'13`)%`IM#:.G:S32>W/TQ`_-6(DL9:FV=DP\_S/'Q6=X==B
+MA&\1!'1ZXF-B[QE*PCF:A^0C"W'I,C"EY?&`(DD^0E[2PF]$PS40BB0?<#[P
+M_25&J5>BS:=Q7^.S=!F`48]:PW\PD#N]@PS[O+`'BF!_Q_>S80/K.>L<NDE*
+M4\!((R+!23`Q7UVBS\XW0"3`G=B^V+M&)L<:%B0:2"N&GP0C%\*.$DV9S.HR
+M:+!/A^$59?</O1)^`S,I$S%[LWX'V;<?B6D*RG5'?-959"K]8KFWUI2\54$S
+M7AL]\9JASC-VQ#(BSD(A#/C;CW,[&HP\+1XNJ'*,^R<D007,K8'"=%#F`QX2
+M0]#,VMN+JEW<J+\NRIJHQW*9;+'5CJ>YIV6O!9B?2>FLS\[-0+`MO[KAHU(I
+M*X\"["_;'3PDJ7Y-%2R86"8IQ4=>7AGNS<7&6M??G]=EH$?DM<OR8/E70+@:
+M7N-$?\'CLX9K^"1C1=#)E\DM9J#7U[?3/?306#,!4#(5M93NQE<!B05:4(;S
+M@$T0ZGQL)'M=V\,>7ST"*EA$7B#4#.*4/R)0.!TPE!E`-$GL'$<3KO]`=PX;
+MPLT]IW\J>*]JWB.FI/+Z3.(+E$7$/!+S=XS2;?L8&Z.K30J;HN)K55@YQEAJ
+MAJ88V("(,;F1((P453CBF.RF]X:TTJT$-EJ.+6V[LIQHL51W:@LI;%!8JG#"
+MHZ9QA6$1`>%%1&5O%*I)IA59P*E8`LFZ;=[G;Q!?5]0>:T7D[NL6J2=2T6>=
+MV\^D0Z1"G/WW#AA:R//^7%9[;-'P,-$N_N5+>&Q;8H:]&36D`%1#7E[4A*8;
+M7RJ;M$>7XSW:%TP%R*0#&4YS@SZ)=R=M\7-GNJG->498T5""1=14@K&'B>-)
+M)7G-T_MZ,.P38"OT=)2?$5YD.7QFF(I[3`]5YN&[FWB$2F5"LD%P85E;40Q8
+M-781BZP#*E!DF6"6%L;',+9O4G5[=7K3(7<%_35':-F8+>4[V-@=[9/_DS9(
+MY7(WE2,\/9T3(!=@.D7(JB^HMDJB;K#9=?%"QU!0E@Q&K\'$V=#-7U._!;JX
+M_DXG<OLZ75L8LUWC#:#2Z)'>G)`)-1C@9-AN(T0"**#_LK@=3EC4G9+(&/*_
+M"V#]N(GV?H*D$D@E*+L/NR@K,6^5JWBQ(DX[.M(F[E'I\L[47=MJ%`>APHJ"
+MJ!IOUZGX=/I/7>KDO"9CGN:P]S1]&Z+V/@9)HUSTQ<!J)8FC:.LYXD)^Q32.
+MA'DXZZ=M=M3&$K\C3K[31>+P,,VYSHN,8!2.PP*M7!FLNF-UXT#9_HK%UJD:
+M&9F?(_*"JK!DV^&?@]-?1TLT/Z-DZ*G1C^9I_WL`D&GU'"*:0V/3=CP-]U+>
+MG"`T(45\*I#5KWEV85=HR*%6-JF,Q,#;&^QY'U&WGLXRQO*GSXA+U+CL8.&]
+M41S9XQ9_>C+[DS*<W>B6I$(<//@0)/L?2_B=1^P]33=+1B<OCJJU7(DEB%P[
+M_OL]SVJ1UE#505"80[4H5&JQDD=D?8M343MY'U*+R*>E&9?JK9@T-F('LO$4
+MOL>8QE&.CY$MQG?+Y&010@2S;T^HW&8C0T,('/;0'^4ZUG+,@&2C`U;0JM[\
+MPU#74+G[;UFSY?ZLM%.:4$8EI4%N7!7,ORM'I7>MS17ZL0W#95M'4.J895BN
+MBF3/3T-$JC*2[_>]/P9*6=.SFZ\OJJA%)JKEXP3$XXMBS!7FU<SA@PHBUGCZ
+M4WYY.6NW]>1F<S!<X>@=+5WJI*O*1RJT1OB3@T6A.("1BEF0_9=U),-U9>ZR
+M=IR(+//G4G\JPWW4"U!V<51E)/.H\UJR!G_8G`HZEK]KBUD[RMBK><WS!>0!
+M%!I:V!6^]=%J#:NNZ)W:PD9N-5.!MK>##J30?]=6-B-3_#SI,]OK3P^Z[S->
+MJKT9RPH_3M`5#RH2D3OI][250BZ4T+8<2>QJ9-"22Q`"(T.(L7.3`:I?B6<P
+M`Z*2Y^WKM6"D0=#U?$K=H8H0":\7S?$N>)X\C>$B*QGS/!1U)@O&1RM>28%^
+M7ZO*5#7]\M8KVK4@YK*-E.$(D&`NYWA<,4+#0,&Z)>B"D/B<S2S7%H]`.4%H
+M@B;O,*LOCJB)/QQAM6`:9`T*-M>$A8BB-1$HF6N/TES(L1!RT5!B5@F3IXQ'
+M8@L,.>5GK*"F)JM5*?EWKB2]7-W1H;#,X2=-*#N#%$FJES*C;7BP%S($,!F"
+M"+-)*[I(:AWBK2<^F8T\F!L=G3IE\\SQ3P9]4R!UB?*>L)/>0DB@=CKW5$[T
+MJ=Y?6.N0U*7B*QIK0FZ2FRGMU4D2W9^%SQG`FPHF:.6;"N0Y?PH8@V=?%79I
+M<J-6-PA4DRDCHKJW6O>9Y*OD][CQ2QG6EV7V4#0F9;'-<:E1!DRML-4JBKPU
+M$CJPJAJFG6J,5)C15%`=1NG"."@C1E1;:I+;!NKD%!!$QM2L),%*QA%TG#`;
+M1)^6BV[@D2#3<#J+R_0N2UG,MS,1$?6]%:BG"!;-!\SP@W@[[?6P.&J1-1_0
+M>FSQ;S.Z34]FBQ<)L;4M.I%_TM(4!5&,4D\'4'L]P4]52+%AQ.Z31F$1/_(L
+M=0M[0=Y(3[6_'\BP%6**1$%@C/5Z/1'VCMSUS6ARGRL;2M^JP)S5(HT0VT%!
+MQ*Z+,Z21B;$KH')"?W>JP/+,\@#4)0B440+!W$TF-+32*'L`YQ.!^-A0RS1'
+MC5=%E"H(EIF5F6E9MNJKK3BALA^T_B#C^6/H+=-T&&;+.:N!_A3_/8;5%65B
+M\E>U2KXZ!7\RI#3L#:]V\*+]/\V+>=:A+#%(S`0,`O-:"PR(@"P<5-%#?O_8
+MN/T7SG?BHL++5!#:;#=[,2,4E"%56Y))&.A8GJF<T3$5>$!0(0R%A<]=B*5'
+M:Q3QO+72PN],XVO#A5K$U>=G:HPTUS*]BSII=*A/Y"'`1DC^$@B1A$HJ,44<
+M+G(D\[52<H5[A-A-"+)!@('\2[VE+=U.`C50#';Z7FDE&+Z2*VV0J+BBAO/\
+M":JC0ZRJ@CIILR$%LM\4H/.^\-&PG9>G3J6=="<7;.!!=-;=/&'?H\6I@H)$
+MK\I8UXDB/7%:9=:P%@X_6]K?&?TIRD#\O8T;9^C\/@<X54%**A2V*`],P#XF
+ML>=!*XJH&7/N=>Q/2AEUDE?P/?]K`V1>J,K>J8)BL59;6(BJ8A;4_"+F4K+8
+MT+#63&K]7=86<@=W;JB^QE<&3;%AH3,LF,FHDU>>4-=;K,-C.?NKSD)V0K:$
+MJB8*]/MB["A3XK1#]#6+UM16+K-TX>67.)1BZUES.V)89EAD&(2*YCH7S**@
+M,=@<4K4/.#M:SKOQW_C^5(+UUM6Z>J^SI-'B]HIGDV?`@H/3&Y)K5P:`E48Q
+MHDK`'@1+0R8'%W:IX8;RX^0AA-025]SDATLO=,94E[]8$+"+?@;,\T#ADB10
+M614B+G$R85LA084?CI@S$.-S,MI/CLE=:*`8DJ4,$@('`$.TIP^(?KHM&AN4
+M9&4!>B9W4Q4L3?@<';7$^1F!G"S;4PK1G?T*9-(*-X32'#"<(`;XE%E+0H6F
+MV2C(H@K';555BBCHMK601;*"B:RY010L+85WE9EE(&C5DP,?L2V!FRM+"H@9
+M-FB:D=!:,*QK;!+2JHI\:DJ%I5$$2&].4A+`8S!D%-ZIE1:97NEIUWT=C1%K
+M%`@J8H=8#HT"F<YMJ%C"0M*0M#`1(EJ>HJM*<K,AQ)$X\KOJ\90!M"LE.)9`
+M@8DO\.TD].I-^PU@[$+55@O/HNA6"S5&E`WSE,L9WM7<+5*]&9S=!JVZF#%<
+M(8U!,,U6W#14\M.M:FGC5AA=69";U9AQ:D,8LE9)>L]]GU+TZ<<&%TSDF!%-
+M3UJKQMD704#;9OUI)>=)RVWOJ"$,QC":AF8Q)!MH4,K<I.KFM;RKFRX[A)T;
+MOT#F-V7%RY:.#W95R5S=47$VURW+CA643'!@7%Z)@\5*713!1R1<XPN[M0?V
+M$XWK7,S434U84AXY,.F\3NU@H8<2+3Z+-&J!3IOR>]TK.$X*RF&-Q'BVE'+6
+M"\-3U.F;-728\:,AF;89E9;BYAEN#3%\&FM88(U;1'*LQAE>F33(54`TXD%E
+M9,4J&N@;R.7W.X3OVN4J^_A[.8"][SOL9V%$MZA.X6O2E$6':/0P,PA+AA>Y
+MA=:Q&LG"!B9J^>C6(A2VVQU3,@KZ*&W0,=;RAB*+SJZFJFYK2>IKKDF8R<57
+MWQT1N[=6HID(2"B`&1`3H:#JX1@32O`%^-L#7$L9"H%:UI[;SR7=WXY\0]W2
+MCQ]\GX/RZ](5/?%V=@C!]@Y!5/L]M!CRC`&P%!IE>X4(#"?RH'GZEJ,>N4<5
+M-K_DQA4=-53MS2<0FZA?`1EDQOJ-%=>A`Y],<KN*<C'?QT5TI2(];!+G?T$K
+MG!03*0^W'Q8!UTZ"<U^BC^OU.YY2L<*'H8'CPW,VL3O=O0-O`Y:(</'-HWTS
+MJ!!$-^7Z72&A#7L0+@N8V_2]'L^W,%5@W9E&+(+*J`5A4DHJ.1/F9)?KNQ<D
+MW.<%L[?2>]MF)I1BE5$D)$A%&0A"2,&"*K(&H>GQR?Q0]0,VTWH&&X?3H6`D
+MU0IH9IDP9G!M68@?-9UBP-FJXU!2-+%;A`BP9--E&,VJ9!V;![EX[]>D:>YD
+M_9JP[2$,@=Z105C0!21KYY`K!!%D%@:>4.KJ=M45E.R>?Z_SY(%D!-T][0H,
+MT4#$Y:7$(A%,^'K(P/[=W*-8.33>_B1]3KVEN466MPA(_YO0Y::64$VBC6ZU
+MP-318U+@KN>E.B>#[B3&"G1B^UK,-%I,.W3W!WO1TG:4P\4-HLZVD!2*B'+[
+M$,PX//7*`T7"61!Q]C+5'$^7<L5*M8ET&^P)'X?2[_$U5_?S3LFV3N/Z,'GI
+MB]+<ND-.G\";.W2[8<6D38'3B):\3E[_Q$61?RW`F`P$GRKTDC0*.'L[/\NO
+MI6/CW%':'"N[]NTDLY^?&E$K]$+#S/OCX1@D;FMKGLGO<H10(RZ"GV:_+M)[
+M.G'C[?",4L9UN,7`K#R-Z^F[R.[.:UM.C*XN[1G`AI[/+MBPV4I\[BAVZ4WQ
+M94Q#JG<PQ.;3:'#,:SXNL\3GV_MJ=1Z@O^1]+H)[,NW/A&\6?>NR]U/>M!.Z
+ME0#C<-'J&J,#U#[9Y6,<,J\CJ8,O$W?$-YY<#+G#:<QNU6RX1V-N]7;LX$]U
+M1/-C0)YZ?&T_]E5V<,HZBN*!"5-$Y8%98?GV3T?WT"XOTQ(ND8M[P##A%Z*S
+MO8*LH]4^7'WSO4\(K.<[^''O%%'?A^*R>Z=/=[SVWGY*>#%/%>^EB=+/,++/
+M#Q_-_-_1>!V.XE*=O4>,3JGV7=,9IJ(J)2^8KASUZV;E+(T<:UH7K'>VZ\D2
+MVUJ9#"(F031IW/3&1>P\1H'=RLVQLT-5;!3*)2UB`>V6:("!.G3,Q-U43,DR
+M+`$>ERXUFP,19*!20+4(DD&$EDQM(]@0.!&)H0]MNV3$QZ,[OJMRJ58DX<!4
+MAO@3!G92->E"[C<8@/QO2@CPC,A?FGZTSOYO3.C28CW>'BSHZ3*900R&NW9F
+MRALS:X&C8IE'0:*.")F7?@@&3O%=/&I!O032[7O*"K#BB//RHX\$38'>1?4*
+M@=TA`@-K3;0!XB>L91L8B$M<T>E&9FL0JI3-EYSR#0102$P$DWP"GN<F-:<2
+M2Y(]8ROW7E*2.@]+Y%H;+5-.9?2E10_9N<2;Z1?)N\AYU+)@Q"7K&=*4A^;2
+MU&-*<-I\*DJ[VE80P83]S.Y@'X]:0A<R*'>Y)L:[RJ0;9EJ+[B7Z"5EZA3V^
+MD,!X^5G6ON&Z4B/W;W.I'(_0[=\OZQQHV)"*M=NT*O&9ZS<;#\9*ZX/]7@V/
+M\&U1#=*>-O^O2OX-I]ZV<-F0=H(W[?'+<>9NHP17OX-G?=DB$KRIFNR8Z&J.
+ME&GV%S-A14]+0"[DR7&>_OTFBM1P\Y$.LMO)^AH3J@Y!-"\$;AA`0Y<2X,.?
+MGZ!W:H=;-GOI![4*I=NU$:D$S2UP:9/O]D8XCB]W59(!BT49ML*5A1PUR=#F
+M;?K;^]X\NW,)\S1PF"ZM8GY_5@_?6320H]=0>\\]"%+B&V!AH..\0,_SE8&"
+M/["1%@:/N67G$Z[H,W]PA"5FA/1"&T<0VS(I&F:QPR`W00=1,Z1)!A$D1W16
+M1C:X8F-A<2IF9"&!%".8@+`_FS6F0#0&D0FLN]1/#Y"%""+#7$#0A&Y>$/98
+M4<!W;;::W@CSD.99)CE:S.]5^9W4!5F<`LUDS;H:]";,9V07YK<&&37\;ZA>
+M'[O[`$EP.I5RW='\]I54O%G<T%,G$(PA**\/AV25`[1*6O/F><,P'K?MPB[V
+M(4N!;IL=X,H01B&!&(A$CC[S&E#SH4\T*.W;O1K#2>IPU"GQF?"3J1+S]GKC
+MZZ2SZDL`6!#AHA>,,G1UCO/A$"AX<N_BL.C.6JS\Y`_8Q`],<ZP&2RXS+`B3
+MN)?F;"`3'PRAU1OCRR,B()^%O>-(V(1,.#,G7775#U904R8A9UC1YXIZ>7,-
+MA2I:VB+)Y@^9!]8A\E#N8C`BH$%)TL-,F((HGS^[NZ:[%T:UQJGM0/D=9S,E
+MC8Z@S^1"Z"IO+G)P20D^>>$:"?V]#3B%JP\+B:J0@B(]6C8]HS[%%CTG>7FU
+M5N[.U0^NA7O=<-%&1L^]CP:TTG>;*6XH+8:9+_10KDV_1TGU9``J,%<XH-MN
+MV=P0E<0XTJAK7>8Q17M^$',M*4(6D=TS\K`E&2P9M<17BS\OH9\'HQF6QWD=
+M7#,F-A\F*LWV1]M?`RPZGJOMR3N.PQJ[)G''@L892ZNL*:3C)K87;J"9;K]U
+M9H].CCAY.(B''RU'.8+W^5\<#AL!C&A4+<#"25E&"R00*H2K4B:COWT?9S>#
+MF!W,GT;`/U">]).X@\6BL9(/%JDI!1"0AQ7?-Z!4-`,+[7CDT.&DRR>KRY'E
+MNKSNF:LH,HA=V!EL%A57&`1@TH4I:8X1,;&D0LM$[F0D.]5(<(3L99W(10O+
+MTHI%/JD+J!F=*!P]6FQ@&.)#9ACU0T;BQ#65M-R$,Z`IQ$ZL=`2H'>DAY.#(
+M8PE!.YA8.J'K>-`%8*`(K)$>?"F#$ZMAU\))#T^K(2B1&!60J07ZCUGL(\.+
+M?:RAM/5G'\[Q=SL9NAB<A@8U#`R,RRL5]?0JD6"PRU2VEM*B%TW"55I8LL:T
+M25J7BFAFH:HIA:Q!SMD+%#*VU$=(89,IC\0\?4>$[>U!C4,\'7&Y%KA7-$D0
+M((*QL,R#6UH`,^MR>IUJ]C+MT6'3333A2MK?2F"8<6H,[<X8)MKZ3LU<"G,5
+M)R<TZ.CAU2'1ED.46XP.,H:RRCBD8<\]4WZ/`,.;W57O*Y(G)%6E.H1AGPJJ
+MW$*UV8'@6JC36^2"T$-SA$X"[`DL9DG`.2R%4=<*H03$*(CCTT^2ZXDG*BL%
+MA&(CYAT/0ZU+W]WIFH>IZ0&>[(>'0Z.DY\^QK2"BO\EA0Q_6YF"/)QXPT!IF
+M--(G3"O&CPWK:;FZ\-&"LTV&D^(AIGP[YSG"CE.69$%^&E<I12N60C)F>#HP
+M-^*?%`9@F(DP$8$<M_.!C<`!D:'9!9*0.Q.7)!DM.99E7I14M\(4NH\4?#-7
+MKKTIP^2+RQK<$K%MJ\V7!.XRJ[]H\\U[3/(XT8=*4.CC,[K.R.1XM&260)R)
+M`9W$3@3\XN#VROB"!BLN*,Z((8J/3+O_2_#'UJXF/(/D#LXSCU`5[H\OB=D*
+M'.W<S\Z<XT[KOH@C2>E0OX+=*M0)%(*L<W07-?_4;"\949WU9J%"X/[&59M[
+M.Q#ET7='<,MX3$*(6!G:,)"3[-S\2+AYNSU[>7+L+;H!Q5`T#F]:L"H0(BP9
+M_<ZPSN4.,IV4H*'E-\7<Z&`9!'&S8TKIH,O?91!+0KT^[TRTP"4^/O9L>2[*
+M4C(JK`)0T'0#%%9A^7`H%+1U,?2>/R<-&&E"SD)!E/IT:-`:+H(1ZY^9E6/Y
+MFJJ^X@J&7N^@6W5I`1S)N6[A+6YLK1B]3"JEPE"3\CPH7SG0WH4)*[7S.CJ`
+MX-1:8I,09X5^+1+,65;?]VE9U>XL2QC;^!ZB">)A#3Q38VM#D;]9Y'4FG:BV
+MC.U-2`\Y,OS?.Z)YL,GXEC=7!G7*SE<WC1C)ODH=8D@7(U+4_]V'L.89#V[H
+MJ0)_OXAE5'*?T6N]^C'P[A&TS(Z8H6M[+IDAGI9CZ8/+W='S&)=^+&\L'T)B
+MYQ?U6F5@[OV'HA:ULO8MII_:U@]:O0DK76>R5;<W3D;:"=]^/11AWR?;"WW&
+MSFD6'X.U1X;`068(V.-0I@^$\++[+]:+7.+2MN`ZK)"D`VS[MT/1>]J!ZIC5
+MA1L-]N/HIX%*E)7:EDJQ"FM@KHL4;PX8W%KPI"PAF`<I*IPK"D0TW?2U_U]I
+MSFSMW2&`8#C7+TDC`((-F\,ZSNNE^Y]H)[@'O'=P,9-`0=@([=;@8F03'*\E
+MQ`;3!#,F`)NSZ\CQ3VL!GU/5DG)#/$#64ZC<.T;8GMY111$\..?4PX=L.>G3
+MBID%)2T%W#0H@IOU9QX<\[5![#2%EV=NFD)(0H!LVVOR2O^E_X+1022.D`3)
+MEP&;$ILL7RB!NF=%[1#&V.GY]2"ZH?.FX/1-^,:&%%PE[%&`%1%*U1E50+)*
+ML8ARY<.)*AA;-I[]YZ<<B:YMS.V36FQ=M5Z!8B&='-H,,%=VA`B%%"`EIF9+
+MB_[!8*QM%#C4A#H0/LIG\!4^U07D[JJF5)QX<'@V(246X0P'RJI)G[Z]OIBU
+M+:X^0H/Q.ZMO3N:7?W6ZT)`]U!]<<\V?<)\"H0>V1XX[>J,"-E8[LD$2DE.0
+MQ]*A;49:/URREEL9!G=;?HDQ7LOCO=0QS,E5?Z:IWZ(O'$I9+IRLTCA>2+:0
+M=F2BGI>R(@D9[(N&4WLDFR/!D%6RQ=W+M!EBDJQ=VU&;S&ZO?N?OO5-]Z0W!
+MG3I79M=QNI/*C[S>Z_D]K@#RMCK\HXCR=(8X\,WEI1%YY5JD(22"*FGG9+S#
+M6K7Y?164U-F164..B.OF0+2VR:W#<\]K3E40)E#A118102R%1<H:Z=ZPI\=,
+M8\:8`FTME4DHCM@DR&%M:TQVMU@&$EP5\(8G(:J5ACX\D`&Q".@)`OU*4V+K
+M[+1.%R[5(V5H)W=%/&T8T>!-NLOKYH5*VT5(2S0TX]L1N$!7P'`%B"\,0&8`
+M'5;=936B<ZXTGATH2.:4:&_D[LE:<)9MX2FVO>UF.MZB46]H""W-F+2M+`B4
+M9F=M^'4"Z6L/*_X)UK4+MAE'.SM6(]'#\T8\E/8!S6QDH2KA2E?=#JF54B]V
+M5F7S^QPM+(8PS4PU^R"3`AVAU8'">N:>=4!#R@)`NJ5:S65^6"T1PY`*$H?9
+MFU1>_#06H<N;O*5WU\:8(W\+$%P=TJ7A94,&Z*DCPCC*;+:""R*$DH-VW+\F
+M=,M*3Z%L":,R`BZ6*AKIM+<(E1)1-\U:O",9D,C:=,MFU*D38H,-:H1G%M,P
+M]24>=YAG7]%=,:\\M57-?<Z.X05(A1ZK3VJJ^L+(:M2W7W/OM=)9>"2M=S;1
+M@EF?7M?Y")'R1M4#?J.8M9!IY\(ADD,"-NU*G<7P?QG<_79MI^><#S;JM`SJ
+MHCVO6A1%#M:'&%/989TT8G3K3)FY,,JLWS?W8*FM6TBQYGDU%1]/@-%W[[3A
+MZC;UG7NS;N?+M'6%ELNC"0(^L8KVI!!AJWSQ_)V<=`[M@0G5D]QFD(:B`L4]
+M3]PR7G$_:N?/MZ?&]D*=)ZXJQ/8/E\6'P%"U\<WV7`!(@<"(#']1A2L&!4WD
+MB:L(:00-.)OAT8Z+B%$;^]P<00>W/\',G4+N`:$C6/H1"CA$W56[<D,Q'NF"
+M[$O^52^>"/IB['XC7689TF+[-^8?]5ZL1?(G47JBE3+<1E-*+[-_DLH_&:.J
+M_V'@56#F.U2F896<B/U?GQ7AM8#U5$$)7A16<QE*L"N0A1D?M^;1<M&SGJ!:
+MCW4W\+(AU<1?+?2TP+Q&'1?LF>VU;0#V04VW2D"D#94W1C^2P+Q0_9LA?<H=
+M9-]#>(AH)":/I<H^+35^L5'$TGI3'8P/$\1]8F]]?*34_'?9IO43<XOKK&\G
+M>8-9O;I-!:9+3*]=R'6R2&O^YZD<>1:Q2*.H3-D?6>L5PH$&(DZ=H.[,\!P$
+M/-N(=.2ODO`GM41E'<'0;WY-9O@WF]J=FFKFI*^+A(,\-3K4(TR.SF;%QAH5
+MV$MC;/[JS!D6+JH]Q[VM37W]?NK/X%.TV5HSB2.(`#$:':-NAP`3%4)J5B6J
+MI&RC9E`6!XMV,@D03<>I0M8Y32N&DE8*'\\\`&1L8PU892D,@Z)97=`-&6`8
+M(%/_HU8MJ9N)?5,8DR"Y39HY<U.UG._%'``1@(X(0-B,6`-`Q5YH=;Y7\W+W
+M:[]!\_)EA[VGZX84?@]"X7D=#[/8_7?I!IAM/3<T7CLU.L`;O3J>V!94"0#7
+M](B"40'?.&Y&0B&ON6"W&'>?"CF]?K3>FO\S02SE,%DI'L`F!N[[AP"18"4C
+M6BV8;,_9X6#.245!L%-?N_*)!E60;"-("2YMW:EJJ)*D27)@*94M!Q(6J"+0
+M0I(D`F`DN1DUA#>9MKLU%Y[Y2)JQ896UTHS1(9P:)G\P_X<R2-O>1*+>+!K;
+M%3BC?]/OS5%$$4&(CY\4Y,Y[9GQ_+1T[^W+4JX0,R:F=$IFMIN]+.[?H<8(:
+MC'-!7&X1YC0N<U)3*]Y.]?HOWS7,:YC1AJQO1@P@Q/4/G$Q5V45IH4_<DZ2\
+MX+2:4%L,\(02Z,\QV0EQCXT^5B]>0/<N9#JXA^?=Y8B=Z5(/L;S:D8JAL2CT
+M9I#3J-:SPM!RV)+JAX%2'J:+2$NIH''IAG$\#R%%,AG(J''*TE_H68SN81#]
+M<=*,3W>%&,ZBV;HX(0IW@ZHTVW"F;`HI4)E&V/JJ'FDVIV9[/=`TB5*%H<]X
+M=J4"CD:A([0>>6L0AC3-,$5F4UZFV.VL\/,S55?6'XP@QQN[O;L\-.T:*-#9
+MD=*5F0<OK[^[I;K=@1-YG0-I&9/(=WR\%4O8V%N;PT*ZL489B(6IF:E+2J1$
+MOC@W<FA>Q&2$"##!@ZU(3D:;0QK(0F?`.^MY'R7^^/<C-`<@8.>H"MRE/=LA
+MXL=-9'Z6DF*<FLJ;R74J_6'F>:Q%LQ1%A*\,QR-K#2\.&#`&V4"[1=Y7^992
+M"""0(1"-@G;J*BHNB#!MC(R(RPJB&MK6F@(>W>R1"4=0%ZIX5`'&8P"-[/2B
+MNW[W'ZGB46%A(P%+T,0XPUNAI(+(TO9,8`*PQ;8*TQ-*AS)W["B,YLS`D\T@
+M2D@2(E*#V2HLG#VR@J,8L%'BE;UMRQBL2U3O9SS>Z"G`<-UUWJIZ9-]T3-G1
+MR:W>L""E;46%`JVN:O-JK\-J#WR)(%.Y""N%L@VI;)40"8DE$EWW*+`FH>*S
+M,E5BM%""A!+TT;'CCOV<2>SDNGO2%5"L[B'1ZO@DON7@=3D']>:#\@T64(S8
+M48X56#L:?`1?B.S):DQ0>?;M-\3X>+>>4F!G:%1:T0&C>7IA6)`+N&+JSQ86
+M%CMWZX6R&F%UAA_@:S0D?L1H`XOR56<ISU$38<DBBE+@/`2>PV0<YR;8G$G"
+M^ISK-D,S2[:Q=)7^:T=Y[?X6SH>W[0F>`#.ZRC&"(P=4BPYNLT`];+S3#+HM
+M,:W])..</F(?%DV,$3!M5-[<^7AUE_<8H0&#&@8CV'"<257JZOXNJFD@;]Q\
+MP&BBL:T]*?;2U5-6'Q;D_SYKP#!$D:B6@I$HR**7(F0SD*^K1F9LXI,M,;K,
+MY.I-BT[&ZX0I?3-EQX;%]YH:/AUJ32MTEROXJ:=#33W0]_9"JFV<'WC,;9_Q
+MKO:C11E^F,<\-MH_#>L&L;.2_Y4;Y".CD%NW[ON)_48<>&:5I("_EW52(0:1
+M1)_H)!H(HH)`76G&CF5LW$BDL>O!=]&D+!:17N$F:TFBR6'WTN']F4+%V%B]
+M",71U<UX@Y&"-1J,7RLMN6/63`RL%$Z-QARI2\S:'BXNF*_%3'%:S/9HSK>]
+MUY>,^UI]-.Q#J_9'K]P\D5]#1^"W":/)41?;/`-=>R>3`IN>6U^<P)K08[LA
+M-_3OM38"HW/"X9!L%I3OW"+2OM4Z^)Y2Q8C(7R3VVB'(/<!W\&Z7M*)/FUA2
+M#WL@Q6XM?=XLYLI,Z]#_0_B#\[[:?844Q_6&GDJ&LR(X*!#ZQ-*UI:U_A=U6
+M?`/_<=Q=5L/)<#.#*)S,HF'QR<%\#Q,#86\0%)7853P@V<4+/J*4ZG[[^LZ:
+M[%C-=)F*-UB+57"CR&5PH)?##>:*(S.EP58B>EH;:@C:(O-N<?"ECT2@O*?G
+MD._1>L2QC3MAGCSG<DXV85,S-3+:6"O#*,8;I9L@>-I4L9N>X.CHH/3"`_U_
+MLN,P9F-\O=E+HM&S46!>@?<?K\=;BJ/)?::E9V]XA>P>CPH-%R#&!S*8TT[G
+M::LD\RU1C[4'DM?XOMX1_9^GC-B(AI0H#TJ>A,?&?#Q/AU&HI1L?M.->N2;0
+M"[,$^)7'[@4XRB+T/7&FNT0VD1UWN/+5#^J1&LK;AD@XH5FCY3GT*?5?>7\Z
+M]>YY$<C2B"7P_GLDT)BB"*(J)K$9D<*Q>C/T'RK./J?5ST/0CO[!F>GIZ2QE
+M$I2Z^^0/`Z\\&I'I9/U22I5$8,2Z%_\V]6]3J*6IQFM.XO!R9(/$;CL[_=V(
+M!ESCYR!KEO)BF/4N/90N$2)R,H#$:@;L0((2P:4"P09&#,.GZ3PIL.4)S^XT
+M>7Y*<3JEZSQ]!.S1;T844$@Z934^?T*\,Y#&NUBB6;N.98;3$V\;M&;Z?QN5
+MA%UY1GI,4@'DO#&4SVP<H;$R`H5+(B(7^%G4Z<@<,ZD(:]JRB2$9YXS<Z7B?
+M5B;,&^"8Y95<VP+'UBGK]K=`D92$$XPV"#$ILC2R,B<0;V6:`1<64;38@9AH
+M?MZ1N4`O,*@ZW>F=7)>-$Q&(89H,#@;$`D5:$2E#(HVJJ431DS-4A-7-550,
+M%G;NJM\T7,D'"W!"D8A#5E0/!V16I(U8+.9N&$$:$R@+;D,5E0FB"19%0L2B
+M6!?#3%%@VS,30ET/&4Q;2Z\G!XM3A^`.1D.K[FP>OV&+Z;X&G??_A;ME?.E)
+MO.G!,$_%`-'<R%^3U'U8:Q%P!/.Z2E6O/]7EOJ3\6"?]'*:)1(81K9M]OO+O
+MD],I:!#<X<5T6D,1">\B?7V=CM+HUWOS=C^OA)XF)XI>G"$^#OIX%!1FFO3\
+M^R#YX)A,)A,)`$GUM?SY8C]BR<(5:8=-H57N?']'C9@T5-\0\K!J]S9^I9)(
+MR'\DA0`XC7<+Q8I3M###9B-^&,8&FUW(&H+&UW.Z\3FSRMUMY,$N[SE]P@>'
+MM;6U.U*')>7V%1W!QB!D');WNZ^[!/R*)F(:4!_A&?QHHB&>I1$1+`$\$\K-
+M:+H>(M38RCQ7`VE3M<:&KM`&RY^B-WKMQ5;Q[H&""S7P2[@2;9Y8,/[ZV?Q%
+MJ.1BQ^U]R3EI2,BD-VZ^^SS^=8>Z\PC`J2"D(H*$4!8L!9(LFDDJ`H5@+4%!
+M1M%(?X>OY_61OT(XR>$DDLTW^TK4N=Y#ZLN/].TT^MKNA"+*[Y>7:[:>8/^-
+M)T819#S0GT3+"(`8A!9`46DAL20V@2YE<3]J^_?P:QLN:;B!S-:S3Z79OQPR
+M/"T2@*,`IFH<O&K:8QM^.U^=\:DN[T<)29].-%F8D1UX!*?1^]TE+!`XK[:A
+M2?%]?/S[H&RQXL2"#,_896"L?E_5O])]64_MC]0112"'[RA;<&ZW?;E`^5S`
+M(:KW"RPFJN+^T$4-@ZH/KP``J@B,4`\S=71#$Y*AA\7(58A!D65T0(PQ<.X'
+M.PZ;HFB[G^7S'P3"<7FKO08UW<:S82\&GA"T6!C]!"\5P(S0DG]#NL;M^[FO
+MM99F.2']\7&BKRW(E1%@P7F^]Z25#8PXUP_8V?H?T-Y.KZK@>B!I%6"#,4^Y
+MI@5-KX&$<&F^-W=V"(K"!:VDJ08YQZK@EGQ-A;[C%FW]SME?;124**R*(22'
+M?2P3!55"9V0PRRZK?%^K^#7E7YF74<D!H_3))KLZ[^;=-F59$I#Q&.)8G4(D
+M54>CB&1V]N9S.5S7US.]0[85ZL=D=6EJ+O(_HF#'.;"J-BL+-MGPP=2*I5?9
+MRSVF5FARC(89)Y[51=6&TVPZZL\,&1-533*N%OI'][Y>O6_`QX`?KG.(XLG:
+M]'Z]/1LW3&D4'IH0PSV5^0BS#5-,[WM$WX0(^TY9;'=LVUY)6VL+:_YCM1YT
+MEL[).(>M2$X5E;HFKO>&E(-E9)IN6?.=]"+/DKN>M[!7Q&&S&%):]0E""^B7
+MERBK,R[,7*MH**S:TC`=:Z/)%;;NUA"_;@;+8WO5;IMLXP2;O4)GZF&7:39!
+M:K;OV\-RM=9-J?FID@G!B:4'_L/2@6H?JE/@Z]R^-%#.]6:>^V,IV<7K'5-+
+M1)-/!_N3MM/^A];T!/]I!\?S>E/A/HOXWZ^7`=VX0-UCT_%BA(HU8\51FKV\
+MLQYSUP`/5\Q!2FPQ0"C":D]-W_BZ[H\OU>PKKT9HO/".*J$16`H!(Y<44#IH
+M-`R\<RA"D`S,"0K`%B&(8E1&6FB0C(J"81EI:2ED%R@"RH%RQ=5$QTM*@Q-$
+MC8:E`SRI66A($"`1$BD0(`045(I.!B@LHH"K((E:,48HQ1$M`:<2!)P!P0D@
+MR2<3#,@$AD`'"`@R``<7@Y`,`Y90),(A!204(BQ3#'"2&"I$2"@`@K!$`R0`
+MJ&,D1C(-L0F.1`"&=MX5:+YQQ],.W#'N;8N)DZGOQ!<"0`<Z\,`<-"@Z-542
+M4JKA`B@(A*%"`:`J\"TUNZK413K<&V7+!`$A:1"@<J!J,J`B:(:@!T0?KIPK
+MO'N#68J&6%1V+K)BB8W>8)FZ(N9JY2S$T(.J5CLHL*)%)I*A1"I!-6%-9AI#
+M0AA2KGD3I"2)Q)W>@TA<6.@)/"J1`1N*8F<I<H!>`[L,8+`;NB-%(0U@G`-S
+M$:#`1>9JYZ9[GY;4A(2--,P(4@(JB00@"L&#$%@R2140$5(1!D1&""V3H22.
+M@`Z7U5DDQIL8--CL'RB@%>OLS4-]%02$L'&*DJ0+V/1$P;!!2P52V(B2^C"$
+M6*((C!&(P162*([#4"60U`$)KMVZ20-R!)ULE)J9H;`54$5@C(P1`62(HB+!
+MB(UHE:D5C!61140A9!A6R0+"L64L**#*$^#X6>U$D@10@?!))$:Z#(PX<$[,
+MWV`<-#INCQXWV!4^A:DZI8&+KO7OL>G@V*V(J]/#5=Z!R2(\7RX<^-2F.^6.
+M\8\]D7[%&?<];[5J;R-G@'+?2+$-;V*WK+ITXTP=_+SL%OOMC$<UK@[^-I_"
+MM==\&O1#OXK.-];6B*[AJR\+[VR<6NOX.ANOLJF*I;3W[@2\8W]]`CB)FQ$7
+M=5QJ%45J;?X5^0GMU'KWD*<FNU>NWXW_?=;?1EUQ)WEL'QW6\]3:-[1U5$Y'
+M;5FG#N[O-07\5O+[_%P.SS\AI'(+(*'TPWQ[\G;+D4[6H(@A\"`VQOBVC@(X
+MB7%BJ436M$58=(.NQP$O-YWSLH#I$4-+%*XUY2@VQ`605H32B5448P@,C^:2
+M0DE&$#"#"Q$1&(**))((!!)K9<_977T>D.KL+5MD822+&,&#V3Y.XYLT\WVC
+M:DX9:GR8A:AF&T0/T#1A!$($(`Z(!2(&@/L[HV;P8*,_(#4S%@?3'2(`0T*G
+M"1J:E-'@`IEHI#&NGZ/=5:LX@-/Z+34\]>;X3:?1O+G)'G>73E&FG8GV;R44
+MT[.+35;XC)K:^@H,"M8W3B[#:`J3V'NKN[L$M6>W/6*^O%&ETP.A*LA/J8)"
+M/'%LJ>"3X5!+SGS5(^MY^WT_0G=`":_70(H-$.^L#GL$993L4M5J9;LG5JE>
+M7=[*F"FL+`LD(JQ4<LH.\4N%5IPNXBV\^<R'($G+4DO694A2`T@HD+3L-D%X
+M2@HZ7$EJ'SU_&=]1((Q3A_G;?'`8:O[@UN-PY%C10V"'@MIKW,:NM$(H$0*@
+M1/?W6C"L05+7%N4>76D2O8MFQBJH38@?EFGYMT%K(*JP;N=TH%W;O7>W7Q`3
+MHG/%GLT4,4J5/)@'*`9SZNF*:D)1(#MI_VMP.FD;\7X=_3Y*.9SL=P?A1VY?
+MNK=T@]V\O'T/#O?L0J$`D`>@V]#HOL6.W`9KP,F:50^20QR`6&4`N*"#6B4_
+M1T%1RS6-/2F,#G>):V/19K?,?:@9:UK-$PW3IIFTP@C'?.F\S%-[.A)TUR\5
+M3CFVFKLR:T@=#(9&R65!)B)H[$T(9*=%051,`O&'L\J@^9=%T^L#"DR=LL2E
+M69Q`W6W2@HQ&J@!BSI<@-E'&<SX'.RM$_2=7&Z4W5$3D+OC&J5<4XH:$Z&+L
+M`'KYSP-[\U*BV*;$,[H*"CAA0:6B/8[2KT1&WT'65DR,M>-_6ER)G:TFJ6K-
+M=LUT17`6W6MEOM>K4H][UO14M4G+NJ!Z'P@%S8FAN0^.BWO>K4\W1QZM^E9"
+MJ;<,.AIH^NF#.\Q4\1;2-I@1'*IW'3CDQO*I>][;R.,#WQ!,85Y20KH=LRH`
+M'8TX!H+3:+,BZV\8[M$GO902%#'&,,4*%DHCIU7JS1>8Y;)@-MV:31Q;ML:4
+MD$%UN-O!Q</2!!I@*;K3+59:\Z\+*<BW)W!D';&Q"M5=XU!LE+5F$M"#8$:G
+M`J+,8.Z7AA)X`I^15<KP*/2@A1L^I&B22(1=NI=1"7*F"*$#664M9:/#.I>8
+MEN2I%C4%]WHVY0D82FD>?"U-T#$PB%AZ%JI%_J+#[*,DBT]=%<U4S%<,%7,.
+M:?$N_DZ.CWEOAF96UI%)8LJ3@3"M11#&>]E@H8R%5DC!/'OS6L]'ENY[WUY?
+M:&WGPYP\N=(LS9WI//RY#WN58+*=IZMTM5<^&XVBU*01)J:5;3"(46%&-*,B
+M9E*&;4JC2'#FLSH9.._?;?:F'%K*^K0F>=ZL&=4!48'.U2VF7P\-:+`#FS"2
+M2)-,(B79&7)L&5G7'.]^9<P^$Y/0^8A4J4;%>XHST.==%A&+4Q.P(%$6N0@2
+MYWPQ5BA22JZ!81@.4E3F,N\<W:E=MFV#\`0E#0&MH46Q!(>$LW/)HH[&&3(8
+M/CVN:U=RMT=Y/;)U\CH(P[^W7D377J-WG!FD#LP\DTZRE-CX.*1YYN,UF-S-
+MM'33PNDTE8+I%.N/H;SN@)*(`Z2Z1,J<"*H"34RE``8L"-N*@57+$ZTF2J(8
+M@DM20C)4\NR((S;P;;XXT@-EH^#3RV/0=_59:7!1.E1!O3NG4UP;$P@MZT@\
+M\+L<6J%Z&NFJP^^,$!2&0R8OLCWQB1TJJ@SLE>F1V`GM&]85XH*@-YG4_@,N
+MV5':_JJQZU#Y+$CU!A!?LFKUM1A$[,9OSQ<7I$`QK4-(&:T8WUVL-/A^%JY%
+M,T-`-"VD8@#4#&V%O7.V:4#[[)D`-)#/"7+F.6^AQ\>UYO`QC=/6#411`',]
+MM)Q'(B^KU-R]-J$,J"40><(G9[LRVJ>;-%$JDP:``LRG#[M)-)*RF8021)JT
+M2CSRRFM4[)+T0V1%KE,4\V=7:*046+O>!9??Z8=YN<>-)=%*D66%COU?/AK"
+M+6M<O5`D4"$[T1.B[RPM$,23:!`V"+M='KRV6,L*WVBLEV6FS*N7&<\'0@H`
+M",DIBZ,+A*M/&SA4(0-95-48R]2P(%:I1BZ+0MB0RI0L=])<K+I4L#<.'1:0
+M+O;S5NZ$YZC'4;<;UJ2AIZCGT!T(+!RKJEE>A)F_XWXX_/5ZR$YY7G'FEN:C
+MP:*)&D?J.%N#VE>?+,P)#NE52-JY=9AKM/1>MC.5V*U2B#,WB8"(36=F1T*1
+M!6!^0O4WF(X0;B?A"ALI`8#NWIZQ*;=5;8\<*S2!&^D.\0\+@0&#@JY*0H<=
+M[=KY[HP.]?IJ5S#.](TIE2`>N7:UHFTT9<,-U'5423:11`HS2!!2!JN4RR*.
+MJ"82&"*)1D2I2,'FJU7H?$0O8VQ5,QA4/#$=T#=(KDK*[Q<2T&;[[X(T:*;3
+MH8G,9E"^(@\ICM*X(@`XSXNKWE4H,;)7`]4YOG`MC;`Q`2Y"]+8A.*9^`\_J
+MDQPE>+$>>NE:HADHC4R0@T17P$W`Z*%4GS=5B.O%=9`NC("=O5WQS;H-Z\0@
+M#VKNU-CG;W4S=Z;LFRPBH+IMT2Y#T:UZZCS)1@=FZIMRSD;F^LIR;X`)V-#7
+M]!9`\5II+77='8\FU(@)BM58AYF-E>:[6MBTT$3AF'3&E9=**+:!2[7-4'9!
+MBJ6Y:M=14*!DZ,PNB;0*MVG/1%F<_1?X=!"KT@(;&-C8R*;C06@XI?96Z&]%
+M*Z"C+I%L7*[PA7QA>-%GAA?K"`32T+91.R"#0Q!S.VS[-\6V*Q[<(%VVZLA&
+MJPN=MPMC7:U46KBI'3)`F+/]WTU?P\T!-\8V9:S..Z,NWE5]P0T8"C!I1!09
+M57ZI4'D.LN,12FQWPE;GJ;5KXVSD;>)\^>-MSK`/OG//6TR""-;+45NS5"HZ
+MRA@L1]%#5N^._@UPA6+)5"#"*5)!!I%54^^'H`>Z<#?/35OGEV::Y0#\5$FR
+M;V[EBF0ET3H1Q+,R*;<GMNMG60F<BUY:@0YLK]8BR9NH@,;`M684RLLRRMK0
+ML`@&^DK/?+8BJ,:)9V4,5%<$KIFAI#*0L72L&Y@U&T35M;7BP.:J,LI&"P35
+MZRXM*25;2(]W5:UVQ#7N:)?4+;>*:NB[3CYW3#+9^QY#VNV9F.CQB->W4'<'
+MG9`Q:;!'9*IAG/#89I98,E51]L)@M@V$JZCKO1!?CJ5`O*@)9--8VD;5"4)4
+MG*0ZJY=<1UO:;#/W97.M<,+8E8=+5F'>Z!25#'6Y<$:&[HE:9WTJ!2B%`;LU
+M6@GA9S9:DS1,LF>PC4.2\IGA!LV=TK6\:X06I;;56%1C%"L]BS./GL*#GZ*!
+MH-!0C-B-[.*J(2`$#;[\7%WD[B3@X@0(@BZ8L*-/-46)JKH,\\FD/I<30M1+
+M606@TH'1`:4))H$BKQ7'WM-IQJ;B]W'A0$UB.$:=A/%W"ETM`=@M<WE#0NJB
+MR/=/5&/77#,NPS0)5*:K7I7I%!(<!#2ZD+9U)9-6;,`\:XR.2$)^ZFH9F666
+MN:3GSQ6@K[%91K6M+7NL#S;1M\:V2%\P(%;3NG=W23)/5DK9%610:VL^<KSI
+M=3X=[6&HWLU;%/Q]+Q[.IL_V)^<GS>OX5?'S7J*_/$0MO9Z=4?T];^KU?`Z]
+M4GL?Q/,]LL\'GGE0];>NQL[$!J[W"_/GY*V],D>%>3H(U1%U(ZKFO4.OU_G;
+M^_-?-;)!`-0ULW@7%:RRU'Q>_4"X)O]OC]#_R*#[$!!P<JNQ"5X,U($0<C7&
+MA-`;1/&,:>$D/I20YKLL#B<Q8Q$C",$03D#G*##)"'A]U]`/NV"A1*R5!5%D
+M4`*#6,K8EI6I%K`1D6"U!96,M60*R$`24*2I`62%@`A"+&(C)"`4@D@)H,W9
+ME?D;S!'15?Z<@'-O\#%<@A<WDYLQC',$TDJ_F_D]]0N:0UC&::$6#!AS)W$H
+M,.L@?9/S?L,#F8343#&P'##IAF%T7$<W<<*0T[T6&A,M(LRU2H>`0Z0A$(GE
+MQ..[WO?@BITG/H/]1`WW>0^"9%%P+0XB"1C?A$1Z9#",V1(7%0OS$7$&@+)-
+MHC'..^Z,B184:(>9!STU0%K!&('4@!L"GJZDAEED';A0&3H=(9RW@UH7N8?,
+MRV#03EO3SJ$^.^`^`IYJHI2S(4U)2>9)$O,(?EF1(E%6$\\\/F,/A?"MMTV'
+MT4N!OOZOI5##>`AIQE&W?P\PG1?$VZ:K$Z12[\Y1D=KWM/5'C!I:@M-Y?/U[
+M8&XN$%?J%\5ZLU3K6;P_5YSL94XG\?27$/DYM*""^$7`51)#U;FP\Q>Y:U2L
+MVP_W#N:*-)YHMM!>LIF<Y=>+(IG9L*)M./9*VFTO7=L94.]:B8M5%L3!.5N2
+MWCT]K5U5<[JYUIEVJ)'"!,SMS=\;Z:-0.)V2J2]994B04RH*S/-LG&(C`6AV
+M:^)"Z'7=HNF>-*PUPNWU3K6EJ<[5=VP/5"CI>S&5TS>,I$^HR)KNLXZJV2_2
+MO3?',/G90J'#\POH@9G:\7#4@Z1%;";6=5<($0X>RTVL/57RO$2GAL+SC[M5
+MO2=)5=L)8Q^'7'X=;_G[H+RM_SN7\[=O7H/;*56_?,W8KA&>#YE_&(D6D=?-
+MK(\V<_H`/<B"U+_8@>L]O='LFU9G-5QF[>]J3=^(C-IM)O[Y_T:OF(,SM^J]
+MZ6V+1R?ULT%>;#1@/F(9]+JS"K/2D[#*.W7BU"#DK,EN^IA@5=G'1KT\>:7&
+MBO8BPWQ/Y3R0QMGXI;YYI\A%3*;60]+D_?!8#.CC]ZFJF\U*BS^\/QV5ZZ7Z
+M#?16/OT^3C6#`<C"A]DP]&V61K4"323P0UF5R$2"L,@]'=*4H&L1PJ"0)+^!
+MYJL8N@6`#W27+^#2@VS(6@^N]5/TDTG+%;+<P#7-!I@AUI!/Y.@F&<@F@&S&
+MP2OBG90M=*YRZ00]MUX(RZ6&LC![RH^TR$`[[+07O4I9@%(&2HZ5<;[NOA%!
+MK9+6>P89S3FL3\^2B;\4H!$;#A2@CHM[A,'8[M`*S58H200"?$2MPAJGI49)
+MP+Z*.EE&4H`E`!4WW<A0,'0Y5!@N4-C2^2WB)/0V]L(1B3E,YP%8HC$[VK8O
+M.\W&Y+4US0"(@31O-+-N%JST^<G-1:OS:I05I04G;&DC(<EG;BX=91N4M021
+M2BJ75B"((6L#+O@B13[-_L*_2Q(J-I<[#LF8P%K4[,&*[N6LHYX2"8@MPZ8B
+M[#JSU?/$U([$2;F>FX%!I%4"B8Q0091=)%]>+XSOLU(Q1OA-2'<U02R%-"`B
+M!:!A#D/%DU693H5(4(^*"]S%4<2/A^R$@DDTH"7;T:JP7*6(@*`H"J$M)VU=
+M,W&UR@K>X<QYJ#1;<.!7(,FBQ%J58-A6(&XJ)TFD'N9PQ>-%#T*7OZR&V2(@
+M=YBQTDA2A2G.#KA:C)H`;H/M#:WFW[Y[<TRFS!F4H\COU:?`M6"VY$'B@3RR
+MHY$/6E$,,]`;@F`P`[,Q,F#`2B6#:6$8EST:T*-2A5]S\L@5E6]`^YSH1F#.
+MKU)!<H,F9D3Q<F6Q/(Q/#8<8B^?#$T/1LK`J'F[\;HYYP,8<I4=V3?;G.C=<
+M9!5#$J<%:8S&YF8S-U93-[=&*NJ&V8BFT-(8,.ML'-7G)"(JF7%&)*("N$FH
+M)LI8%ZWM+1C%;)%O;Y^O<-O>Y[^I,XZ;,(3HO%T@YRC#KUQ@1U\O*O7"09[&
+MDMV?10NVEM'3[4K'5PQ`S\:"V-M>A0X&B,[5\FU,;FIQQ-&H(2E!11:_:JZ:
+MB.!:L.!3@VAE2]4CFZ]!U%N>E6Q,L+5:@Y\BE.J-JPJ8I0F**+JT`20,Q-=>
+MMU/6SB'J;ZD*3IDL`A4L*`@RE[J%;HY8<E*QG,J*D))"@"3&BK$Q%B#HHD&(
+M`(W4X]H:8SQO"!V._@A*\-F7.BMD5:P$-!04HVSM;A.]:N;A*X2_A+&:4Q7^
+M/O773OI_'..])PO729%TH*$@4)&X)7%X5@'.[1([6,9ZW5J4%?.V9JY\Q\;"
+M0=\+?T(X9.5_(Z#Z\;SKG;KPNJTS%1CK/3+KT_;+M$G*[;)ZVAOA`=37`.R]
+MUWX&3)AET>)$`8%!@BE=*EC@F):Z9-[0FFO<:QQ2!?;0&QF#Q-QDZ66K,*EL
+M4X11EE;GVGY+R4TE1>H:PA_N*E8<UJJ&I0-^H^)>C^]%RKCWQO\0EOEJYGCH
+M++:;IOTF2KB=POSK`,`H@[@=<<C:;/D7KCSU5CD)LE*2HH&))!`W[$6O[;K%
+MJ'<;'=XM'EA%""J+&/0>L9$Y&*CH&2I#Q1,KY+;5*CQ[+\<9&PR*X1"-T1P3
+MEN_JB5'+M=QAUL`+W..:7*BS>EL"E,H@R(I"REDS9W;HH":'MMQ5(I;N1CA<
+ML+5HQS#O>:0-!P3)<RZ($68D&71@@4D8<R1K5*Z'"X2XYY3C&6@DL\CP(:&:
+M`X&F-.J(B'.*JZH3H$AK2J4\96)NG<L-K99`R4C[B4POE47\0"=S.V%8;3<%
+MB8*9"4>Z!2"!*('2RTJ0IH"=I10:%R*("!:U2(WOS/8R)ZEWLE5#QZD7VX"W
+MQ>.T<O%Z!>?3I\53:U;XP9B):=X570XO-=WS+DA;>9@YV==;KNS0V%SAY$.&
+M;97K!<W>K?"D5;2U?CMF^R2!9.40,=GZ#L*]%6'TCRX8-3EGBIO5JJ$+34R%
+MS4LK%L35(FI:XRP1D&-)9D+U?X]+=^U>%;968:,^^J,+3VWHS5$F>*L-V0@2
+MK$=SR7L$=H45="`H<H4%0!Z?3:K@`);5WLEDXPRBR63O(HX[S2)*ABE*FSHL
+MO021)"$@F@)"8#2E3)7I"WX?,DO";6N=9MH7O(9)91L4S"]Y45`%R*.+H`+Z
+M?4YF:C1$&[D1+,IU796H[:2,\H(=>"**I#29VVN02A.D$%T74M-4B2(<$$#"
+ME3+BFGF0Z!EX/'A;<UX?:V\>4<MJ]6,&W=K8/T%[18GODSI\+.J]_$?0'TQ9
+M<Y+#_BV?$7W0_:7A=OX+,US25YZQ<NV2"NS,S8CWUJ$,Z0+D60S=A45=R<G$
+M)'JDYT3\QU.C/U/8HQA$3::<@V8Q$@(]3/#9^]C]%)6NS?-0%_77-`#K,RYJ
+MXP"4@?<$)$\]#;;A@Q525Q9(A\F&_KSJTL2V:R!AE#I930:LQTFT4Q,0TDAL
+M=:L4FF;VZR!65Q=63ZP1@DDM#Z0#>=!`;A>R(AD+/`LGEEEWXZ,,]"\1CW[4
+M><,@5KT-L7=X%-'&Q%D"V"P`;*9P("("%3LW2,4*,HJ4YKZNLC1R8$1]'H[+
+MOF+N6!6THB?"B2BNR6U*NYTCCOZGQ6XNG?$+1T%6RT2UY_.&S`SLNNEN/9A[
+MY0'YF=\;G#6;B[6$#S/JMF2S-;.$0CZUTSB>TUU*XBBX1B(:P^I6#:<=:WDM
+M*L&O=VP5>)7QSA36O%\Y#1OB`W+MWKC'!X/`N]D=510<%-'1ZB-1-[O]OG,Q
+M:^E0V#WQBVS5KX+MUWM35J2G24]U`GK4Z+%$*=B[YG_I?PRJAQ'!Y@B;GX7%
+M;LJ9)_X)M&!K()K(H:#S3U7G];#'OZ:O^CR6HGSZ7CU0CWA`/06*Z8$S&H[D
+MLFKY%_EL[,%^@-R@8>1ZH8-T<_+$KOM7OX52,NA\N@U@&8@`2!DP#OSF*5&\
+M$/C[#MNG_A\[=L78?L_\]2&KX#%\SSL"EN<*EY1MC^TN$#!DFXYC,L##-Q2$
+M@00DA!`.$8E=[9WCLCMSK/V3YE]Q>[ZREV^RB)D;,\;F]/Y6]ZRG^`H<R(6_
+M:WV3A]=4'P?"</['X<V7+>C2SM?D=%_%])D*!?1`M_+NA\X_+@'D;T+>O/6T
+M^Z9[_W1_PVEI,D,#"5O>P^'XF:I7M/7=`83?>]QP-3RJ+@Z#]WOJQ3I^VS-K
+M5%H0D/)`BTRENBU#P?KU\C7WL..J$ZJGH*A&Z`J;+>5.UHH&D4D8&622P8`L
+M"`,@)(!!X^UP^[[/2\T-M[58O-BZ?]U[=DB*'"YWIT)O49>+FA`1D!R222RX
+M@7\N77FVIV/"5"#=.^X48.JC#A=/&%@O24G:'8P/6&.8#[XS!VT0?YLDT691
+M9Y)RYQN2@&3%#@H(-9*P&)%!$J0*DJ`L"H$&*D8*0@I2(B<G>>0Z@W'VM-O.
+M=,QX^K[NO@7U-G#7PAW(YVVIGKL1)P^\&\F9[MQ_M=^_9^*_<<3R<DLC0I\5
+MVD6DB[NL[E;OW7:WKT5/6IT>,\RO"9YJU,[RBI(_7E7XD2$>ADC-^Z17<?IV
+MIMC?UV:XQGO/LUIY;ON:MA/WD>UM=E4UWY=21X/0UD)""\0Z%%/S"4RA41(/
+MS_VMQ404%/RO_UA].PB)!A'7(P3V]'\K\;G`2<1^YPZ!7WLO66V7#6*:A(JJ
+M:DC>;$L"93&MB.=A&$B<VZ_ZV3R:'/4-$2IT,Z@O(0%SIGHS><2@3HBHQ'-A
+MYWXJ<2:=T)*`/Y'%<6FZWF'#ZY^O4K\Q]/D+UIN\A[7(\E])S<\\:`H;AM^\
+M%N!O7'6M>!]5,&GPW5+"A_W;))]X,)]X@L4D4D%""@%0*RJ1"I`*D`J"@5(+
+M%B,*,D*0"0`D5:*$3LC\=V%LAJ]E*_6VOR3;:BEJ72C\"2@R;^-B!=FLX&63
+M`ZLM6CE31ZV]_;H->V7,RKKJ*U0&PTP,\\C8M>')[>W&4/,306L,)'L0/=OV
+M=-%#M?NW%VNS^I*4LFIG0^TJ=WON.<KP_.\9[3=J8Y;PG,+%PDFQ73CN@<=,
+M.ZP9198-@TL1M*U*B+0EJ5C!I+"L1E4L;:HVRU+1"M@L@HC0JPMA046*Q6*B
+ML!%C!L09!6M:BUE!J%H-06MLM5L"Q0JHM%**@-8@++&VU8V5M8VT2B6-JC1M
+M65+$;+*A5)9"HB"(C%5BBL4!2((BBJ(H@H,$$58@Q%1$BQ@H"*`HHA04&(Q%
+M&(P55$8L8R)(L@RV(K!1E$I6`VMC:P1+1(C0K(D*MBE"E&%%24*#2U*4:@B*
+M"Q1$"E240I4$2M8H4!0$BL4!K1$1$6VTI:#%6`M@5"L`HV6U9:LHD+4LM&M5
+M*RP46"-(>H_@#\@,<GMG10/:XQ;.'BHO_T4?*6Q\#FO(Q+;4O[G!FMWCC`XF
+MO@T!O?I0ET$0#%\@DYS7CS\P]WMNZ`1N5XSP#94^<0O@]VU_M?4>L8J*3VK!
+M446A;&V5M&HT%1@(HRJ((6B6K1*UK6RQDHVV):,2E:_D?DOX_X__7Y<=C^;.
+M.QGL/U1]W_/Q3])['QO9*"YR8?'''<<9V'5@&+RN.`,Z<8LA1`J(R5E10BR0
+MD6!"5`;_(_YP?^1^[$5S2\IYF7-?E.4GUGVX_]"AW"=D2/QZZ%1\ER*@CZ3O
+M6UG7QY[+NE,M-.SKW%)(YBP]F6*5=-M8=O+$M)2VC'Y?W'NCJN@L'VU+_V@J
+M4+Y)LO1_`>Z+OC\7UD>Q)/I>K_%5C%9]'0W=T>=.)%XJ`2#Q<0&2$$9`&161
+M82I`M*18!619!%96!`=,PD,D`-T1L*4^QX@N<)H;\_+>WW0;8G]&@:4Y#R+X
+M(2[_RM2EML0[SM[XP$8"!FX&6_//Q_X8I];YO,G.HFHZ4G]5\ALW(#H.9`4<
+MKX)\8G@2T>.\UK:C8$;X#A\R:3![4`9$2?6MPD1UD7T*"-<5!*-*B@JT@O:B
+M%]%44MX>'=:"N;BE`[3I?HTY7V7.?6XSA6'K"_/%PLKS]LSS8!VV%G-[SV];
+M[QO1^`;CRSF<KR>G#A0[?[L4-\(9W6XL?3Y!I>S=02`!,9Q_-L+O>['-5X1U
+M_1VSE,YU56VO"NLZ5O6[,#;]E\7>/\L(X/C1QQ*7O8=A"+KL-+^3^,#J(RV"
+M9']V?7^OWG]_U),8GXTX&=^._)'R-GS+S3^][UCS:E7]/VTNUCLSOC/:&^/"
+M,"UW7VCK'4NWSQGNT43>KL/H<+UOZU#S]E+?\6FYKW:ER/4URR*1.X(`XY(1
+M?HE9)&E(LA"L"H"P`K`K"5*0"15I!2I?![G@2IMPT1INOWW?6BPZ9I?I5P^A
+M\,VC#!,^3_I1.7AS\"\(]5TKUAF%4#3X<.P>K]-=O5NQRE-/6RWS7^<=8M'!
+MB[2FRH4M3UZ-3O>NV$Q2Q<UPG`;@ON7W#REC/('4(C)4K"L1HP6"PK`%4BQ0
+M%D%@*`L!BJ,D4$%0"I!8LB@H+(L%1BA%!2I0MD@-EEM%E2"R451DK(H6E)60
+ME15@H*"K%(C"(R*+)$&1&25B@"Q06`LK"L%BLB2L6%I0$8V6%$BDL2+&DXQ@
+M,2I3XKBN<N9].]]QUV2]/^5*\XZ[2T%_[.]?[^%_6;:SG0\WND-WE9U=N;3U
+M1F&*?,<42EQN+?+-D))C+H'$`Z8'0Z5K(I!8*06J_.3C^A,Y.?]8^D.2$AU0
+M`$2?,>CO&\DGZ$C,TBB?Q/E9J+#:.CR<DG@%488JH406100P3QKH8T5,.`D@
+M#2`E(BDE9%4(`H`5@:GQ3H?C?I?P[ZO'(`5Q6120#FJ44,G;:DZ"^P$\)`AM
+MNNY<W>#AHMC\+3/N>K^R5N_CW=?>-_M>?BL-BH4=Q_PX5!'5KGJSE1L6DT($
+MQA1JM;O/GZ`Z;^:CYE,C_3[^?\I/9[J;/G?'V>RBS\->6B,KN8\$ND:0DD-^
+M],VR&9A)B1K^1G;Q4^T=>R9[W'P#4:OCI_P?;X?11/D'$8]#5I/M#&\H60+P
+M&(#2P%#$D$#24,9A)F/DR-[)R'X]#ODAASL,%@(QZOYG6^'+"$-E"X1C]SX6
+MVAOZV"VU%6CD_Y+<<G8Z7HY-`N15(_G\WAMVCNS_,AP_-YHA^:;R+9ZBZVOJ
+MLY^JGP>PH<,*[+@3I*9WZN)\X?A7.P\_S-F8!-?XU$[+/]%[OMZOW[:^XS2&
+M/_N;0^1F)GVW3)?_9,CJ?,A%],5ZI6ZKRX;`KQ^R4V*K,(;Z,@O$EOCU#?,X
+M(O7&I3N+30.D@<WP?WU`O=7]+R*>RM96[&_-)0)/\49"=6$!810*A/^FW$`K
+F"+`&FNP%5J%=[MCO,A9%D0D'L8&%51TCE#9?_B[DBG"A(9GC:TH*
+`
+end
diff --git a/contrib/bzip2/sample1.ref.gz.uu b/contrib/bzip2/sample1.ref.gz.uu
new file mode 100644
index 0000000..49ab65e
--- /dev/null
+++ b/contrib/bzip2/sample1.ref.gz.uu
@@ -0,0 +1,848 @@
+begin 644 sample1.ref.gz
+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
++?_\_)"$UH(B!`0#-
+`
+end
diff --git a/contrib/bzip2/sample2.bz2.uu b/contrib/bzip2/sample2.bz2.uu
new file mode 100644
index 0000000..ca65c3e
--- /dev/null
+++ b/contrib/bzip2/sample2.bz2.uu
@@ -0,0 +1,1642 @@
+begin 644 sample2.bz2
+M0EIH,C%!629367PQR6$!@_U_____________________________________
+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
+6"B*@22E%*JXT83_Q=R13A0D'@N8^0&T9
+`
+end
diff --git a/contrib/bzip2/sample2.ref.gz.uu b/contrib/bzip2/sample2.ref.gz.uu
new file mode 100644
index 0000000..10291f93
--- /dev/null
+++ b/contrib/bzip2/sample2.ref.gz.uu
@@ -0,0 +1,1933 @@
+begin 644 sample2.ref.gz
+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
+&'!]T/0,`
+`
+end
diff --git a/contrib/bzip2/sample3.bz2.uu b/contrib/bzip2/sample3.bz2.uu
new file mode 100644
index 0000000..3ea32a0
--- /dev/null
+++ b/contrib/bzip2/sample3.bz2.uu
@@ -0,0 +1,9 @@
+begin 644 sample3.bz2
+M0EIH,S%!62936;K-,\D`.K;?@``00&4P```@!``_[][@,`#:VT-3`IDGZIFF
+MHT](;4T&@H]-0R`!HT`BD%'I--&)H&C32IEOWIG15$$195,\[7SNV^DXEM\G
+M0\ZRK;7W3[@]P7B>KPBU87N[XI5>!/TRY1JZE9UN&;!6ZH,60K?O=56)J;1@
+MAMLR":K)YTDE0*\.``1`$""QGH`*"(N^C.#]!@VC7I&-,2#+KPCP^J.FQY.Z
+MF8"5*83K]+=A;.A$:#-(KY':7&T/24RT:&EIR)5"L%+S'``4$1985NZ$GE_%
+*W)%.%"0NLTSR0.A$
+`
+end
diff --git a/contrib/bzip2/sample3.ref.gz.uu b/contrib/bzip2/sample3.ref.gz.uu
new file mode 100644
index 0000000..e087f83
--- /dev/null
+++ b/contrib/bzip2/sample3.ref.gz.uu
@@ -0,0 +1,11 @@
+begin 644 sample3.ref.gz
+M'XL("$_07C<"`W-A;7!L93,N<F5F`.W/08[;,`P%T+U/P>4$"`)T;M%]+Z!F
+MZ-B(8P>2@S:W'R7HNB=XBP=1$#\E_9KF%N.\9/0U_YXSO^;ULCSC]U9[<8KX
+M.<9S>_2>]>M5U);+.-0LK[Z8]V/<ERPMX^/'(?9R[8/V&.MVBUO&/I7]G3Z7
+M-5H9<WD.ET>V%G]>)_N44;/ML8WO^OV.5I[M&*7?]O%YB)9YC7O=QAZ:M[4L
+MPY3+_30,]];?UD,UHW3K%N.COO9]0#V7ML_G/OM6ZK7%O/;.?__LT<=E`@``
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+C``````````````````````````````#@/[X!M4V7,;35`0``
+`
+end
diff --git a/contrib/bzip2/spewG.c b/contrib/bzip2/spewG.c
new file mode 100644
index 0000000..7934e76
--- /dev/null
+++ b/contrib/bzip2/spewG.c
@@ -0,0 +1,39 @@
+
+/* spew out a thoroughly gigantic file designed so that bzip2
+ can compress it reasonably rapidly. This is to help test
+ support for large files (> 2GB) in a reasonable amount of time.
+ I suggest you use the undocumented --exponential option to
+ bzip2 when compressing the resulting file; this saves a bit of
+ time. Note: *don't* bother with --exponential when compressing
+ Real Files; it'll just waste a lot of CPU time :-)
+ (but is otherwise harmless).
+*/
+
+#define _FILE_OFFSET_BITS 64
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* The number of megabytes of junk to spew out (roughly) */
+#define MEGABYTES 5000
+
+#define N_BUF 1000000
+char buf[N_BUF];
+
+int main ( int argc, char** argv )
+{
+ int ii, kk, p;
+ srandom(1);
+ setbuffer ( stdout, buf, N_BUF );
+ for (kk = 0; kk < MEGABYTES * 515; kk+=3) {
+ p = 25+random()%50;
+ for (ii = 0; ii < p; ii++)
+ printf ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
+ for (ii = 0; ii < p-1; ii++)
+ printf ( "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" );
+ for (ii = 0; ii < p+1; ii++)
+ printf ( "ccccccccccccccccccccccccccccccccccccc" );
+ }
+ fflush(stdout);
+ return 0;
+}
diff --git a/contrib/bzip2/unzcrash.c b/contrib/bzip2/unzcrash.c
new file mode 100644
index 0000000..f0f17fc
--- /dev/null
+++ b/contrib/bzip2/unzcrash.c
@@ -0,0 +1,126 @@
+
+/* A test program written to test robustness to decompression of
+ corrupted data. Usage is
+ unzcrash filename
+ and the program will read the specified file, compress it (in memory),
+ and then repeatedly decompress it, each time with a different bit of
+ the compressed data inverted, so as to test all possible one-bit errors.
+ 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
+ incredibly slow. A file of size eg 5KB will cause it to run for
+ many hours.
+*/
+
+#include <stdio.h>
+#include <assert.h>
+#include "bzlib.h"
+
+#define M_BLOCK 1000000
+
+typedef unsigned char uchar;
+
+#define M_BLOCK_OUT (M_BLOCK + 1000000)
+uchar inbuf[M_BLOCK];
+uchar outbuf[M_BLOCK_OUT];
+uchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)];
+
+int nIn, nOut, nZ;
+
+static char *bzerrorstrings[] = {
+ "OK"
+ ,"SEQUENCE_ERROR"
+ ,"PARAM_ERROR"
+ ,"MEM_ERROR"
+ ,"DATA_ERROR"
+ ,"DATA_ERROR_MAGIC"
+ ,"IO_ERROR"
+ ,"UNEXPECTED_EOF"
+ ,"OUTBUFF_FULL"
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+ ,"???" /* for future */
+};
+
+void flip_bit ( int bit )
+{
+ int byteno = bit / 8;
+ int bitno = bit % 8;
+ uchar mask = 1 << bitno;
+ //fprintf ( stderr, "(byte %d bit %d mask %d)",
+ // byteno, bitno, (int)mask );
+ zbuf[byteno] ^= mask;
+}
+
+int main ( int argc, char** argv )
+{
+ FILE* f;
+ int r;
+ int bit;
+ int i;
+
+ if (argc != 2) {
+ fprintf ( stderr, "usage: unzcrash filename\n" );
+ return 1;
+ }
+
+ f = fopen ( argv[1], "r" );
+ if (!f) {
+ fprintf ( stderr, "unzcrash: can't open %s\n", argv[1] );
+ return 1;
+ }
+
+ nIn = fread ( inbuf, 1, M_BLOCK, f );
+ fprintf ( stderr, "%d bytes read\n", nIn );
+
+ nZ = M_BLOCK;
+ r = BZ2_bzBuffToBuffCompress (
+ zbuf, &nZ, inbuf, nIn, 9, 0, 30 );
+
+ assert (r == BZ_OK);
+ fprintf ( stderr, "%d after compression\n", nZ );
+
+ for (bit = 0; bit < nZ*8; bit++) {
+ fprintf ( stderr, "bit %d ", bit );
+ flip_bit ( bit );
+ nOut = M_BLOCK_OUT;
+ r = BZ2_bzBuffToBuffDecompress (
+ outbuf, &nOut, zbuf, nZ, 0, 0 );
+ fprintf ( stderr, " %d %s ", r, bzerrorstrings[-r] );
+
+ if (r != BZ_OK) {
+ fprintf ( stderr, "\n" );
+ } else {
+ if (nOut != nIn) {
+ fprintf(stderr, "nIn/nOut mismatch %d %d\n", nIn, nOut );
+ return 1;
+ } else {
+ for (i = 0; i < nOut; i++)
+ if (inbuf[i] != outbuf[i]) {
+ fprintf(stderr, "mismatch at %d\n", i );
+ return 1;
+ }
+ if (i == nOut) fprintf(stderr, "really ok!\n" );
+ }
+ }
+
+ flip_bit ( bit );
+ }
+
+#if 0
+ assert (nOut == nIn);
+ for (i = 0; i < nOut; i++) {
+ if (inbuf[i] != outbuf[i]) {
+ fprintf ( stderr, "difference at %d !\n", i );
+ return 1;
+ }
+ }
+#endif
+
+ fprintf ( stderr, "all ok\n" );
+ return 0;
+}
diff --git a/contrib/bzip2/words0 b/contrib/bzip2/words0
new file mode 100644
index 0000000..164a8ed
--- /dev/null
+++ b/contrib/bzip2/words0
@@ -0,0 +1,5 @@
+
+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/contrib/bzip2/words1 b/contrib/bzip2/words1
new file mode 100644
index 0000000..2e83de9
--- /dev/null
+++ b/contrib/bzip2/words1
@@ -0,0 +1,4 @@
+
+Doing 6 tests (3 compress, 3 uncompress) ...
+If there's a problem, things might stop at this point.
+
diff --git a/contrib/bzip2/words2 b/contrib/bzip2/words2
new file mode 100644
index 0000000..203ee39
--- /dev/null
+++ b/contrib/bzip2/words2
@@ -0,0 +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).
+
diff --git a/contrib/bzip2/words3 b/contrib/bzip2/words3
new file mode 100644
index 0000000..8486a84
--- /dev/null
+++ b/contrib/bzip2/words3
@@ -0,0 +1,23 @@
+
+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
+ 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) and HTML form
+(manual_toc.html).
+
+You can also do "bzip2 --help" to see some helpful information.
+"bzip2 -L" displays the software license.
+
OpenPOWER on IntegriCloud