]> cygwin.com Git - cygwin-apps/setup.git/commitdiff
2002-04-29 Robert Collins <rbtcollins@hotmail.com>
authorRobert Collins <rbtcollins@hotmail.com>
Mon, 29 Apr 2002 10:51:57 +0000 (10:51 +0000)
committerRobert Collins <rbtcollins@hotmail.com>
Mon, 29 Apr 2002 10:51:57 +0000 (10:51 +0000)
        Update library sources to upstream version 1.0.2.
        * Makefile.am: New local file.
        * bzdiff: New upstream file.
        * bzdiff.1: New upstream file.
        * bzgrep: New upstream file.
        * bzgrep.1: New upstream file.
        * bzmore: New upstream file.
        * bzmore.1: New upstream file.
        * manual.html: New upstream file.
        * manual.pdf: New upstream file.
        * manual_abt.html: New upstream file.
        * manual_ovr.html: New upstream file.
        * mk251.c: New upstream file.
        * CHANGES: Updated from upstream.
        * LICENCE: Ditto.
        * Makefile: Ditto.
        * Makefile-libbz2_so: Ditto.
        * Makefile.in: Regenerated.
        * README: Updated from upstream.
        * README.COMPILATION.PROBLEMS: Ditto.
        * blocksort.o: Ditto.
        * bzip2.1: Ditto.
        * bzip2.1.preformatted: Ditto.
        * bzip2.c: Ditto.
        * bzip2.txt: Ditto.
        * bzip2recover.c: Ditto.
        * bzlib.c: Ditto.
        * bzlib.h: Ditto.
        * bzlib_private.h: Ditto.
        * compress.c: Ditto.
        * configure: Regenerate.
        * configure.in: Add Automake support and remove unneeded macros.
        * crctable.c: Updated from upstream.
        * decompress.c: Ditto.
        * dlltest.c: Ditto.
        * huffman.c: Ditto.
        * makefile.msc: Ditto.
        * manual.ps: Ditto.
        * manual.texi: Ditto.
        * manual_1.html: Ditto.
        * manual_2.html: Ditto.
        * manual_3.html: Ditto.
        * manual_4.html: Ditto.
        * manual_toc.html: Ditto.
        * randtable.c: Ditto.
        * words3: Ditto.

46 files changed:
bz2lib/CHANGES
bz2lib/ChangeLog
bz2lib/LICENSE
bz2lib/Makefile
bz2lib/Makefile-libbz2_so
bz2lib/Makefile.am [new file with mode: 0644]
bz2lib/Makefile.in
bz2lib/README
bz2lib/README.COMPILATION.PROBLEMS
bz2lib/blocksort.c
bz2lib/bzdiff [new file with mode: 0644]
bz2lib/bzdiff.1 [new file with mode: 0644]
bz2lib/bzgrep [new file with mode: 0644]
bz2lib/bzgrep.1 [new file with mode: 0644]
bz2lib/bzip2.1
bz2lib/bzip2.1.preformatted
bz2lib/bzip2.c
bz2lib/bzip2.txt
bz2lib/bzip2recover.c
bz2lib/bzlib.c
bz2lib/bzlib.h
bz2lib/bzlib_private.h
bz2lib/bzmore [new file with mode: 0644]
bz2lib/bzmore.1 [new file with mode: 0644]
bz2lib/compress.c
bz2lib/configure
bz2lib/configure.in
bz2lib/crctable.c
bz2lib/decompress.c
bz2lib/dlltest.c
bz2lib/huffman.c
bz2lib/makefile.msc
bz2lib/manual.html [new file with mode: 0644]
bz2lib/manual.pdf [new file with mode: 0644]
bz2lib/manual.ps
bz2lib/manual.texi
bz2lib/manual_1.html
bz2lib/manual_2.html
bz2lib/manual_3.html
bz2lib/manual_4.html
bz2lib/manual_abt.html [new file with mode: 0644]
bz2lib/manual_ovr.html [new file with mode: 0644]
bz2lib/manual_toc.html
bz2lib/mk251.c [new file with mode: 0644]
bz2lib/randtable.c
bz2lib/words3

index ecaf4170ef889c5cf59b41c59f9264d691b9061d..d984395436691945db75883f37b17ef98d28e93d 100644 (file)
@@ -134,7 +134,7 @@ Several minor bugfixes and enhancements:
 
 * 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,
+  with version numbers less than 1.0 are in some way, experimental,
   pre-release versions.
 
 * Create an initial Makefile-libbz2_so to build a shared library.
@@ -165,3 +165,89 @@ 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.
+
+
+1.0.2
+~~~~~
+A bug fix release, addressing various minor issues which have appeared
+in the 18 or so months since 1.0.1 was released.  Most of the fixes
+are to do with file-handling or documentation bugs.  To the best of my
+knowledge, there have been no data-loss-causing bugs reported in the
+compression/decompression engine of 1.0.0 or 1.0.1.
+
+Note that this release does not improve the rather crude build system
+for Unix platforms.  The general plan here is to autoconfiscate/
+libtoolise 1.0.2 soon after release, and release the result as 1.1.0
+or perhaps 1.2.0.  That, however, is still just a plan at this point.
+
+Here are the changes in 1.0.2.  Bug-reporters and/or patch-senders in
+parentheses.
+
+* Fix an infinite segfault loop in 1.0.1 when a directory is
+  encountered in -f (force) mode.
+     (Trond Eivind Glomsrod, Nicholas Nethercote, Volker Schmidt)
+
+* Avoid double fclose() of output file on certain I/O error paths.
+     (Solar Designer)
+
+* Don't fail with internal error 1007 when fed a long stream (> 48MB)
+  of byte 251.  Also print useful message suggesting that 1007s may be
+  caused by bad memory.
+     (noticed by Juan Pedro Vallejo, fixed by me)
+
+* Fix uninitialised variable silly bug in demo prog dlltest.c.
+     (Jorj Bauer)
+
+* Remove 512-MB limitation on recovered file size for bzip2recover
+  on selected platforms which support 64-bit ints.  At the moment
+  all GCC supported platforms, and Win32.
+     (me, Alson van der Meulen)
+
+* Hard-code header byte values, to give correct operation on platforms
+  using EBCDIC as their native character set (IBM's OS/390).
+     (Leland Lucius)
+
+* Copy file access times correctly.
+     (Marty Leisner)
+
+* Add distclean and check targets to Makefile.
+     (Michael Carmack)
+
+* Parameterise use of ar and ranlib in Makefile.  Also add $(LDFLAGS).
+     (Rich Ireland, Bo Thorsen)
+
+* Pass -p (create parent dirs as needed) to mkdir during make install.
+     (Jeremy Fusco)
+
+* Dereference symlinks when copying file permissions in -f mode.
+     (Volker Schmidt)
+
+* Majorly simplify implementation of uInt64_qrm10.
+     (Bo Lindbergh)
+
+* Check the input file still exists before deleting the output one,
+  when aborting in cleanUpAndFail().
+     (Joerg Prante, Robert Linden, Matthias Krings)
+
+Also a bunch of patches courtesy of Philippe Troin, the Debian maintainer
+of bzip2:
+
+* Wrapper scripts (with manpages): bzdiff, bzgrep, bzmore.
+
+* Spelling changes and minor enhancements in bzip2.1.
+
+* Avoid race condition between creating the output file and setting its
+  interim permissions safely, by using fopen_output_safely().
+  No changes to bzip2recover since there is no issue with file
+  permissions there.
+
+* do not print senseless report with -v when compressing an empty
+  file.
+
+* bzcat -f works on non-bzip2 files.
+
+* do not try to escape shell meta-characters on unix (the shell takes
+  care of these).
+
+* added --fast and --best aliases for -1 -9 for gzip compatibility.
+
index c703a6e76fee8015276c80e2bef1c699bf3aed06..666bf6a1b98da43e6cb07c67da40bf5a8611aa7e 100644 (file)
@@ -1,3 +1,52 @@
+2002-04-29  Robert Collins <rbtcollins@hotmail.com>
+
+       Update library sources to upstream version 1.0.2.
+       * Makefile.am: New local file.
+       * bzdiff: New upstream file.
+       * bzdiff.1: New upstream file.
+       * bzgrep: New upstream file.
+       * bzgrep.1: New upstream file.
+       * bzmore: New upstream file.
+       * bzmore.1: New upstream file.
+       * manual.html: New upstream file.
+       * manual.pdf: New upstream file.
+       * manual_abt.html: New upstream file.
+       * manual_ovr.html: New upstream file.
+       * mk251.c: New upstream file.
+       * CHANGES: Updated from upstream.
+       * LICENCE: Ditto.
+       * Makefile: Ditto.
+       * Makefile-libbz2_so: Ditto.
+       * Makefile.in: Regenerated.
+       * README: Updated from upstream.
+       * README.COMPILATION.PROBLEMS: Ditto.
+       * blocksort.o: Ditto.
+       * bzip2.1: Ditto.
+       * bzip2.1.preformatted: Ditto.
+       * bzip2.c: Ditto.
+       * bzip2.txt: Ditto.
+       * bzip2recover.c: Ditto.
+       * bzlib.c: Ditto.
+       * bzlib.h: Ditto.
+       * bzlib_private.h: Ditto.
+       * compress.c: Ditto.
+       * configure: Regenerate.
+       * configure.in: Add Automake support and remove unneeded macros.
+       * crctable.c: Updated from upstream.
+       * decompress.c: Ditto.
+       * dlltest.c: Ditto.
+       * huffman.c: Ditto.
+       * makefile.msc: Ditto.
+       * manual.ps: Ditto.
+       * manual.texi: Ditto.
+       * manual_1.html: Ditto.
+       * manual_2.html: Ditto.
+       * manual_3.html: Ditto.
+       * manual_4.html: Ditto.
+       * manual_toc.html: Ditto.
+       * randtable.c: Ditto.
+       * words3: Ditto.
+
 Wed Apr 18 23:54:53 2001  Christopher Faylor <cgf@cygnus.com>
 
        * Makefile.in: Add -U_WIN32 to CFLAGS compile line to avoid
index 88fa6d88a4865fee7e88a8749c93812962882483..9d4fa4379089f1275c8ae3d7fc235a6463095441 100644 (file)
@@ -1,6 +1,6 @@
 
 This program, "bzip2" and associated library "libbzip2", are
-copyright (C) 1996-2000 Julian R Seward.  All rights reserved.
+copyright (C) 1996-2002 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
@@ -35,5 +35,5 @@ 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
+bzip2/libbzip2 version 1.0.2 of 30 December 2001
 
index ab17f497957525afe10b259b01c16d155daa78da..8305235fe24c30ce638efc984094ff3263f53a6d 100644 (file)
@@ -1,9 +1,20 @@
 
 SHELL=/bin/sh
+
+# To assist in cross-compiling
 CC=gcc
+AR=ar
+RANLIB=ranlib
+LDFLAGS=
+
+# Suitably paranoid flags to avoid bugs in gcc-2.7
 BIGFILES=-D_FILE_OFFSET_BITS=64
 CFLAGS=-Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce $(BIGFILES)
 
+# Where you want it installed when you do 'make install'
+PREFIX=/usr
+
+
 OBJS= blocksort.o  \
       huffman.o    \
       crctable.o   \
@@ -15,20 +26,21 @@ OBJS= blocksort.o  \
 all: libbz2.a bzip2 bzip2recover test
 
 bzip2: libbz2.a bzip2.o
-       $(CC) $(CFLAGS) -o bzip2 bzip2.o -L. -lbz2
+       $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2
 
 bzip2recover: bzip2recover.o
-       $(CC) $(CFLAGS) -o bzip2recover bzip2recover.o
+       $(CC) $(CFLAGS) $(LDFLAGS) -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 ; \
+       $(AR) cq libbz2.a $(OBJS)
+       @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \
+               -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \
+               echo $(RANLIB) libbz2.a ; \
+               $(RANLIB) libbz2.a ; \
        fi
 
+check: test
 test: bzip2
        @cat words1
        ./bzip2 -1  < sample1.ref > sample1.rb2
@@ -45,14 +57,12 @@ test: bzip2
        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
+       if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
+       if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi
+       if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi
+       if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi
+       if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi
        cp -f bzip2 $(PREFIX)/bin/bzip2
        cp -f bzip2 $(PREFIX)/bin/bunzip2
        cp -f bzip2 $(PREFIX)/bin/bzcat
@@ -67,7 +77,26 @@ install: bzip2 bzip2recover
        chmod a+r $(PREFIX)/include/bzlib.h
        cp -f libbz2.a $(PREFIX)/lib
        chmod a+r $(PREFIX)/lib/libbz2.a
+       cp -f bzgrep $(PREFIX)/bin/bzgrep
+       ln $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep
+       ln $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep
+       chmod a+x $(PREFIX)/bin/bzgrep
+       cp -f bzmore $(PREFIX)/bin/bzmore
+       ln $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless
+       chmod a+x $(PREFIX)/bin/bzmore
+       cp -f bzdiff $(PREFIX)/bin/bzdiff
+       ln $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp
+       chmod a+x $(PREFIX)/bin/bzdiff
+       cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1
+       chmod a+r $(PREFIX)/man/man1/bzgrep.1
+       chmod a+r $(PREFIX)/man/man1/bzmore.1
+       chmod a+r $(PREFIX)/man/man1/bzdiff.1
+       echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1
+       echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1
+       echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1
+       echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1
 
+distclean: clean
 clean: 
        rm -f *.o libbz2.a bzip2 bzip2recover \
        sample1.rb2 sample2.rb2 sample3.rb2 \
@@ -93,7 +122,7 @@ bzip2.o: bzip2.c
 bzip2recover.o: bzip2recover.c
        $(CC) $(CFLAGS) -c bzip2recover.c
 
-DISTNAME=bzip2-1.0.1
+DISTNAME=bzip2-1.0.2
 tarfile:
        rm -f $(DISTNAME)
        ln -sf . $(DISTNAME)
@@ -112,6 +141,7 @@ tarfile:
           $(DISTNAME)/Makefile \
           $(DISTNAME)/manual.texi \
           $(DISTNAME)/manual.ps \
+          $(DISTNAME)/manual.pdf \
           $(DISTNAME)/LICENSE \
           $(DISTNAME)/bzip2.1 \
           $(DISTNAME)/bzip2.1.preformatted \
@@ -138,4 +168,25 @@ tarfile:
           $(DISTNAME)/Y2K_INFO \
           $(DISTNAME)/unzcrash.c \
           $(DISTNAME)/spewG.c \
+          $(DISTNAME)/mk251.c \
+          $(DISTNAME)/bzdiff \
+          $(DISTNAME)/bzdiff.1 \
+          $(DISTNAME)/bzmore \
+          $(DISTNAME)/bzmore.1 \
+          $(DISTNAME)/bzgrep \
+          $(DISTNAME)/bzgrep.1 \
           $(DISTNAME)/Makefile-libbz2_so
+       gzip -v $(DISTNAME).tar
+
+# For rebuilding the manual from sources on my RedHat 7.2 box
+manual: manual.ps manual.pdf manual.html
+
+manual.ps: manual.texi
+       tex manual.texi
+       dvips -o manual.ps manual.dvi
+
+manual.pdf: manual.ps
+       ps2pdf manual.ps
+
+manual.html: manual.texi
+       texi2html -split_chapter manual.texi
index a347c50e9b28cfa83e4a33a26bd379b4b734d54c..4986fe2ad8a7a282c88f9aafecd2a369f73f9a96 100644 (file)
@@ -1,8 +1,9 @@
 
 # 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 
+# libbz2.so.1.0.2, with soname libbz2.so.1.0,
+# at least on x86-Linux (RedHat 7.2), 
+# with gcc-2.96 20000731 (Red Hat Linux 7.1 2.96-98).  
+# Please see the README file for some 
 # important info about building the library like this.
 
 SHELL=/bin/sh
@@ -19,13 +20,13 @@ OBJS= blocksort.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
+       $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.2 $(OBJS)
+       $(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.2
        rm -f libbz2.so.1.0
-       ln -s libbz2.so.1.0.1 libbz2.so.1.0
+       ln -s libbz2.so.1.0.2 libbz2.so.1.0
 
 clean: 
-       rm -f $(OBJS) bzip2.o libbz2.so.1.0.1 libbz2.so.1.0 bzip2-shared
+       rm -f $(OBJS) bzip2.o libbz2.so.1.0.2 libbz2.so.1.0 bzip2-shared
 
 blocksort.o: blocksort.c
        $(CC) $(CFLAGS) -c blocksort.c
diff --git a/bz2lib/Makefile.am b/bz2lib/Makefile.am
new file mode 100644 (file)
index 0000000..fd104f7
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright (c) 2000, Red Hat, Inc.
+#
+#     This program is free software; you can redistribute it and/or modify
+#     it under the terms of the GNU General Public License as published by
+#     the Free Software Foundation; either version 2 of the License, or
+#     (at your option) any later version.
+#
+#     A copy of the GNU General Public License can be found at
+#     http://www.gnu.org/
+#
+# Written by Christopher Faylor <cgf@redhat.com>
+# and Robert Collins <rbtcollins@hotmail.com>
+#
+# Makefile for Cygwin installer
+
+AM_CFLAGS      = -mwindows -U_WIN32
+AM_CXXFLAGS    = -fno-exceptions -fno-rtti -mwindows -U_WIN32
+
+noinst_LIBRARIES = libbz2.a
+
+libbz2_a_SOURCES = \
+       blocksort.c \
+       bzlib.c \
+       compress.c \
+       crctable.c \
+       decompress.c \
+       huffman.c \
+       randtable.c \
+       bzlib.h \
+       bzlib_private.h
index 1feb3a23eb0e034f0a499468411e3069b0f76aa3..ef31b3fb87feaa1ab652f6875a4264861f20dcbd 100644 (file)
@@ -1,3 +1,19 @@
+# Makefile.in generated by automake 1.6 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
 # Copyright (c) 2000, Red Hat, Inc.
 #
 #     This program is free software; you can redistribute it and/or modify
 #     http://www.gnu.org/
 #
 # Written by Christopher Faylor <cgf@redhat.com>
+# and Robert Collins <rbtcollins@hotmail.com>
 #
 # Makefile for Cygwin installer
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
 
-SHELL :=@SHELL@
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
 
-srcdir:=@srcdir@
-VPATH:=@srcdir@
-prefix:=@prefix@
-exec_prefix:=@exec_prefix@
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
 
-bindir:=@bindir@
-etcdir:=$(exec_prefix)/etc
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
 
-program_transform_name :=@program_transform_name@
+EXEEXT = @EXEEXT@
+OBJEXT = @OBJEXT@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+DEPDIR = @DEPDIR@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+MAINT = @MAINT@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+installdata = @installdata@
+uninstalldata = @uninstalldata@
 
-INSTALL:=@INSTALL@
-INSTALL_PROGRAM:=@INSTALL_PROGRAM@
-INSTALL_DATA:=@INSTALL_DATA@
+AM_CFLAGS = -mwindows -U_WIN32
+AM_CXXFLAGS = -fno-exceptions -fno-rtti -mwindows -U_WIN32
 
-EXEEXT:=@EXEEXT@
-EXEEXT_FOR_BUILD :=@EXEEXT_FOR_BUILD@
+noinst_LIBRARIES = libbz2.a
 
-CC:=@CC@
-CC_FOR_TARGET:=$(CC)
-CXX:=@CXX@
+libbz2_a_SOURCES = \
+       blocksort.c \
+       bzlib.c \
+       compress.c \
+       crctable.c \
+       decompress.c \
+       huffman.c \
+       randtable.c \
+       bzlib.h \
+       bzlib_private.h
 
-CFLAGS:=@CFLAGS@ -nostdinc
-CXXFLAGS:=@CXXFLAGS@ -fno-exceptions -fno-rtti
-CXX:=@CXX@
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/../cfgaux/mkinstalldirs
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
 
-WINDRES:=@WINDRES@
-OBJCOPY:=@OBJCOPY@
-AR:=@AR@
-RANLIB:=@RANLIB@
+libbz2_a_AR = $(AR) cru
+libbz2_a_LIBADD =
+am_libbz2_a_OBJECTS = blocksort.$(OBJEXT) bzlib.$(OBJEXT) \
+       compress.$(OBJEXT) crctable.$(OBJEXT) decompress.$(OBJEXT) \
+       huffman.$(OBJEXT) randtable.$(OBJEXT)
+libbz2_a_OBJECTS = $(am_libbz2_a_OBJECTS)
 
-#include $(srcdir)/../Makefile.common
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir)
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/../cfgaux/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/blocksort.Po ./$(DEPDIR)/bzlib.Po \
+@AMDEP_TRUE@   ./$(DEPDIR)/compress.Po ./$(DEPDIR)/crctable.Po \
+@AMDEP_TRUE@   ./$(DEPDIR)/decompress.Po ./$(DEPDIR)/huffman.Po \
+@AMDEP_TRUE@   ./$(DEPDIR)/randtable.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(libbz2_a_SOURCES)
+DIST_COMMON = README ../cfgaux/compile ../cfgaux/config.guess \
+       ../cfgaux/config.sub ../cfgaux/depcomp ../cfgaux/install-sh \
+       ../cfgaux/ltmain.sh ../cfgaux/missing ../cfgaux/mkinstalldirs \
+       ChangeLog Makefile.am Makefile.in aclocal.m4 configure \
+       configure.in
+SOURCES = $(libbz2_a_SOURCES)
 
-MINGW_INCLUDES:=-I. -I$(srcdir) -I$(mingw_source)/include -I$(w32api_include) -I$(updir)/bz2lib
+all: all-am
 
-MINGW_CXXFLAGS:=-MMD $(CXXFLAGS) -mno-cygwin $(MINGW_INCLUDES) -mwindows -U_WIN32
-MINGW_CFLAGS:=-MMD $(CFLAGS) -mno-cygwin $(MINGW_INCLUDES) -mwindows -U_WIN32
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
 
-ZLIB:=zlib/libzcygw.a
-BZ2LIB:=$(bupdir)/bz2lib/libbz2.a
-libmingw32.a:=$(mingw_build)/libmingw32.a
-libuser32:=$(w32api_lib)/libuser32.a
-libkernel32:=$(w32api_lib)/libkernel32.a
+$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+       cd $(srcdir) && $(AUTOCONF)
 
-ALL_DEP_LDLIBS:=$(ZLIB) $(BZ2LIB) $(w32api_lib)/libole32.a $(w32api_lib)/libwsock32.a \
-               $(w32api_lib)/libnetapi32.a $(w32api_lib)/libadvapi32.a \
-               $(w32api_lib)/libuuid.a $(libkernel32) $(w32api_lib)/libuser32.a \
-               $(libmingw32)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in 
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 
-ALL_LDLIBS:=${patsubst $(mingw_build)/lib%.a,-l%,\
-             ${patsubst $(w32api_lib)/lib%.a,-l%,\
-               ${filter-out $(libmingw32),\
-                 ${filter-out $(libuser32),\
-                   ${filter-out $(libkernel32), $(ALL_DEP_LDLIBS)}}}}}
+AR = ar
 
-ALL_LDFLAGS:=${filter-out -I%, \
-              ${filter-out -W%, \
-               -B$(w32api_lib)/ -B${mingw_build}/ $(MINGW_CFLAGS) $(LDFLAGS)}}
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libbz2.a: $(libbz2_a_OBJECTS) $(libbz2_a_DEPENDENCIES) 
+       -rm -f libbz2.a
+       $(libbz2_a_AR) libbz2.a $(libbz2_a_OBJECTS) $(libbz2_a_LIBADD)
+       $(RANLIB) libbz2.a
 
-LIBS:=libbz2.a
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT) core *.core
 
-OBJS:=blocksort.o bzlib.o compress.o decompress.o huffman.o crctable.o randtable.o
+distclean-compile:
+       -rm -f *.tab.c
 
-.SUFFIXES:
-.NOEXPORT:
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blocksort.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bzlib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crctable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decompress.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huffman.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randtable.Po@am__quote@
+
+distclean-depend:
+       -rm -rf ./$(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@   source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@   depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@   $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+       $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@   source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@   depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@   $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+       $(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+ETAGS = etags
+ETAGSFLAGS =
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)$$tags$$unique" \
+         || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = .
+distdir = $(PACKAGE)-$(VERSION)
+
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+
+GZIP_ENV = --best
+distcleancheck_listfiles = find . -type f -print
 
-.PHONY: all install clean realclean
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       mkdir $(distdir)
+       $(mkinstalldirs) $(distdir)/../cfgaux
+       @for file in $(DISTFILES); do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkinstalldirs) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           cp -pR $$d/$$file $(distdir)$$dir \
+           || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
 
-all: Makefile $(LIBS)
+dist dist-all: distdir
+       $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
 
-$(LIBS): $(OBJS)
-       $(AR) cru $@ $?
-       $(RANLIB) $@
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       $(am__remove_distdir)
+       GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/=build
+       mkdir $(distdir)/=inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \
+         && cd $(distdir)/=build \
+         && ../configure --srcdir=.. --prefix=$$dc_install_base \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
+             || { echo "ERROR: files left after uninstall:" ; \
+                  find $$dc_install_base -type f -print ; \
+                  exit 1; } >&2 ) \
+         && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
+         && rm -f $(distdir).tar.gz \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @echo "$(distdir).tar.gz is ready for distribution" | \
+         sed 'h;s/./=/g;p;x;p;x'
+distcleancheck: distclean
+       if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
 
-clean:
-       rm -f *.o *.rc *.a
+installdirs:
 
-realclean: clean
-       rm -f  Makefile config.cache
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
-install: all
-: Nothing to install
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-%.o: %.c
-ifdef VERBOSE
-       $(CC) $(MINGW_CFLAGS) -c -o $@ $<
-else
-       @echo $(CC) -c $(CFLAGS) ... $(<F)
-       @$(CC) $(MINGW_CFLAGS) -c -o $@ $<
-endif
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
 
-%.o: %.cc
-ifdef VERBOSE
-       $(CXX) $(MINGW_CXXFLAGS) -c -o $@ $<
-else
-       @echo $(CXX) -c $(CXXFLAGS) ... $(<F)
-       @$(CXX) $(MINGW_CXXFLAGS) -c -o $@ $<
-endif
+clean-generic:
 
-D=$(wildcard *.d)
-ifneq ($D,)
-include $D
-endif
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -f config.status config.cache config.log
+distclean-am: clean-am distclean-compile distclean-depend \
+       distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am clean clean-generic \
+       clean-noinstLIBRARIES dist dist-all dist-gzip distcheck \
+       distclean distclean-compile distclean-depend distclean-generic \
+       distclean-tags distcleancheck distdir dvi dvi-am info info-am \
+       install install-am install-data install-data-am install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic tags uninstall \
+       uninstall-am uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
index 22945a256c78009ccac152f2fda9a3e6562d84d5..07505d8f3d6883bbce25519c3b6d545a30882fc9 100644 (file)
@@ -1,15 +1,15 @@
 
 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.
+1.0.2.  This version is fully compatible with the previous public
+releases, versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0 and 1.0.1.
 
-bzip2-1.0 is distributed under a BSD-style license.  For details,
+bzip2-1.0.2 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.
+Complete documentation is available in Postscript form (manual.ps),
+PDF (manual.pdf, amazingly enough) 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
@@ -33,34 +33,41 @@ 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
+Linux-ELF (RedHat 7.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.
+bzip2-shared, a client of the shared library, is also built, but not
+self-tested.  So I suggest you also build using the normal Makefile,
+since that conducts a self-test.  A second reason to prefer the
+version statically linked to the library is that, on x86 platforms,
+building shared objects makes a valuable register (%ebx) unavailable
+to gcc, resulting in a slowdown of 10%-20%, at least for bzip2.
 
-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.
+Important note for people upgrading .so's from 0.9.0/0.9.5 to version
+1.0.X.  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.
+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.
+on the master web page (http://sources.redhat.com/bzip2).  Look there.
+However (FWIW), bzip2-1.0.X is very standard ANSI C and should compile
+unmodified with MS Visual C.  If you have difficulties building, you
+might want to read README.COMPILATION.PROBLEMS.
+
+At least using MS Visual C++ 6, you can build from the unmodified
+sources by issuing, in a command shell: 
+   nmake -f makefile.msc
+(you may need to first run the MSVC-provided script VCVARS32.BAT
+ so as to set up paths to the MSVC tools correctly).
 
 
 VALIDATION
@@ -138,29 +145,37 @@ WHAT'S NEW IN 0.9.5 ?
    * Many small improvements in file and flag handling.
    * A Y2K statement.
 
-WHAT'S NEW IN 1.0
+WHAT'S NEW IN 1.0.0 ?
 
    See the CHANGES file.
 
+WHAT'S NEW IN 1.0.2 ?
+
+   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.
+bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0 and 1.0.1,
+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.
+http://sources.redhat.com/bzip2.
 
 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)
+Cambridge, UK (and what a great town this is!)
+
+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)
+30 December 2001 (bzip2, version 1.0.2pre1)
\ No newline at end of file
index d621ad59756c87ad2bcc4f78f01ce142d7fbc512..bd1822dffbd0933231b58433d1b2b62c7bffec8c 100644 (file)
@@ -117,11 +117,11 @@ Known problems as of 1.0pre8:
   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)
+  $(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.2 $(OBJS)
 
   and replacing with 
 
-  ($CC) -G -shared -o libbz2.so.1.0.1 -h libbz2.so.1.0 $(OBJS)
+  $(CC) -G -shared -o libbz2.so.1.0.2 -h libbz2.so.1.0 $(OBJS)
   
   If gcc objects to the combination -fpic -fPIC, get rid of
   the second one, leaving just "-fpic".
index ec426725b1e2cab47d2f43b928f70b3bd9340fdc..aba3efcd3121779391abe933579115f2e78ddab5 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
@@ -981,7 +981,14 @@ void mainSort ( UInt32* ptr,
          }
       }
 
-      AssertH ( copyStart[ss]-1 == copyEnd[ss], 1007 );
+      AssertH ( (copyStart[ss]-1 == copyEnd[ss])
+                || 
+                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
+                   Necessity for this case is demonstrated by compressing 
+                   a sequence of approximately 48.5 million of character 
+                   251; 1.0.0/1.0.1 will then die here. */
+                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
+                1007 )
 
       for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
 
diff --git a/bz2lib/bzdiff b/bz2lib/bzdiff
new file mode 100644 (file)
index 0000000..3c2eb85
--- /dev/null
@@ -0,0 +1,76 @@
+#!/bin/sh
+# sh is buggy on RS/6000 AIX 3.2. Replace above line with #!/bin/ksh
+
+# Bzcmp/diff wrapped for bzip2, 
+# adapted from zdiff by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.
+
+# Bzcmp and bzdiff are used to invoke the cmp or the  diff  pro-
+# gram  on compressed files.  All options specified are passed
+# directly to cmp or diff.  If only 1 file is specified,  then
+# the  files  compared  are file1 and an uncompressed file1.gz.
+# If two files are specified, then they are  uncompressed  (if
+# necessary) and fed to cmp or diff.  The exit status from cmp
+# or diff is preserved.
+
+PATH="/usr/bin:$PATH"; export PATH
+prog=`echo $0 | sed 's|.*/||'`
+case "$prog" in
+  *cmp) comp=${CMP-cmp}   ;;
+  *)    comp=${DIFF-diff} ;;
+esac
+
+OPTIONS=
+FILES=
+for ARG
+do
+    case "$ARG" in
+    -*)        OPTIONS="$OPTIONS $ARG";;
+     *)        if test -f "$ARG"; then
+            FILES="$FILES $ARG"
+        else
+            echo "${prog}: $ARG not found or not a regular file"
+           exit 1
+        fi ;;
+    esac
+done
+if test -z "$FILES"; then
+       echo "Usage: $prog [${comp}_options] file [file]"
+       exit 1
+fi
+tmp=`tempfile -d /tmp -p bz` || {
+      echo 'cannot create a temporary file' >&2
+      exit 1
+}
+set $FILES
+if test $# -eq 1; then
+       FILE=`echo "$1" | sed 's/.bz2$//'`
+       bzip2 -cd "$FILE.bz2" | $comp $OPTIONS - "$FILE"
+       STAT="$?"
+
+elif test $# -eq 2; then
+       case "$1" in
+        *.bz2)
+                case "$2" in
+               *.bz2)
+                       F=`echo "$2" | sed 's|.*/||;s|.bz2$||'`
+                        bzip2 -cdfq "$2" > $tmp
+                        bzip2 -cdfq "$1" | $comp $OPTIONS - $tmp
+                        STAT="$?"
+                       /bin/rm -f $tmp;;
+
+                *)      bzip2 -cdfq "$1" | $comp $OPTIONS - "$2"
+                        STAT="$?";;
+                esac;;
+        *)      case "$2" in
+               *.bz2)
+                        bzip2 -cdfq "$2" | $comp $OPTIONS "$1" -
+                        STAT="$?";;
+                *)      $comp $OPTIONS "$1" "$2"
+                        STAT="$?";;
+                esac;;
+       esac
+        exit "$STAT"
+else
+       echo "Usage: $prog [${comp}_options] file [file]"
+       exit 1
+fi
diff --git a/bz2lib/bzdiff.1 b/bz2lib/bzdiff.1
new file mode 100644 (file)
index 0000000..adb7a8e
--- /dev/null
@@ -0,0 +1,47 @@
+\"Shamelessly copied from zmore.1 by Philippe Troin <phil@fifi.org>
+\"for Debian GNU/Linux
+.TH BZDIFF 1
+.SH NAME
+bzcmp, bzdiff \- compare bzip2 compressed files
+.SH SYNOPSIS
+.B bzcmp
+[ cmp_options ] file1
+[ file2 ]
+.br
+.B bzdiff
+[ diff_options ] file1
+[ file2 ]
+.SH DESCRIPTION
+.I  Bzcmp
+and 
+.I bzdiff
+are used to invoke the
+.I cmp
+or the
+.I diff
+program on bzip2 compressed files.  All options specified are passed
+directly to
+.I cmp
+or
+.IR diff "."
+If only 1 file is specified, then the files compared are
+.I file1
+and an uncompressed
+.IR file1 ".bz2."
+If two files are specified, then they are uncompressed if necessary and fed to
+.I cmp
+or
+.IR diff "."
+The exit status from 
+.I cmp
+or
+.I diff
+is preserved.
+.SH "SEE ALSO"
+cmp(1), diff(1), bzmore(1), bzless(1), bzgrep(1), bzip2(1)
+.SH BUGS
+Messages from the
+.I cmp
+or
+.I diff
+programs refer to temporary filenames instead of those specified.
diff --git a/bz2lib/bzgrep b/bz2lib/bzgrep
new file mode 100644 (file)
index 0000000..dbfc00e
--- /dev/null
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+# Bzgrep wrapped for bzip2, 
+# adapted from zgrep by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.
+## zgrep notice:
+## zgrep -- a wrapper around a grep program that decompresses files as needed
+## Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca>
+
+PATH="/usr/bin:$PATH"; export PATH
+
+prog=`echo $0 | sed 's|.*/||'`
+case "$prog" in
+       *egrep) grep=${EGREP-egrep}     ;;
+       *fgrep) grep=${FGREP-fgrep}     ;;
+       *)      grep=${GREP-grep}       ;;
+esac
+pat=""
+while test $# -ne 0; do
+  case "$1" in
+  -e | -f) opt="$opt $1"; shift; pat="$1"
+           if test "$grep" = grep; then  # grep is buggy with -e on SVR4
+             grep=egrep
+           fi;;
+  -A | -B) opt="$opt $1 $2"; shift;;
+  -*)     opt="$opt $1";;
+   *)      if test -z "$pat"; then
+            pat="$1"
+          else
+            break;
+           fi;;
+  esac
+  shift
+done
+
+if test -z "$pat"; then
+  echo "grep through bzip2 files"
+  echo "usage: $prog [grep_options] pattern [files]"
+  exit 1
+fi
+
+list=0
+silent=0
+op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'`
+case "$op" in
+  *l*) list=1
+esac
+case "$op" in
+  *h*) silent=1
+esac
+
+if test $# -eq 0; then
+  bzip2 -cdfq | $grep $opt "$pat"
+  exit $?
+fi
+
+res=0
+for i do
+  if test -f "$i"; then :; else if test -f "$i.bz2"; then i="$i.bz2"; fi; fi
+  if test $list -eq 1; then
+    bzip2 -cdfq "$i" | $grep $opt "$pat" 2>&1 > /dev/null && echo $i
+    r=$?
+  elif test $# -eq 1 -o $silent -eq 1; then
+    bzip2 -cdfq "$i" | $grep $opt "$pat"
+    r=$?
+  else
+    bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
+    r=$?
+  fi
+  test "$r" -ne 0 && res="$r"
+done
+exit $res
diff --git a/bz2lib/bzgrep.1 b/bz2lib/bzgrep.1
new file mode 100644 (file)
index 0000000..930af8c
--- /dev/null
@@ -0,0 +1,56 @@
+\"Shamelessly copied from zmore.1 by Philippe Troin <phil@fifi.org>
+\"for Debian GNU/Linux
+.TH BZGREP 1
+.SH NAME
+bzgrep, bzfgrep, bzegrep \- search possibly bzip2 compressed files for a regular expression
+.SH SYNOPSIS
+.B bzgrep
+[ grep_options ]
+.BI  [\ -e\ ] " pattern"
+.IR filename ".\|.\|."
+.br
+.B bzegrep
+[ egrep_options ]
+.BI  [\ -e\ ] " pattern"
+.IR filename ".\|.\|."
+.br
+.B bzfgrep
+[ fgrep_options ]
+.BI  [\ -e\ ] " pattern"
+.IR filename ".\|.\|."
+.SH DESCRIPTION
+.IR  Bzgrep
+is used to invoke the
+.I grep
+on bzip2-compressed files. All options specified are passed directly to
+.I grep.
+If no file is specified, then the standard input is decompressed
+if necessary and fed to grep.
+Otherwise the given files are uncompressed if necessary and fed to
+.I grep.
+.PP
+If
+.I bzgrep
+is invoked as
+.I bzegrep
+or
+.I bzfgrep
+then
+.I egrep
+or
+.I fgrep
+is used instead of
+.I grep.
+If the GREP environment variable is set,
+.I bzgrep
+uses it as the
+.I grep
+program to be invoked. For example:
+
+    for sh:  GREP=fgrep  bzgrep string files
+    for csh: (setenv GREP fgrep; bzgrep string files)
+.SH AUTHOR
+Charles Levert (charles@comm.polymtl.ca). Adapted to bzip2 by Philippe
+Troin <phil@fifi.org> for Debian GNU/Linux.
+.SH "SEE ALSO"
+grep(1), egrep(1), fgrep(1), bzdiff(1), bzmore(1), bzless(1), bzip2(1)
index 7de54a0118c3a4c3db1aeb34bb926565a74c2828..623435c24277c6d6b5c51653ea64b7936a34d903 100644 (file)
@@ -1,7 +1,7 @@
 .PU
 .TH bzip2 1
 .SH NAME
-bzip2, bunzip2 \- a block-sorting file compressor, v1.0
+bzip2, bunzip2 \- a block-sorting file compressor, v1.0.2
 .br
 bzcat \- decompresses files to stdout
 .br
@@ -197,7 +197,7 @@ to decompress.
 .TP
 .B \-z --compress
 The complement to \-d: forces compression, regardless of the
-invokation name.
+invocation name.
 .TP
 .B \-t --test
 Check integrity of the specified file(s), but don't decompress them.
@@ -211,6 +211,10 @@ existing output files.  Also forces
 .I bzip2 
 to break hard links
 to files, which it otherwise wouldn't do.
+
+bzip2 normally declines to decompress files which don't have the
+correct magic header bytes.  If forced (-f), however, it will pass
+such files through unmodified.  This is how GNU gzip behaves.
 .TP
 .B \-k --keep
 Keep (don't delete) input files during compression
@@ -239,9 +243,13 @@ information which is primarily of interest for diagnostic purposes.
 .B \-L --license -V --version
 Display the software version, license terms and conditions.
 .TP
-.B \-1 to \-9
+.B \-1 (or \-\-fast) to \-9 (or \-\-best)
 Set the block size to 100 k, 200 k ..  900 k when compressing.  Has no
 effect when decompressing.  See MEMORY MANAGEMENT below.
+The \-\-fast and \-\-best aliases are primarily for GNU gzip 
+compatibility.  In particular, \-\-fast doesn't make things
+significantly faster.  
+And \-\-best merely selects the default behaviour.
 .TP
 .B \--
 Treats all subsequent arguments as file names, even if they start
@@ -352,11 +360,11 @@ 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.
+and writes a number of files "rec00001file.bz2",
+"rec00002file.bz2", etc, containing the  extracted  blocks.
 The  output  filenames  are  designed  so  that the use of
 wildcards in subsequent processing -- for example,  
-"bzip2 -dc  rec*file.bz2 > recovered_data" -- lists the files in
+"bzip2 -dc  rec*file.bz2 > recovered_data" -- processes the files in
 the correct order.
 
 .I bzip2recover
@@ -397,27 +405,31 @@ I/O error messages are not as helpful as they could be.
 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
+This manual page pertains to version 1.0.2 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.
+Compressed data created by this version is entirely forwards and
+backwards compatible with the previous public releases, versions
+0.1pl2, 0.9.0, 0.9.5, 1.0.0 and 1.0.1, 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.
+versions prior to this one, 1.0.2, used 32-bit integers to represent
+bit positions in compressed files, so it could not handle compressed
+files more than 512 megabytes long.  Version 1.0.2 and above uses
+64-bit ints on some platforms which support them (GNU supported
+targets, and Windows).  To establish whether or not bzip2recover was
+built with such a limitation, run it without arguments.  In any event
+you can build yourself an unlimited version if you can recompile it
+with MaybeUInt64 set to be an unsigned 64-bit integer.
+
+
 
 .SH AUTHOR
 Julian Seward, jseward@acm.org.
 
-http://sourceware.cygnus.com/bzip2
-http://www.muraroa.demon.co.uk
+http://sources.redhat.com/bzip2
 
 The ideas embodied in
 .I bzip2
@@ -434,6 +446,8 @@ 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
+worst-case compression performance.  
+The bz* scripts are derived from those of GNU gzip.
+Many people sent patches, helped
 with portability problems, lent machines, gave advice and were generally
 helpful.
index 9f18339e926873b275fd1b16622d1cc0887b9873..0f20cb5a2b25f6f115eb264a260774e6e0a7ace9 100644 (file)
@@ -1,11 +1,9 @@
-
-
-
 bzip2(1)                                                 bzip2(1)
 
 
+
 N\bNA\bAM\bME\bE
-       bzip2, bunzip2 - a block-sorting file compressor, v1.0
+       bzip2, bunzip2 - a block-sorting file compressor, v1.0.2
        bzcat - decompresses files to stdout
        bzip2recover - recovers data from damaged bzip2 files
 
@@ -22,20 +20,20 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        sorting text compression algorithm,  and  Huffman  coding.
        Compression  is  generally  considerably  better than that
        achieved by more conventional LZ77/LZ78-based compressors,
-       and  approaches  the performance of the PPM family of sta-
+       and  approaches  the performance of the PPM family of sta­
        tistical compressors.
 
        The command-line options are deliberately very similar  to
        those of _\bG_\bN_\bU _\bg_\bz_\bi_\bp_\b, but they are not identical.
 
-       _\bb_\bz_\bi_\bp_\b2  expects  a list of file names to accompany the com-
+       _\bb_\bz_\bi_\bp_\b2  expects  a list of file names to accompany the com­
        mand-line flags.  Each file is replaced  by  a  compressed
        version  of  itself,  with  the  name "original_name.bz2".
-       Each compressed file has the same modification date,  per-
-       missions, and, when possible, ownership as the correspond-
+       Each compressed file has the same modification date,  per­
+       missions, and, when possible, ownership as the correspond­
        ing original, so that these properties  can  be  correctly
        restored  at  decompression  time.   File name handling is
-       naive in the sense that there is no mechanism for preserv-
+       naive in the sense that there is no mechanism for preserv­
        ing  original file names, permissions, ownerships or dates
        in filesystems which lack these concepts, or have  serious
        file name length restrictions, such as MS-DOS.
@@ -58,18 +56,6 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
               filename.bz2    becomes   filename
               filename.bz     becomes   filename
               filename.tbz2   becomes   filename.tar
-
-
-
-                                                                1
-
-
-
-
-
-bzip2(1)                                                 bzip2(1)
-
-
               filename.tbz    becomes   filename.tar
               anyothername    becomes   anyothername.out
 
@@ -78,23 +64,23 @@ bzip2(1)                                                 bzip2(1)
        guess the name of the original file, and uses the original
        name with _\b._\bo_\bu_\bt appended.
 
-       As  with compression, supplying no filenames causes decom-
+       As  with compression, supplying no filenames causes decom­
        pression from standard input to standard output.
 
-       _\bb_\bu_\bn_\bz_\bi_\bp_\b2 will correctly decompress a file which is the con-
+       _\bb_\bu_\bn_\bz_\bi_\bp_\b2 will correctly decompress a file which is the con­
        catenation of two or more compressed files.  The result is
        the concatenation of the corresponding uncompressed files.
        Integrity testing (-t) of concatenated compressed files is
        also supported.
 
        You can also compress or decompress files to the  standard
-       output  by giving the -c flag.  Multiple files may be com-
+       output  by giving the -c flag.  Multiple files may be com­
        pressed and decompressed like this.  The resulting outputs
        are  fed  sequentially to stdout.  Compression of multiple
-       files in this manner generates a stream containing  multi-
+       files in this manner generates a stream containing  multi­
        ple compressed file representations.  Such a stream can be
        decompressed correctly only  by  _\bb_\bz_\bi_\bp_\b2  version  0.9.0  or
-       later.   Earlier  versions of _\bb_\bz_\bi_\bp_\b2 will stop after decom-
+       later.   Earlier  versions of _\bb_\bz_\bi_\bp_\b2 will stop after decom­
        pressing the first file in the stream.
 
        _\bb_\bz_\bc_\ba_\bt (or _\bb_\bz_\bi_\bp_\b2 _\b-_\bd_\bc_\b) decompresses all specified  files  to
@@ -115,7 +101,7 @@ bzip2(1)                                                 bzip2(1)
 
        As a self-check for your  protection,  _\bb_\bz_\bi_\bp_\b2  uses  32-bit
        CRCs  to make sure that the decompressed version of a file
-       is identical to the original.  This guards against corrup-
+       is identical to the original.  This guards against corrup­
        tion  of  the compressed data, and against undetected bugs
        in _\bb_\bz_\bi_\bp_\b2 (hopefully very unlikely).  The chances  of  data
        corruption  going  undetected  is  microscopic,  about one
@@ -125,17 +111,6 @@ bzip2(1)                                                 bzip2(1)
        you  recover  the original uncompressed data.  You can use
        _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br to try to recover data from damaged files.
 
-
-
-                                                                2
-
-
-
-
-
-bzip2(1)                                                 bzip2(1)
-
-
        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
@@ -154,8 +129,8 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
               and forces _\bb_\bz_\bi_\bp_\b2 to decompress.
 
        -\b-z\bz -\b--\b-c\bco\bom\bmp\bpr\bre\bes\bss\bs
-              The  complement  to -d: forces compression, regard-
-              less of the invokation name.
+              The   complement   to   -d:   forces   compression,
+              regardless of the invocation name.
 
        -\b-t\bt -\b--\b-t\bte\bes\bst\bt
               Check integrity of the specified file(s), but don't
@@ -168,6 +143,11 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
               forces _\bb_\bz_\bi_\bp_\b2 to break hard links to files, which it
               otherwise wouldn't do.
 
+              bzip2  normally  declines to decompress files which
+              don't have the  correct  magic  header  bytes.   If
+              forced  (-f),  however,  it  will  pass  such files
+              through unmodified.  This is how GNU gzip  behaves.
+
        -\b-k\bk -\b--\b-k\bke\bee\bep\bp
               Keep  (don't delete) input files during compression
               or decompression.
@@ -190,23 +170,11 @@ O\bOP\bPT\bTI\bIO\bON\bNS\bS
        -\b-q\bq -\b--\b-q\bqu\bui\bie\bet\bt
               Suppress non-essential warning messages.   Messages
               pertaining  to I/O errors and other critical events
-
-
-
-                                                                3
-
-
-
-
-
-bzip2(1)                                                 bzip2(1)
-
-
               will not be suppressed.
 
        -\b-v\bv -\b--\b-v\bve\ber\brb\bbo\bos\bse\be
               Verbose mode -- show the compression ratio for each
-              file  processed.   Further  -v's  increase the ver-
+              file  processed.   Further  -v's  increase the ver­
               bosity level, spewing out lots of information which
               is primarily of interest for diagnostic purposes.
 
@@ -214,20 +182,24 @@ bzip2(1)                                                 bzip2(1)
               Display  the  software  version,  license terms and
               conditions.
 
-       -\b-1\bt\bto\bo -\b-9\b9
+       -\b-1\b(\b(o\bor\br -\b--\b-f\bfa\bas\bst\bt)\b) t\bto\bo -\b-9\b9 (\b(o\bor\br -\b--\b-b\bbe\bes\bst\bt)\b)
               Set the block size to 100 k, 200 k ..  900  k  when
               compressing.   Has  no  effect  when decompressing.
-              See MEMORY MANAGEMENT below.
+              See MEMORY MANAGEMENT below.  The --fast and --best
+              aliases  are  primarily for GNU gzip compatibility.
+              In particular, --fast doesn't make things  signifi­
+              cantly  faster.   And  --best  merely  selects  the
+              default behaviour.
 
        -\b--\b-     Treats all subsequent arguments as file names, even
-              if they start with a dash.  This is so you can han-
+              if they start with a dash.  This is so you can han­
               dle files with names beginning  with  a  dash,  for
               example: bzip2 -- -myfilename.
 
        -\b--\b-r\bre\bep\bpe\bet\bti\bit\bti\biv\bve\be-\b-f\bfa\bas\bst\bt -\b--\b-r\bre\bep\bpe\bet\bti\bit\bti\biv\bve\be-\b-b\bbe\bes\bst\bt
               These  flags  are  redundant  in versions 0.9.5 and
               above.  They provided some coarse control over  the
-              behaviour  of the sorting algorithm in earlier ver-
+              behaviour  of the sorting algorithm in earlier ver­
               sions, which was sometimes useful.  0.9.5 and above
               have  an  improved  algorithm  which  renders these
               flags irrelevant.
@@ -238,7 +210,7 @@ M\bME\bEM\bMO\bOR\bRY\bY M\bMA\bAN\bNA\bAG\bGE\bEM\bME\bEN\bNT\bT
        affects  both  the  compression  ratio  achieved,  and the
        amount of memory needed for compression and decompression.
        The  flags  -1  through  -9  specify  the block size to be
-       100,000 bytes through 900,000 bytes (the default)  respec-
+       100,000 bytes through 900,000 bytes (the default)  respec­
        tively.   At  decompression  time, the block size used for
        compression is read from  the  header  of  the  compressed
        file, and _\bb_\bu_\bn_\bz_\bi_\bp_\b2 then allocates itself just enough memory
@@ -256,18 +228,6 @@ M\bME\bEM\bMO\bOR\bRY\bY M\bMA\bAN\bNA\bAG\bGE\bEM\bME\bEN\bNT\bT
 
        Larger  block  sizes  give  rapidly  diminishing  marginal
        returns.  Most of the compression comes from the first two
-
-
-
-                                                                4
-
-
-
-
-
-bzip2(1)                                                 bzip2(1)
-
-
        or  three hundred k of block size, a fact worth bearing in
        mind when using _\bb_\bz_\bi_\bp_\b2  on  small  machines.   It  is  also
        important  to  appreciate  that  the  decompression memory
@@ -278,13 +238,13 @@ bzip2(1)                                                 bzip2(1)
        _\bb_\bu_\bn_\bz_\bi_\bp_\b2 will require about 3700 kbytes to decompress.   To
        support decompression of any file on a 4 megabyte machine,
        _\bb_\bu_\bn_\bz_\bi_\bp_\b2 has an option to  decompress  using  approximately
-       half this amount of memory, about 2300 kbytes.  Decompres-
+       half this amount of memory, about 2300 kbytes.  Decompres­
        sion speed is also halved, so you should use  this  option
        only where necessary.  The relevant flag is -s.
 
-       In general, try and use the largest block size memory con-
+       In general, try and use the largest block size memory con­
        straints  allow,  since  that  maximises  the  compression
-       achieved.   Compression and decompression speed are virtu-
+       achieved.   Compression and decompression speed are virtu­
        ally unaffected by block size.
 
        Another significant point applies to files which fit in  a
@@ -300,11 +260,11 @@ bzip2(1)                                                 bzip2(1)
 
        Here  is a table which summarises the maximum memory usage
        for different block sizes.  Also  recorded  is  the  total
-       compressed  size for 14 files of the Calgary Text Compres-
+       compressed  size for 14 files of the Calgary Text Compres­
        sion Corpus totalling 3,141,622 bytes.  This column  gives
        some  feel  for  how  compression  varies with block size.
        These figures tend to understate the advantage  of  larger
-       block  sizes  for  larger files, since the Corpus is domi-
+       block  sizes  for  larger files, since the Corpus is domi­
        nated by smaller files.
 
                   Compress   Decompress   Decompress   Corpus
@@ -321,22 +281,9 @@ bzip2(1)                                                 bzip2(1)
             -9      7600k      3700k        2350k      828642
 
 
-
-
-
-
-                                                                5
-
-
-
-
-
-bzip2(1)                                                 bzip2(1)
-
-
 R\bRE\bEC\bCO\bOV\bVE\bER\bRI\bIN\bNG\bG D\bDA\bAT\bTA\bA F\bFR\bRO\bOM\bM D\bDA\bAM\bMA\bAG\bGE\bED\bD F\bFI\bIL\bLE\bES\bS
        _\bb_\bz_\bi_\bp_\b2 compresses files in blocks, usually 900kbytes  long.
-       Each block is handled independently.  If a media or trans-
+       Each block is handled independently.  If a media or trans­
        mission error causes a multi-block  .bz2  file  to  become
        damaged,  it  may  be  possible  to  recover data from the
        undamaged blocks in the file.
@@ -353,19 +300,19 @@ R\bRE\bEC\bCO\bOV\bVE\bER\bRI\bIN\bNG\bG D\bDA\bAT\bTA\bA F\bFR\bRO\bOM\bM D\bDA\bAM\bMA\bAG\bGE\bED\bD F
        the integrity of the resulting files, and decompress those
        which are undamaged.
 
-       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br takes a single argument, the name of the dam-
-       aged 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.
+       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br takes a single argument, the name of the dam­
+       aged    file,    and    writes    a    number   of   files
+       "rec00001file.bz2",  "rec00002file.bz2",  etc,  containing
+       the   extracted   blocks.   The   output   filenames   are
+       designed  so  that the use of wildcards in subsequent pro­
+       cessing  -- for example, "bzip2 -dc  rec*file.bz2 > recov­
+       ered_data" -- processes the files in the correct order.
 
        _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br should be of most use dealing with large .bz2
        files,  as  these will contain many blocks.  It is clearly
        futile to use it on damaged single-block  files,  since  a
-       damaged  block  cannot  be recovered.  If you wish to min-
-       imise any potential data loss through media  or  transmis-
+       damaged  block  cannot  be recovered.  If you wish to min­
+       imise any potential data loss through media  or  transmis­
        sion errors, you might consider compressing with a smaller
        block size.
 
@@ -379,31 +326,19 @@ P\bPE\bER\bRF\bFO\bOR\bRM\bMA\bAN\bNC\bCE\bE N\bNO\bOT\bTE\bES\bS
        better  than previous versions in this respect.  The ratio
        between worst-case and average-case compression time is in
        the  region  of  10:1.  For previous versions, this figure
-       was more like 100:1.  You can use the -vvvv option to mon-
+       was more like 100:1.  You can use the -vvvv option to mon­
        itor progress in great detail, if you want.
 
        Decompression speed is unaffected by these phenomena.
 
        _\bb_\bz_\bi_\bp_\b2  usually  allocates  several  megabytes of memory to
-       operate in, and then charges all over it in a fairly  ran-
-       dom  fashion.   This means that performance, both for com-
+       operate in, and then charges all over it in a fairly  ran­
+       dom  fashion.   This means that performance, both for com­
        pressing and decompressing, is largely determined  by  the
-
-
-
-                                                                6
-
-
-
-
-
-bzip2(1)                                                 bzip2(1)
-
-
        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 _\bb_\bz_\bi_\bp_\b2 will per-
+       large performance improvements.  I imagine _\bb_\bz_\bi_\bp_\b2 will per­
        form best on machines with very large caches.
 
 
@@ -413,50 +348,51 @@ C\bCA\bAV\bVE\bEA\bAT\bTS\bS
        but  the  details  of  what  the problem is sometimes seem
        rather misleading.
 
-       This manual page pertains to version 1.0 of  _\bb_\bz_\bi_\bp_\b2_\b.   Com-
+       This manual page pertains to version 1.0.2 of _\bb_\bz_\bi_\bp_\b2_\b.  Com­
        pressed  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  decom-
-       press multiple concatenated compressed files.  0.1pl2 can-
-       not do this; it will stop  after  decompressing  just  the
-       first file in the stream.
+       releases,  versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0 and 1.0.1,
+       but with the following exception: 0.9.0 and above can cor­
+       rectly  decompress multiple concatenated compressed files.
+       0.1pl2 cannot do this; it will  stop  after  decompressing
+       just the first file in the stream.
+
+       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br  versions  prior  to  this  one,  1.0.2, used
+       32-bit integers to represent bit positions  in  compressed
+       files,  so  it could not handle compressed files more than
+       512 megabytes long.  Version 1.0.2 and above  uses  64-bit
+       ints  on  some platforms which support them (GNU supported
+       targets,  and  Windows).   To  establish  whether  or  not
+       bzip2recover  was  built  with  such  a limitation, run it
+       without arguments.  In any event you can build yourself an
+       unlimited version if you can recompile it with MaybeUInt64
+       set to be an unsigned 64-bit integer.
+
 
-       _\bb_\bz_\bi_\bp_\b2_\br_\be_\bc_\bo_\bv_\be_\br  uses  32-bit integers to represent bit posi-
-       tions in compressed files, so it cannot handle  compressed
-       files  more than 512 megabytes long.  This could easily be
-       fixed.
 
 
 A\bAU\bUT\bTH\bHO\bOR\bR
        Julian Seward, jseward@acm.org.
 
-       http://sourceware.cygnus.com/bzip2
-       http://www.muraroa.demon.co.uk
+       http://sources.redhat.com/bzip2
 
-       The ideas embodied in _\bb_\bz_\bi_\bp_\b2 are due to (at least) the fol-
-       lowing people: Michael Burrows and David Wheeler (for  the
-       block  sorting  transformation), David Wheeler (again, for
-       the Huffman coder), Peter Fenwick (for the structured cod-
+       The ideas embodied in _\bb_\bz_\bi_\bp_\b2 are due to (at least) the fol­
+       lowing  people: Michael Burrows and David Wheeler (for the
+       block sorting transformation), David Wheeler  (again,  for
+       the Huffman coder), Peter Fenwick (for the structured cod­
        ing model in the original _\bb_\bz_\bi_\bp_\b, and many refinements), and
-       Alistair Moffat, Radford Neal  and  Ian  Witten  (for  the
+       Alistair  Moffat,  Radford  Neal  and  Ian Witten (for the
        arithmetic  coder  in  the  original  _\bb_\bz_\bi_\bp_\b)_\b.   I  am  much
-       indebted for their help, support and advice.  See the man-
-       ual  in the source distribution for pointers to sources of
+       indebted for their help, support and advice.  See the man­
+       ual in the source distribution for pointers to sources  of
        documentation.  Christian von Roques encouraged me to look
-       for  faster sorting algorithms, so as to speed up compres-
+       for faster sorting algorithms, so as to speed up  compres­
        sion.  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.
-
-
-
-
-
-
-
+       compression performance.  The bz* scripts are derived from
+       those  of GNU gzip.  Many people sent patches, helped with
+       portability problems, lent machines, gave advice and  were
+       generally helpful.
 
-                                                                7
 
 
+                                                         bzip2(1)
index 56adfdcbc46b4c2166867f1ee0077edd35d47253..807f420aed6b6bb1552f00d2eff0d4b08ce70751 100644 (file)
@@ -7,7 +7,7 @@
   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.
+  Copyright (C) 1996-2002 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
 /*--
   Generic 32-bit Unix.
   Also works on 64-bit Unix boxes.
+  This is the default.
 --*/
 #define BZ_UNIX      1
 
 /*--
   Win32, as seen by Jacob Navia's excellent
   port of (Chris Fraser & David Hanson)'s excellent
-  lcc compiler.
+  lcc compiler.  Or with MS Visual C.
+  This is selected automatically if compiled by a compiler which
+  defines _WIN32, not including the Cygwin GCC.
 --*/
 #define BZ_LCCWIN32  0
 
 --*/
 
 #if BZ_UNIX
+#   include <fcntl.h>
 #   include <sys/types.h>
 #   include <utime.h>
 #   include <unistd.h>
 
 #   define PATH_SEP    '/'
 #   define MY_LSTAT    lstat
-#   define MY_S_IFREG  S_ISREG
 #   define MY_STAT     stat
+#   define MY_S_ISREG  S_ISREG
+#   define MY_S_ISDIR  S_ISDIR
 
 #   define APPEND_FILESPEC(root, name) \
       root=snocString((root), (name))
 #   else
 #      define NORETURN /**/
 #   endif
+
 #   ifdef __DJGPP__
 #     include <io.h>
 #     include <fcntl.h>
 #     undef MY_LSTAT
+#     undef MY_STAT
 #     define MY_LSTAT stat
+#     define MY_STAT stat
 #     undef SET_BINARY_MODE
 #     define SET_BINARY_MODE(fd)                        \
         do {                                            \
            int retVal = setmode ( fileno ( fd ),        \
-                                 O_BINARY );            \
+                                  O_BINARY );           \
            ERROR_IF_MINUS_ONE ( retVal );               \
         } while ( 0 )
 #   endif
+
 #   ifdef __CYGWIN__
 #     include <io.h>
 #     include <fcntl.h>
 #     define SET_BINARY_MODE(fd)                        \
         do {                                            \
            int retVal = setmode ( fileno ( fd ),        \
-                                 O_BINARY );            \
+                                  O_BINARY );           \
            ERROR_IF_MINUS_ONE ( retVal );               \
         } while ( 0 )
 #   endif
-#endif
+#endif /* BZ_UNIX */
 
 
 
 #   define PATH_SEP       '\\'
 #   define MY_LSTAT       _stat
 #   define MY_STAT        _stat
-#   define MY_S_IFREG(x)  ((x) & _S_IFREG)
+#   define MY_S_ISREG(x)  ((x) & _S_IFREG)
+#   define MY_S_ISDIR(x)  ((x) & _S_IFDIR)
 
 #   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 );            \
+                                O_BINARY );           \
          ERROR_IF_MINUS_ONE ( retVal );               \
       } while ( 0 )
 
-#endif
+#endif /* BZ_LCCWIN32 */
 
 
 /*---------------------------------------------*/
@@ -338,6 +324,7 @@ typedef
    struct { UChar b[8]; } 
    UInt64;
 
+
 static
 void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
 {
@@ -351,6 +338,7 @@ void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
    n->b[0] = (UChar) (lo32        & 0xFF);
 }
 
+
 static
 double uInt64_to_double ( UInt64* n )
 {
@@ -364,77 +352,6 @@ double uInt64_to_double ( UInt64* n )
    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 )
@@ -445,49 +362,23 @@ Bool uInt64_isZero ( UInt64* n )
    return 1;
 }
 
-static
+
+/* Divide *n by 10, and return the remainder.  */
+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).
-   */
+   UInt32 rem, tmp;
    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];
+   rem = 0;
+   for (i = 7; i >= 0; i--) {
+      tmp = rem * 256 + n->b[i];
+      n->b[i] = tmp / 10;
+      rem = tmp % 10;
+   }
+   return rem;
 }
 
+
 /* ... and the Whole Entire Point of all this UInt64 stuff is
    so that we can supply the following function.
 */
@@ -504,7 +395,8 @@ void uInt64_toAscii ( char* outbuf, UInt64* n )
       nBuf++;
    } while (!uInt64_isZero(&n_copy));
    outbuf[nBuf] = 0;
-   for (i = 0; i < nBuf; i++) outbuf[i] = buf[nBuf-i-1];
+   for (i = 0; i < nBuf; i++) 
+      outbuf[i] = buf[nBuf-i-1];
 }
 
 
@@ -566,35 +458,38 @@ void compressStream ( FILE *stream, FILE *zStream )
    if (ret == EOF) goto errhandler_io;
    if (zStream != stdout) {
       ret = fclose ( zStream );
+      outputHandleJustInCase = NULL;
       if (ret == EOF) goto errhandler_io;
    }
+   outputHandleJustInCase = NULL;
    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
-              );
+      if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) {
+        fprintf ( stderr, " no data compressed.\n");
+      } else {
+        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;
@@ -652,7 +547,7 @@ Bool uncompressStream ( FILE *zStream, FILE *stream )
 
       while (bzerr == BZ_OK) {
          nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
-         if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
+         if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat;
          if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
             fwrite ( obuf, sizeof(UChar), nread, stream );
          if (ferror(stream)) goto errhandler_io;
@@ -668,9 +563,9 @@ Bool uncompressStream ( FILE *zStream, FILE *stream )
       if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
 
       if (nUnused == 0 && myfeof(zStream)) break;
-
    }
 
+   closeok:
    if (ferror(zStream)) goto errhandler_io;
    ret = fclose ( zStream );
    if (ret == EOF) goto errhandler_io;
@@ -680,11 +575,26 @@ Bool uncompressStream ( FILE *zStream, FILE *stream )
    if (ret != 0) goto errhandler_io;
    if (stream != stdout) {
       ret = fclose ( stream );
+      outputHandleJustInCase = NULL;
       if (ret == EOF) goto errhandler_io;
    }
+   outputHandleJustInCase = NULL;
    if (verbosity >= 2) fprintf ( stderr, "\n    " );
    return True;
 
+   trycat: 
+   if (forceOverwrite) {
+      rewind(zStream);
+      while (True) {
+        if (myfeof(zStream)) break;
+        nread = fread ( obuf, sizeof(UChar), 5000, zStream );
+        if (ferror(zStream)) goto errhandler_io;
+        if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream );
+        if (ferror(stream)) goto errhandler_io;
+      }
+      goto closeok;
+   }
+  
    errhandler:
    BZ2_bzReadClose ( &bzerr_dummy, bzf );
    switch (bzerr) {
@@ -832,7 +742,7 @@ void cadvise ( void )
       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"
+        "You can use the `bzip2recover' program to attempt to recover\n"
         "data from undamaged sections of corrupted files.\n\n"
     );
 }
@@ -855,28 +765,55 @@ void showFileNames ( void )
 static 
 void cleanUpAndFail ( Int32 ec )
 {
-   IntNative retVal;
+   IntNative      retVal;
+   struct MY_STAT statBuf;
 
    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)
+
+      /* Check whether input file still exists.  Delete output file
+         only if input exists to avoid loss of data.  Joerg Prante, 5
+         January 2002.  (JRS 06-Jan-2002: other changes in 1.0.2 mean
+         this is less likely to happen.  But to be ultra-paranoid, we
+         do the check anyway.)  */
+      retVal = MY_STAT ( inName, &statBuf );
+      if (retVal == 0) {
+         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 );
+      } else {
          fprintf ( stderr,
-                   "%s: WARNING: deletion of output file (apparently) failed.\n",
+                   "%s: WARNING: deletion of output file suppressed\n",
+                    progName );
+         fprintf ( stderr,
+                   "%s:    since input file no longer exists.  Output file\n",
                    progName );
+         fprintf ( stderr,
+                   "%s:    `%s' may be incomplete.\n",
+                   progName, outName );
+         fprintf ( stderr, 
+                   "%s:    I suggest doing an integrity test (bzip2 -tv)"
+                   " of it.\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 );
+                "%s:    %d specified on command line, %d not processed yet.\n\n",
+                progName, progName,
+                numFileNames, numFileNames - numFilesProcessed );
    }
    setExit(ec);
    exit(exitValue);
@@ -915,14 +852,16 @@ void crcError ( void )
 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 );
+  if (noisy) {
+    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 );
 }
 
 
@@ -1038,6 +977,11 @@ void configError ( void )
 /*--- The main driver machinery                   ---*/
 /*---------------------------------------------------*/
 
+/* All rather crufty.  The main problem is that input files
+   are stat()d multiple times before use.  This should be
+   cleaned up. 
+*/
+
 /*---------------------------------------------*/
 static 
 void pad ( Char *s )
@@ -1081,6 +1025,32 @@ Bool fileExists ( Char* name )
 }
 
 
+/*---------------------------------------------*/
+/* Open an output file safely with O_EXCL and good permissions.
+   This avoids a race condition in versions < 1.0.2, in which
+   the file was first opened and then had its interim permissions
+   set safely.  We instead use open() to create the file with
+   the interim permissions required. (--- --- rw-).
+
+   For non-Unix platforms, if we are not worrying about
+   security issues, simple this simply behaves like fopen.
+*/
+FILE* fopen_output_safely ( Char* name, const char* mode )
+{
+#  if BZ_UNIX
+   FILE*     fp;
+   IntNative fh;
+   fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR);
+   if (fh == -1) return NULL;
+   fp = fdopen(fh, mode);
+   if (fp == NULL) close(fh);
+   return fp;
+#  else
+   return fopen(name, mode);
+#  endif
+}
+
+
 /*---------------------------------------------*/
 /*--
   if in doubt, return True
@@ -1093,7 +1063,7 @@ Bool notAStandardFile ( Char* name )
 
    i = MY_LSTAT ( name, &statBuf );
    if (i != 0) return True;
-   if (MY_S_IFREG(statBuf.st_mode)) return False;
+   if (MY_S_ISREG(statBuf.st_mode)) return False;
    return True;
 }
 
@@ -1115,42 +1085,66 @@ Int32 countHardLinks ( Char* name )
 
 
 /*---------------------------------------------*/
+/* Copy modification date, access date, permissions and owner from the
+   source to destination file.  We have to copy this meta-info off
+   into fileMetaInfo before starting to compress / decompress it,
+   because doing it afterwards means we get the wrong access time.
+
+   To complicate matters, in compress() and decompress() below, the
+   sequence of tests preceding the call to saveInputFileMetaInfo()
+   involves calling fileExists(), which in turn establishes its result
+   by attempting to fopen() the file, and if successful, immediately
+   fclose()ing it again.  So we have to assume that the fopen() call
+   does not cause the access time field to be updated.
+
+   Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems
+   to imply that merely doing open() will not affect the access time.
+   Therefore we merely need to hope that the C library only does
+   open() as a result of fopen(), and not any kind of read()-ahead
+   cleverness.
+
+   It sounds pretty fragile to me.  Whether this carries across
+   robustly to arbitrary Unix-like platforms (or even works robustly
+   on this one, RedHat 7.2) is unknown to me.  Nevertheless ...  
+*/
+#if BZ_UNIX
+static 
+struct MY_STAT fileMetaInfo;
+#endif
+
 static 
-void copyDatePermissionsAndOwner ( Char *srcName, Char *dstName )
+void saveInputFileMetaInfo ( Char *srcName )
 {
-#if BZ_UNIX
+#  if BZ_UNIX
+   IntNative retVal;
+   /* Note use of stat here, not lstat. */
+   retVal = MY_STAT( srcName, &fileMetaInfo );
+   ERROR_IF_NOT_ZERO ( retVal );
+#  endif
+}
+
+
+static 
+void applySavedMetaInfoToOutputFile ( 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;
+   uTimBuf.actime = fileMetaInfo.st_atime;
+   uTimBuf.modtime = fileMetaInfo.st_mtime;
 
-   retVal = chmod ( dstName, statBuf.st_mode );
+   retVal = chmod ( dstName, fileMetaInfo.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 );
+   retVal = chown ( dstName, fileMetaInfo.st_uid, fileMetaInfo.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
+#  endif
 }
 
 
@@ -1158,10 +1152,19 @@ void setInterimPermissions ( Char *dstName )
 static 
 Bool containsDubiousChars ( Char* name )
 {
-   Bool cdc = False;
+#  if BZ_UNIX
+   /* On unix, files can contain any characters and the file expansion
+    * is performed by the shell.
+    */
+   return False;
+#  else /* ! BZ_UNIX */
+   /* On non-unix (Win* platforms), wildcard characters are not allowed in 
+    * filenames.
+    */
    for (; *name != '\0'; name++)
-      if (*name == '?' || *name == '*') cdc = True;
-   return cdc;
+      if (*name == '?' || *name == '*') return True;
+   return False;
+#  endif /* BZ_UNIX */
 }
 
 
@@ -1201,6 +1204,7 @@ void compress ( Char *name )
    FILE  *inStr;
    FILE  *outStr;
    Int32 n, i;
+   struct MY_STAT statBuf;
 
    deleteOutputOnInterrupt = False;
 
@@ -1246,6 +1250,16 @@ void compress ( Char *name )
          return;
       }
    }
+   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
    if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
       if (noisy)
       fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
@@ -1253,11 +1267,15 @@ void compress ( Char *name )
       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 && fileExists ( outName ) ) {
+      if (forceOverwrite) {
+        remove(outName);
+      } else {
+        fprintf ( stderr, "%s: Output file %s already exists.\n",
+                  progName, outName );
+        setExit(1);
+        return;
+      }
    }
    if ( srcMode == SM_F2F && !forceOverwrite &&
         (n=countHardLinks ( inName )) > 0) {
@@ -1267,6 +1285,12 @@ void compress ( Char *name )
       return;
    }
 
+   if ( srcMode == SM_F2F ) {
+      /* Save the file's meta-info before we open it.  Doing it later
+         means we mess up the access times. */
+      saveInputFileMetaInfo ( inName );
+   }
+
    switch ( srcMode ) {
 
       case SM_I2O:
@@ -1306,7 +1330,7 @@ void compress ( Char *name )
 
       case SM_F2F:
          inStr = fopen ( inName, "rb" );
-         outStr = fopen ( outName, "wb" );
+         outStr = fopen_output_safely ( outName, "wb" );
          if ( outStr == NULL) {
             fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
                       progName, outName, strerror(errno) );
@@ -1321,7 +1345,6 @@ void compress ( Char *name )
             setExit(1);
             return;
          };
-         setInterimPermissions ( outName );
          break;
 
       default:
@@ -1343,7 +1366,7 @@ void compress ( Char *name )
 
    /*--- If there was an I/O error, we won't get here. ---*/
    if ( srcMode == SM_F2F ) {
-      copyDatePermissionsAndOwner ( inName, outName );
+      applySavedMetaInfoToOutputFile ( outName );
       deleteOutputOnInterrupt = False;
       if ( !keepInputFiles ) {
          IntNative retVal = remove ( inName );
@@ -1364,6 +1387,7 @@ void uncompress ( Char *name )
    Int32 n, i;
    Bool  magicNumberOK;
    Bool  cantGuess;
+   struct MY_STAT statBuf;
 
    deleteOutputOnInterrupt = False;
 
@@ -1405,6 +1429,16 @@ void uncompress ( Char *name )
       setExit(1);
       return;
    }
+   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
    if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
       if (noisy)
       fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
@@ -1419,11 +1453,15 @@ void uncompress ( Char *name )
                 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 && fileExists ( outName ) ) {
+      if (forceOverwrite) {
+       remove(outName);
+      } else {
+        fprintf ( stderr, "%s: Output file %s already exists.\n",
+                  progName, outName );
+        setExit(1);
+        return;
+      }
    }
    if ( srcMode == SM_F2F && !forceOverwrite &&
         (n=countHardLinks ( inName ) ) > 0) {
@@ -1433,6 +1471,12 @@ void uncompress ( Char *name )
       return;
    }
 
+   if ( srcMode == SM_F2F ) {
+      /* Save the file's meta-info before we open it.  Doing it later
+         means we mess up the access times. */
+      saveInputFileMetaInfo ( inName );
+   }
+
    switch ( srcMode ) {
 
       case SM_I2O:
@@ -1463,7 +1507,7 @@ void uncompress ( Char *name )
 
       case SM_F2F:
          inStr = fopen ( inName, "rb" );
-         outStr = fopen ( outName, "wb" );
+         outStr = fopen_output_safely ( outName, "wb" );
          if ( outStr == NULL) {
             fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
                       progName, outName, strerror(errno) );
@@ -1478,7 +1522,6 @@ void uncompress ( Char *name )
             setExit(1);
             return;
          };
-         setInterimPermissions ( outName );
          break;
 
       default:
@@ -1501,7 +1544,7 @@ void uncompress ( Char *name )
    /*--- If there was an I/O error, we won't get here. ---*/
    if ( magicNumberOK ) {
       if ( srcMode == SM_F2F ) {
-         copyDatePermissionsAndOwner ( inName, outName );
+         applySavedMetaInfoToOutputFile ( outName );
          deleteOutputOnInterrupt = False;
          if ( !keepInputFiles ) {
             IntNative retVal = remove ( inName );
@@ -1539,6 +1582,7 @@ void testf ( Char *name )
 {
    FILE *inStr;
    Bool allOK;
+   struct MY_STAT statBuf;
 
    deleteOutputOnInterrupt = False;
 
@@ -1565,6 +1609,16 @@ void testf ( Char *name )
       setExit(1);
       return;
    }
+   if ( srcMode != SM_I2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
 
    switch ( srcMode ) {
 
@@ -1603,6 +1657,7 @@ void testf ( Char *name )
    }
 
    /*--- Now the input handle is sane.  Do the Biz. ---*/
+   outputHandleJustInCase = NULL;
    allOK = testStream ( inStr );
 
    if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
@@ -1619,7 +1674,7 @@ void license ( void )
     "bzip2, a block-sorting file compressor.  "
     "Version %s.\n"
     "   \n"
-    "   Copyright (C) 1996-2000 by Julian Seward.\n"
+    "   Copyright (C) 1996-2002 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"
@@ -1658,6 +1713,8 @@ void usage ( Char *fullProgName )
       "   -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"
+      "   --fast              alias for -1\n"
+      "   --best              alias for -9\n"
       "\n"
       "   If invoked as `bzip2', default action is to compress.\n"
       "              as `bunzip2',  default action is to decompress.\n"
@@ -1666,9 +1723,9 @@ void usage ( Char *fullProgName )
       "   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
+#     if BZ_UNIX
       "\n"
-#endif
+#     endif
       ,
 
       BZ2_bzlibVersion(),
@@ -1818,11 +1875,11 @@ IntNative main ( IntNative argc, Char *argv[] )
 
    /*-- Set up signal handlers for mem access errors --*/
    signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
-#if BZ_UNIX
-#ifndef __DJGPP__
+#  if BZ_UNIX
+#  ifndef __DJGPP__
    signal (SIGBUS,  mySIGSEGVorSIGBUScatcher);
-#endif
-#endif
+#  endif
+#  endif
 
    copyFileName ( inName,  "(none)" );
    copyFileName ( outName, "(none)" );
@@ -1933,6 +1990,8 @@ IntNative main ( IntNative argc, Char *argv[] )
       if (ISFLAG("--exponential"))       workFactor = 1;             else 
       if (ISFLAG("--repetitive-best"))   redundant(aa->name);        else
       if (ISFLAG("--repetitive-fast"))   redundant(aa->name);        else
+      if (ISFLAG("--fast"))              blockSize100k = 1;          else
+      if (ISFLAG("--best"))              blockSize100k = 9;          else
       if (ISFLAG("--verbose"))           verbosity++;                else
       if (ISFLAG("--help"))              { usage ( progName ); exit ( 0 ); }
          else
index 4f1ae8620cef98b08f859a0d7afbcc88cbd7d056..6afe3588675e8abd68bb762d783b5b313658695d 100644 (file)
@@ -1,7 +1,6 @@
 
-
 NAME
-       bzip2, bunzip2 - a block-sorting file compressor, v1.0
+       bzip2, bunzip2 - a block-sorting file compressor, v1.0.2
        bzcat - decompresses files to stdout
        bzip2recover - recovers data from damaged bzip2 files
 
@@ -18,20 +17,20 @@ DESCRIPTION
        sorting text compression algorithm,  and  Huffman  coding.
        Compression  is  generally  considerably  better than that
        achieved by more conventional LZ77/LZ78-based compressors,
-       and  approaches  the performance of the PPM family of sta-
+       and  approaches  the performance of the PPM family of sta­
        tistical compressors.
 
        The command-line options are deliberately very similar  to
        those of GNU gzip, but they are not identical.
 
-       bzip2  expects  a list of file names to accompany the com-
+       bzip2  expects  a list of file names to accompany the com­
        mand-line flags.  Each file is replaced  by  a  compressed
        version  of  itself,  with  the  name "original_name.bz2".
-       Each compressed file has the same modification date,  per-
-       missions, and, when possible, ownership as the correspond-
+       Each compressed file has the same modification date,  per­
+       missions, and, when possible, ownership as the correspond­
        ing original, so that these properties  can  be  correctly
        restored  at  decompression  time.   File name handling is
-       naive in the sense that there is no mechanism for preserv-
+       naive in the sense that there is no mechanism for preserv­
        ing  original file names, permissions, ownerships or dates
        in filesystems which lack these concepts, or have  serious
        file name length restrictions, such as MS-DOS.
@@ -62,23 +61,23 @@ DESCRIPTION
        guess the name of the original file, and uses the original
        name with .out appended.
 
-       As  with compression, supplying no filenames causes decom-
+       As  with compression, supplying no filenames causes decom­
        pression from standard input to standard output.
 
-       bunzip2 will correctly decompress a file which is the con-
+       bunzip2 will correctly decompress a file which is the con­
        catenation of two or more compressed files.  The result is
        the concatenation of the corresponding uncompressed files.
        Integrity testing (-t) of concatenated compressed files is
        also supported.
 
        You can also compress or decompress files to the  standard
-       output  by giving the -c flag.  Multiple files may be com-
+       output  by giving the -c flag.  Multiple files may be com­
        pressed and decompressed like this.  The resulting outputs
        are  fed  sequentially to stdout.  Compression of multiple
-       files in this manner generates a stream containing  multi-
+       files in this manner generates a stream containing  multi­
        ple compressed file representations.  Such a stream can be
        decompressed correctly only  by  bzip2  version  0.9.0  or
-       later.   Earlier  versions of bzip2 will stop after decom-
+       later.   Earlier  versions of bzip2 will stop after decom­
        pressing the first file in the stream.
 
        bzcat (or bzip2 -dc) decompresses all specified  files  to
@@ -99,7 +98,7 @@ DESCRIPTION
 
        As a self-check for your  protection,  bzip2  uses  32-bit
        CRCs  to make sure that the decompressed version of a file
-       is identical to the original.  This guards against corrup-
+       is identical to the original.  This guards against corrup­
        tion  of  the compressed data, and against undetected bugs
        in bzip2 (hopefully very unlikely).  The chances  of  data
        corruption  going  undetected  is  microscopic,  about one
@@ -127,8 +126,8 @@ OPTIONS
               and forces bzip2 to decompress.
 
        -z --compress
-              The  complement  to -d: forces compression, regard-
-              less of the invokation name.
+              The   complement   to   -d:   forces   compression,
+              regardless of the invocation name.
 
        -t --test
               Check integrity of the specified file(s), but don't
@@ -141,6 +140,11 @@ OPTIONS
               forces bzip2 to break hard links to files, which it
               otherwise wouldn't do.
 
+              bzip2  normally  declines to decompress files which
+              don't have the  correct  magic  header  bytes.   If
+              forced  (-f),  however,  it  will  pass  such files
+              through unmodified.  This is how GNU gzip  behaves.
+
        -k --keep
               Keep  (don't delete) input files during compression
               or decompression.
@@ -167,7 +171,7 @@ OPTIONS
 
        -v --verbose
               Verbose mode -- show the compression ratio for each
-              file  processed.   Further  -v's  increase the ver-
+              file  processed.   Further  -v's  increase the ver­
               bosity level, spewing out lots of information which
               is primarily of interest for diagnostic purposes.
 
@@ -175,20 +179,24 @@ OPTIONS
               Display  the  software  version,  license terms and
               conditions.
 
-       -1 to -9
+       -1 (or --fast) to -9 (or --best)
               Set the block size to 100 k, 200 k ..  900  k  when
               compressing.   Has  no  effect  when decompressing.
-              See MEMORY MANAGEMENT below.
+              See MEMORY MANAGEMENT below.  The --fast and --best
+              aliases  are  primarily for GNU gzip compatibility.
+              In particular, --fast doesn't make things  signifi­
+              cantly  faster.   And  --best  merely  selects  the
+              default behaviour.
 
        --     Treats all subsequent arguments as file names, even
-              if they start with a dash.  This is so you can han-
+              if they start with a dash.  This is so you can han­
               dle files with names beginning  with  a  dash,  for
               example: bzip2 -- -myfilename.
 
        --repetitive-fast --repetitive-best
               These  flags  are  redundant  in versions 0.9.5 and
               above.  They provided some coarse control over  the
-              behaviour  of the sorting algorithm in earlier ver-
+              behaviour  of the sorting algorithm in earlier ver­
               sions, which was sometimes useful.  0.9.5 and above
               have  an  improved  algorithm  which  renders these
               flags irrelevant.
@@ -199,7 +207,7 @@ MEMORY MANAGEMENT
        affects  both  the  compression  ratio  achieved,  and the
        amount of memory needed for compression and decompression.
        The  flags  -1  through  -9  specify  the block size to be
-       100,000 bytes through 900,000 bytes (the default)  respec-
+       100,000 bytes through 900,000 bytes (the default)  respec­
        tively.   At  decompression  time, the block size used for
        compression is read from  the  header  of  the  compressed
        file, and bunzip2 then allocates itself just enough memory
@@ -227,13 +235,13 @@ MEMORY MANAGEMENT
        bunzip2 will require about 3700 kbytes to decompress.   To
        support decompression of any file on a 4 megabyte machine,
        bunzip2 has an option to  decompress  using  approximately
-       half this amount of memory, about 2300 kbytes.  Decompres-
+       half this amount of memory, about 2300 kbytes.  Decompres­
        sion speed is also halved, so you should use  this  option
        only where necessary.  The relevant flag is -s.
 
-       In general, try and use the largest block size memory con-
+       In general, try and use the largest block size memory con­
        straints  allow,  since  that  maximises  the  compression
-       achieved.   Compression and decompression speed are virtu-
+       achieved.   Compression and decompression speed are virtu­
        ally unaffected by block size.
 
        Another significant point applies to files which fit in  a
@@ -249,11 +257,11 @@ MEMORY MANAGEMENT
 
        Here  is a table which summarises the maximum memory usage
        for different block sizes.  Also  recorded  is  the  total
-       compressed  size for 14 files of the Calgary Text Compres-
+       compressed  size for 14 files of the Calgary Text Compres­
        sion Corpus totalling 3,141,622 bytes.  This column  gives
        some  feel  for  how  compression  varies with block size.
        These figures tend to understate the advantage  of  larger
-       block  sizes  for  larger files, since the Corpus is domi-
+       block  sizes  for  larger files, since the Corpus is domi­
        nated by smaller files.
 
                   Compress   Decompress   Decompress   Corpus
@@ -272,7 +280,7 @@ MEMORY MANAGEMENT
 
 RECOVERING DATA FROM DAMAGED FILES
        bzip2 compresses files in blocks, usually 900kbytes  long.
-       Each block is handled independently.  If a media or trans-
+       Each block is handled independently.  If a media or trans­
        mission error causes a multi-block  .bz2  file  to  become
        damaged,  it  may  be  possible  to  recover data from the
        undamaged blocks in the file.
@@ -289,19 +297,19 @@ RECOVERING DATA FROM DAMAGED FILES
        the integrity of the resulting files, and decompress those
        which are undamaged.
 
-       bzip2recover takes a single argument, the name of the dam-
-       aged file, and writes a number of files "rec0001file.bz2",
-       "rec0002file.bz2", etc, containing the  extracted  blocks.
-       The  output  filenames  are  designed  so  that the use of
-       wildcards in subsequent processing -- for example,  "bzip2
-       -dc   rec*file.bz2 > recovered_data" -- lists the files in
-       the correct order.
+       bzip2recover takes a single argument, the name of the dam­
+       aged    file,    and    writes    a    number   of   files
+       "rec00001file.bz2",  "rec00002file.bz2",  etc,  containing
+       the   extracted   blocks.   The   output   filenames   are
+       designed  so  that the use of wildcards in subsequent pro­
+       cessing  -- for example, "bzip2 -dc  rec*file.bz2 > recov­
+       ered_data" -- processes the files in the correct order.
 
        bzip2recover should be of most use dealing with large .bz2
        files,  as  these will contain many blocks.  It is clearly
        futile to use it on damaged single-block  files,  since  a
-       damaged  block  cannot  be recovered.  If you wish to min-
-       imise any potential data loss through media  or  transmis-
+       damaged  block  cannot  be recovered.  If you wish to min­
+       imise any potential data loss through media  or  transmis­
        sion errors, you might consider compressing with a smaller
        block size.
 
@@ -315,19 +323,19 @@ PERFORMANCE NOTES
        better  than previous versions in this respect.  The ratio
        between worst-case and average-case compression time is in
        the  region  of  10:1.  For previous versions, this figure
-       was more like 100:1.  You can use the -vvvv option to mon-
+       was more like 100:1.  You can use the -vvvv option to mon­
        itor progress in great detail, if you want.
 
        Decompression speed is unaffected by these phenomena.
 
        bzip2  usually  allocates  several  megabytes of memory to
-       operate in, and then charges all over it in a fairly  ran-
-       dom  fashion.   This means that performance, both for com-
+       operate in, and then charges all over it in a fairly  ran­
+       dom  fashion.   This means that performance, both for com­
        pressing and decompressing, is largely determined  by  the
        speed  at  which  your  machine  can service cache misses.
        Because of this, small changes to the code to  reduce  the
        miss  rate  have  been observed to give disproportionately
-       large performance improvements.  I imagine bzip2 will per-
+       large performance improvements.  I imagine bzip2 will per­
        form best on machines with very large caches.
 
 
@@ -337,40 +345,46 @@ CAVEATS
        but  the  details  of  what  the problem is sometimes seem
        rather misleading.
 
-       This manual page pertains to version 1.0 of bzip2.  Com-
+       This manual page pertains to version 1.0.2 of bzip2.  Com­
        pressed  data created by this version is entirely forwards
        and  backwards  compatible  with   the   previous   public
-       releases,  versions  0.1pl2, 0.9.0 and 0.9.5, but with the
-       following exception: 0.9.0 and above can correctly  decom-
-       press multiple concatenated compressed files.  0.1pl2 can-
-       not do this; it will stop  after  decompressing  just  the
-       first file in the stream.
-
-       bzip2recover  uses  32-bit integers to represent bit posi-
-       tions in compressed files, so it cannot handle  compressed
-       files  more than 512 megabytes long.  This could easily be
-       fixed.
+       releases,  versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0 and 1.0.1,
+       but with the following exception: 0.9.0 and above can cor­
+       rectly  decompress multiple concatenated compressed files.
+       0.1pl2 cannot do this; it will  stop  after  decompressing
+       just the first file in the stream.
+
+       bzip2recover  versions  prior  to  this  one,  1.0.2, used
+       32-bit integers to represent bit positions  in  compressed
+       files,  so  it could not handle compressed files more than
+       512 megabytes long.  Version 1.0.2 and above  uses  64-bit
+       ints  on  some platforms which support them (GNU supported
+       targets,  and  Windows).   To  establish  whether  or  not
+       bzip2recover  was  built  with  such  a limitation, run it
+       without arguments.  In any event you can build yourself an
+       unlimited version if you can recompile it with MaybeUInt64
+       set to be an unsigned 64-bit integer.
 
 
 AUTHOR
        Julian Seward, jseward@acm.org.
 
-       http://sourceware.cygnus.com/bzip2
-       http://www.muraroa.demon.co.uk
+       http://sources.redhat.com/bzip2
 
-       The ideas embodied in bzip2 are due to (at least) the fol-
+       The ideas embodied in bzip2 are due to (at least) the fol­
        lowing  people: Michael Burrows and David Wheeler (for the
        block sorting transformation), David Wheeler  (again,  for
-       the Huffman coder), Peter Fenwick (for the structured cod-
+       the Huffman coder), Peter Fenwick (for the structured cod­
        ing model in the original bzip, and many refinements), and
        Alistair  Moffat,  Radford  Neal  and  Ian Witten (for the
        arithmetic  coder  in  the  original  bzip).   I  am  much
-       indebted for their help, support and advice.  See the man-
+       indebted for their help, support and advice.  See the man­
        ual in the source distribution for pointers to sources  of
        documentation.  Christian von Roques encouraged me to look
-       for faster sorting algorithms, so as to speed up  compres-
+       for faster sorting algorithms, so as to speed up  compres­
        sion.  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.
+       compression performance.  The bz* scripts are derived from
+       those  of GNU gzip.  Many people sent patches, helped with
+       portability problems, lent machines, gave advice and  were
+       generally helpful.
 
index ba3d175632a77de125e5d2c2a346f1efb1cc27c2..286873b8c07ba8e055950f1245406317a3c381dd 100644 (file)
@@ -9,7 +9,7 @@
   salvage from damaged files created by the accompanying
   bzip2-1.0 program.
 
-  Copyright (C) 1996-2000 Julian R Seward.  All rights reserved.
+  Copyright (C) 1996-2002 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
 #include <stdlib.h>
 #include <string.h>
 
+
+/* This program records bit locations in the file to be recovered.
+   That means that if 64-bit ints are not supported, we will not
+   be able to recover .bz2 files over 512MB (2^32 bits) long.
+   On GNU supported platforms, we take advantage of the 64-bit
+   int support to circumvent this problem.  Ditto MSVC.
+
+   This change occurred in version 1.0.2; all prior versions have
+   the 512MB limitation.
+*/
+#ifdef __GNUC__
+   typedef  unsigned long long int  MaybeUInt64;
+#  define MaybeUInt64_FMT "%Lu"
+#else
+#ifdef _MSC_VER
+   typedef  unsigned __int64  MaybeUInt64;
+#  define MaybeUInt64_FMT "%I64u"
+#else
+   typedef  unsigned int   MaybeUInt64;
+#  define MaybeUInt64_FMT "%u"
+#endif
+#endif
+
 typedef  unsigned int   UInt32;
 typedef  int            Int32;
 typedef  unsigned char  UChar;
@@ -66,13 +89,25 @@ typedef  unsigned char  Bool;
 #define False   ((Bool)0)
 
 
-Char inFileName[2000];
-Char outFileName[2000];
-Char progName[2000];
+#define BZ_MAX_FILENAME 2000
+
+Char inFileName[BZ_MAX_FILENAME];
+Char outFileName[BZ_MAX_FILENAME];
+Char progName[BZ_MAX_FILENAME];
+
+MaybeUInt64 bytesOut = 0;
+MaybeUInt64 bytesIn  = 0;
 
-UInt32 bytesOut = 0;
-UInt32 bytesIn  = 0;
 
+/*---------------------------------------------------*/
+/*--- Header bytes                                ---*/
+/*---------------------------------------------------*/
+
+#define BZ_HDR_B 0x42                         /* 'B' */
+#define BZ_HDR_Z 0x5a                         /* 'Z' */
+#define BZ_HDR_h 0x68                         /* 'h' */
+#define BZ_HDR_0 0x30                         /* '0' */
 
 /*---------------------------------------------------*/
 /*--- I/O errors                                  ---*/
@@ -116,6 +151,23 @@ void mallocFail ( Int32 n )
 }
 
 
+/*---------------------------------------------*/
+void tooManyBlocks ( Int32 max_handled_blocks )
+{
+   fprintf ( stderr,
+             "%s: `%s' appears to contain more than %d blocks\n",
+            progName, inFileName, max_handled_blocks );
+   fprintf ( stderr,
+             "%s: and cannot be handled.  To fix, increase\n",
+             progName );
+   fprintf ( stderr, 
+             "%s: BZ_MAX_HANDLED_BLOCKS in bzip2recover.c, and recompile.\n",
+             progName );
+   exit ( 1 );
+}
+
+
+
 /*---------------------------------------------------*/
 /*--- Bit stream I/O                              ---*/
 /*---------------------------------------------------*/
@@ -254,27 +306,37 @@ Bool endsInBz2 ( Char* name )
 /*---                                             ---*/
 /*---------------------------------------------------*/
 
+/* This logic isn't really right when it comes to Cygwin. */
+#ifdef _WIN32
+#  define  BZ_SPLIT_SYM  '\\'  /* path splitter on Windows platform */
+#else
+#  define  BZ_SPLIT_SYM  '/'   /* path splitter on Unix platform */
+#endif
+
 #define BLOCK_HEADER_HI  0x00003141UL
 #define BLOCK_HEADER_LO  0x59265359UL
 
 #define BLOCK_ENDMARK_HI 0x00001772UL
 #define BLOCK_ENDMARK_LO 0x45385090UL
 
+/* Increase if necessary.  However, a .bz2 file with > 50000 blocks
+   would have an uncompressed size of at least 40GB, so the chances
+   are low you'll need to up this.
+*/
+#define BZ_MAX_HANDLED_BLOCKS 50000
 
-UInt32 bStart[20000];
-UInt32 bEnd[20000];
-UInt32 rbStart[20000];
-UInt32 rbEnd[20000];
+MaybeUInt64 bStart [BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 bEnd   [BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 rbStart[BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 rbEnd  [BZ_MAX_HANDLED_BLOCKS];
 
 Int32 main ( Int32 argc, Char** argv )
 {
    FILE*       inFile;
    FILE*       outFile;
    BitStream*  bsIn, *bsWr;
-   Int32       currBlock, b, wrBlock;
-   UInt32      bitsRead;
-   Int32       rbCtr;
-
+   Int32       b, wrBlock, currBlock, rbCtr;
+   MaybeUInt64 bitsRead;
 
    UInt32      buffHi, buffLo, blockCRC;
    Char*       p;
@@ -282,11 +344,37 @@ Int32 main ( Int32 argc, Char** argv )
    strcpy ( progName, argv[0] );
    inFileName[0] = outFileName[0] = 0;
 
-   fprintf ( stderr, "bzip2recover 1.0: extracts blocks from damaged .bz2 files.\n" );
+   fprintf ( stderr, 
+             "bzip2recover 1.0.2: extracts blocks from damaged .bz2 files.\n" );
 
    if (argc != 2) {
       fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n",
                         progName, progName );
+      switch (sizeof(MaybeUInt64)) {
+         case 8:
+            fprintf(stderr, 
+                    "\trestrictions on size of recovered file: None\n");
+            break;
+         case 4:
+            fprintf(stderr, 
+                    "\trestrictions on size of recovered file: 512 MB\n");
+            fprintf(stderr, 
+                    "\tto circumvent, recompile with MaybeUInt64 as an\n"
+                    "\tunsigned 64-bit int.\n");
+            break;
+         default:
+            fprintf(stderr, 
+                    "\tsizeof(MaybeUInt64) is not 4 or 8 -- "
+                    "configuration error.\n");
+            break;
+      }
+      exit(1);
+   }
+
+   if (strlen(argv[1]) >= BZ_MAX_FILENAME-20) {
+      fprintf ( stderr, 
+                "%s: supplied filename is suspiciously (>= %d chars) long.  Bye!\n",
+                progName, strlen(argv[1]) );
       exit(1);
    }
 
@@ -316,7 +404,8 @@ Int32 main ( Int32 argc, Char** argv )
             (bitsRead - bStart[currBlock]) >= 40) {
             bEnd[currBlock] = bitsRead-1;
             if (currBlock > 0)
-               fprintf ( stderr, "   block %d runs from %d to %d (incomplete)\n",
+               fprintf ( stderr, "   block %d runs from " MaybeUInt64_FMT 
+                                 " to " MaybeUInt64_FMT " (incomplete)\n",
                          currBlock,  bStart[currBlock], bEnd[currBlock] );
          } else
             currBlock--;
@@ -330,17 +419,22 @@ Int32 main ( Int32 argc, Char** argv )
            ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI 
              && buffLo == BLOCK_ENDMARK_LO)
          ) {
-         if (bitsRead > 49)
-            bEnd[currBlock] = bitsRead-49; else
+         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",
+            fprintf ( stderr, "   block %d runs from " MaybeUInt64_FMT 
+                              " to " MaybeUInt64_FMT "\n",
                       rbCtr+1,  bStart[currBlock], bEnd[currBlock] );
             rbStart[rbCtr] = bStart[currBlock];
             rbEnd[rbCtr] = bEnd[currBlock];
             rbCtr++;
          }
+         if (currBlock >= BZ_MAX_HANDLED_BLOCKS)
+            tooManyBlocks(BZ_MAX_HANDLED_BLOCKS);
          currBlock++;
 
          bStart[currBlock] = bitsRead;
@@ -400,10 +494,25 @@ Int32 main ( Int32 argc, Char** argv )
          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 );
+         /* Create the output file name, correctly handling leading paths. 
+            (31.10.2001 by Sergey E. Kusikov) */
+         Char* split;
+         Int32 ofs, k;
+         for (k = 0; k < BZ_MAX_FILENAME; k++) 
+            outFileName[k] = 0;
+         strcpy (outFileName, inFileName);
+         split = strrchr (outFileName, BZ_SPLIT_SYM);
+         if (split == NULL) {
+            split = outFileName;
+         } else {
+            ++split;
+        }
+        /* Now split points to the start of the basename. */
+         ofs  = split - outFileName;
+         sprintf (split, "rec%5d", wrBlock+1);
+         for (p = split; *p != 0; p++) if (*p == ' ') *p = '0';
+         strcat (outFileName, inFileName + ofs);
+
          if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" );
 
          fprintf ( stderr, "   writing block %d to `%s' ...\n",
@@ -416,8 +525,10 @@ Int32 main ( Int32 argc, Char** argv )
             exit(1);
          }
          bsWr = bsOpenWriteStream ( outFile );
-         bsPutUChar ( bsWr, 'B' ); bsPutUChar ( bsWr, 'Z' );
-         bsPutUChar ( bsWr, 'h' ); bsPutUChar ( bsWr, '9' );
+         bsPutUChar ( bsWr, BZ_HDR_B );    
+         bsPutUChar ( bsWr, BZ_HDR_Z );    
+         bsPutUChar ( bsWr, BZ_HDR_h );    
+         bsPutUChar ( bsWr, BZ_HDR_0 + 9 );
          bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 );
          bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 );
          bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 );
index 4a06d9f14b919955fb0c5edf994fc430d8884435..7d1cb275f5b90b7ddaa93d37c736b5abfd674766 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
@@ -93,10 +93,39 @@ void BZ2_bz__AssertH__fail ( int errcode )
       "component, you should also report this bug to the author(s)\n"
       "of that program.  Please make an effort to report this bug;\n"
       "timely and accurate bug reports eventually lead to higher\n"
-      "quality software.  Thanks.  Julian Seward, 21 March 2000.\n\n",
+      "quality software.  Thanks.  Julian Seward, 30 December 2001.\n\n",
       errcode,
       BZ2_bzlibVersion()
    );
+
+   if (errcode == 1007) {
+   fprintf(stderr,
+      "\n*** A special note about internal error number 1007 ***\n"
+      "\n"
+      "Experience suggests that a common cause of i.e. 1007\n"
+      "is unreliable memory or other hardware.  The 1007 assertion\n"
+      "just happens to cross-check the results of huge numbers of\n"
+      "memory reads/writes, and so acts (unintendedly) as a stress\n"
+      "test of your memory system.\n"
+      "\n"
+      "I suggest the following: try compressing the file again,\n"
+      "possibly monitoring progress in detail with the -vv flag.\n"
+      "\n"
+      "* If the error cannot be reproduced, and/or happens at different\n"
+      "  points in compression, you may have a flaky memory system.\n"
+      "  Try a memory-test program.  I have used Memtest86\n"
+      "  (www.memtest86.com).  At the time of writing it is free (GPLd).\n"
+      "  Memtest86 tests memory much more thorougly than your BIOSs\n"
+      "  power-on test, and may find failures that the BIOS doesn't.\n"
+      "\n"
+      "* If the error can be repeatably reproduced, this is a bug in\n"
+      "  bzip2, and I would very much like to hear about it.  Please\n"
+      "  let me know, and, ideally, save a copy of the file causing the\n"
+      "  problem -- without which I will be unable to investigate it.\n"
+      "\n"
+   );
+   }
+
    exit(3);
 }
 #endif
@@ -1402,7 +1431,7 @@ BZFILE * bzopen_or_bzdopen
          smallMode = 1; break;
       default:
          if (isdigit((int)(*mode))) {
-            blockSize100k = *mode-'0';
+            blockSize100k = *mode-BZ_HDR_0;
          }
       }
       mode++;
index 47b1d44c9fafcbfb1269dc9a9528c3787fc8c333..9ac43a169da5ee0d09860f7fdae936faea019e85 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
@@ -86,7 +86,7 @@ extern "C" {
 #define BZ_CONFIG_ERROR      (-9)
 
 typedef 
-   struct  {
+   struct {
       char *next_in;
       unsigned int avail_in;
       unsigned int total_in_lo32;
@@ -110,8 +110,10 @@ typedef
 #define BZ_EXPORT
 #endif
 
+/* Need a definitition for FILE */
+#include <stdio.h>
+
 #ifdef _WIN32
-#   include <stdio.h>
 #   include <windows.h>
 #   ifdef small
       /* windows.h define small to char */
index fb51c7a1d4b42dccc85a73591fd6c60a6f55c540..ff973c3bfd0314eeba4d2dd5f620ab880144f90f 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
@@ -76,7 +76,7 @@
 
 /*-- General stuff. --*/
 
-#define BZ_VERSION  "1.0.1, 23-June-2000"
+#define BZ_VERSION  "1.0.2, 30-Dec-2001"
 
 typedef char            Char;
 typedef unsigned char   Bool;
@@ -137,6 +137,13 @@ extern void bz_internal_error ( int errcode );
 #define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))
 
 
+/*-- Header bytes. --*/
+
+#define BZ_HDR_B 0x42   /* 'B' */
+#define BZ_HDR_Z 0x5a   /* 'Z' */
+#define BZ_HDR_h 0x68   /* 'h' */
+#define BZ_HDR_0 0x30   /* '0' */
+  
 /*-- Constants for the back end. --*/
 
 #define BZ_MAX_ALPHA_SIZE 258
diff --git a/bz2lib/bzmore b/bz2lib/bzmore
new file mode 100644 (file)
index 0000000..d314043
--- /dev/null
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# Bzmore wrapped for bzip2, 
+# adapted from zmore by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.
+
+PATH="/usr/bin:$PATH"; export PATH
+
+prog=`echo $0 | sed 's|.*/||'`
+case "$prog" in
+       *less)  more=less       ;;
+       *)      more=more       ;;
+esac
+
+if test "`echo -n a`" = "-n a"; then
+  # looks like a SysV system:
+  n1=''; n2='\c'
+else
+  n1='-n'; n2=''
+fi
+oldtty=`stty -g 2>/dev/null`
+if stty -cbreak 2>/dev/null; then
+  cb='cbreak'; ncb='-cbreak'
+else
+  # 'stty min 1' resets eof to ^a on both SunOS and SysV!
+  cb='min 1 -icanon'; ncb='icanon eof ^d'
+fi
+if test $? -eq 0 -a -n "$oldtty"; then
+   trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15
+else
+   trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15
+fi
+
+if test $# = 0; then
+    if test -t 0; then
+       echo usage: $prog files...
+    else
+       bzip2 -cdfq | eval $more
+    fi
+else
+    FIRST=1
+    for FILE
+    do
+       if test $FIRST -eq 0; then
+               echo $n1 "--More--(Next file: $FILE)$n2"
+               stty $cb -echo 2>/dev/null
+               ANS=`dd bs=1 count=1 2>/dev/null` 
+               stty $ncb echo 2>/dev/null
+               echo " "
+               if test "$ANS" = 'e' -o "$ANS" = 'q'; then
+                       exit
+               fi
+       fi
+       if test "$ANS" != 's'; then
+               echo "------> $FILE <------"
+               bzip2 -cdfq "$FILE" | eval $more
+       fi
+       if test -t; then
+               FIRST=0
+       fi
+    done
+fi
diff --git a/bz2lib/bzmore.1 b/bz2lib/bzmore.1
new file mode 100644 (file)
index 0000000..b437d3b
--- /dev/null
@@ -0,0 +1,152 @@
+.\"Shamelessly copied from zmore.1 by Philippe Troin <phil@fifi.org>
+.\"for Debian GNU/Linux
+.TH BZMORE 1
+.SH NAME
+bzmore, bzless \- file perusal filter for crt viewing of bzip2 compressed text
+.SH SYNOPSIS
+.B bzmore
+[ name ...  ]
+.br
+.B bzless
+[ name ...  ]
+.SH NOTE
+In the following description,
+.I bzless
+and
+.I less
+can be used interchangeably with
+.I bzmore
+and
+.I more.
+.SH DESCRIPTION
+.I  Bzmore
+is a filter which allows examination of compressed or plain text files
+one screenful at a time on a soft-copy terminal.
+.I bzmore
+works on files compressed with
+.I bzip2
+and also on uncompressed files.
+If a file does not exist,
+.I bzmore
+looks for a file of the same name with the addition of a .bz2 suffix.
+.PP
+.I Bzmore
+normally pauses after each screenful, printing --More--
+at the bottom of the screen.
+If the user then types a carriage return, one more line is displayed.
+If the user hits a space,
+another screenful is displayed.  Other possibilities are enumerated later.
+.PP
+.I Bzmore
+looks in the file
+.I /etc/termcap
+to determine terminal characteristics,
+and to determine the default window size.
+On a terminal capable of displaying 24 lines,
+the default window size is 22 lines.
+Other sequences which may be typed when
+.I bzmore
+pauses, and their effects, are as follows (\fIi\fP is an optional integer
+argument, defaulting to 1) :
+.PP
+.IP \fIi\|\fP<space>
+display
+.I i
+more lines, (or another screenful if no argument is given)
+.PP
+.IP ^D
+display 11 more lines (a ``scroll'').
+If
+.I i
+is given, then the scroll size is set to \fIi\|\fP.
+.PP
+.IP d
+same as ^D (control-D)
+.PP
+.IP \fIi\|\fPz
+same as typing a space except that \fIi\|\fP, if present, becomes the new
+window size.  Note that the window size reverts back to the default at the
+end of the current file.
+.PP
+.IP \fIi\|\fPs
+skip \fIi\|\fP lines and print a screenful of lines
+.PP
+.IP \fIi\|\fPf
+skip \fIi\fP screenfuls and print a screenful of lines
+.PP
+.IP "q or Q"
+quit reading the current file; go on to the next (if any)
+.PP
+.IP "e or q"
+When the prompt --More--(Next file: 
+.IR file )
+is printed, this command causes bzmore to exit.
+.PP
+.IP s
+When the prompt --More--(Next file: 
+.IR file )
+is printed, this command causes bzmore to skip the next file and continue.
+.PP 
+.IP =
+Display the current line number.
+.PP
+.IP \fIi\|\fP/expr
+search for the \fIi\|\fP-th occurrence of the regular expression \fIexpr.\fP
+If the pattern is not found,
+.I bzmore
+goes on to the next file (if any).
+Otherwise, a screenful is displayed, starting two lines before the place
+where the expression was found.
+The user's erase and kill characters may be used to edit the regular
+expression.
+Erasing back past the first column cancels the search command.
+.PP
+.IP \fIi\|\fPn
+search for the \fIi\|\fP-th occurrence of the last regular expression entered.
+.PP
+.IP !command
+invoke a shell with \fIcommand\|\fP. 
+The character `!' in "command" are replaced with the
+previous shell command.  The sequence "\\!" is replaced by "!".
+.PP
+.IP ":q or :Q"
+quit reading the current file; go on to the next (if any)
+(same as q or Q).
+.PP
+.IP .
+(dot) repeat the previous command.
+.PP
+The commands take effect immediately, i.e., it is not necessary to
+type a carriage return.
+Up to the time when the command character itself is given,
+the user may hit the line kill character to cancel the numerical
+argument being formed.
+In addition, the user may hit the erase character to redisplay the
+--More-- message.
+.PP
+At any time when output is being sent to the terminal, the user can
+hit the quit key (normally control\-\\).
+.I Bzmore
+will stop sending output, and will display the usual --More--
+prompt.
+The user may then enter one of the above commands in the normal manner.
+Unfortunately, some output is lost when this is done, due to the
+fact that any characters waiting in the terminal's output queue
+are flushed when the quit signal occurs.
+.PP
+The terminal is set to
+.I noecho
+mode by this program so that the output can be continuous.
+What you type will thus not show on your terminal, except for the / and !
+commands.
+.PP
+If the standard output is not a teletype, then
+.I bzmore
+acts just like
+.I bzcat,
+except that a header is printed before each file.
+.SH FILES
+.DT
+/etc/termcap           Terminal data base
+.SH "SEE ALSO"
+more(1), less(1), bzip2(1), bzdiff(1), bzgrep(1)
index cc5e31d6f0ec654641e038277d5d89581f1f0cbf..56501c1155335fcdfa8d151a9454155c4f98306b 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
@@ -663,10 +663,10 @@ void BZ2_compressBlock ( EState* s, Bool is_last_block )
    /*-- 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) );
+      bsPutUChar ( s, BZ_HDR_B );
+      bsPutUChar ( s, BZ_HDR_Z );
+      bsPutUChar ( s, BZ_HDR_h );
+      bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
    }
 
    if (s->nblock > 0) {
index beff7d47b37695e1c55eb4927c0fe3f61546780b..b1bb3c428c0a2b36795b15f93ba6c7ed6a74ee9b 100644 (file)
@@ -1617,396 +1617,6 @@ host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
 host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AR="ar"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="ar"
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-echo "${ECHO_T}$ac_ct_AR" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  AR=$ac_ct_AR
-else
-  AR="$ac_cv_prog_AR"
-fi
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nm; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_NM+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$NM"; then
-  ac_cv_prog_NM="$NM" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_NM="${ac_tool_prefix}nm"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-NM=$ac_cv_prog_NM
-if test -n "$NM"; then
-  echo "$as_me:$LINENO: result: $NM" >&5
-echo "${ECHO_T}$NM" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_NM"; then
-  ac_ct_NM=$NM
-  # Extract the first word of "nm", so it can be a program name with args.
-set dummy nm; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_NM+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_NM"; then
-  ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_NM="nm"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_NM" && ac_cv_prog_ac_ct_NM="nm"
-fi
-fi
-ac_ct_NM=$ac_cv_prog_ac_ct_NM
-if test -n "$ac_ct_NM"; then
-  echo "$as_me:$LINENO: result: $ac_ct_NM" >&5
-echo "${ECHO_T}$ac_ct_NM" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  NM=$ac_ct_NM
-else
-  NM="$ac_cv_prog_NM"
-fi
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB="ranlib"
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  RANLIB=$ac_ct_RANLIB
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-        if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-          if test $ac_prog = install &&
-            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # AIX install.  It has an incompatible calling convention.
-            :
-          elif test $ac_prog = install &&
-            grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-            # program-specific install script used by HP pwplus--don't use.
-            :
-          else
-            ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-            break 3
-          fi
-        fi
-      done
-    done
-    ;;
-esac
-done
-
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL=$ac_install_sh
-  fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -f .deps 2>/dev/null
-mkdir .deps 2>/dev/null
-if test -d .deps; then
-  DEPDIR=.deps
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  DEPDIR=_deps
-fi
-rmdir .deps 2>/dev/null
-
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-doit:
-       @echo done
-END
-# If we don't find an include directive, just comment out the code.
-echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
-fi
-
-
-echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then
-  enableval="$enable_dependency_tracking"
-
-fi;
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
-
-
-if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2764,6 +2374,79 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
+rm -f .deps 2>/dev/null
+mkdir .deps 2>/dev/null
+if test -d .deps; then
+  DEPDIR=.deps
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  DEPDIR=_deps
+fi
+rmdir .deps 2>/dev/null
+
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+doit:
+       @echo done
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
 
 depcc="$CC"   am_compiler_list=
 
@@ -2834,6 +2517,86 @@ echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
 
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3177,8 +2940,6 @@ fi
 
 
 
-
-
 ac_config_files="$ac_config_files Makefile"
 
 cat >confcache <<\_ACEOF
@@ -3813,12 +3574,6 @@ s,@host@,$host,;t t
 s,@host_cpu@,$host_cpu,;t t
 s,@host_vendor@,$host_vendor,;t t
 s,@host_os@,$host_os,;t t
-s,@AR@,$AR,;t t
-s,@ac_ct_AR@,$ac_ct_AR,;t t
-s,@NM@,$NM,;t t
-s,@ac_ct_NM@,$ac_ct_NM,;t t
-s,@RANLIB@,$RANLIB,;t t
-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
 s,@CC@,$CC,;t t
 s,@CFLAGS@,$CFLAGS,;t t
 s,@LDFLAGS@,$LDFLAGS,;t t
@@ -3833,6 +3588,8 @@ s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
 s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
 s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
 s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
 s,@CPP@,$CPP,;t t
 s,@installdata@,$installdata,;t t
 s,@uninstalldata@,$uninstalldata,;t t
index 618c51dda1b9d13b1f6e488f9be822e6c91de2b9..031f4c0fea798c23f8111514a3b6072b9a311623 100644 (file)
@@ -9,14 +9,10 @@ AM_MAINTAINER_MODE
 
 CPPFLAGS=-U_WIN32
 AC_CANONICAL_HOST
-AC_CHECK_TOOL(AR, ar, ar)
-AC_CHECK_TOOL(NM, nm, nm)
-AC_CHECK_TOOL(RANLIB, ranlib, ranlib)
+AC_PROG_CC
+AC_PROG_RANLIB
 dnl LIB_AC_PROG_CC
-AC_PROG_INSTALL
 AC_HEADER_STDC([])
-AC_EXEEXT
-AC_OBJEXT
 
 AC_SUBST(installdata)dnl
 AC_SUBST(uninstalldata)dnl
index 61c040c4fcfc9c337c39a2e1e0cda0e3dbd8776e..b16746ae19423480b225756973542d531957ab3d 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
index cdced188906179731a341da83ede4d974b4789b8..e9213473acf452ed40f4123db0987824ca1afe64 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
@@ -235,18 +235,18 @@ Int32 BZ2_decompress ( DState* s )
    switch (s->state) {
 
       GET_UCHAR(BZ_X_MAGIC_1, uc);
-      if (uc != 'B') RETURN(BZ_DATA_ERROR_MAGIC);
+      if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);
 
       GET_UCHAR(BZ_X_MAGIC_2, uc);
-      if (uc != 'Z') RETURN(BZ_DATA_ERROR_MAGIC);
+      if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);
 
       GET_UCHAR(BZ_X_MAGIC_3, uc)
-      if (uc != 'h') RETURN(BZ_DATA_ERROR_MAGIC);
+      if (uc != BZ_HDR_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->blockSize100k < (BZ_HDR_0 + 1) || 
+          s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
+      s->blockSize100k -= BZ_HDR_0;
 
       if (s->smallDecompress) {
          s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
index f79279cef846649a97425a0e0b3eb890da8929aa..2d7dcca4cb595f3be13f21bbe5a65c1d255cb1dd 100644 (file)
@@ -19,7 +19,7 @@
 \r
 #ifdef _WIN32\r
 \r
-#define BZ2_LIBNAME "libbz2-1.0.0.DLL" \r
+#define BZ2_LIBNAME "libbz2-1.0.2.DLL" \r
 \r
 #include <windows.h>\r
 static int BZ2DLLLoaded = 0;\r
@@ -130,8 +130,8 @@ int main(int argc,char *argv[])
          }else{\r
             fp_w = stdout;\r
          }\r
-         if((BZ2fp_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)\r
-            || (BZ2fp_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){\r
+         if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)\r
+            || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){\r
             printf("can't bz2openstream\n");\r
             exit(1);\r
          }\r
index 9b446c4b36d15356ad86fbe24951e048caf965ef..293095c170c0d1474760088a528da55e591ca335 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
index 3fe42324aca188b1482c9af84cdb41574c1121d7..799a18a5f1a7b084274ce1cd63997aeb4f9c2688 100644 (file)
@@ -4,7 +4,7 @@
 # Fixed up by JRS for bzip2-0.9.5d release.\r
 \r
 CC=cl\r
-CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64\r
+CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64 -nologo\r
 \r
 OBJS= blocksort.obj  \\r
       huffman.obj    \\r
diff --git a/bz2lib/manual.html b/bz2lib/manual.html
new file mode 100644 (file)
index 0000000..3218979
--- /dev/null
@@ -0,0 +1,117 @@
+<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
+<HEAD>
+<TITLE>Untitled Document: Untitled Document</TITLE>
+
+<META NAME="description" CONTENT="Untitled Document: Untitled Document">
+<META NAME="keywords" CONTENT="Untitled Document: Untitled Document">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
+</HEAD>
+
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Untitled Document</H1></P><P>
+
+The following text is the License for this software.  You should
+find it identical to that contained in the file LICENSE in the 
+source distribution.
+</P><P>
+
+@bf{------------------ START OF THE LICENSE ------------------}
+</P><P>
+
+This program, <CODE>bzip2</CODE>, 
+and associated library <CODE>libbzip2</CODE>, are
+Copyright (C) 1996-2002 Julian R Seward.  All rights reserved.
+</P><P>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+<UL>
+<LI>
+   Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+<LI>
+   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.
+<LI>
+   Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+<LI>
+   The name of the author may not be used to endorse or promote 
+   products derived from this software without specific prior written 
+   permission.
+</UL>
+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.
+<P>
+
+Julian Seward, Cambridge, UK.
+</P><P>
+
+<CODE>jseward@acm.org</CODE>
+</P><P>
+
+<CODE>bzip2</CODE>/<CODE>libbzip2</CODE> version 1.0.2 of 30 December 2001.
+</P><P>
+
+@bf{------------------ END OF THE LICENSE ------------------}
+</P><P>
+
+Web sites:
+</P><P>
+
+<CODE>http://sources.redhat.com/bzip2</CODE>
+</P><P>
+
+<CODE>http://www.cacheprof.org</CODE>
+</P><P>
+
+PATENTS: To the best of my knowledge, <CODE>bzip2</CODE> 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.
+</P><P>
+
+<HR SIZE=1>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
+</BODY>
+</HTML>
diff --git a/bz2lib/manual.pdf b/bz2lib/manual.pdf
new file mode 100644 (file)
index 0000000..9be5d6d
Binary files /dev/null and b/bz2lib/manual.pdf differ
index 1a7dbac850852bc1ba01687dd346af82789049d5..41d1a7e44ff0ab0b0ca183f6a64b2cd0e09be648 100644 (file)
 %!PS-Adobe-2.0
-%%Creator: dvips(k) 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
+%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
 %%Title: manual.dvi
-%%Pages: 39
+%%Pages: 40
 %%PageOrder: Ascend
 %%BoundingBox: 0 0 596 842
 %%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -o manual.ps manual.dvi
 %DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2000.03.23:2343
+%DVIPSSource:  TeX output 2002.01.05:0052
 %%BeginProcSet: texc.pro
 %!
-/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
-/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
-mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
-ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
-isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
-hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
-TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
-forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
-/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
-/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
-/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
-string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
-end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
-/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
-N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
-length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
-128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
-get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
-dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
-/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
-/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
-0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
-setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
-.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
-/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
-gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
-add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
-/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
-dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
-adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
-idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
-putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
-adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
-{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
-adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
-chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
-}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
-length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
-cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
-0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
-add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
-/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
-known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
-/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
-put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
-/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
-X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
-(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
-length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
-forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
-RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
-false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
-round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
-rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
-{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
-B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
-4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
-p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
-a}B /bos{/SS save N}B /eos{SS restore}B end
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
 
 %%EndProcSet
 TeXDict begin 39158280 55380996 1000 600 600 (manual.dvi)
 @start
-%DVIPSBitmapFont: Fa cmti10 10.95 1
-/Fa 1 47 df<120FEA3FC0127FA212FFA31380EA7F00123C0A0A77891C>46
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmbxti10 14.4 1
-/Fb 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A
+%DVIPSBitmapFont: Fa cmbxti10 14.4 1
+/Fa 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A
 EA0FE0121271912B>46 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmsl10 10.95 25
-/Fc 25 122 df<D901F8160CD907FE161ED91F07163E90263E0380157E017C6D15FC496C
-6CEC03F8D801F06DEC07F00003D900FCEC1FE04901EFEC7FC00007913AE3E007EF804901
-E0B5129F000F913A701FF83F0093C7127E48485E604D5A03F01303003F4A495A90C74A5A
-4D5A4DC7FC0201143E4B5B17FC4C5A003E4948485A4C5A003F01075C6C4A485A020E131F
-021E49C8FC6C6C48137E02385B3A07C0F001F82603E1E05B3A00FF8003E090263E000714
-7E90C73A0FC001FF80923A1F8007C1C0923A3F000F80E0033E90381F00F04B013E137003
-FC4913784A4801FC13384A485B913807E001DA0FC05BDB8003141CEC1F004A495A147E5C
-4948163C4948010F14384A5C495A130F4948167849C71570137E017C17F0494B13E01201
-4848EDC0014848020714C04848EE03804848160790C83903E00F00003E170E007E923801
-F03C486F6C5A48EE3FE00070EE0F803F4975C34C>37 D<EA0780EA0FE0EA1FF0123FA512
-1FEA0F301200A213701360A213E013C0120113801203EA07001206120E5A5A5A5A5A0C1C
-7A8919>44 D<EC07F8EC3FFF9138FC0FC0903903F003E0903907C001F0D90F8013F849C7
-FC013E14FC017E147C017C147E13FC485AA20003157F5B1207A2120F5BA2121F16FF5BA2
-123FA44848EB01FEA648C7EA03FCA5ED07F8A25A16F0A2150F16E0A3ED1FC0A21680007E
-143F1600157E123E003F5C4A5AD81F805B000FEB07E06C6C485A2603F03FC7FC3800FFFC
-EB1FE0283F79BC2D>48 D<157015F014011407143F903803FFE0137FEBFFCFEBF80F1300
-141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075CA5130F5CA3131F
-497EB612F8A31D3D78BC2D>I<133C137F5B481380A31400A26C5A137890C7FCB3EA0780
-EA0FE0121F123FA5121FEA0F601200A213E05BA212015B120390C7FC5A1206120E5A5A12
-3012705A5A11397AA619>59 D<EC7FC0903803FFF890380FC07E90383E003F496D7E01FF
-6D7E82A248140782A26C5A137890C7120FA25EA2EC03FF147F903807FF1FEB1FE0D97F80
-5B3801FE00EA03F8485A4848133F485A003F5D49EC81C048C7FCA2157F48ED03804814FF
-A2007F5B913903BF0700903880073F3A3FC00E1F8E260FE03C13FC3A03FFF00FF83A007F
-C003E02A2A7CA82D>97 D<EB3F80EA1FFFA3C6FC137FA291C9FCA55B5BA512015BA4EC07
-F80003EB3FFF9039F8F80FC09039FBE003E09039FF8001F891C77E5B4848147E49147F5B
-821780A2120F5B17C0A3167F001F16805BA4EEFF00123F5B4B5AA24B5A5E007F4A5AA24B
-5A6D495A4BC7FCD87CE0137E39F87001F839F03C07E039E00FFF80260003FCC8FC2A4077
-BE33>I<EC1FF0ECFFFE903903F01F8090390FC003C0D93F0013E0017E130F49131F0001
-15F04848EB3FE0485AA24848EB1FC0001FEC0F004990C7FC123FA2485AA412FF90C9FCA9
-6CEC0380150716006C6C5B151E001F5C6C6C5B6C6C5B6C6C485A3901F80F8026007FFEC7
-FCEB0FF0242A7AA828>I<EE03F8ED01FFA3ED000F1607A217F0A4160FA217E0A4161FA2
-17C0A491380FF03FECFFFC902603F81F138090390FC007BF90391F8003FF90387E000149
-7F0001157F48481500485A120F5B001F5D485A5E5B127FA2150112FF90C75BA41503A25E
-A37E1507A26C4A5A7F001F141F6C6C133F6C6CEBFFF83B03F001EFFFC03900F80F8F9038
-3FFE0FD90FF0EBE0002D407ABE33>I<EC3FE0903801FFF8903807E07E90380F801F9039
-3F000F80017E14C049EB07E0485A12034848EB03F0485AA2121F5B123FA248481307A290
-B6FCA2D8FF80C8FC90C9FCA87EED01C015036C15806D1307001FEC0F006D131E000F5C6C
-6C5B6C6C485A3900FC07C0D93FFFC7FCEB07F8242A7BA828>I<ED07F0ED3FFCEDFC1E91
-3803F03F4A48B4FC4A481380141FEC3F81DA7F0113008102FE137C93C7FCA213015CA513
-035CA50007B512F8A3260007F0C8FCA3130F5CA5131F5CA5133F5CA5137F91C9FCA55B5B
-A4EA03FF007F13FEB5FCA229407DBF1C>I<147FEB3FFFA313017FA25CA513015CA51303
-5CA4ED07F80107EB1FFF9139F0781FC09138F1E00F9139F38007E0ECF70002FE14F0495A
-5CA25CA24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B491500
-A300015D486C491380B5D8F87F13FCA32E3F7DBE33>104 D<1478EB01FE130314FFA25B
-14FE130314FCEB00F01400ACEB03F8EA01FF14F0A2EA001F130FA314E0A5131F14C0A513
-3F1480A5137F1400A55B5BA4EA03FF007F13F0A2B5FC183E7DBD1A>I<143FEB1FFF5BA2
-13017FA214FEA5130114FCA5130314F8A5130714F0A5130F14E0A5131F14C0A5133F1480
-A5137F1400A55B5BA4EA03FF007F13F8A2B5FC183F7DBE1A>108
-D<902707F007F8EB03FCD803FFD91FFF90380FFF80913CE0781FC03C0FE09126E1E00FEB
-F0073E001FE38007E1C003F090260FE700EBE38002EEDAF70013F802FC14FE02D85C14F8
-4A5CA24A5C011F020F14074A4A14F0A5013F021F140F4A4A14E0A5017F023F141F91C749
-14C0A549027F143F4992C71380A300014B147F486C496DEBFFC0B5D8F87FD9FC3F13FEA3
-47287DA74C>I<903907F007F8D803FFEB1FFF9139E0781FC09138E1E00F3B001FE38007
-E090380FE70002EE14F014FC14D814F85CA24A130F131F4A14E0A4161F133F4A14C0A416
-3F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FCA32E287DA733>
-I<EC0FF0ECFFFE903903F01F8090390FC007C049C66C7E013E6D7E01FC6D7E4848804914
-7C0003157E485A000F157F5B121FA2485AA2007F1680A2170048C85AA54B5AA25E5A6C4A
-5A7E4B5A5E6C140F6C6C5C4B5A6C6C013EC7FC6C6C5B6C6C485A3900FC0FE090383FFF80
-D90FF8C8FC292A7BA82D>I<91387F01FE903A7FFF0FFFC09139FE3E03F09238F801F890
-3A01FFE000FE4B137F6D497F4990C713804A15C04A141FA218E0A20103150F5C18F0A317
-1F010716E05CA3173F18C0130F4A147F1880A2EFFF004C5A011F5D16034C5A6E495AEE1F
-C06E495AD93FDC017EC7FC91388F01F8913883FFE0028090C8FC92C9FC137FA291CAFCA4
-5BA25BA31201487EB512F8A3343A81A733>I<903907F01F80D803FFEB7FE09138E1E1F0
-9138E387F839001FE707EB0FE614EE02FC13F002D813E09138F801804AC7FCA25C131FA2
-5CA4133F5CA5137F91C8FCA55B5BA31201487EB512FEA325287EA724>114
-D<9138FF81C0010713E390381F807F90397C003F8049131F4848130F5B00031407A24848
-1400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C7F011F7F13079038007FFE
-1403140100381300157EA2123C153E157E007C147CA2007E147815F8007F495A4A5A486C
-485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<EB0380A4130791C7FCA25BA25B
-A2133EA2137E13FE12011207001FB512C0B6FCA2D801FCC7FCA312035BA512075BA5120F
-5BA41407001F130E13C0A4141E141C1380A26D5AA2000F5B14F03807E1E03801FF80D800
-7EC7FC1A3978B723>I<01FE147F00FFEC7FFF4914FEA20007140300031401A34914FCA4
-150312074914F8A41507120F4914F0A4150F121F4914E0A2151FA3153F4914C0157F15FF
-EC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826003FE01380282977A733>I<B5
-39E007FFF05D17E02707FE000313006C48EB01FC6F5A5E00014A5A5EA24B5A6D13070000
-92C7FC5D150E6D5B7F5DA25D1480013F5B14815D14C3011F5B02C7C8FCA214CE14EEEB0F
-FCA25CA26D5A5CA25CA26D5A2C2878A630>I<B500C3B53803FFFCA204FE14F8290FFE00
-3FE00013C0D807F86D48EB7F000003173E183C150F18386D5E0001141F705B153F4D5A15
-776D4B5A0000ECE7F04DC7FCEC01C3170E9038FF0383017F5D91380703F85FEC0E01021E
-5CD93F9C14F002BC6D5A02B813FDDAF8005B4A13FF5F6D5A94C8FC5C4A137E167C6DC7FC
-1678010E14383E2878A642>I<90B539E007FFF05E18E0902707FE000313006D48EB01FC
-705A5F01014A5A5F16036E5C0100140794C7FC160E805E805E1678ED8070023F13F05EED
-81C015C191381FC38015C793C8FC15EF15EEEC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC
-5C140E141E141C5C121C003F5B5A485B495A130300FE5B4848CAFCEA701EEA783CEA3FF0
-EA0FC0343A80A630>121 D E
+%DVIPSBitmapFont: Fb cmti10 10.95 26
+/Fb 26 122 df<DA0780150EDA3FE0151FDA7870153F4A6C157E902601E03C15FC902603
+C01CEC01F8902607801EEC07F0010FD91F80130F90271F001DE0EB7FE0923A1CFC07FFC0
+013E91391FFF9F80933903F83F004991C7123E6001FC16FC494B5A4D5A033C495A000102
+38495A495E4DC7FC03785B0370137E495D00039138F001F84B485A02015C00014A485A91
+3803800F0207495A4B48C8FC020E137E2600F01E5B4A5B9039787001F090383FE0039027
+0F8007E013F090C7390FC007FC92391F800F0E92393F001E07033E133C4B903878038003
+FC13F0913801F801913903F003E0EC07E091390FC007C0158091391F000F805C027E131F
+4A1400495A494815074A4914004948133E130F49485D49C7140E017E143C49027C131E49
+161C4848163C0003033C133848485E484816F048485E48C8495A003EED1E03484C5A00FC
+DB0F0EC7FC48ED07FC0070ED01F0404974C34A>37 D<EA01E0EA07F8120FA2EA1FFCA4EA
+0FF8EA0798EA001813381330A21370136013E013C01201EA0380EA07001206120E5A5A5A
+5A5A0E1C7A891C>44 D<120FEA3FC0127FA212FFA31380EA7F00123C0A0A77891C>46
+D<15FE913807FF8091381F07C091387C01F0ECF000494813F8494813780107147C495A49
+C7FC167E133E137EA25BA2485AA2000315FEA25B000715FCA2491301120FA34848EB03F8
+A44848EB07F0A448C7EA0FE0A316C0007E141F12FE1680153FA2481500A2157EA25DA25D
+4813015D6C495A127C4A5A4A5A6C49C7FC143E6C5B380FC1F03803FFC0C648C8FC273F76
+BC2E>48 D<15031507150F151F151E153E157EEC01FEEC03FC1407141FEB01FF90380FFB
+F8EB1FC3EB0E07130015F0A2140FA215E0A2141FA215C0A2143FA21580A2147FA21500A2
+5CA25CA21301A25CA21303A25CA21307A25CA2130FA25CA2131FA25CEB7FE0B612F0A215
+E0203D77BC2E>I<EB03C0EB07F0130FEB1FF8133FA214F0EB1FE014C0EB078090C7FCB3
+EA01E0EA07F0487EA2121FA46C5AEA07B0EA003013701360A213E05B12015B120348C7FC
+1206120E5A5A123012705A5A15397AA61C>59 D<147E49B47E903907C1C38090391F80EF
+C090383F00FF017E137F4914804848133F485AA248481400120F5B001F5C157E485AA215
+FE007F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078020F1370127C021F13F0
+007E013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00FF00D800FC133E
+252977A72E>97 D<EB1FC0EA0FFF5CA2EA003FA291C7FCA25BA2137EA213FEA25BA21201
+A25BA21203A25B147E3907F1FF809038F783E09038EF01F013FE390FF800F8A24913FC49
+137C485A157E5B15FE123FA290C7FCA248130115FC127EA2140300FE14F85AA2EC07F0A2
+15E048130F15C0141F15800078EB3F00127C147E003C5B383E01F8381E03E06C485A6CB4
+C7FCEA01F81F4076BE2A>I<EC1FC0ECFFF0903803F03C903807C01E90381F800E90383F
+000F017E133F4913FF485A485A000714FE5B000F14FC48481300A2485AA3127F90C8FCA3
+5A5AA6481403007E1407150F151E003E143C15786C14F0EC03E0390F800F803903E07E00
+3801FFF838003FC0202977A72A>I<EE3F80ED1FFF1700A2ED007FA2167EA216FEA25EA2
+1501A25EA21503A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC090383F00
+FF017E137F5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE127F90C7
+5AA214015A485CA2140316384814F0A21407167891380FE070127C021F13F0007E013F5B
+003E137FECF3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E294077BE2E>
+I<EC3F80903801FFE0903807E0F890381F803CEB3E0001FC131E485A485A12074848133E
+49133C121F4848137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8FCA45AA6
+1506150E151E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC3801FFF038
+007F801F2976A72A>I<167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2157E
+A21780EE0E004BC7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3140F5DA5
+141F5DA4143F92C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E127F5C12
+FF49C9FCA2EAFE1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>I<EB01FC13FF5CA2
+1303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C8FCEC03F890387F0FFE9138
+3E0F80D97E7813C0ECE007D9FFC013E014801400A2485A5BA25B0003140F16C05BA20007
+141F16805BA2000F143F16005B5D001F147EEDFE074913FCA2003F0101130FEDF80E1300
+161E48ECF01CA2007E1538A200FE1570020013E048EC7FC00038EC1F0028407ABE2E>
+104 D<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0
+121E121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B137E13FE5BA212015BA2
+12035B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C01383148038078700EA03
+FEEA00F8163E79BC1C>I<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A2133FA2
+1400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA2
+5BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FCA2131E131CA2EA7C381378EA3C70
+EA1FE0EA0780144079BE17>108 D<D801F0D93F80137F3D07FC01FFE003FFC03D0F3E07
+C1F80F83F03D0E1F0F00FC1E01F8001E011C90387C3800001C49D97E707F003C01F05C00
+38157F4A5C26783FC05C12704A91C7FC91C7127E00F003FE1301494A5CEA007EA2030114
+0301FE5F495CA203031407000160495C180F03075D0003051F13E0494A1480A2030FEC3F
+810007F001C0495CA2031F91383E0380120F494AEC0700A2033F150E001FEF1E1C4991C7
+EA0FF80007C7000EEC03E0432979A74A>I<D801F0EB3F803A07FC01FFE03A0F3E07C1F8
+3A0E1F0F00FC001E011C137C001C49137E003C13F012385C38783FC012705C91C7FC00F0
+15FE495CEA007EA2150101FE5C5BA2150300015D5B15075E0003020F13704914C0A2031F
+13F00007ED80E05B1681EE01C0120F49EC0380A2EE0700001FEC0F0E49EB07FC0007C7EA
+01F02C2979A733>I<EC1FC0ECFFF8903803F07C90380FC01FEB1F8090393F000F80017E
+14C0491307484814E0485A12075B000F15F0485AA2485AA2ED0FE0127F90C7FCA2151F48
+15C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A5A003E495A6C495A4A5A260F
+803EC7FC3807C0FC3801FFF038003F80242977A72E>I<903903E001F890390FF807FE90
+3A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED8001
+9038F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA20103140F17E05C
+A20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA
+9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0B5FC
+A22D3A80A72E>I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB380F
+001C1370003CEBE01F123814C0D8783F14C00070903880070092C7FC91C8FC12F05BEA00
+7EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC232979A726>
+114 D<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C133E49137E
+15FEA2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E0010F13F01300
+140F14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F8012700078
+EB1F006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F01307A25CA2
+130FA25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC13FEA25BA2
+1201A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C1438EB0078
+147014F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<137C48B4141C26
+038F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F0
+3F1303140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2
+153F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C
+90391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F038038F80EA0707
+000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EAF03F91C712
+E012005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA25DA25D1578
+000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<017C167048
+B491387001FC3A038F8001F8EA0707000E01C015FE001E1403001CEDF000EA3C0F003817
+7C1507D8781F4A133C00701380A2D8F03F130F020049133812005B017E011F14784C1370
+13FE5B033F14F0000192C712E05BA2170100034A14C049137E17031880A2EF070015FE17
+0E00010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E0F07C1E0903A1FFC03FF
+C0902703F0007FC7FC372979A73C>I<137C48B4143826038F8013FCEA0707000E7F001E
+1401001C15F8EA3C0F12381503D8781F14F000701380A2D8F03F1307020013E012005B01
+7E130F16C013FE5B151F1201491480A2153F000315005BA25D157EA315FE5D00011301EB
+F8030000130790387C1FF8EB3FF9EB07E1EB00035DA21407000E5CEA3F80007F495AA24A
+5AD8FF0090C7FC143E007C137E00705B387801F0383803E0381E0FC06CB4C8FCEA03F826
+3B79A72C>121 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmtt12 14.4 10
-/Fd 10 123 df<EC3FF80103B57E010F14E0013F14F84914FE48B7FC4816C048D9C01F7F
+%DVIPSBitmapFont: Fc cmtt12 14.4 10
+/Fc 10 123 df<EC3FF80103B57E010F14E0013F14F84914FE48B7FC4816C048D9C01F7F
 270FFE00017F49EB007FD81FF0EC1FF848486E7E160748486E7E4914018300FF81A26D16
 80177FA36C5AA26CC9FCCAFCA217FF1800A25E5F16035F16075F160F4C5A163F4C5A5F4C
 5A4B90C7FCED07FE4B5A4B5A4B5A4B5A4B5A4A5B4A90C8FCEC0FFE4A5AEC3FF04A5A4A5A
@@ -208,41 +213,41 @@ B87EA36C5EA2260001FEC9FCB3A6173FA2EF7F80A76E14FF6D16006F5A9238C007FE9138
 495B4990C9FC495A495A4948EC0FC0495A4948EC1FE0485B00075B4890C8FCEA1FFC485A
 485A90B8FCB9FCA46C17C07E33337CB23E>122 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmtt12 13.14 31
-/Fe 31 123 df<ECFFE0010713FC011FEBFF80017F14E048B67E48814815FE489038007F
-FF01F8130748480101138048489038007FC049EC3FE04848141F90C8120F17F048150717
-F87F1603A36CC8FC123EC9FCA2160717F0A2160F17E0161F17C0163FEE7F80A2EEFF004B
-5A15034B5A4B5A4B5AED7FE04B5A4A5B4A90C7FC4A5AEC1FF84A5A4A5A4A5A495BD907FE
-C8FC495A495A495A495A2601FF80EB01F04890C7EA03F8485A485A485A48B7FC5AB8FCA3
-7E6C16F02D447BC338>50 D<003FB6FC4815E0B712F882826C816C16802701FC000113C0
-9238007FE0161FEE0FF0A2160717F81603A6160717F0A2160FEE1FE0163FEE7FC0923801
-FF80030F130090B65A5E16F08216FEEEFF8017C001FCC7EA7FE0EE1FF0EE07F8160317FC
-EE01FE1600A217FF177FA717FF17FE16011603EE07FC160FEE3FF8EEFFF0003FB7FC4816
-E0B812C01780EEFE006C15F86C15C030437DC238>66 D<DA07FC133C91393FFF807E91B5
-12E00103ECF8FE4914FC4914FF5B90383FFE0390387FF000D9FFC0133F4849131F91C712
-0F48481407485A49140348481401A2485AA248481400A25BA2007F167C90CAFCA35A5AAD
-7E7EA37F003F167C17FE7FA26C7EA26C6C140117FC6C7E6D14036C6C15F86C6C14076EEB
-0FF06C6D131FD97FF0EB7FE0903A3FFE03FFC06DB612806D15006D5C6D5C010014F0023F
-13C0DA07FCC7FC2F457CC338>I<007FB512F8B7FC16C08216F8826C813A03F8001FFF15
-07030113806F13C0167FEE3FE0161FEE0FF0A2EE07F8A2EE03FCA21601A217FE1600A417
-7FAD17FF17FEA4160117FCA2160317F81607A2EE0FF0161FEE3FE0167FEEFFC04B13805D
-031F1300007FB65AB75A5E5E16C093C7FC6C14F830437DC238>I<007FB712FCB87EA57E
-D801FCC8FCA9177C94C7FCA6ED07C04B7EA590B6FCA79038FC000FA56F5A92C9FCA7EF0F
-80EF1FC0AA007FB8FCB9FCA56C178032437DC238>I<91391FF003C091397FFC07E049B5
-FC010714CF4914EF4914FF5B90387FF81F9038FFE00748EB800191C7FC4848147F485A49
-143F485A161F485AA249140F123F5BA2127F90C8EA07C093C7FCA35A5AAA923807FFFC4B
-13FE4B13FF7E7E6F13FE6F13FC9238000FE07F003F151FA27F121F7F163F6C7EA26C6C14
-7F7F6C6C14FF6C6C5B6E5A6C6D5A90387FF81F6DB6FC6D14EF6D14CF6D148F0101140F90
-3A007FFC07C0DA1FF0C7FC30457CC338>71 D<007FB612F0B712F8A56C15F0260001FCC7
-FCB3B3B1007FB612F0B712F8A56C15F0254377C238>73 D<90380FFFFE90B612E0000315
-F8488148814881A2273FFE000F138001F01301497F49147F4848EC3FC0A290C8121FA448
-16E0A248150FB3AC6C151FA36C16C0A36D143FA36C6CEC7F806D14FF6D5B01FE130F6CB7
-1200A26C5D6C5D6C5DC615E0010F49C7FC2B457AC338>79 D<003FB512F04814FEB77E16
-E0826C816C813A01FC003FFEED07FF03017F81707E163F161F83160FA7161F5F163F167F
-4C5A5D030790C7FCED3FFE90B65A5E5E5EA282829038FC001FED07FC6F7E150115008282
-AA18E0EF01F0EF03F8A31783EE3F87263FFFE0ECC7F0486D14FFB56C7F18E07013C06C49
-6D13806C496D1300CA12FC35447EC238>82 D<003FB8FC481780B9FCA53BFE0007F0003F
-A9007CEE1F00C792C7FCB3B3A70107B512F04980A56D5C31437DC238>84
+%DVIPSBitmapFont: Fd cmtt12 13.14 31
+/Fd 31 123 df<903801FFC0010F13F8013F13FF4914C048B67E48814815FC4801007FD8
+1FF8130F01E0EB03FF48480100138049EC7FC0007F153F90C8121F4816E0160F17F07F16
+07A36CC8FC123EC9FCA2160F17E0A2161F17C0163FA2EE7F80EEFF00A24B5A4B5A15074B
+5A4B5A4B5A4B5A4B5A020390C7FC4A5A4A5A4A5A4A5AEC7FC049485A4990C8FC495A495A
+495AEB3FE0EBFFC04849EB03E04890C7EA07F0485A485AEA1FF048B7FC5AB8FCA37E6C16
+E02C447AC338>50 D<003FB6FC4815E0B712F882826C816C16802701FC000113C0923800
+7FE0161FEE0FF0A2160717F81603A6160717F0A2160FEE1FE0163FEE7FC0923801FF8003
+0F130090B65A5E16F08216FEEEFF8017C001FCC7EA7FE0EE1FF0EE07F8160317FCEE01FE
+1600A217FF177FA717FF17FE16011603EE07FC160FEE3FF8EEFFF0003FB7FC4816E0B812
+C01780EEFE006C15F86C15C030437DC238>66 D<DA07FC133C91393FFF807E91B512E001
+03ECF8FE4914FC4914FF5B90383FFE0390387FF000D9FFC0133F4849131F91C7120F4848
+1407485A49140348481401A2485AA248481400A25BA2007F167C90CAFCA35A5AAD7E7EA3
+7F003F167C17FE7FA26C7EA26C6C140117FC6C7E6D14036C6C15F86C6C14076EEB0FF06C
+6D131FD97FF0EB7FE0903A3FFE03FFC06DB612806D15006D5C6D5C010014F0023F13C0DA
+07FCC7FC2F457CC338>I<007FB512F8B7FC16C08216F8826C813A03F8001FFF15070301
+13806F13C0167FEE3FE0161FEE0FF0A2EE07F8A2EE03FCA21601A217FE1600A4177FAD17
+FF17FEA4160117FCA2160317F81607A2EE0FF0161FEE3FE0167FEEFFC04B13805D031F13
+00007FB65AB75A5E5E16C093C7FC6C14F830437DC238>I<007FB712FCB87EA57ED801FC
+C8FCA9177C94C7FCA6ED07C04B7EA590B6FCA79038FC000FA56F5A92C9FCA7EF0F80EF1F
+C0AA007FB8FCB9FCA56C178032437DC238>I<91391FF003C091397FFC07E049B5FC0107
+14CF4914EF4914FF5B90387FF81F9038FFE00748EB800191C7FC4848147F485A49143F48
+5A161F485AA249140F123F5BA2127F90C8EA07C093C7FCA35A5AAA923807FFFC4B13FE4B
+13FF7E7E6F13FE6F13FC9238000FE07F003F151FA27F121F7F163F6C7EA26C6C147F7F6C
+6C14FF6C6C5B6E5A6C6D5A90387FF81F6DB6FC6D14EF6D14CF6D148F0101140F903A007F
+FC07C0DA1FF0C7FC30457CC338>71 D<007FB612F0B712F8A56C15F0260001FCC7FCB3B3
+B1007FB612F0B712F8A56C15F0254377C238>73 D<90380FFFFE90B612E0000315F84881
+48814881A2273FFE000F138001F01301497F49147F4848EC3FC0A290C8121FA44816E0A2
+48150FB3AC6C151FA36C16C0A36D143FA36C6CEC7F806D14FF6D5B01FE130F6CB71200A2
+6C5D6C5D6C5DC615E0010F49C7FC2B457AC338>79 D<003FB512F04814FEB77E16E0826C
+816C813A01FC003FFEED07FF03017F81707E163F161F83160FA7161F5F163F167F4C5A5D
+030790C7FCED3FFE90B65A5E5E5EA282829038FC001FED07FC6F7E150115008282AA18E0
+EF01F0EF03F8A31783EE3F87263FFFE0ECC7F0486D14FFB56C7F18E07013C06C496D1380
+6C496D1300CA12FC35447EC238>82 D<003FB8FC481780B9FCA53BFE0007F0003FA9007C
+EE1F00C792C7FCB3B3A70107B512F04980A56D5C31437DC238>84
 D<267FFFF090387FFFF0B56C90B512F8A56C496D13F0D801FCC73801FC00B3B3A66D1403
 00005EA36D14076D5D6E130F6D6C495A6E133F6D6C495A6D6C495AECFF076D90B5C7FC6D
 5C6D5C6D5C023F13E0020F1380DA03FEC8FC35447FC238>I<D83FFE913803FFE0486C4A
@@ -309,206 +314,205 @@ FC0180C7EA1FF8EE3FF0EE7FE0EEFFC04B13804B13006CC7485AC8485A4B5A4B5A4B5A4B
 7C494814FE485B4890C8FC485A485A485A485A48B7FCB8FCA56C16FC2F2F7DAE38>122
 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmbx12 13.14 53
-/Ff 53 122 df<923807FFE092B512FC020714FF021F81027F9038007FC0902601FFF0EB
-0FE04901C0497E4990C7487ED90FFC147F011F824A14FF495AA2137F5CA2715A715A715A
-EF078094C8FCA7EF07FCB9FCA526007FF0C7123F171FB3B3A2003FB5D8E00FB512F8A53D
-4D7ECC44>12 D<B7FCAA200A7F9D29>45 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7F
-FEA2EA3FFCEA1FF8EA07E01010778F22>I<177817F8EE01FCA21603A2EE07F8A217F016
-0FA217E0161FA2EE3FC0A21780167FA217005EA24B5AA25E1503A24B5AA25E150FA25E15
-1FA24B5AA25E157FA24BC7FCA25D1401A25D1403A24A5AA25D140FA24A5AA25D143FA25D
-147FA24AC8FCA25C1301A25C1303A2495AA25C130FA2495AA25C133FA25C137FA249C9FC
-A25B1201A2485AA25B1207A25B120FA2485AA25B123FA25B127FA248CAFCA25AA2127CA2
-2E6D79D13D>I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B2007F
-B712E0A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC4881480101EBFF80
-2707F8003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC6D7F00FF
-16FE6D147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F05D17E04B
-13C017804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B131FEC3F80
-4AC7FC14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816FC5A5A5A
-5A5A5AB8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90267FE01F
-7F9026FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3805C16FF
-7E91C75B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A49B512E0
-168016E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0EA07E0EA
-1FF8487E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5BD80FFC49
-5B2707FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32487BC63D
->I<EE07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F915F1EC03
-E11407EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80131FEB3F
-00133E5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003EBE000AD
-023FB612FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF91B612C0
-17801700A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01E1B512C0
-01E714F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0497F17F8
-C913FC167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815FC5B0180
-15F86CC74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB512006C90B512
-FC6C5D013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE021F6D7E02
-7F80903A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948130F01FF
-4A7E4849133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA21520913807
-FFE0021F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A6D7E8391
-C7FC8382491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C5DA26C6D
-495A6C6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C010014F0020F
-90C8FC32487BC63D>I<121F7F7F13FE90B812E0A45A18C0188018005F5FA25F485E90C8
-EA07E0007E4B5A5F007C151F4CC7FC167E5E485D15014B5A4B5AC8485A4B5AA24BC8FC15
-7EA25D1401A24A5A1407A24A5AA2141FA24A5AA2147FA314FFA3495BA45BA55BAA6D5BA2
-6D90C9FCEB007C334B79C93D>I<EC1FFF49B512F0010714FC011F14FF90263FF00713C0
-49C77F01FCEC3FF04848EC0FF848481407000782491403000F821601A2121F7FA27F13FE
-6D140302C05C14F002FC495A6C6D130FDAFF805B9238E01FE06C6E485A9238FCFF806C91
-B5C7FC6C15FC6C5D7F6D14FE6D806D15C06D81011F81017F81D9FFDF804813072603FE01
-8048486C804848133F4848010F1480003F8049130148486D6C13C0161F824848140382A2
-82A2177FA218807F127FEFFF007F6C6C4A5AA2D81FFC4A5A6C6CEC0FF86C6C6CEB3FF06C
-9039F003FFE06C90B612806C6C92C7FC011F14FC010714E09026003FFEC8FC32487BC63D
->I<EC1FFE49B512C0010F14F04914FC90397FFC0FFE903AFFE003FF804849C67F48496D
-7E4890C7FC486F7E484881161F003F825B007F82A28300FF81A31880A518C0A45E127FA3
-003F5D7F121F5E120F6C6C91B5FC6C90388001EF6CEBC0036C9038E00FCF6DB5128F011F
-140F010701FE1480010113F8903800010091C7FCA24C1300A3D803F85D487E487E486C4A
-5AA25F4C5AA24C5A49495B6C485D49010790C7FC01E0495AD807F8EB3FFC6CB448B45A6C
-90B55A6C15C06D91C8FC011F13FC010313C032487BC63D>I<EE01F8A24C7EA34C7EA24C
-7EA34C7FA24C7FA34C7FA293B57EA34B8016F303038016E316E103078016C0030F805E83
-031F814C7E4B81153E83037E81037C7F03FC815D830201824B7F0203825D830207824B7F
-020F825D84021F8392B8FC4A83A34A83027CC8120F02FC835C840101844A810103845C84
-0107844A81010F845C85011F85496C82B600C091B712F0A5544D7CCC5D>65
-D<93261FFF80EB01C00307B500F81303033F02FE13074AB7EAC00F0207EEE03F021F903A
-FE007FF87F027F01E0903807FCFF91B5C70001B5FC010301FC6E7E4901F0151F4901C081
-4949814990C97E494882494882485B48197F4A173F5A4A171F5A5C48190FA2485B1A07A2
-5AA297C7FC91CDFCA2B5FCAD7EA280A2F207C07EA36C7FA26C190F6E18807E6E171F6C1A
-006E5F6C193E6C6D177E6D6C5F6D6C4C5A6D6D15036D6D4B5A6D01F04B5A6D01FCED3FC0
-010001FFEDFF806E01E0D903FEC7FC021F01FEEB3FFC020790B612F002015EDA003F92C8
-FC030714FCDB001F13804A4D79CB59>67 D<B912F0F0FF8019F019FC19FFD8001F902680
-000114C0DD001F7F060713F806017F726C7E737E737F737F737F8587737F8587A2747EA3
-8786A21C80A51CC0A586A462A51C80A51C00A26263A2631AFF636163614F5B634F5B073F
-90C7FC4F5A4F5A06035B061F5B4DB512C0BBC8FC19FC19F0198006F0C9FC524B7CCA5E>
-I<BB12C0A486D8000F01E0C77E18071801F0007F193F191F190F1907861903A31901A3EF
-0F80A2737EA497C7FC171FA2173F177F17FF160392B6FCA5EDE0031600177F173F171FA2
-050FEC0F80A3F21F00A494C8FC621A3EA21A7EA31AFE6219011903A21907190FF13FF819
-FF1803183FBBFCA262A3494A7CC951>I<BBFCA41A80D8001F01C0C7FC181F1803848419
-7F193F191F1AC0190FA31907A4171FF103E0A496C7FCA25FA25F5F5E160792B6FCA5EDC0
-071601828383A283A794C9FCB1B8FCA5434A7CC94D>I<93261FFF80EB01C00307B500F8
-1303033F02FE13074AB7EAC00F0207EEE03F021F903AFE007FF87F027F01E0903807FCFF
-91B5C70001B5FC010301FC6E7E4901F0151F4901C0814949814990C97E49488249488248
-5B48197F4A173F5A4A171F5A5C48190FA2485B1A07A25AA297C8FC91CEFCA2B5FCAD6C04
-0FB712C0A280A36C93C7001FEBC000A2807EA27E807E807E806C7F7E6D7E6D7E6D7F6D01
-E05D6D6D5D6D13FC010001FF4AB5FC6E01E0EB07F9021F01FFEB3FF0020791B5EAE07F02
-01EEC01FDA003FED0007030702F81301DB001F018090C8FC524D79CB61>I<B7D8FC01B7
-12F8A5D8001F01C0C8001FEBC000B3AA92B9FCA503C0C8121FB3AEB7D8FC01B712F8A555
-4B7BCA60>I<B712FEA5D8000FEBE000B3B3B3ABB712FEA5274B7DCA2E>I<B8FCA5D8001F
-01C0C9FCB3B3A4193EA4197E197CA519FCA31801A2F003F8A21807180F181F183F187FEF
-01FF1707173FBA12F0A53F4B7BCA4A>76 D<B600E04DB612806F5FA26F5FA2D8001F09FC
-C7FC6FEF0F7FA2DABFFE171EA2DA9FFF173CA3028F6D1678A202876D16F0A202836DED01
-E0A302816DED03C0A202806DED0780A26F6CED0F00A36F6C151EA26F6C5DA26F6D5CA26F
-6D5CA36F6D495AA26F6D495AA26F6D495AA3706C49C7FCA2706C131EA2706C5BA3706D5A
-A2706D5AA270EBE1E0A370EBF3C0A270EBFF80A27190C8FCA2715AA3715AA2715A497EB6
-00F06D480103B71280A3715A715A694B7BCA74>I<B600E092B612F88181A281D8001F6D
-9239001FE0006F705A82A28202BF7F029F7FA2028F7F02877F02837F8214810280806F7F
-6F7F83816F7F6F7F6F7F83816F80707F707F8482707F707F707FA2707F7014807113C019
-E0837113F07113F87113FC19FE837113FF71148F7213CF1AEF847213FF8484A284848485
-A2858585A285858585497EB600F8167F1A3F1A1F1A0FA2554B7BCA60>I<EEFFF8031FEB
-FFC04AB612FC020715FF021FD9C01F13C091277FFE000313F0902601FFF09038007FFC49
-496E7E490180EC0FFF4990C86C7F49486F7F49486F7F017F8449486F7F4849707EA24849
-707E4885A24849701380A2481AC04A82A2481AE0A34890CA6C13F0A5B519F8AE6C1AF0A2
-6E5EA36C1AE0A26E5E6C1AC0A26C1A806E5E6C1A006E5E6C616E16FF6C616C6D4B5B6D6C
-4B5B6E5D6D6D4A5B6D6D4A5B01076D4A90C7FC6D01F8ECFFFE6D01FE01035B9028007FFF
-C01F13F0021F90B612C0020793C8FC020115FCDA001F14C0030101FCC9FC4D4D79CB5C>
-I<B912C018FCF0FF8019F085D8001F902680000713FE05007F063F1380060F13C07213E0
-1AF0841AF8A27213FCA31AFEA81AFCA34E13F8A21AF0601AE04E13C0063F138095B51200
-050713FC92B75A19E096C7FC18F803C0CAFCB3ABB712FCA5474B7BCA54>I<B9FC18F8F0
-FF8019E019F8D8000F9026C0000713FE9439007FFF80061F7F727F727F727F84868684A2
-86A862A24E5BA2624E5B4E5B4E5B4E5B95B5C8FC050713FC92B712F0198006FCC9FC18FF
-9226C0003F13C0050713F0717F717F717F187F85727FA28486A786A71C3E86A28474137E
-72157C726D13FCB700FC6D9038FE01F872EBFF8373EBFFF0071F14E007031480CD383FFE
-00574C7CCA5C>82 D<DA7FFCEB01C00103B5EAC003011FECF00749ECFC0F90B7121F48D9
-E00F13BF4890C713FFD807FC141F4848804848140382484880177F485A173F171F12FFA2
-170F7FA217077F7F7F6D92C7FC6D7E6C13F014FF15F86CECFF8016F86C15FF6C16C0836C
-826C826C826C82013F816D1680010716C01300020F15E01400030714F0ED007F160F1603
-7013F882177F127800F8163FA3171FA27E18F0A27EA26CEE3FE07F18C001E0157F6DEDFF
-8001FC160001FF140302E0EB0FFED97FFEEB3FFC486CB612F0D8FC0F5DD8F803158048C6
-6C49C7FC48010313F0354D79CB44>I<003FBB12C0A5DA80019038FC001FD9FC001601D8
-7FF09438007FE001C0183F49181F90C7170FA2007E1907A3007C1903A500FC1AF0481901
-A5C894C7FCB3B3A749B812FCA54C4A7CC955>I<B700F8023FB512F8A5D8001F01C0C938
-0FE000745AB3B3AD6D180F63811A1F6D96C7FC626D7F1A7E6D7F6D606E6C4B5A6E6CED07
-F06E6C4B5A6E01C0EC3FC06E01F049B45A020101FF011F90C8FC6E91B55A033F15F80307
-15E0030092C9FC040713F0554C7CCA5E>I<B700F00203B6FCA5D8001F01E0C93803FC00
-745A6D61811A036D6D5F1A076D6D5F1A0F6D616F161FA26D6D94C7FC626E6D153E1A7E6E
-177C7015FC6E5F8219016E6D5D19036E5F7014076E5F82190F6E6D5D191F6E6D92C8FC61
-6F153E83197E6F6D137C19FC6F6D5B18016F5DEFF003A26F01F85B18076F01FC5B180F6F
-5DEFFE1F6F92C9FC17FF607013BE18FE705BA2705BA3705BA2705BA2705BA3705BA27090
-CAFCA2177EA2584C7ECA5D>I<B700F84AB6FCA5D8001F01F0C93803FC006F705A6D4E5A
-6D6D4C5A816D4E5A6D6D4C5A826D4EC7FC6E6D5D70157E6E5F6E7F704A5A6E4C5A6E7F70
-4A5A6E4C5A6E7F71495A6E4CC8FC6F7F71137E6F5D6F7F71485A6F4A5A6F13FC71485A6F
-4A5A6F13FFF09F806F02BFC9FC7013FF60705B8260705B8260B3A7037FB612FEA5584B7E
-CA5D>89 D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFE3B03FC0007FF80486C
-6D7F6D7F486D6C7F83167F83A2707E6C90C7FC6C5A6C5AC9FCA5ED1FFF021FB5FC49B6FC
-130F013FEBC03F9038FFFE00000313F04813C04890C7FC485A485AA2485AA2485AA4167F
-A26D14FF007F15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C9038E07F076C9038
-FFFE0300014A7ED8003F9038F0007F0103018090C7FC37347CB23C>97
-D<EB7FC0B5FCA512037EB3ED07FF037F13E002C1B512FC02C714FF9126CFF80F7F9126DF
-C0017F02FFC77F4AEC3FF002F8814A6E7E717E4A81831980A37113C0A319E0AC19C0A35F
-1980A219005F606E141F6E5D4D5A6E4A5A02BF4A5A91261FC0035B9027FE0FF01F5B496C
-B548C7FCD9F80114F8496C6C13E0C8D80FFEC8FC3B4D7CCB44>I<91380FFF8091B512F8
-010314FF010F15804948C613C0D97FF8EB1FE0D9FFE0EB3FF04849137F4849EBFFF84890
-C7FCA2485A121FA24848EC7FF0EE3FE0EE1FC0007F92C7FC5BA212FFAC127FA27FA2123F
-A26C6C153EA26C6C157E177C6C6D14FC6C6D14F86C6D13036C6DEB07F0D97FFCEB1FE06D
-B4EBFFC0010F90B5120001035C010014F0020F13802F347CB237>I<EF1FF0EE3FFFA516
-00177FB3EC0FFF91B512E0010314F8010F14FC013FEB01FF903A7FF8003FFFD9FFE0130F
-48497F48497F4890C77E48815B121F5B123FA2127F5BA312FFAC127FA36C7EA3121F6D5C
-120F6C6C5C6C6D5B6C5D6C01E0013F7F6D6C49EBFFE090393FFE03FE6DB512F801075C01
-00148091261FFC00EBC0003B4D7CCB44>I<EC0FFF91B512F0010314FC010F14FF90263F
-FE077F90267FF0007F49486D7E4801806D7E486F7E4890C7120F484881707E121F491403
-003F82A2127F5B701380A212FFA390B8FCA401F8CAFCA5127FA27FA2123FA26C6CED0F80
-A26C6C151F6C17006E5C6C6D147E6C6D5C6C6D495AD93FFCEB07F0903A1FFF803FE00107
-90B55A010192C7FC6D6C13FC020713C031347DB238>I<ED7FF0913807FFFC023F7F4A7F
-902601FFE0138049018113C049484813E0EB0FFCEB1FF8A2EB3FF0A2017F6D13C04A6C13
-80EE7F00163E93C7FCACB77EA526007FF0C8FCB3B3A3003FB512F8A52B4D7DCC26>I<DA
-7FFCEB0FE00103B538807FF8010F9138E1FFFC013F02FB13FE903A7FF01FFFF39026FFC0
-07138348D90001130348168348486DEBC1FCEFC0F8000FEEE00049147F001F82A9000F5E
-6D14FF00075EA26C6C495B6C93C7FC6C9038C007FE9138F01FFC4890B55A01EF14E0D803
-C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B612FCEEFFC06C16F817FE6C8218
-806C17C06D16E00003B812F0120FD81FFCC7000F13F8D83FF0140049153F4848ED1FFC00
-FF160F491507A56D150F007F17F86D151F6C6CED3FF06C6CED7FE0D80FFE913801FFC06C
-6C6C010713806C01F8017F1300C690B612FC013F15F001071580D9003F01F0C7FC37497D
-B13D>I<EB7FC0B5FCA512037EB3923801FFC0030F13F8033F7F4B13FFDBFE077F9138C1
-F0039126C3E0017FDAC78080ECCF0014DE02DC6D7F14FC5CA25CA35CB3AAB6D8C07FEBFF
-E0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C5BA26C5B6C90C7FCEA00FC90C8
-FCABEB7FC0B5FCA512037EB3B3A2B61280A5194D7BCC22>I<EB7FC0B5FCA512037EB3B3
-B3AAB61280A5194C7BCB22>108 D<90287FC001FFC0EC7FF0B5010F01FC0103B5FC033F
-6D010F804B6D4980DBFE079026803F817F9126C1F801903AC07E007FF00003D9C3E0DAE0
-F8806C9026C78000D9F1E06D7E02CFC7EBF3C002DEEDF780DD7FFF6E7E02FC93C7FC4A5D
-A24A5DA34A5DB3AAB6D8C03FB5D8F00FB512FCA55E327BB167>I<903A7FC001FFC0B501
-0F13F8033F7F4B13FFDBFE077F9138C1F00300039026C3E0017F6CD9C78080ECCF0014DE
-02DC6D7F14FC5CA25CA35CB3AAB6D8C07FEBFFE0A53B327BB144>I<913807FF80027F13
-F80103B6FC010F15C090261FFE017F903A7FF0003FF849486D7E480180EB07FE4890C76C
-7E4817804980000F17C048486E13E0A2003F17F0A249157F007F17F8A400FF17FCAB007F
-17F8A46C6CEDFFF0A2001F17E0A26C6C4A13C0A26C6C4A13806C6D4913006C5E6C01E0EB
-1FFC6D6C495A903A3FFE01FFF0010FB612C0010392C7FCD9007F13F80207138036347DB2
-3D>I<90397FC007FFB5017F13E002C1B512FC02C714FF9126CFF80F7F9126DFC0037F00
-0301FFC77F6C496E7E02F8814A6E7E717E4A81831980A28319C0A37113E0AC19C05FA319
-805F19005F606E143F6E5D4D5A6E4A5A02FF495BDBC0075B9126EFF01F5B02E7B548C7FC
-02E114F8DAE07F13E0DB0FFEC8FC92CAFCAFB612C0A53B477CB144>I<9039FF803FE0B5
-EBFFF8028113FE02837FDA87E11380EC8F830003D99F0713C06C139E14BCA214F8A24A6C
-13806F13006F5A4A90C7FCA45CB3A8B612E0A52A327CB132>114
-D<903907FF8070017FEBF1F048B6FC1207380FFC01391FE0003F4848130F491307127F90
-C71203A2481401A27FA27F01F090C7FC13FCEBFFC06C13FEECFFE06C14FC6C806CECFF80
-6C15C06C15E06C15F06C7E011F14F8010114FCEB000FEC007FED1FFE0078140F00F81407
-15037E1501A27E16FC7E15036D14F86D13076D14F001F8EB1FE001FFEBFFC04890B51280
-486C1400D8F81F13FCD8E00313C027347CB230>I<14F8A51301A41303A21307A2130FA2
-131F133F137F13FF1203000F90B512F0B7FCA426007FF8C7FCB3A7167CAA013F14F880A2
-90391FFE01F0010F1303903907FF87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>
-I<D97FE0EC3FF0B5EC7FFFA5000315016C81B3AC5EA25EA25E7E6EEB0F7F017F021E7F6E
-017CEBFFE090393FFE01F86DB512F0010714E0010114C09027003FFE00EBC0003B337BB1
-44>I<B600C090387FFFF0A5C601F0C73803F8006E5D017F5E801707013F5E6E140F011F
-5E6E141F6D93C7FC6F5B6D153E81177E6D157C6F13FC6D5DEDF0016D5DEDF803027F5CA2
-EDFC07023F5CEDFE0F021F5CEDFF1F6E91C8FC169F16BF6E13BE16FE6E5BA26E5BA26E5B
-A36F5AA26F5AA26F5AA23C327EB041>I<B60081B500FC90387FFFF0A500019026E00003
-90C73801FC006E6F5C6C6F5E6E6F1303017F61A26E6F1307013F4A5E846E49150F011F61
-6E6F131F6D4A93C7FC179F03806E5B6D021F153EEF0FFE6DD9C03F5DEE3E0703E06E13FC
-6D027E5DEE7C0303F015816D4A6C5C03F815C3DA7FF95E4C7E03FD15E7DA3FFF5E4C137F
-19FF6E496D5BA26E94C8FC4C7FA26E5E93C7120FA26E486E5AA202015E4B1403A26E486E
-5A54327EB059>I<007FB500C090387FFFE0A5C601F0C73803F8006E5D017F5E6E140701
-3F5E80170F011F5E6E141F6D93C7FC6F5B6D153E6F137E6D157C6F13FCA26D6D5B16016D
-5DEDF803027F5CEDFC07023F5CEDFE0F021F5C15FF161F6E91C8FC16BF6E13BE16FE6E5B
-A26E5BA36E5BA26F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F8013FC486C5B387F
-E001D8FFF05B14035D14074A5A49485A007F133F4948CAFC383F81FE381FFFF86C5B6C13
-C0C648CBFC3B477EB041>121 D E
+%DVIPSBitmapFont: Fe cmbx12 13.14 53
+/Fe 53 122 df<923803FFE092B512FC020714FF021F81027F9038007FC0DAFFF0EB0FE0
+010301C0804990C7EA3FF84948147F4A81494814FF495AA2137F5CA2715A715A715AEF07
+8094C8FCA8EF07FCB9FCA526007FF0C7123F171FB3B3003FB5D8E00FB512F8A53D4D7ECC
+44>12 D<B7FCAA200A7F9C29>45 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA
+3FFCEA1FF8EA07E01010778F22>I<177817F8EE01FCA21603A2EE07F8A217F0160FA217
+E0161FA2EE3FC0A21780167FA217005EA24B5AA25E1503A24B5AA25E150FA25E151FA24B
+5AA25E157FA24BC7FCA25D1401A25D1403A24A5AA25D140FA24A5AA25D143FA25D147FA2
+4AC8FCA25C1301A25C1303A2495AA25C130FA2495AA25C133FA25C137FA249C9FCA25B12
+01A2485AA25B1207A25B120FA2485AA25B123FA25B127FA248CAFCA25AA2127CA22E6D79
+D13D>I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B2007FB712E0
+A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC4881480101EBFF802707F8
+003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC6D7F00FF16FE6D
+147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F05D17E04B13C017
+804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B131FEC3F804AC7FC
+14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816FC5A5A5A5A5A5A
+B8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90267FE01F7F9026
+FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3805C16FF7E91C7
+5B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A49B512E0168016
+E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0EA07E0EA1FF848
+7E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5BD80FFC495B2707
+FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32487BC63D>I<EE
+07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F915F1EC03E11407
+EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80131FEB3F00133E
+5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003EBE000AD023FB6
+12FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF91B612C0178017
+00A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01E1B512C001E714
+F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0497F17F8C913FC
+167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815FC5B018015F86C
+C74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB512006C90B512FC6C5D
+013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE021F6D7E027F8090
+3A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948130F01FF4A7E48
+49133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA21520913807FFE002
+1F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A6D7E8391C7FC83
+82491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C5DA26C6D495A6C
+6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C010014F0020F90C8FC
+32487BC63D>I<121F7F7F13FE90B812E0A45A18C0188018005F5FA25F485E90C8EA07E0
+007E4B5A5F007C151F4CC7FC167E5E485D15014B5A4B5AC8485A4B5AA24BC8FC157EA25D
+1401A24A5A1407A24A5AA2141FA24A5AA2147FA314FFA3495BA45BA55BAA6D5BA26D90C9
+FCEB007C334B79C93D>I<EC1FFF49B512F0010714FC011F14FF90263FF00713C049C77F
+01FCEC3FF04848EC0FF848481407000782491403000F821601A2121F7FA27F13FE6D1403
+02C05C14F002FC495A6C6D130FDAFF805B9238E01FE06C6E485A9238FCFF806C91B5C7FC
+6C15FC6C5D7F6D14FE6D806D15C06D81011F81017F81D9FFDF804813072603FE01804848
+6C804848133F4848010F1480003F8049130148486D6C13C0161F824848140382A282A217
+7FA218807F127FEFFF007F6C6C4A5AA2D81FFC4A5A6C6CEC0FF86C6C6CEB3FF06C9039F0
+03FFE06C90B612806C6C92C7FC011F14FC010714E09026003FFEC8FC32487BC63D>I<EC
+1FFE49B512C0010F14F04914FC90397FFC0FFE903AFFE003FF804849C67F48496D7E4890
+C7FC486F7E484881161F003F825B007F82A28300FF81A31880A518C0A45E127FA3003F5D
+7F121F5E120F6C6C91B5FC6C90388001EF6CEBC0036C9038E00FCF6DB5128F011F140F01
+0701FE1480010113F8903800010091C7FCA24C1300A3D803F85D487E487E486C4A5AA25F
+4C5AA24C5A49495B6C485D49010790C7FC01E0495AD807F8EB3FFC6CB448B45A6C90B55A
+6C15C06D91C8FC011F13FC010313C032487BC63D>I<EE01F8A24C7EA34C7EA24C7EA34C
+7FA24C7FA34C7FA293B57EA34B8016F303038016E316E103078016C0030F805E83031F81
+4C7E4B81153E83037E81037C7F03FC815D830201824B7F0203825D830207824B7F020F82
+5D84021F8392B8FC4A83A34A83027CC8120F02FC835C840101844A810103845C84010784
+4A81010F845C85011F85496C82B600C091B712F0A5544D7CCC5D>65
+D<93261FFF80EB01C00307B500F81303033F02FE13074AB7EA800F0207EEE01F021F903A
+FE007FF83F027F01E0903807FC7F91B5C73801FEFF010301FCEC007F4901F0814901C015
+0F4949814990C97E494882495A48498248197F5C48193F5C48191F5C48190FA2485BA21A
+075AA391CDFCA2B5FCAD7EA280F207C0A27EA36C7F1A0F6C1A80806C191F6E18006C6180
+6C197E6C6D177C6D6C17FC6D6C4C5A6D6D4B5A6D6D4B5A6D01F0ED1FC06D01FC4B5A0100
+01FF03FFC7FC6E01E0EB07FE021F01FEEB3FFC020790B612F0020116C0DA003F92C8FC03
+0714F8DB001F13804A4D79CB59>67 D<B912F0F0FF8019F019FC19FFD8001F9026800001
+14C0DD001F7F060713F806017F726C7E737E737F737F737F8587737F8587A2747EA38786
+A21C80A51CC0A586A462A51C80A51C00A26263A2631AFF636163614F5B634F5B073F90C7
+FC4F5A4F5A06035B061F5B4DB512C0BBC8FC19FC19F0198006F0C9FC524B7CCA5E>I<BB
+12C0A486D8000F01E0C77E18071801F0007F193F191F190F1907861903A31901A3EF0F80
+A2737EA497C7FC171FA2173F177F17FF160392B6FCA5EDE0031600177F173F171FA2050F
+EC0F80A3F21F00A494C8FC621A3EA21A7EA31AFE6219011903A21907190FF13FF819FF18
+03183FBBFCA262A3494A7CC951>I<BBFCA41A80D8001F01C0C7FC181F18038484197F19
+3F191F1AC0190FA31907A4171FF103E0A496C7FCA25FA25F5F5E160792B6FCA5EDC00716
+01828383A283A794C9FCB1B8FCA5434A7CC94D>I<93261FFF80EB01C00307B500F81303
+033F02FE13074AB7EA800F0207EEE01F021F903AFE007FF83F027F01E0903807FC7F91B5
+C73801FEFF010301FCEC007F4901F0814901C0150F4949814990C97E494882495A484982
+48197F5C48193F5C48191F5C48190FA2485BA21A075AA391CEFCA2B5FCAD7E050FB712C0
+80A37E94C7001FEBC000807EA27E807E807E806C7F7E6D7E6D7E6D7F6D01E05D6D6D5D6D
+13FC010001FF4AB5FC6E01E0EB07F9021F01FFEB3FF0020791B5EAE07F0201EEC01FDA00
+3FED0007030702F81301DB001F018090C8FC524D79CB60>I<B7D8FC01B712FCA5D8001F
+01C0C8001FEBC000B3AA92B9FCA503C0C8121FB3AEB7D8FC01B712FCA5564B7BCA60>I<
+B712FEA5D8000FEBE000B3B3B3ABB712FEA5274B7DCA2E>I<B8FCA5D8001F01C0C9FCB3
+B3A4193EA4197E197CA519FCA31801A2F003F8A21807180F181F183F187FEF01FF170717
+3FBA12F0A53F4B7BCA4A>76 D<B600E04DB612806F5FA26F5FA2D8001F09FCC7FC6FEF0F
+7FA2DABFFE171EA2DA9FFF173CA3028F6D1678A202876D16F0A202836DED01E0A302816D
+ED03C0A202806DED0780A26F6CED0F00A36F6C151EA26F6C5DA26F6D5CA26F6D5CA36F6D
+495AA26F6D495AA26F6D495AA3706C49C7FCA2706C131EA2706C5BA3706D5AA2706D5AA2
+70EBE1E0A370EBF3C0A270EBFF80A27190C8FCA2715AA3715AA2715A497EB600F06D4801
+03B71280A3715A715A694B7BCA74>I<B600E092B612FC8181A281D8001F6D9239001FE0
+006F705A82A28202BF7F029F7FA2028F7F02877F02837F8214810280806F7F6F7F83816F
+7F6F7F6F7F83816F80707F707F8482707F707F707FA2707F7014807113C019E0837113F0
+7113F87113FC19FE837113FF71148F7213CF1AEF847213FF8484A284848485A2858585A2
+85858585497EB600F8167F1A3F1A1F1A0FA2564B7BCA60>I<EEFFF8031FEBFFC04AB612
+FC020715FF021FD9C01F13C091277FFE000313F0902601FFF09038007FFC49496E7E4901
+80EC0FFF4990C86C7F49486F7F49486F7F017F8449486F7F4849707EA24849707E4885A2
+4849701380A2481AC04A82A2481AE0A34890CA6C13F0A5B519F8AE6C1AF0A26E5EA36C1A
+E0A26E5E6C1AC0A26C1A806E5E6C1A006E5E6C616E16FF6C616C6D4B5B6D6C4B5B6E5D6D
+6D4A5B6D6D4A5B01076D4A90C7FC6D01F8ECFFFE6D01FE01035B9028007FFFC01F13F002
+1F90B612C0020793C8FC020115FCDA001F14C0030101FCC9FC4D4D79CB5C>I<B912C018
+FCF0FF8019F085D8001F902680000713FE05007F063F1380060F13C07213E01AF0841AF8
+A27213FCA31AFEA81AFCA34E13F8A21AF0601AE04E13C0063F138095B51200050713FC92
+B75A19E096C7FC18F803C0CAFCB3ABB712FCA5474B7BCA54>I<B9FC18F8F0FF8019E019
+F8D8000F9026C0000713FE9439007FFF80061F7F727F727F727F84868684A286A862A24E
+5BA2624E5B4E5B4E5B4E5B95B5C8FC050713FC92B712F0198006FCC9FC18FF9226C0003F
+13C0050713F0717F717F717F187F85727FA28486A786A71C3E86A28474137E72157C726D
+13FCB700FC6D9038FE01F872EBFF8373EBFFF0071F14E007031480CD383FFE00574C7CCA
+5C>82 D<DA7FFCEB01C00103B5EAC003011FECF00749ECFC0F90B7121F48D9E00F13BF48
+90C713FFD807FC141F4848804848140382484880177F485A173F171F12FFA2170F7FA217
+077F7F7F6D92C7FC6D7E6C13F014FF15F86CECFF8016F86C15FF6C16C0836C826C826C82
+6C82013F816D1680010716C01300020F15E01400030714F0ED007F160F16037013F88217
+7F127800F8163FA3171FA27E18F0A27EA26CEE3FE07F18C001E0157F6DEDFF8001FC1600
+01FF140302E0EB0FFED97FFEEB3FFC486CB612F0D8FC0F5DD8F803158048C66C49C7FC48
+010313F0354D79CB44>I<003FBB12C0A5DA80019038FC001FD9FC001601D87FF0943800
+7FE001C0183F49181F90C7170FA2007E1907A3007C1903A500FC1AF0481901A5C894C7FC
+B3B3A749B812FCA54C4A7CC955>I<B700F8023FB512F8A5D8001F01C0C9380FE000745A
+B3B3AD6D180F63811A1F6D96C7FC626D7F1A7E6D7F6D606E6C4B5A6E6CED07F06E6C4B5A
+6E01C0EC3FC06E01F049B45A020101FF011F90C8FC6E91B55A033F15F8030715E0030092
+C9FC040713F0554C7CCA5E>I<B700F00203B6FCA5D8001F01E0C93803FC00745A6D6181
+1A036D6D5F1A076D6D5F1A0F6D616F161FA26D6D94C7FC626E6D153E1A7E6E177C7015FC
+6E5F8219016E6D5D19036E5F7014076E5F82190F6E6D5D191F6E6D92C8FC616F153E8319
+7E6F6D137C19FC6F6D5B18016F5DEFF003A26F01F85B18076F01FC5B180F6F5DEFFE1F6F
+92C9FC17FF607013BE18FE705BA2705BA3705BA2705BA2705BA3705BA27090CAFCA2177E
+A2584C7ECA5D>I<B700F84AB6FCA5D8001F01F0C93803FC006F705A6D4E5A6D6D4C5A81
+6D4E5A6D6D4C5A826D4EC7FC6E6D5D70157E6E5F6E7F704A5A6E4C5A6E7F704A5A6E4C5A
+6E7F71495A6E4CC8FC6F7F71137E6F5D6F7F71485A6F4A5A6F13FC71485A6F4A5A6F13FF
+F09F806F02BFC9FC7013FF60705B8260705B8260B3A7037FB612FEA5584B7ECA5D>89
+D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFF2703FC00077F486C6D7F486C6D
+7F6E7E83707EA3707E6C90C7FC6C5A6C5AC9FCA4ED1FFF021FB5FC49B6FC130F013FEBC0
+3F9038FFFE00000313F04813C04890C7FC485A485AA2485AA2485AA4167FA26D14FF007F
+15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C9038E07F076C9038FFFE0300014A
+7ED8003F9038F0007F0103018090C7FC37337CB13C>97 D<EB7FC0B5FCA512037EB3A2ED
+0FFF037F13F002C1B512FC02C714FF9126CFF80F7F9126FFC00113E092C76C7E02FC6E7E
+4A6E7E5C4A6E7E84831980A219C083A319E0AC19C0A25F1980A34D1300606E141F606E4A
+5A6E4A5A02BF4A5A91261F80035B9027FE0FF01F5B496CB548C7FC496C14F849C614E0C8
+D80FFEC8FC3B4D7CCB44>I<91380FFF8091B512F8010314FF010F158090263FFE0013C0
+D97FF8EB1FE0D9FFE0EB3FF04849EB7FF8484913FF4890C7FC5A5B121F5B003FED7FF0EE
+3FE0007FED1FC093C7FC5BA212FFAC127F7FA2123FA26D153E121F6D157E6C167C6C6D14
+FC6C16F86C6D13036C01F0EB07F0D97FFCEB1FE06DB4EBFFC0010F90B5120001035C0100
+14F0020F13802F337CB137>I<EF1FF0EE3FFFA51600177FB3A2EC0FFF91B512E0010314
+F8010F14FE013FEB01FF903A7FF8003FFFD9FFE0130F48497F48497F4890C77E4881485A
+A2485AA3127F5BA212FFAC127FA37F123FA2121F7F000F5D6C6C5C5E6C6D5B6C01E0497F
+6C6D017FEBFFE090393FFE03FE6DB512F801075C010114C09027001FFC00EBC0003B4D7C
+CB44>I<EC0FFF91B512F0010314FC010F14FF90263FFE077F90267FF0007F4948EB3FE0
+4801806D7E48824890C76C7E4848140783485A003F6F7EA3485A701380A312FFA290B8FC
+A401F8CAFCA5127FA27FA2123FA26C6CED0F80A2000F161F6C6C16006E5C6C6D147E6C6D
+5C6C6D495AD97FFCEB07F0903A1FFF803FE06D90B55A010392C7FCD9007F13FC020713C0
+31337DB138>I<ED7FE0913807FFFC021F7F027F7F902601FFE0138049018113C0902607
+FE0113E049485A14F8131FEB3FF0A26F13C0EB7FE06F1380EE3E0093C7FCADB77EA52600
+7FF0C8FCB3B3A2003FB512F8A52B4D7DCC26>I<DA7FFCEB0FF00103B538807FF8011F91
+38F1FFFC4991B512FE90267FF01F13F32701FFC007138348EB0001A248486DEBC1FC000F
+EEE0F849027F1300A2001F82A8000F5EA26D14FF00075E6C6C495BA26CD9C00790C7FC6C
+9038F01FFC4890B55A5ED803C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B612
+FCEEFFC06C16F817FE6C8218806C17C06D16E00003B812F0120FD81FFCC7000F13F8D83F
+F0140049153F4848ED1FFC00FF160F491507A56D150F007F17F86D151F6C6CED3FF06C6C
+ED7FE0D80FFE913801FFC06C6C6C010713806C01F8017F1300C690B612FC013F15F00107
+1580D9003F01F0C7FC37487DB03D>I<EB7FC0B5FCA512037EB3A2923801FFC0030F13F8
+033F13FE4B7F9126C1FE077F9126C3F0037F9138C7C001DACF8080150002DE7F02FC81A2
+5CA25CA35CB3A9B6D8C07FEBFFE0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C
+5BA26C5B6C90C7FCEA00FC90C8FCACEB7FC0B5FCA512037EB3B3B61280A5194D7BCC22>
+I<EB7FC0B5FCA512037EB3B3B3AAB61280A5194C7BCB22>108 D<90287FC001FFE0EC7F
+F8B5010F01FC0103B5FC033F6D010F804B6D6C4814E0DBFE079026C03F817F9126C3F001
+9138FC007F0003D9C7E0DAE1F8806CDA8000D9F1E06D7E02CFC7EBF3C002DE91267FF780
+131F02FC03FFC77FA24A5DA24A5DA34A5DB3A9B6D8C03FB5D8F00FB512FCA55E317BB067
+>I<903A7FC001FFC0B5010F13F8033F13FE4B7F9126C1FE077F9126C3F0037F00039038
+C7C0016CD9CF8080150002DE7F02FC81A25CA25CA35CB3A9B6D8C07FEBFFE0A53B317BB0
+44>I<913807FF80027F13F80103B6FC010F15C090261FFE017F903A7FF0003FF8D9FFC0
+EB0FFC48496D7E4890C76C7E4817804980000F17C048486E13E0A2003F17F049157FA200
+7F17F8A400FF17FCAB007F17F8A36C6CEDFFF0A3001F17E06D5C000F17C06C6C4A13806C
+17006C6D495A6C01E0EB1FFC6D6C495A903A3FFE01FFF0010FB612C0010392C7FCD9007F
+13F80207138036337DB13D>I<90397FC00FFFB5017F13F002C1B512FC02C714FF9126CF
+F80F7F9126FFC00313E0000391C77F6C01FC6E7E4A6E7E5C4A6E7E848319808319C0A471
+13E0AC4D13C0A319805FA219004D5A804D5A6E4A5A6E4A5A02FF495BDB80075B9126EFF0
+1F5B02E7B548C7FC02E314F802E014E0DB0FFEC8FC92CAFCAFB612C0A53B467CB044>I<
+9039FF803FE0B5EBFFF8028113FE02837FDA87E11380EC8F830003D99F0713C06C139E14
+BCA214F8A24A6C13806F13004A6C5A93C7FCA45CB3A7B612E0A52A317CB032>114
+D<90390FFF8070017FEBF1F048B6FC1207380FFC01391FE0003F4848130F491307127F90
+C712035A1501A27FA213E06D90C7FC13FE387FFFF0ECFFC015F06C14FC6C14FF6C15806C
+15C06C15E0C615F0013F14F8010714FCEB007F14019138003FFE150F0078140700F81403
+A26C1401A37E16FC6C14036D14F87F6DEB07F001F8EB1FE001FFEBFFC091B51280D8FC7F
+1400D8F81F13FCD8E00313C027337CB130>I<14F8A61301A41303A21307A2130FA2131F
+133F137F13FF1203000F90B512F0B7FCA426007FF8C7FCB3A6167CAA013F14F880A29039
+1FFE01F0010F1303903907FF87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>I<D9
+7FE0EC3FF0B5EC7FFFA5000315016C81B3AB5EA25EA25E7E6EEB0F7F017F021E7F6E017C
+EBFFE090393FFE01F86DB512F0010714E0010114C09027003FFE00EBC0003B327BB044>
+I<B66C90B512C0A5000101E0C73807F0006E5D6C5F6E140F017F5E80171F013F93C7FC6E
+5C011F153E6E147E6D157C6F13FC6D5DEDC001A26D01E05B16036D5DEDF0076D5DEDF80F
+027F5CEDFC1F023F91C8FC15FE5E021F133EEDFF7E6E137C16FC6E5BA26E5BA36E5BA26E
+5BA26F5AA26FC9FCA23A317DAF41>I<B60081B500FC90387FFFF0A500019026E0000301
+80903803FC006E715A6C6F5E6E6F1303017F61A26E496D1307013F616E6F130F011F4A5E
+A26E6F131F6D4A93C7FCDD9FFC5B6DD9801F153E170F03C06E137E6D023F157C93383E07
+FFDBE07E15FC6DDA7C035C03F015816D02FC5D4C7E03F815C3DA7FF95E9226FDF00013E7
+DA3FFF5E4C137F19FF6E5F4C7FA26E496D90C8FCA26E5E93C7120FA26E486E5AA202015E
+4B1403A26E486E5A54317EAF59>I<007FB500C090387FFFE0A5C601F0C73803F8006E5D
+017F5E6E1407013F5E6E140F011F5E6E141FA26D6D91C7FC5F6D153E6F137E6D157C6F13
+FC6D5DEDF0016D5DEDF803027F5C15FC1607DA3FFE5B160F021F5CEDFF1F6E91C8FC16BF
+6E13BE16FE6E5BA36E5BA26E5BA26F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F80
+13FC486C5B387FE001D8FFF05B14035D14074A5A49485A007F49CAFCEBC07E383F81FC6C
+B45A6C5B6C13C0C648CBFC3B467EAF41>121 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmtt12 17.28 6
-/Fg 6 123 df<913803FFC0023F13FC49B67E010715F04981013F15FE498190B812C048
+%DVIPSBitmapFont: Ff cmtt12 17.28 6
+/Ff 6 123 df<913803FFC0023F13FC49B67E010715F04981013F15FE498190B812C048
 8348D9FC0180489026E0001F7F480180130391C87F48486F7E49153F4848ED0FFF834848
 178083496F13C012FF8319E07FA2187FA36C5A6C5A6C5ACBFCA218FFA219C05FA219805F
 A24D13005F604D5A173F4D5A4D5AA24C5B4C5B4C5B041F90C7FC4C5A4C5A4C5A4B5B4B5B
@@ -534,8 +538,8 @@ B0003FB812FC4817FEBAFCA56C17FE6C17FC385877D74A>108 D<EE0FFC263FFFF090B5
 4949EC0FF04948C8EA1FF8495A495A485B485B485B485B4890C9FC485A48B9FCBAFCA66C
 18F06C18E03D3E7BBD4A>122 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmbx12 17.28 28
-/Fh 28 120 df<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007
+%DVIPSBitmapFont: Fg cmbx12 17.28 28
+/Fg 28 120 df<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007
 C7FCB3B3B3B3007FB91280A6395E74DD51>49 D<913801FFF8021FEBFFC091B612F80103
 15FF010F16C0013F8290267FFC0114F89027FFE0003F7F4890C7000F7F48486E7FD807F8
 6E148048486E14C048486E14E048486F13F001FC17F8486C816D17FC6E80B56C16FE8380
@@ -655,13 +659,13 @@ DA003F018002F0C7FC51427BC05A>I<B70081B600FC0103B512FCA6C66C0180C701FCC8
 90C9FCA294C87E6F5FA26F486F5A047C6F5A6E417DBF75>119 D
 E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmsy10 10.95 1
-/Fi 1 16 df<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0
+%DVIPSBitmapFont: Fh cmsy10 10.95 1
+/Fh 1 16 df<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0
 AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D>15
 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmtt10 10.95 89
-/Fj 89 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
+%DVIPSBitmapFont: Fi cmtt10 10.95 89
+/Fi 89 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
 A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14
 00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2
 02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F
@@ -714,666 +718,800 @@ B6FCA46E5B29397DB830>I<000FB612804815C05AA316800180C8FCAEEB83FF019F13C0
 3FE001FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7FC25397BB730>
 I<EC0FF8EC7FFF49B51280010714E0131F4914F090387FF80F9039FFC007F84813803803
 FE005B485A4848EB03F0ED01E0484890C7FC5B123F5BA2127FEB000C903803FFE0010F13
-F8D8FF3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F49EB07F8ED03FC
-5B90C7120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07F86D130F6C6CEB1F
-F06DEB3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713E001011380273A7C
-B830>I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00
-A24A5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA213035CA213075CA4
-495AA6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F13FC90B57E0003EC
-FF804815C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848EB03FC90C71201A5
-6D1303003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B512
-006C6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF048
-48EB07F8491303007F15FC90C712014815FE481400A66C14016C15FC6D1303003F15F86D
-1307D81FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE006D5B011F13F001
-0190C7FC273A7CB830>I<49B4FC010F13E0013F13F890B57E4880488048010113803A0F
-FC007FC0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A4815FC1501A416
-FEA37E7E6D130315076C7E6C6C130F6D133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEB
-E1FC010F138190380060011400ED03F8A2150716F0150F000F15E0486C131F486CEB3FC0
-157FEDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7C
-B830>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA
-7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3F
-FCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F13FCA3121FA2120F12
-031200120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F00127E12380E3470A630
->I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B01
-0713C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA
-7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE
-91381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7
-FCA2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<
-1278127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F0103
-13E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C02
-0713C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813
-E0000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>I<EC1FE0ECFF
-F8010313FE010F7F4914804914C090397FF03FE09038FF800F4890380007F0D803FC1303
-3A07F801FBF89038F007FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE07903901
-FC03FE007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FCA2EC
-F801D87F0114F8003FEBFC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0EA0F
-E06E13803A07F007FE009038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6DB512
-FC6D14F86D14E0010314C00100EBFE00EC1FF0273A7CB830>64 D<147F4A7EA2497FA449
-7F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049
-133F90B6FCA34881A39038FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56C
-B51280A46C496C130029397DB830>I<007FB512F0B612FE6F7E82826C813A03F8001FF8
-15076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E082
-9039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6
-FCB75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C903903FFF03E49EBFC7E011F
-13FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B48481303A2484813015B
-123F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C
-6C14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D
-1400010713FC6D13F09038007FC0273A7CB830>I<003FB512E04814FCB67E6F7E6C816C
-813A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC
-161F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A
-93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093
-C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA4
-6C16C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FC
-A5153E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A38
-7EB730>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F4848
-133F4848131F49130F485A491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA8
-92B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C13
-1FA2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC
-293A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D8
-03F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C
-496C13F06C496C13E02D387FB730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A8
-007FB6FCB71280A46C1500213879B730>I<49B512F04914F85BA27F6D14F090C7EAFE00
-B3B3123C127EB4FCA24A5A1403EB8007397FF01FF86CB55A5D6C5C00075C000149C7FC38
-003FF025397AB730>I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C496C1380D8
-03F0903803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A141F5D4A5A4A
-C8FC5C13F18101F37F13F790B57E14EFECC7F01483EC03F8140101FE7F496C7E5B157F49
-7F82151F82150F826F7EA26F7E1501821500D83FFF903803FFC0486D4813E0B56C5AA26C
-497E6C496C13C02B387FB730>I<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F
-80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE0486C4913F048
-6C4913F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F
-01E3133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC
-1FC0A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D
-13E02D387FB730>I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13C06C6E1380
-0003913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C147EA2143E14
-3FA2141FA21581A2140F15C1A2140715E1A2140315F1A21401A215F91400A3157DA3153F
-EA3FFF481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE048B512FC00
-0714FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F84814
-03B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C1580
-6C1500000114FCD8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903
-F8003FED0FFCED03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF8
-90B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<90383F
-FFE048B512FC000714FF4815804815C04815E0EBF80001E0133F4848EB1FF049130F90C7
-1207A44815F8481403B3A8147E14FE6CEBFF076C15F0EC7F87A2EC3FC7018013CF9038C0
-1FFFD83FE014E0EBF80F90B6FC6C15C06C15806C1500000114FCD8003F7FEB00016E7EA2
-1680157F16C0153F16E0151F16F0150FED07E025467BB830>I<003FB57E4814F0B612FC
-15FF6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B
-5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FC
-A53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB7
-30>I<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E48
-48137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13
-FF6C14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0A2
-ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B512
-80160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0B8
-FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730
->I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600
-A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC
-9038007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0B54913E06E5AA24A7E6C486D13
-C0D807F0903801FC00A26D130300035DA46C6C495AA46C6C495AA46D131F6D5CA3EC803F
-013F5CA46D6C48C7FCA490380FE0FEA401075B14F1A301035BA314FB01015BA314FFA26D
-5BA46E5A6E5A2B397EB730>I<D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C
-486D13E0D81FC09038001FC0000F1680A76D143F00071600A7000390380F803E9039F01F
-C07EEC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8A300005D01F913FCA2EC
-F07CA201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D
-397FB730>I<3A3FFF01FFF84801837F02C77FA202835B6C01015B3A01FC007F806D91C7
-FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA2
-6D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001
-143F49800003141F49800007140FD87FFEEB7FFFB590B5128080A25C6C486D130029387D
-B730>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F8903803F8006D1307A26C
-6C495AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA290380FE0FEA214F10107
-5BA2903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FFF8497F497FA26D5B6D5B
-2B387EB730>I<001FB612FC4815FE5AA490C7EA03FCED07F816F0150FED1FE016C0153F
-ED7F80003E1500C85A4A5A5D14034A5A5D140F4A5A5D143F4A5A92C7FC5C495A5C130349
-5A5C130F495A5C133F495A91C8FC5B4848147C4914FE1203485A5B120F485A5B123F485A
-90B6FCB7FCA46C15FC27387CB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC15
-80A46C140019476DBE30>I<007FB5FCB61280A47EC7123FB3B3B3A5007FB5FCB6FCA46C
-140019477DBE30>93 D<1307EB1FC0EB7FF0497E000313FE000FEBFF80003F14E0D87FFD
-13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F00010EB00401D0E77B730>I<007F
-B612F0A2B712F8A36C15F0A225077B7D30>I<EB3FFC48B57E4814E04880488048809038
-F00FFE9038E001FF806F7E6C48133F6C4880C8121FA491B5FC130F137F48B6FC12075A48
-EBC01F383FFC00EA7FE0138048C7FC5AA46C143FA26C6C137F9038C001FF263FF80FEBFF
-C06CB712E0A2000714F76C14C3C6020013C0D93FF090C7FC2B2A7CA830>97
-D<EA3FFC487E12FFA2127F123F1200AAEC03FE91381FFF80027F13E091B57E90B612FC82
-ECFE079138F001FF4A6C13804A137F4AEB3FC091C7121F4915E0160FA217F01607A8160F
-A217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495CD97E
-7F13C0D93C1F90C7FC90380003FC2C3980B730>I<ECFFE0010713FC011F7F017F7F90B6
-12804815C048EB807F3907FC003F485A485A49EB1F804848EB0F004990C7FC127F90C9FC
-A25A5AA87E7EA27F003FEC07C06DEB0FE06C7E6D131F6C6C14C0D807FE133F9039FFC0FF
-806C90B5FCC615006D5B011F13F801075B01011380232A7AA830>I<913801FFE04A7F5C
-A28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D81FF0133F49
-131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F
-390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F010313C0D907FC
-C8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E488048018113803A07FC
-007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FCA516
-F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE0
-6C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>I<EDFF80020713
-E0021F13F05C4A13F891B5FC491387903803FE079138FC03F0903907F800C04A1300A800
-3FB612C04815E0B7FCA36C15C0260007F0C7FCB3A9003FB512FE4880B71280A26C15006C
-5C25397DB830>I<D903FC13FF90261FFF8713C04913DF90B712E05A5A2607FE07138F90
-3AF801FE07C048486C6CC7FCA2497F001F8149133FA56D137F000F92C7FC6D5BA26C6C48
-5AEBFE0790B55A5D485C15C001DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF6C15C0
-4815F0488148813A3FE0001FFE0180130148C8127F007E8100FE168048151FA56C153F00
-7FED7F006D5C6C6C495A01F013076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7FC011F
-13FC010113C02B3E7DA730>I<EA3FFC487E12FFA2127F123F1200AAEC01FE91380FFF80
-023F13E091B57E90B67EA29138FE07FCECF8039138E001FE14C0EC8000A291C7FCA25BB3
-A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F3880B730>I<
-14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003F
-B612C04815E0B7FCA27E6C15C023397AB830>I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC
-01C091C7FCA990B512F04814F8A47EEB0003B3B3A5EC07F0A2123C007EEB0FE0B4131FEC
-3FC0147F90B512806C14005C6C5B000F13F0000313C01D4E7CB830>I<EA7FF8487EA412
-7F1200AB0203B512804A14C017E0A217C06E14809139001FE0004B5A4B5A4BC7FC4A5A4A
-5AEC0FF84A5A4A5A4A5A4A5A01FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF497F49
-6D7E6F7E826F7E15076F7E6F7E3B7FFFF81FFFE0B56C4813F017F8A217F06C496C13E02D
-387FB730>I<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB7
-30>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F138726
-07FE07EB03F801FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80
-B548018F13C0A46C486C01071380322881A730>I<EC01FE3A3FFC0FFF80267FFE3F13E0
-00FF90B57E90B67E7E6C9038FE07FCC6EBF8039138E001FE14C0EC8000A291C7FCA25BB3
-A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F2880A730>I<
-49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81F
-E0EB0FF0A24848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D
-1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B51280
-6C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF80267F
-FE7F13E000FF90B57E90B612FC6C816CEBFE07C69038F001FF4A6C13804A137F4AEB3FC0
-91C7121F4915E0160FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDA
-F00313009138FC0FFE91B55A5E495C6E13C0021F90C7FCEC03FC91C9FCAD383FFFF8487F
-B57EA26C5B6C5B2C3C80A730>I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A4813
-81390FFC007F49131F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037F
-A26C6C1307150F6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F
-13F1010F13C1903803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>I<ED07F8
-3A3FFF803FFF486DB51280B512C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F
-809238000F004A90C7FC5C5C5CA25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA7
-30>I<90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E
-007F91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02
-001380007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC
-5D5D00FC14F0D8F83F13C026780FFEC7FC222A79A830>I<EB0780497E131FA9003FB612
-E04815F0B7FCA36C15E026001FC0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC
-1FF06DB512E06D14C016806D14009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC48
-6C497E00FF14FFA2007F147F003F143F00001400B3A41501A2150315076D130F903A7FC0
-7FFFF891B612FC6D15FE7F6D4913FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3F
-FFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005D
-A26D130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE0107
-5BA214F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFF
-E0486D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE
-00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FB
-A290393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801
-C37FB580A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3EC
-E7F06DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1
-F890381F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500
-C1148014E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A2
-6C16C06C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805B
-A214C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D
-147FA26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387
-EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316
-FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A
-4A5A4990C7FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A485A48
-5A48B7FCB8FCA46C15FE28277DA630>I<ED3FF0913803FFF8140F5C147F16F09138FFF0
-0092C7FC495A5CB3A21303495A133F383FFFF0B55A5C91C8FC14C080003F7F38003FF813
-076D7E1301B3A2806D7E15F091387FFFF016F8141F8014039138003FF025477BBE30>I<
-127CA212FEB3B3B3AD127CA207476CBE30>I<EA7FE0EAFFFE6D7E8014F07EC66C7E1307
-6D7E1301B3A2806D7E15E091387FFFE06E13F8801407141F5C4A13E09138FFE00092C7FC
-495A5CB3A21303495A137F387FFFF0B5FC14C05C49C8FCEA7FE025477BBE30>I<017C13
-3848B4137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF8713E0010713C0486C13
-80D87C0113003838007C1F0C78B730>I E
+F8D8FF3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F49EB07F849EB03
+FCA290C7120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07F86D130F6C6CEB
+1FF06DEB3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713E001011380273A
+7CB830>I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF
+00A24A5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA213035CA213075C
+A4495AA6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F13FC90B57E0003
+ECFF804815C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848EB03FC90C71201
+A56D1303003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B5
+12006C6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF0
+4848EB07F8491303007F15FC90C712014815FE481400A66C14016C15FC6D1303003F15F8
+6D1307D81FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE006D5B011F13F0
+010190C7FC273A7CB830>I<49B4FC010F13E0013F13F890B57E4880488048010113803A
+0FFC007FC0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A4815FC1501A4
+16FEA37E7E6D1303A26C6C13076C6C130F6D133FD80FFC13FF6CB6FC7E6C14FE6C14F901
+3FEBE1FC010F138190380060011400ED03F8A2150716F0150F000F15E0486C131F486CEB
+3FC0157FEDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649C7FCEB3FF027
+3A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3F
+C0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0EA0FF0EA1FF8A2
+EA3FFCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F13FCA3121FA212
+0F12031200120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F00127E12380E3470
+A630>I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF849
+5B010713C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B
+7FEA7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC
+3FFE91381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<00
+7FB7FCA2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530
+>I<1278127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F
+010313E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF0
+5C020713C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A
+4813E0000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>I<EC1FE0
+ECFFF8010313FE010F7F4914804914C090397FF03FE09038FF800F4890380007F0D803FC
+13033A07F801FBF89038F007FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE0790
+3901FC03FE007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FC
+A2ECF801D87F0114F8003FEBFC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0
+EA0FE06E13803A07F007FE009038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6D
+B512FC6D14F86D14E0010314C00100EBFE00EC1FF0273A7CB830>64
+D<147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FE
+A590387F007FA4498049133F90B6FCA34881A39038FC001F00038149130FA40007814913
+07A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>I<007FB512F0B612FE6F7E
+82826C813A03F8001FF815076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B6
+5A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E
+4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C9039
+03FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B
+48481303A2484813015B123F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE
+123FA27F121F6D13016C6C14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E0
+7FE06DB512C06D14806D1400010713FC6D13F09038007FC0273A7CB830>I<003FB512E0
+4814FCB67E6F7E6C816C813A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A216
+3F17C0161FA4EE0FE0AC161F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED
+7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED8
+03F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE
+0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FC
+C7121FA8EE0F8093C7FCA5153E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8
+487FB5FCA27E6C5B2A387EB730>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90
+B6FC4813C1EC007F4848133F4848131F49130F485A491307121F5B123F491303A2127F90
+C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F12
+1F6D130F120F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F3
+0103EBC1F0010090C8FC293A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C
+496C13F06C496C13E0D803F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D
+4813F0B56C4813F8A26C496C13F06C496C13E02D387FB730>I<007FB6FCB71280A46C15
+00260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730>I<49B512F04914F85B
+A27F6D14F090C7EAFE00B3B3123C127EB4FCA24A5A1403EB8007397FF01FF86CB55A5D6C
+5C00075C000149C7FC38003FF025397AB730>I<D83FFF90380FFF80486D4813C0B56C5A
+A26C497E6C496C1380D803F0903803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D
+4A5A4A5A141F5D4A5A4AC8FC5C13F18101F37F13F790B57E14EFECC7F01483EC03F81401
+01FE7F496C7E5B157F497F82151F82150F826F7EA26F7E1501821500D83FFF903803FFC0
+486D4813E0B56C5AA26C497E6C496C13C02B387FB730>I<383FFFF8487FB57EA26C5B6C
+5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83F
+F8ECFFE0486C4913F0486C4913F8A2007F16F06C6C4913E00007160001EF14BFEC800FA3
+9039E7C01F3FA4ECE03F01E3133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC
+7DF0A3147FEC3FE0A3EC1FC0A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913
+F8A26C486D13F06C486D13E02D387FB730>I<D83FFC90381FFF80486C4913C0B54913E0
+A26C6D6C13C06C6E13800003913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014
+FCA2147C147EA2143E143FA2141FA21581A2140F15C1A2140715E1A2140315F1A21401A2
+15F91400A3157DA3153FEA3FFF481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<
+90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0A2
+90C71207A44815F8481403B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813
+FF90B6FC6C15C06C15806C1500000114FCD8003F13E0253A7BB830>I<007FB512F0B612
+FE6F7E16E0826C813903F8003FED0FFCED03FE15016F7EA2821780163FA6167F17005EA2
+4B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B
+29387EB730>I<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0133F
+4848EB1FF049130F90C71207A44815F8481403B3A8147E14FE6CEBFF076C15F0EC7F87A2
+EC3FC7018013CF9038C01FFFD83FE014E0EBF80F90B6FC6C15C06C15806C1500000114FC
+D8003F7FEB00016E7EA21680157F16C0153F16E0151F16F0150FED07E025467BB830>I<
+003FB57E4814F0B612FC15FF6C816C812603F8017F9138003FF0151F6F7E150715038215
+01A515035E1507150F4B5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F15
+0F821507A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB
+7FC0C9EA1F002E397FB730>I<90390FF803C0D97FFF13E048B512C74814F74814FF5A38
+1FF80F383FE001497E4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA
+3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13FF01031480D9003F13C0140191
+38007FE0151FED0FF0A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8
+EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>
+I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980
+A46D91C7FC2B387EB730>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F
+80B3B16D147F00011600A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06D
+B55A6D5C6D5C6D91C7FC9038007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0B54913
+E06E5AA24A7E6C486D13C0D807F0903801FC00A26D130300035DA46C6C495AA46C6C495A
+A46D131F6D5CA3EC803F013F5CA46D6C48C7FCA490380FE0FEA401075B14F1A301035BA3
+14FB01015BA314FFA26D5BA46E5A6E5A2B397EB730>I<D83FFC903801FFE0486C4913F0
+00FF16F8A2007F16F06C486D13E0D81FC09038001FC0000F1680A76D143F00071600A700
+0390380F803E9039F01FC07EEC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8
+A300005D01F913FCA2ECF07CA201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F
+5CA2EC800F6D486C5A2D397FB730>I<3A3FFF01FFF84801837F02C77FA202835B6C0101
+5B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14
+FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181
+EB7F0081497F49800001143F49800003141F49800007140FD87FFEEB7FFFB590B5128080
+A25C6C486D130029387DB730>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F8
+903803F8006D1307A26C6C495AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA2
+90380FE0FEA214F101075BA2903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FF
+F8497F497FA26D5B6D5B2B387EB730>I<001FB612FC4815FE5AA490C7EA03FCED07F816
+F0150FED1FE016C0153FED7F80003E1500C85A4A5A5D14034A5A5D140F4A5A5D143F4A5A
+92C7FC5C495A5C1303495A5C130F495A5C133F495A91C8FC5B4848147C4914FE1203485A
+5B120F485A5B123F485A90B6FCB7FCA46C15FC27387CB730>I<007FB5FCB61280A41500
+48C8FCB3B3B3A5B6FC1580A46C140019476DBE30>I<007FB5FCB61280A47EC7123FB3B3
+B3A5007FB5FCB6FCA46C140019477DBE30>93 D<1307EB1FC0EB7FF0497E000313FE000F
+EBFF80003F14E0D87FFD13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F00010EB00
+401D0E77B730>I<007FB612F0A2B712F8A36C15F0A225077B7D30>I<EB7FF80003B5FC48
+14C04880488048809038E01FFC9038C003FE14016E7E6C487F6CC77FC8123FA491B5FC13
+0F137F48B6FC12075A48EB803F383FF800EA7FE0138048C7FC5AA4157F7E6C6C13FFEBC0
+03263FF01FEBFF8090B712C07E6C14EF000314876CD9FE01138026003FE0C8FC2A2A7BA8
+30>97 D<EA3FFC487E12FFA2127F123F1200AAEC03FE91381FFF80027F13E091B57E90B6
+12FC82ECFE079138F001FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F01607
+A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E49
+5CD97E7F13C0D93C1F90C7FC90380003FC2C3980B730>I<ECFFE0010713FC011F7F017F
+7F90B612804815C048EB807F3907FC003F485A485A49EB1F804848EB0F004990C7FC127F
+90C9FCA25A5AA87E7EA27F003FEC07C06DEB0FE06C7E6D131F6C6C14C0D807FE133F9039
+FFC0FF806C90B5FCC615006D5B011F13F801075B01011380232A7AA830>I<913801FFE0
+4A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D81FF0
+133F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E
+6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F010313C0
+D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E48804801811380
+3A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7
+FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FF
+C07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>I<EDFF80
+020713E0021F13F05C4A13F891B5FC491387903803FE079138FC03F0903907F800C04A13
+00A8003FB612C04815E0B7FCA36C15C0260007F0C7FCB3A9003FB512FE4880B71280A26C
+15006C5C25397DB830>I<D903FC13FF90261FFF8713C04913DF90B712E05A5A2607FE07
+138F903AF801FE07C048486C6CC7FCA2497F001F8149133FA56D137F000F92C7FC6D5BA2
+6C6C485AEBFE0790B55A5D485C15C001DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF
+6C15C04815F0488148813A3FE0001FFE0180130148C8127F007E8100FE168048151FA56C
+153F007FED7F006D5C6C6C495A01F013076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7
+FC011F13FC010113C02B3E7DA730>I<EA3FFC487E12FFA2127F123F1200AAEC01FE9138
+0FFF80023F13E091B57E90B67EA29138FE07FCECF8039138E001FE14C0EC8000A291C7FC
+A25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F3880B7
+30>I<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3
+A9003FB612C04815E0B7FCA27E6C15C023397AB830>I<EC01C0EC07F0A2EC0FF8A3EC07
+F0A2EC01C091C7FCA990B512F04814F8A47EEB0003B3B3A5EC07F0A2123C007EEB0FE0B4
+131FEC3FC0147F90B512806C14005C6C5B000F13F0000313C01D4E7CB830>I<EA7FF848
+7EA4127F1200AB0203B512804A14C017E0A217C06E14809139001FE0004B5A4B5A4BC7FC
+4A5A4A5AEC0FF84A5A4A5A4A5A4A5A01FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF
+497F496D7E6F7E826F7E15076F7E6F7E3B7FFFF81FFFE0B56C4813F017F8A217F06C496C
+13E02D387FB730>I<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025
+387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F
+13872607FE07EB03F801FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF
+07FF80B548018F13C0A46C486C01071380322881A730>I<EC01FE3A3FFC0FFF80267FFE
+3F13E000FF90B57E90B67E7E6C9038FE07FCC6EBF8039138E001FE14C0EC8000A291C7FC
+A25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F2880A7
+30>I<49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3F
+E0D81FE0EB0FF0A24848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15
+FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90
+B512806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF
+80267FFE7F13E000FF90B57E90B612FC6C816CEBFE07C69038F001FF4A6C13804A137F4A
+EB3FC091C7121F17E049140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E
+13FFDAF00313009138FC0FFE91B55A5E495C6E13C0021F90C7FCEC03FC91C9FCAD383FFF
+F8487FB57EA26C5B6C5B2C3C80A730>I<49B413F8010FEBC1FC013F13F14913FD48B6FC
+5A481381390FFC007F49131F4848130F491307485A491303127F90C7FC15015A5AA77E7E
+15037FA26C6C1307150F6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14
+F9013F13F1010F13C1903803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>I<
+ED07F83A3FFF803FFF486DB51280B512C302CF14C06C13DF6C9038FFFC3FD8001F13E092
+38801F809238000F004A90C7FC5C5C5CA25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A
+287EA730>I<90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A4
+6C143E007F91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F903800
+0FFF02001380007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF00
+90B6FC5D5D00FC14F0D8F83F13C026780FFEC7FC222A79A830>I<EB0780497E131FA900
+3FB612E04815F0B7FCA36C15E026001FC0C7FCB216F8ED01FCA5ECE003010FEB07F814F0
+9138FC1FF06DB512E06D14C016806D14009038007FFCEC1FF026337EB130>I<D83FFCEB
+3FFC486C497E00FF14FFA2007F147F003F143F00001400B3A41501A2150315076D130F90
+3A7FC07FFFF891B612FC6D15FE7F6D4913FC6D9038F87FF8010001C0C7FC2F2880A630>
+I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D1307
+00005DA26D130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0
+FE01075BA214F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFF
+C01FFFE0486D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA5
+6D14FE00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A301
+7E13FBA290393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FF
+FC4801C37FB580A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB
+0FE3ECE7F06DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3
+F0ECC1F890381F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5
+FCB500C1148014E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B5
+15E0A26C16C06C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD9
+1F805BA214C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFD
+F0147D147FA26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3
+F81387EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE
+5AA316FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A
+5A4A5A4A5A4990C7FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A
+485A485A48B7FCB8FCA46C15FE28277DA630>I<ED3FF0913803FFF8140F5C147F16F091
+38FFF00092C7FC495A5CB3A21303495A133F383FFFF0B55A5C91C8FC14C080003F7F3800
+3FF813076D7E1301B3A2806D7E15F091387FFFF016F8141F8014039138003FF025477BBE
+30>I<127CA212FEB3B3B3AD127CA207476CBE30>I<EA7FE0EAFFFE6D7E8014F07EC66C7E
+13076D7E1301B3A2806D7E15E091387FFFE06E13F8801407141F5C4A13E09138FFE00092
+C7FC495A5CB3A21303495A137F387FFFF0B5FC14C05C49C8FCEA7FE025477BBE30>I<01
+7C133848B4137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF8713E0010713C048
+6C1380D87C0113003838007C1F0C78B730>I E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fj cmb10 10.95 87
+/Fj 87 125 df<DA07FFEB0FFC027F9038E07FFF49B500F3B51280010791B612C090261F
+FE039038FC7FE0D93FF002F013F0494848EBE0FF4948485B02805C481300A24848923800
+7FE06FEC3FC0F01F806F91C7FC81A9B97EA50003D900010180C7FCB3ACB5D8F83FEBFF80
+A53C407FBF35>11 D<EC07FF027F13C049B512F001078090391FFE03FC90393FF001FE90
+387FE0034948487E4A5A481300A2485AA36F5A6F5AED00F093C7FCA616FFB8FCA50003EB
+000781B3ABB5D8F87F13FCA52E407EBF33>I<EC07FF027F13FF49B6FC130790381FFE07
+90383FF00FEB7FE0EBFFC04A5A48497EA2485A8181ABB8FCA50003EB0003B3ACB500FCB5
+12FCA52E407EBF33>I<913B07FF8003FF80027FD9E03F13E049B56CB512F8010702FB80
+011F0103B5EA01FE90263FF8019038F800FF90267FE003495A4948484948138002804A5A
+48010014805D481600497FA26F6E13006F6E5AF0007896C7FCA6F17F80BBFCA50003D900
+01EB800384B3ABB5D8F83FD9FC3F13FEA547407EBF4C>I<EA0FC0EA1FE0EA3FF0EA7FF8
+EAFFFCA7EA7FF8A8EA3FF0A7EA1FE0A8EA0FC0A71207C7FCA8EA0FC0EA1FE0EA3FF0EA7F
+F8EAFFFCA6EA7FF8EA3FF0EA1FE0EA0FC00E4079BF1C>33 D<D80FC0137E486C13FF486C
+481380486C4813C0486C4813E0A301FE14F0A3007F7F003F7F001F7FD80FDE137ED8001E
+1300A2013E1301013C14E0A2017C1303A2017814C001F813074914800001140F4848EB1F
+004848133EA2D81F8013FC90C75A001E5C000C146024207DBE31>I<D93F801507D9FFE0
+ED1F8000037F486D153F260FF1FC157F261FF07F4BC7FC01E06DEB03FE003FD93FE0130F
+01C001FCEB3FFC007F6DB65AA2031F5C00FFD90F83EBEFE0923880000F4D5A60173F4DC8
+FCA217FE4C5AA24C5A4C5AA2007F4948485A4C5AA2003F49495AD9E03E91C9FC001F017E
+5BD9F07C13FE380FF1FC6CB448485A6C49485AC613E090273F8007F0EB3F8090C74848EB
+FFE005037F4B48487F923A3F800FF1FC94381FF07CDB7F00EBE07E037E013F133E03FEEC
+C03F4A48017F7FA24A5A4A4801FFEB0F80A24A5A4A5AA24A5A4AC7FCA214FE5C1301495A
+A24948027FEB1F00495AA24948023F5B4948EDE03E051F137E49C8EBF07C017E92380FF1
+FC01FE6FB45A496F5B017C03005B0138EE3F8041497BC34C>37 D<EC0FE0EC3FF8ECFFFC
+5B903803FC3E49487EEB0FF0131F6F7EEB3FE0A3137FA3151F93C9FCA2153E14F05D5D14
+F15D90263FFBE090387FFFFCECFFC05D92C7FC6D5A4A913800FC006E5D17016D6C4A5A60
+6F1307495E017F6D130F90B56C495A4894C7FCD803F96D5BD807F86D133E000F167E4848
+6C6C5B003F6E5B91383FFF01007F6D5CEE83E000FF6D13C76EEBEFC06E5C16FF6E91C8FC
+6E5B037F15F86D6D7E007F6E7F6FEBC0016C6C013F9038E003F092B5EAF007261FFE0791
+38FC1FE06CB5D8FC7FB512C06CDAF81F14800001DAE00714006C6CD980005BD91FF8C7EA
+1FF03E417CBF47>I<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA313FEA3127F123F121FEA0F
+DEEA001EA2133E133CA2137CA2137813F813F01201EA03E0EA07C0A2EA0F80EA1F00121E
+120C0F207BBE19>I<147814F81301EB03F0EB07E0EB0FC0A2EB1F80133FEB7F00A213FE
+A2485A1203A25B1207A2485AA3121F5BA2123FA4485AA612FFB3A2127FA66C7EA4121FA2
+7F120FA36C7EA212037FA212016C7EA2137FA2EB3F80131FEB0FC0A2EB07E0EB03F0EB01
+F813001478155A78C323>I<127012F87E127E7E6C7EA26C7E7F6C7EA26C7EA26C7E7FA2
+12007FA2EB7F80A314C0133FA214E0A4EB1FF0A614F8B3A214F0A6EB3FE0A414C0A2137F
+1480A3EBFF00A25B1201A25B485AA2485AA2485A5B485AA248C7FC127E5A5A1270155A7B
+C323>I<EB01E0EB07F8A2497E13075CA3001E141E007FEC3F80903883F07FD8FFC3EBFF
+C0EBE3F1EBF3F3267FFBF713806D5A001FB5EAFE00000314F0C66C1380D91FFEC7FCA290
+387FFF800003B512F0001F14FE3A7FFDEFFF80497E26FFF3F313C0EBE3F1EBC3F0D87F83
+EB7F80903807F83F001EEC1E00000091C7FCA380130F6D5AA2EB01E022287BC32D>I<EA
+0FC0EA1FE0EA3FF0EA7FF8EAFFFCA313FEA3127F123F121FEA0FDEEA001EA2133E133CA2
+137CA2137813F813F01201EA03E0EA07C0A2EA0F80EA1F00121E120C0F207B8D19>44
+D<B512FEA917097F981E>I<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA6EA7FF8EA3FF0EA1F
+E0EA0FC00E0E7B8D19>I<ED0380ED07C0150FA2151F1680A2153F1600A25D157EA215FE
+5DA214015DA214035DA214075DA2140F5DA2141F5DA2143F92C7FCA25C147EA214FE5CA2
+13015CA213035CA313075CA2130F5CA2131F5CA2133F91C8FCA25B137EA213FE5BA21201
+5BA212035BA212075BA2120F5BA2121F5BA2123F90C9FCA25A127EA212FE5AA25A127822
+5B7BC32D>I<EB01FE90380FFFC0013F13F090B512FC48EB87FE3903FE01FF48486C1380
+A24848EB7FC0001F15E049133FA2003F15F0A3007F15F8A500FF15FCB3A3007F15F8A600
+3F15F0A36C6CEB7FE0A2000F15C06D13FF000715806C6C4813003901FF87FE6CEBFFFC01
+3F13F06D5BD901FEC7FC263D7DBB2D>I<143C147CEB01FC1307131FEA03FFB5FCA4EAFC
+1F1200B3B3A8007FB6FCA5203C7ABB2D>I<EB0FFC90387FFF8048B512E04814F8488039
+0FF07FFE391F801FFF48486C1380387FC00701E014C0486C6C13E013F88016F0A4EA7FF0
+EA3FE0EA1FC0EA0700C7FC16E05CA216C04A1380A24A13005D4A5A5D4A5A5D4A5A4A5A49
+90C7FC5CEB03F8903907F001F0EB0FE014C090391F8003E0EB3F00137E5B491307485A48
+B6FC4815C05AA25A5A5AB7FC1680A4243C7CBB2D>I<EB0FFC90383FFFC090B512F04880
+3903F83FFC3907E00FFED80FC07F486C6C138013F801FC14C0123F13FEA5EA1FFC1680EA
+0FF8D803E01400C75A5D5D4A5A5DEC7FE090381FFFC092C7FC15C015F09038003FF8EC0F
+FE816E1380A216C06E13E0A316F0EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA416E0A2495A00
+7F15C013F0263FC00F13801600391FF83FFE6CB55A6C5C000114E06C6C1380D90FFCC7FC
+243D7CBB2D>I<ED1F80A2153F157FA215FF5C5CA25C5CA25C5CA25C91B5FC14FBEB01F3
+1303EB07E314C3EB0F83131F1403133E137E137C13F8120113F0EA03E01207EA0FC01380
+EA1F005A123E5A12FCB8FCA5C700071380AA010FB6FCA5283C7EBB2D>I<000E1407D80F
+80133F9038F801FF90B6FC5D5DA25D5D5D158092C7FC14FC14F00180C8FCA9EB87FE9038
+9FFFC090B512F0819038FC0FFC9038F007FE9038C003FF0180148016C0497EC714E0A416
+F0A21207EA1FC0EA3FE0EA7FF012FF13F8A316E013F0A26C484813C01380D87E0014806C
+491300391FC00FFE390FF03FFC6CB55A6C5C6C14C06C91C7FCEB1FF8243D7CBB2D>I<EC
+3FE0903801FFF801077F011F7F90383FF07F90397FC01F809038FF807F48EB00FF484913
+C048485AA2EA0FFCA2121FA2003F6D1380496C1300157E007F91C7FCA314309038F9FF80
+D8FFFB13E090B512F881EC07FE496C7E496C1380A216C0A201F814E0A316F0A6127FA512
+3F16E0A2121F16C0EA0FFC168000075B01FE14003903FF0FFE6CEBFFFC6C5C013F5B6D13
+C0D903FEC7FC243D7CBB2D>I<121F7F13F090B612FCA45A16F816F016E0A216C016805A
+007EC7EA3F00157E007C147C15FC4A5A4A5A485C14074A5AC75B141F4AC7FCA25C14FEA2
+1301A2495AA31307A2130FA25C131FA3133FA6137FAA6D5A6D5A6D5A263F7BBD2D>I<EB
+07FE90381FFFC0017F13F090B57E3901FE0FFC3903F803FE48486C7E000F6D1380A2485A
+ED7FC0123FA37FA27F7F6DEBFF806D7E6E13006C13F1ECFBFE6CEBFFFC5D6C14E0A26C14
+F86C806C80814815805AD807FB14C0EA0FF048486C13E0003F131F497E007F010313F080
+00FF7F49137F153FA2151FA416E06C7E153F6D14C0003F147F6D14803A1FF801FF00390F
+FE07FE6CB55A6C5CC65C013F13C0D907FEC7FC243D7CBB2D>I<EB07FE90383FFF8090B5
+12E0488048EB0FF848486C7E48486C7E001F80497E003F1580A2127F16C0A212FF16E0A5
+16F0A6127FA3003F5BA2121FA26C6C5A6C6C5A6CB6FC7E38007FFDD91FF913E0EB00C114
+01A3D807E014C0EA0FF0486C5AD83FFC1480A316004A5AA249485AD81FF05B9038E03FF0
+000F495A90B55A6C5C6C91C7FCC613FCEB3FE0243D7CBB2D>I<EA0FC0EA1FE0EA3FF0EA
+7FF8EAFFFCA6EA7FF8EA3FF0EA1FE0EA0FC0C7FCACEA0FC0EA1FE0EA3FF0EA7FF8EAFFFC
+A6EA7FF8EA3FF0EA1FE0EA0FC00E287BA719>I<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA6
+EA7FF8EA3FF0EA1FE0EA0FC0C7FCACEA0FC0EA1FE0EA3FF0127FEAFFF8A213FCA4127F12
+3F121F120FEA003CA2137C1378A313F813F0120113E0120313C01207EA0F80121F130012
+1E120C0E3A7BA719>I<007FB912E0BA12F0A4003F18E0CDFCB0003FB912E0BA12F0A46C
+18E03C1C7BA447>61 D<EB3FFC48B512804814E0000F14F0391FF03FF8393F801FFC007F
+EB0FFE13C0D8FFE013FF13F0A5EA7FE015FE383FC01FD80F0013FCC7123FEC7FF815F0EC
+FFC015804913005C5C495AA25C495AA35CAA90C8FCA8EB0FC0497E497E497E497EA66D5A
+6D5A6D5A6D5A20407BBF2B>63 D<ED07804B7E4B7EA34B7EA34B7EA34B7EA34A7FA34A7F
+A24A8015CFA2020F801587A2021F801503A2023F80EC3E01A2027E80EC7C00A24A6D7EA2
+0101814A133FA20103814A7FA249B77EA34982A29138800007011F8291C77EA2496E7F13
+3EA2496E7FA201FC8249157FB500F0013FB512FCA53E3F7DBE45>65
+D<B712FEEEFFE017F817FE83C69026F0001F1380040713C07013E0A27013F0A28218F8A7
+18F05EA218E05E18C04C1380041F1300EE7FFC91B612F017C017F817FE913AF00007FF80
+7013C07013E07013F018F8177F18FCA318FEA3173F177FA418FCA217FF18F85E18F04C13
+E0160FB912C018005F17F01780373E7CBD41>I<DB7FF8130E0207B5131E023FECC03E91
+B6EAF07E0103EDF9FE499038F807FF011FEBC0004990C7123FD97FFC141F4948140F4849
+1407484914035C484914015A91C9FC5A187E485AA3007F173EA25BA200FF1700AE127F18
+3E7FA2123FA2187E6C7E187C7E6E15FC6C6D15F86C16016EEC03F06C7F6C6DEC07E06D6C
+EC0FC06DB4EC3F806D01C0EBFF0001079038F807FE6D90B55A010015F0023F5C02071480
+9126007FF8C7FC37407BBE42>I<B712FCEEFFC017F017FC17FFC69026F0003F7F04077F
+040113F082717E717E717E170F84831980A219C083A219E0A519F0A483A55FA419E0A519
+C0A25F1980A24D1300A24D5A4D5A177F4D5A4C5B04075B043F5BB9C7FC5F17F817C004FC
+C8FC3C3E7CBD46>I<B812FEA483C69038F8003F16071601828383A2EF1F80A3170FED01
+F0A3EF07C0A3150394C7FCA21507151F91B5FCA5ECF81F1507150318F8A21501EF01F0A5
+92C71203A218E0A21707A2170F171F18C0173F17FF1603161FB9FCA21880A3353D7CBC3C
+>I<B812F8A417FCC69038F8007F161F1607160316011600A2177EA3173EA2ED03E0A217
+1FA417001507A2150F153F91B5FCA5ECF83F150F1507A21503A792C8FCACB612FEA5303D
+7CBC39>I<DB7FF0131C912607FFFE133C023F9038FF807C91B6EAE0FC010315F3010F90
+38F80FFF49EBC0014948C7127F4948143FD9FFF0141F4849140F4816075C484914035A91
+C812015A1700485AA3007F177CA25BA200FF94C7FCAC0303B612F0A2127FA27F92C7387F
+FC00123FA36C7EA27E807E6C7F806C7F6C7F6D6C14FF6DB45B6DEBC0036DEBF80F010390
+B512E7010015C1023FEC807C02079038FE001C9126007FF090C7FC3C407BBE47>I<B6D8
+F87FB512FCA5C601F8C7387FFC00B3A491B7FCA502F8C7127FB3A7B6D8F87FB512FCA53E
+3E7CBD47>I<B612F8A5C6EBF800B3B3B0B612F8A51D3E7DBD24>I<010FB61280A5D90001
+EBE000B3B3A4EA1FE0EA3FF0EA7FF8A2EAFFFCA44A5BA26C48485B01F091C7FC6C48485A
+391FF03FFC6CB55A6C5C000114C026001FFCC8FC293F81BD2F>I<B600F890B512F8A5C6
+01F8C73803F8004D5A4D5A4D5A4D5A4DC7FC17FE4C5A4C5A4C5A4C5A4C5A4C5A4CC8FC16
+FE4B5A4B5A4B5A4B5A151F4B7E4B7EA24B7E14F902FB7F91B6FC15DF039F7F158F030F7F
+4A6C7F4A7E02F880816F7F83167F83707E82848284707F82848284707F177F84B6D8F80F
+B512FCA53E3E7CBD47>I<B7FCA5C601F8C8FCB3AD177CA417FC17F8A41601A3160317F0
+1607A2160F161F163F16FF1503B8FC17E0A42E3E7CBD37>I<B500FC93B512F86E5DA36E
+5DC6F1F800A26FEC07BFA301FD6DEC0F3FA201FC6D141EA36E6C143CA36E6C1478A36E6C
+14F0A26E6CEB01E0A36E6CEB03C0A36E9038800780A36E9038C00F00A26EEBE01EA36F6C
+5AA36F6C5AA36F6C5AA26FB45AA36F5BA36F5BA36F90C7FCA26F5AB500FC033FB512F8A2
+167CA216384D3E7CBD56>I<B500F891B512FC80A28080C6933800FC008181A28181A201
+FD7F01FC7FA26E7E6E7E80826E7F80826E7F6E7FA26E7F6F7EA26F7E6F1380A26F13C06F
+13E0A26F13F06F13F8A26F13FCEE7FFEA2EE3FFF82A28282A2828282A2177F173FA2171F
+170FA21707B500FC1403A217011700A23E3E7CBD47>I<913801FFC0021F13FC91B67E01
+0315E04901807F903A1FFE003FFCD93FF8EB0FFE49486D7E49486D7F48496D7F48834A7F
+48834890C86C7EA2488349153FA2003F83A249151F007F83A400FF1880AE007F1800A36D
+5DA2003F5FA36C6C4B5AA26C5F6E14FF6C5F6C6D495B6E5B6C5F6C6D495B6D6C4990C7FC
+D93FFEEB3FFE6D6C6CB45A010790B512F06D5D01001580021F01FCC8FC020113C039407B
+BE44>I<B712F816FF17E08317FCC6D9F0007FEE1FFF7013808218C08218E0A318F0A818
+E0A318C05E18804C13005EEEFFFE91B612F85F17C04CC7FC02F8C9FCB3A4B612F8A5343E
+7CBD3E>I<913801FFC0021F13FC91B67E010315E04901807F903A1FFE003FFCD93FF8EB
+0FFE49486D7E49486D7F48496D7F48496D7FA24890C86C7E488349153F001F83A249151F
+003F83A3007F834981A300FF1880AE007F1800A46D5D003F5FA36C6C4B5AA2000F027F5C
+903AFF01FF807F6C4901E05B6C01876D485A15C16C9026CF80795B6C9026EF007F5B6DB4
+6D90C7FC6D5D6D01805B01079038C0FFF06D90B55A0100ED8001021FED03800201EBCFC0
+91C7EA0FE01807EFF81F94B5FCA3701400A4705BA2705B60705B715AEF1FC039517BBE44
+>I<B712E016FF17C017F883C69039F0007FFE93381FFF801607707F84A2707FA284A860
+A24C5BA2604C5B041F90C7FCEEFFFE91B612F817E094C8FC17C0DAF00113F06F6C7E707E
+83161F83A2707FA684A6191F18E0A282F0F03FB6D8F003143E70EBF87E70EBFFFC053F13
+F8050F13F0CB13C0403F7CBD45>I<D907FE133890393FFFC07890B5EAF0F84814F90007
+14FF380FFE07EBF0004848133F4848131F150F007F1407491303A212FF1501A36D1300A2
+7F7F6D140013FE387FFFE014FEECFFE06C14FC816CECFF806C15C06C15E016F012016C15
+F86D14FC131F010114FEEB001F14019138003FFF150F81A200788012F8A281A27EA216FE
+7E15036C15FC7F6DEB07F813F001FCEB1FF09039FFC07FE091B512C000FC1580D8F83F14
+00D8F00713FC48C613E028407BBE33>I<003FB812FCA5D9FC03EBE01FD87FE0ED07FE01
+C01501018015001300007E177EA3007C173EA400FC173F48171FA5C71600B3AF013FB612
+FEA5383D7DBC3F>I<B600F890B512F8A5C601F8C8EAF800B3B3A5017F150160A280013F
+1503606D6C1407010F4B5A6E4A5A6D6D133F6D6D01FFC7FC6D9038F807FE6D6CB55A6E5C
+020F14E0020314809126003FFCC8FC3D3F7CBD46>I<B600F0010FB5FCA5C601F8C8EA1F
+00A26E5D017F163EA26E157E013F167C6E15FC6D5EA26F13016D5EA26D6D495AA26F1307
+6D5EA26F130F6D5E816D4BC7FCA26F5B027F143EA26F137E023F147C6F13FC6E5CA21681
+6E5CA216C36E5C16E76E5CA216FF6E5CA36E91C8FCA26F5AA36F5AA36F5AA26F5AA36F5A
+A2403F7EBD45>I<B600E0B6D8F007B51280A500019026F0000101F8C73807C00070160F
+6C6D6184177F6D6C4EC7FC84173F6D6C183E177F846E187E6D92B5147C856F17FC6D4A5E
+05F77F03C016016D02035E05E313E003E016036D02075E05C113F003F016076D61DC0F80
+13F803F8160F6D6193391F007FFC03FC161F027F95C8FC4C14FE043E013F5BDA3FFE163E
+047E14FF047C6D137EDA1FFF167C04FC15FC4C7F6E5FA24C7F6E5FA24C7F6E5FA24C7F6E
+5FA24C7F6E5FA293C8127FA26F93C9FC037E81033E153E593F7EBD5E>I<003FB5D8FC0F
+B512F0A5D8003F90C7380FC0006D6D495A4DC7FC6D7F6D6D137E5F6D7F4C5A6D6D485A6D
+13FC4C5ADA7FFE5B160F6E6C485A6E139F04BFC8FC6E13FEA26E5B6E5BA28082806F7EA2
+6F7E83A24B7F92B5FC83DA01FB7FEC03F303F17FEC07E1DA0FC07F707EEC1F804B6C7E5C
+027E6D7F707F5C49486D7FA249486D7F49486D7FA249486D7F49486E7EA2B6011FB6FCA5
+403E7EBD45>I<B600F80103B512C0A5C66C48C8380F80006E151F6D4CC7FC816D167E6D
+7F6F5C6D5E6F13016D5E6F13036D4B5A6D7F6F495A027F5D6F131F6E92C8FC6E6D5AEEC0
+7E80705A80EEF1F86E5C6E13FBEEFFE0805F815F6F90C9FC815EB3A2021FB6FCA5423E7F
+BD45>I<003FB712F8A5DAC00313F09026FC000713E05B01E04913C05B49491380127F90
+C74813004B5A127E4B5AA24A5B127C4A5B5C5E4A5BC7FC4A5BA24A90C7FC5C5D4A5AA249
+5BA2495B5B5D4949137CA2495BA24990C7FC4915FC4A14F8495AA2485B1601485BA24849
+1303485B16074849130F161F4890C7123FEEFFF04848130FB8FCA52E3E7BBD38>I<EAFF
+FEA6EAFC00B3B3B3B3A7EAFFFEA60F5B78C319>I<0160130301F0EB07800001140F0003
+141FD807C0EB3E00A248485B48C75A001E5C003E1301003C5C007C1303A200785CA200F8
+1307485CA2D8F7E013BFD8FFF0EBFF8001F814C001FC14E001FE14F0A3007F7FA36C486C
+13E06C486C13C06C48EB7F806C48EB3F00242077BE31>I<EAFFFEA6EA007EB3B3B3B3A7
+EAFFFEA60F5B7FC319>I<EB0FFE90387FFFC048B512F04814FC3907FC0FFE48486C7E6D
+6C7F486C7E82A26E7FA36C5A6C5AEA01E0C8FC5C49B5FC131F90B6FC000313F84813C048
+1300EA1FFC485A127F5B12FF5BA45CA26C6C5A16F83B3FF807BFFF80391FFC1F3F390FFF
+FE1F6C497E0001EBF80326003FE0C8FC292B7EA92C>97 D<13FFB5FCA512077EAFEC03FE
+91381FFFC0027F13F091B57E9138FE0FFE9138F003FF4A7E02C014804A6C13C017E0A3EE
+7FF0A317F8AC17F0A3EEFFE0A217C05D02C014806E4813006E485A9138FC1FFC01FCB55A
+496C13E0D9F01F1380C7D807FCC7FC2D407EBE33>I<EB03FF011F13E0017F13F890B57E
+48EB83FE3903FE01FF00075B4848481380121F13F8123FA2127F496C13006E5AEC007800
+FF91C7FCAC127FA27F003FEC07C0A26C6C130F16806C6C131F000715006C6C137F6CEBC1
+FE6CEBFFFC6D13F0011F5B010390C7FC222B7DA928>I<ED01FEEC01FFA5EC000F1507AF
+EB01FF011F13C7017F13F790B6FC4813C148EB007F4848131F485A001F140F5B123FA248
+5AA312FFAC127FA36C7EA3001F141F6C7E00074A7E6D90B512F83803FF83C690B6FC6D13
+EF011F13CF903A03FE0FF8002D407DBE33>I<49B47E010F13F0013F7F90B512FE48EBC3
+FF48010013804848EB7FC04848133F001F15E05B003FEC1FF0A2485A150F16F8A212FFA2
+90B6FCA401F0C8FCA5127FA37F003F15F8A26C6C1301000F15F06D13036C6CEB07E06C90
+38800FC06C9038F07F806C6CB512006D5B010F13F8010013C0252B7EA92A>I<EC1FF8EC
+FFFE01077F491480D91FF813C0D93FE013E0EB7FC1EBFF81481301A348486C13C0ED7F80
+ED3F0092C7FCAAB6FCA5000390C8FCB3ACB6FCA523407EBF1C>I<D907FE13FC90393FFF
+C3FE90B5EAF7FF4891B5128048130F3907FC03FE3A0FF801FF7F001FEDFF00496C13BE16
+80003F81A7001F5DA26D5A000F92C7FC6C6C485A3903FF0FFCECFFF8485CD80F3F13C0D9
+07FEC8FC90CAFC5AA27FA213E090B512F015FF6C15C0826C816C8182120F4881393FE000
+3FD87F80EB07FF150148C7FC81A56D5B007F5D6D13036C6C495AD81FF8EB1FF86CB4EBFF
+F06C90B55A000115806C6C49C7FC010713E0293D7EA82D>I<13FFB5FCA512077EAFED7F
+E0913801FFF802077F4A7F91381FC3FFDA3E031380147CEC780102F014C014E0A214C0A3
+1480B3A4B5D8FE1F13FFA5303F7EBE33>I<EA01F8487E487E487E481380A66C13006C5A
+6C5A6C5AC8FCA913FFB5FCA512077EB3ABB512F8A515407EBF19>I<EC1F80EC3FC0EC7F
+E0ECFFF04913F8A66D13F0EC7FE0EC3FC0EC1F8091C7FCA9EC07F8EB0FFFA5EB003F141F
+B3B3A2EA1F80EA3FC0EA7FE0EAFFF015F0143FA2EC7FE015C0397FE0FF80D83FC113006C
+B45A6C5B6C13F0C613801D5387BF1C>I<13FFB5FCA512077EB092B512E0A592380FE000
+4B5A4B5A4BC7FC15FE4A5A4A5A4A5A4A5A4A5A143FECFFE0A28181A2ECDFFCEC8FFE140F
+6E7E6E7FA26E7F6E7FA26F7E6F7EA26F7E6F7EB539FC7FFFF8A52D3F7FBE30>I<13FFB5
+FCA512077EB3B3AFB512FCA5163F7EBE19>I<01FFD97FE0EB3FF0B52601FFF8EBFFFC02
+07D9FC037F4A6D487F91281FC3FF0FE17FDA3E03D99F017F0007017C14BE6CD97801EBBC
+0002F002F88002E05CA202C05CA302805CB3A4B5D8FE1FD9FF0FEBFF80A549297EA84C>
+I<01FFEB7FE0B53801FFF802077F4A7F91381FC3FFDA3E0313800007137C6CEB780102F0
+14C014E0A214C0A31480B3A4B5D8FE1F13FFA530297EA833>I<49B47E010F13F0013F13
+FC90B6FC48018113803A03FE007FC04848EB3FE0000F15F049131F001F15F8A24848EB0F
+FCA2007F15FEA400FF15FFAB007F15FEA3003F15FC6D131F001F15F8A26C6CEB3FF00007
+15E06C6CEB7FC03A01FF81FF806C90B51200013F13FC010F13F001011380282B7EA92D>
+I<9038FF03FEB5381FFFC0027F13F091B57E9138FE1FFE9138F007FF0007497E6C01C014
+804A6C13C017E081A217F0A2167F17F8ACEEFFF0A317E05D17C0A26E4813806E4813006E
+485A9138FC1FFC91B55A16E0029F1380DA87FCC7FC0280C8FCACB512FEA52D3B7EA833>
+I<49B4131E010FEBC03E013FEBE07E90B5EAF0FE48EBC1F948EB807F48EB003F485A4848
+131FA2003F140F5B127F1507A2485AAC127F7FA2123F150F6C7E151F6C7E0007143F6C6C
+13FF6C13C36C90B5FC6D13EF011F138F903803FE0F90C7FCAC0203B512F8A52D3B7DA830
+>I<3901FE07F800FFEB0FFE91383FFF804A13C0EC7C7F9138F8FFE03807FFF06C5B5CA2
+ED7FC09138803F80ED1F0092C7FCA291C8FCB3A3B6FCA523297FA827>I<90387FE1E038
+03FFFB4813FF5A381FE07F383F801F387F000F007E130712FE1403A27EA26DC7FC13F013
+FF6C13F014FC6C13FF15806C14C07E6C14E0000114F06C7E010313F8EB003F140F007813
+0712F814037EA36C14F06C1307A29038800FE09038F03FC090B51280150000F813FC38E0
+3FF01D2B7DA924>I<131FA65BA55BA25BA25A5A5A001FEBFFC0B6FCA4000790C7FCB3EC
+03E0A97EEC87C0A26CEBCF806C13FF6D1300EB1FFEEB07F81B3B7EB923>I<D9FF80EB7F
+C0B5EB7FFFA5000714036C80B3A55DA35D7E4B13E0DAC01E13FF6CEBE07E6DB45A6D5B01
+0F13E0010101801300302A7EA833>I<B539FC1FFFE0A5000390398000F800ECC0016C5D
+A2ECE0036C5D1507D97FF05BA2ECF80F013F5CA2ECFC1F011F91C7FC5D90380FFE3EA215
+7E903807FF7CA215FC6D5BA26D5BA36D5BA36E5AA26E5AA36EC8FC2B287EA730>I<B500
+E1B53887FFF8A50007903B801FF0003F006C6F133E150F02C0157E6C4A6C137CA26C01E0
+5D4B7EA2D97FF04A5AED7FFF157DD93FF84A5A03FD138303F81387D91FFCECC7C014FD92
+38F07FCFD90FFFECEF80A29238E03FFF6D93C7FCA24B7E6D5DA2ED800F6D5DA2ED00076D
+5DA24A1303027E5C027C13013D287EA742>I<3B7FFFFC7FFFE0A5C69039E007E0004B5A
+90387FF01FD93FF85B4BC7FC90381FFC7EEB0FFE5D6D6C5A7F5D6D5B7FA26E7E143F814A
+7E14FF81497FEB03F301078002E17FEB0FC049487F6F7E90383F003F017E806F7EB500E0
+B512F8A52D287FA730>I<B539FC1FFFE0A5000390398000F800ECC0016C5DA2ECE0036C
+5D1507D97FF05BA2ECF80F013F5CA2ECFC1F011F91C7FC5D90380FFE3EA2157E903807FF
+7CA215FC6D5BA26D5BA36D5BA36E5AA26E5AA36EC8FCA25C143EA2000E5BEA3F80387FC0
+FC486C5AA2EBE1F0A2EBE3E013C7387FCFC0387D3F80D83FFFC9FC5BEA0FF8EA07E02B3B
+7EA730>I<001FB61280A4D9F80F1300EBE01F01C05B49485A130048495A4A5AA2D83E01
+5B5B5D495BA2C64890C7FC5B5C495A017FEB0F8014F8EBFFF0A248EBE01F48150014C048
+1380A248495A485A5D48485B007F5B9038F80FFEB6FCA421287EA728>I<B812F0A42C04
+809A2D>I<BE12C0A45A04809A5B>I E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Fk cmbx12 14.4 49
 /Fk 49 122 df<EEFFFC031FEBFF804AB612E0020781021F9038C00FF8913A7FFE0003FC
 DAFFF0EB00FE4949EB03FF4901805B4990C7487F49485CA2495A4D7F013F6F5B5CA37190
 C7FC715AEF01F894C9FCA90403B512C0BAFCA526003FFCC7120783B3B3A6003FB5D8FC03
 B612C0A542547DD34B>12 D<B712F0AB240B7F9F2D>45 D<EA07F0487E487E487E487EB5
-1280A76C13006C5A6C5A6C5A6C5A1111769025>I<157815FC14031407141F14FF130F00
-07B5FCB6FCA2147F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>49
-D<EC3FFE0103B512E0010F14FC013F14FF90B712C048D9C07F7F2703FE000F13F8D807F8
-01037FD80FE06D7F48486D7F48488001F01680486C6E13C07F486C6E13E07FA27013F0A5
-6C5AA26C5AEA0FF0EA03C0C914E05EA218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B
-4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC
-02FEEC03E0495A495A495A495AD91F80140749C8FC013E150F017FB7FC90B812C05A5A5A
-5A5A5A5AB9FC1880A4344E79CD43>I<91380FFFC091B512FC0107ECFF80011F15E09026
-3FF8077F9026FF800113FC4848C76C7ED803F86E7E491680D807FC8048B416C080486D15
-E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B
-5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E0030113F89238007FFE707E701380
-7013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FC
-A25E18F891C7FC6C17F0495C6C4816E001F04A13C06C484A1380D80FF84A13006CB44A5A
-6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD9001F1380374F7ACD43>I<177C
-17FEA2160116031607160FA2161F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C
-15FCEC01F815F0EC03E01407EC0FC01580EC1F005C147E147C5C1301495A495A5C495A13
-1F49C7FC133E5B13FC485A5B485A1207485A485A90C8FC123E127E5ABA12C0A5C96C48C7
-FCAF020FB712C0A53A4F7CCE43>I<D80380150ED807E0157E01FEEC03FED9FFF0137F91
-B65A5F5F5F5F5F94C7FC5E5E16F016C093C8FC15F801E190C9FC01E0CAFCABEC0FFF027F
-13F001E3B512FE01E76E7E9026FFF8077FDAC0017F49C713F8496E7E49143F4981496E7E
-6C481680C9FC18C08218E0A418F0A3EA0FE0487E487E487E487EA418E0A35B6C484A13C0
-5B491680003EC85A003F17006C6C4A5A6D5D6C6C4A5AD807F8495BD803FE01075B2701FF
-C03F5B6C90B65A013F4AC7FC6D14F8010314C09026007FF8C8FC344F79CD43>I<ED0FFF
-92B512E0020780021F14FC91397FFE03FE903A01FFF0007F4901C0EB3F804990C7121F49
-48EC7FC0494814FF49484913E049485B01FF5C485BA2485B5AA2486F13C04A6D1380486F
-1300177E94C7FC5AA291CAFC5AA21508913801FFF8020713FFB54814C04A14F04AC66C7E
-023C6D7E4A6D7E4A6D7E7013804A15C0A24A15E07013F05C18F8A491C714FCA37EA67EA4
-6C17F880A27E18F06C5D18E06C6D15C07E6E4913806C6D15006D6C495A6D6CEB7FFC6DB4
-48485A6D90B55A010315C0010092C7FC023F13FC020713C0364F7ACD43>I<121F7F7FEB
-FF8091B81280A45A1900606060A2606060485F0180C86CC7FC007EC95A4C5A007C4B5A5F
-4C5A160F4C5A484B5A4C5A94C8FC16FEC812014B5A5E4B5A150F4B5AA24B5AA24B5A15FF
-A24A90C9FCA25C5D1407A2140FA25D141FA2143FA4147F5DA314FFA55BAC6D5BA2EC3FC0
-6E5A395279D043>I<913807FFC0027F13FC0103B67E010F15E090261FFC0113F8903A3F
-E0003FFCD97F80EB0FFE49C76C7E48488048486E1380000717C04980120F18E0177FA212
-1F7FA27F7F6E14FF02E015C014F802FE4913806C7FDBC00313009238F007FE6C02F85B92
-38FE1FF86C9138FFBFF06CEDFFE017806C4BC7FC6D806D81010F15E06D81010115FC0107
-81011F81491680EBFFE748018115C048D9007F14E04848011F14F048487F484813030300
-14F8484880161F4848020713FC1601824848157F173FA2171FA2170FA218F8A27F007F17
-F06D151FA26C6CED3FE0001F17C06D157F6C6CEDFF806C6C6C010313006C01E0EB0FFE6C
-01FCEBFFFC6C6CB612F06D5D010F1580010102FCC7FCD9000F13C0364F7ACD43>I<9138
-0FFF8091B512F8010314FE010F6E7E4901037F90267FF8007F4948EB3FF048496D7E4849
-80486F7E484980824817805A91C714C05A7013E0A218F0B5FCA318F8A618FCA46C5DA37E
-A25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13F390387FF803011FB512E36D14C301030283
-13F89039007FFE03EC00401500A218F05EA3D801F816E0487E486C16C0487E486D491380
-A218005E5F4C5A91C7FC6C484A5A494A5A49495B6C48495BD803FC010F5B9027FF807FFE
-C7FC6C90B55A6C6C14F06D14C0010F49C8FC010013F0364F7ACD43>I<91B5FC010F14F8
-017F14FF90B712C00003D9C00F7F2707FC00017FD80FE06D7F48486E7E48C87FD87FE06E
-7E7F7F486C1680A66C5A18006C485C6C5AC9485A5F4B5B4B5B4B5B4B5B4B90C7FC16FC4B
-5A4B5A16C04B5A93C8FC4A5A5D14035D5D14075DA25D140FA25DAB91CAFCAAEC1FC04A7E
-ECFFF8497FA2497FA76D5BA26D5BEC3FE06E5A315479D340>63 D<BA7E19FCF1FF801AF0
-1AFCD8000701F0C7000F13FF060014C0071F7F070713F807017F737F747E747F747F8674
-7F747F8886888688A2757EA31D8087A21DC0A51DE0A387A963A31DC0A51D80A2631D00A3
-515AA2646264505B6264505B505B5090C7FCF2FFFE4F5B07075B071F5B96B512C0060F91
-C8FCBB5A1AF01AC007FCC9FC19805B527CD167>68 D<BC1280A5D8000701F8C7000114C0
-F0001F19071901851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC17
-01A317031707170F177F92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA3
-95C8FCA21BFCA21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F
-0603B5FCBCFCA21BC0A34F517CD058>I<BB12FEA5D8000701F8C700077FF0007F191F19
-0785858586861B80A21A1FA31A0FA41BC006F81307A497C7FCA31701A317031707170F17
-7F92B6FCA59238F8007F170F170717031701A31700A795C9FCB3B812F8A54A517CD055>
-I<B8D8C003B8FCA5D8000701F8C9001FEBE000B3AE92BAFCA503F8C9121FB3B1B8D8C003
-B8FCA560527CD169>72 D<B812C0A5D8000701F8C7FCB3B3B3B2B812C0A52A527CD132>
-I<027FB71280A591C76C90C7FCB3B3B3EA07F0EA1FFC487E487EA2B57EA44C5AA34A485B
-7E49495BD83FF8495BD81FE05DD80FFC011F5B2707FF807F90C8FC000190B512FC6C6C14
-F0011F14C0010101F8C9FC39537DD145>I<B812F8A5D8000701F8CAFCB3B3A91A7CA41A
-FC1AF8A51901A31903A219071AF0190FA2191F193F197F19FF180360183F4DB5FCBB12E0
-A546527CD151>76 D<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF01EFA2
-02EF6DEF03CFA202E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA26F6C17
-78A26F6C17F0A26F6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D151EA2
-6F6D5DA3706C5DA2706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA2706D13
-1EA2706D5BA2716C5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8FCA371
-5BA2715BA2725AA2725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180>I<BAFC
-19F819FF1AE086D8000701F0C7001F13FC060113FF726C13807313C0070F13E01BF08573
-13F81BFCA27313FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13C04F13004E48
-5A061F5B92B812F01AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C>80
-D<B912F0F0FF8019F819FF1AC0D8000701F0C714F0060F7F060113FE727F737F737F8573
-7F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC4F5A06035B060F13F095B512C092
-B8C9FC19F819E019F89226F0000313FE9439007FFF80727F727F727F727F727F8684A286
-84A787A71D1C75133EA38575137E73157C7513FC731401B86C6D9038F803F807039038FE
-07F07390B512E0736C14C0080F1400CEEA7FFC5F537CD164>82 D<91260FFF80130791B5
-00F85B010702FF5B011FEDC03F49EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5
-FC4848C87E48488149150F001F824981123F4981007F82A28412FF84A27FA26D82A27F7F
-6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C83
-6C836D826D82010F821303010082021F16801400030F15C0ED007F040714E01600173F05
-0F13F08383A200788200F882A3187FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D
-5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7
-FC48C66C14FC48010F14F048D9007F90C8FC3C5479D24B>I<003FBC1280A59126C0003F
-9038C0007F49C71607D87FF8060113C001E08449197F49193F90C8171FA2007E1A0FA300
-7C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A553517BD05E>I<B800C00103
-B612FCA5D8000701F8CAEBF000F31F80B3B3B11B3FA26D97C7FC81637F1B7E6D6D17FE50
-5A6E7E505A6E6D15076E4D5A6E6D4B5A6E6D4B5A6E01F84B5A6E6DDA03FFC8FC6E6CB46C
-EB0FFE6F9039F001FFF8030F90B65A030316C0DB007F92C9FC040F14F8DC007F13805E53
-7CD167>I<B700FC017FB600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0F
-C06D7161876F1C1F6D7196C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F01
-6D66704A806E525A88704A17076E059F5F70021F80080F160F6E6570023F806EDC3E074C
-C8FC8870027E5F6EDC7C03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B70
-010317016E4C6D5D060716C00580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F
-170F6F92C76C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC17
-7E6F4A6E147C1DFFDDFFF06E14FC6F62A24E816F62A270496F5BA24E817061A295C97E70
-61A270487090CAFCA37048705AA24D1601040360A27048705A84537DD18B>87
-D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0486C6D7F6EEB3FFC
-48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6FC91B7FC0107
-1487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A5BA2485AA45EA2
-6D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C9026F81FC014F0
-6C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641>97
-D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301017F
-913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A285
-84A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA
-87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C04154
-7BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001
-FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48
-92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC
-3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC
-020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91
-B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980
-485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C
-6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9
-003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901
-817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191
-C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01
-F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE
-903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3FFC02
-03B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC495A49
-5AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7007FB5
-12FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90
-267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83FF813
-E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A
-6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFC
-A2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC12074848
-C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D003F18
-006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F
-03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4EE1F
-FC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3
-C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E
-000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3
-A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003FFE00EF
-1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8ED1FE0
-4B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F6F7F83
-707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537CD247>
-107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFFE0
-B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F
-001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C0
-159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB5
-12FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC9239
-3F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3AC
-B6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F9038
-807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8
-6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2
-6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80
-7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F
-13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F
-92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61
-6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14
-80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F
-FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF
-150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114
-D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980
-127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C
-816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00
-F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF
-C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414
-FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE
-07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203
-13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F
-A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512
-03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8
-EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F
-13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E
-5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A
-6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5000101F0C701F0C7381FF8006E027F
-ED07E06C715DA26E023F150F017F705DA26E181F013F4B6C92C7FC6E606D70143E94B5FC
-6F177E6D4A6E137C03C001F315FC6D715B160303E001E114016D020702E05B03F013C06D
-71485A160F03F8D9807F13076D05F85B93381F003F03FC160F027F4902FC5BDBFE3E011F
-131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF3E4C6D137E6E5FA24C7F6E5F4C7F
-6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E6FC9FC5A367DB461>I<B600F001
-07B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E
-6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F
-13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA2
-6F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC
-5D14015D14034A5A6C48485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CB
-FC404D7DB447>121 D E
+1280A76C13006C5A6C5A6C5A6C5A1111769025>I<913803FFC0023F13FC91B6FC010315
+C0010F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0
+A24817E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FE
+A6003F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D
+4913006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC02
+0313C0384F7BCD43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0
+EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>I<EC3FFE0103B512E0010F14FC013F
+14FF90B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F484880
+01F01680486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05E
+A218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A
+5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F
+80140749C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>
+I<91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C
+7ED803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD8
+01FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEE
+FF80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FC
+A218FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816
+E001F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F15
+80010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F16
+3F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC0
+1580EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A12
+07485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<
+D80380150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016
+C093C8FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8
+077FDAC0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3
+EA0FE0487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A
+5A6D5D6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F8
+010314C09026007FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91397FFE
+03FE903A01FFF0007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913E04948
+5B01FF5C485BA2485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC5AA215
+08913801FFF8020713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013804A15
+C0A24A15E07013F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E06C6D15
+C07E6E4913806C6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C0010092C7
+FC023F13FC020713C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A1900606060A260
+6060485F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16
+FEC812014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D
+141FA2143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC002
+7F13FC0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48
+488048486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802
+FE4913806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017
+806C4BC7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE748018115C0
+48D9007F14E04848011F14F048487F48481303030014F8484880161F4848020713FC1601
+824848157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D
+157F6C6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F15
+80010102FCC7FCD9000F13C0364F7ACD43>I<91B5FC010F14F8017F14FF90B712C00003
+D9C00F7F2707FC00017FD80FE06D7F48486E7E48C87FD87FE06E7E7F7F486C1680A66C5A
+18006C485C6C5AC9485A5F4B5B4B5B4B5B4B5B4B90C7FC16FC4B5A4B5A16C04B5A93C8FC
+4A5A5D14035D5D14075DA25D140FA25DAB91CAFCAAEC1FC04A7EECFFF8497FA2497FA76D
+5BA26D5BEC3FE06E5A315479D340>63 D<BA7E19FCF1FF801AF01AFCD8000701F0C7000F
+13FF060014C0071F7F070713F807017F737F747E747F747F86747F747F8886888688A275
+7EA31D8087A21DC0A51DE0A387A963A31DC0A51D80A2631D00A3515AA2646264505B6264
+505B505B5090C7FCF2FFFE4F5B07075B071F5B96B512C0060F91C8FCBB5A1AF01AC007FC
+C9FC19805B527CD167>68 D<BC1280A5D8000701F8C7000114C0F0001F19071901851A7F
+1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC1701A317031707170F177F
+92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA395C8FCA21BFCA21BF8A2
+1A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F0603B5FCBCFCA21BC0A3
+4F517CD058>I<BB12FEA5D8000701F8C700077FF0007F191F190785858586861B80A21A
+1FA31A0FA41BC006F81307A497C7FCA31701A317031707170F177F92B6FCA59238F8007F
+170F170717031701A31700A795C9FCB3B812F8A54A517CD055>I<B8D8C003B8FCA5D800
+0701F8C9001FEBE000B3AE92BAFCA503F8C9121FB3B1B8D8C003B8FCA560527CD169>72
+D<B812C0A5D8000701F8C7FCB3B3B3B2B812C0A52A527CD132>I<027FB71280A591C76C
+90C7FCB3B3B3EA07F0EA1FFC487E487EA2B57EA44C5AA34A485B7E49495BD83FF8495BD8
+1FE05DD80FFC011F5B2707FF807F90C8FC000190B512FC6C6C14F0011F14C0010101F8C9
+FC39537DD145>I<B812F8A5D8000701F8CAFCB3B3A91A7CA41AFC1AF8A51901A31903A2
+19071AF0190FA2191F193F197F19FF180360183F4DB5FCBB12E0A546527CD151>76
+D<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF01EFA202EF6DEF03CFA202
+E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA26F6C1778A26F6C17F0A26F
+6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D151EA26F6D5DA3706C5DA2
+706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA2706D131EA2706D5BA2716C
+5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8FCA3715BA2715BA2725AA2
+725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180>I<BAFC19F819FF1AE086D8
+000701F0C7001F13FC060113FF726C13807313C0070F13E01BF0857313F81BFCA27313FE
+A41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13C04F13004E485A061F5B92B812F0
+1AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C>80 D<B912F0F0FF8019F819FF1A
+C0D8000701F0C714F0060F7F060113FE727F737F737F85737F87A2737FA387A863A26163
+63A24F5B4F5B4F90C8FC4F5A06035B060F13F095B512C092B8C9FC19F819E019F89226F0
+000313FE9439007FFF80727F727F727F727F727F8684A28684A787A71D1C75133EA38575
+137E73157C7513FC731401B86C6D9038F803F807039038FE07F07390B512E0736C14C008
+0F1400CEEA7FFC5F537CD164>82 D<91260FFF80130791B500F85B010702FF5B011FEDC0
+3F49EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E48488149150F00
+1F824981123F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15
+F86CECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D82010F82130301
+0082021F16801400030F15C0ED007F040714E01600173F050F13F08383A200788200F882
+A3187FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A
+5A02F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048
+D9007F90C8FC3C5479D24B>I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8
+060113C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6
+C994C7FCB3B3AC91B912F0A553517BD05E>I<B800C00103B612FCA5D8000701F8CAEBF0
+00F31F80B3B3B11B3FA26D97C7FC81637F1B7E6D6D17FE505A6E7E505A6E6D15076E4D5A
+6E6D4B5A6E6D4B5A6E01F84B5A6E6DDA03FFC8FC6E6CB46CEB0FFE6F9039F001FFF8030F
+90B65A030316C0DB007F92C9FC040F14F8DC007F13805E537CD167>I<B700FC017FB600
+FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0FC06D7161876F1C1F6D7196C7
+FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F016D66704A806E525A88704A17
+076E059F5F70021F80080F160F6E6570023F806EDC3E074CC8FC8870027E5F6EDC7C0316
+3E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B70010317016E4C6D5D060716C0
+0580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F170F6F92C76C5D1DF8DDF03E
+6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC177E6F4A6E147C1DFFDDFFF06E
+14FC6F62A24E816F62A270496F5BA24E817061A295C97E7061A270487090CAFCA3704870
+5AA24D1601040360A27048705A84537DD18B>87 D<EC7FFF0107B512F0013F14FE90B77E
+48D9E00F7F2703FE000113F0486C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90
+C7FC6C5AC9FCA6037FB5FC020FB6FC91B7FC01071487013FEBF0074913803901FFFC0048
+13F0485B485B485B4890C7FC5A5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01
+F113F86C9026C003E1EBFFE06C9026F81FC014F06C90B5487EC6ED001F011F01FC010713
+E0010101E090C8FC3C387CB641>97 D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13
+FE033FEBFFC092B612F002F301017F913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F
+4A6E7F4A824A6E7FA2727EA285A28584A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A
+5B6E4A5B6F495BDACFC04990C7FCDA87F0EB7FFC913A03FE03FFF849C6B612E0496D1480
+49011F01FCC8FC90C7000313C041547BD24B>I<913801FFF8021FEBFF8091B612F00103
+15FC010F9038C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485B
+A2486F138091C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F1707
+6C6D15C07E6E140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01F
+F0010390B55A01001580023F49C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE00
+1F1707B3A4913801FFE0021F13FC91B6FC010315C7010F9038E03FE74990380007F7D97F
+FC0101B5FC49487F4849143F484980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C
+7EA37EA26C7F5F6C6D5C7E6C6D5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0F
+FFC07FCF6D90B5128F0101ECFE0FD9003F13F8020301C049C7FC41547CD24B>I<913803
+FFC0023F13FC49B6FC010715C04901817F903A3FFC007FF849486D7E49486D7E4849130F
+48496D7E48178048497F18C0488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E0
+49CAFCA6127FA27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C
+6DEC3F806D6CECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC
+020113F034387CB63D>I<ED3FFC0203B5FC020F14C0023F14E09139FFF81FF0499038C0
+3FF849EB807F49903800FFFC495A495AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB7
+12E0A526007FF8C8FCB3B3A7007FB512FEA52E547CD329>I<DA3FFF14FF0103B5D8F007
+13C0010FDAFC1F13E0013FECFF7F90267FFC0F9038FF9FF09026FFE001EBF83F48496C13
+E0484990387FF01F4890C7D83FF813E0489338FC0FC0F0078048486E6CC7FCA2003F82A9
+001F5EA26C6C4A5AA26C5E6C6D495A6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14
+FC01C314F02607C03F90C9FC91CBFCA2120FA37FA213F813FE90B7FC6C16F817FF18C06C
+836C836C836D828448B9FC12074848C700031480D81FF8EC003F4848150748486F13C083
+485A83A56D5D007F18806D5D003F18006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049
+485A6C01FE011F5B6C6CB71280010F03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>
+I<EB3FF0B5FCA51203C6FCB3A4EE1FFC93B512C0030314F0030F8092391FE07FFC92393F
+001FFE037C8003F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807
+B612C0A542537BD24B>I<137F497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC
+90C8FCADEB3FF0B5FCA512017EB3B3A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6
+FCB3A54CB512F8A59339003FFE00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE
+7FC04CC8FC4B5A4B5AED0FF8ED1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F
+7F02FE80DAF8077F4A7E6F7F6F7F83707E82707F84707F707F82707F84707F177F717E4D
+13C0B6D8F003B6FCA540537CD247>107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C
+537BD225>I<D93FF0D91FFCEDFFE0B591B500C0010713FE030302F0011F6D7E030F6E01
+7F8092271FE07FFCD9FF037F922A3F001FFE01F8007F0003027C9126FF03E080C602F06D
+D90780137FDAF1E0038FC77FDAF3C0159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A
+5EA44A5EB3ACB6D8F807B6D8C03FB512FEA567367BB570>I<D93FF0EB1FFCB591B512C0
+030314F0030F8092391FE07FFC92393F001FFE0003027C80C602F07FDAF1E081ECF3C0DA
+F7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542367BB54B>I<913801FFE002
+1F13FE91B612C0010315F0010F9038807FFC903A1FFC000FFED97FF86D6C7E49486D7F48
+496D7F48496D7F4A147F48834890C86C7EA24883A248486F7EA3007F1880A400FF18C0AC
+007F1880A3003F18006D5DA26C5FA26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C
+495BD93FFE011F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8FC020113E03A38
+7CB643>I<903A3FF001FFE0B5010F13FE033FEBFFC092B612F002F301017F913AF7F800
+7FFE0003D9FFE0EB1FFFC602806D7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4
+721380AC1A0060A36118FFA2615F616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EB
+FFFC9126FBFE075B02F8B612E06F1480031F01FCC8FC030313C092CBFCB1B612F8A5414D
+7BB54B>I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC00
+03D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA5
+5CB3AAB612FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003F
+D80FF81307D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFF
+C06C13FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0
+EC003F030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC
+3F8001F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7
+FC2C387CB635>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F
+90B6FCB8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6D
+EBF0FC6DEBFFF86D6C5B021F5B020313802A4D7ECB34>I<D93FF8913801FFC0B50207B5
+FCA50003ED001FC61607B3AE5FA35FA2017F5D173B177B6D6C14F3DC01E313F06D6CD907
+C3EBFFC0903A0FFFC03F836D90B51203010114FE6D6C13F8020701E091C7FC42377BB54B
+>I<B600F00107B5FCA5000101F8C8EA7FE06C6DED3F00A2017F163E6E157E013F167C6E
+15FC6D5E6F13016D5E8117036D5E6F13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C13
+3E177E023F147C6F13FC6E5C16816E5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FC
+A26F5AA36F5AA26F5AA26F5AA26F5A6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5
+000101F0C701F0C7381FF8006E027FED07E06C715DA26E023F150F017F705DA26E181F01
+3F4B6C92C7FC6E606D70143E94B5FC6F177E6D4A6E137C03C001F315FC6D715B160303E0
+01E114016D020702E05B03F013C06D71485A160F03F8D9807F13076D05F85B93381F003F
+03FC160F027F4902FC5BDBFE3E011F131F023F04FE90C8FC167EDBFF7C010F5B6E01FCEC
+FF3E4C6D137E6E5FA24C7F6E5F4C7F6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA203
+3E6FC9FC5A367DB461>I<B600F00107B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E18
+7E013F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7
+FC6F5B027F143E6F137E023F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16
+FF6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81F
+C0133E486C137E486C137C486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFC
+EB81FE6CB45A6C13F000035BC690CBFC404D7DB447>121 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmr10 10.95 86
-/Fl 86 124 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
-F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
-FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
-D<4AB4FC021F13C091387F01F0903901FC0078D907F0131C4948133E494813FF49485A13
-7F1400A213FE6F5A163893C7FCAA167FB8FCA33900FE00018182B3AC486CECFF80007FD9
-FC3F13FEA32F407FBF33>I<4AB47E021F13F791387F00FFEB01F8903807F001EB0FE0EB
-1FC0EB3F80137F14008101FE80AEB8FCA3C648C77EB3AE486CECFF80007FD9FC3F13FEA3
-2F407FBF33>I<4AB4ECFF80021FD9C00F13E0913B7F01F03F80F8903C01F80078FE003C
-D907F0D93FF8130E49484948131F49484948EB7F804948484913FF137F02005CA201FE92
-C7FC6FED7F0070141C96C7FCAAF13F80BBFCA3C648C76CC7FC197F193FB3AC486C4A6CEB
-7FC0007FD9FC3FD9FE1FB5FCA348407FBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00
-AC121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33
-D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013
-00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E
-0018130C0038131C003013181C1C7DBE2D>I<013F4C7ED9FFC04B7E2601E0E015072607
-C070150F48486C4B5A023E4BC7FC48486C5D48D90FC0EB01FE003ED90EF0EB07FCDA0F3F
-133E007E903A070FFFF8F8007C0200EBC1F0EE000300FC6D6C495A604D5A171F95C8FC17
-3E177E177C5F16015F007C4948485A1607007E5E003E49495A020E131F003F93C9FC6C49
-133E260F803C137E0238137C6C6C485B3901E0E0016CB448485AD93F0049133F90C74848
-EBFFC0030F903801E0E093398007C0704B4848487E4B153C033E90381F001C4B497F03FC
-133E4B150F4A48017E7F0203147C5D4A4801FCEB0380140F5D4AC7FC5C143E5C14FC5C49
-5A13034948027CEB07005C4948147E011F033E5B91C8140E013E153F017E6F5B017C9238
-0F803C4917380001706C5A49923801E0E0496FB45A6C48043FC7FC41497BC34C>37
-D<EC0FC0EC3FF0ECF878903801F01CEB03E049487E130FEC800F011F7FA2EB3F00A5EC80
-0EA25DA25DA25D6D6C5AECC1C0A2ECC38002E7C7387FFFFCEB0FEE14FC4A020713C06D48
-913801FE006E5DEF00F06D7E4D5A496C5D010F1503D91DFF4A5A013893C7FC496C6C5B01
-E0150E48486C6C131E00036E131C2607801F143C000F6E5B001F6D6C1370263F000714F0
-6F485A48D903FE5B913801FF03486D495A0487C8FCED7FCFED3FFE6F4814386D6D5AA200
-7F6E6C14786D6D6C14704B6C14F06C6C496C6C13E0001F91393E3FC0016C6C903AFC1FF0
-03C03D07FC07F007FC1F800001B5D8C001B512006C6C90C7EA7FFCD90FF8EC0FF03E437C
-C047>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113801203
-13005A120E5A1218123812300B1C79BE19>I<1430147014E0EB01C0EB03801307EB0F00
-131E133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6
-127C12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12007F1378
-7F133E131E7FEB07801303EB01C0EB00E014701430145A77C323>I<12C07E12707E7E12
-1E7E6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0
-A6130314F0B214E01307A614C0130FA31480A2131F1400A25B133EA25BA2137813F85B12
-015B485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<EB03C0A2805CA600F0140F
-00FC143F00FE147F00FF14FF393FC3C3FC390FE187F03903F18FC03900FDBF00EB3FFCEB
-0FF0EB03C0EB0FF0EB3FFCEBFDBF3903F18FC0390FE187F0393FC3C3FC39FF03C0FF00FE
-147F00FC143F00F0140F00001400A6805CA220277AC32D>I<121EEA7F8012FF13C0A213
-E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A1218123812300B1C79
-8919>44 D<B512FEA617067F961E>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A79
-8919>I<ED0180ED03C01507A21680150FA216005DA2151E153EA2153C157CA2157815F8
-A25D1401A25D1403A25D1407A25D140FA24AC7FCA2141E143EA2143C147CA2147814F8A2
-5C1301A25C1303A25C1307A25C130FA291C8FC5BA2131E133EA25BA2137813F8A25B1201
-A25B1203A25B1207A25B120FA290C9FC5AA2121E123EA2123C127CA2127812F8A25A1260
-225B7BC32D>I<EB01FE90380FFFC090383F03F090387C00F849137C48487F48487F4848
-EB0F80A2000F15C04848EB07E0A3003F15F0A290C712034815F8A64815FCB3A26C15F8A5
-6C6CEB07F0A3001F15E0A36C6CEB0FC0A26C6CEB1F80000315006C6C133E6C6C5B017C5B
-90383F03F090380FFFC0D901FEC7FC263F7DBC2D>I<EB01C013031307131F137FEA07FF
-B5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D78BC2D>I<EB07FC90383FFF8090B5
-12E03903F01FF83907C007FC390F0001FE001E6D7E001C1580003CEC7FC05AED3FE01270
-B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F168015FF16004A5A5D4A5A
-4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A495A49C71270133E133C5B4914E048
-5A485A485A48C7120148B6FCA25A4815C0B7FCA3243D7CBC2D>I<EB07FC90383FFF8090
-38F80FE03901E003F839078001FCD80F007F000E6D7E001E1580D81F80137F486C14C07F
-A27F5BA2121F6C5AC8138015FF1600A24A5AA24A5A5DEC07E04A5A023FC7FCEB1FFCECFF
-809038000FE0EC07F86E7E6E7E6E7E1680ED7FC0A216E0153FA216F0A2120C123F487E48
-7EA316E0A249137F6CC713C01278EDFF807E6C4913006C495A3907C007FC3903F80FF0C6
-B55A013F1380D907F8C7FC243F7CBC2D>I<150E151E153EA2157EA215FE1401A21403EC
-077E1406140E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B
-1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD
-2D>I<00061403D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCAC
-EB01FE90380FFF8090383E03E090387001F8496C7E49137E497F90C713800006141FC813
-C0A216E0150FA316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F
-80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F824
-3F7CBC2D>I<EC1FE0ECFFF8903803F03E90380FC00F90391F000780133E017EEB1FC049
-133F4848137F12035B12074848EB3F80ED1F00001F91C7FC5BA2123FA3485AA214FE9038
-87FF8039FF8F07E090389C01F09038B800FC01B0137E13F0497F16804914C0A2ED1FE0A3
-4914F0A5127FA6123F6D14E0A2121FED3FC0A26C6C1480A20007EC7F006C6C137E6C6C5B
-6C6C485A90387E07F06DB45A010F1380D903FCC7FC243F7CBC2D>I<1238123C123F90B6
-12FCA316F85A16F016E00078C712010070EC03C0ED078016005D48141E151C153C5DC812
-7015F04A5A5D14034A5A92C7FC5C141EA25CA2147C147814F8A213015C1303A31307A313
-0F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>I<EB03FC90381FFF8090387C07E090
-38F001F83901E0007C48487F48487F48C7FCED0F80121E16C0003E1407A4123FA26DEB0F
-807F6C6C131F6D140001FC133E6C6C5B9038FF80786C6D5A6CEBF3E06CEBFF806C91C7FC
-133F6D13C06D7F013F13F801787F48486C7E3903E01FFF48486C1380260F800313C04848
-7E489038007FE0003E143F007E141F007CEC0FF01507481403A31501A46C15E0007C1403
-A2007E15C06C14076CEC0F806DEB1F006C6C133ED807F05B3901FC03F86CB512E0011F13
-80D903FCC7FC243F7CBC2D>I<EB03FCEB1FFF90387E07C09038FC03F048486C7E48486C
-7E4848137C000F147E4848137F81003F15805B007F15C0A2151F12FF16E0A516F0A5127F
-153FA36C7EA2001F147F120F6C6C13FF6D13DF000313013900F8039F90387E0F1FD91FFE
-13E0EB07F090C7FCA2ED3FC0A41680157FD80F801400487E486C13FEA24A5A5D49485AEB
-8007391E000FE0001F495A260FC07FC7FC3803FFFE6C13F838003FC0243F7CBC2D>I<12
-1EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E00
-0A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213
-C0A4127F121E1200A412011380A3120313005A1206120E120C121C5A1230A20A3979A619
->I<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61
-D<EB1FF890B5FC3903E01FC0390F0007F0001EEB03F848EB01FC4814FE140000FE14FF7E
-7FA46CC7FC123EC7EA01FEA2EC03FCEC07F815F0EC0FC0EC1F80EC3F00143E5C147814F8
-5C13015CA2495AA25CAB91C7FC90C8FCA8EB0780EB1FE0A2497EA46D5AA2EB078020407B
-BF2B>63 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15C3A291380381
-FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D7E91B6FCA249
-819138800001A249C87EA24982010E157FA2011E82011C153FA2013C820138151FA20178
-82170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65
-D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE707E701380EF7FC0EF3FE0A2EF
-1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF804C1300EE03FCEE0FF8EE7FE0
-91B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3FE0EF1FF018F8170F18FC1707
-A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403138048486C90380FFE00B85A
-17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E020F9038FF801E913A3FF007
-E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE4948140FD93FE0140749481403495A
-91C812014848150012034848167E5B000F173EA24848161EA2123F5B180E127FA3491600
-12FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007173C6D16386C6C1678000117
-706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D6CEC1F00D903FE143E902600
-FF8013F891393FF007F0020FB512C0020391C7FC9138003FF037427BBF42>I<B712FCEE
-FF8017E000019039C0001FF86C6C48EB03FEEE00FF717E717EEF0FE084717E717E170184
-717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A21980A218FF19004D5AA24D5A
-6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A178004FCC8FC3C3E7DBD45>
-I<B912E0A300019038C000016C6C48EB001FEF0FF01703A217011700A31870A41838161C
-A41800A2163CA2167C16FC150391B5FCA3EC80031500167C163CA2161CA21807A3180E93
-C7FCA4181E181CA2183CA2187CA218F8170117031707171F48486CEB01FFB912F0A3383E
-7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0170F1707A21703A31701A4
-EF00E0A21638A31800A31678A216F81501150791B5FCA3EC8007150115001678A21638A6
-93C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C912603FFFE131C021F9038FF
-803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948143DD91FE0141F4948140F
-4948140701FF15034890C8FC491501485A000716005B000F177C5B001F173CA2485AA218
-1C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE00EF03FC123FA27F121FA2
-6C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907F8141ED903FEEC3C7C9026
-00FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC9138003FF03C427BBF47>I<
-B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3A691B7FCA30280C7120FB3
-A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612F0A3C6EBF000EB3FC0B3B3
-B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713006E5A1401B3B3A6123FEA
-7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07EC7
-FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA3000101E0C7000F138026007F
-80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C5A4C5A4CC8FC163E5E5E4B
-5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7FCEC878791388F03FE9138
-9E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2707E707EA2707F717E8417
-3F717E717EA2717E848419802601FFE04A13C0B600C090B6FCA3403E7DBD47>I<B612F8
-A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35FA25F5F5F4C5A160748486C
-133FB8FCA3313E7DBD39>I<B500C093383FFFF0A300016D93387FF800D8007F18E0D977
-F016EFA3D973F8ED01CFA2D971FCED038FA3D970FEED070FA26E150E80A26E6C141CA36E
-6C1438A26E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A2037F130E
-A36F6C5AA26F6C5AA36F6C5AA25FED07F0A2923803F9C0A36FB45AA26F90C7FCA213F848
-6C147ED807FFEF3FF8B500F8013C011FB512F0A34C3E7DBD53>I<B56C91B512F88080D8
-007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA26E7E
-6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7F
-C0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F170FA2
-170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807FFFE
-91391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E7E49
-C86C7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F003F18
-C0A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A36C6C
-4B1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4AC7FC
-6D6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE03C42
-7BBF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F80EF
-3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3FF091
-B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<ED7FE0913807FFFE91
-391FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F49486E7E49486E7E49
-C86C7E498248486F7E49150300038348486F7EA2000F834981001F1880A24848EE7FC0A3
-007F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0A26C6CEEFF80A3000F
-18006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A6C6C48486C485A017F
-D9800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD907F1EB03FE902601FD
-C013F8903A007EE007E091271FF03FC013180207B5FC9139007FE1E0DB00011438837113
-78A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715AEF01F83D527BBF47>
-I<B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2717E
-A284A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F0913880
-01FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004190EA28218E0057F13
-1E2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE09438003F803F407DBD
-43>I<D907FC130C90391FFF801C017FEBF03C3901FC03F83A03F0007E7CD807C0EB1FFC
-4848130F001F140748C71203003E1401007E1400A2007C157C12FCA2163CA36C151CA27E
-A26C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E0
-010714F0EB007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163F
-A27EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF0
-7F803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF0
-007FE001018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00
-E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0
-C70007130026007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F1503
-6E4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B512
-80020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C01809138
-007F806CEF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E1401
-01075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F14
-38A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A
-6E130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE01
-7FB5D88007B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E
-143F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F0010761
-04037F6E0281140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0
-DA7F80160EA24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014
-F84C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA2
-6E5FA24B157F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007F
-B5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C
-6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BED
-F81E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFE
-ED71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E0238
-6D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E00
-076DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF8
-006C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D
-6D1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E
-13016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA3
-413E7FBD44>I<003FB712F8A391C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EED
-FF80A2003C4A1300007C4A5A12784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FC
-A24A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA2
-495A495A173C495AA24890C8FC485A1778485A484815F8A24848140116034848140F4848
-143FED01FFB8FCA32E3E7BBD38>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>
-I<486C13C00003130101001380481303000EEB070048130E0018130C0038131C00301318
-0070133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133F
-A2003F131F01C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFC
-A40E5B7FC319>I<EB0FF8EBFFFE3903F01F8039078007E0000F6D7E9038E001F8D81FF0
-7F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC90381FF87FEB7F803801FC00EA07F8
-EA0FE0485A485AA248C7FCEE038012FEA315FFA3007F5BEC03BF3B3F80071F8700261FC0
-0E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0292A7DA82D>97
-D<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FDE001F09039FF
-C000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217
-E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039E0780FC09026
-C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8017C131E4848131F
-4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3
-003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C137890383F01
-F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA3150715031501B114FF010713
-E190381F80F990387E003D49131FD803F81307485A49130348481301121F123F5B127FA2
-90C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C497ED8007C0179
-13F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE90380FFFC09038
-3F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15C04848130FA212
-7F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F15C06C6C1303
-6DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC232A7EA828>
-I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F811401137FEC00FE01
-FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<167C903903F801
-FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC0600000F6EC7FC
-49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903FE0FC026071F
-FFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A
-0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E157E6C5D6C6C49
-5A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7EA82D>I<EA01
-FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F09138E001F8D9FD
-C07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F7DBE33>I<EA
-01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201B3AC487EB512
-F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313
-017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0381E07C0380F
-FF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B51280A392383FFC00
-16E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD9038FFDFC0EC9F
-E0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA282486C14FEB539F07F
-FFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512F8A3153F7DBE1A>
-I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B7803F03C01F80007
-903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91C75B13FF4992C7FC
-A2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF
-903807FFC091381E07E091387803F000079038E001F82603F9C07F0001138001FB6D7E91
-C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF010713E090381F
-81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2
-003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6C
-EB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A
-7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A03FFC001FC6C49
-6C7E91C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC0
-6D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891
-C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F80F090397F00387C
-01FC131CD803F8130E4848EB0FFC150748481303121F485A1501485AA448C7FCAA6C7EA3
-6C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990383F81F190380FFFC1
-903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC787C
-ECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487EB512FEA3
-1F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E1307003C1303127C00
-78130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8
-003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E06CEB
-03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA2
-13FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB
-7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14FE00FF147FA30007
-14030003140100011400B3A51501A31503120015076DEB06FF017E010E13806D4913FC90
-381FC078903807FFE00100903880FE002E297DA733>I<B539E00FFFE0A32707FE000313
-006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC007011F91C7FCA290
-380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF001005BA2EC7FC0A3
-6E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE003FE00013C06C48
-6D48EB3F806C4817006D010F141E00016F131C15076D163C00004A6C1338A2017F5E4B7E
-151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0017F5BEDE03F02F014
-0701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14DE6D15FCED00076D
-5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<B539F01FFFE0A30003
-D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC90380FE00EECF01E
-6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BECF1FC903801E1FEEC
-C0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80486C80000F4A7EB539
-803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48EB01FC6F5A00015D
-7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F130EA26D6C5AA2ECF8
-3C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2140EA2141E141C14
-3C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA780EEA3C3CEA1FF8EA
-07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E495A121C4A5A003C49
-5A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90393FC00380A2EB7F
-80EBFF005A5B484813071207491400485A48485BA248485B4848137F00FF495A90B6FCA2
-21277EA628>I<B812F0A22C0280982D>I E
+%DVIPSBitmapFont: Fl cmr10 10.95 51
+/Fl 51 122 df<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90
+393F8001FE90387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC00031501
+1500B3AC486C497EB5D8F87F13FCA32E407EBF33>12 D<1430147014E0EB01C0EB038013
+07EB0F00131E133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA312
+3E127EA6127C12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12
+007F13787F133E131E7FEB07801303EB01C0EB00E014701430145A77C323>40
+D<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA2148013
+0FA214C0A3130714E0A6130314F0B214E01307A614C0130FA31480A2131F1400A25B133E
+A25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<B512
+FEA617067F961E>45 D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>I<EB01
+FE90380FFFC090383F03F090387C00F849137C48487F48487F4848EB0F80A2000F15C048
+48EB07E0A3003F15F0A290C712034815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15
+E0A36C6CEB0FC0A26C6CEB1F80000315006C6C133E6C6C5B017C5B90383F03F090380FFF
+C0D901FEC7FC263F7DBC2D>48 D<EB01C013031307131F137FEA07FFB5FC139FEAF81F12
+00B3B3ACEB7FF0B612F8A31D3D78BC2D>I<EB07FC90383FFF8090B512E03903F01FF839
+07C007FC390F0001FE001E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA5
+6C5A6CC7FC120CC813E0153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4A
+C7FC147E147C5C495A495A495A495A49C71270133E133C5B4914E0485A485A485A48C712
+0148B6FCA25A4815C0B7FCA3243D7CBC2D>I<EB07FC90383FFF809038F80FE03901E003
+F839078001FCD80F007F000E6D7E001E1580D81F80137F486C14C07FA27F5BA2121F6C5A
+C8138015FF1600A24A5AA24A5A5DEC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07
+F86E7E6E7E6E7E1680ED7FC0A216E0153FA216F0A2120C123F487E487EA316E0A249137F
+6CC713C01278EDFF807E6C4913006C495A3907C007FC3903F80FF0C6B55A013F1380D907
+F8C7FC243F7CBC2D>I<150E151E153EA2157EA215FE1401A21403EC077E1406140E141C
+A214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A
+120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D8
+0780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF80
+90383E03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E0150FA316
+F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC7F0000
+1F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1F
+E0ECFFF8903803F03E90380FC00F90391F000780133E017EEB1FC049133F4848137F1203
+5B12074848EB3F80ED1F00001F91C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E0
+90389C01F09038B800FC01B0137E13F0497F16804914C0A2ED1FE0A34914F0A5127FA612
+3F6D14E0A2121FED3FC0A26C6C1480A20007EC7F006C6C137E6C6C5B6C6C485A90387E07
+F06DB45A010F1380D903FCC7FC243F7CBC2D>I<1238123C123F90B612FCA316F85A16F0
+16E00078C712010070EC03C0ED078016005D48141E151C153C5DC8127015F04A5A5D1403
+4A5A92C7FC5C141EA25CA2147C147814F8A213015C1303A31307A3130F5CA2131FA6133F
+AA6D5A0107C8FC26407BBD2D>I<EB03FC90381FFF8090387C07E09038F001F83901E000
+7C48487F48487F48C7FCED0F80121E16C0003E1407A4123FA26DEB0F807F6C6C131F6D14
+0001FC133E6C6C5B9038FF80786C6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F01
+3F13F801787F48486C7E3903E01FFF48486C1380260F800313C048487E489038007FE000
+3E143F007E141F007CEC0FF01507481403A31501A46C15E0007C1403A2007E15C06C1407
+6CEC0F806DEB1F006C6C133ED807F05B3901FC03F86CB512E0011F1380D903FCC7FC243F
+7CBC2D>I<EB03FCEB1FFF90387E07C09038FC03F048486C7E48486C7E4848137C000F14
+7E4848137F81003F15805B007F15C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F
+147F120F6C6C13FF6D13DF000313013900F8039F90387E0F1FD91FFE13E0EB07F090C7FC
+A2ED3FC0A41680157FD80F801400487E486C13FEA24A5A5D49485AEB8007391E000FE000
+1F495A260FC07FC7FC3803FFFE6C13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0
+A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<DB
+3FF01306912603FFFE130E020F9038FF801E913A3FF007E03E9139FF8000F8D903FEC7EA
+7C7ED907F8EC1EFE4948140FD93FE0140749481403495A91C81201484815001203484816
+7E5B000F173EA24848161EA2123F5B180E127FA349160012FFAC127F7F180EA2123FA27F
+001F171E181C6C7EA20007173C6D16386C6C1678000117706C6C16F06EEC01E06D6C15C0
+6D6C1403D90FF0EC07806D6CEC1F00D903FE143E902600FF8013F891393FF007F0020FB5
+12C0020391C7FC9138003FF037427BBF42>67 D<B712FCEEFF8017E000019039C0001FF8
+6C6C48EB03FEEE00FF717E717EEF0FE084717E717E170184717EA21980187F19C0A3F03F
+E0A519F0AB19E0A5F07FC0A21980A218FF19004D5AA24D5A6017074D5A4D5AEF7FC04DC7
+FCEE03FE48486CEB1FF8B85A178004FCC8FC3C3E7DBD45>I<B912E0A300019038C00001
+6C6C48EB001FEF0FF01703A217011700A31870A418381638A41800A21678A216F8150115
+0791B5FCA3EC8007150115001678A21638A2180EA3181C93C7FCA4183C1838A21878A318
+F8EF01F0A21707170F173F48486CEB03FFB912E0A3373E7DBD3E>I<B6D8C01FB512F8A3
+000101E0C7383FFC0026007F80EC0FF0B3A691B7FCA30280C7120FB3A92601FFE0EC3FFC
+B6D8C01FB512F8A33D3E7DBD44>72 D<B612F0A3C6EBF000EB3FC0B3B3B2EBFFF0B612F0
+A31C3E7EBD21>I<011FB512FCA3D9000713006E5A1401B3B3A6123FEA7F80EAFFC0A44A
+5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07EC7FC3800FFF8EB3F
+C026407CBD2F>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35F
+A25F5F5F4C5A160748486C133FB8FCA3313E7DBD39>76 D<B500C093B512C0A300016D4B
+EBE000D8007F1880D977F0ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F
+1538A36E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA3
+6E6C5BA3037F5BA26F6C5AA36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA2
+13F8486C6D5AD807FFEFFFE0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F8
+8080D8007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7E
+A26E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380
+A2EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F
+170FA2170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<B712F8EEFF
+8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F80EF3FC018E0A2EF1FF0A218
+F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3FF091B612C04CC7FC0280C9FC
+B3A73801FFE0B612C0A3353E7DBD3E>80 D<D907FC131890391FFF8038017FEBE0783901
+FC03F83A03F0007CF8D807C0133F4848130F001F140748C7FC003E1403007E1401A2007C
+140012FC1678A46C1538A27EA26C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C
+14FC6C14FF6C15C0013F14E0010714F0EB007F020713F89138007FFC150FED07FE150315
+01ED00FFA200E0157FA3163FA27EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F0
+6DEB07E0D8F9FCEB0FC03AF07F803F8090391FFFFE00D8E00713F839C0007FC028427BBF
+33>83 D<003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E1707127C
+00781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>
+I<B66C0103B51280A3000101F0C8EBF8006C6C48ED3FC0725A013F041EC7FC6D7E606D6C
+15386D6C1578606D6C5D6E14016D5E6D6D1303606E6C49C8FC6E6C5B170E6E6C131E171C
+6E6C5B6E6C137817706E6C13F06F5B6E13016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE
+5E150F6F5AB3A4ED1FFC020FB512FCA3413E7FBD44>89 D<EB0FF8EBFFFE3903F01F8039
+078007E0000F6D7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5
+FC90381FF87FEB7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA3
+007F5BEC03BF3B3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001
+F0292A7DA82D>97 D<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E090
+39FDE001F09039FFC000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8
+AA17F0A2160FA217E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F0
+9039E0780FC09026C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8
+017C131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA2
+90C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E
+6C6C137890383F01F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA315071503
+1501B114FF010713E190381F80F990387E003D49131FD803F81307485A49130348481301
+121F123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C
+6C497ED8007C017913F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01
+FE90380FFFC090383F03F09038FC01F848486C7E4848137E48487F000F158049131F001F
+15C04848130FA2127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501
+000F15C06C6C13036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090
+C7FC232A7EA828>I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F81
+1401137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>
+I<167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000
+FC0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E0
+3903FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C
+15E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E00
+7E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C029
+3D7EA82D>I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803
+F09138E001F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA3
+2E3F7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA312071203
+1201B3AC487EB512F0A3143E7DBD1A>I<EA01FC12FFA3120712031201B3B3B1487EB512
+F8A3153F7DBE1A>108 D<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0
+913B7803F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF14
+7F91C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA7
+4C>I<3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C0
+7F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>
+I<14FF010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0
+000F15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F
+15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC9038
+0FFFF0010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE0
+03F03A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AA
+EE0FF0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC78
+0FC0DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<3901F807E000FFEB1F
+F8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487E
+B512FEA31F287EA724>114 D<90383FC0603901FFF8E03807C03F381F000F003E130700
+3C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C14
+80000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E14
+016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6
+133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A9120090
+38FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14FE00
+FF147FA3000714030003140100011400B3A51501A31503120015076DEB06FF017E010E13
+806D4913FC90381FC078903807FFE00100903880FE002E297DA733>I<B539E00FFFE0A3
+2707FE000313006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC00701
+1F91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF00100
+5BA2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE003F
+E00013C06C486D48EB3F806C4817006D010F141E00016F131C15076D163C00004A6C1338
+A2017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0017F5B
+EDE03F02F0140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14DE6D
+15FCED00076D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<B539F0
+1FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC9038
+0FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BECF1FC
+903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80486C80
+000F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48EB01
+FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F130EA2
+6D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2140E
+A2141E141C143C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA780EEA
+3C3CEA1FF8EA07E02B3A7EA630>I E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Fm cmbx12 20.736 9
 /Fm 9 123 df<92380FFFE04AB67E020F15F0027F15FE49B87E4917E0010F17F8013F83
@@ -1415,12 +1553,12 @@ F06F7F4C6F7F4C6F7F4C8193C915804B7014C0861DE0A27414F0A27414F8A47513FCA575
 13FEAF5113FCA598B512F8A31DF0621DE0621DC0621D806F5E701800704B5B505B704B5B
 7092B55A04FC4A5C704A5C706C010F5C05E0013F49C7FC9227FE7FFC01B55A70B712F004
 0F16C0040393C8FC040015F8053F14C0050301F0C9FC94CCFCB3A6B812E0A85F6F7ACD6C
->112 D<0007BA12FC1AFEA503E0C714FC4AC74814F84801F04A14F05C02804A14E091C8
-4814C04D14805B494B14004D5B4992B55AA24C5C494A5C615E4C5C001F4B5C5B4C91C7FC
-4C5B93B55AA24B5CC8485C4B5CA24B5C4B5C4B91C8FCA24B5B92B55AA24A5C4A5C4A4A14
-FFA24A5C4A5C4A91C8FC614A4915FE91B55A495CA2495C494A14035E5B495C4991C81207
-A24949ED0FFC90B55A484A151FA2484A153F484A157F484A15FF1803484A140F4891C812
-3F48490207B5FC91B9FCBB12F8A57E484D7BCC56>122 D E
+>112 D<0007BA12FE1AFFA503E0C76C13FE4AC8B512FC4801F04A14F84A5C4A17F091C8
+4814E04D14C0495D4918804D1400494B5B94B5FC61494A5C4C5C5E61001F4B5C494A5C5E
+96C7FC4C5B93B55A5DC85D4B5C4B5C5D604B5C4B91C8FC5D5F92B55A4A5C5C4D14FF4A5C
+4A5C5C5F4A91C75A4A4915FE91B5FC5E495C495C4917035E495C495C49170793C8FC4949
+ED0FFC90B55A48181F5D484A153F484A157F4818FF4B1403484A140F4891C8123F480407
+B5FC92B8FCBB12F8A57E484D7BCC56>122 D E
 %EndDVIPSBitmapFont
 end
 %%EndProlog
@@ -1433,770 +1571,803 @@ TeXDict begin
 %%Page: 1 1
 1 0 bop 150 1318 a Fm(bzip2)64 b(and)g(libbzip2)p 150
 1418 3600 34 v 2010 1515 a Fl(a)31 b(program)f(and)g(library)e(for)i
-(data)h(compression)2198 1623 y(cop)m(yrigh)m(t)f(\(C\))h(1996-2000)j
-(Julian)28 b(Sew)m(ard)2605 1731 y(v)m(ersion)i(1.0)h(of)g(21)g(Marc)m
-(h)g(2000)150 5091 y Fk(Julian)46 b(Sew)l(ard)p 150 5141
-3600 17 v eop
+(data)h(compression)2198 1623 y(cop)m(yrigh)m(t)f(\(C\))h(1996-2002)j
+(Julian)28 b(Sew)m(ard)2394 1731 y(v)m(ersion)i(1.0.2)i(of)f(30)g
+(Decem)m(b)s(er)g(2001)150 5091 y Fk(Julian)46 b(Sew)l(ard)p
+150 5141 3600 17 v eop
 %%Page: 1 2
-1 1 bop 3705 -116 a Fl(1)150 299 y(This)24 b(program,)j
-Fj(bzip2)p Fl(,)e(and)g(asso)s(ciated)i(library)c Fj(libbzip2)p
-Fl(,)i(are)h(Cop)m(yrigh)m(t)g(\(C\))g(1996-2000)j(Julian)150
-408 y(R)h(Sew)m(ard.)40 b(All)29 b(righ)m(ts)h(reserv)m(ed.)150
-565 y(Redistribution)f(and)i(use)h(in)f(source)h(and)g(binary)e(forms,)
-j(with)e(or)h(without)f(mo)s(di\014cation,)g(are)i(p)s(er-)150
-675 y(mitted)d(pro)m(vided)f(that)i(the)f(follo)m(wing)f(conditions)g
-(are)i(met:)225 832 y Fi(\017)60 b Fl(Redistributions)26
-b(of)k(source)g(co)s(de)g(m)m(ust)g(retain)f(the)h(ab)s(o)m(v)m(e)h
-(cop)m(yrigh)m(t)g(notice,)f(this)f(list)f(of)i(con-)330
-941 y(ditions)e(and)i(the)h(follo)m(wing)e(disclaimer.)225
-1076 y Fi(\017)60 b Fl(The)33 b(origin)f(of)h(this)f(soft)m(w)m(are)j
-(m)m(ust)e(not)h(b)s(e)e(misrepresen)m(ted;)i(y)m(ou)g(m)m(ust)f(not)g
-(claim)g(that)h(y)m(ou)330 1185 y(wrote)d(the)h(original)d(soft)m(w)m
-(are.)44 b(If)31 b(y)m(ou)g(use)g(this)f(soft)m(w)m(are)i(in)e(a)h(pro)
-s(duct,)g(an)f(ac)m(kno)m(wledgmen)m(t)330 1295 y(in)f(the)i(pro)s
-(duct)e(do)s(cumen)m(tation)h(w)m(ould)f(b)s(e)h(appreciated)g(but)g
-(is)f(not)i(required.)225 1429 y Fi(\017)60 b Fl(Altered)21
-b(source)g(v)m(ersions)f(m)m(ust)h(b)s(e)f(plainly)e(mark)m(ed)j(as)g
-(suc)m(h,)i(and)d(m)m(ust)h(not)g(b)s(e)f(misrepresen)m(ted)330
-1539 y(as)31 b(b)s(eing)e(the)h(original)f(soft)m(w)m(are.)225
-1674 y Fi(\017)60 b Fl(The)27 b(name)h(of)f(the)h(author)f(ma)m(y)h
-(not)g(b)s(e)f(used)g(to)h(endorse)f(or)h(promote)g(pro)s(ducts)e
-(deriv)m(ed)g(from)330 1783 y(this)j(soft)m(w)m(are)j(without)d(sp)s
-(eci\014c)h(prior)e(written)i(p)s(ermission.)150 1965
-y(THIS)37 b(SOFTW)-10 b(ARE)38 b(IS)f(PR)m(O)m(VIDED)i(BY)g(THE)f(A)m
-(UTHOR)g(\\AS)g(IS")g(AND)h(ANY)f(EXPRESS)150 2074 y(OR)31
-b(IMPLIED)h(W)-10 b(ARRANTIES,)31 b(INCLUDING,)i(BUT)f(NOT)f(LIMITED)g
-(TO,)h(THE)f(IMPLIED)150 2184 y(W)-10 b(ARRANTIES)27
-b(OF)h(MER)m(CHANT)-8 b(ABILITY)28 b(AND)g(FITNESS)f(F)m(OR)g(A)h(P)-8
-b(AR)g(TICULAR)28 b(PUR-)150 2294 y(POSE)37 b(ARE)g(DISCLAIMED.)h(IN)f
-(NO)h(EVENT)f(SHALL)g(THE)g(A)m(UTHOR)h(BE)g(LIABLE)g(F)m(OR)150
-2403 y(ANY)56 b(DIRECT,)f(INDIRECT,)h(INCIDENT)-8 b(AL,)56
-b(SPECIAL,)e(EXEMPLAR)-8 b(Y,)57 b(OR)e(CONSE-)150 2513
-y(QUENTIAL)48 b(D)m(AMA)m(GES)i(\(INCLUDING,)g(BUT)f(NOT)f(LIMITED)g
-(TO,)g(PR)m(OCUREMENT)150 2622 y(OF)35 b(SUBSTITUTE)e(GOODS)i(OR)f(SER)
--10 b(VICES;)34 b(LOSS)f(OF)i(USE,)g(D)m(A)-8 b(T)g(A,)36
-b(OR)f(PR)m(OFITS;)f(OR)150 2732 y(BUSINESS)28 b(INTERR)m(UPTION\))g
-(HO)m(WEVER)i(CA)m(USED)f(AND)g(ON)g(ANY)g(THEOR)-8 b(Y)29
-b(OF)g(LIA-)150 2842 y(BILITY,)36 b(WHETHER)g(IN)g(CONTRA)m(CT,)g
-(STRICT)e(LIABILITY,)i(OR)g(TOR)-8 b(T)35 b(\(INCLUDING)150
-2951 y(NEGLIGENCE)45 b(OR)g(OTHER)-10 b(WISE\))44 b(ARISING)h(IN)g(ANY)
-h(W)-10 b(A)i(Y)46 b(OUT)e(OF)i(THE)e(USE)h(OF)150 3061
-y(THIS)29 b(SOFTW)-10 b(ARE,)31 b(EVEN)f(IF)g(AD)m(VISED)i(OF)e(THE)g
-(POSSIBILITY)e(OF)j(SUCH)f(D)m(AMA)m(GE.)150 3218 y(Julian)e(Sew)m
-(ard,)i(Cam)m(bridge,)g(UK.)150 3374 y Fj(jseward@acm.org)150
-3531 y(http://sourceware.cygnus)o(.com)o(/bzi)o(p2)150
-3688 y(http://www.cacheprof.org)150 3845 y(http://www.muraroa.demon)o
-(.co.)o(uk)150 4002 y(bzip2)p Fl(/)p Fj(libbzip2)d Fl(v)m(ersion)j(1.0)
-i(of)e(21)h(Marc)m(h)g(2000.)150 4159 y(P)-8 b(A)g(TENTS:)40
-b(T)-8 b(o)40 b(the)g(b)s(est)g(of)g(m)m(y)g(kno)m(wledge,)j
-Fj(bzip2)38 b Fl(do)s(es)i(not)g(use)g(an)m(y)g(paten)m(ted)h
-(algorithms.)150 4268 y(Ho)m(w)m(ev)m(er,)33 b(I)e(do)f(not)h(ha)m(v)m
-(e)h(the)f(resources)g(a)m(v)-5 b(ailable)30 b(to)h(carry)g(out)g(a)g
-(full)d(paten)m(t)k(searc)m(h.)42 b(Therefore)150 4378
-y(I)30 b(cannot)h(giv)m(e)g(an)m(y)g(guaran)m(tee)h(of)e(the)h(ab)s(o)m
-(v)m(e)g(statemen)m(t.)p eop
+1 1 bop 3705 -116 a Fl(1)150 299 y(The)40 b(follo)m(wing)f(text)i(is)f
+(the)h(License)f(for)g(this)f(soft)m(w)m(are.)73 b(Y)-8
+b(ou)41 b(should)d(\014nd)h(it)h(iden)m(tical)f(to)i(that)150
+408 y(con)m(tained)31 b(in)e(the)h(\014le)g(LICENSE)f(in)g(the)h
+(source)h(distribution.)150 565 y Fj(||||||)f(ST)-8 b(AR)g(T)30
+b(OF)h(THE)f(LICENSE)f(||||||)150 722 y(This)24 b(program,)i
+Fi(bzip2)p Fj(,)f(and)f(asso)s(ciated)h(library)g Fi(libbzip2)p
+Fj(,)e(are)i(Cop)m(yrigh)m(t)h(\(C\))f(1996-2002)j(Julian)150
+832 y(R)i(Sew)m(ard.)41 b(All)30 b(righ)m(ts)h(reserv)m(ed.)150
+989 y(Redistribution)46 b(and)f(use)g(in)g(source)h(and)f(binary)f
+(forms,)50 b(with)45 b(or)h(without)g(mo)s(di\014cation,)j(are)150
+1098 y(p)s(ermitted)31 b(pro)m(vided)f(that)h(the)g(follo)m(wing)g
+(conditions)g(are)g(met:)225 1255 y Fh(\017)60 b Fj(Redistributions)44
+b(of)g(source)g(co)s(de)f(m)m(ust)h(retain)g(the)g(ab)s(o)m(v)m(e)h
+(cop)m(yrigh)m(t)g(notice,)k(this)43 b(list)i(of)330
+1365 y(conditions)31 b(and)e(the)i(follo)m(wing)h(disclaimer.)225
+1499 y Fh(\017)60 b Fj(The)32 b(origin)g(of)g(this)g(soft)m(w)m(are)h
+(m)m(ust)f(not)g(b)s(e)f(misrepresen)m(ted;)j(y)m(ou)e(m)m(ust)g(not)g
+(claim)g(that)h(y)m(ou)330 1609 y(wrote)d(the)f(original)h(soft)m(w)m
+(are.)42 b(If)29 b(y)m(ou)g(use)g(this)g(soft)m(w)m(are)i(in)d(a)h(pro)
+s(duct,)g(an)g(ac)m(kno)m(wledgmen)m(t)330 1718 y(in)h(the)h(pro)s
+(duct)e(do)s(cumen)m(tation)j(w)m(ould)e(b)s(e)f(appreciated)j(but)d
+(is)i(not)g(required.)225 1853 y Fh(\017)60 b Fj(Altered)36
+b(source)g(v)m(ersions)g(m)m(ust)f(b)s(e)f(plainly)i(mark)m(ed)f(as)g
+(suc)m(h,)i(and)d(m)m(ust)h(not)h(b)s(e)f(misrepre-)330
+1962 y(sen)m(ted)c(as)f(b)s(eing)g(the)h(original)h(soft)m(w)m(are.)225
+2097 y Fh(\017)60 b Fj(The)25 b(name)g(of)g(the)g(author)g(ma)m(y)h
+(not)f(b)s(e)f(used)h(to)g(endorse)g(or)h(promote)g(pro)s(ducts)e
+(deriv)m(ed)h(from)330 2206 y(this)30 b(soft)m(w)m(are)i(without)f(sp)s
+(eci\014c)f(prior)g(written)h(p)s(ermission.)150 2388
+y(THIS)36 b(SOFTW)-10 b(ARE)35 b(IS)h(PR)m(O)m(VIDED)g(BY)f(THE)h(A)m
+(UTHOR)h(\\AS)f(IS")g(AND)f(ANY)h(EXPRESS)150 2498 y(OR)29
+b(IMPLIED)g(W)-10 b(ARRANTIES,)28 b(INCLUDING,)h(BUT)g(NOT)g(LIMITED)g
+(TO,)h(THE)e(IMPLIED)150 2607 y(W)-10 b(ARRANTIES)60
+b(OF)h(MER)m(CHANT)-8 b(ABILITY)61 b(AND)g(FITNESS)f(F)m(OR)i(A)f(P)-8
+b(AR)g(TICULAR)150 2717 y(PURPOSE)40 b(ARE)g(DISCLAIMED.)f(IN)i(NO)g
+(EVENT)f(SHALL)f(THE)i(A)m(UTHOR)g(BE)f(LIABLE)150 2827
+y(F)m(OR)d(ANY)f(DIRECT,)g(INDIRECT,)g(INCIDENT)-8 b(AL,)37
+b(SPECIAL,)d(EXEMPLAR)-8 b(Y,)36 b(OR)h(CON-)150 2936
+y(SEQUENTIAL)30 b(D)m(AMA)m(GES)h(\(INCLUDING,)h(BUT)e(NOT)i(LIMITED)f
+(TO,)h(PR)m(OCUREMENT)150 3046 y(OF)55 b(SUBSTITUTE)e(GOODS)i(OR)f(SER)
+-10 b(VICES;)53 b(LOSS)g(OF)i(USE,)f(D)m(A)-8 b(T)g(A,)55
+b(OR)g(PR)m(OFITS;)150 3155 y(OR)e(BUSINESS)d(INTERR)m(UPTION\))k(HO)m
+(WEVER)e(CA)m(USED)f(AND)h(ON)h(ANY)f(THEOR)-8 b(Y)150
+3265 y(OF)71 b(LIABILITY,)f(WHETHER)g(IN)h(CONTRA)m(CT,)g(STRICT)g
+(LIABILITY,)e(OR)i(TOR)-8 b(T)150 3374 y(\(INCLUDING)45
+b(NEGLIGENCE)g(OR)g(OTHER)-10 b(WISE\))45 b(ARISING)g(IN)g(ANY)g(W)-10
+b(A)i(Y)44 b(OUT)i(OF)150 3484 y(THE)i(USE)f(OF)h(THIS)g(SOFTW)-10
+b(ARE,)47 b(EVEN)g(IF)h(AD)m(VISED)e(OF)i(THE)g(POSSIBILITY)f(OF)150
+3594 y(SUCH)30 b(D)m(AMA)m(GE.)150 3750 y(Julian)g(Sew)m(ard,)g(Cam)m
+(bridge,)h(UK.)150 3907 y Fi(jseward@acm.org)150 4064
+y(bzip2)p Fj(/)p Fi(libbzip2)c Fj(v)m(ersion)k(1.0.2)i(of)d(30)h(Decem)
+m(b)s(er)g(2001.)150 4221 y(||||||)f(END)g(OF)g(THE)g(LICENSE)f(||||||)
+150 4378 y(W)-8 b(eb)31 b(sites:)150 4535 y Fi
+(http://sources.redhat.co)o(m/bz)o(ip2)150 4691 y
+(http://www.cacheprof.org)150 4848 y Fj(P)-8 b(A)g(TENTS:)40
+b(T)-8 b(o)40 b(the)f(b)s(est)g(of)g(m)m(y)h(kno)m(wledge,)i
+Fi(bzip2)c Fj(do)s(es)h(not)g(use)g(an)m(y)h(paten)m(ted)g(algorithms.)
+150 4958 y(Ho)m(w)m(ev)m(er,)31 b(I)c(do)h(not)g(ha)m(v)m(e)g(the)g
+(resources)h(a)m(v)-5 b(ailable)29 b(to)f(carry)g(out)g(a)g(full)f
+(paten)m(t)i(searc)m(h.)40 b(Therefore)150 5067 y(I)30
+b(cannot)h(giv)m(e)h(an)m(y)f(guaran)m(tee)g(of)g(the)g(ab)s(o)m(v)m(e)
+g(statemen)m(t.)p eop
 %%Page: 2 3
 2 2 bop 150 -116 a Fl(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2591
-b(2)150 299 y Fh(1)80 b(In)l(tro)t(duction)150 555 y
-Fj(bzip2)20 b Fl(compresses)h(\014les)f(using)g(the)h(Burro)m
-(ws-Wheeler)g(blo)s(c)m(k-sorting)f(text)j(compression)d(algorithm,)150
-665 y(and)33 b(Hu\013man)g(co)s(ding.)50 b(Compression)32
-b(is)h(generally)g(considerably)f(b)s(etter)i(than)f(that)h(ac)m(hiev)m
-(ed)h(b)m(y)150 775 y(more)f(con)m(v)m(en)m(tional)g(LZ77/LZ78-based)g
-(compressors,)g(and)f(approac)m(hes)h(the)f(p)s(erformance)g(of)h(the)
-150 884 y(PPM)c(family)f(of)i(statistical)f(compressors.)150
-1041 y Fj(bzip2)k Fl(is)h(built)e(on)i(top)h(of)g Fj(libbzip2)p
-Fl(,)e(a)i(\015exible)e(library)f(for)i(handling)e(compressed)i(data)i
-(in)d(the)150 1151 y Fj(bzip2)c Fl(format.)43 b(This)30
-b(man)m(ual)g(describ)s(es)g(b)s(oth)g(ho)m(w)i(to)g(use)f(the)g
-(program)g(and)g(ho)m(w)g(to)h(w)m(ork)f(with)150 1260
-y(the)d(library)d(in)m(terface.)41 b(Most)28 b(of)g(the)g(man)m(ual)f
-(is)g(dev)m(oted)i(to)f(this)f(library)-8 b(,)26 b(not)i(the)g
-(program,)g(whic)m(h)150 1370 y(is)h(go)s(o)s(d)i(news)e(if)h(y)m(our)g
-(in)m(terest)h(is)e(only)g(in)h(the)g(program.)150 1527
-y(Chapter)24 b(2)g(describ)s(es)f(ho)m(w)h(to)h(use)f
-Fj(bzip2)p Fl(;)h(this)e(is)g(the)i(only)e(part)h(y)m(ou)h(need)f(to)h
-(read)f(if)f(y)m(ou)h(just)g(w)m(an)m(t)150 1636 y(to)35
-b(kno)m(w)f(ho)m(w)g(to)g(op)s(erate)h(the)f(program.)51
-b(Chapter)34 b(3)g(describ)s(es)e(the)i(programming)f(in)m(terfaces)h
-(in)150 1746 y(detail,)23 b(and)d(Chapter)h(4)h(records)f(some)h
-(miscellaneous)e(notes)i(whic)m(h)e(I)h(though)m(t)h(ough)m(t)g(to)g(b)
-s(e)f(recorded)150 1855 y(somewhere.)p eop
+b(2)150 299 y Fg(1)80 b(In)l(tro)t(duction)150 555 y
+Fi(bzip2)40 b Fj(compresses)h(\014les)g(using)g(the)g(Burro)m
+(ws-Wheeler)h(blo)s(c)m(k-sorting)h(text)f(compression)f(algo-)150
+665 y(rithm,)54 b(and)49 b(Hu\013man)f(co)s(ding.)98
+b(Compression)49 b(is)h(generally)h(considerably)e(b)s(etter)h(than)f
+(that)150 775 y(ac)m(hiev)m(ed)43 b(b)m(y)f(more)g(con)m(v)m(en)m
+(tional)i(LZ77/LZ78-based)e(compressors,)j(and)40 b(approac)m(hes)i
+(the)g(p)s(er-)150 884 y(formance)31 b(of)f(the)h(PPM)g(family)f(of)h
+(statistical)i(compressors.)150 1041 y Fi(bzip2)g Fj(is)h(built)h(on)f
+(top)h(of)f Fi(libbzip2)p Fj(,)f(a)i(\015exible)f(library)h(for)f
+(handling)g(compressed)g(data)h(in)f(the)150 1151 y Fi(bzip2)29
+b Fj(format.)41 b(This)30 b(man)m(ual)g(describ)s(es)g(b)s(oth)f(ho)m
+(w)i(to)g(use)f(the)g(program)h(and)e(ho)m(w)h(to)h(w)m(ork)g(with)150
+1260 y(the)26 b(library)f(in)m(terface.)41 b(Most)26
+b(of)f(the)h(man)m(ual)f(is)g(dev)m(oted)i(to)f(this)f(library)-8
+b(,)27 b(not)f(the)g(program,)g(whic)m(h)150 1370 y(is)k(go)s(o)s(d)h
+(news)e(if)i(y)m(our)f(in)m(terest)i(is)f(only)f(in)g(the)h(program.)
+150 1527 y(Chapter)45 b(2)h(describ)s(es)e(ho)m(w)i(to)g(use)f
+Fi(bzip2)p Fj(;)51 b(this)46 b(is)f(the)h(only)f(part)g(y)m(ou)h(need)f
+(to)h(read)f(if)h(y)m(ou)150 1636 y(just)39 b(w)m(an)m(t)g(to)h(kno)m
+(w)f(ho)m(w)h(to)f(op)s(erate)h(the)g(program.)67 b(Chapter)38
+b(3)i(describ)s(es)e(the)i(programming)150 1746 y(in)m(terfaces)27
+b(in)f(detail,)i(and)d(Chapter)g(4)h(records)g(some)g(miscellaneous)h
+(notes)f(whic)m(h)g(I)g(though)m(t)g(ough)m(t)150 1855
+y(to)31 b(b)s(e)f(recorded)h(somewhere.)p eop
 %%Page: 3 4
 3 3 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
-b(to)g(use)f Fj(bzip2)2375 b Fl(3)150 299 y Fh(2)80 b(Ho)l(w)53
-b(to)g(use)g Fg(bzip2)150 566 y Fl(This)29 b(c)m(hapter)i(con)m(tains)f
-(a)h(cop)m(y)g(of)g(the)f Fj(bzip2)f Fl(man)h(page,)h(and)f(nothing)g
-(else.)390 818 y Ff(NAME)570 1004 y Fj(bzip2)p Fl(,)f
-Fj(bunzip2)g Fl(-)h(a)h(blo)s(c)m(k-sorting)f(\014le)f(compressor,)i
-(v1.0)570 1136 y Fj(bzcat)e Fl(-)i(decompresses)f(\014les)f(to)i
-(stdout)570 1267 y Fj(bzip2recover)c Fl(-)k(reco)m(v)m(ers)h(data)f
-(from)f(damaged)g(bzip2)g(\014les)390 1519 y Ff(SYNOPSIS)570
-1706 y Fj(bzip2)f Fl([)h(-cdfkqstvzVL123456789)35 b(])c([)g
-(\014lenames)e(...)41 b(])570 1837 y Fj(bunzip2)28 b
-Fl([)j(-fkvsVL)f(])h([)f(\014lenames)g(...)41 b(])570
-1968 y Fj(bzcat)29 b Fl([)h(-s)h(])g([)f(\014lenames)g(...)41
-b(])570 2100 y Fj(bzip2recover)27 b Fl(\014lename)390
-2352 y Ff(DESCRIPTION)390 2538 y Fj(bzip2)i Fl(compresses)i(\014les)f
-(using)f(the)i(Burro)m(ws-Wheeler)g(blo)s(c)m(k)f(sorting)g(text)i
-(compres-)390 2642 y(sion)40 b(algorithm,)j(and)d(Hu\013man)h(co)s
-(ding.)71 b(Compression)40 b(is)g(generally)g(considerably)390
-2746 y(b)s(etter)25 b(than)g(that)h(ac)m(hiev)m(ed)g(b)m(y)f(more)g
-(con)m(v)m(en)m(tional)h(LZ77/LZ78-based)g(compressors,)390
-2850 y(and)k(approac)m(hes)h(the)f(p)s(erformance)g(of)h(the)f(PPM)g
-(family)f(of)i(statistical)f(compressors.)390 3001 y(The)e
-(command-line)e(options)i(are)h(delib)s(erately)d(v)m(ery)i(similar)e
-(to)j(those)g(of)f(GNU)h Fj(gzip)p Fl(,)390 3104 y(but)h(they)g(are)h
-(not)g(iden)m(tical.)390 3255 y Fj(bzip2)f Fl(exp)s(ects)h(a)g(list)f
-(of)h(\014le)f(names)h(to)h(accompan)m(y)h(the)e(command-line)e
-(\015ags.)43 b(Eac)m(h)390 3359 y(\014le)e(is)h(replaced)g(b)m(y)g(a)h
-(compressed)f(v)m(ersion)g(of)g(itself,)i(with)e(the)g(name)g
-Fj(original_)390 3463 y(name.bz2)p Fl(.)49 b(Eac)m(h)34
-b(compressed)g(\014le)f(has)g(the)h(same)g(mo)s(di\014cation)e(date,)k
-(p)s(ermissions,)390 3567 y(and,)24 b(when)f(p)s(ossible,)f(o)m
-(wnership)f(as)j(the)f(corresp)s(onding)f(original,)h(so)g(that)h
-(these)g(prop-)390 3671 y(erties)34 b(can)g(b)s(e)f(correctly)i
-(restored)f(at)g(decompression)f(time.)51 b(File)34 b(name)g(handling)d
-(is)390 3774 y(naiv)m(e)26 b(in)f(the)i(sense)f(that)h(there)f(is)f(no)
-i(mec)m(hanism)e(for)h(preserving)f(original)f(\014le)i(names,)390
-3878 y(p)s(ermissions,)37 b(o)m(wnerships)f(or)h(dates)i(in)d
-(\014lesystems)h(whic)m(h)g(lac)m(k)h(these)g(concepts,)j(or)390
-3982 y(ha)m(v)m(e)32 b(serious)d(\014le)g(name)i(length)f
-(restrictions,)f(suc)m(h)h(as)h(MS-DOS.)390 4133 y Fj(bzip2)26
-b Fl(and)h Fj(bunzip2)e Fl(will)f(b)m(y)k(default)e(not)i(o)m(v)m
-(erwrite)g(existing)e(\014les.)38 b(If)27 b(y)m(ou)h(w)m(an)m(t)g(this)
-390 4237 y(to)j(happ)s(en,)e(sp)s(ecify)g(the)i Fj(-f)e
-Fl(\015ag.)390 4388 y(If)34 b(no)h(\014le)f(names)g(are)i(sp)s
-(eci\014ed,)e Fj(bzip2)f Fl(compresses)i(from)f(standard)g(input)f(to)j
-(stan-)390 4491 y(dard)c(output.)49 b(In)32 b(this)g(case,)k
-Fj(bzip2)31 b Fl(will)g(decline)h(to)i(write)e(compressed)h(output)g
-(to)h(a)390 4595 y(terminal,)29 b(as)i(this)e(w)m(ould)g(b)s(e)h(en)m
-(tirely)f(incomprehensible)e(and)j(therefore)h(p)s(oin)m(tless.)390
-4746 y Fj(bunzip2)36 b Fl(\(or)j Fj(bzip2)29 b(-d)p Fl(\))37
-b(decompresses)i(all)e(sp)s(eci\014ed)f(\014les.)63 b(Files)37
-b(whic)m(h)g(w)m(ere)i(not)390 4850 y(created)e(b)m(y)f
-Fj(bzip2)f Fl(will)e(b)s(e)i(detected)j(and)d(ignored,)i(and)e(a)i(w)m
-(arning)d(issued.)56 b Fj(bzip2)390 4954 y Fl(attempts)31
-b(to)f(guess)g(the)g(\014lename)f(for)h(the)g(decompressed)f(\014le)g
-(from)h(that)g(of)g(the)g(com-)390 5058 y(pressed)f(\014le)h(as)h
-(follo)m(ws:)570 5209 y Fj(filename.bz2)57 b Fl(b)s(ecomes)31
-b Fj(filename)570 5340 y(filename.bz)58 b Fl(b)s(ecomes)30
-b Fj(filename)p eop
+b(to)g(use)f Fi(bzip2)2375 b Fl(3)150 299 y Fg(2)80 b(Ho)l(w)53
+b(to)g(use)g Ff(bzip2)150 566 y Fj(This)30 b(c)m(hapter)h(con)m(tains)h
+(a)e(cop)m(y)h(of)g(the)g Fi(bzip2)d Fj(man)i(page,)h(and)f(nothing)g
+(else.)390 818 y Fe(NAME)570 1004 y Fi(bzip2)p Fj(,)f
+Fi(bunzip2)g Fj(-)h(a)h(blo)s(c)m(k-sorting)h(\014le)e(compressor,)h
+(v1.0.2)570 1136 y Fi(bzcat)e Fj(-)i(decompresses)f(\014les)h(to)g
+(stdout)570 1267 y Fi(bzip2recover)c Fj(-)k(reco)m(v)m(ers)h(data)f
+(from)f(damaged)g(bzip2)h(\014les)390 1519 y Fe(SYNOPSIS)570
+1706 y Fi(bzip2)e Fj([)i(-cdfkqstvzVL123456789)j(])d([)g(\014lenames)f
+(...)41 b(])570 1837 y Fi(bunzip2)28 b Fj([)j(-fkvsVL)f(])g([)h
+(\014lenames)f(...)41 b(])570 1968 y Fi(bzcat)29 b Fj([)i(-s)f(])h([)g
+(\014lenames)f(...)41 b(])570 2100 y Fi(bzip2recover)27
+b Fj(\014lename)390 2352 y Fe(DESCRIPTION)390 2538 y
+Fi(bzip2)e Fj(compresses)i(\014les)f(using)g(the)h(Burro)m(ws-Wheeler)g
+(blo)s(c)m(k)f(sorting)i(text)f(compres-)390 2642 y(sion)39
+b(algorithm,)k(and)38 b(Hu\013man)h(co)s(ding.)67 b(Compression)39
+b(is)g(generally)i(considerably)390 2746 y(b)s(etter)23
+b(than)g(that)g(ac)m(hiev)m(ed)h(b)m(y)f(more)g(con)m(v)m(en)m(tional)i
+(LZ77/LZ78-based)e(compressors,)390 2850 y(and)k(approac)m(hes)i(the)f
+(p)s(erformance)g(of)h(the)f(PPM)h(family)f(of)h(statistical)h
+(compressors.)390 3001 y(The)c(command-line)g(options)g(are)g(delib)s
+(erately)h(v)m(ery)f(similar)h(to)f(those)h(of)f(GNU)g
+Fi(gzip)p Fj(,)390 3104 y(but)k(they)g(are)h(not)g(iden)m(tical.)390
+3255 y Fi(bzip2)e Fj(exp)s(ects)j(a)f(list)h(of)f(\014le)g(names)f(to)i
+(accompan)m(y)g(the)f(command-line)g(\015ags.)43 b(Eac)m(h)390
+3359 y(\014le)d(is)h(replaced)g(b)m(y)f(a)g(compressed)h(v)m(ersion)g
+(of)f(itself,)k(with)d(the)f(name)g Fi(original_)390
+3463 y(name.bz2)p Fj(.)45 b(Eac)m(h)33 b(compressed)g(\014le)g(has)f
+(the)h(same)g(mo)s(di\014cation)g(date,)h(p)s(ermissions,)390
+3567 y(and,)47 b(when)c(p)s(ossible,)k(o)m(wnership)c(as)h(the)g
+(corresp)s(onding)g(original,)49 b(so)44 b(that)g(these)390
+3671 y(prop)s(erties)37 b(can)g(b)s(e)g(correctly)i(restored)f(at)g
+(decompression)f(time.)62 b(File)39 b(name)d(han-)390
+3774 y(dling)e(is)g(naiv)m(e)h(in)f(the)g(sense)g(that)h(there)f(is)g
+(no)g(mec)m(hanism)g(for)h(preserving)f(original)390
+3878 y(\014le)41 b(names,)i(p)s(ermissions,)g(o)m(wnerships)d(or)h
+(dates)g(in)g(\014lesystems)g(whic)m(h)f(lac)m(k)i(these)390
+3982 y(concepts,)32 b(or)e(ha)m(v)m(e)i(serious)e(\014le)h(name)f
+(length)h(restrictions,)h(suc)m(h)e(as)g(MS-DOS.)390
+4133 y Fi(bzip2)24 b Fj(and)i Fi(bunzip2)d Fj(will)k(b)m(y)f(default)f
+(not)i(o)m(v)m(erwrite)h(existing)f(\014les.)39 b(If)26
+b(y)m(ou)g(w)m(an)m(t)h(this)390 4237 y(to)k(happ)s(en,)e(sp)s(ecify)h
+(the)h Fi(-f)e Fj(\015ag.)390 4388 y(If)k(no)f(\014le)h(names)f(are)i
+(sp)s(eci\014ed,)e Fi(bzip2)g Fj(compresses)h(from)f(standard)g(input)g
+(to)i(stan-)390 4491 y(dard)d(output.)44 b(In)32 b(this)f(case,)i
+Fi(bzip2)e Fj(will)h(decline)g(to)h(write)f(compressed)g(output)f(to)i
+(a)390 4595 y(terminal,)e(as)g(this)f(w)m(ould)g(b)s(e)g(en)m(tirely)i
+(incomprehensible)e(and)g(therefore)h(p)s(oin)m(tless.)390
+4746 y Fi(bunzip2)j Fj(\(or)j Fi(bzip2)29 b(-d)p Fj(\))36
+b(decompresses)g(all)h(sp)s(eci\014ed)e(\014les.)58 b(Files)37
+b(whic)m(h)f(w)m(ere)h(not)390 4850 y(created)f(b)m(y)e
+Fi(bzip2)g Fj(will)g(b)s(e)g(detected)j(and)c(ignored,)k(and)c(a)i(w)m
+(arning)g(issued.)52 b Fi(bzip2)390 4954 y Fj(attempts)29
+b(to)f(guess)g(the)g(\014lename)f(for)h(the)g(decompressed)f(\014le)h
+(from)f(that)h(of)g(the)g(com-)390 5058 y(pressed)i(\014le)g(as)h
+(follo)m(ws:)570 5209 y Fi(filename.bz2)57 b Fj(b)s(ecomes)31
+b Fi(filename)570 5340 y(filename.bz)58 b Fj(b)s(ecomes)30
+b Fi(filename)p eop
 %%Page: 4 5
 4 4 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
-b(to)g(use)f Fj(bzip2)2375 b Fl(4)570 299 y Fj(filename.tbz2)27
-b Fl(b)s(ecomes)j Fj(filename.tar)570 470 y(filename.tbz)57
-b Fl(b)s(ecomes)31 b Fj(filename.tar)570 641 y(anyothername)57
-b Fl(b)s(ecomes)31 b Fj(anyothername.out)390 859 y Fl(If)j(the)h
-(\014le)e(do)s(es)i(not)f(end)g(in)f(one)i(of)g(the)g(recognised)f
-(endings,)g Fj(.bz2)p Fl(,)h Fj(.bz)p Fl(,)g Fj(.tbz2)e
-Fl(or)390 963 y Fj(.tbz)p Fl(,)h Fj(bzip2)f Fl(complains)f(that)j(it)e
-(cannot)i(guess)f(the)g(name)h(of)f(the)g(original)e(\014le,)j(and)390
-1067 y(uses)30 b(the)g(original)f(name)h(with)g Fj(.out)f
-Fl(app)s(ended.)390 1218 y(As)j(with)f(compression,)h(supplying)c(no)k
-(\014lenames)f(causes)i(decompression)e(from)h(stan-)390
-1321 y(dard)d(input)g(to)i(standard)e(output.)390 1472
-y Fj(bunzip2)k Fl(will)g(correctly)j(decompress)e(a)i(\014le)e(whic)m
-(h)g(is)h(the)g(concatenation)i(of)e(t)m(w)m(o)i(or)390
-1576 y(more)j(compressed)f(\014les.)67 b(The)39 b(result)g(is)g(the)g
-(concatenation)i(of)f(the)g(corresp)s(onding)390 1680
-y(uncompressed)c(\014les.)59 b(In)m(tegrit)m(y)38 b(testing)f(\()p
-Fj(-t)p Fl(\))g(of)g(concatenated)i(compressed)e(\014les)f(is)390
-1784 y(also)30 b(supp)s(orted.)390 1935 y(Y)-8 b(ou)40
-b(can)g(also)f(compress)g(or)g(decompress)g(\014les)g(to)h(the)f
-(standard)g(output)g(b)m(y)g(giving)390 2039 y(the)30
-b Fj(-c)g Fl(\015ag.)40 b(Multiple)28 b(\014les)h(ma)m(y)i(b)s(e)e
-(compressed)h(and)f(decompressed)h(lik)m(e)f(this.)39
-b(The)390 2142 y(resulting)31 b(outputs)i(are)h(fed)f(sequen)m(tially)f
-(to)i(stdout.)49 b(Compression)32 b(of)h(m)m(ultiple)e(\014les)390
-2246 y(in)24 b(this)g(manner)h(generates)h(a)g(stream)f(con)m(taining)g
-(m)m(ultiple)e(compressed)i(\014le)f(represen-)390 2350
-y(tations.)58 b(Suc)m(h)36 b(a)g(stream)g(can)h(b)s(e)e(decompressed)h
-(correctly)h(only)e(b)m(y)h Fj(bzip2)e Fl(v)m(ersion)390
-2454 y(0.9.0)g(or)e(later.)47 b(Earlier)30 b(v)m(ersions)i(of)g
-Fj(bzip2)f Fl(will)f(stop)i(after)h(decompressing)e(the)i(\014rst)390
-2558 y(\014le)c(in)h(the)g(stream.)390 2709 y Fj(bzcat)f
-Fl(\(or)i Fj(bzip2)e(-dc)p Fl(\))g(decompresses)i(all)e(sp)s(eci\014ed)
-g(\014les)g(to)i(the)g(standard)e(output.)390 2860 y
-Fj(bzip2)f Fl(will)g(read)i(argumen)m(ts)g(from)f(the)h(en)m(vironmen)m
-(t)g(v)-5 b(ariables)28 b Fj(BZIP2)h Fl(and)g Fj(BZIP)p
-Fl(,)g(in)390 2963 y(that)24 b(order,)g(and)f(will)e(pro)s(cess)i(them)
-g(b)s(efore)g(an)m(y)h(argumen)m(ts)f(read)h(from)f(the)g(command)390
-3067 y(line.)39 b(This)29 b(giv)m(es)h(a)h(con)m(v)m(enien)m(t)h(w)m(a)
-m(y)f(to)g(supply)d(default)i(argumen)m(ts.)390 3218
-y(Compression)h(is)h(alw)m(a)m(ys)i(p)s(erformed,)e(ev)m(en)h(if)f(the)
-h(compressed)g(\014le)f(is)g(sligh)m(tly)f(larger)390
-3322 y(than)26 b(the)g(original.)38 b(Files)25 b(of)h(less)g(than)g(ab)
-s(out)g(one)g(h)m(undred)e(b)m(ytes)j(tend)f(to)h(get)g(larger,)390
-3426 y(since)34 b(the)g(compression)f(mec)m(hanism)h(has)f(a)i(constan)
-m(t)g(o)m(v)m(erhead)h(in)d(the)h(region)g(of)g(50)390
-3529 y(b)m(ytes.)54 b(Random)34 b(data)h(\(including)d(the)i(output)h
-(of)f(most)h(\014le)f(compressors\))h(is)e(co)s(ded)390
-3633 y(at)e(ab)s(out)f(8.05)i(bits)d(p)s(er)h(b)m(yte,)h(giving)e(an)h
-(expansion)g(of)g(around)g(0.5\045.)390 3784 y(As)h(a)g(self-c)m(hec)m
-(k)h(for)e(y)m(our)h(protection,)g Fj(bzip2)f Fl(uses)g(32-bit)h(CR)m
-(Cs)f(to)i(mak)m(e)f(sure)f(that)390 3888 y(the)45 b(decompressed)f(v)m
-(ersion)g(of)g(a)h(\014le)e(is)h(iden)m(tical)f(to)i(the)g(original.)81
-b(This)43 b(guards)390 3992 y(against)i(corruption)e(of)h(the)h
-(compressed)f(data,)49 b(and)44 b(against)h(undetected)g(bugs)e(in)390
-4096 y Fj(bzip2)35 b Fl(\(hop)s(efully)e(v)m(ery)k(unlik)m(ely\).)56
-b(The)36 b(c)m(hances)h(of)f(data)h(corruption)e(going)h(unde-)390
-4199 y(tected)g(is)e(microscopic,)h(ab)s(out)f(one)h(c)m(hance)g(in)f
-(four)g(billion)d(for)j(eac)m(h)i(\014le)d(pro)s(cessed.)390
-4303 y(Be)38 b(a)m(w)m(are,)k(though,)d(that)f(the)g(c)m(hec)m(k)i(o)s
-(ccurs)d(up)s(on)f(decompression,)j(so)f(it)f(can)h(only)390
-4407 y(tell)28 b(y)m(ou)g(that)i(something)d(is)h(wrong.)40
-b(It)28 b(can't)i(help)d(y)m(ou)i(reco)m(v)m(er)h(the)e(original)f
-(uncom-)390 4511 y(pressed)h(data.)41 b(Y)-8 b(ou)30
-b(can)f(use)g Fj(bzip2recover)d Fl(to)k(try)f(to)h(reco)m(v)m(er)h
-(data)f(from)e(damaged)390 4614 y(\014les.)390 4766 y(Return)22
-b(v)-5 b(alues:)37 b(0)23 b(for)g(a)g(normal)f(exit,)j(1)e(for)g(en)m
-(vironmen)m(tal)f(problems)f(\(\014le)i(not)g(found,)390
-4869 y(in)m(v)-5 b(alid)30 b(\015ags,)k(I/O)f(errors,)g(&c\),)h(2)f(to)
-g(indicate)f(a)h(corrupt)f(compressed)h(\014le,)f(3)i(for)e(an)390
-4973 y(in)m(ternal)d(consistency)h(error)g(\(eg,)i(bug\))e(whic)m(h)f
-(caused)i Fj(bzip2)e Fl(to)i(panic.)390 5304 y Ff(OPTIONS)p
-eop
+b(to)g(use)f Fi(bzip2)2375 b Fl(4)570 299 y Fi(filename.tbz2)27
+b Fj(b)s(ecomes)j Fi(filename.tar)570 470 y(filename.tbz)57
+b Fj(b)s(ecomes)31 b Fi(filename.tar)570 641 y(anyothername)57
+b Fj(b)s(ecomes)31 b Fi(anyothername.out)390 859 y Fj(If)i(the)g
+(\014le)f(do)s(es)h(not)g(end)f(in)g(one)i(of)e(the)h(recognised)h
+(endings,)f Fi(.bz2)p Fj(,)g Fi(.bz)p Fj(,)f Fi(.tbz2)g
+Fj(or)390 963 y Fi(.tbz)p Fj(,)h Fi(bzip2)g Fj(complains)g(that)h(it)h
+(cannot)f(guess)f(the)h(name)g(of)f(the)h(original)h(\014le,)g(and)390
+1067 y(uses)30 b(the)h(original)g(name)f(with)h Fi(.out)e
+Fj(app)s(ended.)390 1218 y(As)g(with)h(compression,)h(supplying)e(no)h
+(\014lenames)f(causes)i(decompression)f(from)g(stan-)390
+1321 y(dard)f(input)h(to)h(standard)f(output.)390 1472
+y Fi(bunzip2)h Fj(will)j(correctly)i(decompress)d(a)h(\014le)f(whic)m
+(h)g(is)h(the)g(concatenation)h(of)f(t)m(w)m(o)h(or)390
+1576 y(more)i(compressed)g(\014les.)61 b(The)37 b(result)g(is)g(the)g
+(concatenation)i(of)e(the)g(corresp)s(onding)390 1680
+y(uncompressed)c(\014les.)52 b(In)m(tegrit)m(y)37 b(testing)e(\()p
+Fi(-t)p Fj(\))f(of)h(concatenated)h(compressed)e(\014les)g(is)390
+1784 y(also)d(supp)s(orted.)390 1935 y(Y)-8 b(ou)38 b(can)g(also)g
+(compress)g(or)g(decompress)g(\014les)f(to)i(the)f(standard)f(output)g
+(b)m(y)h(giving)390 2039 y(the)44 b Fi(-c)e Fj(\015ag.)79
+b(Multiple)44 b(\014les)g(ma)m(y)f(b)s(e)g(compressed)g(and)f
+(decompressed)h(lik)m(e)i(this.)390 2142 y(The)31 b(resulting)h
+(outputs)e(are)i(fed)f(sequen)m(tially)h(to)g(stdout.)43
+b(Compression)31 b(of)g(m)m(ultiple)390 2246 y(\014les)43
+b(in)g(this)g(manner)g(generates)i(a)e(stream)h(con)m(taining)g(m)m
+(ultiple)h(compressed)e(\014le)390 2350 y(represen)m(tations.)48
+b(Suc)m(h)32 b(a)g(stream)h(can)f(b)s(e)g(decompressed)g(correctly)j
+(only)d(b)m(y)g Fi(bzip2)390 2454 y Fj(v)m(ersion)h(0.9.0)h(or)f
+(later.)48 b(Earlier)33 b(v)m(ersions)g(of)g Fi(bzip2)e
+Fj(will)i(stop)g(after)g(decompressing)390 2558 y(the)e(\014rst)f
+(\014le)g(in)g(the)h(stream.)390 2709 y Fi(bzcat)e Fj(\(or)i
+Fi(bzip2)e(-dc)p Fj(\))h(decompresses)g(all)h(sp)s(eci\014ed)f(\014les)
+g(to)i(the)e(standard)g(output.)390 2860 y Fi(bzip2)c
+Fj(will)j(read)e(argumen)m(ts)i(from)e(the)h(en)m(vironmen)m(t)h(v)-5
+b(ariables)28 b Fi(BZIP2)f Fj(and)g Fi(BZIP)p Fj(,)g(in)390
+2963 y(that)21 b(order,)i(and)d(will)h(pro)s(cess)f(them)h(b)s(efore)g
+(an)m(y)f(argumen)m(ts)h(read)g(from)f(the)h(command)390
+3067 y(line.)41 b(This)30 b(giv)m(es)i(a)e(con)m(v)m(enien)m(t)j(w)m(a)
+m(y)e(to)g(supply)e(default)i(argumen)m(ts.)390 3218
+y(Compression)e(is)h(alw)m(a)m(ys)h(p)s(erformed,)e(ev)m(en)h(if)g(the)
+g(compressed)f(\014le)h(is)g(sligh)m(tly)h(larger)390
+3322 y(than)24 b(the)h(original.)40 b(Files)25 b(of)f(less)h(than)f(ab)
+s(out)g(one)h(h)m(undred)d(b)m(ytes)j(tend)g(to)g(get)h(larger,)390
+3426 y(since)33 b(the)g(compression)f(mec)m(hanism)h(has)f(a)h(constan)
+m(t)g(o)m(v)m(erhead)h(in)e(the)h(region)g(of)g(50)390
+3529 y(b)m(ytes.)50 b(Random)33 b(data)h(\(including)f(the)h(output)f
+(of)g(most)h(\014le)g(compressors\))g(is)f(co)s(ded)390
+3633 y(at)e(ab)s(out)f(8.05)i(bits)e(p)s(er)g(b)m(yte,)h(giving)h(an)e
+(expansion)g(of)g(around)f(0.5\045.)390 3784 y(As)f(a)h(self-c)m(hec)m
+(k)i(for)e(y)m(our)g(protection,)i Fi(bzip2)d Fj(uses)g(32-bit)i(CR)m
+(Cs)f(to)g(mak)m(e)h(sure)e(that)390 3888 y(the)43 b(decompressed)g(v)m
+(ersion)h(of)f(a)g(\014le)f(is)h(iden)m(tical)i(to)f(the)f(original.)79
+b(This)43 b(guards)390 3992 y(against)h(corruption)f(of)h(the)f
+(compressed)g(data,)k(and)42 b(against)i(undetected)g(bugs)e(in)390
+4096 y Fi(bzip2)33 b Fj(\(hop)s(efully)i(v)m(ery)g(unlik)m(ely\).)55
+b(The)35 b(c)m(hances)h(of)f(data)g(corruption)g(going)h(unde-)390
+4199 y(tected)e(is)f(microscopic,)h(ab)s(out)e(one)h(c)m(hance)g(in)g
+(four)f(billion)g(for)h(eac)m(h)g(\014le)g(pro)s(cessed.)390
+4303 y(Be)j(a)m(w)m(are,)k(though,)d(that)g(the)g(c)m(hec)m(k)h(o)s
+(ccurs)e(up)s(on)f(decompression,)j(so)f(it)f(can)h(only)390
+4407 y(tell)28 b(y)m(ou)e(that)h(something)g(is)g(wrong.)39
+b(It)27 b(can't)g(help)f(y)m(ou)h(reco)m(v)m(er)i(the)d(original)i
+(uncom-)390 4511 y(pressed)f(data.)40 b(Y)-8 b(ou)27
+b(can)g(use)h Fi(bzip2recover)23 b Fj(to)29 b(try)e(to)i(reco)m(v)m(er)
+g(data)f(from)f(damaged)390 4614 y(\014les.)390 4766
+y(Return)42 b(v)-5 b(alues:)65 b(0)42 b(for)h(a)f(normal)g(exit,)47
+b(1)c(for)f(en)m(vironmen)m(tal)i(problems)e(\(\014le)h(not)390
+4869 y(found,)29 b(in)m(v)-5 b(alid)30 b(\015ags,)g(I/O)h(errors,)g
+(&c\),)f(2)h(to)f(indicate)h(a)f(corrupt)g(compressed)g(\014le,)h(3)390
+4973 y(for)f(an)g(in)m(ternal)i(consistency)f(error)g(\(eg,)h(bug\))e
+(whic)m(h)g(caused)g Fi(bzip2)f Fj(to)i(panic.)390 5304
+y Fe(OPTIONS)p eop
 %%Page: 5 6
 5 5 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
-b(to)g(use)f Fj(bzip2)2375 b Fl(5)390 299 y Fj(-c)30
-b(--stdout)870 403 y Fl(Compress)f(or)i(decompress)f(to)h(standard)e
-(output.)390 557 y Fj(-d)h(--decompress)870 661 y Fl(F)-8
-b(orce)44 b(decompression.)77 b Fj(bzip2)p Fl(,)44 b
-Fj(bunzip2)d Fl(and)h Fj(bzcat)f Fl(are)i(really)f(the)870
-764 y(same)27 b(program,)h(and)e(the)i(decision)d(ab)s(out)i(what)g
-(actions)g(to)h(tak)m(e)g(is)e(done)870 868 y(on)k(the)h(basis)e(of)i
-(whic)m(h)e(name)h(is)g(used.)40 b(This)28 b(\015ag)j(o)m(v)m(errides)f
-(that)h(mec)m(h-)870 972 y(anism,)e(and)h(forces)h(bzip2)e(to)i
-(decompress.)390 1126 y Fj(-z)f(--compress)870 1230 y
-Fl(The)39 b(complemen)m(t)h(to)g Fj(-d)p Fl(:)59 b(forces)40
-b(compression,)h(regardless)d(of)i(the)g(in-)870 1334
-y(v)m(ok)-5 b(ation)31 b(name.)390 1488 y Fj(-t)f(--test)8
-b Fl(Chec)m(k)33 b(in)m(tegrit)m(y)j(of)f(the)g(sp)s(eci\014ed)e
-(\014le\(s\),)k(but)d(don't)h(decompress)g(them.)870
-1591 y(This)40 b(really)g(p)s(erforms)g(a)i(trial)e(decompression)h
-(and)g(thro)m(ws)g(a)m(w)m(a)m(y)j(the)870 1695 y(result.)390
-1849 y Fj(-f)30 b(--force)870 1953 y Fl(F)-8 b(orce)31
-b(o)m(v)m(erwrite)f(of)g(output)f(\014les.)40 b(Normally)-8
-b(,)29 b Fj(bzip2)f Fl(will)f(not)j(o)m(v)m(erwrite)870
-2057 y(existing)e(output)g(\014les.)39 b(Also)28 b(forces)h
-Fj(bzip2)e Fl(to)i(break)g(hard)e(links)f(to)k(\014les,)870
-2161 y(whic)m(h)f(it)h(otherwise)g(w)m(ouldn't)f(do.)390
-2315 y Fj(-k)h(--keep)8 b Fl(Keep)24 b(\(don't)i(delete\))h(input)d
-(\014les)g(during)g(compression)h(or)h(decompression.)390
-2469 y Fj(-s)k(--small)870 2573 y Fl(Reduce)23 b(memory)f(usage,)j(for)
-d(compression,)h(decompression)f(and)g(testing.)870 2676
-y(Files)f(are)i(decompressed)e(and)h(tested)h(using)e(a)h(mo)s
-(di\014ed)e(algorithm)h(whic)m(h)870 2780 y(only)30 b(requires)g(2.5)j
-(b)m(ytes)f(p)s(er)e(blo)s(c)m(k)h(b)m(yte.)44 b(This)30
-b(means)h(an)m(y)h(\014le)e(can)i(b)s(e)870 2884 y(decompressed)d(in)f
-(2300k)j(of)e(memory)-8 b(,)30 b(alb)s(eit)e(at)i(ab)s(out)f(half)g
-(the)g(normal)870 2988 y(sp)s(eed.)870 3117 y(During)42
-b(compression,)k Fj(-s)d Fl(selects)h(a)g(blo)s(c)m(k)g(size)f(of)h
-(200k,)k(whic)m(h)42 b(lim-)870 3220 y(its)33 b(memory)g(use)g(to)h
-(around)e(the)i(same)f(\014gure,)h(at)g(the)g(exp)s(ense)f(of)g(y)m
-(our)870 3324 y(compression)g(ratio.)50 b(In)33 b(short,)i(if)d(y)m
-(our)i(mac)m(hine)f(is)g(lo)m(w)g(on)h(memory)f(\(8)870
-3428 y(megab)m(ytes)42 b(or)e(less\),)j(use)d(-s)g(for)g(ev)m
-(erything.)71 b(See)40 b(MEMOR)-8 b(Y)41 b(MAN-)870 3532
-y(A)m(GEMENT)31 b(b)s(elo)m(w.)390 3686 y Fj(-q)f(--quiet)870
-3790 y Fl(Suppress)j(non-essen)m(tial)j(w)m(arning)e(messages.)58
-b(Messages)38 b(p)s(ertaining)33 b(to)870 3893 y(I/O)d(errors)g(and)g
-(other)h(critical)e(ev)m(en)m(ts)j(will)27 b(not)k(b)s(e)f(suppressed.)
-390 4047 y Fj(-v)g(--verbose)870 4151 y Fl(V)-8 b(erb)s(ose)28
-b(mo)s(de)f({)i(sho)m(w)e(the)h(compression)f(ratio)h(for)f(eac)m(h)i
-(\014le)e(pro)s(cessed.)870 4255 y(F)-8 b(urther)30 b
-Fj(-v)p Fl('s)g(increase)g(the)g(v)m(erb)s(osit)m(y)g(lev)m(el,)h(sp)s
-(ewing)d(out)j(lots)f(of)g(infor-)870 4359 y(mation)g(whic)m(h)f(is)h
-(primarily)d(of)j(in)m(terest)h(for)f(diagnostic)g(purp)s(oses.)390
-4513 y Fj(-L)g(--license)e(-V)h(--version)870 4617 y
-Fl(Displa)m(y)h(the)g(soft)m(w)m(are)i(v)m(ersion,)e(license)f(terms)i
-(and)e(conditions.)390 4771 y Fj(-1)h(to)g(-9)72 b Fl(Set)35
-b(the)g(blo)s(c)m(k)f(size)h(to)g(100)h(k,)g(200)g(k)f(..)53
-b(900)36 b(k)f(when)f(compressing.)53 b(Has)870 4875
-y(no)41 b(e\013ect)h(when)d(decompressing.)71 b(See)41
-b(MEMOR)-8 b(Y)41 b(MANA)m(GEMENT)870 4978 y(b)s(elo)m(w.)390
-5132 y Fj(--)324 b Fl(T)-8 b(reats)25 b(all)e(subsequen)m(t)g(argumen)m
-(ts)i(as)f(\014le)g(names,)h(ev)m(en)g(if)e(they)i(start)f(with)870
-5236 y(a)32 b(dash.)43 b(This)29 b(is)h(so)i(y)m(ou)g(can)f(handle)f
-(\014les)g(with)g(names)i(b)s(eginning)c(with)870 5340
-y(a)j(dash,)f(for)g(example:)40 b Fj(bzip2)29 b(--)h(-myfilename)p
-Fl(.)p eop
+b(to)g(use)f Fi(bzip2)2375 b Fl(5)390 299 y Fi(-c)30
+b(--stdout)870 403 y Fj(Compress)g(or)g(decompress)h(to)g(standard)e
+(output.)390 550 y Fi(-d)h(--decompress)870 653 y Fj(F)-8
+b(orce)42 b(decompression.)72 b Fi(bzip2)p Fj(,)43 b
+Fi(bunzip2)38 b Fj(and)i Fi(bzcat)g Fj(are)h(really)h(the)870
+757 y(same)26 b(program,)i(and)d(the)h(decision)h(ab)s(out)f(what)g
+(actions)h(to)g(tak)m(e)h(is)e(done)870 861 y(on)j(the)h(basis)f(of)g
+(whic)m(h)h(name)f(is)g(used.)40 b(This)29 b(\015ag)g(o)m(v)m(errides)i
+(that)f(mec)m(h-)870 965 y(anism,)g(and)g(forces)h(bzip2)f(to)h
+(decompress.)390 1112 y Fi(-z)f(--compress)870 1215 y
+Fj(The)37 b(complemen)m(t)h(to)g Fi(-d)p Fj(:)54 b(forces)37
+b(compression,)j(regardless)d(of)h(the)f(in-)870 1319
+y(v)m(ok)-5 b(ation)32 b(name.)390 1466 y Fi(-t)e(--test)66
+b Fj(Chec)m(k)26 b(in)m(tegrit)m(y)i(of)e(the)g(sp)s(eci\014ed)f
+(\014le\(s\),)i(but)e(don't)h(decompress)g(them.)870
+1570 y(This)39 b(really)h(p)s(erforms)f(a)g(trial)h(decompression)g
+(and)e(thro)m(ws)i(a)m(w)m(a)m(y)h(the)870 1674 y(result.)390
+1821 y Fi(-f)30 b(--force)870 1924 y Fj(F)-8 b(orce)27
+b(o)m(v)m(erwrite)h(of)e(output)g(\014les.)39 b(Normally)-8
+b(,)28 b Fi(bzip2)c Fj(will)j(not)f(o)m(v)m(erwrite)870
+2028 y(existing)i(output)e(\014les.)40 b(Also)27 b(forces)g
+Fi(bzip2)f Fj(to)h(break)g(hard)f(links)g(to)i(\014les,)870
+2132 y(whic)m(h)i(it)h(otherwise)g(w)m(ouldn't)g(do.)870
+2257 y Fi(bzip2)h Fj(normally)h(declines)h(to)f(decompress)h(\014les)f
+(whic)m(h)f(don't)i(ha)m(v)m(e)g(the)870 2361 y(correct)39
+b(magic)g(header)e(b)m(ytes.)63 b(If)38 b(forced)g(\()p
+Fi(-f)p Fj(\),)h(ho)m(w)m(ev)m(er,)i(it)e(will)f(pass)870
+2465 y(suc)m(h)30 b(\014les)g(through)g(unmo)s(di\014ed.)39
+b(This)30 b(is)h(ho)m(w)f(GNU)h Fi(gzip)e Fj(b)s(eha)m(v)m(es.)390
+2612 y Fi(-k)h(--keep)66 b Fj(Keep)34 b(\(don't)g(delete\))h(input)d
+(\014les)i(during)e(compression)i(or)f(decompres-)870
+2716 y(sion.)390 2863 y Fi(-s)d(--small)870 2966 y Fj(Reduce)35
+b(memory)g(usage,)i(for)e(compression,)i(decompression)e(and)f(test-)
+870 3070 y(ing.)40 b(Files)29 b(are)f(decompressed)g(and)f(tested)i
+(using)f(a)g(mo)s(di\014ed)f(algorithm)870 3174 y(whic)m(h)32
+b(only)g(requires)h(2.5)g(b)m(ytes)g(p)s(er)f(blo)s(c)m(k)g(b)m(yte.)48
+b(This)32 b(means)f(an)m(y)i(\014le)870 3278 y(can)d(b)s(e)f
+(decompressed)g(in)h(2300k)h(of)f(memory)-8 b(,)31 b(alb)s(eit)f(at)g
+(ab)s(out)f(half)h(the)870 3381 y(normal)g(sp)s(eed.)870
+3507 y(During)35 b(compression,)j Fi(-s)d Fj(selects)j(a)e(blo)s(c)m(k)
+h(size)f(of)h(200k,)h(whic)m(h)e(limits)870 3611 y(memory)43
+b(use)f(to)h(around)e(the)i(same)f(\014gure,)k(at)d(the)f(exp)s(ense)g
+(of)h(y)m(our)870 3714 y(compression)32 b(ratio.)47 b(In)31
+b(short,)i(if)e(y)m(our)i(mac)m(hine)f(is)g(lo)m(w)g(on)g(memory)g(\(8)
+870 3818 y(megab)m(ytes)39 b(or)e(less\),)j(use)d(-s)g(for)g(ev)m
+(erything.)62 b(See)38 b(MEMOR)-8 b(Y)37 b(MAN-)870 3922
+y(A)m(GEMENT)31 b(b)s(elo)m(w.)390 4069 y Fi(-q)f(--quiet)870
+4173 y Fj(Suppress)h(non-essen)m(tial)j(w)m(arning)f(messages.)49
+b(Messages)34 b(p)s(ertaining)f(to)870 4276 y(I/O)e(errors)g(and)e
+(other)i(critical)i(ev)m(en)m(ts)f(will)e(not)h(b)s(e)f(suppressed.)390
+4423 y Fi(-v)g(--verbose)870 4527 y Fj(V)-8 b(erb)s(ose)25
+b(mo)s(de)f({)h(sho)m(w)f(the)h(compression)g(ratio)g(for)g(eac)m(h)g
+(\014le)g(pro)s(cessed.)870 4631 y(F)-8 b(urther)27 b
+Fi(-v)p Fj('s)g(increase)h(the)g(v)m(erb)s(osit)m(y)g(lev)m(el,)i(sp)s
+(ewing)d(out)g(lots)h(of)g(infor-)870 4735 y(mation)j(whic)m(h)f(is)g
+(primarily)h(of)f(in)m(terest)i(for)f(diagnostic)g(purp)s(oses.)390
+4882 y Fi(-L)f(--license)e(-V)h(--version)870 4985 y
+Fj(Displa)m(y)i(the)f(soft)m(w)m(are)i(v)m(ersion,)g(license)f(terms)g
+(and)e(conditions.)390 5132 y Fi(-1)h(\(or)f(--fast\))g(to)g(-9)h(\(or)
+g(--best\))870 5236 y Fj(Set)h(the)g(blo)s(c)m(k)g(size)g(to)h(100)g
+(k,)e(200)i(k)f(..)41 b(900)32 b(k)f(when)e(compressing.)42
+b(Has)870 5340 y(no)37 b(e\013ect)i(when)d(decompressing.)62
+b(See)37 b(MEMOR)-8 b(Y)38 b(MANA)m(GEMENT)p eop
 %%Page: 6 7
 6 6 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
-b(to)g(use)f Fj(bzip2)2375 b Fl(6)390 299 y Fj(--repetitive-fast)390
-427 y(--repetitive-best)870 530 y Fl(These)34 b(\015ags)g(are)h
-(redundan)m(t)e(in)g(v)m(ersions)g(0.9.5)j(and)e(ab)s(o)m(v)m(e.)53
-b(They)34 b(pro-)870 634 y(vided)h(some)i(coarse)g(con)m(trol)g(o)m(v)m
-(er)g(the)g(b)s(eha)m(viour)e(of)h(the)g(sorting)g(algo-)870
-738 y(rithm)h(in)h(earlier)g(v)m(ersions,)j(whic)m(h)d(w)m(as)h
-(sometimes)h(useful.)65 b(0.9.5)41 b(and)870 842 y(ab)s(o)m(v)m(e)34
-b(ha)m(v)m(e)g(an)f(impro)m(v)m(ed)g(algorithm)f(whic)m(h)f(renders)h
-(these)h(\015ags)h(irrel-)870 946 y(ev)-5 b(an)m(t.)390
-1190 y Ff(MEMOR)-10 b(Y)40 b(MANA)m(GEMENT)390 1377 y
-Fj(bzip2)25 b Fl(compresses)i(large)g(\014les)e(in)g(blo)s(c)m(ks.)39
-b(The)26 b(blo)s(c)m(k)h(size)f(a\013ects)i(b)s(oth)e(the)h(compres-)
-390 1481 y(sion)39 b(ratio)g(ac)m(hiev)m(ed,)k(and)d(the)f(amoun)m(t)i
-(of)e(memory)h(needed)f(for)h(compression)f(and)390 1585
-y(decompression.)59 b(The)36 b(\015ags)h Fj(-1)f Fl(through)h
-Fj(-9)f Fl(sp)s(ecify)f(the)i(blo)s(c)m(k)g(size)f(to)i(b)s(e)e
-(100,000)390 1688 y(b)m(ytes)29 b(through)e(900,000)k(b)m(ytes)d(\(the)
-h(default\))e(resp)s(ectiv)m(ely)-8 b(.)40 b(A)m(t)29
-b(decompression)e(time,)390 1792 y(the)32 b(blo)s(c)m(k)g(size)g(used)g
-(for)g(compression)f(is)g(read)h(from)g(the)g(header)g(of)h(the)f
-(compressed)390 1896 y(\014le,)j(and)f Fj(bunzip2)e Fl(then)i(allo)s
-(cates)h(itself)e(just)h(enough)g(memory)g(to)i(decompress)e(the)390
-2000 y(\014le.)39 b(Since)29 b(blo)s(c)m(k)g(sizes)g(are)h(stored)f(in)
-f(compressed)h(\014les,)g(it)g(follo)m(ws)f(that)i(the)g(\015ags)g
-Fj(-1)390 2103 y Fl(to)h Fj(-9)f Fl(are)h(irrelev)-5
-b(an)m(t)29 b(to)i(and)f(so)h(ignored)e(during)f(decompression.)390
-2255 y(Compression)h(and)g(decompression)h(requiremen)m(ts,)f(in)g(b)m
-(ytes,)j(can)e(b)s(e)g(estimated)h(as:)869 2406 y Fj(Compression:)140
-b(400k)46 b(+)i(\()f(8)h(x)f(block)f(size)h(\))869 2613
+b(to)g(use)f Fi(bzip2)2375 b Fl(6)870 299 y Fj(b)s(elo)m(w.)83
+b(The)44 b Fi(--fast)f Fj(and)g Fi(--best)g Fj(aliases)i(are)g
+(primarily)f(for)g(GNU)870 403 y Fi(gzip)27 b Fj(compatibilit)m(y)-8
+b(.)43 b(In)28 b(particular,)i Fi(--fast)d Fj(do)s(esn't)h(mak)m(e)i
+(things)e(sig-)870 506 y(ni\014can)m(tly)d(faster.)40
+b(And)23 b Fi(--best)g Fj(merely)i(selects)h(the)f(default)g(b)s(eha)m
+(viour.)390 674 y Fi(--)384 b Fj(T)-8 b(reats)38 b(all)f(subsequen)m(t)
+f(argumen)m(ts)g(as)h(\014le)f(names,)i(ev)m(en)f(if)f(they)h(start)870
+778 y(with)31 b(a)h(dash.)42 b(This)31 b(is)h(so)f(y)m(ou)h(can)f
+(handle)g(\014les)g(with)h(names)f(b)s(eginning)870 881
+y(with)f(a)h(dash,)e(for)i(example:)41 b Fi(bzip2)29
+b(--)h(-myfilename)p Fj(.)390 1049 y Fi(--repetitive-fast)390
+1185 y(--repetitive-best)870 1288 y Fj(These)j(\015ags)g(are)g
+(redundan)m(t)f(in)h(v)m(ersions)g(0.9.5)i(and)d(ab)s(o)m(v)m(e.)49
+b(They)33 b(pro-)870 1392 y(vided)g(some)h(coarse)h(con)m(trol)g(o)m(v)
+m(er)g(the)f(b)s(eha)m(viour)f(of)h(the)g(sorting)g(algo-)870
+1496 y(rithm)j(in)g(earlier)h(v)m(ersions,)i(whic)m(h)d(w)m(as)g
+(sometimes)h(useful.)61 b(0.9.5)39 b(and)870 1600 y(ab)s(o)m(v)m(e)31
+b(ha)m(v)m(e)f(an)g(impro)m(v)m(ed)g(algorithm)h(whic)m(h)e(renders)g
+(these)h(\015ags)g(irrel-)870 1704 y(ev)-5 b(an)m(t.)390
+1964 y Fe(MEMOR)-10 b(Y)40 b(MANA)m(GEMENT)390 2151 y
+Fi(bzip2)23 b Fj(compresses)i(large)h(\014les)e(in)g(blo)s(c)m(ks.)40
+b(The)24 b(blo)s(c)m(k)h(size)h(a\013ects)g(b)s(oth)e(the)g(compres-)
+390 2255 y(sion)38 b(ratio)g(ac)m(hiev)m(ed,)k(and)36
+b(the)i(amoun)m(t)g(of)g(memory)g(needed)f(for)h(compression)g(and)390
+2358 y(decompression.)57 b(The)35 b(\015ags)h Fi(-1)f
+Fj(through)g Fi(-9)g Fj(sp)s(ecify)g(the)h(blo)s(c)m(k)g(size)h(to)f(b)
+s(e)f(100,000)390 2462 y(b)m(ytes)25 b(through)f(900,000)j(b)m(ytes)e
+(\(the)h(default\))e(resp)s(ectiv)m(ely)-8 b(.)41 b(A)m(t)25
+b(decompression)g(time,)390 2566 y(the)k(blo)s(c)m(k)h(size)g(used)f
+(for)g(compression)g(is)g(read)h(from)f(the)g(header)g(of)g(the)h
+(compressed)390 2670 y(\014le,)j(and)f Fi(bunzip2)f Fj(then)h(allo)s
+(cates)i(itself)g(just)e(enough)g(memory)h(to)g(decompress)g(the)390
+2773 y(\014le.)40 b(Since)27 b(blo)s(c)m(k)h(sizes)h(are)f(stored)g(in)
+f(compressed)g(\014les,)h(it)h(follo)m(ws)f(that)g(the)g(\015ags)g
+Fi(-1)390 2877 y Fj(to)j Fi(-9)f Fj(are)h(irrelev)-5
+b(an)m(t)32 b(to)f(and)f(so)g(ignored)h(during)e(decompression.)390
+3028 y(Compression)h(and)f(decompression)i(requiremen)m(ts,)g(in)f(b)m
+(ytes,)i(can)e(b)s(e)g(estimated)i(as:)869 3179 y Fi(Compression:)140
+b(400k)46 b(+)i(\()f(8)h(x)f(block)f(size)h(\))869 3387
 y(Decompression:)d(100k)i(+)i(\()f(4)h(x)f(block)f(size)h(\),)g(or)1585
-2717 y(100k)f(+)i(\()f(2.5)g(x)g(block)g(size)f(\))390
-2868 y Fl(Larger)29 b(blo)s(c)m(k)f(sizes)h(giv)m(e)g(rapidly)d
-(diminishing)e(marginal)k(returns.)39 b(Most)29 b(of)g(the)g(com-)390
-2972 y(pression)d(comes)j(from)f(the)g(\014rst)g(t)m(w)m(o)h(or)f
-(three)h(h)m(undred)d(k)i(of)g(blo)s(c)m(k)g(size,)g(a)h(fact)g(w)m
-(orth)390 3075 y(b)s(earing)j(in)f(mind)g(when)h(using)f
-Fj(bzip2)h Fl(on)g(small)g(mac)m(hines.)47 b(It)33 b(is)f(also)h(imp)s
-(ortan)m(t)f(to)390 3179 y(appreciate)j(that)h(the)f(decompression)f
-(memory)h(requiremen)m(t)f(is)h(set)g(at)h(compression)390
-3283 y(time)30 b(b)m(y)g(the)h(c)m(hoice)g(of)g(blo)s(c)m(k)f(size.)390
-3434 y(F)-8 b(or)45 b(\014les)f(compressed)g(with)g(the)g(default)g
-(900k)i(blo)s(c)m(k)e(size,)49 b Fj(bunzip2)42 b Fl(will)g(require)390
-3538 y(ab)s(out)29 b(3700)j(kb)m(ytes)e(to)h(decompress.)40
-b(T)-8 b(o)30 b(supp)s(ort)e(decompression)h(of)h(an)m(y)g(\014le)f(on)
-g(a)i(4)390 3642 y(megab)m(yte)h(mac)m(hine,)d Fj(bunzip2)f
-Fl(has)i(an)g(option)f(to)i(decompress)e(using)g(appro)m(ximately)390
-3745 y(half)k(this)g(amoun)m(t)i(of)f(memory)-8 b(,)36
-b(ab)s(out)e(2300)i(kb)m(ytes.)53 b(Decompression)34
-b(sp)s(eed)g(is)f(also)390 3849 y(halv)m(ed,)i(so)f(y)m(ou)h(should)d
-(use)h(this)g(option)h(only)f(where)h(necessary)-8 b(.)53
-b(The)33 b(relev)-5 b(an)m(t)35 b(\015ag)390 3953 y(is)29
-b Fj(-s)p Fl(.)390 4104 y(In)34 b(general,)i(try)f(and)f(use)g(the)h
-(largest)h(blo)s(c)m(k)e(size)h(memory)f(constrain)m(ts)h(allo)m(w,)h
-(since)390 4208 y(that)45 b(maximises)f(the)h(compression)f(ac)m(hiev)m
-(ed.)85 b(Compression)43 b(and)h(decompression)390 4311
-y(sp)s(eed)30 b(are)g(virtually)e(una\013ected)j(b)m(y)f(blo)s(c)m(k)g
-(size.)390 4463 y(Another)25 b(signi\014can)m(t)f(p)s(oin)m(t)g
-(applies)f(to)j(\014les)e(whic)m(h)g(\014t)h(in)e(a)j(single)d(blo)s(c)
-m(k)i({)g(that)h(means)390 4566 y(most)g(\014les)g(y)m(ou'd)g(encoun)m
-(ter)h(using)d(a)j(large)f(blo)s(c)m(k)g(size.)39 b(The)25
-b(amoun)m(t)i(of)f(real)g(memory)390 4670 y(touc)m(hed)38
-b(is)e(prop)s(ortional)f(to)j(the)f(size)g(of)h(the)f(\014le,)h(since)f
-(the)g(\014le)g(is)f(smaller)g(than)h(a)390 4774 y(blo)s(c)m(k.)49
-b(F)-8 b(or)35 b(example,)f(compressing)e(a)i(\014le)e(20,000)k(b)m
-(ytes)e(long)f(with)f(the)i(\015ag)g Fj(-9)f Fl(will)390
-4878 y(cause)28 b(the)f(compressor)g(to)h(allo)s(cate)f(around)f(7600k)
-j(of)e(memory)-8 b(,)28 b(but)f(only)f(touc)m(h)i(400k)390
-4981 y Fj(+)h Fl(20000)j(*)e(8)g(=)f(560)i(kb)m(ytes)f(of)g(it.)40
-b(Similarly)-8 b(,)26 b(the)k(decompressor)f(will)e(allo)s(cate)j
-(3700k)390 5085 y(but)g(only)f(touc)m(h)i(100k)h Fj(+)e
-Fl(20000)i(*)f(4)g(=)f(180)i(kb)m(ytes.)390 5236 y(Here)41
-b(is)f(a)i(table)f(whic)m(h)e(summarises)g(the)j(maxim)m(um)d(memory)i
-(usage)h(for)e(di\013eren)m(t)390 5340 y(blo)s(c)m(k)25
-b(sizes.)38 b(Also)25 b(recorded)g(is)f(the)i(total)g(compressed)e
-(size)h(for)g(14)h(\014les)e(of)i(the)f(Calgary)p eop
+3491 y(100k)f(+)i(\()f(2.5)g(x)g(block)g(size)f(\))390
+3642 y Fj(Larger)27 b(blo)s(c)m(k)f(sizes)h(giv)m(e)h(rapidly)e
+(diminishing)f(marginal)i(returns.)39 b(Most)27 b(of)f(the)h(com-)390
+3745 y(pression)e(comes)i(from)f(the)g(\014rst)f(t)m(w)m(o)i(or)f
+(three)h(h)m(undred)d(k)h(of)h(blo)s(c)m(k)g(size,)i(a)e(fact)h(w)m
+(orth)390 3849 y(b)s(earing)32 b(in)g(mind)f(when)g(using)h
+Fi(bzip2)f Fj(on)h(small)g(mac)m(hines.)47 b(It)32 b(is)h(also)f(imp)s
+(ortan)m(t)h(to)390 3953 y(appreciate)f(that)g(the)f(decompression)g
+(memory)g(requiremen)m(t)h(is)f(set)g(at)h(compression)390
+4057 y(time)f(b)m(y)f(the)h(c)m(hoice)h(of)f(blo)s(c)m(k)g(size.)390
+4208 y(F)-8 b(or)43 b(\014les)f(compressed)h(with)f(the)g(default)h
+(900k)g(blo)s(c)m(k)g(size,)k Fi(bunzip2)40 b Fj(will)j(require)390
+4311 y(ab)s(out)28 b(3700)i(kb)m(ytes)f(to)h(decompress.)40
+b(T)-8 b(o)29 b(supp)s(ort)e(decompression)i(of)g(an)m(y)f(\014le)h(on)
+f(a)h(4)390 4415 y(megab)m(yte)h(mac)m(hine,)g Fi(bunzip2)c
+Fj(has)i(an)h(option)g(to)g(decompress)g(using)f(appro)m(ximately)390
+4519 y(half)33 b(this)g(amoun)m(t)h(of)f(memory)-8 b(,)35
+b(ab)s(out)d(2300)j(kb)m(ytes.)50 b(Decompression)34
+b(sp)s(eed)e(is)h(also)390 4623 y(halv)m(ed,)h(so)f(y)m(ou)g(should)e
+(use)i(this)f(option)h(only)g(where)g(necessary)-8 b(.)48
+b(The)33 b(relev)-5 b(an)m(t)34 b(\015ag)390 4727 y(is)c
+Fi(-s)p Fj(.)390 4878 y(In)i(general,)i(try)f(and)e(use)h(the)h
+(largest)h(blo)s(c)m(k)f(size)g(memory)g(constrain)m(ts)g(allo)m(w,)i
+(since)390 4981 y(that)43 b(maximises)g(the)g(compression)f(ac)m(hiev)m
+(ed.)79 b(Compression)42 b(and)g(decompression)390 5085
+y(sp)s(eed)30 b(are)g(virtually)h(una\013ected)g(b)m(y)f(blo)s(c)m(k)h
+(size.)390 5236 y(Another)24 b(signi\014can)m(t)i(p)s(oin)m(t)e
+(applies)g(to)i(\014les)e(whic)m(h)g(\014t)h(in)f(a)g(single)h(blo)s(c)
+m(k)g({)g(that)g(means)390 5340 y(most)g(\014les)f(y)m(ou'd)h(encoun)m
+(ter)g(using)f(a)g(large)i(blo)s(c)m(k)f(size.)39 b(The)25
+b(amoun)m(t)f(of)h(real)g(memory)p eop
 %%Page: 7 8
 7 7 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
-b(to)g(use)f Fj(bzip2)2375 b Fl(7)390 299 y(T)-8 b(ext)38
-b(Compression)d(Corpus)h(totalling)h(3,141,622)k(b)m(ytes.)61
-b(This)36 b(column)g(giv)m(es)i(some)390 403 y(feel)23
-b(for)f(ho)m(w)h(compression)f(v)-5 b(aries)23 b(with)e(blo)s(c)m(k)i
-(size.)38 b(These)23 b(\014gures)f(tend)g(to)i(understate)390
-506 y(the)g(adv)-5 b(an)m(tage)26 b(of)e(larger)f(blo)s(c)m(k)h(sizes)f
-(for)h(larger)f(\014les,)h(since)g(the)g(Corpus)e(is)h(dominated)390
-610 y(b)m(y)30 b(smaller)f(\014les.)1107 761 y Fj(Compress)141
-b(Decompress)g(Decompress)f(Corpus)773 865 y(Flag)238
-b(usage)285 b(usage)332 b(-s)48 b(usage)237 b(Size)821
-1073 y(-1)286 b(1200k)332 b(500k)429 b(350k)285 b(914704)821
-1176 y(-2)h(2000k)332 b(900k)429 b(600k)285 b(877703)821
-1280 y(-3)h(2800k)f(1300k)428 b(850k)285 b(860338)821
-1384 y(-4)h(3600k)f(1700k)380 b(1100k)285 b(846899)821
-1488 y(-5)h(4400k)f(2100k)380 b(1350k)285 b(845160)821
-1591 y(-6)h(5200k)f(2500k)380 b(1600k)285 b(838626)821
-1695 y(-7)h(6100k)f(2900k)380 b(1850k)285 b(834096)821
-1799 y(-8)h(6800k)f(3300k)380 b(2100k)285 b(828642)821
-1903 y(-9)h(7600k)f(3700k)380 b(2350k)285 b(828642)390
-2147 y Ff(RECO)m(VERING)37 b(D)m(A)-10 b(T)g(A)40 b(FR)m(OM)h(D)m(AMA)m
-(GED)e(FILES)390 2333 y Fj(bzip2)25 b Fl(compresses)h(\014les)g(in)f
-(blo)s(c)m(ks,)h(usually)e(900kb)m(ytes)29 b(long.)39
-b(Eac)m(h)27 b(blo)s(c)m(k)e(is)h(handled)390 2437 y(indep)s(enden)m
-(tly)-8 b(.)47 b(If)32 b(a)i(media)e(or)h(transmission)e(error)i
-(causes)h(a)f(m)m(ulti-blo)s(c)m(k)f Fj(.bz2)g Fl(\014le)390
-2541 y(to)k(b)s(ecome)h(damaged,)g(it)e(ma)m(y)i(b)s(e)e(p)s(ossible)e
-(to)k(reco)m(v)m(er)g(data)f(from)g(the)f(undamaged)390
-2645 y(blo)s(c)m(ks)30 b(in)f(the)h(\014le.)390 2796
-y(The)j(compressed)h(represen)m(tation)f(of)h(eac)m(h)h(blo)s(c)m(k)e
-(is)g(delimited)e(b)m(y)j(a)g(48-bit)g(pattern,)390 2900
-y(whic)m(h)27 b(mak)m(es)j(it)e(p)s(ossible)e(to)j(\014nd)e(the)i(blo)s
-(c)m(k)f(b)s(oundaries)e(with)i(reasonable)g(certain)m(t)m(y)-8
-b(.)390 3003 y(Eac)m(h)34 b(blo)s(c)m(k)f(also)g(carries)g(its)g(o)m
-(wn)g(32-bit)g(CR)m(C,)h(so)f(damaged)h(blo)s(c)m(ks)f(can)g(b)s(e)g
-(distin-)390 3107 y(guished)c(from)h(undamaged)g(ones.)390
-3258 y Fj(bzip2recover)37 b Fl(is)j(a)h(simple)e(program)h(whose)g
-(purp)s(ose)f(is)h(to)i(searc)m(h)f(for)f(blo)s(c)m(ks)g(in)390
-3362 y Fj(.bz2)34 b Fl(\014les,)i(and)f(write)f(eac)m(h)j(blo)s(c)m(k)d
-(out)i(in)m(to)f(its)g(o)m(wn)g Fj(.bz2)f Fl(\014le.)55
-b(Y)-8 b(ou)36 b(can)f(then)g(use)390 3466 y Fj(bzip2)29
-b(-t)c Fl(to)i(test)f(the)g(in)m(tegrit)m(y)g(of)g(the)g(resulting)e
-(\014les,)i(and)f(decompress)h(those)g(whic)m(h)390 3569
-y(are)31 b(undamaged.)390 3721 y Fj(bzip2recover)41 b
-Fl(tak)m(es)46 b(a)f(single)e(argumen)m(t,)49 b(the)44
-b(name)h(of)g(the)f(damaged)h(\014le,)j(and)390 3824
-y(writes)33 b(a)i(n)m(um)m(b)s(er)d(of)j(\014les)e Fj(rec0001file.bz2)p
-Fl(,)e Fj(rec0002file.bz2)p Fl(,)g(etc,)36 b(con)m(taining)390
-3928 y(the)42 b(extracted)g(blo)s(c)m(ks.)74 b(The)41
-b(output)g(\014lenames)f(are)i(designed)e(so)i(that)g(the)g(use)f(of)
-390 4032 y(wildcards)30 b(in)h(subsequen)m(t)h(pro)s(cessing)f({)i(for)
-g(example,)g Fj(bzip2)c(-dc)g(rec*file.bz2)e(>)390 4136
-y(recovered_data)f Fl({)31 b(lists)e(the)i(\014les)e(in)g(the)i
-(correct)g(order.)390 4287 y Fj(bzip2recover)38 b Fl(should)i(b)s(e)g
-(of)i(most)g(use)f(dealing)f(with)g(large)i Fj(.bz2)e
-Fl(\014les,)k(as)d(these)390 4390 y(will)29 b(con)m(tain)j(man)m(y)g
-(blo)s(c)m(ks.)45 b(It)32 b(is)f(clearly)g(futile)f(to)i(use)g(it)f(on)
-h(damaged)g(single-blo)s(c)m(k)390 4494 y(\014les,)g(since)f(a)h
-(damaged)h(blo)s(c)m(k)e(cannot)i(b)s(e)e(reco)m(v)m(ered.)47
-b(If)32 b(y)m(ou)g(wish)e(to)j(minimise)c(an)m(y)390
-4598 y(p)s(oten)m(tial)36 b(data)i(loss)e(through)g(media)h(or)f
-(transmission)f(errors,)j(y)m(ou)f(migh)m(t)g(consider)390
-4702 y(compressing)29 b(with)g(a)i(smaller)e(blo)s(c)m(k)h(size.)390
-4946 y Ff(PERF)m(ORMANCE)39 b(NOTES)390 5132 y Fl(The)f(sorting)f
-(phase)h(of)h(compression)e(gathers)i(together)h(similar)35
-b(strings)i(in)g(the)i(\014le.)390 5236 y(Because)54
-b(of)f(this,)58 b(\014les)52 b(con)m(taining)g(v)m(ery)h(long)g(runs)e
-(of)i(rep)s(eated)g(sym)m(b)s(ols,)58 b(lik)m(e)390 5340
-y Fj(")p Fl(aabaabaabaab)e(...)p Fj(")g Fl(\(rep)s(eated)g(sev)m(eral)f
-(h)m(undred)e(times\))i(ma)m(y)h(compress)f(more)p eop
+b(to)g(use)f Fi(bzip2)2375 b Fl(7)390 299 y Fj(touc)m(hed)36
+b(is)g(prop)s(ortional)g(to)g(the)g(size)h(of)f(the)g(\014le,)h(since)f
+(the)g(\014le)g(is)f(smaller)i(than)e(a)390 403 y(blo)s(c)m(k.)48
+b(F)-8 b(or)33 b(example,)h(compressing)f(a)g(\014le)f(20,000)j(b)m
+(ytes)f(long)f(with)f(the)h(\015ag)g Fi(-9)f Fj(will)390
+506 y(cause)26 b(the)g(compressor)f(to)i(allo)s(cate)g(around)e(7600k)i
+(of)f(memory)-8 b(,)27 b(but)e(only)g(touc)m(h)i(400k)390
+610 y Fi(+)h Fj(20000)i(*)f(8)g(=)f(560)h(kb)m(ytes)g(of)g(it.)40
+b(Similarly)-8 b(,)30 b(the)f(decompressor)f(will)h(allo)s(cate)h
+(3700k)390 714 y(but)g(only)g(touc)m(h)h(100k)h Fi(+)e
+Fj(20000)j(*)d(4)h(=)f(180)i(kb)m(ytes.)390 865 y(Here)39
+b(is)f(a)g(table)h(whic)m(h)f(summarises)f(the)i(maxim)m(um)e(memory)h
+(usage)h(for)f(di\013eren)m(t)390 969 y(blo)s(c)m(k)c(sizes.)50
+b(Also)33 b(recorded)g(is)h(the)f(total)i(compressed)e(size)h(for)g(14)
+g(\014les)f(of)g(the)h(Cal-)390 1073 y(gary)39 b(T)-8
+b(ext)39 b(Compression)f(Corpus)g(totalling)i(3,141,622)i(b)m(ytes.)65
+b(This)38 b(column)h(giv)m(es)390 1176 y(some)g(feel)f(for)h(ho)m(w)f
+(compression)g(v)-5 b(aries)39 b(with)f(blo)s(c)m(k)g(size.)65
+b(These)38 b(\014gures)g(tend)g(to)390 1280 y(understate)28
+b(the)g(adv)-5 b(an)m(tage)29 b(of)f(larger)h(blo)s(c)m(k)g(sizes)f
+(for)g(larger)h(\014les,)g(since)f(the)g(Corpus)390 1384
+y(is)i(dominated)h(b)m(y)f(smaller)h(\014les.)1107 1535
+y Fi(Compress)141 b(Decompress)g(Decompress)f(Corpus)773
+1639 y(Flag)238 b(usage)285 b(usage)332 b(-s)48 b(usage)237
+b(Size)821 1846 y(-1)286 b(1200k)332 b(500k)429 b(350k)285
+b(914704)821 1950 y(-2)h(2000k)332 b(900k)429 b(600k)285
+b(877703)821 2054 y(-3)h(2800k)f(1300k)428 b(850k)285
+b(860338)821 2158 y(-4)h(3600k)f(1700k)380 b(1100k)285
+b(846899)821 2261 y(-5)h(4400k)f(2100k)380 b(1350k)285
+b(845160)821 2365 y(-6)h(5200k)f(2500k)380 b(1600k)285
+b(838626)821 2469 y(-7)h(6100k)f(2900k)380 b(1850k)285
+b(834096)821 2573 y(-8)h(6800k)f(3300k)380 b(2100k)285
+b(828642)821 2676 y(-9)h(7600k)f(3700k)380 b(2350k)285
+b(828642)390 2992 y Fe(RECO)m(VERING)38 b(D)m(A)-10 b(T)g(A)40
+b(FR)m(OM)h(D)m(AMA)m(GED)f(FILES)390 3179 y Fi(bzip2)24
+b Fj(compresses)i(\014les)g(in)f(blo)s(c)m(ks,)i(usually)e(900kb)m
+(ytes)j(long.)40 b(Eac)m(h)25 b(blo)s(c)m(k)h(is)g(handled)390
+3283 y(indep)s(enden)m(tly)-8 b(.)42 b(If)31 b(a)g(media)g(or)h
+(transmission)f(error)g(causes)g(a)g(m)m(ulti-blo)s(c)m(k)i
+Fi(.bz2)d Fj(\014le)390 3387 y(to)35 b(b)s(ecome)f(damaged,)i(it)e(ma)m
+(y)h(b)s(e)e(p)s(ossible)h(to)h(reco)m(v)m(er)h(data)f(from)f(the)g
+(undamaged)390 3491 y(blo)s(c)m(ks)d(in)f(the)h(\014le.)390
+3642 y(The)g(compressed)g(represen)m(tation)i(of)f(eac)m(h)g(blo)s(c)m
+(k)g(is)f(delimited)h(b)m(y)f(a)h(48-bit)g(pattern,)390
+3745 y(whic)m(h)27 b(mak)m(es)g(it)h(p)s(ossible)e(to)i(\014nd)d(the)j
+(blo)s(c)m(k)f(b)s(oundaries)e(with)i(reasonable)h(certain)m(t)m(y)-8
+b(.)390 3849 y(Eac)m(h)33 b(blo)s(c)m(k)g(also)h(carries)g(its)f(o)m
+(wn)g(32-bit)h(CR)m(C,)f(so)g(damaged)g(blo)s(c)m(ks)h(can)f(b)s(e)f
+(distin-)390 3953 y(guished)e(from)g(undamaged)f(ones.)390
+4104 y Fi(bzip2recover)36 b Fj(is)j(a)g(simple)f(program)h(whose)g
+(purp)s(ose)f(is)h(to)g(searc)m(h)h(for)f(blo)s(c)m(ks)g(in)390
+4208 y Fi(.bz2)33 b Fj(\014les,)j(and)e(write)h(eac)m(h)h(blo)s(c)m(k)f
+(out)g(in)m(to)g(its)g(o)m(wn)g Fi(.bz2)e Fj(\014le.)54
+b(Y)-8 b(ou)34 b(can)h(then)f(use)390 4311 y Fi(bzip2)29
+b(-t)23 b Fj(to)h(test)h(the)f(in)m(tegrit)m(y)i(of)d(the)h(resulting)g
+(\014les,)h(and)e(decompress)g(those)h(whic)m(h)390 4415
+y(are)31 b(undamaged.)390 4566 y Fi(bzip2recover)40 b
+Fj(tak)m(es)45 b(a)f(single)g(argumen)m(t,)j(the)d(name)g(of)f(the)h
+(damaged)g(\014le,)j(and)390 4670 y(writes)33 b(a)f(n)m(um)m(b)s(er)f
+(of)h(\014les)h Fi(rec00001file.bz2)p Fj(,)28 b Fi(rec00002file.bz2)p
+Fj(,)g(etc,)34 b(con)m(tain-)390 4774 y(ing)29 b(the)g(extracted)i(blo)
+s(c)m(ks.)40 b(The)29 b(output)g(\014lenames)g(are)g(designed)g(so)g
+(that)g(the)g(use)g(of)390 4878 y(wildcards)h(in)f(subsequen)m(t)h(pro)
+s(cessing)g({)h(for)f(example,)h Fi(bzip2)e(-dc)g(rec*file.bz2)e(>)390
+4981 y(recovered_data)f Fj({)31 b(pro)s(cesses)g(the)f(\014les)h(in)f
+(the)h(correct)h(order.)390 5132 y Fi(bzip2recover)37
+b Fj(should)i(b)s(e)h(of)h(most)f(use)g(dealing)h(with)f(large)i
+Fi(.bz2)d Fj(\014les,)k(as)d(these)390 5236 y(will)31
+b(con)m(tain)i(man)m(y)e(blo)s(c)m(ks.)43 b(It)32 b(is)f(clearly)h
+(futile)g(to)g(use)f(it)g(on)g(damaged)g(single-blo)s(c)m(k)390
+5340 y(\014les,)g(since)g(a)g(damaged)f(blo)s(c)m(k)h(cannot)h(b)s(e)e
+(reco)m(v)m(ered.)43 b(If)31 b(y)m(ou)g(wish)f(to)h(minimise)g(an)m(y)p
+eop
 %%Page: 8 9
 8 8 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
-b(to)g(use)f Fj(bzip2)2375 b Fl(8)390 299 y(slo)m(wly)33
-b(than)g(normal.)50 b(V)-8 b(ersions)33 b(0.9.5)i(and)f(ab)s(o)m(v)m(e)
-h(fare)e(m)m(uc)m(h)h(b)s(etter)g(than)f(previous)390
-403 y(v)m(ersions)i(in)g(this)f(resp)s(ect.)57 b(The)35
-b(ratio)h(b)s(et)m(w)m(een)h(w)m(orst-case)g(and)e(a)m(v)m(erage-case)
-40 b(com-)390 506 y(pression)e(time)h(is)f(in)g(the)h(region)g(of)h
-(10:1.)69 b(F)-8 b(or)40 b(previous)e(v)m(ersions,)j(this)d(\014gure)h
-(w)m(as)390 610 y(more)f(lik)m(e)g(100:1.)66 b(Y)-8 b(ou)38
-b(can)h(use)e(the)i Fj(-vvvv)d Fl(option)i(to)h(monitor)e(progress)h
-(in)f(great)390 714 y(detail,)30 b(if)f(y)m(ou)i(w)m(an)m(t.)390
-865 y(Decompression)f(sp)s(eed)g(is)f(una\013ected)i(b)m(y)f(these)h
-(phenomena.)390 1016 y Fj(bzip2)i Fl(usually)g(allo)s(cates)i(sev)m
-(eral)f(megab)m(ytes)j(of)d(memory)h(to)g(op)s(erate)h(in,)e(and)g
-(then)390 1120 y(c)m(harges)k(all)d(o)m(v)m(er)j(it)f(in)e(a)i(fairly)e
-(random)h(fashion.)59 b(This)34 b(means)j(that)g(p)s(erformance,)390
-1224 y(b)s(oth)27 b(for)h(compressing)f(and)g(decompressing,)h(is)f
-(largely)g(determined)g(b)m(y)h(the)g(sp)s(eed)f(at)390
-1327 y(whic)m(h)35 b(y)m(our)h(mac)m(hine)g(can)g(service)g(cac)m(he)i
-(misses.)57 b(Because)37 b(of)g(this,)f(small)f(c)m(hanges)390
-1431 y(to)f(the)f(co)s(de)h(to)f(reduce)g(the)h(miss)d(rate)j(ha)m(v)m
-(e)h(b)s(een)d(observ)m(ed)h(to)h(giv)m(e)g(disprop)s(ortion-)390
-1535 y(ately)i(large)f(p)s(erformance)f(impro)m(v)m(emen)m(ts.)56
-b(I)35 b(imagine)f Fj(bzip2)g Fl(will)e(p)s(erform)i(b)s(est)h(on)390
-1639 y(mac)m(hines)30 b(with)f(v)m(ery)i(large)f(cac)m(hes.)390
-1885 y Ff(CA)-14 b(VEA)k(TS)390 2072 y Fl(I/O)38 b(error)g(messages)h
-(are)f(not)h(as)f(helpful)e(as)i(they)g(could)f(b)s(e.)64
-b Fj(bzip2)37 b Fl(tries)g(hard)g(to)390 2176 y(detect)29
-b(I/O)e(errors)g(and)f(exit)i(cleanly)-8 b(,)27 b(but)g(the)h(details)e
-(of)h(what)h(the)f(problem)f(is)g(some-)390 2280 y(times)k(seem)h
-(rather)f(misleading.)390 2431 y(This)j(man)m(ual)g(page)i(p)s(ertains)
-e(to)i(v)m(ersion)f(1.0)i(of)e Fj(bzip2)p Fl(.)51 b(Compressed)34
-b(data)h(created)390 2534 y(b)m(y)25 b(this)e(v)m(ersion)i(is)e(en)m
-(tirely)h(forw)m(ards)h(and)f(bac)m(kw)m(ards)h(compatible)f(with)f
-(the)i(previous)390 2638 y(public)18 b(releases,)24 b(v)m(ersions)c
-(0.1pl2,)k(0.9.0)e(and)f(0.9.5,)k(but)20 b(with)g(the)h(follo)m(wing)e
-(exception:)390 2742 y(0.9.0)43 b(and)e(ab)s(o)m(v)m(e)h(can)g
-(correctly)f(decompress)g(m)m(ultiple)e(concatenated)k(compressed)390
-2846 y(\014les.)c(0.1pl2)30 b(cannot)g(do)f(this;)f(it)h(will)e(stop)i
-(after)h(decompressing)e(just)g(the)i(\014rst)e(\014le)g(in)390
-2949 y(the)j(stream.)390 3100 y Fj(bzip2recover)20 b
-Fl(uses)k(32-bit)g(in)m(tegers)f(to)i(represen)m(t)f(bit)e(p)s
-(ositions)g(in)g(compressed)i(\014les,)390 3204 y(so)j(it)f(cannot)i
-(handle)d(compressed)i(\014les)f(more)h(than)f(512)i(megab)m(ytes)h
-(long.)39 b(This)25 b(could)390 3308 y(easily)30 b(b)s(e)f(\014xed.)390
-3555 y Ff(A)m(UTHOR)390 3741 y Fl(Julian)f(Sew)m(ard,)i
-Fj(jseward@acm.org)p Fl(.)390 3892 y(The)24 b(ideas)f(em)m(b)s(o)s
-(died)f(in)h Fj(bzip2)f Fl(are)j(due)e(to)i(\(at)g(least\))g(the)f
-(follo)m(wing)e(p)s(eople:)37 b(Mic)m(hael)390 3996 y(Burro)m(ws)48
-b(and)g(Da)m(vid)h(Wheeler)f(\(for)h(the)g(blo)s(c)m(k)f(sorting)g
-(transformation\),)53 b(Da)m(vid)390 4100 y(Wheeler)45
-b(\(again,)50 b(for)45 b(the)g(Hu\013man)g(co)s(der\),)k(P)m(eter)d(F)
--8 b(en)m(wic)m(k)46 b(\(for)g(the)f(structured)390 4204
-y(co)s(ding)26 b(mo)s(del)g(in)f(the)i(original)e Fj(bzip)p
-Fl(,)i(and)f(man)m(y)h(re\014nemen)m(ts\),)h(and)e(Alistair)f
-(Mo\013at,)390 4307 y(Radford)34 b(Neal)h(and)f(Ian)h(Witten)g(\(for)f
-(the)h(arithmetic)g(co)s(der)f(in)g(the)h(original)d
-Fj(bzip)p Fl(\).)390 4411 y(I)41 b(am)g(m)m(uc)m(h)h(indebted)e(for)h
-(their)f(help,)j(supp)s(ort)c(and)i(advice.)74 b(See)41
-b(the)h(man)m(ual)e(in)390 4515 y(the)28 b(source)g(distribution)23
-b(for)28 b(p)s(oin)m(ters)e(to)j(sources)e(of)h(do)s(cumen)m(tation.)40
-b(Christian)25 b(v)m(on)390 4619 y(Ro)s(ques)31 b(encouraged)h(me)g(to)
-g(lo)s(ok)f(for)h(faster)g(sorting)f(algorithms,)f(so)i(as)g(to)g(sp)s
-(eed)f(up)390 4723 y(compression.)47 b(Bela)34 b(Lubkin)c(encouraged)k
-(me)f(to)g(impro)m(v)m(e)g(the)g(w)m(orst-case)i(compres-)390
-4826 y(sion)25 b(p)s(erformance.)38 b(Man)m(y)26 b(p)s(eople)f(sen)m(t)
-h(patc)m(hes,)h(help)s(ed)d(with)g(p)s(ortabilit)m(y)f(problems,)390
-4930 y(len)m(t)30 b(mac)m(hines,)g(ga)m(v)m(e)j(advice)d(and)g(w)m(ere)
-h(generally)f(helpful.)p eop
+b(to)g(use)f Fi(bzip2)2375 b Fl(8)390 299 y Fj(p)s(oten)m(tial)36
+b(data)f(loss)f(through)g(media)h(or)g(transmission)f(errors,)i(y)m(ou)
+e(migh)m(t)i(consider)390 403 y(compressing)31 b(with)f(a)g(smaller)h
+(blo)s(c)m(k)g(size.)390 711 y Fe(PERF)m(ORMANCE)39 b(NOTES)390
+897 y Fj(The)c(sorting)i(phase)e(of)g(compression)h(gathers)g(together)
+i(similar)e(strings)g(in)f(the)h(\014le.)390 1001 y(Because)51
+b(of)g(this,)57 b(\014les)51 b(con)m(taining)h(v)m(ery)f(long)h(runs)d
+(of)j(rep)s(eated)f(sym)m(b)s(ols,)56 b(lik)m(e)390 1105
+y Fi(")p Fj(aabaabaabaab)c(...)p Fi(")h Fj(\(rep)s(eated)g(sev)m(eral)h
+(h)m(undred)c(times\))k(ma)m(y)f(compress)f(more)390
+1209 y(slo)m(wly)33 b(than)f(normal.)45 b(V)-8 b(ersions)33
+b(0.9.5)g(and)e(ab)s(o)m(v)m(e)i(fare)g(m)m(uc)m(h)f(b)s(etter)g(than)g
+(previous)390 1312 y(v)m(ersions)54 b(in)g(this)g(resp)s(ect.)111
+b(The)54 b(ratio)h(b)s(et)m(w)m(een)g(w)m(orst-case)g(and)e(a)m(v)m
+(erage-case)390 1416 y(compression)39 b(time)g(is)g(in)f(the)h(region)h
+(of)e(10:1.)67 b(F)-8 b(or)40 b(previous)e(v)m(ersions,)k(this)c
+(\014gure)390 1520 y(w)m(as)j(more)g(lik)m(e)g(100:1.)74
+b(Y)-8 b(ou)40 b(can)h(use)f(the)h Fi(-vvvv)e Fj(option)i(to)g(monitor)
+g(progress)g(in)390 1624 y(great)32 b(detail,)f(if)g(y)m(ou)f(w)m(an)m
+(t.)390 1775 y(Decompression)h(sp)s(eed)e(is)i(una\013ected)g(b)m(y)f
+(these)h(phenomena.)390 1926 y Fi(bzip2)g Fj(usually)i(allo)s(cates)i
+(sev)m(eral)f(megab)m(ytes)g(of)f(memory)g(to)h(op)s(erate)g(in,)f(and)
+f(then)390 2030 y(c)m(harges)37 b(all)f(o)m(v)m(er)h(it)f(in)f(a)h
+(fairly)g(random)f(fashion.)55 b(This)36 b(means)f(that)h(p)s
+(erformance,)390 2133 y(b)s(oth)f(for)g(compressing)h(and)e
+(decompressing,)j(is)f(largely)g(determined)g(b)m(y)f(the)h(sp)s(eed)
+390 2237 y(at)27 b(whic)m(h)e(y)m(our)h(mac)m(hine)h(can)f(service)h
+(cac)m(he)g(misses.)39 b(Because)27 b(of)f(this,)h(small)f(c)m(hanges)
+390 2341 y(to)31 b(the)f(co)s(de)h(to)g(reduce)f(the)h(miss)e(rate)i
+(ha)m(v)m(e)g(b)s(een)f(observ)m(ed)h(to)g(giv)m(e)g(disprop)s(ortion-)
+390 2445 y(ately)i(large)h(p)s(erformance)e(impro)m(v)m(emen)m(ts.)47
+b(I)33 b(imagine)g Fi(bzip2)d Fj(will)j(p)s(erform)e(b)s(est)h(on)390
+2548 y(mac)m(hines)f(with)f(v)m(ery)h(large)g(cac)m(hes.)390
+2856 y Fe(CA)-14 b(VEA)k(TS)390 3043 y Fj(I/O)45 b(error)f(messages)h
+(are)f(not)h(as)f(helpful)f(as)h(they)g(could)g(b)s(e.)81
+b Fi(bzip2)43 b Fj(tries)i(hard)390 3147 y(to)37 b(detect)g(I/O)f
+(errors)h(and)d(exit)j(cleanly)-8 b(,)39 b(but)c(the)h(details)h(of)f
+(what)f(the)h(problem)g(is)390 3251 y(sometimes)c(seem)e(rather)h
+(misleading.)390 3402 y(This)c(man)m(ual)f(page)i(p)s(ertains)e(to)i(v)
+m(ersion)g(1.0.2)h(of)e Fi(bzip2)p Fj(.)38 b(Compressed)26
+b(data)i(created)390 3505 y(b)m(y)22 b(this)h(v)m(ersion)g(is)f(en)m
+(tirely)i(forw)m(ards)f(and)e(bac)m(kw)m(ards)i(compatible)g(with)f
+(the)h(previous)390 3609 y(public)g(releases,)k(v)m(ersions)d(0.1pl2,)i
+(0.9.0,)h(0.9.5,)g(1.0.0)f(and)d(1.0.1,)k(but)c(with)g(the)h(follo)m
+(w-)390 3713 y(ing)h(exception:)39 b(0.9.0)27 b(and)c(ab)s(o)m(v)m(e)j
+(can)f(correctly)i(decompress)d(m)m(ultiple)i(concatenated)390
+3817 y(compressed)36 b(\014les.)59 b(0.1pl2)37 b(cannot)g(do)f(this;)k
+(it)d(will)f(stop)h(after)g(decompressing)f(just)390
+3921 y(the)31 b(\014rst)f(\014le)g(in)g(the)h(stream.)390
+4072 y Fi(bzip2recover)19 b Fj(v)m(ersions)j(prior)g(to)h(this)f(one,)i
+(1.0.2,)h(used)c(32-bit)j(in)m(tegers)f(to)g(represen)m(t)390
+4175 y(bit)32 b(p)s(ositions)g(in)f(compressed)h(\014les,)g(so)g(it)g
+(could)g(not)g(handle)f(compressed)h(\014les)f(more)390
+4279 y(than)39 b(512)h(megab)m(ytes)h(long.)68 b(V)-8
+b(ersion)39 b(1.0.2)i(and)d(ab)s(o)m(v)m(e)j(uses)d(64-bit)j(in)m(ts)e
+(on)h(some)390 4383 y(platforms)e(whic)m(h)g(supp)s(ort)f(them)i(\(GNU)
+g(supp)s(orted)e(targets,)42 b(and)c(Windo)m(ws\).)64
+b(T)-8 b(o)390 4487 y(establish)27 b(whether)g(or)f(not)i
+Fi(bzip2recover)23 b Fj(w)m(as)k(built)f(with)h(suc)m(h)f(a)h
+(limitation,)j(run)25 b(it)390 4591 y(without)33 b(argumen)m(ts.)50
+b(In)33 b(an)m(y)g(ev)m(en)m(t)i(y)m(ou)e(can)h(build)e(y)m(ourself)h
+(an)g(unlimited)g(v)m(ersion)390 4694 y(if)28 b(y)m(ou)h(can)g
+(recompile)h(it)f(with)f Fi(MaybeUInt64)e Fj(set)j(to)g(b)s(e)f(an)g
+(unsigned)g(64-bit)i(in)m(teger.)390 5002 y Fe(A)m(UTHOR)390
+5189 y Fj(Julian)g(Sew)m(ard,)g Fi(jseward@acm.org)p
+Fj(.)390 5340 y Fi(http://sources.redhat.co)o(m/bz)o(ip2)p
+eop
 %%Page: 9 10
-9 9 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1927 b Fl(9)150 299 y Fh(3)80 b(Programming)53
-b(with)h Fg(libbzip2)150 568 y Fl(This)29 b(c)m(hapter)i(describ)s(es)d
-(the)j(programming)e(in)m(terface)i(to)g Fj(libbzip2)p
-Fl(.)150 725 y(F)-8 b(or)36 b(general)e(bac)m(kground)h(information,)f
-(particularly)f(ab)s(out)h(memory)h(use)f(and)g(p)s(erformance)g(as-)
-150 834 y(p)s(ects,)d(y)m(ou'd)f(b)s(e)g(w)m(ell)f(advised)g(to)j(read)
-e(Chapter)g(2)g(as)h(w)m(ell.)150 1124 y Fk(3.1)68 b(T)-11
-b(op-lev)l(el)46 b(structure)150 1316 y Fj(libbzip2)33
-b Fl(is)i(a)h(\015exible)e(library)f(for)j(compressing)f(and)g
-(decompressing)f(data)j(in)d(the)i Fj(bzip2)e Fl(data)150
-1426 y(format.)39 b(Although)24 b(pac)m(k)-5 b(aged)26
-b(as)e(a)h(single)e(en)m(tit)m(y)-8 b(,)27 b(it)d(helps)f(to)i(regard)g
-(the)g(library)d(as)i(three)h(separate)150 1535 y(parts:)40
-b(the)31 b(lo)m(w)f(lev)m(el)g(in)m(terface,)h(and)f(the)h(high)e(lev)m
-(el)h(in)m(terface,)h(and)f(some)h(utilit)m(y)d(functions.)150
-1692 y(The)38 b(structure)g(of)g Fj(libbzip2)p Fl('s)e(in)m(terfaces)j
-(is)e(similar)f(to)j(that)g(of)g(Jean-loup)e(Gailly's)g(and)h(Mark)150
-1802 y(Adler's)29 b(excellen)m(t)i Fj(zlib)e Fl(library)-8
-b(.)150 1959 y(All)29 b(externally)g(visible)f(sym)m(b)s(ols)h(ha)m(v)m
-(e)i(names)f(b)s(eginning)e Fj(BZ2_)p Fl(.)39 b(This)29
-b(is)g(new)h(in)f(v)m(ersion)h(1.0.)41 b(The)150 2068
-y(in)m(ten)m(tion)30 b(is)f(to)i(minimise)d(p)s(ollution)f(of)k(the)f
-(namespaces)h(of)g(library)d(clien)m(ts.)150 2321 y Ff(3.1.1)63
-b(Lo)m(w-lev)m(el)39 b(summary)150 2514 y Fl(This)21
-b(in)m(terface)h(pro)m(vides)g(services)g(for)g(compressing)f(and)h
-(decompressing)f(data)i(in)e(memory)-8 b(.)38 b(There's)150
-2623 y(no)43 b(pro)m(vision)e(for)h(dealing)g(with)f(\014les,)k
-(streams)e(or)g(an)m(y)g(other)g(I/O)g(mec)m(hanisms,)i(just)e(straigh)
-m(t)150 2733 y(memory-to-memory)25 b(w)m(ork.)38 b(In)23
-b(fact,)k(this)22 b(part)i(of)f(the)h(library)d(can)j(b)s(e)f(compiled)
-f(without)h(inclusion)150 2843 y(of)31 b Fj(stdio.h)p
-Fl(,)d(whic)m(h)h(ma)m(y)i(b)s(e)f(helpful)d(for)k(em)m(b)s(edded)e
-(applications.)150 2999 y(The)h(lo)m(w-lev)m(el)g(part)g(of)h(the)f
-(library)e(has)i(no)h(global)e(v)-5 b(ariables)29 b(and)h(is)g
-(therefore)g(thread-safe.)150 3156 y(Six)d(routines)g(mak)m(e)j(up)d
-(the)i(lo)m(w)f(lev)m(el)g(in)m(terface:)41 b Fj(BZ2_bzCompressInit)p
-Fl(,)24 b Fj(BZ2_bzCompress)p Fl(,)h(and)150 3266 y Fj
-(BZ2_bzCompressEnd)h Fl(for)k(compression,)f(and)h(a)h(corresp)s
-(onding)d(trio)i Fj(BZ2_bzDecompressInit)p Fl(,)150 3375
-y Fj(BZ2_bzDecompress)37 b Fl(and)j Fj(BZ2_bzDecompressEnd)c
-Fl(for)42 b(decompression.)72 b(The)41 b Fj(*Init)e Fl(functions)150
-3485 y(allo)s(cate)44 b(memory)g(for)f(compression/decompression)f(and)
-h(do)h(other)g(initialisations,)f(whilst)f(the)150 3595
-y Fj(*End)29 b Fl(functions)g(close)i(do)m(wn)f(op)s(erations)f(and)h
-(release)h(memory)-8 b(.)150 3751 y(The)36 b(real)f(w)m(ork)i(is)e
-(done)h(b)m(y)g Fj(BZ2_bzCompress)c Fl(and)j Fj(BZ2_bzDecompress)p
-Fl(.)54 b(These)36 b(compress)g(and)150 3861 y(decompress)30
-b(data)h(from)f(a)h(user-supplied)c(input)i(bu\013er)g(to)i(a)g
-(user-supplied)c(output)j(bu\013er.)40 b(These)150 3971
-y(bu\013ers)32 b(can)i(b)s(e)e(an)m(y)i(size;)g(arbitrary)e(quan)m
-(tities)h(of)g(data)h(are)g(handled)d(b)m(y)i(making)f(rep)s(eated)i
-(calls)150 4080 y(to)f(these)f(functions.)44 b(This)30
-b(is)h(a)h(\015exible)e(mec)m(hanism)i(allo)m(wing)e(a)i(consumer-pull)
-e(st)m(yle)i(of)g(activit)m(y)-8 b(,)150 4190 y(or)30
-b(pro)s(ducer-push,)e(or)i(a)h(mixture)e(of)i(b)s(oth.)150
-4443 y Ff(3.1.2)63 b(High-lev)m(el)41 b(summary)150 4635
-y Fl(This)d(in)m(terface)j(pro)m(vides)e(some)h(handy)f(wrapp)s(ers)f
-(around)h(the)i(lo)m(w-lev)m(el)f(in)m(terface)g(to)h(facilitate)150
-4745 y(reading)26 b(and)g(writing)f Fj(bzip2)g Fl(format)i(\014les)f
-(\()p Fj(.bz2)g Fl(\014les\).)38 b(The)27 b(routines)e(pro)m(vide)h(ho)
-s(oks)h(to)g(facilitate)150 4854 y(reading)43 b(\014les)f(in)h(whic)m
-(h)f(the)i Fj(bzip2)f Fl(data)h(stream)g(is)f(em)m(b)s(edded)f(within)g
-(some)i(larger-scale)g(\014le)150 4964 y(structure,)30
-b(or)h(where)e(there)i(are)g(m)m(ultiple)d Fj(bzip2)h
-Fl(data)i(streams)f(concatenated)j(end-to-end.)150 5121
-y(F)-8 b(or)31 b(reading)f(\014les,)f Fj(BZ2_bzReadOpen)p
-Fl(,)e Fj(BZ2_bzRead)p Fl(,)h Fj(BZ2_bzReadClose)e Fl(and)150
-5230 y Fj(BZ2_bzReadGetUnused)19 b Fl(are)25 b(supplied.)36
-b(F)-8 b(or)25 b(writing)d(\014les,)j Fj(BZ2_bzWriteOpen)p
-Fl(,)d Fj(BZ2_bzWrite)g Fl(and)150 5340 y Fj(BZ2_bzWriteFinish)k
-Fl(are)k(a)m(v)-5 b(ailable.)p eop
+9 9 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
+b(to)g(use)f Fi(bzip2)2375 b Fl(9)390 299 y Fj(The)22
+b(ideas)h(em)m(b)s(o)s(died)f(in)g Fi(bzip2)f Fj(are)i(due)e(to)j(\(at)
+f(least\))h(the)f(follo)m(wing)g(p)s(eople:)37 b(Mic)m(hael)390
+403 y(Burro)m(ws)45 b(and)g(Da)m(vid)h(Wheeler)g(\(for)g(the)g(blo)s(c)
+m(k)h(sorting)f(transformation\),)51 b(Da)m(vid)390 506
+y(Wheeler)42 b(\(again,)j(for)c(the)h(Hu\013man)e(co)s(der\),)45
+b(P)m(eter)e(F)-8 b(en)m(wic)m(k)43 b(\(for)e(the)h(structured)390
+610 y(co)s(ding)34 b(mo)s(del)h(in)f(the)g(original)i
+Fi(bzip)p Fj(,)e(and)g(man)m(y)g(re\014nemen)m(ts\),)i(and)e(Alistair)h
+(Mof-)390 714 y(fat,)45 b(Radford)d(Neal)g(and)f(Ian)h(Witten)h(\(for)f
+(the)h(arithmetic)g(co)s(der)f(in)g(the)g(original)390
+818 y Fi(bzip)p Fj(\).)d(I)26 b(am)h(m)m(uc)m(h)g(indebted)f(for)h
+(their)g(help,)g(supp)s(ort)e(and)h(advice.)40 b(See)27
+b(the)g(man)m(ual)390 922 y(in)k(the)h(source)f(distribution)h(for)f(p)
+s(oin)m(ters)h(to)g(sources)f(of)h(do)s(cumen)m(tation.)44
+b(Christian)390 1025 y(v)m(on)27 b(Ro)s(ques)f(encouraged)g(me)h(to)g
+(lo)s(ok)g(for)f(faster)h(sorting)g(algorithms,)h(so)e(as)h(to)g(sp)s
+(eed)390 1129 y(up)32 b(compression.)50 b(Bela)34 b(Lubkin)d
+(encouraged)j(me)g(to)g(impro)m(v)m(e)g(the)g(w)m(orst-case)h(com-)390
+1233 y(pression)e(p)s(erformance.)51 b(The)34 b Fi(bz*)f
+Fj(scripts)h(are)g(deriv)m(ed)g(from)g(those)g(of)g(GNU)h
+Fi(gzip)p Fj(.)390 1337 y(Man)m(y)40 b(p)s(eople)f(sen)m(t)h(patc)m
+(hes,)i(help)s(ed)c(with)h(p)s(ortabilit)m(y)i(problems,)g(len)m(t)f
+(mac)m(hines,)390 1440 y(ga)m(v)m(e)32 b(advice)f(and)f(w)m(ere)h
+(generally)h(helpful.)p eop
 %%Page: 10 11
 10 10 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(10)150 299 y(As)24 b(with)f(the)h(lo)m
-(w-lev)m(el)h(library)-8 b(,)23 b(no)h(global)g(v)-5
-b(ariables)23 b(are)h(used)g(so)g(the)h(library)c(is)j(p)s(er)f(se)h
-(thread-safe.)150 408 y(Ho)m(w)m(ev)m(er,)32 b(if)c(I/O)h(errors)g(o)s
-(ccur)g(whilst)e(reading)i(or)g(writing)e(the)j(underlying)c
-(compressed)j(\014les,)g(y)m(ou)150 518 y(ma)m(y)j(ha)m(v)m(e)g(to)g
-(consult)e Fj(errno)g Fl(to)h(determine)g(the)g(cause)g(of)h(the)f
-(error.)42 b(In)30 b(that)i(case,)h(y)m(ou'd)e(need)g(a)150
-628 y(C)f(library)e(whic)m(h)h(correctly)i(supp)s(orts)d
-Fj(errno)h Fl(in)g(a)i(m)m(ultithreaded)e(en)m(vironmen)m(t.)150
-784 y(T)-8 b(o)56 b(mak)m(e)g(the)g(library)d(a)j(little)e(simpler)f
-(and)i(more)h(p)s(ortable,)61 b Fj(BZ2_bzReadOpen)51
-b Fl(and)k Fj(BZ2_)150 894 y(bzWriteOpen)34 b Fl(require)j(y)m(ou)g(to)
-i(pass)e(them)g(\014le)g(handles)f(\()p Fj(FILE*)p Fl(s\))g(whic)m(h)h
-(ha)m(v)m(e)h(previously)e(b)s(een)150 1004 y(op)s(ened)41
-b(for)g(reading)f(or)h(writing)f(resp)s(ectiv)m(ely)-8
-b(.)73 b(That)41 b(a)m(v)m(oids)h(p)s(ortabilit)m(y)d(problems)g(asso)s
-(ciated)150 1113 y(with)j(\014le)h(op)s(erations)g(and)g(\014le)g
-(attributes,)j(whilst)c(not)i(b)s(eing)e(m)m(uc)m(h)h(of)h(an)g(imp)s
-(osition)c(on)k(the)150 1223 y(programmer.)150 1474 y
-Ff(3.1.3)63 b(Utilit)m(y)40 b(functions)h(summary)150
-1666 y Fl(F)-8 b(or)45 b(v)m(ery)g(simple)d(needs,)48
-b Fj(BZ2_bzBuffToBuffCompres)o(s)38 b Fl(and)44 b Fj
-(BZ2_bzBuffToBuffDecompres)o(s)150 1776 y Fl(are)29 b(pro)m(vided.)38
-b(These)28 b(compress)g(data)h(in)e(memory)h(from)g(one)h(bu\013er)e
-(to)i(another)f(bu\013er)g(in)f(a)h(single)150 1885 y(function)38
-b(call.)67 b(Y)-8 b(ou)40 b(should)d(assess)j(whether)f(these)h
-(functions)d(ful\014ll)f(y)m(our)k(memory-to-memory)150
-1995 y(compression/decompression)26 b(requiremen)m(ts)h(b)s(efore)g(in)
-m(v)m(esting)g(e\013ort)i(in)d(understanding)f(the)j(more)150
-2105 y(general)i(but)g(more)h(complex)f(lo)m(w-lev)m(el)g(in)m
-(terface.)150 2261 y(Y)-8 b(oshiok)j(a)47 b(Tsuneo)e(\()p
-Fj(QWF00133@niftyserve.or.jp)40 b Fl(/)46 b Fj
-(tsuneo-y@is.aist-nara.ac.)o(jp)p Fl(\))40 b(has)150
-2371 y(con)m(tributed)f(some)h(functions)e(to)j(giv)m(e)f(b)s(etter)g
-Fj(zlib)f Fl(compatibilit)m(y)-8 b(.)67 b(These)40 b(functions)e(are)i
-Fj(BZ2_)150 2481 y(bzopen)p Fl(,)e Fj(BZ2_bzread)p Fl(,)f
-Fj(BZ2_bzwrite)p Fl(,)g Fj(BZ2_bzflush)p Fl(,)g Fj(BZ2_bzclose)p
-Fl(,)f Fj(BZ2_bzerror)f Fl(and)i Fj(BZ2_)150 2590 y(bzlibVersion)p
-Fl(.)49 b(Y)-8 b(ou)35 b(ma)m(y)g(\014nd)e(these)i(functions)d(more)j
-(con)m(v)m(enien)m(t)g(for)f(simple)f(\014le)g(reading)h(and)150
-2700 y(writing,)c(than)h(those)h(in)e(the)i(high-lev)m(el)e(in)m
-(terface.)45 b(These)31 b(functions)f(are)i(not)g(\(y)m(et\))h
-(o\016cially)d(part)150 2809 y(of)k(the)g(library)-8
-b(,)33 b(and)g(are)h(minimally)c(do)s(cumen)m(ted)k(here.)51
-b(If)33 b(they)h(break,)h(y)m(ou)f(get)h(to)g(k)m(eep)f(all)f(the)150
-2919 y(pieces.)40 b(I)31 b(hop)s(e)e(to)i(do)s(cumen)m(t)g(them)f(prop)
-s(erly)e(when)h(time)i(p)s(ermits.)150 3076 y(Y)-8 b(oshiok)j(a)27
-b(also)g(con)m(tributed)f(mo)s(di\014cations)f(to)i(allo)m(w)f(the)h
-(library)e(to)i(b)s(e)f(built)f(as)i(a)g(Windo)m(ws)f(DLL.)150
-3362 y Fk(3.2)68 b(Error)45 b(handling)150 3554 y Fl(The)23
-b(library)f(is)h(designed)g(to)i(reco)m(v)m(er)g(cleanly)f(in)e(all)h
-(situations,)h(including)d(the)j(w)m(orst-case)i(situation)150
-3664 y(of)j(decompressing)e(random)g(data.)41 b(I'm)28
-b(not)h(100\045)g(sure)f(that)h(it)f(can)h(alw)m(a)m(ys)g(do)f(this,)g
-(so)g(y)m(ou)h(migh)m(t)150 3774 y(w)m(an)m(t)i(to)g(add)e(a)i(signal)d
-(handler)g(to)j(catc)m(h)h(segmen)m(tation)f(violations)e(during)f
-(decompression)h(if)g(y)m(ou)150 3883 y(are)g(feeling)f(esp)s(ecially)f
-(paranoid.)39 b(I)28 b(w)m(ould)g(b)s(e)g(in)m(terested)h(in)e(hearing)
-h(more)h(ab)s(out)f(the)h(robustness)150 3993 y(of)i(the)f(library)e
-(to)j(corrupted)f(compressed)g(data.)150 4150 y(V)-8
-b(ersion)39 b(1.0)h(is)f(m)m(uc)m(h)g(more)h(robust)e(in)g(this)g(resp)
-s(ect)i(than)f(0.9.0)i(or)e(0.9.5.)70 b(In)m(v)m(estigations)39
-b(with)150 4259 y(Chec)m(k)m(er)21 b(\(a)g(to)s(ol)g(for)f(detecting)h
-(problems)d(with)h(memory)h(managemen)m(t,)k(similar)18
-b(to)j(Purify\))e(indicate)150 4369 y(that,)40 b(at)e(least)f(for)g
-(the)h(few)e(\014les)h(I)g(tested,)j(all)c(single-bit)f(errors)i(in)e
-(the)j(decompressed)f(data)h(are)150 4478 y(caugh)m(t)c(prop)s(erly)-8
-b(,)31 b(with)g(no)i(segmen)m(tation)h(faults,)e(no)g(reads)h(of)g
-(uninitialised)27 b(data)34 b(and)e(no)g(out)h(of)150
-4588 y(range)f(reads)g(or)f(writes.)44 b(So)32 b(it's)f(certainly)g(m)m
-(uc)m(h)h(impro)m(v)m(ed,)g(although)f(I)g(w)m(ouldn't)g(claim)g(it)g
-(to)i(b)s(e)150 4698 y(totally)d(b)s(om)m(bpro)s(of.)150
-4854 y(The)25 b(\014le)g Fj(bzlib.h)f Fl(con)m(tains)i(all)f
-(de\014nitions)e(needed)i(to)i(use)e(the)h(library)-8
-b(.)37 b(In)26 b(particular,)f(y)m(ou)h(should)150 4964
-y(de\014nitely)i(not)j(include)d Fj(bzlib_private.h)p
-Fl(.)150 5121 y(In)39 b Fj(bzlib.h)p Fl(,)h(the)g(v)-5
-b(arious)39 b(return)f(v)-5 b(alues)39 b(are)h(de\014ned.)68
-b(The)39 b(follo)m(wing)f(list)h(is)f(not)i(in)m(tended)f(as)150
-5230 y(an)c(exhaustiv)m(e)h(description)d(of)i(the)h(circumstances)f
-(in)f(whic)m(h)g(a)i(giv)m(en)f(v)-5 b(alue)35 b(ma)m(y)h(b)s(e)e
-(returned)h({)150 5340 y(those)h(descriptions)d(are)j(giv)m(en)f
-(later.)56 b(Rather,)37 b(it)d(is)h(in)m(tended)f(to)i(con)m(v)m(ey)h
-(the)e(rough)g(meaning)g(of)p eop
+b(with)g Fi(libbzip2)1881 b Fl(10)150 299 y Fg(3)80 b(Programming)53
+b(with)h Ff(libbzip2)150 568 y Fj(This)30 b(c)m(hapter)h(describ)s(es)f
+(the)h(programming)f(in)m(terface)i(to)g Fi(libbzip2)p
+Fj(.)150 725 y(F)-8 b(or)33 b(general)g(bac)m(kground)f(information,)h
+(particularly)f(ab)s(out)g(memory)g(use)g(and)f(p)s(erformance)h(as-)
+150 834 y(p)s(ects,)f(y)m(ou'd)f(b)s(e)g(w)m(ell)h(advised)f(to)i(read)
+e(Chapter)g(2)h(as)f(w)m(ell.)150 1124 y Fk(3.1)68 b(T)-11
+b(op-lev)l(el)46 b(structure)150 1316 y Fi(libbzip2)32
+b Fj(is)i(a)g(\015exible)h(library)f(for)g(compressing)g(and)g
+(decompressing)g(data)h(in)e(the)i Fi(bzip2)e Fj(data)150
+1426 y(format.)38 b(Although)22 b(pac)m(k)-5 b(aged)24
+b(as)e(a)g(single)h(en)m(tit)m(y)-8 b(,)26 b(it)d(helps)f(to)h(regard)f
+(the)h(library)f(as)g(three)h(separate)150 1535 y(parts:)41
+b(the)30 b(lo)m(w)h(lev)m(el)i(in)m(terface,)f(and)d(the)i(high)f(lev)m
+(el)i(in)m(terface,)h(and)c(some)i(utilit)m(y)h(functions.)150
+1692 y(The)37 b(structure)g(of)g Fi(libbzip2)p Fj('s)e(in)m(terfaces)j
+(is)f(similar)g(to)h(that)f(of)g(Jean-loup)g(Gailly's)i(and)d(Mark)150
+1802 y(Adler's)30 b(excellen)m(t)j Fi(zlib)c Fj(library)-8
+b(.)150 1959 y(All)29 b(externally)h(visible)g(sym)m(b)s(ols)e(ha)m(v)m
+(e)i(names)f(b)s(eginning)f Fi(BZ2_)p Fj(.)39 b(This)29
+b(is)g(new)f(in)h(v)m(ersion)h(1.0.)41 b(The)150 2068
+y(in)m(ten)m(tion)32 b(is)f(to)g(minimise)f(p)s(ollution)h(of)f(the)h
+(namespaces)f(of)h(library)f(clien)m(ts.)150 2321 y Fe(3.1.1)63
+b(Lo)m(w-lev)m(el)39 b(summary)150 2514 y Fj(This)52
+b(in)m(terface)i(pro)m(vides)e(services)h(for)f(compressing)g(and)g
+(decompressing)g(data)g(in)g(memory)-8 b(.)150 2623 y(There's)42
+b(no)g(pro)m(vision)g(for)g(dealing)g(with)f(\014les,)k(streams)d(or)g
+(an)m(y)g(other)g(I/O)h(mec)m(hanisms,)h(just)150 2733
+y(straigh)m(t)51 b(memory-to-memory)g(w)m(ork.)98 b(In)48
+b(fact,)55 b(this)49 b(part)h(of)f(the)h(library)f(can)g(b)s(e)f
+(compiled)150 2843 y(without)31 b(inclusion)f(of)g Fi(stdio.h)p
+Fj(,)f(whic)m(h)h(ma)m(y)h(b)s(e)f(helpful)f(for)i(em)m(b)s(edded)e
+(applications.)150 2999 y(The)h(lo)m(w-lev)m(el)k(part)c(of)h(the)f
+(library)g(has)g(no)h(global)g(v)-5 b(ariables)31 b(and)e(is)i
+(therefore)g(thread-safe.)150 3156 y(Six)26 b(routines)h(mak)m(e)h(up)e
+(the)h(lo)m(w)g(lev)m(el)i(in)m(terface:)41 b Fi(BZ2_bzCompressInit)p
+Fj(,)22 b Fi(BZ2_bzCompress)p Fj(,)i(and)150 3266 y Fi
+(BZ2_bzCompressEnd)i Fj(for)k(compression,)h(and)f(a)g(corresp)s
+(onding)g(trio)h Fi(BZ2_bzDecompressInit)p Fj(,)150 3375
+y Fi(BZ2_bzDecompress)36 b Fj(and)j Fi(BZ2_bzDecompressEnd)c
+Fj(for)41 b(decompression.)70 b(The)40 b Fi(*Init)f Fj(functions)150
+3485 y(allo)s(cate)k(memory)e(for)g(compression/decompression)h(and)e
+(do)h(other)h(initialisations,)k(whilst)41 b(the)150
+3595 y Fi(*End)29 b Fj(functions)h(close)i(do)m(wn)e(op)s(erations)h
+(and)e(release)j(memory)-8 b(.)150 3751 y(The)35 b(real)h(w)m(ork)f(is)
+g(done)g(b)m(y)g Fi(BZ2_bzCompress)d Fj(and)i Fi(BZ2_bzDecompress)p
+Fj(.)50 b(These)36 b(compress)f(and)150 3861 y(decompress)28
+b(data)g(from)f(a)h(user-supplied)e(input)h(bu\013er)g(to)h(a)g
+(user-supplied)e(output)i(bu\013er.)39 b(These)150 3971
+y(bu\013ers)31 b(can)g(b)s(e)g(an)m(y)h(size;)h(arbitrary)f(quan)m
+(tities)h(of)f(data)g(are)g(handled)e(b)m(y)i(making)f(rep)s(eated)h
+(calls)150 4080 y(to)g(these)g(functions.)43 b(This)31
+b(is)g(a)h(\015exible)f(mec)m(hanism)h(allo)m(wing)g(a)g(consumer-pull)
+f(st)m(yle)h(of)g(activit)m(y)-8 b(,)150 4190 y(or)31
+b(pro)s(ducer-push,)d(or)j(a)f(mixture)h(of)f(b)s(oth.)150
+4443 y Fe(3.1.2)63 b(High-lev)m(el)41 b(summary)150 4635
+y Fj(This)c(in)m(terface)i(pro)m(vides)e(some)h(handy)e(wrapp)s(ers)f
+(around)i(the)g(lo)m(w-lev)m(el)j(in)m(terface)f(to)f(facilitate)150
+4745 y(reading)25 b(and)f(writing)h Fi(bzip2)f Fj(format)h(\014les)g
+(\()p Fi(.bz2)f Fj(\014les\).)39 b(The)25 b(routines)h(pro)m(vide)f(ho)
+s(oks)g(to)g(facilitate)150 4854 y(reading)42 b(\014les)f(in)g(whic)m
+(h)h(the)g Fi(bzip2)e Fj(data)i(stream)g(is)f(em)m(b)s(edded)g(within)g
+(some)h(larger-scale)i(\014le)150 4964 y(structure,)31
+b(or)g(where)f(there)h(are)g(m)m(ultiple)g Fi(bzip2)e
+Fj(data)h(streams)h(concatenated)i(end-to-end.)150 5121
+y(F)-8 b(or)31 b(reading)g(\014les,)f Fi(BZ2_bzReadOpen)p
+Fj(,)d Fi(BZ2_bzRead)p Fj(,)h Fi(BZ2_bzReadClose)e Fj(and)150
+5230 y Fi(BZ2_bzReadGetUnused)18 b Fj(are)23 b(supplied.)37
+b(F)-8 b(or)24 b(writing)f(\014les,)i Fi(BZ2_bzWriteOpen)p
+Fj(,)20 b Fi(BZ2_bzWrite)g Fj(and)150 5340 y Fi(BZ2_bzWriteFinish)26
+b Fj(are)k(a)m(v)-5 b(ailable.)p eop
 %%Page: 11 12
 11 11 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(11)150 299 y(eac)m(h)38
-b(return)d(v)-5 b(alue.)59 b(The)36 b(\014rst)g(\014v)m(e)g(actions)h
-(are)g(normal)f(and)f(not)i(in)m(tended)f(to)h(denote)g(an)f(error)150
-408 y(situation.)150 592 y Fj(BZ_OK)180 b Fl(The)30 b(requested)g
-(action)h(w)m(as)g(completed)f(successfully)-8 b(.)150
-756 y Fj(BZ_RUN_OK)150 866 y(BZ_FLUSH_OK)150 975 y(BZ_FINISH_OK)630
-1085 y Fl(In)24 b Fj(BZ2_bzCompress)p Fl(,)e(the)i(requested)g
-(\015ush/\014nish/nothing-sp)s(ecial)c(action)k(w)m(as)h(com-)630
-1194 y(pleted)30 b(successfully)-8 b(.)150 1358 y Fj(BZ_STREAM_END)630
-1468 y Fl(Compression)38 b(of)j(data)f(w)m(as)h(completed,)h(or)f(the)f
-(logical)f(stream)i(end)e(w)m(as)i(detected)630 1577
-y(during)28 b(decompression.)150 1761 y(The)i(follo)m(wing)f(return)g
-(v)-5 b(alues)30 b(indicate)f(an)h(error)g(of)h(some)g(kind.)150
-1945 y Fj(BZ_CONFIG_ERROR)630 2055 y Fl(Indicates)48
-b(that)h(the)g(library)e(has)h(b)s(een)g(improp)s(erly)d(compiled)j(on)
-g(y)m(our)h(platform)630 2164 y({)j(a)g(ma)5 b(jor)51
-b(con\014guration)g(error.)104 b(Sp)s(eci\014cally)-8
-b(,)55 b(it)c(means)g(that)h Fj(sizeof\(char\))p Fl(,)630
-2274 y Fj(sizeof\(short\))44 b Fl(and)i Fj(sizeof\(int\))f
-Fl(are)j(not)f(1,)52 b(2)c(and)f(4)h(resp)s(ectiv)m(ely)-8
-b(,)51 b(as)d(they)630 2384 y(should)27 b(b)s(e.)40 b(Note)30
-b(that)g(the)f(library)e(should)g(still)g(w)m(ork)i(prop)s(erly)e(on)i
-(64-bit)g(platforms)630 2493 y(whic)m(h)d(follo)m(w)h(the)g(LP64)h
-(programming)e(mo)s(del)h({)g(that)h(is,)g(where)e Fj(sizeof\(long\))f
-Fl(and)630 2603 y Fj(sizeof\(void*\))e Fl(are)k(8.)40
-b(Under)25 b(LP64,)j Fj(sizeof\(int\))c Fl(is)h(still)f(4,)k(so)f
-Fj(libbzip2)p Fl(,)e(whic)m(h)630 2712 y(do)s(esn't)30
-b(use)g(the)h Fj(long)e Fl(t)m(yp)s(e,)i(is)e(OK.)150
-2876 y Fj(BZ_SEQUENCE_ERROR)630 2986 y Fl(When)43 b(using)f(the)i
-(library)-8 b(,)45 b(it)e(is)f(imp)s(ortan)m(t)h(to)h(call)e(the)i
-(functions)e(in)g(the)i(correct)630 3095 y(sequence)28
-b(and)f(with)f(data)j(structures)e(\(bu\013ers)f(etc\))j(in)e(the)g
-(correct)i(states.)41 b Fj(libbzip2)630 3205 y Fl(c)m(hec)m(ks)26
-b(as)e(m)m(uc)m(h)h(as)f(it)g(can)g(to)h(ensure)f(this)f(is)g(happ)s
-(ening,)h(and)f(returns)g Fj(BZ_SEQUENCE_)630 3314 y(ERROR)36
-b Fl(if)h(not.)62 b(Co)s(de)37 b(whic)m(h)g(complies)f(precisely)g
-(with)h(the)g(function)g(seman)m(tics,)j(as)630 3424
-y(detailed)d(b)s(elo)m(w,)i(should)d(nev)m(er)i(receiv)m(e)h(this)d(v)
--5 b(alue;)41 b(suc)m(h)d(an)g(ev)m(en)m(t)h(denotes)f(buggy)630
-3534 y(co)s(de)31 b(whic)m(h)e(y)m(ou)h(should)f(in)m(v)m(estigate.)150
-3697 y Fj(BZ_PARAM_ERROR)630 3807 y Fl(Returned)43 b(when)f(a)i
-(parameter)g(to)h(a)f(function)e(call)h(is)f(out)i(of)g(range)g(or)g
-(otherwise)630 3917 y(manifestly)34 b(incorrect.)57 b(As)36
-b(with)e Fj(BZ_SEQUENCE_ERROR)p Fl(,)f(this)i(denotes)h(a)g(bug)f(in)g
-(the)630 4026 y(clien)m(t)23 b(co)s(de.)39 b(The)22 b(distinction)f(b)s
-(et)m(w)m(een)j Fj(BZ_PARAM_ERROR)c Fl(and)j Fj(BZ_SEQUENCE_ERROR)630
-4136 y Fl(is)29 b(a)i(bit)f(hazy)-8 b(,)31 b(but)f(still)e(w)m(orth)i
-(making.)150 4300 y Fj(BZ_MEM_ERROR)630 4409 y Fl(Returned)g(when)f(a)i
-(request)f(to)i(allo)s(cate)f(memory)f(failed.)40 b(Note)31
-b(that)g(the)g(quan)m(tit)m(y)g(of)630 4519 y(memory)21
-b(needed)g(to)i(decompress)e(a)g(stream)h(cannot)g(b)s(e)f(determined)f
-(un)m(til)g(the)h(stream's)630 4628 y(header)29 b(has)g(b)s(een)g
-(read.)40 b(So)29 b Fj(BZ2_bzDecompress)c Fl(and)j Fj(BZ2_bzRead)f
-Fl(ma)m(y)j(return)e Fj(BZ_)630 4738 y(MEM_ERROR)d Fl(ev)m(en)k(though)
-e(some)h(of)g(the)g(compressed)g(data)g(has)g(b)s(een)f(read.)39
-b(The)28 b(same)630 4847 y(is)38 b(not)i(true)f(for)g(compression;)k
-(once)d Fj(BZ2_bzCompressInit)34 b Fl(or)39 b Fj(BZ2_bzWriteOpen)630
-4957 y Fl(ha)m(v)m(e)32 b(successfully)c(completed,)j
-Fj(BZ_MEM_ERROR)c Fl(cannot)k(o)s(ccur.)150 5121 y Fj(BZ_DATA_ERROR)630
-5230 y Fl(Returned)h(when)g(a)h(data)g(in)m(tegrit)m(y)g(error)g(is)e
-(detected)k(during)30 b(decompression.)47 b(Most)630
-5340 y(imp)s(ortan)m(tly)-8 b(,)31 b(this)f(means)i(when)f(stored)g
-(and)g(computed)h(CR)m(Cs)f(for)g(the)h(data)g(do)g(not)p
-eop
+b(with)g Fi(libbzip2)1881 b Fl(11)150 299 y Fj(As)32
+b(with)h(the)g(lo)m(w-lev)m(el)j(library)-8 b(,)33 b(no)g(global)h(v)-5
+b(ariables)33 b(are)g(used)f(so)h(the)g(library)g(is)g(p)s(er)f(se)h
+(thread-)150 408 y(safe.)62 b(Ho)m(w)m(ev)m(er,)41 b(if)c(I/O)h(errors)
+g(o)s(ccur)f(whilst)g(reading)h(or)f(writing)h(the)f(underlying)g
+(compressed)150 518 y(\014les,)j(y)m(ou)e(ma)m(y)h(ha)m(v)m(e)f(to)h
+(consult)g Fi(errno)d Fj(to)j(determine)f(the)h(cause)f(of)g(the)g
+(error.)64 b(In)37 b(that)i(case,)150 628 y(y)m(ou'd)30
+b(need)h(a)f(C)g(library)g(whic)m(h)g(correctly)j(supp)s(orts)c
+Fi(errno)g Fj(in)h(a)g(m)m(ultithreaded)h(en)m(vironmen)m(t.)150
+784 y(T)-8 b(o)77 b(mak)m(e)f(the)g(library)g(a)f(little)j(simpler)e
+(and)e(more)j(p)s(ortable,)87 b Fi(BZ2_bzReadOpen)72
+b Fj(and)150 894 y Fi(BZ2_bzWriteOpen)34 b Fj(require)39
+b(y)m(ou)g(to)g(pass)f(them)h(\014le)f(handles)g(\()p
+Fi(FILE*)p Fj(s\))f(whic)m(h)h(ha)m(v)m(e)i(previously)150
+1004 y(b)s(een)56 b(op)s(ened)g(for)h(reading)f(or)h(writing)g(resp)s
+(ectiv)m(ely)-8 b(.)122 b(That)57 b(a)m(v)m(oids)h(p)s(ortabilit)m(y)f
+(problems)150 1113 y(asso)s(ciated)33 b(with)g(\014le)f(op)s(erations)h
+(and)e(\014le)i(attributes,)h(whilst)e(not)h(b)s(eing)f(m)m(uc)m(h)g
+(of)h(an)f(imp)s(osition)150 1223 y(on)e(the)h(programmer.)150
+1474 y Fe(3.1.3)63 b(Utilit)m(y)40 b(functions)h(summary)150
+1666 y Fj(F)-8 b(or)43 b(v)m(ery)h(simple)e(needs,)k
+Fi(BZ2_bzBuffToBuffCompres)o(s)36 b Fj(and)42 b Fi
+(BZ2_bzBuffToBuffDecompres)o(s)150 1776 y Fj(are)26 b(pro)m(vided.)39
+b(These)26 b(compress)f(data)h(in)f(memory)h(from)f(one)h(bu\013er)f
+(to)h(another)g(bu\013er)f(in)g(a)g(single)150 1885 y(function)37
+b(call.)62 b(Y)-8 b(ou)38 b(should)e(assess)h(whether)g(these)h
+(functions)f(ful\014ll)f(y)m(our)i(memory-to-memory)150
+1995 y(compression/decompression)22 b(requiremen)m(ts)g(b)s(efore)f(in)
+m(v)m(esting)i(e\013ort)f(in)f(understanding)f(the)h(more)150
+2105 y(general)31 b(but)f(more)h(complex)g(lo)m(w-lev)m(el)i(in)m
+(terface.)150 2261 y(Y)-8 b(oshiok)j(a)47 b(Tsuneo)g(\()p
+Fi(QWF00133@niftyserve.or.jp)40 b Fj(/)47 b Fi
+(tsuneo-y@is.aist-nara.ac)o(.jp)p Fj(\))40 b(has)150
+2371 y(con)m(tributed)f(some)f(functions)g(to)h(giv)m(e)h(b)s(etter)e
+Fi(zlib)f Fj(compatibilit)m(y)-8 b(.)67 b(These)38 b(functions)g(are)g
+Fi(BZ2_)150 2481 y(bzopen)p Fj(,)g Fi(BZ2_bzread)p Fj(,)f
+Fi(BZ2_bzwrite)p Fj(,)g Fi(BZ2_bzflush)p Fj(,)g Fi(BZ2_bzclose)p
+Fj(,)g Fi(BZ2_bzerror)e Fj(and)i Fi(BZ2_)150 2590 y(bzlibVersion)p
+Fj(.)44 b(Y)-8 b(ou)33 b(ma)m(y)g(\014nd)e(these)i(functions)g(more)g
+(con)m(v)m(enien)m(t)i(for)e(simple)f(\014le)h(reading)g(and)150
+2700 y(writing,)d(than)g(those)g(in)f(the)h(high-lev)m(el)i(in)m
+(terface.)42 b(These)30 b(functions)f(are)h(not)g(\(y)m(et\))i
+(o\016cially)f(part)150 2809 y(of)h(the)g(library)-8
+b(,)33 b(and)e(are)h(minimally)g(do)s(cumen)m(ted)g(here.)45
+b(If)31 b(they)h(break,)h(y)m(ou)f(get)h(to)g(k)m(eep)f(all)h(the)150
+2919 y(pieces.)42 b(I)30 b(hop)s(e)g(to)h(do)s(cumen)m(t)f(them)h(prop)
+s(erly)e(when)h(time)h(p)s(ermits.)150 3076 y(Y)-8 b(oshiok)j(a)27
+b(also)g(con)m(tributed)g(mo)s(di\014cations)g(to)g(allo)m(w)h(the)e
+(library)h(to)g(b)s(e)f(built)g(as)g(a)h(Windo)m(ws)f(DLL.)150
+3362 y Fk(3.2)68 b(Error)45 b(handling)150 3554 y Fj(The)22
+b(library)g(is)g(designed)g(to)i(reco)m(v)m(er)g(cleanly)f(in)f(all)h
+(situations,)i(including)c(the)i(w)m(orst-case)h(situation)150
+3664 y(of)k(decompressing)g(random)f(data.)40 b(I'm)27
+b(not)h(100\045)h(sure)e(that)i(it)f(can)g(alw)m(a)m(ys)g(do)g(this,)g
+(so)g(y)m(ou)g(migh)m(t)150 3774 y(w)m(an)m(t)i(to)g(add)e(a)i(signal)f
+(handler)g(to)h(catc)m(h)g(segmen)m(tation)i(violations)f(during)d
+(decompression)h(if)h(y)m(ou)150 3883 y(are)c(feeling)g(esp)s(ecially)g
+(paranoid.)39 b(I)25 b(w)m(ould)g(b)s(e)g(in)m(terested)i(in)e(hearing)
+g(more)h(ab)s(out)f(the)h(robustness)150 3993 y(of)31
+b(the)f(library)h(to)g(corrupted)f(compressed)g(data.)150
+4150 y(V)-8 b(ersion)38 b(1.0)h(is)e(m)m(uc)m(h)h(more)g(robust)f(in)g
+(this)h(resp)s(ect)g(than)f(0.9.0)i(or)f(0.9.5.)64 b(In)m(v)m
+(estigations)40 b(with)150 4259 y(Chec)m(k)m(er)30 b(\(a)f(to)s(ol)h
+(for)f(detecting)h(problems)f(with)f(memory)h(managemen)m(t,)i(similar)
+e(to)h(Purify\))e(indi-)150 4369 y(cate)34 b(that,)g(at)f(least)g(for)g
+(the)g(few)f(\014les)g(I)h(tested,)h(all)f(single-bit)h(errors)e(in)g
+(the)h(decompressed)g(data)150 4478 y(are)28 b(caugh)m(t)h(prop)s(erly)
+-8 b(,)29 b(with)f(no)g(segmen)m(tation)i(faults,)f(no)f(reads)g(of)g
+(uninitialised)g(data)g(and)g(no)g(out)150 4588 y(of)j(range)h(reads)f
+(or)h(writes.)44 b(So)31 b(it's)h(certainly)h(m)m(uc)m(h)e(impro)m(v)m
+(ed,)i(although)e(I)h(w)m(ouldn't)f(claim)h(it)g(to)150
+4698 y(b)s(e)e(totally)i(b)s(om)m(bpro)s(of.)150 4854
+y(The)24 b(\014le)g Fi(bzlib.h)e Fj(con)m(tains)j(all)f(de\014nitions)g
+(needed)g(to)g(use)g(the)g(library)-8 b(.)39 b(In)24
+b(particular,)i(y)m(ou)e(should)150 4964 y(de\014nitely)31
+b(not)f(include)h Fi(bzlib_private.h)p Fj(.)150 5121
+y(In)38 b Fi(bzlib.h)p Fj(,)g(the)g(v)-5 b(arious)38
+b(return)g(v)-5 b(alues)38 b(are)g(de\014ned.)62 b(The)38
+b(follo)m(wing)i(list)f(is)f(not)g(in)m(tended)g(as)150
+5230 y(an)33 b(exhaustiv)m(e)h(description)g(of)g(the)g(circumstances)g
+(in)f(whic)m(h)g(a)h(giv)m(en)g(v)-5 b(alue)34 b(ma)m(y)g(b)s(e)f
+(returned)g({)150 5340 y(those)h(descriptions)f(are)h(giv)m(en)g
+(later.)50 b(Rather,)34 b(it)g(is)f(in)m(tended)g(to)h(con)m(v)m(ey)h
+(the)e(rough)g(meaning)g(of)p eop
 %%Page: 12 13
 12 12 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(12)630 299 y(matc)m(h.)41
-b(This)28 b(v)-5 b(alue)29 b(is)f(also)i(returned)e(up)s(on)g
-(detection)i(of)g(an)m(y)g(other)f(anomaly)h(in)e(the)630
-408 y(compressed)i(data.)150 560 y Fj(BZ_DATA_ERROR_MAGIC)630
-670 y Fl(As)k(a)g(sp)s(ecial)f(case)i(of)f Fj(BZ_DATA_ERROR)p
-Fl(,)d(it)i(is)g(sometimes)h(useful)e(to)j(kno)m(w)f(when)f(the)630
-779 y(compressed)d(stream)h(do)s(es)f(not)g(start)h(with)e(the)i
-(correct)h(magic)e(b)m(ytes)h(\()p Fj('B')f('Z')f('h')p
-Fl(\).)150 931 y Fj(BZ_IO_ERROR)630 1040 y Fl(Returned)k(b)m(y)h
-Fj(BZ2_bzRead)d Fl(and)i Fj(BZ2_bzWrite)e Fl(when)i(there)h(is)f(an)g
-(error)h(reading)f(or)630 1150 y(writing)28 b(in)h(the)h(compressed)g
-(\014le,)f(and)h(b)m(y)g Fj(BZ2_bzReadOpen)c Fl(and)j
-Fj(BZ2_bzWriteOpen)630 1259 y Fl(for)i(attempts)i(to)f(use)f(a)h
-(\014le)e(for)i(whic)m(h)e(the)h(error)g(indicator)g(\(viz,)g
-Fj(ferror\(f\))p Fl(\))f(is)g(set.)630 1369 y(On)h(receipt)g(of)h
-Fj(BZ_IO_ERROR)p Fl(,)e(the)h(caller)h(should)d(consult)i
-Fj(errno)g Fl(and/or)g Fj(perror)f Fl(to)630 1479 y(acquire)g(op)s
-(erating-system)g(sp)s(eci\014c)f(information)g(ab)s(out)h(the)h
-(problem.)150 1630 y Fj(BZ_UNEXPECTED_EOF)630 1740 y
-Fl(Returned)36 b(b)m(y)g Fj(BZ2_bzRead)e Fl(when)i(the)h(compressed)f
-(\014le)g(\014nishes)e(b)s(efore)j(the)f(logical)630
-1849 y(end)30 b(of)g(stream)h(is)e(detected.)150 2001
-y Fj(BZ_OUTBUFF_FULL)630 2110 y Fl(Returned)g(b)m(y)i
-Fj(BZ2_bzBuffToBuffCompres)o(s)24 b Fl(and)30 b Fj
-(BZ2_bzBuffToBuffDecompres)o(s)630 2220 y Fl(to)h(indicate)f(that)h
-(the)f(output)g(data)h(will)d(not)i(\014t)h(in)m(to)f(the)h(output)f
-(bu\013er)f(pro)m(vided.)150 2492 y Fk(3.3)68 b(Lo)l(w-lev)l(el)47
-b(in)l(terface)150 2766 y Ff(3.3.1)63 b Fe(BZ2_bzCompressInit)390
-2953 y Fj(typedef)533 3057 y(struct)46 b({)676 3161 y(char)h(*next_in;)
+b(with)g Fi(libbzip2)1881 b Fl(12)150 299 y Fj(eac)m(h)35
+b(return)f(v)-5 b(alue.)53 b(The)34 b(\014rst)g(\014v)m(e)h(actions)g
+(are)g(normal)f(and)f(not)i(in)m(tended)f(to)i(denote)f(an)e(error)150
+408 y(situation.)150 592 y Fi(BZ_OK)240 b Fj(The)30 b(requested)h
+(action)h(w)m(as)e(completed)i(successfully)-8 b(.)150
+756 y Fi(BZ_RUN_OK)150 866 y(BZ_FLUSH_OK)150 975 y(BZ_FINISH_OK)630
+1085 y Fj(In)22 b Fi(BZ2_bzCompress)p Fj(,)e(the)j(requested)g
+(\015ush/\014nish/nothing-sp)s(ecial)e(action)j(w)m(as)e(com-)630
+1194 y(pleted)31 b(successfully)-8 b(.)150 1358 y Fi(BZ_STREAM_END)630
+1468 y Fj(Compression)38 b(of)g(data)h(w)m(as)f(completed,)j(or)e(the)f
+(logical)j(stream)e(end)e(w)m(as)h(detected)630 1577
+y(during)29 b(decompression.)150 1761 y(The)h(follo)m(wing)i(return)e
+(v)-5 b(alues)31 b(indicate)g(an)f(error)h(of)f(some)h(kind.)150
+1945 y Fi(BZ_CONFIG_ERROR)630 2055 y Fj(Indicates)46
+b(that)h(the)f(library)f(has)h(b)s(een)f(improp)s(erly)g(compiled)h(on)
+g(y)m(our)g(platform)630 2164 y({)k(a)h(ma)5 b(jor)50
+b(con\014guration)h(error.)100 b(Sp)s(eci\014cally)-8
+b(,)56 b(it)51 b(means)e(that)i Fi(sizeof\(char\))p Fj(,)630
+2274 y Fi(sizeof\(short\))43 b Fj(and)i Fi(sizeof\(int\))e
+Fj(are)k(not)g(1,)k(2)46 b(and)g(4)h(resp)s(ectiv)m(ely)-8
+b(,)52 b(as)47 b(they)630 2384 y(should)26 b(b)s(e.)38
+b(Note)29 b(that)e(the)g(library)f(should)g(still)h(w)m(ork)g(prop)s
+(erly)f(on)h(64-bit)h(platforms)630 2493 y(whic)m(h)43
+b(follo)m(w)h(the)g(LP64)f(programming)h(mo)s(del)e({)i(that)g(is,)i
+(where)d Fi(sizeof\(long\))630 2603 y Fj(and)32 b Fi(sizeof\(void*\))e
+Fj(are)j(8.)50 b(Under)32 b(LP64,)j Fi(sizeof\(int\))30
+b Fj(is)j(still)h(4,)h(so)e Fi(libbzip2)p Fj(,)630 2712
+y(whic)m(h)d(do)s(esn't)g(use)h(the)f Fi(long)f Fj(t)m(yp)s(e,)i(is)g
+(OK.)150 2876 y Fi(BZ_SEQUENCE_ERROR)630 2986 y Fj(When)41
+b(using)g(the)h(library)-8 b(,)45 b(it)d(is)g(imp)s(ortan)m(t)g(to)g
+(call)h(the)f(functions)f(in)g(the)h(correct)630 3095
+y(sequence)25 b(and)f(with)g(data)h(structures)g(\(bu\013ers)f(etc\))i
+(in)f(the)g(correct)h(states.)40 b Fi(libbzip2)630 3205
+y Fj(c)m(hec)m(ks)25 b(as)e(m)m(uc)m(h)g(as)g(it)h(can)f(to)h(ensure)f
+(this)g(is)g(happ)s(ening,)g(and)g(returns)f Fi(BZ_SEQUENCE_)630
+3314 y(ERROR)35 b Fj(if)i(not.)59 b(Co)s(de)36 b(whic)m(h)h(complies)g
+(precisely)h(with)e(the)h(function)f(seman)m(tics,)k(as)630
+3424 y(detailed)c(b)s(elo)m(w,)h(should)e(nev)m(er)g(receiv)m(e)j(this)
+d(v)-5 b(alue;)38 b(suc)m(h)d(an)g(ev)m(en)m(t)i(denotes)f(buggy)630
+3534 y(co)s(de)31 b(whic)m(h)f(y)m(ou)g(should)g(in)m(v)m(estigate.)150
+3697 y Fi(BZ_PARAM_ERROR)630 3807 y Fj(Returned)41 b(when)f(a)h
+(parameter)h(to)g(a)g(function)f(call)h(is)f(out)h(of)f(range)h(or)f
+(otherwise)630 3917 y(manifestly)35 b(incorrect.)55 b(As)34
+b(with)g Fi(BZ_SEQUENCE_ERROR)p Fj(,)d(this)k(denotes)g(a)f(bug)g(in)h
+(the)630 4026 y(clien)m(t)24 b(co)s(de.)38 b(The)22 b(distinction)h(b)s
+(et)m(w)m(een)f Fi(BZ_PARAM_ERROR)d Fj(and)i Fi(BZ_SEQUENCE_ERROR)630
+4136 y Fj(is)30 b(a)h(bit)f(hazy)-8 b(,)32 b(but)d(still)j(w)m(orth)e
+(making.)150 4300 y Fi(BZ_MEM_ERROR)630 4409 y Fj(Returned)44
+b(when)g(a)h(request)g(to)g(allo)s(cate)i(memory)e(failed.)83
+b(Note)46 b(that)g(the)f(quan-)630 4519 y(tit)m(y)d(of)f(memory)f
+(needed)g(to)i(decompress)e(a)g(stream)h(cannot)g(b)s(e)f(determined)h
+(un)m(til)630 4628 y(the)f(stream's)h(header)e(has)h(b)s(een)f(read.)69
+b(So)39 b Fi(BZ2_bzDecompress)d Fj(and)j Fi(BZ2_bzRead)630
+4738 y Fj(ma)m(y)29 b(return)f Fi(BZ_MEM_ERROR)d Fj(ev)m(en)30
+b(though)e(some)h(of)g(the)g(compressed)g(data)g(has)f(b)s(een)630
+4847 y(read.)76 b(The)42 b(same)g(is)g(not)g(true)g(for)h(compression;)
+48 b(once)43 b Fi(BZ2_bzCompressInit)37 b Fj(or)630 4957
+y Fi(BZ2_bzWriteOpen)26 b Fj(ha)m(v)m(e)32 b(successfully)e(completed,)
+i Fi(BZ_MEM_ERROR)27 b Fj(cannot)k(o)s(ccur.)150 5121
+y Fi(BZ_DATA_ERROR)630 5230 y Fj(Returned)d(when)g(a)h(data)g(in)m
+(tegrit)m(y)i(error)e(is)g(detected)h(during)d(decompression.)41
+b(Most)630 5340 y(imp)s(ortan)m(tly)-8 b(,)32 b(this)e(means)g(when)f
+(stored)i(and)e(computed)h(CR)m(Cs)g(for)g(the)h(data)f(do)h(not)p
+eop
+%%Page: 13 14
+13 13 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
+b(with)g Fi(libbzip2)1881 b Fl(13)630 299 y Fj(matc)m(h.)41
+b(This)28 b(v)-5 b(alue)28 b(is)h(also)g(returned)e(up)s(on)g
+(detection)j(of)f(an)m(y)f(other)h(anomaly)g(in)f(the)630
+408 y(compressed)i(data.)150 560 y Fi(BZ_DATA_ERROR_MAGIC)630
+670 y Fj(As)j(a)g(sp)s(ecial)g(case)h(of)f Fi(BZ_DATA_ERROR)p
+Fj(,)d(it)k(is)f(sometimes)h(useful)f(to)h(kno)m(w)f(when)f(the)630
+779 y(compressed)c(stream)g(do)s(es)g(not)g(start)g(with)g(the)g
+(correct)i(magic)e(b)m(ytes)h(\()p Fi('B')h('Z')f('h')p
+Fj(\).)150 931 y Fi(BZ_IO_ERROR)630 1040 y Fj(Returned)h(b)m(y)h
+Fi(BZ2_bzRead)d Fj(and)h Fi(BZ2_bzWrite)f Fj(when)i(there)h(is)g(an)f
+(error)h(reading)g(or)630 1150 y(writing)e(in)f(the)h(compressed)g
+(\014le,)g(and)f(b)m(y)h Fi(BZ2_bzReadOpen)24 b Fj(and)k
+Fi(BZ2_bzWriteOpen)630 1259 y Fj(for)h(attempts)i(to)f(use)f(a)h
+(\014le)f(for)h(whic)m(h)f(the)h(error)f(indicator)i(\(viz,)f
+Fi(ferror\(f\))p Fj(\))e(is)h(set.)630 1369 y(On)h(receipt)i(of)f
+Fi(BZ_IO_ERROR)p Fj(,)c(the)k(caller)h(should)e(consult)h
+Fi(errno)e Fj(and/or)h Fi(perror)f Fj(to)630 1479 y(acquire)i(op)s
+(erating-system)h(sp)s(eci\014c)e(information)h(ab)s(out)f(the)g
+(problem.)150 1630 y Fi(BZ_UNEXPECTED_EOF)630 1740 y
+Fj(Returned)j(b)m(y)g Fi(BZ2_bzRead)e Fj(when)h(the)i(compressed)f
+(\014le)h(\014nishes)e(b)s(efore)h(the)h(logical)630
+1849 y(end)c(of)g(stream)h(is)g(detected.)150 2001 y
+Fi(BZ_OUTBUFF_FULL)630 2110 y Fj(Returned)d(b)m(y)g Fi
+(BZ2_bzBuffToBuffCompress)22 b Fj(and)27 b Fi
+(BZ2_bzBuffToBuffDecompres)o(s)630 2220 y Fj(to)k(indicate)h(that)f
+(the)f(output)g(data)h(will)g(not)g(\014t)f(in)m(to)h(the)g(output)f
+(bu\013er)g(pro)m(vided.)150 2492 y Fk(3.3)68 b(Lo)l(w-lev)l(el)47
+b(in)l(terface)150 2766 y Fe(3.3.1)63 b Fd(BZ2_bzCompressInit)390
+2953 y Fi(typedef)533 3057 y(struct)46 b({)676 3161 y(char)h(*next_in;)
 676 3264 y(unsigned)f(int)h(avail_in;)676 3368 y(unsigned)f(int)h
 (total_in_lo32;)676 3472 y(unsigned)f(int)h(total_in_hi32;)676
 3680 y(char)g(*next_out;)676 3783 y(unsigned)f(int)h(avail_out;)676
@@ -2208,1408 +2379,1419 @@ b(in)l(terface)150 2766 y Ff(3.3.1)63 b Fe(BZ2_bzCompressInit)390
 (\()k(bz_stream)e(*strm,)1583 5132 y(int)i(blockSize100k,)1583
 5236 y(int)g(verbosity,)1583 5340 y(int)g(workFactor)e(\);)p
 eop
-%%Page: 13 14
-13 13 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(13)150 456 y(Prepares)32
-b(for)h(compression.)47 b(The)32 b Fj(bz_stream)e Fl(structure)j(holds)
-e(all)h(data)h(p)s(ertaining)e(to)i(the)g(com-)150 565
-y(pression)i(activit)m(y)-8 b(.)62 b(A)37 b Fj(bz_stream)e
-Fl(structure)h(should)f(b)s(e)i(allo)s(cated)g(and)f(initialised)e
-(prior)h(to)j(the)150 675 y(call.)67 b(The)39 b(\014elds)e(of)j
-Fj(bz_stream)d Fl(comprise)h(the)i(en)m(tiret)m(y)g(of)f(the)h
-(user-visible)c(data.)68 b Fj(state)38 b Fl(is)h(a)150
-784 y(p)s(oin)m(ter)29 b(to)i(the)g(priv)-5 b(ate)30
-b(data)h(structures)f(required)e(for)i(compression.)150
-941 y(Custom)37 b(memory)g(allo)s(cators)g(are)h(supp)s(orted,)f(via)g
-(\014elds)f Fj(bzalloc)p Fl(,)h Fj(bzfree)p Fl(,)g(and)g
-Fj(opaque)p Fl(.)59 b(The)150 1051 y(v)-5 b(alue)32 b
-Fj(opaque)e Fl(is)i(passed)f(to)i(as)g(the)f(\014rst)g(argumen)m(t)h
-(to)g(all)e(calls)g(to)i Fj(bzalloc)d Fl(and)i Fj(bzfree)p
-Fl(,)f(but)h(is)150 1160 y(otherwise)d(ignored)g(b)m(y)h(the)g(library)
--8 b(.)38 b(The)29 b(call)h Fj(bzalloc)e(\()i(opaque,)e(n,)i(m)g(\))g
-Fl(is)e(exp)s(ected)j(to)f(return)150 1270 y(a)g(p)s(oin)m(ter)e
-Fj(p)h Fl(to)h Fj(n)g(*)g(m)f Fl(b)m(ytes)h(of)g(memory)-8
-b(,)30 b(and)e Fj(bzfree)h(\()h(opaque,)f(p)h(\))f Fl(should)e(free)i
-(that)h(memory)-8 b(.)150 1427 y(If)33 b(y)m(ou)g(don't)h(w)m(an)m(t)g
-(to)g(use)f(a)g(custom)h(memory)f(allo)s(cator,)h(set)g
-Fj(bzalloc)p Fl(,)e Fj(bzfree)g Fl(and)h Fj(opaque)e
-Fl(to)150 1537 y Fj(NULL)p Fl(,)e(and)h(the)h(library)d(will)f(then)k
-(use)f(the)g(standard)g Fj(malloc)p Fl(/)p Fj(free)e
-Fl(routines.)150 1693 y(Before)39 b(calling)d Fj(BZ2_bzCompressInit)p
-Fl(,)f(\014elds)h Fj(bzalloc)p Fl(,)h Fj(bzfree)f Fl(and)h
-Fj(opaque)f Fl(should)g(b)s(e)h(\014lled)150 1803 y(appropriately)-8
-b(,)35 b(as)h(just)f(describ)s(ed.)53 b(Up)s(on)34 b(return,)i(the)g
-(in)m(ternal)e(state)i(will)d(ha)m(v)m(e)j(b)s(een)f(allo)s(cated)150
-1913 y(and)43 b(initialised,)g(and)g Fj(total_in_lo32)p
-Fl(,)h Fj(total_in_hi32)p Fl(,)f Fj(total_out_lo32)d
-Fl(and)j Fj(total_out_)150 2022 y(hi32)37 b Fl(will)f(ha)m(v)m(e)j(b)s
-(een)f(set)h(to)g(zero.)65 b(These)38 b(four)g(\014elds)e(are)j(used)f
-(b)m(y)g(the)g(library)e(to)j(inform)e(the)150 2132 y(caller)j(of)g
-(the)h(total)g(amoun)m(t)g(of)g(data)g(passed)f(in)m(to)g(and)g(out)g
-(of)h(the)g(library)-8 b(,)41 b(resp)s(ectiv)m(ely)-8
-b(.)70 b(Y)-8 b(ou)150 2241 y(should)34 b(not)j(try)f(to)h(c)m(hange)g
-(them.)58 b(As)36 b(of)h(v)m(ersion)f(1.0,)j(64-bit)d(coun)m(ts)h(are)f
-(main)m(tained,)h(ev)m(en)g(on)150 2351 y(32-bit)i(platforms,)h(using)d
-(the)i Fj(_hi32)e Fl(\014elds)g(to)j(store)f(the)g(upp)s(er)d(32)k
-(bits)d(of)i(the)g(coun)m(t.)66 b(So,)41 b(for)150 2460
-y(example,)30 b(the)h(total)g(amoun)m(t)g(of)f(data)h(in)f(is)f
-Fj(\(total_in_hi32)d(<<)k(32\))g(+)g(total_in_lo32)p
-Fl(.)150 2617 y(P)m(arameter)g Fj(blockSize100k)25 b
-Fl(sp)s(eci\014es)i(the)h(blo)s(c)m(k)g(size)h(to)g(b)s(e)f(used)f(for)
-h(compression.)40 b(It)28 b(should)f(b)s(e)150 2727 y(a)k(v)-5
-b(alue)30 b(b)s(et)m(w)m(een)i(1)f(and)f(9)h(inclusiv)m(e,)e(and)h(the)
-h(actual)g(blo)s(c)m(k)f(size)g(used)g(is)g(100000)j(x)e(this)e
-(\014gure.)42 b(9)150 2836 y(giv)m(es)31 b(the)f(b)s(est)g(compression)
-g(but)f(tak)m(es)j(most)f(memory)-8 b(.)150 2993 y(P)m(arameter)29
-b Fj(verbosity)c Fl(should)h(b)s(e)h(set)i(to)f(a)h(n)m(um)m(b)s(er)d
-(b)s(et)m(w)m(een)j(0)f(and)f(4)h(inclusiv)m(e.)38 b(0)28
-b(is)f(silen)m(t,)h(and)150 3103 y(greater)j(n)m(um)m(b)s(ers)c(giv)m
-(e)j(increasingly)d(v)m(erb)s(ose)j(monitoring/debugging)d(output.)40
-b(If)29 b(the)g(library)e(has)150 3212 y(b)s(een)j(compiled)e(with)i
-Fj(-DBZ_NO_STDIO)p Fl(,)d(no)j(suc)m(h)g(output)g(will)e(app)s(ear)h
-(for)h(an)m(y)h(v)m(erb)s(osit)m(y)f(setting.)150 3369
-y(P)m(arameter)35 b Fj(workFactor)d Fl(con)m(trols)i(ho)m(w)g(the)g
-(compression)f(phase)h(b)s(eha)m(v)m(es)g(when)f(presen)m(ted)h(with)
-150 3479 y(w)m(orst)40 b(case,)j(highly)37 b(rep)s(etitiv)m(e,)k(input)
-d(data.)68 b(If)39 b(compression)g(runs)e(in)m(to)j(di\016culties)d
-(caused)i(b)m(y)150 3588 y(rep)s(etitiv)m(e)34 b(data,)j(the)e(library)
-d(switc)m(hes)j(from)f(the)h(standard)f(sorting)g(algorithm)g(to)i(a)f
-(fallbac)m(k)f(al-)150 3698 y(gorithm.)47 b(The)32 b(fallbac)m(k)g(is)g
-(slo)m(w)m(er)g(than)h(the)f(standard)g(algorithm)g(b)m(y)g(p)s(erhaps)
-f(a)i(factor)h(of)e(three,)150 3808 y(but)e(alw)m(a)m(ys)h(b)s(eha)m(v)
-m(es)f(reasonably)-8 b(,)31 b(no)f(matter)h(ho)m(w)g(bad)f(the)g
-(input.)150 3965 y(Lo)m(w)m(er)25 b(v)-5 b(alues)24 b(of)h
-Fj(workFactor)d Fl(reduce)i(the)h(amoun)m(t)g(of)g(e\013ort)g(the)g
-(standard)f(algorithm)f(will)f(exp)s(end)150 4074 y(b)s(efore)j
-(resorting)h(to)g(the)g(fallbac)m(k.)39 b(Y)-8 b(ou)27
-b(should)c(set)k(this)e(parameter)h(carefully;)g(to)s(o)h(lo)m(w,)g
-(and)e(man)m(y)150 4184 y(inputs)32 b(will)f(b)s(e)i(handled)f(b)m(y)i
-(the)g(fallbac)m(k)g(algorithm)f(and)g(so)h(compress)g(rather)g(slo)m
-(wly)-8 b(,)34 b(to)s(o)h(high,)150 4293 y(and)24 b(y)m(our)h(a)m(v)m
-(erage-to-w)m(orst)30 b(case)c(compression)e(times)h(can)g(b)s(ecome)g
-(v)m(ery)h(large.)39 b(The)24 b(default)g(v)-5 b(alue)150
-4403 y(of)31 b(30)g(giv)m(es)f(reasonable)h(b)s(eha)m(viour)e(o)m(v)m
-(er)i(a)g(wide)e(range)i(of)f(circumstances.)150 4560
-y(Allo)m(w)m(able)h(v)-5 b(alues)31 b(range)i(from)e(0)i(to)f(250)h
-(inclusiv)m(e.)44 b(0)32 b(is)f(a)h(sp)s(ecial)f(case,)i(equiv)-5
-b(alen)m(t)32 b(to)g(using)f(the)150 4669 y(default)f(v)-5
-b(alue)29 b(of)i(30.)150 4826 y(Note)38 b(that)f(the)g(compressed)f
-(output)g(generated)h(is)f(the)g(same)h(regardless)f(of)h(whether)f(or)
-g(not)h(the)150 4936 y(fallbac)m(k)30 b(algorithm)f(is)h(used.)150
-5093 y(Be)23 b(a)m(w)m(are)h(also)f(that)g(this)f(parameter)h(ma)m(y)g
-(disapp)s(ear)e(en)m(tirely)h(in)f(future)h(v)m(ersions)g(of)h(the)g
-(library)-8 b(.)36 b(In)150 5202 y(principle)20 b(it)j(should)e(b)s(e)h
-(p)s(ossible)f(to)j(devise)f(a)g(go)s(o)s(d)g(w)m(a)m(y)i(to)f
-(automatically)f(c)m(ho)s(ose)h(whic)m(h)e(algorithm)150
-5312 y(to)31 b(use.)41 b(Suc)m(h)29 b(a)i(mec)m(hanism)f(w)m(ould)f
-(render)g(the)i(parameter)g(obsolete.)p eop
 %%Page: 14 15
 14 14 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(14)150 299 y(P)m(ossible)29
-b(return)h(v)-5 b(alues:)572 450 y Fj(BZ_CONFIG_ERROR)663
-554 y Fl(if)29 b(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
-657 y Fj(BZ_PARAM_ERROR)663 761 y Fl(if)g Fj(strm)g Fl(is)h
-Fj(NULL)663 865 y Fl(or)g Fj(blockSize)e(<)i Fl(1)h(or)f
-Fj(blockSize)e(>)i Fl(9)663 969 y(or)g Fj(verbosity)e(<)i
-Fl(0)h(or)f Fj(verbosity)e(>)i Fl(4)663 1073 y(or)g Fj(workFactor)e(<)i
-Fl(0)g(or)h Fj(workFactor)c(>)j Fl(250)572 1176 y Fj(BZ_MEM_ERROR)663
-1280 y Fl(if)f(not)i(enough)f(memory)g(is)f(a)m(v)-5
-b(ailable)572 1384 y Fj(BZ_OK)663 1488 y Fl(otherwise)150
-1645 y(Allo)m(w)m(able)30 b(next)g(actions:)572 1796
-y Fj(BZ2_bzCompress)663 1899 y Fl(if)f Fj(BZ_OK)g Fl(is)g(returned)572
-2003 y(no)h(sp)s(eci\014c)f(action)i(needed)f(in)f(case)i(of)g(error)
-150 2255 y Ff(3.3.2)63 b Fe(BZ2_bzCompress)533 2441 y
-Fj(int)47 b(BZ2_bzCompress)d(\()j(bz_stream)f(*strm,)g(int)h(action)f
-(\);)150 2598 y Fl(Pro)m(vides)28 b(more)g(input)f(and/or)h(output)g
-(bu\013er)g(space)h(for)f(the)h(library)-8 b(.)38 b(The)28
-b(caller)g(main)m(tains)f(input)150 2708 y(and)j(output)g(bu\013ers,)f
-(and)h(calls)g Fj(BZ2_bzCompress)c Fl(to)31 b(transfer)f(data)h(b)s(et)
-m(w)m(een)g(them.)150 2865 y(Before)j(eac)m(h)g(call)e(to)i
-Fj(BZ2_bzCompress)p Fl(,)c Fj(next_in)h Fl(should)g(p)s(oin)m(t)h(at)h
-(the)g(data)h(to)g(b)s(e)e(compressed,)150 2974 y(and)41
-b Fj(avail_in)f Fl(should)g(indicate)h(ho)m(w)h(man)m(y)f(b)m(ytes)i
-(the)f(library)d(ma)m(y)k(read.)75 b Fj(BZ2_bzCompress)150
-3084 y Fl(up)s(dates)29 b Fj(next_in)p Fl(,)g Fj(avail_in)f
-Fl(and)i Fj(total_in)e Fl(to)j(re\015ect)g(the)g(n)m(um)m(b)s(er)e(of)h
-(b)m(ytes)h(it)f(has)g(read.)150 3241 y(Similarly)-8
-b(,)27 b Fj(next_out)h Fl(should)g(p)s(oin)m(t)h(to)i(a)f(bu\013er)f
-(in)g(whic)m(h)g(the)h(compressed)g(data)h(is)e(to)i(b)s(e)e(placed,)
-150 3350 y(with)i Fj(avail_out)f Fl(indicating)h(ho)m(w)h(m)m(uc)m(h)h
-(output)f(space)h(is)f(a)m(v)-5 b(ailable.)46 b Fj(BZ2_bzCompress)29
-b Fl(up)s(dates)150 3460 y Fj(next_out)p Fl(,)f Fj(avail_out)g
-Fl(and)i Fj(total_out)e Fl(to)j(re\015ect)g(the)f(n)m(um)m(b)s(er)g(of)
-g(b)m(ytes)h(output.)150 3617 y(Y)-8 b(ou)40 b(ma)m(y)g(pro)m(vide)e
-(and)h(remo)m(v)m(e)i(as)f(little)e(or)h(as)h(m)m(uc)m(h)f(data)h(as)g
-(y)m(ou)f(lik)m(e)g(on)g(eac)m(h)i(call)e(of)g Fj(BZ2_)150
-3726 y(bzCompress)p Fl(.)48 b(In)33 b(the)h(limit,)f(it)h(is)f
-(acceptable)h(to)h(supply)c(and)j(remo)m(v)m(e)h(data)g(one)f(b)m(yte)g
-(at)h(a)f(time,)150 3836 y(although)28 b(this)f(w)m(ould)g(b)s(e)h
-(terribly)e(ine\016cien)m(t.)39 b(Y)-8 b(ou)29 b(should)e(alw)m(a)m(ys)
-h(ensure)g(that)h(at)g(least)g(one)f(b)m(yte)150 3946
-y(of)j(output)f(space)g(is)g(a)m(v)-5 b(ailable)30 b(at)h(eac)m(h)g
-(call.)150 4102 y(A)38 b(second)h(purp)s(ose)d(of)j Fj(BZ2_bzCompress)
-34 b Fl(is)j(to)i(request)f(a)h(c)m(hange)g(of)g(mo)s(de)e(of)i(the)f
-(compressed)150 4212 y(stream.)150 4369 y(Conceptually)-8
-b(,)24 b(a)g(compressed)g(stream)g(can)f(b)s(e)g(in)g(one)h(of)f(four)g
-(states:)39 b(IDLE,)24 b(R)m(UNNING,)h(FLUSH-)150 4478
-y(ING)37 b(and)g(FINISHING.)g(Before)i(initialisation)33
-b(\()p Fj(BZ2_bzCompressInit)p Fl(\))g(and)j(after)i(termination)150
-4588 y(\()p Fj(BZ2_bzCompressEnd)p Fl(\),)27 b(a)j(stream)h(is)f
-(regarded)g(as)g(IDLE.)150 4745 y(Up)s(on)35 b(initialisation)e(\()p
-Fj(BZ2_bzCompressInit)p Fl(\),)h(the)i(stream)h(is)e(placed)h(in)e(the)
-j(R)m(UNNING)g(state.)150 4854 y(Subsequen)m(t)j(calls)g(to)i
-Fj(BZ2_bzCompress)37 b Fl(should)j(pass)g Fj(BZ_RUN)g
-Fl(as)h(the)g(requested)h(action;)47 b(other)150 4964
-y(actions)31 b(are)f(illegal)f(and)h(will)d(result)j(in)f
-Fj(BZ_SEQUENCE_ERROR)p Fl(.)150 5121 y(A)m(t)38 b(some)f(p)s(oin)m(t,)h
-(the)f(calling)e(program)i(will)d(ha)m(v)m(e)k(pro)m(vided)e(all)f(the)
-i(input)e(data)j(it)e(w)m(an)m(ts)i(to.)61 b(It)150 5230
-y(will)28 b(then)h(w)m(an)m(t)i(to)g(\014nish)d(up)h({)i(in)d
-(e\013ect,)k(asking)e(the)g(library)e(to)j(pro)s(cess)f(an)m(y)g(data)h
-(it)f(migh)m(t)g(ha)m(v)m(e)150 5340 y(bu\013ered)25
-b(in)m(ternally)-8 b(.)38 b(In)25 b(this)g(state,)k Fj(BZ2_bzCompress)
-22 b Fl(will)i(no)i(longer)g(attempt)h(to)g(read)f(data)h(from)p
-eop
+b(with)g Fi(libbzip2)1881 b Fl(14)150 456 y Fj(Prepares)31
+b(for)g(compression.)42 b(The)30 b Fi(bz_stream)e Fj(structure)j(holds)
+g(all)g(data)g(p)s(ertaining)g(to)g(the)g(com-)150 565
+y(pression)k(activit)m(y)-8 b(.)59 b(A)35 b Fi(bz_stream)d
+Fj(structure)k(should)e(b)s(e)h(allo)s(cated)i(and)e(initialised)h
+(prior)f(to)i(the)150 675 y(call.)65 b(The)38 b(\014elds)g(of)g
+Fi(bz_stream)e Fj(comprise)i(the)h(en)m(tiret)m(y)h(of)f(the)f
+(user-visible)h(data.)64 b Fi(state)37 b Fj(is)h(a)150
+784 y(p)s(oin)m(ter)31 b(to)g(the)g(priv)-5 b(ate)31
+b(data)f(structures)h(required)f(for)h(compression.)150
+941 y(Custom)36 b(memory)g(allo)s(cators)i(are)f(supp)s(orted,)f(via)h
+(\014elds)e Fi(bzalloc)p Fj(,)h Fi(bzfree)p Fj(,)g(and)g
+Fi(opaque)p Fj(.)56 b(The)150 1051 y(v)-5 b(alue)32 b
+Fi(opaque)e Fj(is)i(passed)f(to)i(as)f(the)g(\014rst)g(argumen)m(t)g
+(to)h(all)f(calls)h(to)g Fi(bzalloc)d Fj(and)h Fi(bzfree)p
+Fj(,)g(but)g(is)150 1160 y(otherwise)c(ignored)g(b)m(y)g(the)g(library)
+-8 b(.)39 b(The)27 b(call)g Fi(bzalloc)i(\()h(opaque,)e(n,)i(m)g(\))c
+Fj(is)h(exp)s(ected)g(to)g(return)150 1270 y(a)h(p)s(oin)m(ter)g
+Fi(p)f Fj(to)i Fi(n)h(*)g(m)d Fj(b)m(ytes)h(of)g(memory)-8
+b(,)29 b(and)e Fi(bzfree)h(\()i(opaque,)f(p)h(\))d Fj(should)g(free)h
+(that)g(memory)-8 b(.)150 1427 y(If)32 b(y)m(ou)h(don't)g(w)m(an)m(t)g
+(to)h(use)e(a)h(custom)g(memory)g(allo)s(cator,)i(set)e
+Fi(bzalloc)p Fj(,)f Fi(bzfree)e Fj(and)i Fi(opaque)f
+Fj(to)150 1537 y Fi(NULL)p Fj(,)e(and)h(the)h(library)f(will)h(then)f
+(use)g(the)h(standard)e Fi(malloc)p Fj(/)p Fi(free)f
+Fj(routines.)150 1693 y(Before)37 b(calling)h Fi(BZ2_bzCompressInit)p
+Fj(,)33 b(\014elds)k Fi(bzalloc)p Fj(,)f Fi(bzfree)f
+Fj(and)h Fi(opaque)e Fj(should)i(b)s(e)g(\014lled)150
+1803 y(appropriately)-8 b(,)35 b(as)e(just)f(describ)s(ed.)48
+b(Up)s(on)31 b(return,)j(the)f(in)m(ternal)h(state)g(will)f(ha)m(v)m(e)
+h(b)s(een)e(allo)s(cated)150 1913 y(and)43 b(initialised,)49
+b(and)43 b Fi(total_in_lo32)p Fj(,)h Fi(total_in_hi32)p
+Fj(,)g Fi(total_out_lo32)c Fj(and)j Fi(total_out_)150
+2022 y(hi32)35 b Fj(will)i(ha)m(v)m(e)g(b)s(een)f(set)h(to)g(zero.)59
+b(These)37 b(four)f(\014elds)f(are)i(used)f(b)m(y)g(the)g(library)h(to)
+g(inform)f(the)150 2132 y(caller)41 b(of)e(the)h(total)h(amoun)m(t)f
+(of)f(data)h(passed)e(in)m(to)j(and)d(out)i(of)f(the)h(library)-8
+b(,)42 b(resp)s(ectiv)m(ely)-8 b(.)70 b(Y)-8 b(ou)150
+2241 y(should)34 b(not)h(try)h(to)g(c)m(hange)g(them.)55
+b(As)34 b(of)h(v)m(ersion)h(1.0,)i(64-bit)e(coun)m(ts)g(are)f(main)m
+(tained,)i(ev)m(en)f(on)150 2351 y(32-bit)j(platforms,)g(using)e(the)h
+Fi(_hi32)d Fj(\014elds)i(to)h(store)h(the)e(upp)s(er)f(32)i(bits)f(of)h
+(the)f(coun)m(t.)63 b(So,)39 b(for)150 2460 y(example,)31
+b(the)g(total)h(amoun)m(t)f(of)f(data)h(in)f(is)g Fi(\(total_in_hi32)d
+(<<)j(32\))f(+)h(total_in_lo32)p Fj(.)150 2617 y(P)m(arameter)37
+b Fi(blockSize100k)31 b Fj(sp)s(eci\014es)k(the)h(blo)s(c)m(k)g(size)g
+(to)g(b)s(e)e(used)h(for)g(compression.)55 b(It)36 b(should)150
+2727 y(b)s(e)27 b(a)h(v)-5 b(alue)28 b(b)s(et)m(w)m(een)g(1)g(and)f(9)h
+(inclusiv)m(e,)i(and)c(the)i(actual)h(blo)s(c)m(k)f(size)h(used)e(is)g
+(100000)k(x)c(this)h(\014gure.)150 2836 y(9)j(giv)m(es)h(the)e(b)s(est)
+g(compression)h(but)f(tak)m(es)h(most)g(memory)-8 b(.)150
+2993 y(P)m(arameter)28 b Fi(verbosity)c Fj(should)h(b)s(e)g(set)i(to)g
+(a)g(n)m(um)m(b)s(er)e(b)s(et)m(w)m(een)i(0)f(and)g(4)g(inclusiv)m(e.)
+41 b(0)26 b(is)g(silen)m(t,)j(and)150 3103 y(greater)d(n)m(um)m(b)s
+(ers)e(giv)m(e)i(increasingly)g(v)m(erb)s(ose)f(monitoring/debugging)h
+(output.)38 b(If)25 b(the)g(library)f(has)150 3212 y(b)s(een)30
+b(compiled)h(with)f Fi(-DBZ_NO_STDIO)p Fj(,)d(no)j(suc)m(h)g(output)g
+(will)h(app)s(ear)f(for)g(an)m(y)g(v)m(erb)s(osit)m(y)i(setting.)150
+3369 y(P)m(arameter)g Fi(workFactor)c Fj(con)m(trols)k(ho)m(w)f(the)g
+(compression)g(phase)f(b)s(eha)m(v)m(es)h(when)e(presen)m(ted)i(with)
+150 3479 y(w)m(orst)38 b(case,)j(highly)c(rep)s(etitiv)m(e,)42
+b(input)37 b(data.)62 b(If)38 b(compression)g(runs)e(in)m(to)i
+(di\016culties)h(caused)e(b)m(y)150 3588 y(rep)s(etitiv)m(e)46
+b(data,)i(the)c(library)f(switc)m(hes)i(from)f(the)g(standard)f
+(sorting)h(algorithm)h(to)g(a)f(fallbac)m(k)150 3698
+y(algorithm.)c(The)27 b(fallbac)m(k)g(is)f(slo)m(w)m(er)i(than)d(the)i
+(standard)e(algorithm)j(b)m(y)e(p)s(erhaps)e(a)i(factor)i(of)e(three,)
+150 3808 y(but)k(alw)m(a)m(ys)h(b)s(eha)m(v)m(es)g(reasonably)-8
+b(,)31 b(no)f(matter)i(ho)m(w)e(bad)g(the)g(input.)150
+3965 y(Lo)m(w)m(er)23 b(v)-5 b(alues)23 b(of)g Fi(workFactor)c
+Fj(reduce)k(the)g(amoun)m(t)g(of)f(e\013ort)i(the)f(standard)f
+(algorithm)h(will)g(exp)s(end)150 4074 y(b)s(efore)h(resorting)g(to)h
+(the)f(fallbac)m(k.)39 b(Y)-8 b(ou)24 b(should)f(set)h(this)g
+(parameter)g(carefully;)j(to)s(o)d(lo)m(w,)i(and)d(man)m(y)150
+4184 y(inputs)32 b(will)h(b)s(e)f(handled)g(b)m(y)h(the)g(fallbac)m(k)g
+(algorithm)h(and)e(so)h(compress)g(rather)g(slo)m(wly)-8
+b(,)35 b(to)s(o)f(high,)150 4293 y(and)41 b(y)m(our)g(a)m(v)m
+(erage-to-w)m(orst)46 b(case)d(compression)e(times)h(can)g(b)s(ecome)g
+(v)m(ery)g(large.)74 b(The)42 b(default)150 4403 y(v)-5
+b(alue)31 b(of)f(30)h(giv)m(es)h(reasonable)f(b)s(eha)m(viour)f(o)m(v)m
+(er)i(a)f(wide)f(range)h(of)f(circumstances.)150 4560
+y(Allo)m(w)m(able)j(v)-5 b(alues)31 b(range)g(from)g(0)g(to)h(250)g
+(inclusiv)m(e.)44 b(0)31 b(is)g(a)g(sp)s(ecial)h(case,)g(equiv)-5
+b(alen)m(t)32 b(to)g(using)f(the)150 4669 y(default)f(v)-5
+b(alue)31 b(of)g(30.)150 4826 y(Note)k(that)e(the)h(compressed)f
+(output)g(generated)h(is)f(the)h(same)f(regardless)h(of)f(whether)g(or)
+g(not)h(the)150 4936 y(fallbac)m(k)d(algorithm)h(is)e(used.)150
+5093 y(Be)f(a)m(w)m(are)g(also)h(that)f(this)f(parameter)i(ma)m(y)f
+(disapp)s(ear)e(en)m(tirely)j(in)e(future)g(v)m(ersions)i(of)e(the)h
+(library)-8 b(.)150 5202 y(In)43 b(principle)h(it)g(should)f(b)s(e)g(p)
+s(ossible)h(to)g(devise)h(a)f(go)s(o)s(d)f(w)m(a)m(y)i(to)f
+(automatically)i(c)m(ho)s(ose)f(whic)m(h)150 5312 y(algorithm)32
+b(to)f(use.)40 b(Suc)m(h)30 b(a)g(mec)m(hanism)h(w)m(ould)f(render)g
+(the)h(parameter)g(obsolete.)p eop
 %%Page: 15 16
 15 15 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(15)150 299 y Fj(next_in)p
-Fl(,)33 b(but)g(it)h(will)d(w)m(an)m(t)k(to)g(write)e(data)h(to)h
-Fj(next_out)p Fl(.)49 b(Because)36 b(the)e(output)f(bu\013er)g
-(supplied)150 408 y(b)m(y)e(the)h(user)e(can)i(b)s(e)f(arbitrarily)d
-(small,)j(the)g(\014nishing-up)d(op)s(eration)i(cannot)i(necessarily)e
-(b)s(e)h(done)150 518 y(with)e(a)i(single)e(call)h(of)g
-Fj(BZ2_bzCompress)p Fl(.)150 675 y(Instead,)47 b(the)d(calling)f
-(program)g(passes)h Fj(BZ_FINISH)d Fl(as)j(an)g(action)g(to)h
-Fj(BZ2_bzCompress)p Fl(.)77 b(This)150 784 y(c)m(hanges)30
-b(the)f(stream's)g(state)h(to)f(FINISHING.)g(An)m(y)g(remaining)e
-(input)g(\(ie,)i Fj(next_in[0)f(..)i(avail_)150 894 y(in-1])p
-Fl(\))36 b(is)f(compressed)i(and)f(transferred)g(to)h(the)g(output)g
-(bu\013er.)58 b(T)-8 b(o)38 b(do)e(this,)i Fj(BZ2_bzCompress)150
-1004 y Fl(m)m(ust)h(b)s(e)f(called)g(rep)s(eatedly)h(un)m(til)e(all)h
-(the)h(output)f(has)h(b)s(een)f(consumed.)66 b(A)m(t)40
-b(that)g(p)s(oin)m(t,)g Fj(BZ2_)150 1113 y(bzCompress)h
-Fl(returns)h Fj(BZ_STREAM_END)p Fl(,)i(and)f(the)h(stream's)g(state)h
-(is)d(set)j(bac)m(k)f(to)g(IDLE.)g Fj(BZ2_)150 1223 y(bzCompressEnd)27
-b Fl(should)h(then)i(b)s(e)g(called.)150 1380 y(Just)25
-b(to)i(mak)m(e)g(sure)e(the)i(calling)d(program)i(do)s(es)g(not)g(c)m
-(heat,)i(the)f(library)c(mak)m(es)k(a)f(note)h(of)f Fj(avail_in)150
-1489 y Fl(at)g(the)g(time)f(of)g(the)g(\014rst)g(call)g(to)h
-Fj(BZ2_bzCompress)21 b Fl(whic)m(h)j(has)h Fj(BZ_FINISH)e
-Fl(as)i(an)h(action)f(\(ie,)i(at)f(the)150 1599 y(time)d(the)h(program)
-g(has)f(announced)g(its)h(in)m(ten)m(tion)f(to)h(not)g(supply)e(an)m(y)
-i(more)g(input\).)37 b(By)24 b(comparing)150 1708 y(this)k(v)-5
-b(alue)28 b(with)g(that)h(of)h Fj(avail_in)c Fl(o)m(v)m(er)k(subsequen)
-m(t)f(calls)f(to)h Fj(BZ2_bzCompress)p Fl(,)d(the)j(library)e(can)150
-1818 y(detect)33 b(an)m(y)e(attempts)i(to)f(slip)d(in)h(more)h(data)h
-(to)h(compress.)43 b(An)m(y)31 b(calls)g(for)g(whic)m(h)f(this)g(is)h
-(detected)150 1928 y(will)j(return)h Fj(BZ_SEQUENCE_ERROR)p
-Fl(.)55 b(This)34 b(indicates)i(a)h(programming)e(mistak)m(e)i(whic)m
-(h)e(should)g(b)s(e)150 2037 y(corrected.)150 2194 y(Instead)i(of)g
-(asking)f(to)h(\014nish,)f(the)h(calling)f(program)g(ma)m(y)h(ask)g
-Fj(BZ2_bzCompress)c Fl(to)38 b(tak)m(e)g(all)e(the)150
-2304 y(remaining)j(input,)i(compress)f(it)g(and)g(terminate)h(the)g
-(curren)m(t)f(\(Burro)m(ws-Wheeler\))h(compression)150
-2413 y(blo)s(c)m(k.)e(This)26 b(could)h(b)s(e)g(useful)f(for)h(error)h
-(con)m(trol)g(purp)s(oses.)38 b(The)27 b(mec)m(hanism)g(is)g(analogous)
-h(to)g(that)150 2523 y(for)35 b(\014nishing:)46 b(call)35
-b Fj(BZ2_bzCompress)c Fl(with)i(an)i(action)g(of)g Fj(BZ_FLUSH)p
-Fl(,)g(remo)m(v)m(e)h(output)f(data,)i(and)150 2632 y(p)s(ersist)h
-(with)g(the)i Fj(BZ_FLUSH)e Fl(action)i(un)m(til)e(the)i(v)-5
-b(alue)39 b Fj(BZ_RUN)f Fl(is)h(returned.)68 b(As)39
-b(with)g(\014nishing,)150 2742 y Fj(BZ2_bzCompress)23
-b Fl(detects)28 b(an)m(y)f(attempt)h(to)f(pro)m(vide)f(more)h(input)e
-(data)i(once)g(the)g(\015ush)e(has)i(b)s(egun.)150 2899
-y(Once)j(the)h(\015ush)e(is)g(complete,)i(the)g(stream)f(returns)g(to)h
-(the)f(normal)g(R)m(UNNING)h(state.)150 3056 y(This)f(all)h(sounds)g
-(prett)m(y)h(complex,)h(but)e(isn't)g(really)-8 b(.)45
-b(Here's)33 b(a)f(table)g(whic)m(h)f(sho)m(ws)h(whic)m(h)f(actions)150
-3165 y(are)e(allo)m(w)m(able)f(in)f(eac)m(h)j(state,)g(what)f(action)g
-(will)c(b)s(e)j(tak)m(en,)j(what)d(the)h(next)f(state)i(is,)e(and)g
-(what)h(the)150 3275 y(non-error)h(return)f(v)-5 b(alues)29
-b(are.)41 b(Note)32 b(that)e(y)m(ou)h(can't)g(explicitly)d(ask)i(what)g
-(state)i(the)e(stream)h(is)e(in,)150 3384 y(but)h(nor)g(do)g(y)m(ou)h
-(need)f(to)h({)g(it)e(can)i(b)s(e)f(inferred)e(from)i(the)h(v)-5
-b(alues)29 b(returned)h(b)m(y)g Fj(BZ2_bzCompress)p Fl(.)390
-3535 y(IDLE/)p Fj(any)572 3639 y Fl(Illegal.)60 b(IDLE)30
-b(state)i(only)d(exists)h(after)h Fj(BZ2_bzCompressEnd)26
-b Fl(or)572 3743 y(b)s(efore)k Fj(BZ2_bzCompressInit)p
-Fl(.)572 3847 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_SEQUENCE_ERROR)390
-4054 y Fl(R)m(UNNING/)p Fj(BZ_RUN)572 4158 y Fl(Compress)f(from)h
-Fj(next_in)f Fl(to)i Fj(next_out)d Fl(as)i(m)m(uc)m(h)h(as)f(p)s
-(ossible.)572 4262 y(Next)h(state)h(=)e(R)m(UNNING)572
-4366 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_RUN_OK)390
-4573 y Fl(R)m(UNNING/)p Fj(BZ_FLUSH)572 4677 y Fl(Remem)m(b)s(er)g
-(curren)m(t)g(v)-5 b(alue)30 b(of)g Fj(next_in)p Fl(.)59
-b(Compress)30 b(from)g Fj(next_in)572 4781 y Fl(to)h
-Fj(next_out)d Fl(as)j(m)m(uc)m(h)f(as)h(p)s(ossible,)d(but)i(do)g(not)g
-(accept)i(an)m(y)f(more)f(input.)572 4885 y(Next)h(state)h(=)e
-(FLUSHING)572 4988 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_FLUSH_OK)390
-5196 y Fl(R)m(UNNING/)p Fj(BZ_FINISH)572 5300 y Fl(Remem)m(b)s(er)g
-(curren)m(t)g(v)-5 b(alue)30 b(of)g Fj(next_in)p Fl(.)59
-b(Compress)30 b(from)g Fj(next_in)p eop
+b(with)g Fi(libbzip2)1881 b Fl(15)150 299 y Fj(P)m(ossible)32
+b(return)e(v)-5 b(alues:)572 450 y Fi(BZ_CONFIG_ERROR)663
+554 y Fj(if)30 b(the)h(library)f(has)g(b)s(een)g(mis-compiled)572
+657 y Fi(BZ_PARAM_ERROR)663 761 y Fj(if)g Fi(strm)f Fj(is)i
+Fi(NULL)663 865 y Fj(or)f Fi(blockSize)e(<)i Fj(1)h(or)g
+Fi(blockSize)c(>)k Fj(9)663 969 y(or)f Fi(verbosity)e(<)i
+Fj(0)h(or)g Fi(verbosity)c(>)k Fj(4)663 1073 y(or)f Fi(workFactor)e(<)i
+Fj(0)h(or)f Fi(workFactor)e(>)i Fj(250)572 1176 y Fi(BZ_MEM_ERROR)663
+1280 y Fj(if)g(not)h(enough)f(memory)h(is)f(a)m(v)-5
+b(ailable)572 1384 y Fi(BZ_OK)663 1488 y Fj(otherwise)150
+1645 y(Allo)m(w)m(able)32 b(next)f(actions:)572 1796
+y Fi(BZ2_bzCompress)663 1899 y Fj(if)f Fi(BZ_OK)f Fj(is)h(returned)572
+2003 y(no)g(sp)s(eci\014c)g(action)i(needed)e(in)g(case)h(of)g(error)
+150 2255 y Fe(3.3.2)63 b Fd(BZ2_bzCompress)533 2441 y
+Fi(int)47 b(BZ2_bzCompress)d(\()j(bz_stream)f(*strm,)g(int)h(action)f
+(\);)150 2598 y Fj(Pro)m(vides)27 b(more)f(input)f(and/or)h(output)g
+(bu\013er)f(space)h(for)g(the)h(library)-8 b(.)39 b(The)26
+b(caller)h(main)m(tains)g(input)150 2708 y(and)j(output)g(bu\013ers,)g
+(and)f(calls)i Fi(BZ2_bzCompress)c Fj(to)k(transfer)f(data)h(b)s(et)m
+(w)m(een)g(them.)150 2865 y(Before)h(eac)m(h)h(call)g(to)f
+Fi(BZ2_bzCompress)p Fj(,)d Fi(next_in)h Fj(should)g(p)s(oin)m(t)i(at)h
+(the)f(data)g(to)h(b)s(e)e(compressed,)150 2974 y(and)40
+b Fi(avail_in)f Fj(should)h(indicate)i(ho)m(w)f(man)m(y)g(b)m(ytes)h
+(the)f(library)g(ma)m(y)g(read.)73 b Fi(BZ2_bzCompress)150
+3084 y Fj(up)s(dates)29 b Fi(next_in)p Fj(,)g Fi(avail_in)f
+Fj(and)i Fi(total_in)e Fj(to)j(re\015ect)g(the)g(n)m(um)m(b)s(er)e(of)i
+(b)m(ytes)g(it)g(has)f(read.)150 3241 y(Similarly)-8
+b(,)30 b Fi(next_out)d Fj(should)h(p)s(oin)m(t)h(to)h(a)f(bu\013er)f
+(in)h(whic)m(h)g(the)g(compressed)g(data)g(is)g(to)h(b)s(e)e(placed,)
+150 3350 y(with)k Fi(avail_out)f Fj(indicating)i(ho)m(w)g(m)m(uc)m(h)f
+(output)h(space)g(is)f(a)m(v)-5 b(ailable.)49 b Fi(BZ2_bzCompress)29
+b Fj(up)s(dates)150 3460 y Fi(next_out)p Fj(,)f Fi(avail_out)g
+Fj(and)i Fi(total_out)e Fj(to)j(re\015ect)g(the)g(n)m(um)m(b)s(er)e(of)
+i(b)m(ytes)g(output.)150 3617 y(Y)-8 b(ou)39 b(ma)m(y)g(pro)m(vide)g
+(and)f(remo)m(v)m(e)i(as)f(little)i(or)e(as)g(m)m(uc)m(h)f(data)h(as)g
+(y)m(ou)g(lik)m(e)h(on)f(eac)m(h)g(call)h(of)f Fi(BZ2_)150
+3726 y(bzCompress)p Fj(.)46 b(In)32 b(the)i(limit,)h(it)e(is)g
+(acceptable)i(to)f(supply)e(and)g(remo)m(v)m(e)j(data)e(one)g(b)m(yte)h
+(at)g(a)f(time,)150 3836 y(although)27 b(this)g(w)m(ould)f(b)s(e)g
+(terribly)i(ine\016cien)m(t.)40 b(Y)-8 b(ou)27 b(should)f(alw)m(a)m(ys)
+i(ensure)e(that)h(at)g(least)h(one)f(b)m(yte)150 3946
+y(of)k(output)f(space)g(is)h(a)m(v)-5 b(ailable)32 b(at)f(eac)m(h)g
+(call.)150 4102 y(A)36 b(second)g(purp)s(ose)f(of)i Fi(BZ2_bzCompress)
+32 b Fj(is)37 b(to)g(request)g(a)f(c)m(hange)h(of)g(mo)s(de)f(of)g(the)
+h(compressed)150 4212 y(stream.)150 4369 y(Conceptually)-8
+b(,)24 b(a)d(compressed)g(stream)g(can)g(b)s(e)f(in)h(one)g(of)g(four)f
+(states:)38 b(IDLE,)20 b(R)m(UNNING,)i(FLUSH-)150 4478
+y(ING)34 b(and)d(FINISHING.)k(Before)e(initialisation)i(\()p
+Fi(BZ2_bzCompressInit)p Fj(\))28 b(and)k(after)i(termination)150
+4588 y(\()p Fi(BZ2_bzCompressEnd)p Fj(\),)27 b(a)j(stream)h(is)f
+(regarded)h(as)f(IDLE.)150 4745 y(Up)s(on)j(initialisation)i(\()p
+Fi(BZ2_bzCompressInit)p Fj(\),)c(the)j(stream)g(is)g(placed)g(in)f(the)
+h(R)m(UNNING)h(state.)150 4854 y(Subsequen)m(t)k(calls)h(to)h
+Fi(BZ2_bzCompress)36 b Fj(should)i(pass)i Fi(BZ_RUN)e
+Fj(as)h(the)h(requested)g(action;)46 b(other)150 4964
+y(actions)31 b(are)g(illegal)i(and)c(will)i(result)g(in)f
+Fi(BZ_SEQUENCE_ERROR)p Fj(.)150 5121 y(A)m(t)37 b(some)f(p)s(oin)m(t,)i
+(the)e(calling)h(program)f(will)h(ha)m(v)m(e)g(pro)m(vided)e(all)i(the)
+f(input)g(data)g(it)g(w)m(an)m(ts)h(to.)58 b(It)150 5230
+y(will)30 b(then)f(w)m(an)m(t)h(to)g(\014nish)e(up)g({)i(in)f
+(e\013ect,)j(asking)d(the)h(library)f(to)h(pro)s(cess)g(an)m(y)f(data)h
+(it)g(migh)m(t)g(ha)m(v)m(e)150 5340 y(bu\013ered)23
+b(in)m(ternally)-8 b(.)40 b(In)24 b(this)g(state,)j Fi(BZ2_bzCompress)
+20 b Fj(will)k(no)g(longer)h(attempt)g(to)g(read)f(data)g(from)p
+eop
 %%Page: 16 17
 16 16 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(16)572 299 y(to)31 b Fj(next_out)d
-Fl(as)j(m)m(uc)m(h)f(as)h(p)s(ossible,)d(but)i(do)g(not)g(accept)i(an)m
-(y)f(more)f(input.)572 403 y(Next)h(state)h(=)e(FINISHING)572
-506 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_FINISH_OK)390
-714 y Fl(FLUSHING/)p Fj(BZ_FLUSH)572 818 y Fl(Compress)f(from)h
-Fj(next_in)f Fl(to)i Fj(next_out)d Fl(as)i(m)m(uc)m(h)h(as)f(p)s
-(ossible,)572 922 y(but)f(do)i(not)f(accept)i(an)m(y)f(more)f(input.)
-572 1025 y(If)g(all)f(the)i(existing)e(input)f(has)i(b)s(een)g(used)g
-(up)f(and)h(all)f(compressed)572 1129 y(output)h(has)g(b)s(een)g(remo)m
-(v)m(ed)663 1233 y(Next)h(state)h(=)e(R)m(UNNING;)i(Return)d(v)-5
-b(alue)30 b(=)g Fj(BZ_RUN_OK)572 1337 y Fl(else)663 1440
-y(Next)h(state)h(=)e(FLUSHING;)h(Return)e(v)-5 b(alue)30
-b(=)g Fj(BZ_FLUSH_OK)390 1648 y Fl(FLUSHING/other)572
-1752 y(Illegal.)572 1856 y(Return)f(v)-5 b(alue)30 b(=)g
-Fj(BZ_SEQUENCE_ERROR)390 2063 y Fl(FINISHING/)p Fj(BZ_FINISH)572
-2167 y Fl(Compress)f(from)h Fj(next_in)f Fl(to)i Fj(next_out)d
-Fl(as)i(m)m(uc)m(h)h(as)f(p)s(ossible,)572 2271 y(but)f(to)j(not)e
-(accept)i(an)m(y)f(more)f(input.)572 2374 y(If)g(all)f(the)i(existing)e
-(input)f(has)i(b)s(een)g(used)g(up)f(and)h(all)f(compressed)572
-2478 y(output)h(has)g(b)s(een)g(remo)m(v)m(ed)663 2582
-y(Next)h(state)h(=)e(IDLE;)g(Return)g(v)-5 b(alue)30
-b(=)g Fj(BZ_STREAM_END)572 2686 y Fl(else)663 2790 y(Next)h(state)h(=)e
-(FINISHING;)g(Return)g(v)-5 b(alue)30 b(=)g Fj(BZ_FINISHING)390
-2997 y Fl(FINISHING/other)572 3101 y(Illegal.)572 3205
-y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_SEQUENCE_ERROR)150
-3361 y Fl(That)24 b(still)f(lo)s(oks)g(complicated?)39
-b(W)-8 b(ell,)25 b(fair)f(enough.)38 b(The)24 b(usual)f(sequence)i(of)f
-(calls)g(for)g(compressing)150 3471 y(a)31 b(load)f(of)g(data)h(is:)225
-3628 y Fi(\017)60 b Fl(Get)31 b(started)g(with)e Fj(BZ2_bzCompressInit)
-p Fl(.)225 3774 y Fi(\017)60 b Fl(Sho)m(v)m(el)38 b(data)h(in)e(and)g
-(shlurp)e(out)k(its)e(compressed)h(form)g(using)e(zero)j(or)f(more)h
-(calls)e(of)h Fj(BZ2_)330 3884 y(bzCompress)28 b Fl(with)h(action)h(=)g
-Fj(BZ_RUN)p Fl(.)225 4030 y Fi(\017)60 b Fl(Finish)23
-b(up.)38 b(Rep)s(eatedly)25 b(call)f Fj(BZ2_bzCompress)e
-Fl(with)i(action)h(=)g Fj(BZ_FINISH)p Fl(,)f(cop)m(ying)h(out)h(the)330
-4139 y(compressed)k(output,)g(un)m(til)f Fj(BZ_STREAM_END)e
-Fl(is)i(returned.)225 4285 y Fi(\017)60 b Fl(Close)30
-b(up)f(and)h(go)h(home.)41 b(Call)29 b Fj(BZ2_bzCompressEnd)p
-Fl(.)150 4478 y(If)23 b(the)h(data)h(y)m(ou)f(w)m(an)m(t)h(to)f
-(compress)g(\014ts)f(in)m(to)h(y)m(our)g(input)e(bu\013er)h(all)f(at)j
-(once,)h(y)m(ou)e(can)g(skip)f(the)h(calls)150 4588 y(of)37
-b Fj(BZ2_bzCompress)26 b(\()k(...,)f(BZ_RUN)g(\))36 b
-Fl(and)g(just)g(do)h(the)g Fj(BZ2_bzCompress)26 b(\()k(...,)f
-(BZ_FINISH)150 4698 y(\))h Fl(calls.)150 4854 y(All)36
-b(required)g(memory)h(is)f(allo)s(cated)i(b)m(y)f Fj
-(BZ2_bzCompressInit)p Fl(.)56 b(The)37 b(compression)g(library)e(can)
-150 4964 y(accept)g(an)m(y)f(data)h(at)g(all)d(\(ob)m(viously\).)51
-b(So)34 b(y)m(ou)g(shouldn't)e(get)j(an)m(y)f(error)f(return)g(v)-5
-b(alues)33 b(from)h(the)150 5074 y Fj(BZ2_bzCompress)29
-b Fl(calls.)46 b(If)32 b(y)m(ou)h(do,)g(they)g(will)d(b)s(e)i
-Fj(BZ_SEQUENCE_ERROR)p Fl(,)d(and)j(indicate)f(a)i(bug)f(in)150
-5183 y(y)m(our)e(programming.)150 5340 y(T)-8 b(rivial)28
-b(other)j(p)s(ossible)d(return)h(v)-5 b(alues:)p eop
+b(with)g Fi(libbzip2)1881 b Fl(16)150 299 y Fi(next_in)p
+Fj(,)32 b(but)g(it)i(will)f(w)m(an)m(t)h(to)g(write)g(data)f(to)h
+Fi(next_out)p Fj(.)46 b(Because)34 b(the)f(output)g(bu\013er)f
+(supplied)150 408 y(b)m(y)d(the)g(user)g(can)g(b)s(e)f(arbitrarily)i
+(small,)g(the)f(\014nishing-up)f(op)s(eration)h(cannot)h(necessarily)g
+(b)s(e)e(done)150 518 y(with)i(a)h(single)g(call)g(of)g
+Fi(BZ2_bzCompress)p Fj(.)150 675 y(Instead,)47 b(the)d(calling)g
+(program)g(passes)f Fi(BZ_FINISH)e Fj(as)i(an)g(action)i(to)f
+Fi(BZ2_bzCompress)p Fj(.)76 b(This)150 784 y(c)m(hanges)26
+b(the)g(stream's)g(state)h(to)f(FINISHING.)h(An)m(y)e(remaining)h
+(input)e(\(ie,)k Fi(next_in[0)g(..)i(avail_)150 894 y(in-1])p
+Fj(\))k(is)h(compressed)g(and)f(transferred)h(to)h(the)f(output)g
+(bu\013er.)54 b(T)-8 b(o)36 b(do)f(this,)i Fi(BZ2_bzCompress)150
+1004 y Fj(m)m(ust)h(b)s(e)f(called)i(rep)s(eatedly)g(un)m(til)f(all)g
+(the)h(output)f(has)f(b)s(een)g(consumed.)63 b(A)m(t)38
+b(that)h(p)s(oin)m(t,)h Fi(BZ2_)150 1113 y(bzCompress)g
+Fj(returns)i Fi(BZ_STREAM_END)p Fj(,)g(and)f(the)i(stream's)g(state)h
+(is)e(set)h(bac)m(k)g(to)h(IDLE.)d Fi(BZ2_)150 1223 y(bzCompressEnd)27
+b Fj(should)i(then)h(b)s(e)g(called.)150 1380 y(Just)g(to)i(mak)m(e)f
+(sure)f(the)h(calling)g(program)g(do)s(es)f(not)h(c)m(heat,)h(the)f
+(library)f(mak)m(es)h(a)g(note)g(of)g Fi(avail_)150 1489
+y(in)i Fj(at)h(the)g(time)h(of)e(the)h(\014rst)g(call)g(to)h
+Fi(BZ2_bzCompress)30 b Fj(whic)m(h)j(has)g Fi(BZ_FINISH)e
+Fj(as)j(an)f(action)i(\(ie,)150 1599 y(at)g(the)g(time)h(the)e(program)
+h(has)f(announced)g(its)h(in)m(ten)m(tion)h(to)g(not)f(supply)e(an)m(y)
+h(more)h(input\).)53 b(By)150 1708 y(comparing)30 b(this)f(v)-5
+b(alue)29 b(with)h(that)f(of)h Fi(avail_in)d Fj(o)m(v)m(er)k(subsequen)
+m(t)d(calls)j(to)f Fi(BZ2_bzCompress)p Fj(,)c(the)150
+1818 y(library)k(can)f(detect)j(an)m(y)e(attempts)h(to)f(slip)g(in)f
+(more)h(data)g(to)h(compress.)41 b(An)m(y)29 b(calls)i(for)e(whic)m(h)h
+(this)150 1928 y(is)h(detected)i(will)f(return)f Fi(BZ_SEQUENCE_ERROR)p
+Fj(.)39 b(This)31 b(indicates)i(a)e(programming)g(mistak)m(e)i(whic)m
+(h)150 2037 y(should)c(b)s(e)h(corrected.)150 2194 y(Instead)36
+b(of)g(asking)h(to)g(\014nish,)f(the)h(calling)g(program)f(ma)m(y)h
+(ask)f Fi(BZ2_bzCompress)c Fj(to)37 b(tak)m(e)h(all)f(the)150
+2304 y(remaining)f(input,)g(compress)f(it)h(and)f(terminate)h(the)g
+(curren)m(t)g(\(Burro)m(ws-Wheeler\))h(compression)150
+2413 y(blo)s(c)m(k.)j(This)25 b(could)h(b)s(e)g(useful)f(for)h(error)g
+(con)m(trol)i(purp)s(oses.)38 b(The)26 b(mec)m(hanism)g(is)g(analogous)
+h(to)f(that)150 2523 y(for)35 b(\014nishing:)48 b(call)35
+b Fi(BZ2_bzCompress)c Fj(with)k(an)f(action)i(of)f Fi(BZ_FLUSH)p
+Fj(,)f(remo)m(v)m(e)i(output)f(data,)h(and)150 2632 y(p)s(ersist)i
+(with)g(the)h Fi(BZ_FLUSH)d Fj(action)k(un)m(til)e(the)h(v)-5
+b(alue)39 b Fi(BZ_RUN)d Fj(is)j(returned.)64 b(As)38
+b(with)g(\014nishing,)150 2742 y Fi(BZ2_bzCompress)21
+b Fj(detects)27 b(an)m(y)f(attempt)g(to)h(pro)m(vide)e(more)h(input)f
+(data)g(once)i(the)e(\015ush)f(has)h(b)s(egun.)150 2899
+y(Once)31 b(the)g(\015ush)d(is)j(complete,)h(the)f(stream)f(returns)g
+(to)i(the)e(normal)h(R)m(UNNING)h(state.)150 3056 y(This)f(all)g
+(sounds)f(prett)m(y)i(complex,)g(but)f(isn't)g(really)-8
+b(.)44 b(Here's)32 b(a)f(table)h(whic)m(h)e(sho)m(ws)h(whic)m(h)g
+(actions)150 3165 y(are)d(allo)m(w)m(able)i(in)e(eac)m(h)h(state,)h
+(what)d(action)j(will)e(b)s(e)f(tak)m(en,)j(what)d(the)i(next)f(state)h
+(is,)g(and)e(what)h(the)150 3275 y(non-error)g(return)f(v)-5
+b(alues)28 b(are.)40 b(Note)30 b(that)e(y)m(ou)g(can't)g(explicitly)i
+(ask)d(what)h(state)h(the)f(stream)g(is)g(in,)150 3384
+y(but)h(nor)h(do)f(y)m(ou)h(need)g(to)g({)h(it)f(can)g(b)s(e)f
+(inferred)g(from)h(the)g(v)-5 b(alues)30 b(returned)f(b)m(y)h
+Fi(BZ2_bzCompress)p Fj(.)390 3535 y(IDLE/)p Fi(any)572
+3639 y Fj(Illegal.)63 b(IDLE)29 b(state)j(only)e(exists)h(after)g
+Fi(BZ2_bzCompressEnd)26 b Fj(or)572 3743 y(b)s(efore)k
+Fi(BZ2_bzCompressInit)p Fj(.)572 3847 y(Return)g(v)-5
+b(alue)31 b(=)f Fi(BZ_SEQUENCE_ERROR)390 4054 y Fj(R)m(UNNING/)p
+Fi(BZ_RUN)572 4158 y Fj(Compress)g(from)g Fi(next_in)e
+Fj(to)j Fi(next_out)d Fj(as)j(m)m(uc)m(h)f(as)h(p)s(ossible.)572
+4262 y(Next)g(state)h(=)e(R)m(UNNING)572 4366 y(Return)g(v)-5
+b(alue)31 b(=)f Fi(BZ_RUN_OK)390 4573 y Fj(R)m(UNNING/)p
+Fi(BZ_FLUSH)572 4677 y Fj(Remem)m(b)s(er)g(curren)m(t)h(v)-5
+b(alue)31 b(of)f Fi(next_in)p Fj(.)59 b(Compress)30 b(from)g
+Fi(next_in)572 4781 y Fj(to)h Fi(next_out)d Fj(as)j(m)m(uc)m(h)f(as)g
+(p)s(ossible,)g(but)g(do)h(not)f(accept)i(an)m(y)e(more)h(input.)572
+4885 y(Next)g(state)h(=)e(FLUSHING)572 4988 y(Return)g(v)-5
+b(alue)31 b(=)f Fi(BZ_FLUSH_OK)390 5196 y Fj(R)m(UNNING/)p
+Fi(BZ_FINISH)572 5300 y Fj(Remem)m(b)s(er)g(curren)m(t)h(v)-5
+b(alue)31 b(of)f Fi(next_in)p Fj(.)59 b(Compress)30 b(from)g
+Fi(next_in)p eop
 %%Page: 17 18
 17 17 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(17)572 299 y Fj(BZ_PARAM_ERROR)663
-403 y Fl(if)29 b Fj(strm)g Fl(is)h Fj(NULL)p Fl(,)f(or)i
-Fj(strm->s)d Fl(is)h Fj(NULL)150 652 y Ff(3.3.3)63 b
-Fe(BZ2_bzCompressEnd)390 839 y Fj(int)47 b(BZ2_bzCompressEnd)c(\()k
-(bz_stream)f(*strm)g(\);)150 996 y Fl(Releases)31 b(all)e(memory)h
-(asso)s(ciated)h(with)e(a)i(compression)e(stream.)150
-1153 y(P)m(ossible)g(return)h(v)-5 b(alues:)481 1304
-y Fj(BZ_PARAM_ERROR)117 b Fl(if)30 b Fj(strm)f Fl(is)g
-Fj(NULL)g Fl(or)i Fj(strm->s)d Fl(is)i Fj(NULL)481 1408
-y(BZ_OK)120 b Fl(otherwise)150 1657 y Ff(3.3.4)63 b Fe
-(BZ2_bzDecompressInit)390 1844 y Fj(int)47 b(BZ2_bzDecompressInit)42
+b(with)g Fi(libbzip2)1881 b Fl(17)572 299 y Fj(to)31
+b Fi(next_out)d Fj(as)j(m)m(uc)m(h)f(as)g(p)s(ossible,)g(but)g(do)h
+(not)f(accept)i(an)m(y)e(more)h(input.)572 403 y(Next)g(state)h(=)e
+(FINISHING)572 506 y(Return)g(v)-5 b(alue)31 b(=)f Fi(BZ_FINISH_OK)390
+714 y Fj(FLUSHING/)p Fi(BZ_FLUSH)572 818 y Fj(Compress)g(from)g
+Fi(next_in)e Fj(to)j Fi(next_out)d Fj(as)j(m)m(uc)m(h)f(as)h(p)s
+(ossible,)572 922 y(but)f(do)g(not)h(accept)g(an)m(y)g(more)g(input.)
+572 1025 y(If)f(all)h(the)g(existing)g(input)f(has)g(b)s(een)f(used)h
+(up)f(and)h(all)h(compressed)572 1129 y(output)f(has)g(b)s(een)g(remo)m
+(v)m(ed)663 1233 y(Next)h(state)h(=)e(R)m(UNNING;)i(Return)e(v)-5
+b(alue)31 b(=)f Fi(BZ_RUN_OK)572 1337 y Fj(else)663 1440
+y(Next)h(state)h(=)e(FLUSHING;)g(Return)h(v)-5 b(alue)30
+b(=)g Fi(BZ_FLUSH_OK)390 1648 y Fj(FLUSHING/other)572
+1752 y(Illegal.)572 1856 y(Return)g(v)-5 b(alue)31 b(=)f
+Fi(BZ_SEQUENCE_ERROR)390 2063 y Fj(FINISHING/)p Fi(BZ_FINISH)572
+2167 y Fj(Compress)g(from)g Fi(next_in)e Fj(to)j Fi(next_out)d
+Fj(as)j(m)m(uc)m(h)f(as)h(p)s(ossible,)572 2271 y(but)f(to)h(not)g
+(accept)g(an)m(y)g(more)g(input.)572 2374 y(If)f(all)h(the)g(existing)g
+(input)f(has)g(b)s(een)f(used)h(up)f(and)h(all)h(compressed)572
+2478 y(output)f(has)g(b)s(een)g(remo)m(v)m(ed)663 2582
+y(Next)h(state)h(=)e(IDLE;)f(Return)i(v)-5 b(alue)30
+b(=)g Fi(BZ_STREAM_END)572 2686 y Fj(else)663 2790 y(Next)h(state)h(=)e
+(FINISHING;)h(Return)g(v)-5 b(alue)30 b(=)g Fi(BZ_FINISHING)390
+2997 y Fj(FINISHING/other)572 3101 y(Illegal.)572 3205
+y(Return)g(v)-5 b(alue)31 b(=)f Fi(BZ_SEQUENCE_ERROR)150
+3361 y Fj(That)23 b(still)h(lo)s(oks)g(complicated?)39
+b(W)-8 b(ell,)26 b(fair)d(enough.)39 b(The)23 b(usual)f(sequence)h(of)h
+(calls)g(for)f(compressing)150 3471 y(a)30 b(load)h(of)g(data)f(is:)225
+3628 y Fh(\017)60 b Fj(Get)32 b(started)f(with)f Fi(BZ2_bzCompressInit)
+p Fj(.)225 3774 y Fh(\017)60 b Fj(Sho)m(v)m(el)37 b(data)g(in)f(and)g
+(shlurp)f(out)i(its)f(compressed)h(form)f(using)g(zero)i(or)e(more)h
+(calls)h(of)e Fi(BZ2_)330 3884 y(bzCompress)28 b Fj(with)i(action)h(=)f
+Fi(BZ_RUN)p Fj(.)225 4030 y Fh(\017)60 b Fj(Finish)24
+b(up.)38 b(Rep)s(eatedly)25 b(call)h Fi(BZ2_bzCompress)21
+b Fj(with)k(action)h(=)e Fi(BZ_FINISH)p Fj(,)g(cop)m(ying)h(out)h(the)
+330 4139 y(compressed)k(output,)h(un)m(til)g Fi(BZ_STREAM_END)26
+b Fj(is)31 b(returned.)225 4285 y Fh(\017)60 b Fj(Close)31
+b(up)e(and)h(go)h(home.)41 b(Call)30 b Fi(BZ2_bzCompressEnd)p
+Fj(.)150 4478 y(If)23 b(the)g(data)g(y)m(ou)h(w)m(an)m(t)g(to)f
+(compress)g(\014ts)g(in)m(to)h(y)m(our)g(input)e(bu\013er)g(all)i(at)f
+(once,)j(y)m(ou)d(can)g(skip)g(the)g(calls)150 4588 y(of)37
+b Fi(BZ2_bzCompress)26 b(\()k(...,)f(BZ_RUN)g(\))36 b
+Fj(and)g(just)g(do)g(the)h Fi(BZ2_bzCompress)26 b(\()k(...,)f
+(BZ_FINISH)150 4698 y(\))h Fj(calls.)150 4854 y(All)35
+b(required)g(memory)h(is)f(allo)s(cated)i(b)m(y)e Fi
+(BZ2_bzCompressInit)p Fj(.)51 b(The)35 b(compression)h(library)f(can)
+150 4964 y(accept)f(an)m(y)e(data)h(at)g(all)h(\(ob)m(viously\).)48
+b(So)32 b(y)m(ou)h(shouldn't)f(get)i(an)m(y)f(error)g(return)f(v)-5
+b(alues)32 b(from)h(the)150 5074 y Fi(BZ2_bzCompress)28
+b Fj(calls.)48 b(If)32 b(y)m(ou)g(do,)h(they)g(will)g(b)s(e)e
+Fi(BZ_SEQUENCE_ERROR)p Fj(,)e(and)i(indicate)i(a)g(bug)e(in)150
+5183 y(y)m(our)g(programming.)150 5340 y(T)-8 b(rivial)32
+b(other)f(p)s(ossible)f(return)g(v)-5 b(alues:)p eop
+%%Page: 18 19
+18 18 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
+b(with)g Fi(libbzip2)1881 b Fl(18)572 299 y Fi(BZ_PARAM_ERROR)663
+403 y Fj(if)30 b Fi(strm)f Fj(is)i Fi(NULL)p Fj(,)e(or)i
+Fi(strm->s)d Fj(is)j Fi(NULL)150 652 y Fe(3.3.3)63 b
+Fd(BZ2_bzCompressEnd)390 839 y Fi(int)47 b(BZ2_bzCompressEnd)c(\()k
+(bz_stream)f(*strm)g(\);)150 996 y Fj(Releases)32 b(all)f(memory)f
+(asso)s(ciated)i(with)e(a)h(compression)f(stream.)150
+1153 y(P)m(ossible)i(return)e(v)-5 b(alues:)481 1304
+y Fi(BZ_PARAM_ERROR)117 b Fj(if)31 b Fi(strm)e Fj(is)h
+Fi(NULL)f Fj(or)i Fi(strm->s)d Fj(is)j Fi(NULL)481 1408
+y(BZ_OK)120 b Fj(otherwise)150 1657 y Fe(3.3.4)63 b Fd
+(BZ2_bzDecompressInit)390 1844 y Fi(int)47 b(BZ2_bzDecompressInit)42
 b(\()48 b(bz_stream)d(*strm,)h(int)h(verbosity,)e(int)i(small)f(\);)150
-2001 y Fl(Prepares)30 b(for)f(decompression.)40 b(As)29
-b(with)g Fj(BZ2_bzCompressInit)p Fl(,)c(a)31 b Fj(bz_stream)c
-Fl(record)j(should)e(b)s(e)150 2110 y(allo)s(cated)c(and)f(initialised)
-e(b)s(efore)i(the)i(call.)38 b(Fields)22 b Fj(bzalloc)p
-Fl(,)i Fj(bzfree)e Fl(and)i Fj(opaque)e Fl(should)g(b)s(e)h(set)i(if)
-150 2220 y(a)h(custom)f(memory)g(allo)s(cator)g(is)g(required,)f(or)h
-(made)h Fj(NULL)e Fl(for)h(the)g(normal)f Fj(malloc)p
-Fl(/)p Fj(free)f Fl(routines.)150 2330 y(Up)s(on)h(return,)h(the)g(in)m
-(ternal)f(state)i(will)c(ha)m(v)m(e)k(b)s(een)f(initialised,)d(and)i
-Fj(total_in)f Fl(and)h Fj(total_out)f Fl(will)150 2439
-y(b)s(e)30 b(zero.)150 2596 y(F)-8 b(or)31 b(the)g(meaning)e(of)i
-(parameter)g Fj(verbosity)p Fl(,)d(see)j Fj(BZ2_bzCompressInit)p
-Fl(.)150 2753 y(If)e Fj(small)e Fl(is)h(nonzero,)i(the)f(library)e
-(will)f(use)j(an)g(alternativ)m(e)h(decompression)e(algorithm)g(whic)m
-(h)f(uses)150 2862 y(less)c(memory)g(but)g(at)h(the)g(cost)h(of)e
-(decompressing)g(more)g(slo)m(wly)g(\(roughly)f(sp)s(eaking,)i(half)f
-(the)h(sp)s(eed,)150 2972 y(but)34 b(the)i(maxim)m(um)d(memory)i
-(requiremen)m(t)g(drops)e(to)j(around)e(2300k\).)57 b(See)35
-b(Chapter)g(2)g(for)g(more)150 3082 y(information)29
-b(on)h(memory)g(managemen)m(t.)150 3238 y(Note)40 b(that)f(the)f(amoun)
-m(t)h(of)g(memory)f(needed)g(to)i(decompress)e(a)h(stream)f(cannot)h(b)
-s(e)f(determined)150 3348 y(un)m(til)j(the)h(stream's)h(header)f(has)g
-(b)s(een)g(read,)j(so)e(ev)m(en)g(if)e Fj(BZ2_bzDecompressInit)c
-Fl(succeeds,)46 b(a)150 3458 y(subsequen)m(t)30 b Fj(BZ2_bzDecompress)c
-Fl(could)j(fail)g(with)g Fj(BZ_MEM_ERROR)p Fl(.)150 3614
-y(P)m(ossible)g(return)h(v)-5 b(alues:)572 3765 y Fj(BZ_CONFIG_ERROR)
-663 3869 y Fl(if)29 b(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
-3973 y Fj(BZ_PARAM_ERROR)663 4077 y Fl(if)g Fj(\(small)46
-b(!=)h(0)h(&&)f(small)f(!=)h(1\))663 4181 y Fl(or)30
-b Fj(\(verbosity)45 b(<)j(0)f(||)g(verbosity)e(>)j(4\))572
-4284 y(BZ_MEM_ERROR)663 4388 y Fl(if)29 b(insu\016cien)m(t)g(memory)h
-(is)f(a)m(v)-5 b(ailable)150 4545 y(Allo)m(w)m(able)30
-b(next)g(actions:)572 4696 y Fj(BZ2_bzDecompress)663
-4800 y Fl(if)f Fj(BZ_OK)g Fl(w)m(as)i(returned)572 4904
-y(no)f(sp)s(eci\014c)f(action)i(required)e(in)g(case)i(of)g(error)150
-5153 y Ff(3.3.5)63 b Fe(BZ2_bzDecompress)390 5340 y Fj(int)47
+2001 y Fj(Prepares)39 b(for)f(decompression.)65 b(As)38
+b(with)h Fi(BZ2_bzCompressInit)p Fj(,)c(a)k Fi(bz_stream)d
+Fj(record)j(should)150 2110 y(b)s(e)30 b(allo)s(cated)j(and)d
+(initialised)i(b)s(efore)f(the)g(call.)44 b(Fields)31
+b Fi(bzalloc)p Fj(,)e Fi(bzfree)g Fj(and)h Fi(opaque)g
+Fj(should)g(b)s(e)150 2220 y(set)35 b(if)f(a)g(custom)h(memory)f(allo)s
+(cator)i(is)e(required,)h(or)g(made)f Fi(NULL)f Fj(for)h(the)g(normal)g
+Fi(malloc)p Fj(/)p Fi(free)150 2330 y Fj(routines.)72
+b(Up)s(on)40 b(return,)j(the)e(in)m(ternal)h(state)g(will)g(ha)m(v)m(e)
+f(b)s(een)f(initialised,)45 b(and)40 b Fi(total_in)f
+Fj(and)150 2439 y Fi(total_out)28 b Fj(will)j(b)s(e)e(zero.)150
+2596 y(F)-8 b(or)31 b(the)g(meaning)f(of)h(parameter)g
+Fi(verbosity)p Fj(,)d(see)j Fi(BZ2_bzCompressInit)p Fj(.)150
+2753 y(If)26 b Fi(small)f Fj(is)i(nonzero,)h(the)f(library)f(will)h
+(use)f(an)g(alternativ)m(e)j(decompression)e(algorithm)g(whic)m(h)f
+(uses)150 2862 y(less)42 b(memory)h(but)e(at)i(the)f(cost)i(of)e
+(decompressing)g(more)h(slo)m(wly)g(\(roughly)f(sp)s(eaking,)j(half)d
+(the)150 2972 y(sp)s(eed,)29 b(but)f(the)h(maxim)m(um)f(memory)i
+(requiremen)m(t)f(drops)f(to)i(around)e(2300k\).)42 b(See)29
+b(Chapter)g(2)g(for)150 3082 y(more)i(information)g(on)f(memory)g
+(managemen)m(t.)150 3238 y(Note)37 b(that)f(the)g(amoun)m(t)g(of)g
+(memory)g(needed)f(to)h(decompress)g(a)g(stream)g(cannot)g(b)s(e)f
+(determined)150 3348 y(un)m(til)41 b(the)f(stream's)h(header)f(has)g(b)
+s(een)f(read,)k(so)e(ev)m(en)g(if)f Fi(BZ2_bzDecompressInit)35
+b Fj(succeeds,)43 b(a)150 3458 y(subsequen)m(t)30 b Fi
+(BZ2_bzDecompress)c Fj(could)k(fail)h(with)f Fi(BZ_MEM_ERROR)p
+Fj(.)150 3614 y(P)m(ossible)i(return)e(v)-5 b(alues:)572
+3765 y Fi(BZ_CONFIG_ERROR)663 3869 y Fj(if)30 b(the)h(library)f(has)g
+(b)s(een)g(mis-compiled)572 3973 y Fi(BZ_PARAM_ERROR)663
+4077 y Fj(if)g Fi(\(small)46 b(!=)h(0)h(&&)f(small)f(!=)h(1\))663
+4181 y Fj(or)30 b Fi(\(verbosity)45 b(<)j(0)f(||)g(verbosity)f(>)h(4\))
+572 4284 y(BZ_MEM_ERROR)663 4388 y Fj(if)30 b(insu\016cien)m(t)h
+(memory)f(is)h(a)m(v)-5 b(ailable)150 4545 y(Allo)m(w)m(able)32
+b(next)f(actions:)572 4696 y Fi(BZ2_bzDecompress)663
+4800 y Fj(if)f Fi(BZ_OK)f Fj(w)m(as)h(returned)572 4904
+y(no)g(sp)s(eci\014c)g(action)i(required)e(in)g(case)h(of)g(error)150
+5153 y Fe(3.3.5)63 b Fd(BZ2_bzDecompress)390 5340 y Fi(int)47
 b(BZ2_bzDecompress)c(\()48 b(bz_stream)d(*strm)h(\);)p
 eop
-%%Page: 18 19
-18 18 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(18)150 299 y(Pro)m(vides)24
-b(more)g(input)f(and/out)h(output)g(bu\013er)g(space)h(for)f(the)g
-(library)-8 b(.)37 b(The)24 b(caller)g(main)m(tains)f(input)150
-408 y(and)30 b(output)g(bu\013ers,)f(and)h(uses)g Fj(BZ2_bzDecompress)c
-Fl(to)31 b(transfer)f(data)h(b)s(et)m(w)m(een)g(them.)150
-565 y(Before)g(eac)m(h)g(call)f(to)g Fj(BZ2_bzDecompress)p
-Fl(,)c Fj(next_in)i Fl(should)h(p)s(oin)m(t)g(at)h(the)h(compressed)e
-(data,)j(and)150 675 y Fj(avail_in)h Fl(should)h(indicate)h(ho)m(w)h
-(man)m(y)f(b)m(ytes)i(the)e(library)f(ma)m(y)i(read.)56
-b Fj(BZ2_bzDecompress)32 b Fl(up-)150 784 y(dates)f Fj(next_in)p
-Fl(,)e Fj(avail_in)f Fl(and)h Fj(total_in)g Fl(to)i(re\015ect)g(the)f
-(n)m(um)m(b)s(er)f(of)i(b)m(ytes)g(it)f(has)g(read.)150
-941 y(Similarly)-8 b(,)37 b Fj(next_out)f Fl(should)g(p)s(oin)m(t)i(to)
-g(a)h(bu\013er)e(in)g(whic)m(h)g(the)i(uncompressed)e(output)g(is)h(to)
-h(b)s(e)150 1051 y(placed,)d(with)e Fj(avail_out)f Fl(indicating)g(ho)m
-(w)i(m)m(uc)m(h)g(output)g(space)h(is)e(a)m(v)-5 b(ailable.)55
-b Fj(BZ2_bzCompress)150 1160 y Fl(up)s(dates)29 b Fj(next_out)p
-Fl(,)g Fj(avail_out)f Fl(and)h Fj(total_out)f Fl(to)j(re\015ect)g(the)g
-(n)m(um)m(b)s(er)e(of)h(b)m(ytes)h(output.)150 1317 y(Y)-8
-b(ou)40 b(ma)m(y)g(pro)m(vide)e(and)h(remo)m(v)m(e)i(as)f(little)e(or)h
-(as)h(m)m(uc)m(h)f(data)h(as)g(y)m(ou)f(lik)m(e)g(on)g(eac)m(h)i(call)e
-(of)g Fj(BZ2_)150 1427 y(bzDecompress)p Fl(.)e(In)27
-b(the)i(limit,)d(it)i(is)f(acceptable)j(to)f(supply)d(and)h(remo)m(v)m
-(e)j(data)f(one)f(b)m(yte)h(at)g(a)g(time,)150 1537 y(although)f(this)f
-(w)m(ould)g(b)s(e)h(terribly)e(ine\016cien)m(t.)39 b(Y)-8
-b(ou)29 b(should)e(alw)m(a)m(ys)h(ensure)g(that)h(at)g(least)g(one)f(b)
-m(yte)150 1646 y(of)j(output)f(space)g(is)g(a)m(v)-5
-b(ailable)30 b(at)h(eac)m(h)g(call.)150 1803 y(Use)g(of)f
-Fj(BZ2_bzDecompress)c Fl(is)k(simpler)e(than)i Fj(BZ2_bzCompress)p
-Fl(.)150 1960 y(Y)-8 b(ou)31 b(should)d(pro)m(vide)h(input)f(and)i
-(remo)m(v)m(e)i(output)d(as)i(describ)s(ed)d(ab)s(o)m(v)m(e,)k(and)d
-(rep)s(eatedly)h(call)f Fj(BZ2_)150 2069 y(bzDecompress)35
-b Fl(un)m(til)i Fj(BZ_STREAM_END)e Fl(is)j(returned.)64
-b(App)s(earance)39 b(of)g Fj(BZ_STREAM_END)c Fl(denotes)150
-2179 y(that)47 b Fj(BZ2_bzDecompress)42 b Fl(has)k(detected)h(the)f
-(logical)g(end)g(of)g(the)h(compressed)e(stream.)89 b
-Fj(BZ2_)150 2289 y(bzDecompress)28 b Fl(will)g(not)j(pro)s(duce)f
-Fj(BZ_STREAM_END)d Fl(un)m(til)j(all)f(output)i(data)h(has)e(b)s(een)h
-(placed)f(in)m(to)150 2398 y(the)36 b(output)g(bu\013er,)h(so)g(once)g
-Fj(BZ_STREAM_END)32 b Fl(app)s(ears,)38 b(y)m(ou)e(are)h(guaran)m(teed)
-g(to)g(ha)m(v)m(e)h(a)m(v)-5 b(ailable)150 2508 y(all)29
-b(the)i(decompressed)f(output,)g(and)g Fj(BZ2_bzDecompressEnd)25
-b Fl(can)31 b(safely)f(b)s(e)f(called.)150 2665 y(If)40
-b(case)h(of)f(an)h(error)e(return)h(v)-5 b(alue,)42 b(y)m(ou)f(should)d
-(call)h Fj(BZ2_bzDecompressEnd)c Fl(to)41 b(clean)f(up)g(and)150
-2774 y(release)31 b(memory)-8 b(.)150 2931 y(P)m(ossible)29
-b(return)h(v)-5 b(alues:)572 3082 y Fj(BZ_PARAM_ERROR)663
-3186 y Fl(if)29 b Fj(strm)g Fl(is)h Fj(NULL)f Fl(or)h
-Fj(strm->s)f Fl(is)g Fj(NULL)663 3290 y Fl(or)h Fj(strm->avail_out)44
-b(<)j(1)572 3393 y(BZ_DATA_ERROR)663 3497 y Fl(if)29
-b(a)i(data)g(in)m(tegrit)m(y)f(error)g(is)g(detected)h(in)e(the)i
-(compressed)f(stream)572 3601 y Fj(BZ_DATA_ERROR_MAGIC)663
-3705 y Fl(if)f(the)i(compressed)f(stream)g(do)s(esn't)h(b)s(egin)e
-(with)g(the)h(righ)m(t)g(magic)h(b)m(ytes)572 3808 y
-Fj(BZ_MEM_ERROR)663 3912 y Fl(if)e(there)i(w)m(asn't)f(enough)h(memory)
-f(a)m(v)-5 b(ailable)572 4016 y Fj(BZ_STREAM_END)663
-4120 y Fl(if)29 b(the)i(logical)e(end)h(of)h(the)f(data)h(stream)g(w)m
-(as)g(detected)g(and)f(all)663 4224 y(output)g(in)f(has)h(b)s(een)g
-(consumed,)f(eg)j Fj(s->avail_out)44 b(>)k(0)572 4327
-y(BZ_OK)663 4431 y Fl(otherwise)150 4588 y(Allo)m(w)m(able)30
-b(next)g(actions:)572 4739 y Fj(BZ2_bzDecompress)663
-4843 y Fl(if)f Fj(BZ_OK)g Fl(w)m(as)i(returned)572 4946
-y Fj(BZ2_bzDecompressEnd)663 5050 y Fl(otherwise)p eop
 %%Page: 19 20
 19 19 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(19)150 299 y Ff(3.3.6)63
-b Fe(BZ2_bzDecompressEnd)390 486 y Fj(int)47 b(BZ2_bzDecompressEnd)42
-b(\()48 b(bz_stream)d(*strm)i(\);)150 643 y Fl(Releases)31
-b(all)e(memory)h(asso)s(ciated)h(with)e(a)i(decompression)e(stream.)150
-799 y(P)m(ossible)g(return)h(v)-5 b(alues:)572 950 y
-Fj(BZ_PARAM_ERROR)663 1054 y Fl(if)29 b Fj(strm)g Fl(is)h
-Fj(NULL)f Fl(or)h Fj(strm->s)f Fl(is)g Fj(NULL)572 1158
-y(BZ_OK)663 1262 y Fl(otherwise)150 1419 y(Allo)m(w)m(able)h(next)g
-(actions:)572 1570 y(None.)150 1857 y Fk(3.4)68 b(High-lev)l(el)47
-b(in)l(terface)150 2050 y Fl(This)35 b(in)m(terface)j(pro)m(vides)d
-(functions)h(for)g(reading)g(and)h(writing)e Fj(bzip2)g
-Fl(format)i(\014les.)59 b(First,)39 b(some)150 2159 y(general)30
-b(p)s(oin)m(ts.)225 2316 y Fi(\017)60 b Fl(All)35 b(of)h(the)g
-(functions)e(tak)m(e)k(an)e Fj(int*)f Fl(\014rst)g(argumen)m(t,)j
-Fj(bzerror)p Fl(.)56 b(After)36 b(eac)m(h)h(call,)g Fj(bzerror)330
-2426 y Fl(should)23 b(b)s(e)i(consulted)g(\014rst)g(to)h(determine)e
-(the)i(outcome)h(of)e(the)h(call.)38 b(If)25 b Fj(bzerror)f
-Fl(is)g Fj(BZ_OK)p Fl(,)i(the)330 2535 y(call)35 b(completed)g
-(successfully)-8 b(,)36 b(and)f(only)g(then)g(should)f(the)h(return)g
-(v)-5 b(alue)35 b(of)h(the)f(function)g(\(if)330 2645
-y(an)m(y\))30 b(b)s(e)f(consulted.)39 b(If)29 b Fj(bzerror)e
-Fl(is)h Fj(BZ_IO_ERROR)p Fl(,)f(there)i(w)m(as)h(an)f(error)g
-(reading/writing)e(the)330 2754 y(underlying)32 b(compressed)j(\014le,)
-h(and)f(y)m(ou)h(should)d(then)i(consult)g Fj(errno)p
-Fl(/)p Fj(perror)e Fl(to)j(determine)330 2864 y(the)i(cause)g(of)g(the)
-g(di\016cult)m(y)-8 b(.)61 b Fj(bzerror)36 b Fl(ma)m(y)i(also)g(b)s(e)f
-(set)h(to)g(v)-5 b(arious)37 b(other)h(v)-5 b(alues;)41
-b(precise)330 2974 y(details)29 b(are)i(giv)m(en)g(on)f(a)h(p)s
-(er-function)d(basis)h(b)s(elo)m(w.)225 3111 y Fi(\017)60
-b Fl(If)40 b Fj(bzerror)f Fl(indicates)g(an)i(error)f(\(ie,)j(an)m
-(ything)d(except)h Fj(BZ_OK)f Fl(and)g Fj(BZ_STREAM_END)p
-Fl(\),)g(y)m(ou)330 3220 y(should)56 b(immediately)h(call)g
-Fj(BZ2_bzReadClose)e Fl(\(or)j Fj(BZ2_bzWriteClose)p
-Fl(,)j(dep)s(ending)56 b(on)330 3330 y(whether)50 b(y)m(ou)g(are)h
-(attempting)g(to)g(read)f(or)g(to)i(write\))d(to)j(free)e(up)f(all)h
-(resources)g(asso)s(ci-)330 3439 y(ated)33 b(with)e(the)i(stream.)47
-b(Once)32 b(an)h(error)f(has)g(b)s(een)g(indicated,)f(b)s(eha)m(viour)g
-(of)i(all)e(calls)h(except)330 3549 y Fj(BZ2_bzReadClose)46
-b Fl(\()p Fj(BZ2_bzWriteClose)p Fl(\))h(is)j(unde\014ned.)99
-b(The)50 b(implication)e(is)i(that)h(\(1\))330 3659 y
-Fj(bzerror)44 b Fl(should)g(b)s(e)h(c)m(hec)m(k)m(ed)j(after)e(eac)m(h)
-h(call,)i(and)c(\(2\))i(if)e Fj(bzerror)f Fl(indicates)g(an)i(error,)
-330 3768 y Fj(BZ2_bzReadClose)26 b Fl(\()p Fj(BZ2_bzWriteClose)p
-Fl(\))h(should)h(then)i(b)s(e)g(called)g(to)h(clean)f(up.)225
-3905 y Fi(\017)60 b Fl(The)33 b Fj(FILE*)f Fl(argumen)m(ts)h(passed)g
-(to)h Fj(BZ2_bzReadOpen)p Fl(/)p Fj(BZ2_bzWriteOp)o(en)27
-b Fl(should)32 b(b)s(e)g(set)i(to)330 4015 y(binary)23
-b(mo)s(de.)38 b(Most)26 b(Unix)d(systems)i(will)d(do)i(this)g(b)m(y)g
-(default,)i(but)e(other)g(platforms,)h(including)330
-4124 y(Windo)m(ws)20 b(and)g(Mac,)k(will)19 b(not.)38
-b(If)20 b(y)m(ou)h(omit)g(this,)h(y)m(ou)f(ma)m(y)h(encoun)m(ter)f
-(problems)e(when)h(mo)m(ving)330 4234 y(co)s(de)31 b(to)g(new)f
-(platforms.)225 4371 y Fi(\017)60 b Fl(Memory)23 b(allo)s(cation)f
-(requests)h(are)g(handled)e(b)m(y)i Fj(malloc)p Fl(/)p
-Fj(free)p Fl(.)36 b(A)m(t)23 b(presen)m(t)g(there)g(is)f(no)h(facilit)m
-(y)330 4481 y(for)40 b(user-de\014ned)e(memory)i(allo)s(cators)g(in)f
-(the)h(\014le)g(I/O)g(functions)e(\(could)i(easily)f(b)s(e)g(added,)330
-4590 y(though\).)150 4842 y Ff(3.4.1)63 b Fe(BZ2_bzReadOpen)533
-5029 y Fj(typedef)46 b(void)h(BZFILE;)533 5236 y(BZFILE)f
-(*BZ2_bzReadOpen)e(\()j(int)g(*bzerror,)f(FILE)g(*f,)1726
-5340 y(int)h(small,)f(int)h(verbosity,)p eop
+b(with)g Fi(libbzip2)1881 b Fl(19)150 299 y Fj(Pro)m(vides)41
+b(more)g(input)f(and/out)g(output)h(bu\013er)e(space)i(for)f(the)h
+(library)-8 b(.)71 b(The)41 b(caller)h(main)m(tains)150
+408 y(input)30 b(and)f(output)h(bu\013ers,)g(and)g(uses)g
+Fi(BZ2_bzDecompress)25 b Fj(to)32 b(transfer)e(data)h(b)s(et)m(w)m(een)
+g(them.)150 565 y(Before)45 b(eac)m(h)h(call)f(to)h Fi
+(BZ2_bzDecompress)p Fj(,)e Fi(next_in)e Fj(should)i(p)s(oin)m(t)h(at)g
+(the)g(compressed)f(data,)150 675 y(and)33 b Fi(avail_in)e
+Fj(should)i(indicate)i(ho)m(w)e(man)m(y)h(b)m(ytes)g(the)g(library)g
+(ma)m(y)g(read.)50 b Fi(BZ2_bzDecompress)150 784 y Fj(up)s(dates)29
+b Fi(next_in)p Fj(,)g Fi(avail_in)f Fj(and)i Fi(total_in)e
+Fj(to)j(re\015ect)g(the)g(n)m(um)m(b)s(er)e(of)i(b)m(ytes)g(it)g(has)f
+(read.)150 941 y(Similarly)-8 b(,)40 b Fi(next_out)34
+b Fj(should)i(p)s(oin)m(t)h(to)h(a)f(bu\013er)f(in)h(whic)m(h)g(the)g
+(uncompressed)f(output)h(is)g(to)h(b)s(e)150 1051 y(placed,)f(with)e
+Fi(avail_out)e Fj(indicating)j(ho)m(w)f(m)m(uc)m(h)h(output)f(space)g
+(is)h(a)m(v)-5 b(ailable.)57 b Fi(BZ2_bzCompress)150
+1160 y Fj(up)s(dates)29 b Fi(next_out)p Fj(,)g Fi(avail_out)f
+Fj(and)h Fi(total_out)f Fj(to)j(re\015ect)h(the)e(n)m(um)m(b)s(er)g(of)
+g(b)m(ytes)h(output.)150 1317 y(Y)-8 b(ou)39 b(ma)m(y)g(pro)m(vide)g
+(and)f(remo)m(v)m(e)i(as)f(little)i(or)e(as)g(m)m(uc)m(h)f(data)h(as)g
+(y)m(ou)g(lik)m(e)h(on)f(eac)m(h)g(call)h(of)f Fi(BZ2_)150
+1427 y(bzDecompress)p Fj(.)d(In)27 b(the)h(limit,)h(it)f(is)f
+(acceptable)i(to)f(supply)e(and)g(remo)m(v)m(e)j(data)f(one)g(b)m(yte)g
+(at)f(a)h(time,)150 1537 y(although)f(this)g(w)m(ould)f(b)s(e)g
+(terribly)i(ine\016cien)m(t.)40 b(Y)-8 b(ou)27 b(should)f(alw)m(a)m(ys)
+i(ensure)e(that)h(at)g(least)h(one)f(b)m(yte)150 1646
+y(of)k(output)f(space)g(is)h(a)m(v)-5 b(ailable)32 b(at)f(eac)m(h)g
+(call.)150 1803 y(Use)g(of)f Fi(BZ2_bzDecompress)c Fj(is)k(simpler)h
+(than)f Fi(BZ2_bzCompress)p Fj(.)150 1960 y(Y)-8 b(ou)28
+b(should)f(pro)m(vide)i(input)f(and)f(remo)m(v)m(e)j(output)e(as)g
+(describ)s(ed)g(ab)s(o)m(v)m(e,)i(and)d(rep)s(eatedly)i(call)g
+Fi(BZ2_)150 2069 y(bzDecompress)k Fj(un)m(til)k Fi(BZ_STREAM_END)c
+Fj(is)k(returned.)59 b(App)s(earance)36 b(of)g Fi(BZ_STREAM_END)d
+Fj(denotes)150 2179 y(that)45 b Fi(BZ2_bzDecompress)40
+b Fj(has)45 b(detected)h(the)f(logical)i(end)d(of)g(the)h(compressed)g
+(stream.)84 b Fi(BZ2_)150 2289 y(bzDecompress)27 b Fj(will)k(not)g(pro)
+s(duce)e Fi(BZ_STREAM_END)e Fj(un)m(til)k(all)g(output)g(data)f(has)g
+(b)s(een)g(placed)h(in)m(to)150 2398 y(the)k(output)f(bu\013er,)i(so)e
+(once)i Fi(BZ_STREAM_END)31 b Fj(app)s(ears,)k(y)m(ou)g(are)g(guaran)m
+(teed)g(to)h(ha)m(v)m(e)f(a)m(v)-5 b(ailable)150 2508
+y(all)31 b(the)g(decompressed)f(output,)h(and)e Fi(BZ2_bzDecompressEnd)
+c Fj(can)31 b(safely)f(b)s(e)g(called.)150 2665 y(If)38
+b(case)i(of)f(an)f(error)h(return)f(v)-5 b(alue,)42 b(y)m(ou)d(should)e
+(call)j Fi(BZ2_bzDecompressEnd)33 b Fj(to)40 b(clean)f(up)f(and)150
+2774 y(release)32 b(memory)-8 b(.)150 2931 y(P)m(ossible)32
+b(return)e(v)-5 b(alues:)572 3082 y Fi(BZ_PARAM_ERROR)663
+3186 y Fj(if)30 b Fi(strm)f Fj(is)i Fi(NULL)e Fj(or)i
+Fi(strm->s)d Fj(is)i Fi(NULL)663 3290 y Fj(or)g Fi(strm->avail_out)44
+b(<)j(1)572 3393 y(BZ_DATA_ERROR)663 3497 y Fj(if)30
+b(a)h(data)f(in)m(tegrit)m(y)j(error)e(is)f(detected)i(in)e(the)h
+(compressed)g(stream)572 3601 y Fi(BZ_DATA_ERROR_MAGIC)663
+3705 y Fj(if)f(the)h(compressed)f(stream)h(do)s(esn't)f(b)s(egin)g
+(with)h(the)f(righ)m(t)i(magic)f(b)m(ytes)572 3808 y
+Fi(BZ_MEM_ERROR)663 3912 y Fj(if)f(there)h(w)m(asn't)g(enough)f(memory)
+h(a)m(v)-5 b(ailable)572 4016 y Fi(BZ_STREAM_END)663
+4120 y Fj(if)30 b(the)h(logical)h(end)e(of)h(the)f(data)h(stream)g(w)m
+(as)f(detected)i(and)e(all)663 4224 y(output)g(in)g(has)g(b)s(een)g
+(consumed,)g(eg)h Fi(s->avail_out)44 b(>)k(0)572 4327
+y(BZ_OK)663 4431 y Fj(otherwise)150 4588 y(Allo)m(w)m(able)32
+b(next)f(actions:)572 4739 y Fi(BZ2_bzDecompress)663
+4843 y Fj(if)f Fi(BZ_OK)f Fj(w)m(as)h(returned)572 4946
+y Fi(BZ2_bzDecompressEnd)663 5050 y Fj(otherwise)p eop
 %%Page: 20 21
-20 20 bop 150 -116 a Fl(Chapter)30 b(3:)h(Programming)e(with)g
-Fj(libbzip2)1891 b Fl(20)1726 299 y Fj(void)47 b(*unused,)f(int)g
-(nUnused)g(\);)150 456 y Fl(Prepare)29 b(to)g(read)g(compressed)f(data)
-i(from)e(\014le)g(handle)f Fj(f)p Fl(.)40 b Fj(f)29 b
-Fl(should)d(refer)j(to)h(a)f(\014le)f(whic)m(h)f(has)i(b)s(een)150
-565 y(op)s(ened)h(for)h(reading,)f(and)h(for)f(whic)m(h)g(the)h(error)g
-(indicator)e(\()p Fj(ferror\(f\))p Fl(\)is)f(not)k(set.)42
-b(If)31 b Fj(small)e Fl(is)h(1,)150 675 y(the)h(library)d(will)f(try)j
-(to)i(decompress)e(using)f(less)g(memory)-8 b(,)31 b(at)g(the)g(exp)s
-(ense)f(of)g(sp)s(eed.)150 832 y(F)-8 b(or)39 b(reasons)f(explained)f
-(b)s(elo)m(w,)j Fj(BZ2_bzRead)35 b Fl(will)h(decompress)i(the)g
-Fj(nUnused)e Fl(b)m(ytes)j(starting)f(at)150 941 y Fj(unused)p
-Fl(,)k(b)s(efore)e(starting)h(to)g(read)g(from)f(the)h(\014le)f
-Fj(f)p Fl(.)71 b(A)m(t)42 b(most)f Fj(BZ_MAX_UNUSED)c
-Fl(b)m(ytes)k(ma)m(y)h(b)s(e)150 1051 y(supplied)32 b(lik)m(e)k(this.)
-55 b(If)36 b(this)e(facilit)m(y)h(is)g(not)h(required,)g(y)m(ou)g
-(should)e(pass)h Fj(NULL)g Fl(and)g Fj(0)g Fl(for)h Fj(unused)150
-1160 y Fl(and)30 b(n)p Fj(Unused)e Fl(resp)s(ectiv)m(ely)-8
-b(.)150 1317 y(F)g(or)31 b(the)g(meaning)e(of)i(parameters)g
-Fj(small)e Fl(and)g Fj(verbosity)p Fl(,)f(see)j Fj
-(BZ2_bzDecompressInit)p Fl(.)150 1474 y(The)k(amoun)m(t)g(of)g(memory)g
-(needed)g(to)g(decompress)g(a)h(\014le)e(cannot)h(b)s(e)g(determined)e
-(un)m(til)h(the)h(\014le's)150 1584 y(header)22 b(has)f(b)s(een)g
-(read.)38 b(So)22 b(it)f(is)g(p)s(ossible)e(that)k Fj(BZ2_bzReadOpen)17
-b Fl(returns)k Fj(BZ_OK)f Fl(but)h(a)i(subsequen)m(t)150
-1693 y(call)30 b(of)g Fj(BZ2_bzRead)e Fl(will)f(return)j
-Fj(BZ_MEM_ERROR)p Fl(.)150 1850 y(P)m(ossible)f(assignmen)m(ts)h(to)h
-Fj(bzerror)p Fl(:)572 2001 y Fj(BZ_CONFIG_ERROR)663 2105
-y Fl(if)e(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
-2209 y Fj(BZ_PARAM_ERROR)663 2313 y Fl(if)g Fj(f)h Fl(is)g
-Fj(NULL)663 2416 y Fl(or)g Fj(small)f Fl(is)g(neither)h
-Fj(0)g Fl(nor)g Fj(1)663 2520 y Fl(or)g Fj(\(unused)46
-b(==)h(NULL)g(&&)g(nUnused)f(!=)h(0\))663 2624 y Fl(or)30
-b Fj(\(unused)46 b(!=)h(NULL)g(&&)g(!\(0)g(<=)g(nUnused)f(<=)h
-(BZ_MAX_UNUSED\)\))572 2728 y(BZ_IO_ERROR)663 2831 y
-Fl(if)29 b Fj(ferror\(f\))f Fl(is)h(nonzero)572 2935
-y Fj(BZ_MEM_ERROR)663 3039 y Fl(if)g(insu\016cien)m(t)g(memory)h(is)f
-(a)m(v)-5 b(ailable)572 3143 y Fj(BZ_OK)663 3247 y Fl(otherwise.)150
-3403 y(P)m(ossible)29 b(return)h(v)-5 b(alues:)572 3554
-y(P)m(oin)m(ter)31 b(to)g(an)f(abstract)h Fj(BZFILE)663
-3658 y Fl(if)e Fj(bzerror)f Fl(is)i Fj(BZ_OK)572 3762
-y(NULL)663 3866 y Fl(otherwise)150 4023 y(Allo)m(w)m(able)g(next)g
-(actions:)572 4174 y Fj(BZ2_bzRead)663 4277 y Fl(if)f
-Fj(bzerror)f Fl(is)i Fj(BZ_OK)572 4381 y(BZ2_bzClose)663
-4485 y Fl(otherwise)150 4887 y Ff(3.4.2)63 b Fe(BZ2_bzRead)533
-5074 y Fj(int)47 b(BZ2_bzRead)e(\()j(int)e(*bzerror,)g(BZFILE)g(*b,)h
-(void)f(*buf,)h(int)g(len)g(\);)150 5230 y Fl(Reads)35
-b(up)f(to)h Fj(len)f Fl(\(uncompressed\))h(b)m(ytes)g(from)f(the)h
-(compressed)g(\014le)f Fj(b)g Fl(in)m(to)h(the)g(bu\013er)f
-Fj(buf)p Fl(.)53 b(If)150 5340 y(the)30 b(read)f(w)m(as)h(successful,)f
-Fj(bzerror)e Fl(is)i(set)h(to)g Fj(BZ_OK)e Fl(and)h(the)h(n)m(um)m(b)s
-(er)e(of)i(b)m(ytes)g(read)f(is)g(returned.)p eop
+20 20 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
+b(with)g Fi(libbzip2)1881 b Fl(20)150 299 y Fe(3.3.6)63
+b Fd(BZ2_bzDecompressEnd)390 486 y Fi(int)47 b(BZ2_bzDecompressEnd)42
+b(\()48 b(bz_stream)d(*strm)i(\);)150 643 y Fj(Releases)32
+b(all)f(memory)f(asso)s(ciated)i(with)e(a)h(decompression)f(stream.)150
+799 y(P)m(ossible)i(return)e(v)-5 b(alues:)572 950 y
+Fi(BZ_PARAM_ERROR)663 1054 y Fj(if)30 b Fi(strm)f Fj(is)i
+Fi(NULL)e Fj(or)i Fi(strm->s)d Fj(is)i Fi(NULL)572 1158
+y(BZ_OK)663 1262 y Fj(otherwise)150 1419 y(Allo)m(w)m(able)i(next)f
+(actions:)572 1570 y(None.)150 1857 y Fk(3.4)68 b(High-lev)l(el)47
+b(in)l(terface)150 2050 y Fj(This)35 b(in)m(terface)i(pro)m(vides)e
+(functions)g(for)g(reading)g(and)f(writing)i Fi(bzip2)d
+Fj(format)j(\014les.)55 b(First,)37 b(some)150 2159 y(general)31
+b(p)s(oin)m(ts.)225 2316 y Fh(\017)60 b Fj(All)35 b(of)g(the)h
+(functions)e(tak)m(e)j(an)d Fi(int*)g Fj(\014rst)h(argumen)m(t,)i
+Fi(bzerror)p Fj(.)52 b(After)36 b(eac)m(h)f(call,)j Fi(bzerror)330
+2426 y Fj(should)23 b(b)s(e)f(consulted)i(\014rst)f(to)i(determine)f
+(the)g(outcome)h(of)e(the)h(call.)40 b(If)23 b Fi(bzerror)e
+Fj(is)j Fi(BZ_OK)p Fj(,)g(the)330 2535 y(call)35 b(completed)g
+(successfully)-8 b(,)36 b(and)d(only)i(then)e(should)h(the)g(return)g
+(v)-5 b(alue)34 b(of)g(the)h(function)f(\(if)330 2645
+y(an)m(y\))27 b(b)s(e)e(consulted.)40 b(If)26 b Fi(bzerror)f
+Fj(is)h Fi(BZ_IO_ERROR)p Fj(,)e(there)j(w)m(as)g(an)e(error)i
+(reading/writing)h(the)330 2754 y(underlying)k(compressed)h(\014le,)h
+(and)e(y)m(ou)h(should)f(then)h(consult)g Fi(errno)p
+Fj(/)p Fi(perror)e Fj(to)i(determine)330 2864 y(the)k(cause)f(of)h(the)
+f(di\016cult)m(y)-8 b(.)60 b Fi(bzerror)34 b Fj(ma)m(y)j(also)g(b)s(e)e
+(set)i(to)g(v)-5 b(arious)37 b(other)g(v)-5 b(alues;)39
+b(precise)330 2974 y(details)31 b(are)g(giv)m(en)g(on)g(a)f(p)s
+(er-function)g(basis)g(b)s(elo)m(w.)225 3111 y Fh(\017)60
+b Fj(If)39 b Fi(bzerror)e Fj(indicates)i(an)g(error)g(\(ie,)k(an)m
+(ything)c(except)h Fi(BZ_OK)d Fj(and)i Fi(BZ_STREAM_END)p
+Fj(\),)f(y)m(ou)330 3220 y(should)56 b(immediately)i(call)g
+Fi(BZ2_bzReadClose)53 b Fj(\(or)58 b Fi(BZ2_bzWriteClose)p
+Fj(,)h(dep)s(ending)d(on)330 3330 y(whether)37 b(y)m(ou)h(are)f
+(attempting)i(to)f(read)f(or)h(to)g(write\))g(to)g(free)g(up)e(all)i
+(resources)g(asso)s(ciated)330 3439 y(with)44 b(the)g(stream.)83
+b(Once)44 b(an)g(error)h(has)e(b)s(een)h(indicated,)k(b)s(eha)m(viour)c
+(of)g(all)h(calls)g(except)330 3549 y Fi(BZ2_bzReadClose)h
+Fj(\()p Fi(BZ2_bzWriteClose)p Fj(\))h(is)j(unde\014ned.)99
+b(The)51 b(implication)g(is)g(that)g(\(1\))330 3659 y
+Fi(bzerror)42 b Fj(should)i(b)s(e)f(c)m(hec)m(k)m(ed)k(after)e(eac)m(h)
+g(call,)k(and)43 b(\(2\))j(if)e Fi(bzerror)e Fj(indicates)j(an)f
+(error,)330 3768 y Fi(BZ2_bzReadClose)26 b Fj(\()p Fi(BZ2_bzWriteClose)
+p Fj(\))h(should)i(then)h(b)s(e)g(called)i(to)f(clean)g(up.)225
+3905 y Fh(\017)60 b Fj(The)32 b Fi(FILE*)f Fj(argumen)m(ts)i(passed)f
+(to)h Fi(BZ2_bzReadOpen)p Fj(/)p Fi(BZ2_bzWriteO)o(pen)26
+b Fj(should)31 b(b)s(e)h(set)h(to)330 4015 y(binary)22
+b(mo)s(de.)38 b(Most)24 b(Unix)f(systems)g(will)g(do)g(this)g(b)m(y)g
+(default,)i(but)d(other)i(platforms,)g(including)330
+4124 y(Windo)m(ws)41 b(and)g(Mac,)46 b(will)c(not.)76
+b(If)41 b(y)m(ou)i(omit)f(this,)j(y)m(ou)e(ma)m(y)f(encoun)m(ter)h
+(problems)e(when)330 4234 y(mo)m(ving)31 b(co)s(de)g(to)g(new)f
+(platforms.)225 4371 y Fh(\017)60 b Fj(Memory)45 b(allo)s(cation)h
+(requests)f(are)g(handled)e(b)m(y)h Fi(malloc)p Fj(/)p
+Fi(free)p Fj(.)80 b(A)m(t)45 b(presen)m(t)g(there)g(is)f(no)330
+4481 y(facilit)m(y)39 b(for)f(user-de\014ned)e(memory)h(allo)s(cators)j
+(in)d(the)g(\014le)h(I/O)g(functions)f(\(could)g(easily)i(b)s(e)330
+4590 y(added,)30 b(though\).)150 4842 y Fe(3.4.1)63 b
+Fd(BZ2_bzReadOpen)533 5029 y Fi(typedef)46 b(void)h(BZFILE;)533
+5236 y(BZFILE)f(*BZ2_bzReadOpen)e(\()j(int)g(*bzerror,)f(FILE)g(*f,)
+1726 5340 y(int)h(small,)f(int)h(verbosity,)p eop
 %%Page: 21 22
-21 21 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(21)150 299 y(If)33 b(the)g(logical)g
-(end-of-stream)h(w)m(as)g(detected,)i Fj(bzerror)31 b
-Fl(will)g(b)s(e)h(set)i(to)g Fj(BZ_STREAM_END)p Fl(,)d(and)i(the)150
-408 y(n)m(um)m(b)s(er)c(of)i(b)m(ytes)f(read)h(is)e(returned.)40
-b(All)29 b(other)h Fj(bzerror)f Fl(v)-5 b(alues)29 b(denote)i(an)g
-(error.)150 565 y Fj(BZ2_bzRead)37 b Fl(will)f(supply)h
-Fj(len)i Fl(b)m(ytes,)j(unless)c(the)i(logical)f(stream)h(end)e(is)h
-(detected)i(or)e(an)g(error)150 675 y(o)s(ccurs.)75 b(Because)43
-b(of)f(this,)i(it)d(is)g(p)s(ossible)e(to)k(detect)g(the)f(stream)g
-(end)f(b)m(y)h(observing)f(when)g(the)150 784 y(n)m(um)m(b)s(er)29
-b(of)h(b)m(ytes)g(returned)f(is)g(less)g(than)h(the)g(n)m(um)m(b)s(er)f
-(requested.)40 b(Nev)m(ertheless,)31 b(this)e(is)g(regarded)150
-894 y(as)38 b(inadvisable;)g(y)m(ou)g(should)d(instead)i(c)m(hec)m(k)i
-Fj(bzerror)d Fl(after)i(ev)m(ery)g(call)e(and)h(w)m(atc)m(h)i(out)f
-(for)f Fj(BZ_)150 1004 y(STREAM_END)p Fl(.)150 1160 y(In)m(ternally)-8
-b(,)47 b Fj(BZ2_bzRead)41 b Fl(copies)j(data)g(from)g(the)g(compressed)
-g(\014le)f(in)f(c)m(h)m(unks)i(of)g(size)g Fj(BZ_MAX_)150
-1270 y(UNUSED)31 b Fl(b)m(ytes)i(b)s(efore)f(decompressing)f(it.)47
-b(If)32 b(the)h(\014le)e(con)m(tains)i(more)g(b)m(ytes)g(than)f
-(strictly)f(needed)150 1380 y(to)48 b(reac)m(h)f(the)g(logical)f
-(end-of-stream,)52 b Fj(BZ2_bzRead)44 b Fl(will)g(almost)j(certainly)f
-(read)h(some)g(of)g(the)150 1489 y(trailing)c(data)j(b)s(efore)e
-(signalling)f Fj(BZ_SEQUENCE_END)p Fl(.)80 b(T)-8 b(o)46
-b(collect)f(the)g(read)g(but)g(un)m(used)e(data)150 1599
-y(once)29 b Fj(BZ_SEQUENCE_END)24 b Fl(has)k(app)s(eared,)g(call)f
-Fj(BZ2_bzReadGetUnused)c Fl(immediately)j(b)s(efore)i
-Fj(BZ2_)150 1708 y(bzReadClose)p Fl(.)150 1865 y(P)m(ossible)h
-(assignmen)m(ts)h(to)h Fj(bzerror)p Fl(:)572 2016 y Fj(BZ_PARAM_ERROR)
-663 2120 y Fl(if)e Fj(b)h Fl(is)g Fj(NULL)f Fl(or)h Fj(buf)g
-Fl(is)f Fj(NULL)g Fl(or)i Fj(len)46 b(<)i(0)572 2224
-y(BZ_SEQUENCE_ERROR)663 2328 y Fl(if)29 b Fj(b)h Fl(w)m(as)h(op)s(ened)
-e(with)h Fj(BZ2_bzWriteOpen)572 2431 y(BZ_IO_ERROR)663
-2535 y Fl(if)f(there)i(is)e(an)h(error)g(reading)g(from)g(the)g
-(compressed)g(\014le)572 2639 y Fj(BZ_UNEXPECTED_EOF)663
-2743 y Fl(if)f(the)i(compressed)f(\014le)f(ended)h(b)s(efore)g(the)g
-(logical)g(end-of-stream)h(w)m(as)g(detected)572 2847
-y Fj(BZ_DATA_ERROR)663 2950 y Fl(if)e(a)i(data)g(in)m(tegrit)m(y)f
-(error)g(w)m(as)h(detected)h(in)d(the)h(compressed)g(stream)572
-3054 y Fj(BZ_DATA_ERROR_MAGIC)663 3158 y Fl(if)f(the)i(stream)f(do)s
-(es)g(not)h(b)s(egin)e(with)g(the)i(requisite)e(header)h(b)m(ytes)h
-(\(ie,)f(is)g(not)663 3262 y(a)g Fj(bzip2)f Fl(data)i(\014le\).)61
-b(This)28 b(is)i(really)f(a)i(sp)s(ecial)e(case)i(of)g
-Fj(BZ_DATA_ERROR)p Fl(.)572 3365 y Fj(BZ_MEM_ERROR)663
-3469 y Fl(if)e(insu\016cien)m(t)g(memory)h(w)m(as)h(a)m(v)-5
-b(ailable)572 3573 y Fj(BZ_STREAM_END)663 3677 y Fl(if)29
-b(the)i(logical)e(end)h(of)h(stream)f(w)m(as)h(detected.)572
-3781 y Fj(BZ_OK)663 3884 y Fl(otherwise.)150 4041 y(P)m(ossible)e
-(return)h(v)-5 b(alues:)572 4192 y(n)m(um)m(b)s(er)29
-b(of)h(b)m(ytes)h(read)663 4296 y(if)e Fj(bzerror)f Fl(is)i
-Fj(BZ_OK)f Fl(or)h Fj(BZ_STREAM_END)572 4400 y Fl(unde\014ned)663
-4503 y(otherwise)150 4660 y(Allo)m(w)m(able)g(next)g(actions:)572
-4811 y(collect)h(data)g(from)f Fj(buf)p Fl(,)f(then)h
-Fj(BZ2_bzRead)e Fl(or)i Fj(BZ2_bzReadClose)663 4915 y
-Fl(if)f Fj(bzerror)f Fl(is)i Fj(BZ_OK)572 5019 y Fl(collect)h(data)g
-(from)f Fj(buf)p Fl(,)f(then)h Fj(BZ2_bzReadClose)d Fl(or)j
-Fj(BZ2_bzReadGetUnused)663 5123 y Fl(if)f Fj(bzerror)f
-Fl(is)i Fj(BZ_SEQUENCE_END)572 5226 y(BZ2_bzReadClose)663
-5330 y Fl(otherwise)p eop
+21 21 bop 150 -116 a Fl(Chapter)30 b(3:)h(Programming)e(with)g
+Fi(libbzip2)1891 b Fl(21)1726 299 y Fi(void)47 b(*unused,)f(int)g
+(nUnused)g(\);)150 456 y Fj(Prepare)27 b(to)g(read)f(compressed)h(data)
+g(from)f(\014le)g(handle)g Fi(f)p Fj(.)39 b Fi(f)26 b
+Fj(should)g(refer)g(to)i(a)e(\014le)h(whic)m(h)f(has)g(b)s(een)150
+565 y(op)s(ened)i(for)g(reading,)i(and)d(for)i(whic)m(h)f(the)h(error)g
+(indicator)h(\()p Fi(ferror\(f\))p Fj(\)is)c(not)j(set.)41
+b(If)29 b Fi(small)e Fj(is)h(1,)150 675 y(the)j(library)f(will)h(try)f
+(to)i(decompress)e(using)g(less)h(memory)-8 b(,)31 b(at)g(the)f(exp)s
+(ense)g(of)h(sp)s(eed.)150 832 y(F)-8 b(or)37 b(reasons)f(explained)h
+(b)s(elo)m(w,)h Fi(BZ2_bzRead)33 b Fj(will)k(decompress)f(the)h
+Fi(nUnused)d Fj(b)m(ytes)j(starting)g(at)150 941 y Fi(unused)p
+Fj(,)j(b)s(efore)f(starting)h(to)g(read)f(from)g(the)h(\014le)f
+Fi(f)p Fj(.)67 b(A)m(t)40 b(most)g Fi(BZ_MAX_UNUSED)35
+b Fj(b)m(ytes)40 b(ma)m(y)g(b)s(e)150 1051 y(supplied)34
+b(lik)m(e)i(this.)54 b(If)34 b(this)h(facilit)m(y)i(is)e(not)g
+(required,)h(y)m(ou)f(should)f(pass)g Fi(NULL)f Fj(and)h
+Fi(0)h Fj(for)g Fi(unused)150 1160 y Fj(and)30 b(n)p
+Fi(Unused)e Fj(resp)s(ectiv)m(ely)-8 b(.)150 1317 y(F)g(or)31
+b(the)g(meaning)f(of)h(parameters)g Fi(small)e Fj(and)g
+Fi(verbosity)p Fj(,)f(see)j Fi(BZ2_bzDecompressInit)p
+Fj(.)150 1474 y(The)i(amoun)m(t)g(of)f(memory)h(needed)g(to)g
+(decompress)g(a)g(\014le)g(cannot)g(b)s(e)f(determined)h(un)m(til)g
+(the)g(\014le's)150 1584 y(header)h(has)f(b)s(een)g(read.)51
+b(So)33 b(it)i(is)e(p)s(ossible)h(that)g Fi(BZ2_bzReadOpen)c
+Fj(returns)j Fi(BZ_OK)g Fj(but)g(a)h(subse-)150 1693
+y(quen)m(t)d(call)g(of)g Fi(BZ2_bzRead)c Fj(will)k(return)f
+Fi(BZ_MEM_ERROR)p Fj(.)150 1850 y(P)m(ossible)i(assignmen)m(ts)e(to)i
+Fi(bzerror)p Fj(:)572 2001 y Fi(BZ_CONFIG_ERROR)663 2105
+y Fj(if)e(the)h(library)f(has)g(b)s(een)g(mis-compiled)572
+2209 y Fi(BZ_PARAM_ERROR)663 2313 y Fj(if)g Fi(f)g Fj(is)h
+Fi(NULL)663 2416 y Fj(or)f Fi(small)f Fj(is)i(neither)g
+Fi(0)f Fj(nor)g Fi(1)663 2520 y Fj(or)g Fi(\(unused)46
+b(==)h(NULL)g(&&)g(nUnused)f(!=)h(0\))663 2624 y Fj(or)30
+b Fi(\(unused)46 b(!=)h(NULL)g(&&)g(!\(0)g(<=)g(nUnused)f(<=)h
+(BZ_MAX_UNUSED\)\))572 2728 y(BZ_IO_ERROR)663 2831 y
+Fj(if)30 b Fi(ferror\(f\))e Fj(is)i(nonzero)572 2935
+y Fi(BZ_MEM_ERROR)663 3039 y Fj(if)g(insu\016cien)m(t)h(memory)f(is)h
+(a)m(v)-5 b(ailable)572 3143 y Fi(BZ_OK)663 3247 y Fj(otherwise.)150
+3403 y(P)m(ossible)32 b(return)e(v)-5 b(alues:)572 3554
+y(P)m(oin)m(ter)32 b(to)f(an)f(abstract)i Fi(BZFILE)663
+3658 y Fj(if)e Fi(bzerror)e Fj(is)j Fi(BZ_OK)572 3762
+y(NULL)663 3866 y Fj(otherwise)150 4023 y(Allo)m(w)m(able)h(next)f
+(actions:)572 4174 y Fi(BZ2_bzRead)663 4277 y Fj(if)f
+Fi(bzerror)e Fj(is)j Fi(BZ_OK)572 4381 y(BZ2_bzClose)663
+4485 y Fj(otherwise)150 4887 y Fe(3.4.2)63 b Fd(BZ2_bzRead)533
+5074 y Fi(int)47 b(BZ2_bzRead)e(\()j(int)e(*bzerror,)g(BZFILE)g(*b,)h
+(void)f(*buf,)h(int)g(len)g(\);)150 5230 y Fj(Reads)33
+b(up)e(to)j Fi(len)d Fj(\(uncompressed\))i(b)m(ytes)g(from)f(the)h
+(compressed)g(\014le)g Fi(b)f Fj(in)m(to)i(the)f(bu\013er)f
+Fi(buf)p Fj(.)46 b(If)150 5340 y(the)28 b(read)f(w)m(as)h(successful,)g
+Fi(bzerror)d Fj(is)j(set)g(to)g Fi(BZ_OK)f Fj(and)f(the)i(n)m(um)m(b)s
+(er)e(of)i(b)m(ytes)g(read)g(is)f(returned.)p eop
 %%Page: 22 23
 22 22 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(22)150 299 y Ff(3.4.3)63
-b Fe(BZ2_bzReadGetUnused)533 486 y Fj(void)47 b(BZ2_bzReadGetUnused)42
-b(\()48 b(int*)e(bzerror,)g(BZFILE)g(*b,)1822 589 y(void**)g(unused,)g
-(int*)g(nUnused)g(\);)150 746 y Fl(Returns)36 b(data)i(whic)m(h)d(w)m
-(as)j(read)f(from)f(the)h(compressed)g(\014le)f(but)g(w)m(as)h(not)h
-(needed)e(to)i(get)g(to)g(the)150 856 y(logical)k(end-of-stream.)78
-b Fj(*unused)41 b Fl(is)h(set)h(to)g(the)g(address)f(of)g(the)h(data,)k
-(and)42 b Fj(*nUnused)e Fl(to)k(the)150 965 y(n)m(um)m(b)s(er)29
-b(of)i(b)m(ytes.)41 b Fj(*nUnused)28 b Fl(will)g(b)s(e)h(set)i(to)g(a)g
-(v)-5 b(alue)30 b(b)s(et)m(w)m(een)h Fj(0)f Fl(and)g
-Fj(BZ_MAX_UNUSED)d Fl(inclusiv)m(e.)150 1122 y(This)d(function)h(ma)m
-(y)h(only)g(b)s(e)f(called)g(once)i Fj(BZ2_bzRead)c Fl(has)j(signalled)
-e Fj(BZ_STREAM_END)e Fl(but)j(b)s(efore)150 1232 y Fj(BZ2_bzReadClose)p
-Fl(.)150 1389 y(P)m(ossible)k(assignmen)m(ts)h(to)h Fj(bzerror)p
-Fl(:)572 1540 y Fj(BZ_PARAM_ERROR)663 1644 y Fl(if)e
-Fj(b)h Fl(is)g Fj(NULL)663 1747 y Fl(or)g Fj(unused)f
-Fl(is)g Fj(NULL)g Fl(or)i Fj(nUnused)d Fl(is)i Fj(NULL)572
-1851 y(BZ_SEQUENCE_ERROR)663 1955 y Fl(if)f Fj(BZ_STREAM_END)e
-Fl(has)j(not)h(b)s(een)e(signalled)663 2059 y(or)h(if)f
-Fj(b)h Fl(w)m(as)h(op)s(ened)f(with)f Fj(BZ2_bzWriteOpen)542
-2162 y(BZ_OK)663 2266 y Fl(otherwise)150 2423 y(Allo)m(w)m(able)h(next)
-g(actions:)572 2574 y Fj(BZ2_bzReadClose)150 2882 y Ff(3.4.4)63
-b Fe(BZ2_bzReadClose)533 3068 y Fj(void)47 b(BZ2_bzReadClose)c(\()48
-b(int)f(*bzerror,)e(BZFILE)h(*b)h(\);)150 3225 y Fl(Releases)36
-b(all)e(memory)h(p)s(ertaining)e(to)i(the)h(compressed)f(\014le)f
-Fj(b)p Fl(.)54 b Fj(BZ2_bzReadClose)31 b Fl(do)s(es)k(not)h(call)150
-3335 y Fj(fclose)c Fl(on)h(the)h(underlying)d(\014le)h(handle,)h(so)h
-(y)m(ou)g(should)e(do)h(that)h(y)m(ourself)f(if)g(appropriate.)49
-b Fj(BZ2_)150 3445 y(bzReadClose)27 b Fl(should)i(b)s(e)g(called)h(to)h
-(clean)f(up)g(after)h(all)e(error)h(situations.)150 3601
-y(P)m(ossible)f(assignmen)m(ts)h(to)h Fj(bzerror)p Fl(:)572
-3752 y Fj(BZ_SEQUENCE_ERROR)663 3856 y Fl(if)e Fj(b)h
-Fl(w)m(as)h(op)s(ened)e(with)h Fj(BZ2_bzOpenWrite)572
-3960 y(BZ_OK)663 4064 y Fl(otherwise)150 4221 y(Allo)m(w)m(able)g(next)
-g(actions:)572 4372 y(none)150 4679 y Ff(3.4.5)63 b Fe(BZ2_bzWriteOpen)
-533 4866 y Fj(BZFILE)46 b(*BZ2_bzWriteOpen)e(\()j(int)g(*bzerror,)e
-(FILE)i(*f,)1774 4970 y(int)g(blockSize100k,)d(int)j(verbosity,)1774
-5074 y(int)g(workFactor)e(\);)150 5230 y Fl(Prepare)33
-b(to)g(write)f(compressed)h(data)h(to)f(\014le)f(handle)g
-Fj(f)p Fl(.)47 b Fj(f)33 b Fl(should)e(refer)i(to)g(a)g(\014le)f(whic)m
-(h)g(has)h(b)s(een)150 5340 y(op)s(ened)d(for)g(writing,)e(and)i(for)g
-(whic)m(h)f(the)i(error)f(indicator)f(\()p Fj(ferror\(f\))p
-Fl(\)is)f(not)i(set.)p eop
+b(with)g Fi(libbzip2)1881 b Fl(22)150 299 y Fj(If)32
+b(the)g(logical)i(end-of-stream)e(w)m(as)g(detected,)i
+Fi(bzerror)c Fj(will)i(b)s(e)g(set)g(to)h Fi(BZ_STREAM_END)p
+Fj(,)c(and)i(the)150 408 y(n)m(um)m(b)s(er)e(of)i(b)m(ytes)g(read)f(is)
+h(returned.)40 b(All)30 b(other)h Fi(bzerror)e Fj(v)-5
+b(alues)30 b(denote)h(an)f(error.)150 565 y Fi(BZ2_bzRead)k
+Fj(will)k(supply)e Fi(len)g Fj(b)m(ytes,)k(unless)d(the)g(logical)j
+(stream)d(end)g(is)g(detected)i(or)f(an)e(error)150 675
+y(o)s(ccurs.)70 b(Because)40 b(of)g(this,)j(it)e(is)f(p)s(ossible)f(to)
+i(detect)h(the)e(stream)h(end)e(b)m(y)h(observing)h(when)e(the)150
+784 y(n)m(um)m(b)s(er)24 b(of)h(b)m(ytes)h(returned)e(is)h(less)h(than)
+e(the)i(n)m(um)m(b)s(er)e(requested.)39 b(Nev)m(ertheless,)29
+b(this)c(is)g(regarded)150 894 y(as)37 b(inadvisable;)i(y)m(ou)e
+(should)f(instead)h(c)m(hec)m(k)h Fi(bzerror)c Fj(after)k(ev)m(ery)f
+(call)h(and)e(w)m(atc)m(h)h(out)g(for)g Fi(BZ_)150 1004
+y(STREAM_END)p Fj(.)150 1160 y(In)m(ternally)-8 b(,)47
+b Fi(BZ2_bzRead)39 b Fj(copies)k(data)f(from)g(the)g(compressed)g
+(\014le)g(in)g(c)m(h)m(unks)g(of)g(size)h Fi(BZ_MAX_)150
+1270 y(UNUSED)28 b Fj(b)m(ytes)j(b)s(efore)e(decompressing)h(it.)41
+b(If)30 b(the)g(\014le)g(con)m(tains)h(more)f(b)m(ytes)h(than)e
+(strictly)i(needed)150 1380 y(to)46 b(reac)m(h)g(the)f(logical)i
+(end-of-stream,)j Fi(BZ2_bzRead)42 b Fj(will)j(almost)h(certainly)g
+(read)f(some)g(of)h(the)150 1489 y(trailing)f(data)g(b)s(efore)f
+(signalling)h Fi(BZ_SEQUENCE_END)p Fj(.)78 b(T)-8 b(o)45
+b(collect)i(the)d(read)g(but)g(un)m(used)f(data)150 1599
+y(once)27 b Fi(BZ_SEQUENCE_END)22 b Fj(has)k(app)s(eared,)g(call)h
+Fi(BZ2_bzReadGetUnused)21 b Fj(immediately)28 b(b)s(efore)e
+Fi(BZ2_)150 1708 y(bzReadClose)p Fj(.)150 1865 y(P)m(ossible)32
+b(assignmen)m(ts)e(to)i Fi(bzerror)p Fj(:)572 2016 y
+Fi(BZ_PARAM_ERROR)663 2120 y Fj(if)e Fi(b)g Fj(is)h Fi(NULL)e
+Fj(or)h Fi(buf)g Fj(is)g Fi(NULL)f Fj(or)i Fi(len)47
+b(<)g(0)572 2224 y(BZ_SEQUENCE_ERROR)663 2328 y Fj(if)30
+b Fi(b)g Fj(w)m(as)h(op)s(ened)e(with)h Fi(BZ2_bzWriteOpen)572
+2431 y(BZ_IO_ERROR)663 2535 y Fj(if)g(there)h(is)f(an)g(error)h
+(reading)g(from)f(the)h(compressed)f(\014le)572 2639
+y Fi(BZ_UNEXPECTED_EOF)663 2743 y Fj(if)g(the)h(compressed)f(\014le)h
+(ended)e(b)s(efore)i(the)f(logical)j(end-of-stream)e(w)m(as)g(detected)
+572 2847 y Fi(BZ_DATA_ERROR)663 2950 y Fj(if)f(a)h(data)f(in)m(tegrit)m
+(y)j(error)e(w)m(as)g(detected)g(in)g(the)f(compressed)h(stream)572
+3054 y Fi(BZ_DATA_ERROR_MAGIC)663 3158 y Fj(if)f(the)h(stream)g(do)s
+(es)f(not)g(b)s(egin)g(with)h(the)f(requisite)i(header)e(b)m(ytes)h
+(\(ie,)h(is)e(not)663 3262 y(a)g Fi(bzip2)f Fj(data)i(\014le\).)61
+b(This)30 b(is)h(really)g(a)f(sp)s(ecial)h(case)g(of)g
+Fi(BZ_DATA_ERROR)p Fj(.)572 3365 y Fi(BZ_MEM_ERROR)663
+3469 y Fj(if)f(insu\016cien)m(t)h(memory)f(w)m(as)h(a)m(v)-5
+b(ailable)572 3573 y Fi(BZ_STREAM_END)663 3677 y Fj(if)30
+b(the)h(logical)h(end)e(of)h(stream)g(w)m(as)f(detected.)572
+3781 y Fi(BZ_OK)663 3884 y Fj(otherwise.)150 4041 y(P)m(ossible)i
+(return)e(v)-5 b(alues:)572 4192 y(n)m(um)m(b)s(er)29
+b(of)i(b)m(ytes)g(read)663 4296 y(if)f Fi(bzerror)e Fj(is)j
+Fi(BZ_OK)e Fj(or)h Fi(BZ_STREAM_END)572 4400 y Fj(unde\014ned)663
+4503 y(otherwise)150 4660 y(Allo)m(w)m(able)i(next)f(actions:)572
+4811 y(collect)i(data)d(from)h Fi(buf)p Fj(,)e(then)i
+Fi(BZ2_bzRead)c Fj(or)k Fi(BZ2_bzReadClose)663 4915 y
+Fj(if)f Fi(bzerror)e Fj(is)j Fi(BZ_OK)572 5019 y Fj(collect)i(data)d
+(from)h Fi(buf)p Fj(,)e(then)i Fi(BZ2_bzReadClose)26
+b Fj(or)k Fi(BZ2_bzReadGetUnused)663 5123 y Fj(if)g Fi(bzerror)e
+Fj(is)j Fi(BZ_SEQUENCE_END)572 5226 y(BZ2_bzReadClose)663
+5330 y Fj(otherwise)p eop
 %%Page: 23 24
 23 23 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(23)150 299 y(F)-8 b(or)31
-b(the)g(meaning)e(of)i(parameters)g Fj(blockSize100k)p
-Fl(,)c Fj(verbosity)g Fl(and)j Fj(workFactor)p Fl(,)e(see)150
-408 y Fj(BZ2_bzCompressInit)p Fl(.)150 565 y(All)d(required)f(memory)i
-(is)f(allo)s(cated)i(at)g(this)e(stage,)j(so)f(if)e(the)h(call)g
-(completes)g(successfully)-8 b(,)26 b Fj(BZ_MEM_)150
-675 y(ERROR)j Fl(cannot)i(b)s(e)f(signalled)e(b)m(y)i(a)h(subsequen)m
-(t)f(call)f(to)i Fj(BZ2_bzWrite)p Fl(.)150 832 y(P)m(ossible)e
-(assignmen)m(ts)h(to)h Fj(bzerror)p Fl(:)572 983 y Fj(BZ_CONFIG_ERROR)
-663 1087 y Fl(if)e(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
-1190 y Fj(BZ_PARAM_ERROR)663 1294 y Fl(if)g Fj(f)h Fl(is)g
-Fj(NULL)663 1398 y Fl(or)g Fj(blockSize100k)44 b(<)k(1)30
-b Fl(or)g Fj(blockSize100k)44 b(>)k(9)572 1502 y(BZ_IO_ERROR)663
-1605 y Fl(if)29 b Fj(ferror\(f\))f Fl(is)h(nonzero)572
-1709 y Fj(BZ_MEM_ERROR)663 1813 y Fl(if)g(insu\016cien)m(t)g(memory)h
-(is)f(a)m(v)-5 b(ailable)572 1917 y Fj(BZ_OK)663 2021
-y Fl(otherwise)150 2177 y(P)m(ossible)29 b(return)h(v)-5
-b(alues:)572 2328 y(P)m(oin)m(ter)31 b(to)g(an)f(abstract)h
-Fj(BZFILE)663 2432 y Fl(if)e Fj(bzerror)f Fl(is)i Fj(BZ_OK)572
-2536 y(NULL)663 2640 y Fl(otherwise)150 2797 y(Allo)m(w)m(able)g(next)g
-(actions:)572 2948 y Fj(BZ2_bzWrite)663 3051 y Fl(if)f
-Fj(bzerror)f Fl(is)i Fj(BZ_OK)604 3155 y Fl(\(y)m(ou)25
-b(could)e(go)h(directly)f(to)h Fj(BZ2_bzWriteClose)p
-Fl(,)c(but)j(this)g(w)m(ould)g(b)s(e)g(prett)m(y)h(p)s(oin)m(tless\))
-572 3259 y Fj(BZ2_bzWriteClose)663 3363 y Fl(otherwise)150
-3639 y Ff(3.4.6)63 b Fe(BZ2_bzWrite)533 3826 y Fj(void)47
-b(BZ2_bzWrite)e(\()i(int)g(*bzerror,)e(BZFILE)h(*b,)h(void)g(*buf,)f
-(int)h(len)g(\);)150 3983 y Fl(Absorbs)26 b Fj(len)g
-Fl(b)m(ytes)i(from)e(the)i(bu\013er)e Fj(buf)p Fl(,)h(ev)m(en)m(tually)
-g(to)h(b)s(e)e(compressed)h(and)f(written)g(to)i(the)g(\014le.)150
-4140 y(P)m(ossible)h(assignmen)m(ts)h(to)h Fj(bzerror)p
-Fl(:)572 4291 y Fj(BZ_PARAM_ERROR)663 4395 y Fl(if)e
-Fj(b)h Fl(is)g Fj(NULL)f Fl(or)h Fj(buf)g Fl(is)f Fj(NULL)g
-Fl(or)i Fj(len)46 b(<)i(0)572 4498 y(BZ_SEQUENCE_ERROR)663
-4602 y Fl(if)29 b(b)h(w)m(as)h(op)s(ened)e(with)g Fj(BZ2_bzReadOpen)572
-4706 y(BZ_IO_ERROR)663 4810 y Fl(if)g(there)i(is)e(an)h(error)g
-(writing)f(the)h(compressed)g(\014le.)572 4914 y Fj(BZ_OK)663
-5017 y Fl(otherwise)150 5294 y Ff(3.4.7)63 b Fe(BZ2_bzWriteClose)p
+b(with)g Fi(libbzip2)1881 b Fl(23)150 299 y Fe(3.4.3)63
+b Fd(BZ2_bzReadGetUnused)533 486 y Fi(void)47 b(BZ2_bzReadGetUnused)42
+b(\()48 b(int*)e(bzerror,)g(BZFILE)g(*b,)1822 589 y(void**)g(unused,)g
+(int*)g(nUnused)g(\);)150 746 y Fj(Returns)35 b(data)g(whic)m(h)f(w)m
+(as)i(read)e(from)h(the)g(compressed)g(\014le)g(but)g(w)m(as)g(not)g
+(needed)g(to)h(get)g(to)g(the)150 856 y(logical)44 b(end-of-stream.)76
+b Fi(*unused)39 b Fj(is)j(set)h(to)f(the)g(address)f(of)h(the)g(data,)k
+(and)40 b Fi(*nUnused)g Fj(to)j(the)150 965 y(n)m(um)m(b)s(er)28
+b(of)h(b)m(ytes.)41 b Fi(*nUnused)27 b Fj(will)i(b)s(e)g(set)g(to)h(a)f
+(v)-5 b(alue)30 b(b)s(et)m(w)m(een)g Fi(0)e Fj(and)g
+Fi(BZ_MAX_UNUSED)e Fj(inclusiv)m(e.)150 1122 y(This)f(function)g(ma)m
+(y)h(only)f(b)s(e)g(called)h(once)g Fi(BZ2_bzRead)d Fj(has)i(signalled)
+h Fi(BZ_STREAM_END)21 b Fj(but)k(b)s(efore)150 1232 y
+Fi(BZ2_bzReadClose)p Fj(.)150 1389 y(P)m(ossible)32 b(assignmen)m(ts)e
+(to)i Fi(bzerror)p Fj(:)572 1540 y Fi(BZ_PARAM_ERROR)663
+1644 y Fj(if)e Fi(b)g Fj(is)h Fi(NULL)663 1747 y Fj(or)f
+Fi(unused)f Fj(is)h Fi(NULL)g Fj(or)g Fi(nUnused)f Fj(is)h
+Fi(NULL)572 1851 y(BZ_SEQUENCE_ERROR)663 1955 y Fj(if)g
+Fi(BZ_STREAM_END)d Fj(has)j(not)g(b)s(een)g(signalled)663
+2059 y(or)g(if)h Fi(b)f Fj(w)m(as)g(op)s(ened)g(with)g
+Fi(BZ2_bzWriteOpen)542 2162 y(BZ_OK)663 2266 y Fj(otherwise)150
+2423 y(Allo)m(w)m(able)i(next)f(actions:)572 2574 y Fi(BZ2_bzReadClose)
+150 2882 y Fe(3.4.4)63 b Fd(BZ2_bzReadClose)533 3068
+y Fi(void)47 b(BZ2_bzReadClose)c(\()48 b(int)f(*bzerror,)e(BZFILE)h(*b)
+h(\);)150 3225 y Fj(Releases)35 b(all)e(memory)h(p)s(ertaining)f(to)h
+(the)f(compressed)h(\014le)f Fi(b)p Fj(.)49 b Fi(BZ2_bzReadClose)29
+b Fj(do)s(es)j(not)i(call)150 3335 y Fi(fclose)d Fj(on)h(the)g
+(underlying)g(\014le)g(handle,)h(so)f(y)m(ou)h(should)e(do)h(that)h(y)m
+(ourself)g(if)f(appropriate.)47 b Fi(BZ2_)150 3445 y(bzReadClose)27
+b Fj(should)j(b)s(e)f(called)j(to)f(clean)g(up)e(after)i(all)g(error)g
+(situations.)150 3601 y(P)m(ossible)h(assignmen)m(ts)e(to)i
+Fi(bzerror)p Fj(:)572 3752 y Fi(BZ_SEQUENCE_ERROR)663
+3856 y Fj(if)e Fi(b)g Fj(w)m(as)h(op)s(ened)e(with)h
+Fi(BZ2_bzOpenWrite)572 3960 y(BZ_OK)663 4064 y Fj(otherwise)150
+4221 y(Allo)m(w)m(able)i(next)f(actions:)572 4372 y(none)150
+4679 y Fe(3.4.5)63 b Fd(BZ2_bzWriteOpen)533 4866 y Fi(BZFILE)46
+b(*BZ2_bzWriteOpen)e(\()j(int)g(*bzerror,)e(FILE)i(*f,)1774
+4970 y(int)g(blockSize100k,)d(int)j(verbosity,)1774 5074
+y(int)g(workFactor)e(\);)150 5230 y Fj(Prepare)31 b(to)h(write)g
+(compressed)f(data)g(to)h(\014le)f(handle)f Fi(f)p Fj(.)42
+b Fi(f)30 b Fj(should)g(refer)i(to)f(a)h(\014le)f(whic)m(h)f(has)h(b)s
+(een)150 5340 y(op)s(ened)f(for)g(writing,)h(and)f(for)g(whic)m(h)g
+(the)h(error)g(indicator)g(\()p Fi(ferror\(f\))p Fj(\)is)e(not)h(set.)p
 eop
 %%Page: 24 25
 24 24 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(24)533 299 y Fj(void)47
-b(BZ2_bzWriteClose)c(\()48 b(int)f(*bzerror,)e(BZFILE*)h(f,)1679
-403 y(int)h(abandon,)1679 506 y(unsigned)e(int*)i(nbytes_in,)1679
-610 y(unsigned)e(int*)i(nbytes_out)e(\);)533 818 y(void)i
-(BZ2_bzWriteClose64)c(\()k(int)g(*bzerror,)e(BZFILE*)h(f,)1774
-922 y(int)h(abandon,)1774 1025 y(unsigned)f(int*)g(nbytes_in_lo32,)1774
-1129 y(unsigned)g(int*)g(nbytes_in_hi32,)1774 1233 y(unsigned)g(int*)g
-(nbytes_out_lo32,)1774 1337 y(unsigned)g(int*)g(nbytes_out_hi32)e(\);)
-150 1493 y Fl(Compresses)39 b(and)g(\015ushes)g(to)h(the)g(compressed)g
-(\014le)f(all)f(data)j(so)f(far)g(supplied)c(b)m(y)k
-Fj(BZ2_bzWrite)p Fl(.)150 1603 y(The)27 b(logical)g(end-of-stream)h
-(mark)m(ers)g(are)g(also)f(written,)h(so)f(subsequen)m(t)g(calls)g(to)h
-Fj(BZ2_bzWrite)d Fl(are)150 1713 y(illegal.)50 b(All)33
-b(memory)h(asso)s(ciated)g(with)f(the)i(compressed)e(\014le)h
-Fj(b)f Fl(is)g(released.)52 b Fj(fflush)33 b Fl(is)g(called)g(on)150
-1822 y(the)e(compressed)f(\014le,)f(but)h(it)g(is)f(not)i
-Fj(fclose)p Fl('d.)150 1979 y(If)i Fj(BZ2_bzWriteClose)c
-Fl(is)k(called)f(to)j(clean)e(up)f(after)i(an)g(error,)g(the)g(only)e
-(action)i(is)f(to)h(release)g(the)150 2089 y(memory)-8
-b(.)42 b(The)30 b(library)e(records)j(the)g(error)f(co)s(des)h(issued)e
-(b)m(y)h(previous)f(calls,)i(so)f(this)g(situation)g(will)150
-2198 y(b)s(e)c(detected)h(automatically)-8 b(.)40 b(There)26
-b(is)g(no)g(attempt)h(to)h(complete)e(the)h(compression)f(op)s
-(eration,)g(nor)150 2308 y(to)32 b Fj(fflush)d Fl(the)i(compressed)g
-(\014le.)42 b(Y)-8 b(ou)32 b(can)f(force)h(this)e(b)s(eha)m(viour)g(to)
-h(happ)s(en)f(ev)m(en)i(in)d(the)j(case)g(of)150 2417
-y(no)e(error,)g(b)m(y)h(passing)e(a)i(nonzero)f(v)-5
-b(alue)30 b(to)h Fj(abandon)p Fl(.)150 2574 y(If)j Fj(nbytes_in)d
-Fl(is)j(non-n)m(ull,)f Fj(*nbytes_in)e Fl(will)h(b)s(e)h(set)i(to)g(b)s
-(e)f(the)g(total)h(v)m(olume)f(of)g(uncompressed)150
-2684 y(data)k(handled.)60 b(Similarly)-8 b(,)35 b Fj(nbytes_out)g
-Fl(will)g(b)s(e)h(set)i(to)g(the)g(total)g(v)m(olume)f(of)g(compressed)
-g(data)150 2793 y(written.)h(F)-8 b(or)27 b(compatibilit)m(y)d(with)h
-(older)g(v)m(ersions)h(of)g(the)g(library)-8 b(,)25 b
-Fj(BZ2_bzWriteClose)d Fl(only)j(yields)150 2903 y(the)40
-b(lo)m(w)m(er)g(32)h(bits)d(of)i(these)h(coun)m(ts.)69
-b(Use)40 b Fj(BZ2_bzWriteClose64)35 b Fl(if)k(y)m(ou)h(w)m(an)m(t)h
-(the)f(full)d(64)k(bit)150 3013 y(coun)m(ts.)g(These)30
-b(t)m(w)m(o)i(functions)d(are)i(otherwise)f(absolutely)f(iden)m(tical.)
-150 3169 y(P)m(ossible)g(assignmen)m(ts)h(to)h Fj(bzerror)p
-Fl(:)572 3320 y Fj(BZ_SEQUENCE_ERROR)663 3424 y Fl(if)e
-Fj(b)h Fl(w)m(as)h(op)s(ened)e(with)h Fj(BZ2_bzReadOpen)572
-3528 y(BZ_IO_ERROR)663 3632 y Fl(if)f(there)i(is)e(an)h(error)g
-(writing)f(the)h(compressed)g(\014le)572 3736 y Fj(BZ_OK)663
-3839 y Fl(otherwise)150 4161 y Ff(3.4.8)63 b(Handling)41
-b(em)m(b)s(edded)g(compressed)h(data)e(streams)150 4354
-y Fl(The)i(high-lev)m(el)g(library)f(facilitates)h(use)h(of)g
-Fj(bzip2)e Fl(data)j(streams)f(whic)m(h)f(form)g(some)i(part)e(of)i(a)
-150 4463 y(surrounding,)27 b(larger)j(data)h(stream.)225
-4620 y Fi(\017)60 b Fl(F)-8 b(or)22 b(writing,)f(the)g(library)e(tak)m
-(es)k(an)e(op)s(en)f(\014le)g(handle,)i(writes)e(compressed)h(data)h
-(to)g(it,)g Fj(fflush)p Fl(es)330 4730 y(it)34 b(but)f(do)s(es)h(not)h
-Fj(fclose)d Fl(it.)52 b(The)34 b(calling)f(application)g(can)h(write)g
-(its)f(o)m(wn)i(data)g(b)s(efore)f(and)330 4839 y(after)d(the)f
-(compressed)h(data)g(stream,)g(using)d(that)j(same)g(\014le)f(handle.)
-225 5011 y Fi(\017)60 b Fl(Reading)34 b(is)f(more)i(complex,)g(and)f
-(the)h(facilities)d(are)j(not)g(as)g(general)f(as)h(they)f(could)g(b)s
-(e)g(since)330 5121 y(generalit)m(y)e(is)f(hard)f(to)j(reconcile)e
-(with)f(e\016ciency)-8 b(.)46 b Fj(BZ2_bzRead)29 b Fl(reads)i(from)g
-(the)h(compressed)330 5230 y(\014le)39 b(in)g(blo)s(c)m(ks)g(of)h(size)
-g Fj(BZ_MAX_UNUSED)c Fl(b)m(ytes,)44 b(and)39 b(in)g(doing)g(so)h
-(probably)e(will)f(o)m(v)m(ersho)s(ot)330 5340 y(the)i(logical)g(end)f
-(of)h(compressed)f(stream.)67 b(T)-8 b(o)40 b(reco)m(v)m(er)g(this)e
-(data)i(once)f(decompression)f(has)p eop
+b(with)g Fi(libbzip2)1881 b Fl(24)150 299 y Fj(F)-8 b(or)31
+b(the)g(meaning)f(of)h(parameters)g Fi(blockSize100k)p
+Fj(,)c Fi(verbosity)h Fj(and)h Fi(workFactor)p Fj(,)f(see)150
+408 y Fi(BZ2_bzCompressInit)p Fj(.)150 565 y(All)38 b(required)g
+(memory)g(is)g(allo)s(cated)i(at)e(this)h(stage,)i(so)d(if)g(the)h
+(call)g(completes)g(successfully)-8 b(,)41 b Fi(BZ_)150
+675 y(MEM_ERROR)28 b Fj(cannot)j(b)s(e)e(signalled)i(b)m(y)g(a)f
+(subsequen)m(t)g(call)h(to)h Fi(BZ2_bzWrite)p Fj(.)150
+832 y(P)m(ossible)g(assignmen)m(ts)e(to)i Fi(bzerror)p
+Fj(:)572 983 y Fi(BZ_CONFIG_ERROR)663 1087 y Fj(if)e(the)h(library)f
+(has)g(b)s(een)g(mis-compiled)572 1190 y Fi(BZ_PARAM_ERROR)663
+1294 y Fj(if)g Fi(f)g Fj(is)h Fi(NULL)663 1398 y Fj(or)f
+Fi(blockSize100k)45 b(<)i(1)30 b Fj(or)h Fi(blockSize100k)44
+b(>)j(9)572 1502 y(BZ_IO_ERROR)663 1605 y Fj(if)30 b
+Fi(ferror\(f\))e Fj(is)i(nonzero)572 1709 y Fi(BZ_MEM_ERROR)663
+1813 y Fj(if)g(insu\016cien)m(t)h(memory)f(is)h(a)m(v)-5
+b(ailable)572 1917 y Fi(BZ_OK)663 2021 y Fj(otherwise)150
+2177 y(P)m(ossible)32 b(return)e(v)-5 b(alues:)572 2328
+y(P)m(oin)m(ter)32 b(to)f(an)f(abstract)i Fi(BZFILE)663
+2432 y Fj(if)e Fi(bzerror)e Fj(is)j Fi(BZ_OK)572 2536
+y(NULL)663 2640 y Fj(otherwise)150 2797 y(Allo)m(w)m(able)h(next)f
+(actions:)572 2948 y Fi(BZ2_bzWrite)663 3051 y Fj(if)f
+Fi(bzerror)e Fj(is)j Fi(BZ_OK)597 3155 y Fj(\(y)m(ou)24
+b(could)f(go)h(directly)g(to)g Fi(BZ2_bzWriteClose)p
+Fj(,)19 b(but)j(this)h(w)m(ould)g(b)s(e)g(prett)m(y)h(p)s(oin)m
+(tless\))572 3259 y Fi(BZ2_bzWriteClose)663 3363 y Fj(otherwise)150
+3852 y Fe(3.4.6)63 b Fd(BZ2_bzWrite)533 4039 y Fi(void)47
+b(BZ2_bzWrite)e(\()i(int)g(*bzerror,)e(BZFILE)h(*b,)h(void)g(*buf,)f
+(int)h(len)g(\);)150 4196 y Fj(Absorbs)35 b Fi(len)h
+Fj(b)m(ytes)h(from)f(the)h(bu\013er)f Fi(buf)p Fj(,)h(ev)m(en)m(tually)
+i(to)e(b)s(e)f(compressed)g(and)g(written)h(to)h(the)150
+4306 y(\014le.)150 4463 y(P)m(ossible)32 b(assignmen)m(ts)e(to)i
+Fi(bzerror)p Fj(:)572 4614 y Fi(BZ_PARAM_ERROR)663 4717
+y Fj(if)e Fi(b)g Fj(is)h Fi(NULL)e Fj(or)h Fi(buf)g Fj(is)g
+Fi(NULL)f Fj(or)i Fi(len)47 b(<)g(0)572 4821 y(BZ_SEQUENCE_ERROR)663
+4925 y Fj(if)30 b(b)g(w)m(as)g(op)s(ened)g(with)g Fi(BZ2_bzReadOpen)572
+5029 y(BZ_IO_ERROR)663 5132 y Fj(if)g(there)h(is)f(an)g(error)h
+(writing)g(the)g(compressed)f(\014le.)572 5236 y Fi(BZ_OK)663
+5340 y Fj(otherwise)p eop
 %%Page: 25 26
 25 25 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(25)330 299 y(ended,)28
-b(call)g Fj(BZ2_bzReadGetUnused)23 b Fl(after)29 b(the)g(last)f(call)g
-(of)g Fj(BZ2_bzRead)e Fl(\(the)j(one)g(returning)330
-408 y Fj(BZ_STREAM_END)p Fl(\))e(but)j(b)s(efore)g(calling)f
-Fj(BZ2_bzReadClose)p Fl(.)150 596 y(This)51 b(mec)m(hanism)g(mak)m(es)j
-(it)e(easy)h(to)g(decompress)f(m)m(ultiple)e Fj(bzip2)i
-Fl(streams)g(placed)g(end-to-)150 706 y(end.)90 b(As)48
-b(the)f(end)f(of)i(one)f(stream,)52 b(when)46 b Fj(BZ2_bzRead)f
-Fl(returns)h Fj(BZ_STREAM_END)p Fl(,)i(call)e Fj(BZ2_)150
-816 y(bzReadGetUnused)36 b Fl(to)41 b(collect)g(the)g(un)m(used)e(data)
-i(\(cop)m(y)g(it)f(in)m(to)g(y)m(our)h(o)m(wn)f(bu\013er)f
-(somewhere\).)150 925 y(That)25 b(data)g(forms)f(the)h(start)h(of)e
-(the)h(next)g(compressed)g(stream.)39 b(T)-8 b(o)25 b(start)h
-(uncompressing)c(that)k(next)150 1035 y(stream,)40 b(call)d
-Fj(BZ2_bzReadOpen)d Fl(again,)40 b(feeding)d(in)g(the)h(un)m(used)e
-(data)j(via)e(the)h Fj(unused)p Fl(/)p Fj(nUnused)150
-1144 y Fl(parameters.)54 b(Keep)34 b(doing)g(this)f(un)m(til)g
-Fj(BZ_STREAM_END)e Fl(return)j(coincides)f(with)h(the)g(ph)m(ysical)g
-(end)150 1254 y(of)d(\014le)e(\()p Fj(feof\(f\))p Fl(\).)39
-b(In)30 b(this)f(situation)h Fj(BZ2_bzReadGetUnused)25
-b Fl(will)i(of)k(course)g(return)e(no)h(data.)150 1411
-y(This)c(should)f(giv)m(e)j(some)g(feel)f(for)g(ho)m(w)h(the)g
-(high-lev)m(el)e(in)m(terface)i(can)f(b)s(e)g(used.)39
-b(If)27 b(y)m(ou)h(require)e(extra)150 1520 y(\015exibilit)m(y)-8
-b(,)28 b(y)m(ou'll)i(ha)m(v)m(e)h(to)g(bite)f(the)h(bullet)d(and)i(get)
-i(to)f(grips)e(with)g(the)h(lo)m(w-lev)m(el)h(in)m(terface.)150
-1779 y Ff(3.4.9)63 b(Standard)40 b(\014le-reading/writing)j(co)s(de)150
-1972 y Fl(Here's)31 b(ho)m(w)f(y)m(ou'd)h(write)e(data)j(to)f(a)f
-(compressed)g(\014le:)390 2330 y Fj(FILE*)142 b(f;)390
-2434 y(BZFILE*)46 b(b;)390 2538 y(int)238 b(nBuf;)390
-2642 y(char)190 b(buf[)46 b(/*)i(whatever)d(size)i(you)g(like)f(*/)i
-(];)390 2746 y(int)238 b(bzerror;)390 2849 y(int)g(nWritten;)390
-3057 y(f)47 b(=)h(fopen)e(\()i("myfile.bz2",)c("w")j(\);)390
-3161 y(if)g(\(!f\))g({)533 3264 y(/*)g(handle)f(error)h(*/)390
-3368 y(})390 3472 y(b)g(=)h(BZ2_bzWriteOpen)c(\()j(&bzerror,)e(f,)i(9)h
-(\);)390 3576 y(if)f(\(bzerror)f(!=)h(BZ_OK\))f({)533
-3680 y(BZ2_bzWriteClose)e(\()j(b)g(\);)533 3783 y(/*)g(handle)f(error)h
-(*/)390 3887 y(})390 4095 y(while)f(\()i(/*)f(condition)e(*/)i(\))h({)
-533 4198 y(/*)f(get)g(data)g(to)g(write)f(into)h(buf,)g(and)g(set)g
-(nBuf)f(appropriately)e(*/)533 4302 y(nWritten)i(=)h(BZ2_bzWrite)e(\()i
-(&bzerror,)f(b,)h(buf,)f(nBuf)h(\);)533 4406 y(if)g(\(bzerror)f(==)h
-(BZ_IO_ERROR\))e({)676 4510 y(BZ2_bzWriteClose)f(\()j(&bzerror,)e(b)j
-(\);)676 4614 y(/*)g(handle)e(error)g(*/)533 4717 y(})390
-4821 y(})390 5029 y(BZ2_bzWriteClose)d(\()48 b(&bzerror,)d(b)j(\);)390
-5132 y(if)f(\(bzerror)f(==)h(BZ_IO_ERROR\))d({)533 5236
-y(/*)j(handle)f(error)h(*/)390 5340 y(})p eop
+b(with)g Fi(libbzip2)1881 b Fl(25)150 299 y Fe(3.4.7)63
+b Fd(BZ2_bzWriteClose)533 486 y Fi(void)47 b(BZ2_bzWriteClose)c(\()48
+b(int)f(*bzerror,)e(BZFILE*)h(f,)1679 589 y(int)h(abandon,)1679
+693 y(unsigned)e(int*)i(nbytes_in,)1679 797 y(unsigned)e(int*)i
+(nbytes_out)e(\);)533 1005 y(void)i(BZ2_bzWriteClose64)c(\()k(int)g
+(*bzerror,)e(BZFILE*)h(f,)1774 1108 y(int)h(abandon,)1774
+1212 y(unsigned)f(int*)g(nbytes_in_lo32,)1774 1316 y(unsigned)g(int*)g
+(nbytes_in_hi32,)1774 1420 y(unsigned)g(int*)g(nbytes_out_lo32,)1774
+1523 y(unsigned)g(int*)g(nbytes_out_hi32)e(\);)150 1680
+y Fj(Compresses)38 b(and)f(\015ushes)g(to)i(the)g(compressed)f(\014le)h
+(all)f(data)h(so)g(far)f(supplied)f(b)m(y)h Fi(BZ2_bzWrite)p
+Fj(.)150 1790 y(The)h(logical)i(end-of-stream)e(mark)m(ers)h(are)f
+(also)g(written,)j(so)d(subsequen)m(t)g(calls)g(to)h
+Fi(BZ2_bzWrite)150 1899 y Fj(are)31 b(illegal.)45 b(All)31
+b(memory)g(asso)s(ciated)h(with)f(the)g(compressed)g(\014le)h
+Fi(b)e Fj(is)h(released.)44 b Fi(fflush)29 b Fj(is)i(called)150
+2009 y(on)f(the)h(compressed)f(\014le,)h(but)f(it)h(is)f(not)h
+Fi(fclose)p Fj('d.)150 2166 y(If)g Fi(BZ2_bzWriteClose)d
+Fj(is)j(called)i(to)f(clean)g(up)f(after)h(an)f(error,)i(the)f(only)g
+(action)h(is)e(to)i(release)g(the)150 2275 y(memory)-8
+b(.)40 b(The)28 b(library)g(records)g(the)g(error)g(co)s(des)g(issued)f
+(b)m(y)g(previous)h(calls,)h(so)f(this)g(situation)h(will)150
+2385 y(b)s(e)37 b(detected)i(automatically)-8 b(.)64
+b(There)38 b(is)f(no)h(attempt)g(to)h(complete)g(the)e(compression)h
+(op)s(eration,)150 2495 y(nor)f(to)h Fi(fflush)e Fj(the)h(compressed)g
+(\014le.)62 b(Y)-8 b(ou)37 b(can)g(force)h(this)g(b)s(eha)m(viour)e(to)
+i(happ)s(en)e(ev)m(en)i(in)f(the)150 2604 y(case)31 b(of)g(no)f(error,)
+h(b)m(y)f(passing)g(a)h(nonzero)g(v)-5 b(alue)30 b(to)i
+Fi(abandon)p Fj(.)150 2761 y(If)h Fi(nbytes_in)d Fj(is)j(non-n)m(ull,)g
+Fi(*nbytes_in)d Fj(will)j(b)s(e)f(set)i(to)f(b)s(e)g(the)g(total)h(v)m
+(olume)g(of)f(uncompressed)150 2871 y(data)k(handled.)58
+b(Similarly)-8 b(,)38 b Fi(nbytes_out)c Fj(will)j(b)s(e)f(set)h(to)g
+(the)g(total)h(v)m(olume)g(of)e(compressed)h(data)150
+2980 y(written.)i(F)-8 b(or)24 b(compatibilit)m(y)i(with)d(older)h(v)m
+(ersions)g(of)g(the)g(library)-8 b(,)25 b Fi(BZ2_bzWriteClose)19
+b Fj(only)24 b(yields)150 3090 y(the)39 b(lo)m(w)m(er)i(32)e(bits)g(of)
+g(these)g(coun)m(ts.)67 b(Use)39 b Fi(BZ2_bzWriteClose64)34
+b Fj(if)39 b(y)m(ou)g(w)m(an)m(t)g(the)h(full)e(64)i(bit)150
+3199 y(coun)m(ts.)h(These)31 b(t)m(w)m(o)h(functions)e(are)h(otherwise)
+g(absolutely)g(iden)m(tical.)150 3356 y(P)m(ossible)h(assignmen)m(ts)e
+(to)i Fi(bzerror)p Fj(:)572 3507 y Fi(BZ_SEQUENCE_ERROR)663
+3611 y Fj(if)e Fi(b)g Fj(w)m(as)h(op)s(ened)e(with)h
+Fi(BZ2_bzReadOpen)572 3715 y(BZ_IO_ERROR)663 3819 y Fj(if)g(there)h(is)
+f(an)g(error)h(writing)g(the)g(compressed)f(\014le)572
+3922 y Fi(BZ_OK)663 4026 y Fj(otherwise)150 4296 y Fe(3.4.8)63
+b(Handling)41 b(em)m(b)s(edded)g(compressed)h(data)e(streams)150
+4489 y Fj(The)i(high-lev)m(el)h(library)e(facilitates)k(use)c(of)h
+Fi(bzip2)e Fj(data)i(streams)g(whic)m(h)f(form)g(some)h(part)g(of)g(a)
+150 4598 y(surrounding,)29 b(larger)i(data)g(stream.)225
+4755 y Fh(\017)60 b Fj(F)-8 b(or)49 b(writing,)k(the)c(library)f(tak)m
+(es)i(an)e(op)s(en)f(\014le)i(handle,)j(writes)d(compressed)f(data)h
+(to)g(it,)330 4865 y Fi(fflush)p Fj(es)37 b(it)h(but)f(do)s(es)h(not)g
+Fi(fclose)f Fj(it.)64 b(The)38 b(calling)h(application)g(can)f(write)g
+(its)h(o)m(wn)f(data)330 4974 y(b)s(efore)30 b(and)g(after)h(the)g
+(compressed)f(data)h(stream,)g(using)f(that)h(same)f(\014le)h(handle.)
+225 5121 y Fh(\017)60 b Fj(Reading)33 b(is)g(more)g(complex,)h(and)e
+(the)h(facilities)i(are)e(not)g(as)g(general)h(as)f(they)g(could)f(b)s
+(e)h(since)330 5230 y(generalit)m(y)e(is)d(hard)g(to)h(reconcile)i
+(with)d(e\016ciency)-8 b(.)42 b Fi(BZ2_bzRead)25 b Fj(reads)k(from)f
+(the)h(compressed)330 5340 y(\014le)39 b(in)g(blo)s(c)m(ks)g(of)h(size)
+f Fi(BZ_MAX_UNUSED)d Fj(b)m(ytes,)42 b(and)c(in)h(doing)g(so)g
+(probably)g(will)g(o)m(v)m(ersho)s(ot)p eop
 %%Page: 26 27
 26 26 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(26)150 299 y(And)29 b(to)j(read)e(from)g
-(a)h(compressed)f(\014le:)390 450 y Fj(FILE*)142 b(f;)390
-554 y(BZFILE*)46 b(b;)390 657 y(int)238 b(nBuf;)390 761
-y(char)190 b(buf[)46 b(/*)i(whatever)d(size)i(you)g(like)f(*/)i(];)390
-865 y(int)238 b(bzerror;)390 969 y(int)g(nWritten;)390
-1176 y(f)47 b(=)h(fopen)e(\()i("myfile.bz2",)c("r")j(\);)390
-1280 y(if)g(\(!f\))g({)533 1384 y(/*)g(handle)f(error)h(*/)390
-1488 y(})390 1591 y(b)g(=)h(BZ2_bzReadOpen)c(\()j(&bzerror,)f(f,)h(0,)g
-(NULL,)f(0)i(\);)390 1695 y(if)f(\(bzerror)f(!=)h(BZ_OK\))f({)533
-1799 y(BZ2_bzReadClose)e(\()j(&bzerror,)f(b)h(\);)533
-1903 y(/*)g(handle)f(error)h(*/)390 2007 y(})390 2214
-y(bzerror)f(=)h(BZ_OK;)390 2318 y(while)f(\(bzerror)g(==)h(BZ_OK)f(&&)i
-(/*)f(arbitrary)e(other)h(conditions)f(*/\))i({)533 2422
-y(nBuf)g(=)g(BZ2_bzRead)e(\()j(&bzerror,)d(b,)i(buf,)g(/*)g(size)g(of)g
-(buf)g(*/)g(\);)533 2525 y(if)g(\(bzerror)f(==)h(BZ_OK\))f({)676
-2629 y(/*)i(do)f(something)e(with)i(buf[0)f(..)h(nBuf-1])f(*/)533
-2733 y(})390 2837 y(})390 2941 y(if)h(\(bzerror)f(!=)h(BZ_STREAM_END\))
-d({)533 3044 y(BZ2_bzReadClose)g(\()j(&bzerror,)f(b)h(\);)533
-3148 y(/*)g(handle)f(error)h(*/)390 3252 y(})g(else)g({)533
-3356 y(BZ2_bzReadClose)d(\()j(&bzerror)f(\);)390 3459
-y(})150 3753 y Fk(3.5)68 b(Utilit)l(y)47 b(functions)150
-4045 y Ff(3.5.1)63 b Fe(BZ2_bzBuffToBuffCompress)533
-4232 y Fj(int)47 b(BZ2_bzBuffToBuffCompress\()41 b(char*)428
-b(dest,)1965 4335 y(unsigned)46 b(int*)g(destLen,)1965
-4439 y(char*)428 b(source,)1965 4543 y(unsigned)46 b(int)94
-b(sourceLen,)1965 4647 y(int)524 b(blockSize100k,)1965
-4751 y(int)g(verbosity,)1965 4854 y(int)g(workFactor)45
-b(\);)150 5011 y Fl(A)m(ttempts)33 b(to)g(compress)f(the)g(data)h(in)e
-Fj(source[0)d(..)i(sourceLen-1])e Fl(in)m(to)k(the)h(destination)e
-(bu\013er,)150 5121 y Fj(dest[0)e(..)g(*destLen-1])p
-Fl(.)37 b(If)26 b(the)g(destination)g(bu\013er)f(is)h(big)f(enough,)j
-Fj(*destLen)c Fl(is)h(set)i(to)g(the)g(size)150 5230
-y(of)i(the)f(compressed)h(data,)g(and)f Fj(BZ_OK)f Fl(is)h(returned.)39
-b(If)28 b(the)h(compressed)f(data)h(w)m(on't)g(\014t,)g
-Fj(*destLen)150 5340 y Fl(is)g(unc)m(hanged,)i(and)e
-Fj(BZ_OUTBUFF_FULL)e Fl(is)i(returned.)p eop
+b(with)g Fi(libbzip2)1881 b Fl(26)330 299 y Fj(the)37
+b(logical)i(end)e(of)g(compressed)g(stream.)60 b(T)-8
+b(o)38 b(reco)m(v)m(er)i(this)c(data)i(once)f(decompression)g(has)330
+408 y(ended,)27 b(call)h Fi(BZ2_bzReadGetUnused)21 b
+Fj(after)27 b(the)g(last)h(call)f(of)g Fi(BZ2_bzRead)d
+Fj(\(the)j(one)g(returning)330 518 y Fi(BZ_STREAM_END)p
+Fj(\))g(but)j(b)s(efore)g(calling)i Fi(BZ2_bzReadClose)p
+Fj(.)150 702 y(This)j(mec)m(hanism)h(mak)m(es)g(it)h(easy)f(to)g
+(decompress)g(m)m(ultiple)g Fi(bzip2)e Fj(streams)i(placed)g
+(end-to-end.)150 812 y(As)67 b(the)h(end)g(of)f(one)i(stream,)77
+b(when)67 b Fi(BZ2_bzRead)e Fj(returns)j Fi(BZ_STREAM_END)p
+Fj(,)73 b(call)c Fi(BZ2_)150 921 y(bzReadGetUnused)34
+b Fj(to)40 b(collect)h(the)e(un)m(used)e(data)i(\(cop)m(y)g(it)g(in)m
+(to)h(y)m(our)f(o)m(wn)f(bu\013er)g(somewhere\).)150
+1031 y(That)52 b(data)h(forms)f(the)g(start)h(of)f(the)h(next)f
+(compressed)g(stream.)107 b(T)-8 b(o)53 b(start)g(uncompressing)150
+1140 y(that)61 b(next)f(stream,)68 b(call)62 b Fi(BZ2_bzReadOpen)56
+b Fj(again,)68 b(feeding)61 b(in)e(the)i(un)m(used)e(data)h(via)h(the)
+150 1250 y Fi(unused)p Fj(/)p Fi(nUnused)28 b Fj(parameters.)45
+b(Keep)32 b(doing)f(this)h(un)m(til)g Fi(BZ_STREAM_END)c
+Fj(return)j(coincides)h(with)150 1360 y(the)j(ph)m(ysical)g(end)f(of)h
+(\014le)f(\()p Fi(feof\(f\))p Fj(\).)52 b(In)34 b(this)h(situation)g
+Fi(BZ2_bzReadGetUnused)30 b Fj(will)35 b(of)f(course)150
+1469 y(return)c(no)g(data.)150 1626 y(This)24 b(should)g(giv)m(e)i
+(some)f(feel)h(for)f(ho)m(w)g(the)g(high-lev)m(el)h(in)m(terface)h(can)
+d(b)s(e)g(used.)38 b(If)25 b(y)m(ou)g(require)g(extra)150
+1736 y(\015exibilit)m(y)-8 b(,)32 b(y)m(ou'll)g(ha)m(v)m(e)f(to)g(bite)
+g(the)g(bullet)g(and)e(get)j(to)f(grips)f(with)h(the)f(lo)m(w-lev)m(el)
+k(in)m(terface.)150 1987 y Fe(3.4.9)63 b(Standard)40
+b(\014le-reading/writing)j(co)s(de)150 2179 y Fj(Here's)31
+b(ho)m(w)g(y)m(ou'd)f(write)h(data)g(to)g(a)g(compressed)f(\014le:)390
+2538 y Fi(FILE*)142 b(f;)390 2642 y(BZFILE*)46 b(b;)390
+2746 y(int)238 b(nBuf;)390 2849 y(char)190 b(buf[)46
+b(/*)i(whatever)d(size)i(you)g(like)f(*/)i(];)390 2953
+y(int)238 b(bzerror;)390 3057 y(int)g(nWritten;)390 3264
+y(f)47 b(=)h(fopen)e(\()i("myfile.bz2",)c("w")j(\);)390
+3368 y(if)g(\(!f\))g({)533 3472 y(/*)g(handle)f(error)h(*/)390
+3576 y(})390 3680 y(b)g(=)h(BZ2_bzWriteOpen)c(\()j(&bzerror,)e(f,)i(9)h
+(\);)390 3783 y(if)f(\(bzerror)f(!=)h(BZ_OK\))f({)533
+3887 y(BZ2_bzWriteClose)e(\()j(b)g(\);)533 3991 y(/*)g(handle)f(error)h
+(*/)390 4095 y(})390 4302 y(while)f(\()i(/*)f(condition)e(*/)i(\))h({)
+533 4406 y(/*)f(get)g(data)g(to)g(write)f(into)h(buf,)g(and)g(set)g
+(nBuf)f(appropriately)e(*/)533 4510 y(nWritten)i(=)h(BZ2_bzWrite)e(\()i
+(&bzerror,)f(b,)h(buf,)f(nBuf)h(\);)533 4614 y(if)g(\(bzerror)f(==)h
+(BZ_IO_ERROR\))e({)676 4717 y(BZ2_bzWriteClose)f(\()j(&bzerror,)e(b)j
+(\);)676 4821 y(/*)g(handle)e(error)g(*/)533 4925 y(})390
+5029 y(})390 5236 y(BZ2_bzWriteClose)d(\()48 b(&bzerror,)d(b)j(\);)390
+5340 y(if)f(\(bzerror)f(==)h(BZ_IO_ERROR\))d({)p eop
 %%Page: 27 28
-27 27 bop 150 -116 a Fl(Chapter)30 b(3:)h(Programming)e(with)g
-Fj(libbzip2)1891 b Fl(27)150 299 y(Compression)22 b(in)g(this)h(manner)
-g(is)g(a)h(one-shot)g(ev)m(en)m(t,)j(done)c(with)g(a)h(single)e(call)h
-(to)i(this)d(function.)37 b(The)150 408 y(resulting)25
-b(compressed)i(data)i(is)d(a)i(complete)f Fj(bzip2)f
-Fl(format)i(data)g(stream.)40 b(There)27 b(is)f(no)i(mec)m(hanism)150
-518 y(for)23 b(making)g(additional)e(calls)i(to)h(pro)m(vide)f(extra)h
-(input)e(data.)39 b(If)23 b(y)m(ou)h(w)m(an)m(t)g(that)g(kind)e(of)h
-(mec)m(hanism,)150 628 y(use)30 b(the)h(lo)m(w-lev)m(el)f(in)m
-(terface.)150 784 y(F)-8 b(or)31 b(the)g(meaning)e(of)i(parameters)g
-Fj(blockSize100k)p Fl(,)c Fj(verbosity)g Fl(and)j Fj(workFactor)p
-Fl(,)150 894 y(see)h Fj(BZ2_bzCompressInit)p Fl(.)150
-1051 y(T)-8 b(o)27 b(guaran)m(tee)h(that)e(the)h(compressed)f(data)h
-(will)d(\014t)i(in)f(its)g(bu\013er,)i(allo)s(cate)f(an)g(output)g
-(bu\013er)g(of)g(size)150 1160 y(1\045)31 b(larger)f(than)g(the)g
-(uncompressed)f(data,)j(plus)c(six)h(h)m(undred)g(extra)i(b)m(ytes.)150
-1317 y Fj(BZ2_bzBuffToBuffDecompre)o(ss)25 b Fl(will)k(not)j(write)e
-(data)j(at)f(or)f(b)s(ey)m(ond)g Fj(dest[*destLen])p
-Fl(,)d(ev)m(en)k(in)150 1427 y(case)f(of)g(bu\013er)e(o)m(v)m(er\015o)m
-(w.)150 1584 y(P)m(ossible)g(return)h(v)-5 b(alues:)572
-1735 y Fj(BZ_CONFIG_ERROR)663 1839 y Fl(if)29 b(the)i(library)d(has)i
-(b)s(een)f(mis-compiled)572 1942 y Fj(BZ_PARAM_ERROR)663
-2046 y Fl(if)g Fj(dest)g Fl(is)h Fj(NULL)f Fl(or)h Fj(destLen)f
-Fl(is)g Fj(NULL)663 2150 y Fl(or)h Fj(blockSize100k)44
-b(<)k(1)30 b Fl(or)g Fj(blockSize100k)44 b(>)k(9)663
-2254 y Fl(or)30 b Fj(verbosity)45 b(<)j(0)30 b Fl(or)g
-Fj(verbosity)45 b(>)j(4)663 2357 y Fl(or)30 b Fj(workFactor)45
-b(<)j(0)30 b Fl(or)g Fj(workFactor)45 b(>)i(250)572 2461
-y(BZ_MEM_ERROR)663 2565 y Fl(if)29 b(insu\016cien)m(t)g(memory)h(is)f
-(a)m(v)-5 b(ailable)572 2669 y Fj(BZ_OUTBUFF_FULL)663
-2773 y Fl(if)29 b(the)i(size)f(of)g(the)h(compressed)f(data)h(exceeds)g
-Fj(*destLen)572 2876 y(BZ_OK)663 2980 y Fl(otherwise)150
-3349 y Ff(3.5.2)63 b Fe(BZ2_bzBuffToBuffDecompress)533
-3536 y Fj(int)47 b(BZ2_bzBuffToBuffDecompres)o(s)42 b(\()47
-b(char*)428 b(dest,)2108 3640 y(unsigned)46 b(int*)g(destLen,)2108
-3744 y(char*)428 b(source,)2108 3848 y(unsigned)46 b(int)94
-b(sourceLen,)2108 3951 y(int)524 b(small,)2108 4055 y(int)g(verbosity)
-46 b(\);)150 4212 y Fl(A)m(ttempts)24 b(to)g(decompress)f(the)g(data)g
-(in)f Fj(source[0)28 b(..)i(sourceLen-1])20 b Fl(in)m(to)j(the)g
-(destination)f(bu\013er,)150 4322 y Fj(dest[0)29 b(..)g(*destLen-1])p
-Fl(.)37 b(If)26 b(the)g(destination)g(bu\013er)f(is)h(big)f(enough,)j
-Fj(*destLen)c Fl(is)h(set)i(to)g(the)g(size)150 4431
-y(of)21 b(the)g(uncompressed)e(data,)24 b(and)c Fj(BZ_OK)f
-Fl(is)h(returned.)36 b(If)20 b(the)h(compressed)g(data)g(w)m(on't)h
-(\014t,)g Fj(*destLen)150 4541 y Fl(is)29 b(unc)m(hanged,)i(and)e
-Fj(BZ_OUTBUFF_FULL)e Fl(is)i(returned.)150 4698 y Fj(source)g
-Fl(is)g(assumed)h(to)h(hold)e(a)i(complete)f Fj(bzip2)f
-Fl(format)i(data)g(stream.)150 4807 y Fj(BZ2_bzBuffToBuffDecompre)o(ss)
-22 b Fl(tries)28 b(to)i(decompress)e(the)h(en)m(tiret)m(y)g(of)g(the)f
-(stream)h(in)m(to)g(the)f(out-)150 4917 y(put)i(bu\013er.)150
-5074 y(F)-8 b(or)31 b(the)g(meaning)e(of)i(parameters)g
-Fj(small)e Fl(and)g Fj(verbosity)p Fl(,)f(see)j Fj
-(BZ2_bzDecompressInit)p Fl(.)150 5230 y(Because)j(the)f(compression)e
-(ratio)i(of)g(the)g(compressed)f(data)h(cannot)g(b)s(e)f(kno)m(wn)g(in)
-g(adv)-5 b(ance,)34 b(there)150 5340 y(is)d(no)h(easy)g(w)m(a)m(y)h(to)
-f(guaran)m(tee)i(that)e(the)g(output)f(bu\013er)g(will)e(b)s(e)i(big)g
-(enough.)45 b(Y)-8 b(ou)32 b(ma)m(y)h(of)f(course)p eop
+27 27 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
+b(with)g Fi(libbzip2)1881 b Fl(27)533 299 y Fi(/*)47
+b(handle)f(error)h(*/)390 403 y(})150 559 y Fj(And)29
+b(to)i(read)g(from)f(a)g(compressed)h(\014le:)390 711
+y Fi(FILE*)142 b(f;)390 814 y(BZFILE*)46 b(b;)390 918
+y(int)238 b(nBuf;)390 1022 y(char)190 b(buf[)46 b(/*)i(whatever)d(size)
+i(you)g(like)f(*/)i(];)390 1126 y(int)238 b(bzerror;)390
+1229 y(int)g(nWritten;)390 1437 y(f)47 b(=)h(fopen)e(\()i
+("myfile.bz2",)c("r")j(\);)390 1541 y(if)g(\(!f\))g({)533
+1645 y(/*)g(handle)f(error)h(*/)390 1748 y(})390 1852
+y(b)g(=)h(BZ2_bzReadOpen)c(\()j(&bzerror,)f(f,)h(0,)g(NULL,)f(0)i(\);)
+390 1956 y(if)f(\(bzerror)f(!=)h(BZ_OK\))f({)533 2060
+y(BZ2_bzReadClose)e(\()j(&bzerror,)f(b)h(\);)533 2163
+y(/*)g(handle)f(error)h(*/)390 2267 y(})390 2475 y(bzerror)f(=)h
+(BZ_OK;)390 2579 y(while)f(\(bzerror)g(==)h(BZ_OK)f(&&)i(/*)f
+(arbitrary)e(other)h(conditions)f(*/\))i({)533 2682 y(nBuf)g(=)g
+(BZ2_bzRead)e(\()j(&bzerror,)d(b,)i(buf,)g(/*)g(size)g(of)g(buf)g(*/)g
+(\);)533 2786 y(if)g(\(bzerror)f(==)h(BZ_OK\))f({)676
+2890 y(/*)i(do)f(something)e(with)i(buf[0)f(..)h(nBuf-1])f(*/)533
+2994 y(})390 3097 y(})390 3201 y(if)h(\(bzerror)f(!=)h(BZ_STREAM_END\))
+d({)533 3305 y(BZ2_bzReadClose)g(\()j(&bzerror,)f(b)h(\);)533
+3409 y(/*)g(handle)f(error)h(*/)390 3513 y(})g(else)g({)533
+3616 y(BZ2_bzReadClose)d(\()j(&bzerror)f(\);)390 3720
+y(})150 3991 y Fk(3.5)68 b(Utilit)l(y)47 b(functions)150
+4264 y Fe(3.5.1)63 b Fd(BZ2_bzBuffToBuffCompress)533
+4451 y Fi(int)47 b(BZ2_bzBuffToBuffCompress\()41 b(char*)428
+b(dest,)1965 4555 y(unsigned)46 b(int*)g(destLen,)1965
+4658 y(char*)428 b(source,)1965 4762 y(unsigned)46 b(int)94
+b(sourceLen,)1965 4866 y(int)524 b(blockSize100k,)1965
+4970 y(int)g(verbosity,)1965 5074 y(int)g(workFactor)45
+b(\);)150 5230 y Fj(A)m(ttempts)32 b(to)f(compress)f(the)h(data)g(in)f
+Fi(source[0)e(..)i(sourceLen-1])d Fj(in)m(to)k(the)g(destination)g
+(bu\013er,)150 5340 y Fi(dest[0)e(..)g(*destLen-1])p
+Fj(.)36 b(If)25 b(the)g(destination)h(bu\013er)e(is)h(big)f(enough,)i
+Fi(*destLen)d Fj(is)i(set)g(to)h(the)f(size)p eop
 %%Page: 28 29
 28 28 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(28)150 299 y(mak)m(e)36
-b(arrangemen)m(ts)f(in)e(y)m(our)i(co)s(de)g(to)g(record)g(the)g(size)f
-(of)h(the)g(uncompressed)f(data,)i(but)e(suc)m(h)h(a)150
-408 y(mec)m(hanism)30 b(is)f(b)s(ey)m(ond)h(the)g(scop)s(e)h(of)f(this)
-g(library)-8 b(.)150 565 y Fj(BZ2_bzBuffToBuffDecompre)o(ss)25
-b Fl(will)k(not)j(write)e(data)j(at)f(or)f(b)s(ey)m(ond)g
-Fj(dest[*destLen])p Fl(,)d(ev)m(en)k(in)150 675 y(case)f(of)g(bu\013er)
-e(o)m(v)m(er\015o)m(w.)150 832 y(P)m(ossible)g(return)h(v)-5
-b(alues:)572 983 y Fj(BZ_CONFIG_ERROR)663 1087 y Fl(if)29
-b(the)i(library)d(has)i(b)s(een)f(mis-compiled)572 1190
-y Fj(BZ_PARAM_ERROR)663 1294 y Fl(if)g Fj(dest)g Fl(is)h
-Fj(NULL)f Fl(or)h Fj(destLen)f Fl(is)g Fj(NULL)663 1398
-y Fl(or)h Fj(small)46 b(!=)i(0)f(&&)g(small)g(!=)g(1)663
-1502 y Fl(or)30 b Fj(verbosity)45 b(<)j(0)30 b Fl(or)g
-Fj(verbosity)45 b(>)j(4)572 1605 y(BZ_MEM_ERROR)663 1709
-y Fl(if)29 b(insu\016cien)m(t)g(memory)h(is)f(a)m(v)-5
-b(ailable)572 1813 y Fj(BZ_OUTBUFF_FULL)663 1917 y Fl(if)29
-b(the)i(size)f(of)g(the)h(compressed)f(data)h(exceeds)g
-Fj(*destLen)572 2021 y(BZ_DATA_ERROR)663 2124 y Fl(if)e(a)i(data)g(in)m
-(tegrit)m(y)f(error)g(w)m(as)h(detected)h(in)d(the)h(compressed)g(data)
-572 2228 y Fj(BZ_DATA_ERROR_MAGIC)663 2332 y Fl(if)f(the)i(compressed)f
-(data)h(do)s(esn't)f(b)s(egin)f(with)g(the)i(righ)m(t)e(magic)i(b)m
-(ytes)572 2436 y Fj(BZ_UNEXPECTED_EOF)663 2539 y Fl(if)e(the)i
-(compressed)f(data)h(ends)e(unexp)s(ectedly)572 2643
-y Fj(BZ_OK)663 2747 y Fl(otherwise)150 3116 y Fk(3.6)68
-b Fd(zlib)43 b Fk(compatibilit)l(y)k(functions)150 3308
-y Fl(Y)-8 b(oshiok)j(a)33 b(Tsuneo)e(has)h(con)m(tributed)g(some)g
-(functions)f(to)i(giv)m(e)g(b)s(etter)f Fj(zlib)f Fl(compatibilit)m(y)
--8 b(.)45 b(These)150 3418 y(functions)36 b(are)i Fj(BZ2_bzopen)p
-Fl(,)e Fj(BZ2_bzread)p Fl(,)h Fj(BZ2_bzwrite)p Fl(,)f
-Fj(BZ2_bzflush)p Fl(,)h Fj(BZ2_bzclose)p Fl(,)f Fj(BZ2_)150
-3527 y(bzerror)23 b Fl(and)h Fj(BZ2_bzlibVersion)p Fl(.)34
-b(These)25 b(functions)e(are)j(not)f(\(y)m(et\))h(o\016cially)e(part)h
-(of)g(the)g(library)-8 b(.)150 3637 y(If)30 b(they)g(break,)h(y)m(ou)g
-(get)g(to)g(k)m(eep)g(all)f(the)g(pieces.)41 b(Nev)m(ertheless,)31
-b(I)f(think)f(they)i(w)m(ork)f(ok.)390 3788 y Fj(typedef)46
-b(void)g(BZFILE;)390 3995 y(const)g(char)h(*)g(BZ2_bzlibVersion)d(\()j
-(void)g(\);)150 4152 y Fl(Returns)29 b(a)i(string)f(indicating)e(the)i
-(library)e(v)m(ersion.)390 4303 y Fj(BZFILE)46 b(*)i(BZ2_bzopen)92
-b(\()48 b(const)e(char)h(*path,)f(const)g(char)h(*mode)f(\);)390
-4407 y(BZFILE)g(*)i(BZ2_bzdopen)c(\()k(int)381 b(fd,)190
-b(const)46 b(char)h(*mode)f(\);)150 4564 y Fl(Op)s(ens)19
-b(a)j Fj(.bz2)e Fl(\014le)g(for)g(reading)g(or)h(writing,)g(using)f
-(either)g(its)h(name)g(or)g(a)g(pre-existing)f(\014le)g(descriptor.)150
-4674 y(Analogous)30 b(to)i Fj(fopen)c Fl(and)i Fj(fdopen)p
-Fl(.)390 4825 y Fj(int)47 b(BZ2_bzread)93 b(\()47 b(BZFILE*)f(b,)h
-(void*)f(buf,)h(int)g(len)g(\);)390 4928 y(int)g(BZ2_bzwrite)e(\()i
-(BZFILE*)f(b,)h(void*)f(buf,)h(int)g(len)g(\);)150 5085
-y Fl(Reads/writes)30 b(data)h(from/to)g(a)g(previously)d(op)s(ened)i
-Fj(BZFILE)p Fl(.)39 b(Analogous)30 b(to)h Fj(fread)e
-Fl(and)h Fj(fwrite)p Fl(.)390 5236 y Fj(int)95 b(BZ2_bzflush)44
-b(\()k(BZFILE*)e(b)h(\);)390 5340 y(void)g(BZ2_bzclose)d(\()k(BZFILE*)e
-(b)h(\);)p eop
+b(with)g Fi(libbzip2)1881 b Fl(28)150 299 y Fj(of)27
+b(the)f(compressed)h(data,)h(and)d Fi(BZ_OK)g Fj(is)i(returned.)38
+b(If)27 b(the)f(compressed)h(data)g(w)m(on't)g(\014t,)g
+Fi(*destLen)150 408 y Fj(is)j(unc)m(hanged,)g(and)g Fi(BZ_OUTBUFF_FULL)
+c Fj(is)31 b(returned.)150 565 y(Compression)22 b(in)h(this)f(manner)g
+(is)h(a)f(one-shot)i(ev)m(en)m(t,)i(done)d(with)f(a)h(single)g(call)h
+(to)f(this)g(function.)38 b(The)150 675 y(resulting)26
+b(compressed)g(data)f(is)h(a)g(complete)h Fi(bzip2)d
+Fj(format)i(data)g(stream.)39 b(There)26 b(is)f(no)h(mec)m(hanism)150
+784 y(for)d(making)g(additional)h(calls)f(to)h(pro)m(vide)g(extra)f
+(input)g(data.)38 b(If)23 b(y)m(ou)g(w)m(an)m(t)h(that)f(kind)f(of)i
+(mec)m(hanism,)150 894 y(use)30 b(the)h(lo)m(w-lev)m(el)i(in)m
+(terface.)150 1051 y(F)-8 b(or)31 b(the)g(meaning)f(of)h(parameters)g
+Fi(blockSize100k)p Fj(,)c Fi(verbosity)h Fj(and)h Fi(workFactor)p
+Fj(,)150 1160 y(see)i Fi(BZ2_bzCompressInit)p Fj(.)150
+1317 y(T)-8 b(o)37 b(guaran)m(tee)h(that)f(the)f(compressed)h(data)f
+(will)h(\014t)f(in)g(its)h(bu\013er,)g(allo)s(cate)h(an)e(output)g
+(bu\013er)g(of)150 1427 y(size)31 b(1\045)g(larger)g(than)f(the)h
+(uncompressed)e(data,)i(plus)f(six)g(h)m(undred)f(extra)i(b)m(ytes.)150
+1584 y Fi(BZ2_bzBuffToBuffDecompre)o(ss)24 b Fj(will)31
+b(not)g(write)g(data)f(at)h(or)g(b)s(ey)m(ond)e Fi(dest[*destLen])p
+Fj(,)e(ev)m(en)k(in)150 1693 y(case)g(of)g(bu\013er)e(o)m(v)m(er\015o)m
+(w.)150 1850 y(P)m(ossible)j(return)e(v)-5 b(alues:)572
+2001 y Fi(BZ_CONFIG_ERROR)663 2105 y Fj(if)30 b(the)h(library)f(has)g
+(b)s(een)g(mis-compiled)572 2209 y Fi(BZ_PARAM_ERROR)663
+2313 y Fj(if)g Fi(dest)f Fj(is)i Fi(NULL)e Fj(or)i Fi(destLen)d
+Fj(is)i Fi(NULL)663 2416 y Fj(or)g Fi(blockSize100k)45
+b(<)i(1)30 b Fj(or)h Fi(blockSize100k)44 b(>)j(9)663
+2520 y Fj(or)30 b Fi(verbosity)46 b(<)h(0)30 b Fj(or)h
+Fi(verbosity)45 b(>)i(4)663 2624 y Fj(or)30 b Fi(workFactor)45
+b(<)j(0)30 b Fj(or)g Fi(workFactor)45 b(>)j(250)572 2728
+y(BZ_MEM_ERROR)663 2831 y Fj(if)30 b(insu\016cien)m(t)h(memory)f(is)h
+(a)m(v)-5 b(ailable)572 2935 y Fi(BZ_OUTBUFF_FULL)663
+3039 y Fj(if)30 b(the)h(size)g(of)g(the)f(compressed)h(data)f(exceeds)i
+Fi(*destLen)572 3143 y(BZ_OK)663 3247 y Fj(otherwise)150
+3616 y Fe(3.5.2)63 b Fd(BZ2_bzBuffToBuffDecompress)533
+3803 y Fi(int)47 b(BZ2_bzBuffToBuffDecompres)o(s)42 b(\()47
+b(char*)428 b(dest,)2108 3906 y(unsigned)46 b(int*)g(destLen,)2108
+4010 y(char*)428 b(source,)2108 4114 y(unsigned)46 b(int)94
+b(sourceLen,)2108 4218 y(int)524 b(small,)2108 4322 y(int)g(verbosity)
+46 b(\);)150 4478 y Fj(A)m(ttempts)22 b(to)g(decompress)f(the)h(data)f
+(in)g Fi(source[0)28 b(..)i(sourceLen-1])18 b Fj(in)m(to)k(the)f
+(destination)h(bu\013er,)150 4588 y Fi(dest[0)29 b(..)g(*destLen-1])p
+Fj(.)61 b(If)37 b(the)h(destination)h(bu\013er)e(is)h(big)g(enough,)i
+Fi(*destLen)35 b Fj(is)j(set)h(to)g(the)150 4698 y(size)e(of)e(the)h
+(uncompressed)f(data,)j(and)c Fi(BZ_OK)h Fj(is)g(returned.)56
+b(If)36 b(the)g(compressed)f(data)h(w)m(on't)h(\014t,)150
+4807 y Fi(*destLen)28 b Fj(is)j(unc)m(hanged,)f(and)f
+Fi(BZ_OUTBUFF_FULL)d Fj(is)31 b(returned.)150 4964 y
+Fi(source)e Fj(is)h(assumed)f(to)j(hold)e(a)g(complete)i
+Fi(bzip2)d Fj(format)i(data)g(stream.)150 5074 y Fi
+(BZ2_bzBuffToBuffDecompre)o(ss)38 b Fj(tries)46 b(to)f(decompress)f
+(the)h(en)m(tiret)m(y)i(of)d(the)h(stream)g(in)m(to)h(the)150
+5183 y(output)30 b(bu\013er.)150 5340 y(F)-8 b(or)31
+b(the)g(meaning)f(of)h(parameters)g Fi(small)e Fj(and)g
+Fi(verbosity)p Fj(,)f(see)j Fi(BZ2_bzDecompressInit)p
+Fj(.)p eop
 %%Page: 29 30
 29 29 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(29)150 299 y(Flushes/closes)27
-b(a)h Fj(BZFILE)p Fl(.)39 b Fj(BZ2_bzflush)24 b Fl(do)s(esn't)k
-(actually)f(do)h(an)m(ything.)39 b(Analogous)28 b(to)h
-Fj(fflush)150 408 y Fl(and)h Fj(fclose)p Fl(.)390 559
-y Fj(const)46 b(char)h(*)g(BZ2_bzerror)e(\()j(BZFILE)e(*b,)h(int)g
-(*errnum)e(\))150 716 y Fl(Returns)31 b(a)i(string)e(describing)f(the)i
-(more)g(recen)m(t)h(error)f(status)h(of)f Fj(b)p Fl(,)g(and)g(also)g
-(sets)h Fj(*errnum)d Fl(to)j(its)150 826 y(n)m(umerical)c(v)-5
-b(alue.)150 1242 y Fk(3.7)68 b(Using)46 b(the)f(library)g(in)g(a)g
-Fd(stdio)p Fk(-free)f(en)l(vironmen)l(t)150 1615 y Ff(3.7.1)63
-b(Getting)40 b(rid)h(of)g Fe(stdio)150 1807 y Fl(In)i(a)g(deeply)g(em)m
-(b)s(edded)f(application,)j(y)m(ou)f(migh)m(t)f(w)m(an)m(t)h(to)g(use)f
-(just)g(the)h(memory-to-memory)150 1917 y(functions.)39
-b(Y)-8 b(ou)30 b(can)f(do)g(this)g(con)m(v)m(enien)m(tly)g(b)m(y)g
-(compiling)e(the)j(library)d(with)h(prepro)s(cessor)g(sym)m(b)s(ol)150
-2026 y Fj(BZ_NO_STDIO)35 b Fl(de\014ned.)63 b(Doing)39
-b(this)e(giv)m(es)h(y)m(ou)h(a)f(library)e(con)m(taining)i(only)f(the)i
-(follo)m(wing)e(eigh)m(t)150 2136 y(functions:)150 2293
-y Fj(BZ2_bzCompressInit)p Fl(,)26 b Fj(BZ2_bzCompress)p
-Fl(,)g Fj(BZ2_bzCompressEnd)150 2402 y(BZ2_bzDecompressInit)p
-Fl(,)f Fj(BZ2_bzDecompress)p Fl(,)h Fj(BZ2_bzDecompressEnd)150
-2512 y(BZ2_bzBuffToBuffCompress)o Fl(,)f Fj(BZ2_bzBuffToBuffDecompre)o
-(ss)150 2669 y Fl(When)30 b(compiled)f(lik)m(e)h(this,)f(all)g
-(functions)g(will)f(ignore)i Fj(verbosity)e Fl(settings.)150
-3006 y Ff(3.7.2)63 b(Critical)40 b(error)h(handling)150
-3199 y Fj(libbzip2)20 b Fl(con)m(tains)j(a)g(n)m(um)m(b)s(er)f(of)g(in)
-m(ternal)g(assertion)g(c)m(hec)m(ks)i(whic)m(h)d(should,)i(needless)f
-(to)h(sa)m(y)-8 b(,)26 b(nev)m(er)150 3308 y(b)s(e)g(activ)-5
-b(ated.)40 b(Nev)m(ertheless,)28 b(if)d(an)i(assertion)f(should)e
-(fail,)i(b)s(eha)m(viour)f(dep)s(ends)f(on)j(whether)e(or)i(not)150
-3418 y(the)k(library)d(w)m(as)i(compiled)f(with)g Fj(BZ_NO_STDIO)e
-Fl(set.)150 3575 y(F)-8 b(or)31 b(a)g(normal)e(compile,)h(an)g
-(assertion)g(failure)f(yields)f(the)j(message)533 3726
-y Fj(bzip2/libbzip2:)44 b(internal)h(error)i(number)f(N.)533
-3829 y(This)h(is)g(a)g(bug)g(in)h(bzip2/libbzip2,)43
-b(1.0)k(of)g(21-Mar-2000.)533 3933 y(Please)f(report)g(it)i(to)f(me)g
-(at:)g(jseward@acm.org.)91 b(If)47 b(this)g(happened)533
-4037 y(when)g(you)g(were)f(using)h(some)f(program)g(which)h(uses)f
-(libbzip2)g(as)h(a)533 4141 y(component,)e(you)i(should)f(also)h
-(report)f(this)h(bug)f(to)i(the)f(author\(s\))533 4244
-y(of)g(that)g(program.)93 b(Please)46 b(make)h(an)g(effort)f(to)h
-(report)g(this)f(bug;)533 4348 y(timely)g(and)h(accurate)f(bug)h
-(reports)e(eventually)g(lead)i(to)g(higher)533 4452 y(quality)f
-(software.)93 b(Thanks.)h(Julian)46 b(Seward,)f(21)j(March)e(2000.)150
-4609 y Fl(where)30 b Fj(N)g Fl(is)f(some)i(error)f(co)s(de)h(n)m(um)m
-(b)s(er.)39 b Fj(exit\(3\))28 b Fl(is)i(then)g(called.)150
-4766 y(F)-8 b(or)31 b(a)g Fj(stdio)p Fl(-free)e(library)-8
-b(,)29 b(assertion)h(failures)e(result)i(in)f(a)i(call)e(to)i(a)g
-(function)e(declared)h(as:)533 4917 y Fj(extern)46 b(void)h
-(bz_internal_error)c(\()k(int)g(errcode)f(\);)150 5074
-y Fl(The)30 b(relev)-5 b(an)m(t)31 b(co)s(de)f(is)g(passed)f(as)i(a)g
-(parameter.)41 b(Y)-8 b(ou)31 b(should)d(supply)g(suc)m(h)i(a)h
-(function.)150 5230 y(In)g(either)g(case,)j(once)e(an)g(assertion)g
-(failure)e(has)h(o)s(ccurred,)h(an)m(y)g Fj(bz_stream)e
-Fl(records)h(in)m(v)m(olv)m(ed)h(can)150 5340 y(b)s(e)e(regarded)g(as)h
-(in)m(v)-5 b(alid.)38 b(Y)-8 b(ou)31 b(should)d(not)j(attempt)g(to)g
-(resume)f(normal)g(op)s(eration)f(with)g(them.)p eop
+b(with)g Fi(libbzip2)1881 b Fl(29)150 299 y Fj(Because)31
+b(the)g(compression)g(ratio)g(of)g(the)g(compressed)f(data)h(cannot)g
+(b)s(e)f(kno)m(wn)g(in)g(adv)-5 b(ance,)31 b(there)150
+408 y(is)g(no)f(easy)i(w)m(a)m(y)f(to)h(guaran)m(tee)g(that)f(the)g
+(output)g(bu\013er)f(will)h(b)s(e)f(big)h(enough.)42
+b(Y)-8 b(ou)30 b(ma)m(y)i(of)e(course)150 518 y(mak)m(e)j(arrangemen)m
+(ts)h(in)e(y)m(our)h(co)s(de)f(to)i(record)f(the)g(size)g(of)g(the)g
+(uncompressed)e(data,)j(but)e(suc)m(h)g(a)150 628 y(mec)m(hanism)e(is)h
+(b)s(ey)m(ond)f(the)g(scop)s(e)h(of)f(this)h(library)-8
+b(.)150 784 y Fi(BZ2_bzBuffToBuffDecompre)o(ss)24 b Fj(will)31
+b(not)g(write)g(data)f(at)h(or)g(b)s(ey)m(ond)e Fi(dest[*destLen])p
+Fj(,)e(ev)m(en)k(in)150 894 y(case)g(of)g(bu\013er)e(o)m(v)m(er\015o)m
+(w.)150 1051 y(P)m(ossible)j(return)e(v)-5 b(alues:)572
+1202 y Fi(BZ_CONFIG_ERROR)663 1306 y Fj(if)30 b(the)h(library)f(has)g
+(b)s(een)g(mis-compiled)572 1409 y Fi(BZ_PARAM_ERROR)663
+1513 y Fj(if)g Fi(dest)f Fj(is)i Fi(NULL)e Fj(or)i Fi(destLen)d
+Fj(is)i Fi(NULL)663 1617 y Fj(or)g Fi(small)47 b(!=)g(0)g(&&)h(small)e
+(!=)h(1)663 1721 y Fj(or)30 b Fi(verbosity)46 b(<)h(0)30
+b Fj(or)h Fi(verbosity)45 b(>)i(4)572 1825 y(BZ_MEM_ERROR)663
+1928 y Fj(if)30 b(insu\016cien)m(t)h(memory)f(is)h(a)m(v)-5
+b(ailable)572 2032 y Fi(BZ_OUTBUFF_FULL)663 2136 y Fj(if)30
+b(the)h(size)g(of)g(the)f(compressed)h(data)f(exceeds)i
+Fi(*destLen)572 2240 y(BZ_DATA_ERROR)663 2343 y Fj(if)e(a)h(data)f(in)m
+(tegrit)m(y)j(error)e(w)m(as)g(detected)g(in)g(the)f(compressed)h(data)
+572 2447 y Fi(BZ_DATA_ERROR_MAGIC)663 2551 y Fj(if)f(the)h(compressed)f
+(data)h(do)s(esn't)f(b)s(egin)g(with)g(the)h(righ)m(t)g(magic)h(b)m
+(ytes)572 2655 y Fi(BZ_UNEXPECTED_EOF)663 2759 y Fj(if)e(the)h
+(compressed)f(data)h(ends)e(unexp)s(ectedly)572 2862
+y Fi(BZ_OK)663 2966 y Fj(otherwise)150 3370 y Fk(3.6)68
+b Fc(zlib)43 b Fk(compatibilit)l(y)k(functions)150 3563
+y Fj(Y)-8 b(oshiok)j(a)32 b(Tsuneo)f(has)f(con)m(tributed)i(some)f
+(functions)g(to)h(giv)m(e)h(b)s(etter)e Fi(zlib)f Fj(compatibilit)m(y)
+-8 b(.)46 b(These)150 3673 y(functions)37 b(are)g Fi(BZ2_bzopen)p
+Fj(,)f Fi(BZ2_bzread)p Fj(,)g Fi(BZ2_bzwrite)p Fj(,)g
+Fi(BZ2_bzflush)p Fj(,)f Fi(BZ2_bzclose)p Fj(,)h Fi(BZ2_)150
+3782 y(bzerror)22 b Fj(and)g Fi(BZ2_bzlibVersion)p Fj(.)34
+b(These)24 b(functions)f(are)h(not)g(\(y)m(et\))h(o\016cially)g(part)f
+(of)g(the)f(library)-8 b(.)150 3892 y(If)30 b(they)h(break,)f(y)m(ou)h
+(get)h(to)f(k)m(eep)g(all)g(the)g(pieces.)41 b(Nev)m(ertheless,)33
+b(I)e(think)f(they)g(w)m(ork)h(ok.)390 4043 y Fi(typedef)46
+b(void)g(BZFILE;)390 4250 y(const)g(char)h(*)g(BZ2_bzlibVersion)d(\()j
+(void)g(\);)150 4407 y Fj(Returns)30 b(a)h(string)f(indicating)h(the)g
+(library)f(v)m(ersion.)390 4558 y Fi(BZFILE)46 b(*)i(BZ2_bzopen)92
+b(\()48 b(const)e(char)h(*path,)f(const)g(char)h(*mode)f(\);)390
+4662 y(BZFILE)g(*)i(BZ2_bzdopen)c(\()k(int)381 b(fd,)190
+b(const)46 b(char)h(*mode)f(\);)150 4819 y Fj(Op)s(ens)36
+b(a)i Fi(.bz2)e Fj(\014le)i(for)f(reading)h(or)f(writing,)j(using)d
+(either)h(its)g(name)f(or)h(a)g(pre-existing)g(\014le)g(de-)150
+4928 y(scriptor.)j(Analogous)31 b(to)g Fi(fopen)e Fj(and)h
+Fi(fdopen)p Fj(.)390 5079 y Fi(int)47 b(BZ2_bzread)93
+b(\()47 b(BZFILE*)f(b,)h(void*)f(buf,)h(int)g(len)g(\);)390
+5183 y(int)g(BZ2_bzwrite)e(\()i(BZFILE*)f(b,)h(void*)f(buf,)h(int)g
+(len)g(\);)150 5340 y Fj(Reads/writes)31 b(data)g(from/to)g(a)g
+(previously)f(op)s(ened)f Fi(BZFILE)p Fj(.)39 b(Analogous)31
+b(to)g Fi(fread)e Fj(and)g Fi(fwrite)p Fj(.)p eop
 %%Page: 30 31
 30 30 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
-b(with)g Fj(libbzip2)1881 b Fl(30)150 299 y(Y)-8 b(ou)22
-b(ma)m(y)-8 b(,)25 b(of)d(course,)h(c)m(hange)g(critical)e(error)g
-(handling)e(to)j(suit)f(y)m(our)g(needs.)38 b(As)21 b(I)h(said)e(ab)s
-(o)m(v)m(e,)25 b(critical)150 408 y(errors)30 b(indicate)g(bugs)g(in)g
-(the)h(library)d(and)i(should)f(not)i(o)s(ccur.)42 b(All)29
-b Fj(")p Fl(normal)p Fj(")h Fl(error)g(situations)g(are)150
-518 y(indicated)f(via)h(error)g(return)f(co)s(des)i(from)f(functions,)f
-(and)g(can)i(b)s(e)f(reco)m(v)m(ered)i(from.)150 798
-y Fk(3.8)68 b(Making)45 b(a)g(Windo)l(ws)h(DLL)150 990
-y Fl(Ev)m(erything)30 b(related)g(to)h(Windo)m(ws)f(has)g(b)s(een)f
-(con)m(tributed)h(b)m(y)g(Y)-8 b(oshiok)j(a)31 b(Tsuneo)150
-1100 y(\()p Fj(QWF00133@niftyserve.or.jp)46 b Fl(/)52
-b Fj(tsuneo-y@is.aist-nara.ac.j)o(p)p Fl(\),)g(so)h(y)m(ou)f(should)f
-(send)150 1210 y(y)m(our)30 b(queries)g(to)h(him)e(\(but)h(p)s(erhaps)e
-(Cc:)41 b(me,)31 b Fj(jseward@acm.org)p Fl(\).)150 1366
-y(My)43 b(v)-5 b(ague)44 b(understanding)d(of)i(what)g(to)h(do)f(is:)65
-b(using)41 b(Visual)h(C)p Fj(++)g Fl(5.0,)48 b(op)s(en)42
-b(the)h(pro)5 b(ject)44 b(\014le)150 1476 y Fj(libbz2.dsp)p
-Fl(,)28 b(and)i(build.)37 b(That's)31 b(all.)150 1633
-y(If)41 b(y)m(ou)g(can't)h(op)s(en)e(the)h(pro)5 b(ject)42
-b(\014le)e(for)h(some)g(reason,)j(mak)m(e)e(a)g(new)e(one,)k(naming)c
-(these)i(\014les:)150 1742 y Fj(blocksort.c)p Fl(,)28
-b Fj(bzlib.c)p Fl(,)g Fj(compress.c)p Fl(,)g Fj(crctable.c)p
-Fl(,)g Fj(decompress.c)p Fl(,)f Fj(huffman.c)p Fl(,)150
-1852 y Fj(randtable.c)32 b Fl(and)j Fj(libbz2.def)p Fl(.)53
-b(Y)-8 b(ou)36 b(will)d(also)i(need)g(to)h(name)g(the)g(header)f
-(\014les)f Fj(bzlib.h)g Fl(and)150 1962 y Fj(bzlib_private.h)p
-Fl(.)150 2118 y(If)c(y)m(ou)h(don't)f(use)g(V)m(C)p Fj(++)p
-Fl(,)g(y)m(ou)h(ma)m(y)g(need)f(to)h(de\014ne)f(the)h(propro)s(cessor)e
-(sym)m(b)s(ol)g Fj(_WIN32)p Fl(.)150 2275 y(Finally)-8
-b(,)28 b Fj(dlltest.c)e Fl(is)h(a)i(sample)f(program)g(using)g(the)g
-(DLL.)h(It)g(has)f(a)h(pro)5 b(ject)29 b(\014le,)g Fj(dlltest.dsp)p
-Fl(.)150 2432 y(If)h(y)m(ou)h(just)e(w)m(an)m(t)j(a)e(mak)m(e\014le)h
-(for)f(Visual)f(C,)h(ha)m(v)m(e)i(a)e(lo)s(ok)g(at)i
-Fj(makefile.msc)p Fl(.)150 2589 y(Be)k(a)m(w)m(are)g(that)g(if)e(y)m
-(ou)h(compile)f Fj(bzip2)g Fl(itself)g(on)h(Win32,)h(y)m(ou)g(m)m(ust)f
-(set)g Fj(BZ_UNIX)e Fl(to)j(0)f(and)g Fj(BZ_)150 2698
-y(LCCWIN32)27 b Fl(to)j(1,)g(in)f(the)g(\014le)g Fj(bzip2.c)p
-Fl(,)e(b)s(efore)i(compiling.)39 b(Otherwise)28 b(the)h(resulting)f
-(binary)f(w)m(on't)150 2808 y(w)m(ork)j(correctly)-8
-b(.)150 2965 y(I)30 b(ha)m(v)m(en't)i(tried)d(an)m(y)i(of)g(this)e
-(stu\013)h(m)m(yself,)g(but)g(it)f(all)h(lo)s(oks)g(plausible.)p
-eop
+b(with)g Fi(libbzip2)1881 b Fl(30)390 299 y Fi(int)95
+b(BZ2_bzflush)44 b(\()k(BZFILE*)e(b)h(\);)390 403 y(void)g(BZ2_bzclose)
+d(\()k(BZFILE*)e(b)h(\);)150 559 y Fj(Flushes/closes)29
+b(a)f Fi(BZFILE)p Fj(.)38 b Fi(BZ2_bzflush)25 b Fj(do)s(esn't)j
+(actually)h(do)f(an)m(ything.)41 b(Analogous)28 b(to)h
+Fi(fflush)150 669 y Fj(and)h Fi(fclose)p Fj(.)390 820
+y Fi(const)46 b(char)h(*)g(BZ2_bzerror)e(\()j(BZFILE)e(*b,)h(int)g
+(*errnum)e(\))150 977 y Fj(Returns)29 b(a)h(string)g(describing)g(the)f
+(more)i(recen)m(t)g(error)f(status)g(of)f Fi(b)p Fj(,)h(and)f(also)h
+(sets)g Fi(*errnum)e Fj(to)i(its)150 1087 y(n)m(umerical)h(v)-5
+b(alue.)150 1411 y Fk(3.7)68 b(Using)46 b(the)f(library)g(in)g(a)g
+Fc(stdio)p Fk(-free)f(en)l(vironmen)l(t)150 1723 y Fe(3.7.1)63
+b(Getting)41 b(rid)g(of)g Fd(stdio)150 1915 y Fj(In)g(a)g(deeply)h(em)m
+(b)s(edded)e(application,)46 b(y)m(ou)41 b(migh)m(t)i(w)m(an)m(t)f(to)g
+(use)f(just)g(the)h(memory-to-memory)150 2025 y(functions.)d(Y)-8
+b(ou)27 b(can)g(do)g(this)g(con)m(v)m(enien)m(tly)j(b)m(y)d(compiling)h
+(the)f(library)g(with)g(prepro)s(cessor)g(sym)m(b)s(ol)150
+2135 y Fi(BZ_NO_STDIO)34 b Fj(de\014ned.)60 b(Doing)38
+b(this)f(giv)m(es)i(y)m(ou)e(a)h(library)f(con)m(taining)i(only)e(the)h
+(follo)m(wing)g(eigh)m(t)150 2244 y(functions:)150 2401
+y Fi(BZ2_bzCompressInit)p Fj(,)26 b Fi(BZ2_bzCompress)p
+Fj(,)g Fi(BZ2_bzCompressEnd)150 2511 y(BZ2_bzDecompressInit)p
+Fj(,)f Fi(BZ2_bzDecompress)p Fj(,)h Fi(BZ2_bzDecompressEnd)150
+2620 y(BZ2_bzBuffToBuffCompress)o Fj(,)f Fi(BZ2_bzBuffToBuffDecompre)o
+(ss)150 2777 y Fj(When)30 b(compiled)h(lik)m(e)g(this,)g(all)g
+(functions)f(will)h(ignore)g Fi(verbosity)d Fj(settings.)150
+3053 y Fe(3.7.2)63 b(Critical)40 b(error)h(handling)150
+3246 y Fi(libbzip2)18 b Fj(con)m(tains)k(a)f(n)m(um)m(b)s(er)e(of)i(in)
+m(ternal)h(assertion)f(c)m(hec)m(ks)h(whic)m(h)f(should,)g(needless)g
+(to)h(sa)m(y)-8 b(,)23 b(nev)m(er)150 3355 y(b)s(e)35
+b(activ)-5 b(ated.)58 b(Nev)m(ertheless,)40 b(if)35 b(an)h(assertion)g
+(should)f(fail,)i(b)s(eha)m(viour)f(dep)s(ends)e(on)h(whether)h(or)150
+3465 y(not)31 b(the)f(library)h(w)m(as)f(compiled)h(with)f
+Fi(BZ_NO_STDIO)e Fj(set.)150 3622 y(F)-8 b(or)31 b(a)g(normal)f
+(compile,)i(an)e(assertion)h(failure)f(yields)h(the)g(message)533
+3773 y Fi(bzip2/libbzip2:)44 b(internal)h(error)i(number)f(N.)533
+3877 y(This)h(is)g(a)g(bug)g(in)h(bzip2/libbzip2,)43
+b(1.0.2,)j(30-Dec-2001.)533 3980 y(Please)g(report)g(it)i(to)f(me)g
+(at:)g(jseward@acm.org.)91 b(If)47 b(this)g(happened)533
+4084 y(when)g(you)g(were)f(using)h(some)f(program)g(which)h(uses)f
+(libbzip2)g(as)h(a)533 4188 y(component,)e(you)i(should)f(also)h
+(report)f(this)h(bug)f(to)i(the)f(author\(s\))533 4292
+y(of)g(that)g(program.)93 b(Please)46 b(make)h(an)g(effort)f(to)h
+(report)g(this)f(bug;)533 4395 y(timely)g(and)h(accurate)f(bug)h
+(reports)e(eventually)g(lead)i(to)g(higher)533 4499 y(quality)f
+(software.)93 b(Thanks.)h(Julian)46 b(Seward,)f(30)j(December)d(2001.)
+150 4656 y Fj(where)33 b Fi(N)g Fj(is)g(some)g(error)h(co)s(de)f(n)m
+(um)m(b)s(er.)48 b(If)32 b Fi(N)e(==)g(1007)p Fj(,)j(it)h(also)f(prin)m
+(ts)g(some)h(extra)g(text)g(advising)150 4766 y(the)e(reader)f(that)h
+(unreliable)f(memory)h(is)f(often)h(asso)s(ciated)g(with)f(in)m(ternal)
+h(error)g(1007.)45 b(\(This)32 b(is)f(a)150 4875 y(frequen)m
+(tly-observ)m(ed-phenomenon)g(with)f(v)m(ersions)h(1.0.0/1.0.1\).)150
+5032 y Fi(exit\(3\))d Fj(is)j(then)f(called.)150 5189
+y(F)-8 b(or)31 b(a)g Fi(stdio)p Fj(-free)e(library)-8
+b(,)31 b(assertion)h(failures)e(result)h(in)f(a)g(call)i(to)f(a)f
+(function)h(declared)f(as:)533 5340 y Fi(extern)46 b(void)h
+(bz_internal_error)c(\()k(int)g(errcode)f(\);)p eop
 %%Page: 31 32
-31 31 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
-b(31)150 299 y Fh(4)80 b(Miscellanea)150 583 y Fl(These)30
-b(are)h(just)f(some)g(random)g(though)m(ts)h(of)f(mine.)40
-b(Y)-8 b(our)30 b(mileage)h(ma)m(y)g(v)-5 b(ary)d(.)150
-884 y Fk(4.1)68 b(Limitations)47 b(of)e(the)g(compressed)g(\014le)h
-(format)150 1077 y Fj(bzip2-1.0)p Fl(,)e Fj(0.9.5)e Fl(and)g
-Fj(0.9.0)g Fl(use)h(exactly)h(the)f(same)h(\014le)e(format)i(as)f(the)h
-(previous)d(v)m(ersion,)150 1186 y Fj(bzip2-0.1)p Fl(.)75
-b(This)41 b(decision)g(w)m(as)i(made)g(in)e(the)i(in)m(terests)g(of)g
-(stabilit)m(y)-8 b(.)77 b(Creating)42 b(y)m(et)i(another)150
-1296 y(incompatible)21 b(compressed)i(\014le)f(format)i(w)m(ould)e
-(create)i(further)e(confusion)g(and)h(disruption)d(for)j(users.)150
-1453 y(Nev)m(ertheless,)31 b(this)e(is)g(not)h(a)g(painless)e
-(decision.)39 b(Dev)m(elopmen)m(t)31 b(w)m(ork)f(since)f(the)h(release)
-h(of)f Fj(bzip2-)150 1562 y(0.1)19 b Fl(in)g(August)i(1997)h(has)e(sho)
-m(wn)f(complexities)h(in)f(the)h(\014le)g(format)g(whic)m(h)f(slo)m(w)h
-(do)m(wn)g(decompression)150 1672 y(and,)30 b(in)f(retrosp)s(ect,)i
-(are)g(unnecessary)-8 b(.)40 b(These)31 b(are:)225 1829
-y Fi(\017)60 b Fl(The)20 b(run-length)g(enco)s(der,)i(whic)m(h)e(is)g
-(the)h(\014rst)f(of)h(the)g(compression)f(transformations,)i(is)e(en)m
-(tirely)330 1938 y(irrelev)-5 b(an)m(t.)63 b(The)38 b(original)e(purp)s
-(ose)g(w)m(as)j(to)g(protect)g(the)f(sorting)g(algorithm)f(from)g(the)i
-(v)m(ery)330 2048 y(w)m(orst)h(case)h(input:)58 b(a)41
-b(string)e(of)h(rep)s(eated)g(sym)m(b)s(ols.)68 b(But)40
-b(algorithm)f(steps)h(Q6a)h(and)e(Q6b)330 2157 y(in)30
-b(the)i(original)e(Burro)m(ws-Wheeler)i(tec)m(hnical)g(rep)s(ort)f
-(\(SR)m(C-124\))i(sho)m(w)f(ho)m(w)g(rep)s(eats)g(can)g(b)s(e)330
-2267 y(handled)c(without)i(di\016cult)m(y)f(in)g(blo)s(c)m(k)h
-(sorting.)225 2409 y Fi(\017)60 b Fl(The)30 b(randomisation)e(mec)m
-(hanism)i(do)s(esn't)g(really)f(need)h(to)g(b)s(e)g(there.)41
-b(Udi)29 b(Man)m(b)s(er)h(and)f(Gene)330 2518 y(My)m(ers)j(published)c
-(a)33 b(su\016x)e(arra)m(y)h(construction)f(algorithm)g(a)h(few)g(y)m
-(ears)h(bac)m(k,)g(whic)m(h)d(can)j(b)s(e)330 2628 y(emplo)m(y)m(ed)27
-b(to)h(sort)g(an)m(y)f(blo)s(c)m(k,)h(no)f(matter)h(ho)m(w)f(rep)s
-(etitiv)m(e,)h(in)d(O\(N)j(log)f(N\))h(time.)39 b(Subsequen)m(t)330
-2737 y(w)m(ork)25 b(b)m(y)f(Kunihik)m(o)f(Sadak)-5 b(ane)24
-b(has)h(pro)s(duced)e(a)i(deriv)-5 b(ativ)m(e)24 b(O\(N)h(\(log)g(N\))p
-Fj(^)p Fl(2\))h(algorithm)d(whic)m(h)330 2847 y(usually)28
-b(outp)s(erforms)h(the)i(Man)m(b)s(er-My)m(ers)g(algorithm.)330
-2988 y(I)g(could)g(ha)m(v)m(e)i(c)m(hanged)f(to)g(Sadak)-5
-b(ane's)32 b(algorithm,)f(but)g(I)g(\014nd)f(it)h(to)h(b)s(e)f(slo)m(w)
-m(er)h(than)f Fj(bzip2)p Fl('s)330 3098 y(existing)38
-b(algorithm)g(for)h(most)h(inputs,)f(and)g(the)g(randomisation)f(mec)m
-(hanism)g(protects)i(ade-)330 3208 y(quately)34 b(against)f(bad)g
-(cases.)52 b(I)33 b(didn't)f(think)g(it)i(w)m(as)g(a)g(go)s(o)s(d)f
-(tradeo\013)i(to)f(mak)m(e.)51 b(P)m(artly)34 b(this)330
-3317 y(is)39 b(due)h(to)h(the)f(fact)h(that)g(I)f(w)m(as)g(not)h(\015o)
-s(o)s(ded)e(with)g(email)g(complain)m(ts)g(ab)s(out)h
-Fj(bzip2-0.1)p Fl('s)330 3427 y(p)s(erformance)30 b(on)g(rep)s(etitiv)m
-(e)g(data,)h(so)g(p)s(erhaps)d(it)i(isn't)g(a)h(problem)d(for)j(real)f
-(inputs.)330 3568 y(Probably)i(the)h(b)s(est)g(long-term)g(solution,)g
-(and)g(the)g(one)h(I)f(ha)m(v)m(e)h(incorp)s(orated)e(in)m(to)i(0.9.5)h
-(and)330 3678 y(ab)s(o)m(v)m(e,)42 b(is)c(to)h(use)f(the)h(existing)f
-(sorting)g(algorithm)f(initially)-8 b(,)38 b(and)g(fall)f(bac)m(k)i(to)
-h(a)f(O\(N)f(\(log)330 3787 y(N\))p Fj(^)p Fl(2\))31
-b(algorithm)f(if)f(the)i(standard)e(algorithm)h(gets)h(in)m(to)f
-(di\016culties.)225 3929 y Fi(\017)60 b Fl(The)31 b(compressed)f
-(\014le)g(format)i(w)m(as)f(nev)m(er)h(designed)d(to)j(b)s(e)f(handled)
-e(b)m(y)i(a)g(library)-8 b(,)29 b(and)i(I)g(ha)m(v)m(e)330
-4039 y(had)d(to)i(jump)e(though)g(some)i(ho)s(ops)e(to)i(pro)s(duce)e
-(an)h(e\016cien)m(t)g(implemen)m(tation)f(of)h(decompres-)330
-4148 y(sion.)38 b(It's)26 b(a)h(bit)e(hairy)-8 b(.)38
-b(T)-8 b(ry)26 b(passing)f Fj(decompress.c)d Fl(through)k(the)g(C)f
-(prepro)s(cessor)g(and)h(y)m(ou'll)330 4258 y(see)32
-b(what)g(I)f(mean.)45 b(Muc)m(h)32 b(of)g(this)e(complexit)m(y)i(could)
-f(ha)m(v)m(e)i(b)s(een)e(a)m(v)m(oided)h(if)e(the)i(compressed)330
-4367 y(size)e(of)h(eac)m(h)g(blo)s(c)m(k)f(of)h(data)g(w)m(as)g
-(recorded)f(in)f(the)h(data)h(stream.)225 4509 y Fi(\017)60
-b Fl(An)30 b(Adler-32)g(c)m(hec)m(ksum,)i(rather)e(than)g(a)h(CR)m(C32)
-g(c)m(hec)m(ksum,)g(w)m(ould)e(b)s(e)h(faster)h(to)g(compute.)150
-4698 y(It)e(w)m(ould)f(b)s(e)g(fair)g(to)h(sa)m(y)h(that)g(the)f
-Fj(bzip2)e Fl(format)i(w)m(as)h(frozen)f(b)s(efore)f(I)h(prop)s(erly)d
-(and)j(fully)d(under-)150 4807 y(sto)s(o)s(d)k(the)h(p)s(erformance)e
-(consequences)i(of)g(doing)e(so.)150 4964 y(Impro)m(v)m(emen)m(ts)d
-(whic)m(h)e(I)i(w)m(as)g(able)f(to)h(incorp)s(orate)f(in)m(to)g(0.9.0,)
-k(despite)24 b(using)g(the)i(same)g(\014le)e(format,)150
-5074 y(are:)225 5230 y Fi(\017)60 b Fl(Single)30 b(arra)m(y)i(implemen)
-m(tation)e(of)h(the)h(in)m(v)m(erse)f(BWT.)h(This)e(signi\014can)m(tly)
-f(sp)s(eeds)i(up)f(decom-)330 5340 y(pression,)f(presumably)f(b)s
-(ecause)i(it)g(reduces)g(the)h(n)m(um)m(b)s(er)e(of)i(cac)m(he)h
-(misses.)p eop
+31 31 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
+b(with)g Fi(libbzip2)1881 b Fl(31)150 299 y Fj(The)30
+b(relev)-5 b(an)m(t)32 b(co)s(de)f(is)f(passed)g(as)g(a)h(parameter.)41
+b(Y)-8 b(ou)31 b(should)e(supply)g(suc)m(h)h(a)g(function.)150
+456 y(In)f(either)h(case,)g(once)g(an)f(assertion)h(failure)f(has)f(o)s
+(ccurred,)i(an)m(y)f Fi(bz_stream)e Fj(records)i(in)m(v)m(olv)m(ed)i
+(can)150 565 y(b)s(e)f(regarded)g(as)h(in)m(v)-5 b(alid.)41
+b(Y)-8 b(ou)30 b(should)f(not)i(attempt)h(to)f(resume)f(normal)h(op)s
+(eration)g(with)f(them.)150 722 y(Y)-8 b(ou)27 b(ma)m(y)-8
+b(,)28 b(of)f(course,)h(c)m(hange)f(critical)i(error)e(handling)f(to)h
+(suit)g(y)m(our)g(needs.)39 b(As)26 b(I)h(said)f(ab)s(o)m(v)m(e,)j
+(crit-)150 832 y(ical)f(errors)g(indicate)g(bugs)e(in)h(the)h(library)f
+(and)f(should)g(not)i(o)s(ccur.)40 b(All)27 b Fi(")p
+Fj(normal)p Fi(")g Fj(error)g(situations)150 941 y(are)k(indicated)g
+(via)f(error)h(return)f(co)s(des)h(from)f(functions,)g(and)g(can)g(b)s
+(e)g(reco)m(v)m(ered)i(from.)150 1221 y Fk(3.8)68 b(Making)45
+b(a)g(Windo)l(ws)h(DLL)150 1414 y Fj(Ev)m(erything)31
+b(related)g(to)h(Windo)m(ws)e(has)f(b)s(een)h(con)m(tributed)h(b)m(y)f
+(Y)-8 b(oshiok)j(a)32 b(Tsuneo)150 1523 y(\()p Fi
+(QWF00133@niftyserve.or.jp)45 b Fj(/)53 b Fi(tsuneo-y@is.aist-nara.a)o
+(c.jp)o Fj(\),)f(so)g(y)m(ou)h(should)e(send)150 1633
+y(y)m(our)31 b(queries)f(to)h(him)f(\(but)g(p)s(erhaps)f(Cc:)41
+b(me,)31 b Fi(jseward@acm.org)p Fj(\).)150 1790 y(My)42
+b(v)-5 b(ague)43 b(understanding)d(of)i(what)g(to)h(do)f(is:)64
+b(using)41 b(Visual)h(C)p Fi(++)f Fj(5.0,)46 b(op)s(en)c(the)g(pro)5
+b(ject)43 b(\014le)150 1899 y Fi(libbz2.dsp)p Fj(,)28
+b(and)h(build.)40 b(That's)31 b(all.)150 2056 y(If)39
+b(y)m(ou)g(can't)h(op)s(en)f(the)g(pro)5 b(ject)40 b(\014le)f(for)g
+(some)h(reason,)i(mak)m(e)e(a)f(new)f(one,)k(naming)d(these)h(\014les:)
+150 2166 y Fi(blocksort.c)p Fj(,)28 b Fi(bzlib.c)p Fj(,)g
+Fi(compress.c)p Fj(,)g Fi(crctable.c)p Fj(,)g Fi(decompress.c)p
+Fj(,)f Fi(huffman.c)p Fj(,)150 2275 y Fi(randtable.c)32
+b Fj(and)h Fi(libbz2.def)p Fj(.)51 b(Y)-8 b(ou)35 b(will)g(also)g(need)
+f(to)i(name)e(the)h(header)g(\014les)f Fi(bzlib.h)f Fj(and)150
+2385 y Fi(bzlib_private.h)p Fj(.)150 2542 y(If)d(y)m(ou)h(don't)f(use)h
+(V)m(C)p Fi(++)p Fj(,)e(y)m(ou)i(ma)m(y)g(need)f(to)h(de\014ne)f(the)h
+(propro)s(cessor)f(sym)m(b)s(ol)g Fi(_WIN32)p Fj(.)150
+2698 y(Finally)-8 b(,)30 b Fi(dlltest.c)25 b Fj(is)j(a)g(sample)g
+(program)h(using)e(the)i(DLL.)e(It)h(has)g(a)g(pro)5
+b(ject)29 b(\014le,)g Fi(dlltest.dsp)p Fj(.)150 2855
+y(If)h(y)m(ou)h(just)f(w)m(an)m(t)h(a)f(mak)m(e\014le)i(for)e(Visual)g
+(C,)g(ha)m(v)m(e)i(a)e(lo)s(ok)h(at)g Fi(makefile.msc)p
+Fj(.)150 3012 y(Be)j(a)m(w)m(are)i(that)f(if)g(y)m(ou)f(compile)i
+Fi(bzip2)d Fj(itself)i(on)g(Win32,)h(y)m(ou)f(m)m(ust)f(set)i
+Fi(BZ_UNIX)c Fj(to)j(0)g(and)f Fi(BZ_)150 3122 y(LCCWIN32)25
+b Fj(to)j(1,)g(in)f(the)h(\014le)f Fi(bzip2.c)p Fj(,)f(b)s(efore)h
+(compiling.)41 b(Otherwise)27 b(the)h(resulting)g(binary)e(w)m(on't)150
+3231 y(w)m(ork)31 b(correctly)-8 b(.)150 3388 y(I)30
+b(ha)m(v)m(en't)i(tried)f(an)m(y)f(of)h(this)f(stu\013)g(m)m(yself,)i
+(but)d(it)i(all)g(lo)s(oks)g(plausible.)p eop
 %%Page: 32 33
 32 32 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
-b(32)225 299 y Fi(\017)60 b Fl(F)-8 b(aster)27 b(in)m(v)m(erse)e(MTF)h
-(transform)f(for)g(large)h(MTF)f(v)-5 b(alues.)39 b(The)25
-b(new)g(implemen)m(tation)f(is)g(based)330 408 y(on)30
-b(the)h(notion)f(of)g(sliding)e(blo)s(c)m(ks)h(of)i(v)-5
-b(alues.)225 544 y Fi(\017)60 b Fj(bzip2-0.9.0)24 b Fl(no)m(w)k(reads)f
-(and)f(writes)h(\014les)f(with)g Fj(fread)g Fl(and)h
-Fj(fwrite)p Fl(;)f(v)m(ersion)h(0.1)i(used)d Fj(putc)330
-653 y Fl(and)k Fj(getc)p Fl(.)39 b(Duh!)h(W)-8 b(ell,)31
-b(y)m(ou)f(liv)m(e)g(and)g(learn.)150 836 y(F)-8 b(urther)30
-b(ahead,)g(it)f(w)m(ould)g(b)s(e)g(nice)h(to)g(b)s(e)g(able)f(to)i(do)e
-(random)g(access)j(in)m(to)d(\014les.)40 b(This)28 b(will)f(require)150
-945 y(some)k(careful)e(design)h(of)g(compressed)g(\014le)g(formats.)150
-1227 y Fk(4.2)68 b(P)l(ortabilit)l(y)47 b(issues)150
-1419 y Fl(After)36 b(some)g(consideration,)g(I)f(ha)m(v)m(e)i(decided)d
-(not)i(to)g(use)g(GNU)g Fj(autoconf)d Fl(to)j(con\014gure)g(0.9.5)h(or)
-150 1529 y(1.0.)150 1686 y Fj(autoconf)p Fl(,)31 b(admirable)g(and)h(w)
-m(onderful)f(though)i(it)f(is,)h(mainly)d(assists)j(with)e(p)s
-(ortabilit)m(y)g(problems)150 1795 y(b)s(et)m(w)m(een)f(Unix-lik)m(e)d
-(platforms.)40 b(But)29 b Fj(bzip2)f Fl(do)s(esn't)h(ha)m(v)m(e)h(m)m
-(uc)m(h)f(in)f(the)h(w)m(a)m(y)h(of)g(p)s(ortabilit)m(y)d(prob-)150
-1905 y(lems)35 b(on)h(Unix;)j(most)d(of)g(the)h(di\016culties)d(app)s
-(ear)h(when)g(p)s(orting)g(to)i(the)f(Mac,)j(or)d(to)h(Microsoft's)150
-2015 y(op)s(erating)26 b(systems.)40 b Fj(autoconf)25
-b Fl(do)s(esn't)h(help)g(in)f(those)j(cases,)h(and)d(brings)f(in)g(a)j
-(whole)e(load)g(of)h(new)150 2124 y(complexit)m(y)-8
-b(.)150 2281 y(Most)28 b(p)s(eople)f(should)f(b)s(e)h(able)g(to)h
-(compile)e(the)i(library)d(and)i(program)h(under)e(Unix)g(straigh)m(t)i
-(out-of-)150 2391 y(the-b)s(o)m(x,)j(so)g(to)g(sp)s(eak,)f(esp)s
-(ecially)f(if)g(y)m(ou)i(ha)m(v)m(e)g(a)g(v)m(ersion)f(of)g(GNU)h(C)f
-(a)m(v)-5 b(ailable.)150 2547 y(There)32 b(are)h(a)g(couple)f(of)h
-Fj(__inline__)d Fl(directiv)m(es)i(in)f(the)i(co)s(de.)48
-b(GNU)33 b(C)f(\()p Fj(gcc)p Fl(\))g(should)f(b)s(e)h(able)g(to)150
-2657 y(handle)24 b(them.)39 b(If)25 b(y)m(ou're)i(not)e(using)g(GNU)h
-(C,)f(y)m(our)h(C)f(compiler)f(shouldn't)g(see)i(them)f(at)i(all.)38
-b(If)25 b(y)m(our)150 2767 y(compiler)k(do)s(es,)i(for)g(some)g
-(reason,)h(see)f(them)g(and)f(do)s(esn't)h(lik)m(e)f(them,)i(just)e
-Fj(#define)f(__inline__)150 2876 y Fl(to)37 b(b)s(e)f
-Fj(/*)30 b(*/)p Fl(.)58 b(One)36 b(easy)h(w)m(a)m(y)g(to)h(do)e(this)f
-(is)h(to)h(compile)e(with)g(the)i(\015ag)g Fj(-D__inline__=)p
-Fl(,)d(whic)m(h)150 2986 y(should)28 b(b)s(e)i(understo)s(o)s(d)f(b)m
-(y)h(most)h(Unix)e(compilers.)150 3143 y(If)35 b(y)m(ou)g(still)e(ha)m
-(v)m(e)j(di\016culties,)e(try)h(compiling)e(with)g(the)j(macro)f
-Fj(BZ_STRICT_ANSI)c Fl(de\014ned.)54 b(This)150 3252
-y(should)28 b(enable)i(y)m(ou)h(to)g(build)d(the)i(library)e(in)h(a)i
-(strictly)f(ANSI)g(complian)m(t)f(en)m(vironmen)m(t.)41
-b(Building)150 3362 y(the)25 b(program)f(itself)f(lik)m(e)g(this)h(is)f
-(dangerous)h(and)g(not)g(supp)s(orted,)g(since)g(y)m(ou)h(remo)m(v)m(e)
-g Fj(bzip2)p Fl('s)e(c)m(hec)m(ks)150 3471 y(against)30
-b(compressing)f(directories,)g(sym)m(b)s(olic)g(links,)f(devices,)i
-(and)f(other)h(not-really-a-\014le)g(en)m(tities.)150
-3581 y(This)f(could)g(cause)i(\014lesystem)f(corruption!)150
-3738 y(One)e(other)i(thing:)39 b(if)27 b(y)m(ou)j(create)g(a)f
-Fj(bzip2)f Fl(binary)f(for)i(public)d(distribution,)g(please)i(try)h
-(and)g(link)d(it)150 3847 y(statically)g(\()p Fj(gcc)k(-s)p
-Fl(\).)39 b(This)25 b(a)m(v)m(oids)i(all)f(sorts)h(of)g(library-v)m
-(ersion)d(issues)h(that)i(others)g(ma)m(y)g(encoun)m(ter)150
-3957 y(later)j(on.)150 4114 y(If)f(y)m(ou)g(build)e Fj(bzip2)h
-Fl(on)h(Win32,)h(y)m(ou)f(m)m(ust)g(set)h Fj(BZ_UNIX)e
-Fl(to)i(0)f(and)g Fj(BZ_LCCWIN32)d Fl(to)k(1,)g(in)e(the)i(\014le)150
-4223 y Fj(bzip2.c)p Fl(,)f(b)s(efore)h(compiling.)38
-b(Otherwise)29 b(the)i(resulting)d(binary)h(w)m(on't)i(w)m(ork)f
-(correctly)-8 b(.)150 4505 y Fk(4.3)68 b(Rep)t(orting)46
-b(bugs)150 4698 y Fl(I)25 b(tried)f(prett)m(y)i(hard)e(to)i(mak)m(e)g
-(sure)f Fj(bzip2)e Fl(is)i(bug)f(free,)j(b)s(oth)d(b)m(y)h(design)f
-(and)h(b)m(y)g(testing.)39 b(Hop)s(efully)150 4807 y(y)m(ou'll)29
-b(nev)m(er)i(need)f(to)h(read)g(this)e(section)h(for)h(real.)150
-4964 y(Nev)m(ertheless,)36 b(if)c Fj(bzip2)h Fl(dies)g(with)f(a)i
-(segmen)m(tation)h(fault,)g(a)f(bus)f(error)g(or)h(an)g(in)m(ternal)e
-(assertion)150 5074 y(failure,)i(it)h(will)d(ask)j(y)m(ou)g(to)g(email)
-f(me)h(a)g(bug)f(rep)s(ort.)54 b(Exp)s(erience)33 b(with)h(v)m(ersion)g
-(0.1)i(sho)m(ws)e(that)150 5183 y(almost)c(all)g(these)h(problems)d
-(can)j(b)s(e)f(traced)h(to)g(either)f(compiler)e(bugs)i(or)g(hardw)m
-(are)g(problems.)225 5340 y Fi(\017)60 b Fl(Recompile)22
-b(the)h(program)g(with)f(no)h(optimisation,)g(and)f(see)i(if)e(it)g(w)m
-(orks.)39 b(And/or)22 b(try)h(a)g(di\013eren)m(t)p eop
+b(32)150 299 y Fg(4)80 b(Miscellanea)150 549 y Fj(These)31
+b(are)f(just)g(some)h(random)f(though)m(ts)h(of)f(mine.)41
+b(Y)-8 b(our)30 b(mileage)i(ma)m(y)f(v)-5 b(ary)d(.)150
+826 y Fk(4.1)68 b(Limitations)47 b(of)e(the)g(compressed)g(\014le)h
+(format)150 1018 y Fi(bzip2-1.0)p Fj(,)c Fi(0.9.5)e Fj(and)h
+Fi(0.9.0)f Fj(use)i(exactly)h(the)f(same)g(\014le)g(format)g(as)f(the)h
+(previous)g(v)m(ersion,)150 1128 y Fi(bzip2-0.1)p Fj(.)72
+b(This)41 b(decision)h(w)m(as)g(made)f(in)g(the)h(in)m(terests)h(of)f
+(stabilit)m(y)-8 b(.)76 b(Creating)43 b(y)m(et)g(another)150
+1238 y(incompatible)i(compressed)g(\014le)g(format)g(w)m(ould)f(create)
+i(further)e(confusion)h(and)e(disruption)h(for)150 1347
+y(users.)150 1504 y(Nev)m(ertheless,)30 b(this)d(is)f(not)h(a)g
+(painless)g(decision.)40 b(Dev)m(elopmen)m(t)28 b(w)m(ork)f(since)h
+(the)f(release)h(of)f Fi(bzip2-)150 1614 y(0.1)g Fj(in)h(August)g(1997)
+i(has)d(sho)m(wn)h(complexities)i(in)e(the)g(\014le)g(format)h(whic)m
+(h)f(slo)m(w)h(do)m(wn)e(decompres-)150 1723 y(sion)j(and,)g(in)g
+(retrosp)s(ect,)i(are)f(unnecessary)-8 b(.)41 b(These)30
+b(are:)225 1880 y Fh(\017)60 b Fj(The)33 b(run-length)g(enco)s(der,)h
+(whic)m(h)f(is)g(the)h(\014rst)f(of)g(the)h(compression)f
+(transformations,)i(is)e(en-)330 1990 y(tirely)h(irrelev)-5
+b(an)m(t.)48 b(The)32 b(original)i(purp)s(ose)d(w)m(as)i(to)g(protect)h
+(the)f(sorting)g(algorithm)g(from)g(the)330 2099 y(v)m(ery)26
+b(w)m(orst)g(case)h(input:)37 b(a)26 b(string)g(of)f(rep)s(eated)h(sym)
+m(b)s(ols.)39 b(But)25 b(algorithm)h(steps)g(Q6a)g(and)f(Q6b)330
+2209 y(in)j(the)g(original)i(Burro)m(ws-Wheeler)e(tec)m(hnical)i(rep)s
+(ort)f(\(SR)m(C-124\))h(sho)m(w)e(ho)m(w)g(rep)s(eats)g(can)h(b)s(e)330
+2318 y(handled)g(without)i(di\016cult)m(y)g(in)f(blo)s(c)m(k)h
+(sorting.)225 2451 y Fh(\017)60 b Fj(The)27 b(randomisation)h(mec)m
+(hanism)f(do)s(esn't)g(really)i(need)e(to)h(b)s(e)e(there.)41
+b(Udi)27 b(Man)m(b)s(er)g(and)f(Gene)330 2561 y(My)m(ers)31
+b(published)d(a)j(su\016x)e(arra)m(y)h(construction)i(algorithm)f(a)f
+(few)g(y)m(ears)h(bac)m(k,)g(whic)m(h)e(can)i(b)s(e)330
+2670 y(emplo)m(y)m(ed)26 b(to)g(sort)f(an)m(y)g(blo)s(c)m(k,)i(no)e
+(matter)h(ho)m(w)f(rep)s(etitiv)m(e,)j(in)c(O\(N)i(log)g(N\))f(time.)40
+b(Subsequen)m(t)330 2780 y(w)m(ork)24 b(b)m(y)f(Kunihik)m(o)g(Sadak)-5
+b(ane)23 b(has)g(pro)s(duced)e(a)j(deriv)-5 b(ativ)m(e)25
+b(O\(N)f(\(log)g(N\))p Fi(^)p Fj(2\))h(algorithm)f(whic)m(h)330
+2890 y(usually)30 b(outp)s(erforms)g(the)g(Man)m(b)s(er-My)m(ers)i
+(algorithm.)330 3023 y(I)f(could)f(ha)m(v)m(e)i(c)m(hanged)f(to)g
+(Sadak)-5 b(ane's)30 b(algorithm,)i(but)e(I)h(\014nd)e(it)i(to)g(b)s(e)
+f(slo)m(w)m(er)i(than)e Fi(bzip2)p Fj('s)330 3132 y(existing)39
+b(algorithm)f(for)g(most)g(inputs,)h(and)d(the)i(randomisation)g(mec)m
+(hanism)g(protects)h(ade-)330 3242 y(quately)34 b(against)g(bad)f
+(cases.)50 b(I)33 b(didn't)g(think)g(it)h(w)m(as)f(a)h(go)s(o)s(d)f
+(tradeo\013)h(to)g(mak)m(e.)50 b(P)m(artly)35 b(this)330
+3351 y(is)40 b(due)f(to)i(the)f(fact)h(that)f(I)g(w)m(as)g(not)g(\015o)
+s(o)s(ded)f(with)g(email)i(complain)m(ts)g(ab)s(out)e
+Fi(bzip2-0.1)p Fj('s)330 3461 y(p)s(erformance)30 b(on)g(rep)s(etitiv)m
+(e)j(data,)e(so)f(p)s(erhaps)f(it)i(isn't)g(a)f(problem)g(for)h(real)g
+(inputs.)330 3594 y(Probably)g(the)h(b)s(est)f(long-term)i(solution,)f
+(and)f(the)g(one)h(I)f(ha)m(v)m(e)i(incorp)s(orated)e(in)m(to)i(0.9.5)g
+(and)330 3704 y(ab)s(o)m(v)m(e,)41 b(is)d(to)h(use)f(the)h(existing)g
+(sorting)g(algorithm)g(initially)-8 b(,)42 b(and)37 b(fall)i(bac)m(k)g
+(to)f(a)h(O\(N)f(\(log)330 3813 y(N\))p Fi(^)p Fj(2\))31
+b(algorithm)h(if)e(the)h(standard)e(algorithm)j(gets)f(in)m(to)h
+(di\016culties.)225 3946 y Fh(\017)60 b Fj(The)29 b(compressed)g
+(\014le)g(format)h(w)m(as)f(nev)m(er)g(designed)g(to)h(b)s(e)e(handled)
+g(b)m(y)h(a)g(library)-8 b(,)30 b(and)e(I)h(ha)m(v)m(e)330
+4056 y(had)e(to)h(jump)e(though)h(some)h(ho)s(ops)e(to)i(pro)s(duce)f
+(an)g(e\016cien)m(t)i(implemen)m(tation)g(of)e(decompres-)330
+4165 y(sion.)39 b(It's)24 b(a)h(bit)f(hairy)-8 b(.)39
+b(T)-8 b(ry)24 b(passing)g Fi(decompress.c)d Fj(through)i(the)i(C)e
+(prepro)s(cessor)i(and)e(y)m(ou'll)330 4275 y(see)31
+b(what)e(I)h(mean.)41 b(Muc)m(h)30 b(of)g(this)g(complexit)m(y)i(could)
+e(ha)m(v)m(e)g(b)s(een)g(a)m(v)m(oided)h(if)f(the)g(compressed)330
+4384 y(size)h(of)g(eac)m(h)g(blo)s(c)m(k)g(of)g(data)f(w)m(as)h
+(recorded)f(in)h(the)f(data)h(stream.)225 4517 y Fh(\017)60
+b Fj(An)29 b(Adler-32)j(c)m(hec)m(ksum,)f(rather)g(than)f(a)g(CR)m(C32)
+h(c)m(hec)m(ksum,)h(w)m(ould)e(b)s(e)g(faster)h(to)g(compute.)150
+4698 y(It)45 b(w)m(ould)g(b)s(e)f(fair)h(to)h(sa)m(y)f(that)g(the)h
+Fi(bzip2)d Fj(format)i(w)m(as)g(frozen)g(b)s(efore)g(I)g(prop)s(erly)f
+(and)g(fully)150 4807 y(understo)s(o)s(d)29 b(the)i(p)s(erformance)f
+(consequences)h(of)f(doing)h(so.)150 4964 y(Impro)m(v)m(emen)m(ts)25
+b(whic)m(h)d(I)i(w)m(as)f(able)g(to)h(incorp)s(orate)g(in)m(to)g
+(0.9.0,)j(despite)d(using)e(the)i(same)f(\014le)g(format,)150
+5074 y(are:)225 5230 y Fh(\017)60 b Fj(Single)30 b(arra)m(y)g(implemen)
+m(tation)i(of)d(the)h(in)m(v)m(erse)h(BWT.)f(This)f(signi\014can)m(tly)
+i(sp)s(eeds)e(up)f(decom-)330 5340 y(pression,)i(presumably)f(b)s
+(ecause)i(it)g(reduces)f(the)h(n)m(um)m(b)s(er)e(of)i(cac)m(he)g
+(misses.)p eop
 %%Page: 33 34
 33 33 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
-b(33)330 299 y(compiler.)77 b(I)43 b(heard)f(all)g(sorts)h(of)h
-(stories)e(ab)s(out)h(v)-5 b(arious)42 b(\015a)m(v)m(ours)h(of)h(GNU)f
-(C)g(\(and)g(other)330 408 y(compilers\))20 b(generating)i(bad)e(co)s
-(de)i(for)f Fj(bzip2)p Fl(,)h(and)f(I'v)m(e)h(run)e(across)i(t)m(w)m(o)
-g(suc)m(h)f(examples)g(m)m(yself.)330 606 y(2.7.X)35
-b(v)m(ersions)e(of)g(GNU)h(C)f(are)h(kno)m(wn)f(to)h(generate)h(bad)d
-(co)s(de)i(from)f(time)g(to)h(time,)g(at)g(high)330 716
-y(optimisation)20 b(lev)m(els.)37 b(If)21 b(y)m(ou)g(get)i(problems,)e
-(try)g(using)f(the)i(\015ags)f Fj(-O2)f(-fomit-frame-pointer)330
-825 y(-fno-strength-reduce)p Fl(.)35 b(Y)-8 b(ou)31 b(should)d(sp)s
-(eci\014cally)h Fc(not)j Fl(use)e Fj(-funroll-loops)p
-Fl(.)330 1023 y(Y)-8 b(ou)38 b(ma)m(y)g(notice)g(that)g(the)g(Mak)m
-(e\014le)g(runs)e(six)g(tests)i(as)g(part)f(of)h(the)g(build)c(pro)s
-(cess.)62 b(If)37 b(the)330 1132 y(program)43 b(passes)g(all)f(of)h
-(these,)k(it's)c(a)h(prett)m(y)f(go)s(o)s(d)g(\(but)g(not)g(100\045\))i
-(indication)c(that)j(the)330 1242 y(compiler)29 b(has)h(done)g(its)g
-(job)g(correctly)-8 b(.)225 1440 y Fi(\017)60 b Fl(If)33
-b Fj(bzip2)f Fl(crashes)i(randomly)-8 b(,)33 b(and)g(the)h(crashes)g
-(are)g(not)g(rep)s(eatable,)g(y)m(ou)g(ma)m(y)g(ha)m(v)m(e)h(a)f
-(\015aky)330 1549 y(memory)k(subsystem.)64 b Fj(bzip2)37
-b Fl(really)g(hammers)h(y)m(our)g(memory)g(hierarc)m(h)m(y)-8
-b(,)41 b(and)d(if)f(it's)h(a)h(bit)330 1659 y(marginal,)33
-b(y)m(ou)h(ma)m(y)g(get)h(these)f(problems.)49 b(Ditto)34
-b(if)f(y)m(our)h(disk)e(or)h(I/O)h(subsystem)e(is)h(slo)m(wly)330
-1768 y(failing.)39 b(Y)-8 b(up,)30 b(this)f(really)g(do)s(es)h(happ)s
-(en.)330 1966 y(T)-8 b(ry)28 b(using)f(a)i(di\013eren)m(t)f(mac)m(hine)
-g(of)h(the)g(same)f(t)m(yp)s(e,)i(and)e(see)h(if)e(y)m(ou)i(can)g(rep)s
-(eat)g(the)f(problem.)225 2163 y Fi(\017)60 b Fl(This)21
-b(isn't)i(really)f(a)h(bug,)i(but)d(...)39 b(If)23 b
-Fj(bzip2)f Fl(tells)g(y)m(ou)h(y)m(our)h(\014le)e(is)g(corrupted)h(on)g
-(decompression,)330 2273 y(and)29 b(y)m(ou)g(obtained)f(the)i(\014le)e
-(via)h(FTP)-8 b(,)29 b(there)h(is)e(a)h(p)s(ossibilit)m(y)d(that)k(y)m
-(ou)f(forgot)h(to)g(tell)e(FTP)h(to)330 2383 y(do)23
-b(a)g(binary)e(mo)s(de)i(transfer.)38 b(That)23 b(absolutely)f(will)e
-(cause)j(the)h(\014le)e(to)h(b)s(e)g(non-decompressible.)330
-2492 y(Y)-8 b(ou'll)30 b(ha)m(v)m(e)h(to)g(transfer)f(it)g(again.)150
-2737 y(If)i(y)m(ou'v)m(e)h(incorp)s(orated)e Fj(libbzip2)f
-Fl(in)m(to)i(y)m(our)g(o)m(wn)g(program)g(and)g(are)g(getting)h
-(problems,)e(please,)150 2847 y(please,)d(please,)h(c)m(hec)m(k)g(that)
-f(the)g(parameters)g(y)m(ou)g(are)g(passing)f(in)f(calls)h(to)h(the)g
-(library)-8 b(,)26 b(are)j(correct,)150 2956 y(and)e(in)f(accordance)k
-(with)c(what)i(the)g(do)s(cumen)m(tation)f(sa)m(ys)h(is)f(allo)m(w)m
-(able.)39 b(I)28 b(ha)m(v)m(e)h(tried)e(to)h(mak)m(e)h(the)150
-3066 y(library)f(robust)i(against)g(suc)m(h)g(problems,)f(but)h(I'm)g
-(sure)g(I)g(ha)m(v)m(en't)h(succeeded.)150 3223 y(Finally)-8
-b(,)32 b(if)g(the)h(ab)s(o)m(v)m(e)i(commen)m(ts)e(don't)g(help,)g(y)m
-(ou'll)f(ha)m(v)m(e)i(to)g(send)e(me)h(a)g(bug)g(rep)s(ort.)48
-b(No)m(w,)34 b(it's)150 3332 y(just)c(amazing)g(ho)m(w)h(man)m(y)f(p)s
-(eople)g(will)d(send)j(me)g(a)h(bug)f(rep)s(ort)g(sa)m(ying)g
-(something)g(lik)m(e)481 3483 y(bzip2)f(crashed)h(with)f(segmen)m
-(tation)j(fault)e(on)g(m)m(y)g(mac)m(hine)150 3640 y(and)h(absolutely)f
-(nothing)h(else.)44 b(Needless)32 b(to)g(sa)m(y)-8 b(,)33
-b(a)f(suc)m(h)f(a)h(rep)s(ort)f(is)g Fc(totally)-8 b(,)32
-b(utterly)-8 b(,)32 b(completely)150 3750 y(and)40 b(comprehensiv)m
-(ely)g(100\045)h(useless;)46 b(a)41 b(w)m(aste)g(of)g(y)m(our)g(time,)i
-(m)m(y)e(time,)i(and)e(net)g(bandwidth)p Fl(.)150 3859
-y(With)31 b(no)h(details)f(at)i(all,)e(there's)h(no)g(w)m(a)m(y)h(I)f
-(can)g(p)s(ossibly)d(b)s(egin)h(to)j(\014gure)e(out)i(what)e(the)i
-(problem)150 3969 y(is.)150 4126 y(The)d(rules)e(of)i(the)g(game)h
-(are:)41 b(facts,)32 b(facts,)f(facts.)41 b(Don't)31
-b(omit)f(them)g(b)s(ecause)g Fj(")p Fl(oh,)g(they)g(w)m(on't)h(b)s(e)
-150 4235 y(relev)-5 b(an)m(t)p Fj(")p Fl(.)41 b(A)m(t)31
-b(the)g(bare)f(minim)m(um:)481 4386 y(Mac)m(hine)h(t)m(yp)s(e.)61
-b(Op)s(erating)29 b(system)h(v)m(ersion.)481 4490 y(Exact)h(v)m(ersion)
-f(of)h Fj(bzip2)e Fl(\(do)h Fj(bzip2)47 b(-V)p Fl(\).)481
-4594 y(Exact)31 b(v)m(ersion)f(of)h(the)f(compiler)f(used.)481
-4698 y(Flags)i(passed)e(to)j(the)e(compiler.)150 4854
-y(Ho)m(w)m(ev)m(er,)i(the)d(most)h(imp)s(ortan)m(t)f(single)f(thing)g
-(that)i(will)d(help)h(me)h(is)f(the)i(\014le)e(that)i(y)m(ou)g(w)m(ere)
-g(trying)150 4964 y(to)f(compress)f(or)g(decompress)g(at)h(the)f(time)g
-(the)g(problem)f(happ)s(ened.)38 b(Without)28 b(that,)h(m)m(y)g(abilit)
-m(y)d(to)150 5074 y(do)k(an)m(ything)g(more)h(than)f(sp)s(eculate)g(ab)
-s(out)g(the)g(cause,)i(is)d(limited.)150 5230 y(Please)34
-b(remem)m(b)s(er)f(that)h(I)f(connect)i(to)f(the)g(In)m(ternet)g(with)e
-(a)i(mo)s(dem,)g(so)f(y)m(ou)h(should)e(con)m(tact)k(me)150
-5340 y(b)s(efore)30 b(mailing)e(me)j(h)m(uge)f(\014les.)p
-eop
+b(33)225 299 y Fh(\017)60 b Fj(F)-8 b(aster)25 b(in)m(v)m(erse)f(MTF)g
+(transform)f(for)g(large)i(MTF)f(v)-5 b(alues.)38 b(The)23
+b(new)g(implemen)m(tation)i(is)f(based)330 408 y(on)30
+b(the)h(notion)g(of)f(sliding)h(blo)s(c)m(ks)g(of)f(v)-5
+b(alues.)225 544 y Fh(\017)60 b Fi(bzip2-0.9.0)23 b Fj(no)m(w)j(reads)g
+(and)f(writes)h(\014les)g(with)g Fi(fread)f Fj(and)g
+Fi(fwrite)p Fj(;)h(v)m(ersion)h(0.1)g(used)e Fi(putc)330
+653 y Fj(and)30 b Fi(getc)p Fj(.)39 b(Duh!)g(W)-8 b(ell,)32
+b(y)m(ou)f(liv)m(e)g(and)f(learn.)150 836 y(F)-8 b(urther)28
+b(ahead,)h(it)g(w)m(ould)f(b)s(e)g(nice)g(to)i(b)s(e)d(able)i(to)g(do)f
+(random)f(access)j(in)m(to)f(\014les.)40 b(This)28 b(will)h(require)150
+945 y(some)i(careful)g(design)f(of)g(compressed)h(\014le)f(formats.)150
+1227 y Fk(4.2)68 b(P)l(ortabilit)l(y)47 b(issues)150
+1419 y Fj(After)33 b(some)h(consideration,)h(I)e(ha)m(v)m(e)h(decided)f
+(not)g(to)h(use)f(GNU)g Fi(autoconf)e Fj(to)j(con\014gure)f(0.9.5)i(or)
+150 1529 y(1.0.)150 1686 y Fi(autoconf)p Fj(,)30 b(admirable)i(and)e(w)
+m(onderful)h(though)h(it)g(is,)h(mainly)e(assists)h(with)g(p)s
+(ortabilit)m(y)g(problems)150 1795 y(b)s(et)m(w)m(een)46
+b(Unix-lik)m(e)h(platforms.)85 b(But)45 b Fi(bzip2)f
+Fj(do)s(esn't)h(ha)m(v)m(e)h(m)m(uc)m(h)g(in)f(the)g(w)m(a)m(y)h(of)g
+(p)s(ortabilit)m(y)150 1905 y(problems)21 b(on)h(Unix;)j(most)d(of)g
+(the)g(di\016culties)g(app)s(ear)f(when)g(p)s(orting)h(to)g(the)h(Mac,)
+h(or)e(to)h(Microsoft's)150 2015 y(op)s(erating)j(systems.)40
+b Fi(autoconf)23 b Fj(do)s(esn't)j(help)f(in)g(those)i(cases,)g(and)e
+(brings)g(in)h(a)g(whole)f(load)i(of)e(new)150 2124 y(complexit)m(y)-8
+b(.)150 2281 y(Most)34 b(p)s(eople)e(should)g(b)s(e)g(able)h(to)g
+(compile)h(the)f(library)f(and)g(program)h(under)e(Unix)h(straigh)m(t)i
+(out-)150 2391 y(of-the-b)s(o)m(x,)e(so)e(to)i(sp)s(eak,)e(esp)s
+(ecially)h(if)f(y)m(ou)h(ha)m(v)m(e)g(a)g(v)m(ersion)g(of)g(GNU)g(C)e
+(a)m(v)-5 b(ailable.)150 2547 y(There)31 b(are)h(a)f(couple)g(of)g
+Fi(__inline__)e Fj(directiv)m(es)k(in)d(the)i(co)s(de.)42
+b(GNU)32 b(C)f(\()p Fi(gcc)p Fj(\))f(should)g(b)s(e)h(able)g(to)150
+2657 y(handle)23 b(them.)38 b(If)23 b(y)m(ou're)h(not)g(using)f(GNU)h
+(C,)f(y)m(our)h(C)e(compiler)j(shouldn't)d(see)i(them)g(at)g(all.)39
+b(If)23 b(y)m(our)150 2767 y(compiler)30 b(do)s(es,)f(for)f(some)h
+(reason,)h(see)f(them)g(and)f(do)s(esn't)g(lik)m(e)i(them,)g(just)e
+Fi(#define)f(__inline__)150 2876 y Fj(to)37 b(b)s(e)f
+Fi(/*)29 b(*/)p Fj(.)58 b(One)36 b(easy)h(w)m(a)m(y)f(to)i(do)e(this)g
+(is)g(to)h(compile)g(with)f(the)h(\015ag)f Fi(-D__inline__=)p
+Fj(,)e(whic)m(h)150 2986 y(should)29 b(b)s(e)h(understo)s(o)s(d)f(b)m
+(y)h(most)h(Unix)f(compilers.)150 3143 y(If)k(y)m(ou)g(still)h(ha)m(v)m
+(e)g(di\016culties,)h(try)e(compiling)g(with)g(the)g(macro)h
+Fi(BZ_STRICT_ANSI)30 b Fj(de\014ned.)50 b(This)150 3252
+y(should)27 b(enable)i(y)m(ou)g(to)g(build)e(the)i(library)f(in)g(a)g
+(strictly)i(ANSI)e(complian)m(t)i(en)m(vironmen)m(t.)41
+b(Building)150 3362 y(the)22 b(program)h(itself)g(lik)m(e)g(this)f(is)g
+(dangerous)g(and)f(not)h(supp)s(orted,)h(since)f(y)m(ou)h(remo)m(v)m(e)
+h Fi(bzip2)p Fj('s)c(c)m(hec)m(ks)150 3471 y(against)27
+b(compressing)g(directories,)i(sym)m(b)s(olic)d(links,)h(devices,)h
+(and)e(other)h(not-really-a-\014le)i(en)m(tities.)150
+3581 y(This)h(could)g(cause)h(\014lesystem)g(corruption!)150
+3738 y(One)c(other)h(thing:)40 b(if)27 b(y)m(ou)h(create)h(a)e
+Fi(bzip2)f Fj(binary)h(for)g(public)g(distribution,)h(please)g(try)g
+(and)e(link)h(it)150 3847 y(statically)g(\()p Fi(gcc)j(-s)p
+Fj(\).)39 b(This)24 b(a)m(v)m(oids)j(all)e(sorts)h(of)f(library-v)m
+(ersion)h(issues)e(that)i(others)g(ma)m(y)f(encoun)m(ter)150
+3957 y(later)32 b(on.)150 4114 y(If)d(y)m(ou)g(build)e
+Fi(bzip2)h Fj(on)g(Win32,)i(y)m(ou)f(m)m(ust)g(set)h
+Fi(BZ_UNIX)c Fj(to)k(0)f(and)f Fi(BZ_LCCWIN32)e Fj(to)k(1,)f(in)g(the)g
+(\014le)150 4223 y Fi(bzip2.c)p Fj(,)g(b)s(efore)h(compiling.)41
+b(Otherwise)31 b(the)g(resulting)g(binary)f(w)m(on't)h(w)m(ork)g
+(correctly)-8 b(.)150 4505 y Fk(4.3)68 b(Rep)t(orting)46
+b(bugs)150 4698 y Fj(I)23 b(tried)g(prett)m(y)h(hard)e(to)i(mak)m(e)f
+(sure)g Fi(bzip2)e Fj(is)i(bug)f(free,)j(b)s(oth)d(b)m(y)h(design)g
+(and)f(b)m(y)h(testing.)39 b(Hop)s(efully)150 4807 y(y)m(ou'll)31
+b(nev)m(er)g(need)g(to)g(read)f(this)h(section)g(for)g(real.)150
+4964 y(Nev)m(ertheless,)j(if)d Fi(bzip2)f Fj(dies)h(with)g(a)g(segmen)m
+(tation)j(fault,)e(a)f(bus)f(error)i(or)f(an)g(in)m(ternal)h(assertion)
+150 5074 y(failure,)j(it)f(will)f(ask)h(y)m(ou)g(to)g(email)g(me)g(a)f
+(bug)g(rep)s(ort.)50 b(Exp)s(erience)33 b(with)g(v)m(ersion)i(0.1)f
+(sho)m(ws)f(that)150 5183 y(almost)e(all)g(these)g(problems)f(can)h(b)s
+(e)e(traced)j(to)f(either)g(compiler)g(bugs)f(or)h(hardw)m(are)f
+(problems.)225 5340 y Fh(\017)60 b Fj(Recompile)22 b(the)f(program)f
+(with)h(no)f(optimisation,)k(and)c(see)h(if)g(it)g(w)m(orks.)38
+b(And/or)20 b(try)g(a)h(di\013eren)m(t)p eop
 %%Page: 34 35
 34 34 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
-b(34)150 299 y Fk(4.4)68 b(Did)45 b(y)l(ou)g(get)h(the)f(righ)l(t)h
-(pac)l(k)-7 b(age?)150 491 y Fj(bzip2)34 b Fl(is)h(a)h(resource)g(hog.)
-56 b(It)36 b(soaks)g(up)f(large)g(amoun)m(ts)h(of)g(CPU)f(cycles)h(and)
-f(memory)-8 b(.)57 b(Also,)36 b(it)150 601 y(giv)m(es)26
-b(v)m(ery)h(large)f(latencies.)39 b(In)25 b(the)h(w)m(orst)g(case,)i(y)
-m(ou)f(can)f(feed)g(man)m(y)g(megab)m(ytes)h(of)f(uncompressed)150
-711 y(data)45 b(in)m(to)e(the)i(library)c(b)s(efore)j(getting)g(an)m(y)
-g(compressed)g(output,)j(so)d(this)f(probably)f(rules)h(out)150
-820 y(applications)29 b(requiring)e(in)m(teractiv)m(e)32
-b(b)s(eha)m(viour.)150 977 y(These)38 b(aren't)h(faults)e(of)h(m)m(y)g
-(implemen)m(tation,)h(I)f(hop)s(e,)i(but)d(more)h(an)g(in)m(trinsic)e
-(prop)s(ert)m(y)h(of)i(the)150 1087 y(Burro)m(ws-Wheeler)30
-b(transform)g(\(unfortunately\).)40 b(Ma)m(yb)s(e)31
-b(this)e(isn't)h(what)g(y)m(ou)h(w)m(an)m(t.)150 1244
-y(If)h(y)m(ou)h(w)m(an)m(t)g(a)g(compressor)g(and/or)f(library)e(whic)m
-(h)h(is)h(faster,)i(uses)e(less)g(memory)g(but)g(gets)h(prett)m(y)150
-1353 y(go)s(o)s(d)e(compression,)g(and)g(has)h(minimal)c(latency)-8
-b(,)33 b(consider)e(Jean-loup)f(Gailly's)g(and)h(Mark)h(Adler's)150
-1463 y(w)m(ork,)f Fj(zlib-1.1.2)c Fl(and)j Fj(gzip-1.2.4)p
-Fl(.)38 b(Lo)s(ok)31 b(for)f(them)g(at)150 1620 y Fj
-(http://www.cdrom.com/pub)o(/inf)o(ozip)o(/zl)o(ib)24
-b Fl(and)30 b Fj(http://www.gzip.org)25 b Fl(resp)s(ectiv)m(ely)-8
-b(.)150 1776 y(F)g(or)32 b(something)f(faster)i(and)e(ligh)m(ter)f
-(still,)h(y)m(ou)g(migh)m(t)h(try)f(Markus)h(F)g(X)f(J)h(Ob)s(erh)m
-(umer's)d Fj(LZO)i Fl(real-)150 1886 y(time)f
-(compression/decompression)f(library)-8 b(,)28 b(at)150
-1996 y Fj(http://wildsau.idv.uni-l)o(inz.)o(ac.a)o(t/m)o(fx/l)o(zo.h)o
-(tml)o Fl(.)150 2152 y(If)38 b(y)m(ou)h(w)m(an)m(t)g(to)h(use)e(the)g
-Fj(bzip2)g Fl(algorithms)f(to)i(compress)f(small)g(blo)s(c)m(ks)f(of)i
-(data,)j(64k)d(b)m(ytes)g(or)150 2262 y(smaller,)i(for)e(example)g(on)h
-(an)f(on-the-\015y)h(disk)e(compressor,)k(y)m(ou'd)e(b)s(e)f(w)m(ell)g
-(advised)f(not)i(to)g(use)150 2372 y(this)i(library)-8
-b(.)77 b(Instead,)47 b(I'v)m(e)d(made)f(a)h(sp)s(ecial)e(library)f
-(tuned)h(for)h(that)h(kind)d(of)j(use.)79 b(It's)43 b(part)150
-2481 y(of)d Fj(e2compr-0.40)p Fl(,)f(an)g(on-the-\015y)h(disk)e
-(compressor)h(for)h(the)f(Lin)m(ux)f Fj(ext2)h Fl(\014lesystem.)67
-b(Lo)s(ok)40 b(at)150 2591 y Fj(http://www.netspace.net.)o(au/~)o(reit)
-o(er/)o(e2co)o(mpr)p Fl(.)150 2880 y Fk(4.5)68 b(T)-11
-b(esting)150 3072 y Fl(A)30 b(record)h(of)f(the)h(tests)g(I'v)m(e)g
-(done.)150 3229 y(First,)f(some)h(data)g(sets:)225 3386
-y Fi(\017)60 b Fl(B:)32 b(a)f(directory)f(con)m(taining)h(6001)i
-(\014les,)d(one)h(for)g(ev)m(ery)h(length)e(in)g(the)h(range)g(0)h(to)f
-(6000)i(b)m(ytes.)330 3496 y(The)d(\014les)f(con)m(tain)i(random)e(lo)m
-(w)m(ercase)j(letters.)41 b(18.7)32 b(megab)m(ytes.)225
-3633 y Fi(\017)60 b Fl(H:)36 b(m)m(y)f(home)h(directory)f(tree.)56
-b(Do)s(cumen)m(ts,)38 b(source)d(co)s(de,)i(mail)d(\014les,)i
-(compressed)f(data.)57 b(H)330 3743 y(con)m(tains)39
-b(B,)h(and)f(also)g(a)g(directory)g(of)g(\014les)f(designed)g(as)i(b)s
-(oundary)d(cases)j(for)f(the)g(sorting;)330 3853 y(mostly)30
-b(v)m(ery)h(rep)s(etitiv)m(e,)f(nast)m(y)h(\014les.)39
-b(565)32 b(megab)m(ytes.)225 3990 y Fi(\017)60 b Fl(A:)43
-b(directory)f(tree)i(holding)d(v)-5 b(arious)41 b(applications)g(built)
-g(from)h(source:)66 b Fj(egcs)p Fl(,)45 b Fj(gcc-2.8.1)p
-Fl(,)330 4100 y(KDE,)31 b(GTK,)f(Octa)m(v)m(e,)j(etc.)41
-b(2200)33 b(megab)m(ytes.)150 4285 y(The)i(tests)g(conducted)g(are)h
-(as)f(follo)m(ws.)54 b(Eac)m(h)36 b(test)g(means)f(compressing)f(\(a)h
-(cop)m(y)h(of)7 b(\))36 b(eac)m(h)g(\014le)e(in)150 4394
-y(the)d(data)g(set,)g(decompressing)e(it)h(and)g(comparing)f(it)h
-(against)h(the)g(original.)150 4551 y(First,)26 b(a)g(bunc)m(h)f(of)h
-(tests)h(with)d(blo)s(c)m(k)h(sizes)h(and)f(in)m(ternal)g(bu\013er)f
-(sizes)i(set)g(v)m(ery)g(small,)g(to)g(detect)i(an)m(y)150
-4661 y(problems)g(with)g(the)i(blo)s(c)m(king)f(and)g(bu\013ering)e
-(mec)m(hanisms.)40 b(This)28 b(required)g(mo)s(difying)f(the)j(source)
-150 4770 y(co)s(de)h(so)f(as)h(to)g(try)f(to)h(break)g(it.)199
-4927 y(1.)61 b(Data)32 b(set)f(H,)g(with)e(bu\013er)g(size)h(of)h(1)g
-(b)m(yte,)g(and)f(blo)s(c)m(k)g(size)g(of)g(23)i(b)m(ytes.)199
-5065 y(2.)61 b(Data)32 b(set)f(B,)g(bu\013er)e(sizes)h(1)h(b)m(yte,)g
-(blo)s(c)m(k)f(size)g(1)h(b)m(yte.)199 5202 y(3.)61 b(As)30
-b(\(2\))i(but)d(small-mo)s(de)g(decompression.)199 5340
-y(4.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h(size)g(2)h(b)m(ytes.)p
+b(34)330 299 y Fj(compiler.)74 b(I)41 b(heard)f(all)i(sorts)f(of)g
+(stories)i(ab)s(out)d(v)-5 b(arious)41 b(\015a)m(v)m(ours)g(of)h(GNU)f
+(C)g(\(and)f(other)330 408 y(compilers\))45 b(generating)g(bad)e(co)s
+(de)g(for)h Fi(bzip2)p Fj(,)i(and)d(I'v)m(e)i(run)d(across)i(t)m(w)m(o)
+h(suc)m(h)f(examples)330 518 y(m)m(yself.)330 716 y(2.7.X)i(v)m
+(ersions)f(of)g(GNU)h(C)e(are)h(kno)m(wn)g(to)g(generate)i(bad)d(co)s
+(de)h(from)f(time)i(to)g(time,)j(at)330 825 y(high)32
+b(optimisation)h(lev)m(els.)47 b(If)31 b(y)m(ou)i(get)g(problems,)f
+(try)g(using)f(the)i(\015ags)f Fi(-O2)f(-fomit-frame-)330
+935 y(pointer)d(-fno-strength-reduce)p Fj(.)36 b(Y)-8
+b(ou)30 b(should)f(sp)s(eci\014cally)i Fb(not)40 b Fj(use)30
+b Fi(-funroll-loops)p Fj(.)330 1132 y(Y)-8 b(ou)36 b(ma)m(y)g(notice)i
+(that)e(the)g(Mak)m(e\014le)i(runs)d(six)g(tests)i(as)f(part)g(of)g
+(the)h(build)e(pro)s(cess.)57 b(If)36 b(the)330 1242
+y(program)42 b(passes)g(all)h(of)f(these,)k(it's)d(a)f(prett)m(y)i(go)s
+(o)s(d)e(\(but)g(not)g(100\045\))i(indication)f(that)g(the)330
+1352 y(compiler)31 b(has)f(done)g(its)h(job)f(correctly)-8
+b(.)225 1549 y Fh(\017)60 b Fj(If)32 b Fi(bzip2)e Fj(crashes)j
+(randomly)-8 b(,)32 b(and)f(the)i(crashes)f(are)g(not)h(rep)s(eatable,)
+g(y)m(ou)g(ma)m(y)f(ha)m(v)m(e)h(a)f(\015aky)330 1659
+y(memory)37 b(subsystem.)57 b Fi(bzip2)35 b Fj(really)i(hammers)f(y)m
+(our)h(memory)f(hierarc)m(h)m(y)-8 b(,)39 b(and)d(if)g(it's)h(a)g(bit)
+330 1768 y(marginal,)c(y)m(ou)g(ma)m(y)g(get)g(these)g(problems.)46
+b(Ditto)34 b(if)e(y)m(our)h(disk)f(or)g(I/O)h(subsystem)f(is)g(slo)m
+(wly)330 1878 y(failing.)41 b(Y)-8 b(up,)30 b(this)g(really)i(do)s(es)e
+(happ)s(en.)330 2075 y(T)-8 b(ry)27 b(using)f(a)h(di\013eren)m(t)h(mac)
+m(hine)f(of)g(the)g(same)g(t)m(yp)s(e,)h(and)e(see)h(if)g(y)m(ou)g(can)
+g(rep)s(eat)g(the)g(problem.)225 2273 y Fh(\017)60 b
+Fj(This)21 b(isn't)h(really)g(a)g(bug,)h(but)d(...)39
+b(If)21 b Fi(bzip2)f Fj(tells)i(y)m(ou)g(y)m(our)g(\014le)f(is)h
+(corrupted)f(on)g(decompression,)330 2383 y(and)g(y)m(ou)h(obtained)g
+(the)h(\014le)f(via)g(FTP)-8 b(,)23 b(there)f(is)g(a)g(p)s(ossibilit)m
+(y)h(that)f(y)m(ou)h(forgot)g(to)g(tell)g(FTP)f(to)h(do)330
+2492 y(a)31 b(binary)g(mo)s(de)g(transfer.)43 b(That)31
+b(absolutely)h(will)g(cause)f(the)h(\014le)f(to)h(b)s(e)e
+(non-decompressible.)330 2602 y(Y)-8 b(ou'll)31 b(ha)m(v)m(e)g(to)h
+(transfer)e(it)h(again.)150 2847 y(If)e(y)m(ou'v)m(e)i(incorp)s(orated)
+e Fi(libbzip2)e Fj(in)m(to)k(y)m(our)e(o)m(wn)g(program)h(and)e(are)i
+(getting)h(problems,)e(please,)150 2956 y(please,)e(please,)g(c)m(hec)m
+(k)f(that)g(the)f(parameters)h(y)m(ou)f(are)h(passing)e(in)h(calls)h
+(to)f(the)h(library)-8 b(,)26 b(are)g(correct,)150 3066
+y(and)g(in)g(accordance)i(with)f(what)f(the)h(do)s(cumen)m(tation)h(sa)
+m(ys)f(is)f(allo)m(w)m(able.)42 b(I)27 b(ha)m(v)m(e)g(tried)h(to)f(mak)
+m(e)h(the)150 3175 y(library)i(robust)g(against)h(suc)m(h)g(problems,)f
+(but)g(I'm)g(sure)g(I)g(ha)m(v)m(en't)i(succeeded.)150
+3332 y(Finally)-8 b(,)33 b(if)f(the)h(ab)s(o)m(v)m(e)g(commen)m(ts)g
+(don't)f(help,)g(y)m(ou'll)h(ha)m(v)m(e)g(to)g(send)e(me)h(a)g(bug)f
+(rep)s(ort.)46 b(No)m(w,)33 b(it's)150 3442 y(just)d(amazing)h(ho)m(w)f
+(man)m(y)h(p)s(eople)f(will)h(send)e(me)i(a)f(bug)g(rep)s(ort)h(sa)m
+(ying)g(something)g(lik)m(e)481 3593 y(bzip2)f(crashed)g(with)h(segmen)
+m(tation)h(fault)f(on)f(m)m(y)g(mac)m(hine)150 3750 y(and)h(absolutely)
+h(nothing)g(else.)45 b(Needless)33 b(to)f(sa)m(y)-8 b(,)33
+b(a)f(suc)m(h)f(a)h(rep)s(ort)g(is)f Fb(total)5 b(ly,)36
+b(utterly,)e(c)-5 b(ompletely)150 3859 y(and)27 b(c)-5
+b(ompr)g(ehensively)29 b(100\045)f(useless;)g(a)f(waste)g(of)g(your)g
+(time,)h(my)e(time,)i(and)f(net)g(b)-5 b(andwidth)p Fj(.)41
+b(With)150 3969 y(no)30 b(details)i(at)f(all,)g(there's)g(no)f(w)m(a)m
+(y)h(I)g(can)f(p)s(ossibly)g(b)s(egin)g(to)h(\014gure)f(out)h(what)f
+(the)g(problem)h(is.)150 4126 y(The)e(rules)f(of)h(the)g(game)h(are:)40
+b(facts,)30 b(facts,)g(facts.)41 b(Don't)29 b(omit)h(them)f(b)s(ecause)
+f Fi(")p Fj(oh,)h(they)g(w)m(on't)h(b)s(e)150 4235 y(relev)-5
+b(an)m(t)p Fi(")p Fj(.)42 b(A)m(t)31 b(the)g(bare)f(minim)m(um:)481
+4386 y(Mac)m(hine)h(t)m(yp)s(e.)62 b(Op)s(erating)30
+b(system)h(v)m(ersion.)481 4490 y(Exact)g(v)m(ersion)g(of)g
+Fi(bzip2)d Fj(\(do)j Fi(bzip2)46 b(-V)p Fj(\).)481 4594
+y(Exact)31 b(v)m(ersion)g(of)g(the)f(compiler)h(used.)481
+4698 y(Flags)g(passed)f(to)h(the)g(compiler.)150 4854
+y(Ho)m(w)m(ev)m(er,)f(the)e(most)g(imp)s(ortan)m(t)f(single)h(thing)g
+(that)f(will)h(help)f(me)g(is)g(the)h(\014le)f(that)h(y)m(ou)f(w)m(ere)
+h(trying)150 4964 y(to)35 b(compress)f(or)g(decompress)g(at)g(the)h
+(time)f(the)h(problem)e(happ)s(ened.)50 b(Without)34
+b(that,)i(m)m(y)e(abilit)m(y)150 5074 y(to)d(do)g(an)m(ything)f(more)h
+(than)f(sp)s(eculate)h(ab)s(out)f(the)h(cause,)f(is)h(limited.)150
+5230 y(Please)h(remem)m(b)s(er)g(that)g(I)f(connect)h(to)g(the)g(In)m
+(ternet)g(with)f(a)h(mo)s(dem,)f(so)g(y)m(ou)h(should)e(con)m(tact)k
+(me)150 5340 y(b)s(efore)c(mailing)h(me)g(h)m(uge)f(\014les.)p
 eop
 %%Page: 35 36
 35 35 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
-b(35)199 299 y(5.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h(size)g(3)h
-(b)m(ytes.)199 431 y(6.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h(size)
-g(4)h(b)m(ytes.)199 564 y(7.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h
-(size)g(5)h(b)m(ytes.)199 697 y(8.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)
-m(k)h(size)g(6)h(b)m(ytes)g(and)e(small-mo)s(de)g(decompression.)199
-829 y(9.)61 b(H)30 b(with)g(bu\013er)f(size)h(of)h(1)f(b)m(yte,)i(but)d
-(normal)h(blo)s(c)m(k)g(size)g(\(up)f(to)j(900000)h(b)m(ytes\).)150
-1009 y(Then)c(some)i(tests)g(with)e(unmo)s(di\014ed)f(source)i(co)s
-(de.)199 1166 y(1.)61 b(H,)31 b(all)e(settings)h(normal.)199
-1299 y(2.)61 b(As)30 b(\(1\),)i(with)d(small-mo)s(de)g(decompress.)199
-1431 y(3.)61 b(H,)31 b(compress)f(with)f(\015ag)i Fj(-1)p
-Fl(.)199 1564 y(4.)61 b(H,)31 b(compress)f(with)f(\015ag)i
-Fj(-s)p Fl(,)f(decompress)g(with)f(\015ag)i Fj(-s)p Fl(.)199
-1697 y(5.)61 b(F)-8 b(orw)m(ards)33 b(compatibilit)m(y:)45
-b(H,)33 b Fj(bzip2-0.1pl2)d Fl(compressing,)j Fj(bzip2-0.9.5)d
-Fl(decompressing,)330 1806 y(all)f(settings)i(normal.)199
-1939 y(6.)61 b(Bac)m(kw)m(ards)23 b(compatibilit)m(y:)35
-b(H,)23 b Fj(bzip2-0.9.5)c Fl(compressing,)k Fj(bzip2-0.1pl2)c
-Fl(decompressing,)330 2048 y(all)29 b(settings)i(normal.)199
-2181 y(7.)61 b(Bigger)31 b(tests:)41 b(A,)31 b(all)e(settings)i
+b(35)150 299 y Fk(4.4)68 b(Did)45 b(y)l(ou)g(get)h(the)f(righ)l(t)h
+(pac)l(k)-7 b(age?)150 491 y Fi(bzip2)33 b Fj(is)h(a)h(resource)g(hog.)
+54 b(It)35 b(soaks)f(up)g(large)h(amoun)m(ts)g(of)f(CPU)h(cycles)g(and)
+f(memory)-8 b(.)53 b(Also,)36 b(it)150 601 y(giv)m(es)25
+b(v)m(ery)e(large)i(latencies.)40 b(In)23 b(the)g(w)m(orst)h(case,)i(y)
+m(ou)d(can)h(feed)f(man)m(y)g(megab)m(ytes)i(of)e(uncompressed)150
+711 y(data)42 b(in)m(to)h(the)f(library)g(b)s(efore)f(getting)j(an)m(y)
+e(compressed)g(output,)i(so)e(this)g(probably)f(rules)h(out)150
+820 y(applications)31 b(requiring)g(in)m(teractiv)m(e)i(b)s(eha)m
+(viour.)150 977 y(These)j(aren't)h(faults)f(of)g(m)m(y)g(implemen)m
+(tation,)j(I)d(hop)s(e,)h(but)f(more)g(an)g(in)m(trinsic)g(prop)s(ert)m
+(y)g(of)h(the)150 1087 y(Burro)m(ws-Wheeler)31 b(transform)f
+(\(unfortunately\).)41 b(Ma)m(yb)s(e)31 b(this)f(isn't)h(what)f(y)m(ou)
+h(w)m(an)m(t.)150 1244 y(If)f(y)m(ou)g(w)m(an)m(t)h(a)f(compressor)g
+(and/or)g(library)g(whic)m(h)g(is)g(faster,)h(uses)f(less)g(memory)g
+(but)g(gets)h(prett)m(y)150 1353 y(go)s(o)s(d)f(compression,)g(and)g
+(has)f(minimal)h(latency)-8 b(,)32 b(consider)e(Jean-loup)g(Gailly's)i
+(and)d(Mark)h(Adler's)150 1463 y(w)m(ork,)h Fi(zlib-1.1.3)d
+Fj(and)h Fi(gzip-1.2.4)p Fj(.)38 b(Lo)s(ok)30 b(for)h(them)f(at)150
+1620 y Fi(http://www.zlib.org)25 b Fj(and)30 b Fi(http://www.gzip.org)
+25 b Fj(resp)s(ectiv)m(ely)-8 b(.)150 1776 y(F)g(or)30
+b(something)h(faster)f(and)e(ligh)m(ter)k(still,)f(y)m(ou)f(migh)m(t)g
+(try)g(Markus)f(F)h(X)f(J)h(Ob)s(erh)m(umer's)e Fi(LZO)h
+Fj(real-)150 1886 y(time)i(compression/decompression)h(library)-8
+b(,)31 b(at)150 1996 y Fi(http://wildsau.idv.uni-l)o(inz.)o(ac.a)o(t/m)
+o(fx/l)o(zo.h)o(tml)o Fj(.)150 2152 y(If)37 b(y)m(ou)h(w)m(an)m(t)h(to)
+f(use)f(the)h Fi(bzip2)e Fj(algorithms)j(to)f(compress)g(small)g(blo)s
+(c)m(ks)f(of)h(data,)i(64k)e(b)m(ytes)h(or)150 2262 y(smaller,)h(for)e
+(example)g(on)g(an)g(on-the-\015y)g(disk)f(compressor,)j(y)m(ou'd)e(b)s
+(e)f(w)m(ell)i(advised)e(not)i(to)f(use)150 2372 y(this)k(library)-8
+b(.)74 b(Instead,)45 b(I'v)m(e)d(made)g(a)f(sp)s(ecial)h(library)g
+(tuned)f(for)g(that)h(kind)f(of)h(use.)74 b(It's)42 b(part)150
+2481 y(of)d Fi(e2compr-0.40)p Fj(,)e(an)i(on-the-\015y)g(disk)f
+(compressor)h(for)g(the)g(Lin)m(ux)e Fi(ext2)h Fj(\014lesystem.)66
+b(Lo)s(ok)38 b(at)150 2591 y Fi(http://www.netspace.net.)o(au/~)o(reit)
+o(er/)o(e2co)o(mpr)p Fj(.)150 2880 y Fk(4.5)68 b(T)-11
+b(esting)150 3072 y Fj(A)30 b(record)h(of)f(the)h(tests)h(I'v)m(e)f
+(done.)150 3229 y(First,)g(some)g(data)g(sets:)225 3386
+y Fh(\017)60 b Fj(B:)29 b(a)g(directory)h(con)m(taining)h(6001)f
+(\014les,)g(one)f(for)g(ev)m(ery)h(length)g(in)e(the)i(range)f(0)g(to)h
+(6000)h(b)m(ytes.)330 3496 y(The)f(\014les)h(con)m(tain)g(random)f(lo)m
+(w)m(ercase)j(letters.)42 b(18.7)32 b(megab)m(ytes.)225
+3633 y Fh(\017)60 b Fj(H:)33 b(m)m(y)h(home)f(directory)h(tree.)50
+b(Do)s(cumen)m(ts,)34 b(source)f(co)s(de,)h(mail)g(\014les,)g
+(compressed)f(data.)49 b(H)330 3743 y(con)m(tains)39
+b(B,)e(and)g(also)i(a)e(directory)i(of)f(\014les)g(designed)f(as)h(b)s
+(oundary)e(cases)i(for)g(the)g(sorting;)330 3853 y(mostly)31
+b(v)m(ery)g(rep)s(etitiv)m(e,)i(nast)m(y)e(\014les.)40
+b(565)32 b(megab)m(ytes.)225 3990 y Fh(\017)60 b Fj(A:)40
+b(directory)i(tree)g(holding)e(v)-5 b(arious)41 b(applications)g(built)
+g(from)f(source:)62 b Fi(egcs)p Fj(,)42 b Fi(gcc-2.8.1)p
+Fj(,)330 4100 y(KDE,)30 b(GTK,)h(Octa)m(v)m(e,)j(etc.)42
+b(2200)32 b(megab)m(ytes.)150 4285 y(The)i(tests)h(conducted)f(are)h
+(as)f(follo)m(ws.)53 b(Eac)m(h)34 b(test)i(means)d(compressing)i(\(a)f
+(cop)m(y)h(of)10 b(\))35 b(eac)m(h)g(\014le)f(in)150
+4394 y(the)d(data)f(set,)i(decompressing)e(it)h(and)f(comparing)h(it)g
+(against)g(the)g(original.)150 4551 y(First,)36 b(a)f(bunc)m(h)f(of)h
+(tests)g(with)g(blo)s(c)m(k)g(sizes)g(and)f(in)m(ternal)i(bu\013er)e
+(sizes)h(set)g(v)m(ery)h(small,)g(to)f(detect)150 4661
+y(an)m(y)h(problems)g(with)h(the)f(blo)s(c)m(king)h(and)f(bu\013ering)g
+(mec)m(hanisms.)59 b(This)36 b(required)g(mo)s(difying)g(the)150
+4770 y(source)31 b(co)s(de)f(so)h(as)f(to)i(try)e(to)i(break)e(it.)199
+4927 y(1.)61 b(Data)31 b(set)g(H,)g(with)f(bu\013er)g(size)h(of)f(1)h
+(b)m(yte,)h(and)d(blo)s(c)m(k)i(size)g(of)g(23)g(b)m(ytes.)199
+5065 y(2.)61 b(Data)31 b(set)g(B,)f(bu\013er)g(sizes)h(1)g(b)m(yte,)g
+(blo)s(c)m(k)g(size)g(1)g(b)m(yte.)199 5202 y(3.)61 b(As)30
+b(\(2\))h(but)f(small-mo)s(de)h(decompression.)199 5340
+y(4.)61 b(As)30 b(\(2\))h(with)g(blo)s(c)m(k)f(size)i(2)e(b)m(ytes.)p
+eop
+%%Page: 36 37
+36 36 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
+b(36)199 299 y Fj(5.)61 b(As)30 b(\(2\))h(with)g(blo)s(c)m(k)f(size)i
+(3)e(b)m(ytes.)199 431 y(6.)61 b(As)30 b(\(2\))h(with)g(blo)s(c)m(k)f
+(size)i(4)e(b)m(ytes.)199 564 y(7.)61 b(As)30 b(\(2\))h(with)g(blo)s(c)
+m(k)f(size)i(5)e(b)m(ytes.)199 697 y(8.)61 b(As)30 b(\(2\))h(with)g
+(blo)s(c)m(k)f(size)i(6)e(b)m(ytes)h(and)f(small-mo)s(de)h
+(decompression.)199 829 y(9.)61 b(H)31 b(with)f(bu\013er)f(size)j(of)e
+(1)h(b)m(yte,)g(but)f(normal)g(blo)s(c)m(k)h(size)h(\(up)d(to)j(900000)
+h(b)m(ytes\).)150 1009 y(Then)d(some)h(tests)g(with)f(unmo)s(di\014ed)f
+(source)h(co)s(de.)199 1166 y(1.)61 b(H,)31 b(all)g(settings)g(normal.)
+199 1299 y(2.)61 b(As)30 b(\(1\),)i(with)e(small-mo)s(de)g(decompress.)
+199 1431 y(3.)61 b(H,)31 b(compress)f(with)g(\015ag)h
+Fi(-1)p Fj(.)199 1564 y(4.)61 b(H,)31 b(compress)f(with)g(\015ag)h
+Fi(-s)p Fj(,)f(decompress)g(with)g(\015ag)h Fi(-s)p Fj(.)199
+1697 y(5.)61 b(F)-8 b(orw)m(ards)31 b(compatibilit)m(y:)43
+b(H,)31 b Fi(bzip2-0.1pl2)d Fj(compressing,)j Fi(bzip2-0.9.5)c
+Fj(decompressing,)330 1806 y(all)k(settings)h(normal.)199
+1939 y(6.)61 b(Bac)m(kw)m(ards)38 b(compatibilit)m(y:)59
+b(H,)39 b Fi(bzip2-0.9.5)c Fj(compressing,)41 b Fi(bzip2-0.1pl2)35
+b Fj(decompress-)330 2048 y(ing,)c(all)g(settings)g(normal.)199
+2181 y(7.)61 b(Bigger)31 b(tests:)42 b(A,)30 b(all)h(settings)h
 (normal.)199 2314 y(8.)61 b(As)30 b(\(7\),)i(using)d(the)i(fallbac)m(k)
-e(\(Sadak)-5 b(ane-lik)m(e\))31 b(sorting)f(algorithm.)199
-2446 y(9.)61 b(As)30 b(\(8\),)i(compress)e(with)f(\015ag)i
-Fj(-1)p Fl(,)f(decompress)g(with)f(\015ag)i Fj(-s)p Fl(.)154
-2579 y(10.)61 b(H,)31 b(using)e(the)h(fallbac)m(k)g(sorting)g
-(algorithm.)154 2711 y(11.)61 b(F)-8 b(orw)m(ards)33
-b(compatibilit)m(y:)45 b(A,)33 b Fj(bzip2-0.1pl2)d Fl(compressing,)j
-Fj(bzip2-0.9.5)d Fl(decompressing,)330 2821 y(all)f(settings)i(normal.)
-154 2954 y(12.)61 b(Bac)m(kw)m(ards)23 b(compatibilit)m(y:)35
-b(A,)23 b Fj(bzip2-0.9.5)c Fl(compressing,)k Fj(bzip2-0.1pl2)c
-Fl(decompressing,)330 3063 y(all)29 b(settings)i(normal.)154
-3196 y(13.)61 b(Misc)39 b(test:)58 b(ab)s(out)39 b(400)h(megab)m(ytes)h
-(of)e Fj(.tar)f Fl(\014les)f(with)h Fj(bzip2)f Fl(compiled)h(with)f
-(Chec)m(k)m(er)j(\(a)330 3305 y(memory)30 b(access)i(error)e(detector,)
-i(lik)m(e)e(Purify\).)154 3438 y(14.)61 b(Misc)30 b(tests)h(to)g(mak)m
-(e)h(sure)d(it)h(builds)e(and)h(runs)g(ok)i(on)f(non-Lin)m(ux/x86)g
-(platforms.)150 3618 y(These)35 b(tests)h(w)m(ere)f(conducted)g(on)g(a)
-h(225)g(MHz)g(IDT)f(WinChip)d(mac)m(hine,)k(running)d(Lin)m(ux)g
-(2.0.36.)150 3728 y(They)d(represen)m(t)g(nearly)g(a)h(w)m(eek)g(of)f
-(con)m(tin)m(uous)g(computation.)41 b(All)29 b(tests)i(completed)f
+g(\(Sadak)-5 b(ane-lik)m(e\))33 b(sorting)e(algorithm.)199
+2446 y(9.)61 b(As)30 b(\(8\),)i(compress)e(with)g(\015ag)h
+Fi(-1)p Fj(,)f(decompress)g(with)g(\015ag)h Fi(-s)p Fj(.)154
+2579 y(10.)61 b(H,)31 b(using)f(the)g(fallbac)m(k)i(sorting)f
+(algorithm.)154 2711 y(11.)61 b(F)-8 b(orw)m(ards)31
+b(compatibilit)m(y:)44 b(A,)31 b Fi(bzip2-0.1pl2)d Fj(compressing,)k
+Fi(bzip2-0.9.5)27 b Fj(decompressing,)330 2821 y(all)k(settings)h
+(normal.)154 2954 y(12.)61 b(Bac)m(kw)m(ards)39 b(compatibilit)m(y:)59
+b(A,)39 b Fi(bzip2-0.9.5)c Fj(compressing,)41 b Fi(bzip2-0.1pl2)36
+b Fj(decompress-)330 3063 y(ing,)31 b(all)g(settings)g(normal.)154
+3196 y(13.)61 b(Misc)38 b(test:)57 b(ab)s(out)37 b(400)i(megab)m(ytes)g
+(of)f Fi(.tar)f Fj(\014les)g(with)h Fi(bzip2)e Fj(compiled)i(with)g
+(Chec)m(k)m(er)g(\(a)330 3305 y(memory)31 b(access)g(error)g(detector,)
+h(lik)m(e)g(Purify\).)154 3438 y(14.)61 b(Misc)31 b(tests)h(to)f(mak)m
+(e)g(sure)f(it)h(builds)e(and)h(runs)f(ok)h(on)h(non-Lin)m(ux/x86)f
+(platforms.)150 3618 y(These)k(tests)g(w)m(ere)h(conducted)e(on)h(a)f
+(225)i(MHz)f(IDT)g(WinChip)e(mac)m(hine,)j(running)d(Lin)m(ux)g
+(2.0.36.)150 3728 y(They)c(represen)m(t)h(nearly)g(a)f(w)m(eek)h(of)f
+(con)m(tin)m(uous)h(computation.)41 b(All)29 b(tests)g(completed)g
 (successfully)-8 b(.)150 4003 y Fk(4.6)68 b(F)-11 b(urther)44
-b(reading)150 4196 y Fj(bzip2)28 b Fl(is)h(not)h(researc)m(h)g(w)m
-(ork,)g(in)e(the)i(sense)g(that)g(it)f(do)s(esn't)g(presen)m(t)h(an)m
-(y)g(new)f(ideas.)40 b(Rather,)30 b(it's)150 4306 y(an)g(engineering)f
-(exercise)i(based)f(on)g(existing)g(ideas.)150 4463 y(F)-8
-b(our)31 b(do)s(cumen)m(ts)f(describ)s(e)e(essen)m(tially)i(all)f(the)i
-(ideas)e(b)s(ehind)f Fj(bzip2)p Fl(:)390 4614 y Fj(Michael)46
+b(reading)150 4196 y Fi(bzip2)26 b Fj(is)h(not)h(researc)m(h)g(w)m
+(ork,)g(in)f(the)h(sense)f(that)h(it)g(do)s(esn't)f(presen)m(t)h(an)m
+(y)f(new)g(ideas.)40 b(Rather,)28 b(it's)150 4306 y(an)i(engineering)h
+(exercise)h(based)e(on)g(existing)i(ideas.)150 4463 y(F)-8
+b(our)31 b(do)s(cumen)m(ts)f(describ)s(e)g(essen)m(tially)i(all)f(the)g
+(ideas)f(b)s(ehind)f Fi(bzip2)p Fj(:)390 4614 y Fi(Michael)46
 b(Burrows)g(and)h(D.)g(J.)g(Wheeler:)485 4717 y("A)h(block-sorting)c
 (lossless)h(data)i(compression)e(algorithm")533 4821
 y(10th)i(May)g(1994.)533 4925 y(Digital)f(SRC)h(Research)e(Report)i
@@ -3618,9 +3800,9 @@ y(10th)i(May)g(1994.)533 4925 y(Digital)f(SRC)h(Research)e(Report)i
 y(If)g(you)g(have)g(trouble)f(finding)g(it,)g(try)h(searching)f(at)h
 (the)533 5236 y(New)g(Zealand)f(Digital)g(Library,)f
 (http://www.nzdl.org.)p eop
-%%Page: 36 37
-36 36 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
-b(36)390 299 y Fj(Daniel)46 b(S.)h(Hirschberg)e(and)i(Debra)g(A.)g
+%%Page: 37 38
+37 37 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
+b(37)390 299 y Fi(Daniel)46 b(S.)h(Hirschberg)e(and)i(Debra)g(A.)g
 (LeLewer)485 403 y("Efficient)e(Decoding)h(of)h(Prefix)f(Codes")533
 506 y(Communications)e(of)j(the)g(ACM,)g(April)f(1990,)h(Vol)f(33,)h
 (Number)f(4.)533 610 y(You)h(might)f(be)i(able)e(to)h(get)g(an)h
@@ -3632,176 +3814,177 @@ b(36)390 299 y Fj(Daniel)46 b(S.)h(Hirschberg)e(and)i(Debra)g(A.)g
 (djw)o(3/)390 1544 y(Jon)h(L.)g(Bentley)f(and)h(Robert)f(Sedgewick)485
 1648 y("Fast)h(Algorithms)e(for)i(Sorting)f(and)g(Searching)g(Strings")
 533 1752 y(Available)f(from)i(Sedgewick's)e(web)i(page,)533
-1856 y(www.cs.princeton.edu/~rs)150 2012 y Fl(The)29
-b(follo)m(wing)f(pap)s(er)g(giv)m(es)h(v)-5 b(aluable)28
-b(additional)g(insigh)m(ts)f(in)m(to)j(the)f(algorithm,)g(but)g(is)f
-(not)i(imme-)150 2122 y(diately)g(the)g(basis)f(of)i(an)m(y)g(co)s(de)f
-(used)g(in)f(bzip2.)390 2273 y Fj(Peter)46 b(Fenwick:)533
+1856 y(www.cs.princeton.edu/~rs)150 2012 y Fj(The)29
+b(follo)m(wing)h(pap)s(er)d(giv)m(es)j(v)-5 b(aluable)29
+b(additional)g(insigh)m(ts)g(in)m(to)h(the)f(algorithm,)h(but)e(is)h
+(not)g(imme-)150 2122 y(diately)i(the)g(basis)f(of)h(an)m(y)f(co)s(de)h
+(used)e(in)h(bzip2.)390 2273 y Fi(Peter)46 b(Fenwick:)533
 2377 y(Block)h(Sorting)e(Text)i(Compression)533 2481
 y(Proceedings)e(of)i(the)g(19th)g(Australasian)d(Computer)i(Science)f
 (Conference,)629 2584 y(Melbourne,)g(Australia.)92 b(Jan)47
 b(31)g(-)h(Feb)f(2,)g(1996.)533 2688 y(ftp://ftp.cs.auckland.ac.)o
 (nz/p)o(ub/)o(pete)o(r-f/)o(ACS)o(C96p)o(aper)o(.ps)150
-2845 y Fl(Kunihik)m(o)28 b(Sadak)-5 b(ane's)31 b(sorting)e(algorithm,)h
-(men)m(tioned)g(ab)s(o)m(v)m(e,)i(is)d(a)m(v)-5 b(ailable)30
-b(from:)390 2996 y Fj(http://naomi.is.s.u-toky)o(o.ac)o(.jp/)o(~sa)o
+2845 y Fj(Kunihik)m(o)30 b(Sadak)-5 b(ane's)30 b(sorting)i(algorithm,)f
+(men)m(tioned)g(ab)s(o)m(v)m(e,)h(is)e(a)m(v)-5 b(ailable)32
+b(from:)390 2996 y Fi(http://naomi.is.s.u-toky)o(o.ac)o(.jp/)o(~sa)o
 (da/p)o(aper)o(s/S)o(ada9)o(8b.p)o(s.g)o(z)150 3153 y
-Fl(The)41 b(Man)m(b)s(er-My)m(ers)g(su\016x)g(arra)m(y)g(construction)g
-(algorithm)f(is)g(describ)s(ed)f(in)h(a)i(pap)s(er)e(a)m(v)-5
-b(ailable)150 3262 y(from:)390 3413 y Fj(http://www.cs.arizona.ed)o
+Fj(The)38 b(Man)m(b)s(er-My)m(ers)h(su\016x)e(arra)m(y)i(construction)g
+(algorithm)h(is)e(describ)s(ed)f(in)h(a)g(pap)s(er)f(a)m(v)-5
+b(ailable)150 3262 y(from:)390 3413 y Fi(http://www.cs.arizona.ed)o
 (u/pe)o(ople)o(/ge)o(ne/P)o(APER)o(S/s)o(uffi)o(x.ps)150
-3570 y Fl(Finally)d(,)33 b(the)h(follo)m(wing)e(pap)s(er)h(do)s(cumen)m
-(ts)g(some)h(recen)m(t)h(in)m(v)m(estigations)e(I)h(made)f(in)m(to)h
-(the)g(p)s(erfor-)150 3680 y(mance)d(of)f(sorting)g(algorithms:)390
-3831 y Fj(Julian)46 b(Seward:)533 3935 y(On)h(the)g(Performance)e(of)i
+3570 y Fj(Finally)d(,)33 b(the)e(follo)m(wing)i(pap)s(er)d(do)s(cumen)m
+(ts)h(some)g(recen)m(t)i(in)m(v)m(estigations)h(I)d(made)g(in)m(to)i
+(the)e(p)s(erfor-)150 3680 y(mance)g(of)f(sorting)h(algorithms:)390
+3831 y Fi(Julian)46 b(Seward:)533 3935 y(On)h(the)g(Performance)e(of)i
 (BWT)g(Sorting)f(Algorithms)533 4038 y(Proceedings)f(of)i(the)g(IEEE)g
 (Data)f(Compression)f(Conference)g(2000)629 4142 y(Snowbird,)g(Utah.)94
 b(28-30)46 b(March)h(2000.)p eop
-%%Page: -1 38
--1 37 bop 3725 -116 a Fl(i)150 299 y Fh(T)-13 b(able)54
+%%Page: -1 39
+-1 38 bop 3725 -116 a Fl(i)150 299 y Fg(T)-13 b(able)54
 b(of)g(Con)l(ten)l(ts)150 641 y Fk(1)135 b(In)l(tro)t(duction)15
-b Fb(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
+b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
 (.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)60
-b Fk(2)150 911 y(2)135 b(Ho)l(w)45 b(to)h(use)f Fd(bzip2)31
-b Fb(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g
+b Fk(2)150 911 y(2)135 b(Ho)l(w)45 b(to)h(use)f Fc(bzip2)31
+b Fa(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g
 (.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)78 b Fk(3)1047
-1048 y Fl(NAME)20 b Fa(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fl(3)1047
-1157 y(SYNOPSIS)21 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)50 b Fl(3)1047 1267 y(DESCRIPTION)10
-b Fa(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
-b Fl(3)1047 1377 y(OPTIONS)16 b Fa(.)d(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 b Fl(4)1047
-1486 y(MEMOR)-8 b(Y)31 b(MANA)m(GEMENT)14 b Fa(.)j(.)e(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44
-b Fl(6)1047 1596 y(RECO)m(VERING)30 b(D)m(A)-8 b(T)g(A)32
-b(FR)m(OM)f(D)m(AMA)m(GED)i(FILES)1256 1705 y Fa(.)15
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)57 b Fl(7)1047 1815 y(PERF)m(ORMANCE)30
-b(NOTES)9 b Fa(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b Fl(7)1047 1924
-y(CA)-10 b(VEA)i(TS)10 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Fl(8)1047 2034
-y(A)m(UTHOR)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+1048 y Fj(NAME)18 b Fb(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(3)1047
+1157 y Fj(SYNOPSIS)18 b Fb(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(3)1047 1267 y Fj(DESCRIPTION)28
+b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59
+b Fl(3)1047 1377 y Fj(OPTIONS)16 b Fb(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fl(4)1047
+1486 y Fj(MEMOR)-8 b(Y)31 b(MANA)m(GEMENT)9 b Fb(.)16
+b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)39 b Fl(6)1047 1596 y Fj(RECO)m(VERING)30 b(D)m(A)-8
+b(T)g(A)31 b(FR)m(OM)g(D)m(AMA)m(GED)g(FILES)1256 1705
+y Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fl(7)1047 1815 y
+Fj(PERF)m(ORMANCE)30 b(NOTES)10 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
+b Fl(8)1047 1924 y Fj(CA)-10 b(VEA)i(TS)12 b Fb(.)h(.)i(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42
+b Fl(8)1047 2034 y Fj(A)m(UTHOR)22 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b
+Fl(8)150 2276 y Fk(3)135 b(Programming)46 b(with)f Fc(libbzip2)27
+b Fa(.)16 b(.)j(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)72
+b Fk(10)449 2413 y Fj(3.1)92 b(T)-8 b(op-lev)m(el)33
+b(structure)18 b Fb(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fl(8)150 2276 y Fk(3)135
-b(Programming)46 b(with)f Fd(libbzip2)29 b Fb(.)16 b(.)j(.)h(.)f(.)h(.)
-f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)74 b Fk(9)449
-2413 y Fl(3.1)92 b(T)-8 b(op-lev)m(el)30 b(structure)24
-b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)54 b Fl(9)748 2523 y(3.1.1)93 b(Lo)m(w-lev)m(el)30
-b(summary)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)53
-b Fl(9)748 2633 y(3.1.2)93 b(High-lev)m(el)29 b(summary)12
-b Fa(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 b
-Fl(9)748 2742 y(3.1.3)93 b(Utilit)m(y)29 b(functions)g(summary)12
-b Fa(.)h(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)41 b Fl(10)449 2852 y(3.2)92 b(Error)29
-b(handling)18 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+g(.)g(.)g(.)g(.)g(.)g(.)47 b Fl(10)748 2523 y Fj(3.1.1)93
+b(Lo)m(w-lev)m(el)32 b(summary)20 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(10)449
-2961 y(3.3)92 b(Lo)m(w-lev)m(el)31 b(in)m(terface)d Fa(.)15
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)57 b Fl(12)748 3071 y(3.3.1)93 b Fj(BZ2_bzCompressInit)21
-b Fa(.)9 b(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fl(12)748
-3181 y(3.3.2)93 b Fj(BZ2_bzCompress)9 b Fa(.)h(.)15 b(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fl(14)748 3290 y(3.3.3)93
-b Fj(BZ2_bzCompressEnd)23 b Fa(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)52 b Fl(17)748 3400 y(3.3.4)93 b Fj(BZ2_bzDecompressInit)16
-b Fa(.)9 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fl(17)748 3509
-y(3.3.5)93 b Fj(BZ2_bzDecompress)21 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
+g(.)g(.)g(.)50 b Fl(10)748 2633 y Fj(3.1.2)93 b(High-lev)m(el)32
+b(summary)27 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57
+b Fl(10)748 2742 y Fj(3.1.3)93 b(Utilit)m(y)32 b(functions)e(summary)10
+b Fb(.)k(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)39 b Fl(11)449 2852 y Fj(3.2)92 b(Error)30
+b(handling)15 b Fb(.)f(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)55 b Fl(17)748 3619 y(3.3.6)93 b Fj(BZ2_bzDecompressEnd)18
-b Fa(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(19)449
-3729 y(3.4)92 b(High-lev)m(el)30 b(in)m(terface)16 b
-Fa(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)45 b Fl(19)748 3838 y(3.4.1)93 b Fj(BZ2_bzReadOpen)9
-b Fa(.)h(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)44 b Fl(11)449
+2961 y Fj(3.3)92 b(Lo)m(w-lev)m(el)32 b(in)m(terface)26
+b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)53 b Fl(13)748 3071 y Fj(3.3.1)93 b Fi(BZ2_bzCompressInit)
+21 b Fb(.)9 b(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fl(13)748
+3181 y Fj(3.3.2)93 b Fi(BZ2_bzCompress)9 b Fb(.)h(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fl(15)748
+3290 y Fj(3.3.3)93 b Fi(BZ2_bzCompressEnd)23 b Fb(.)10
+b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fl(18)748 3400
+y Fj(3.3.4)93 b Fi(BZ2_bzDecompressInit)16 b Fb(.)9 b(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)45 b Fl(18)748 3509 y Fj(3.3.5)93
+b Fi(BZ2_bzDecompress)21 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)55 b Fl(18)748 3619 y Fj(3.3.6)93 b Fi(BZ2_bzDecompressEnd)18
+b Fb(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(20)449
+3729 y Fj(3.4)92 b(High-lev)m(el)33 b(in)m(terface)9
+b Fb(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)g(.)38 b Fl(20)748 3838 y Fj(3.4.1)93 b Fi(BZ2_bzReadOpen)9
+b Fb(.)h(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38
-b Fl(19)748 3948 y(3.4.2)93 b Fj(BZ2_bzRead)18 b Fa(.)12
+b Fl(20)748 3948 y Fj(3.4.2)93 b Fi(BZ2_bzRead)18 b Fb(.)12
 b(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47
-b Fl(20)748 4057 y(3.4.3)93 b Fj(BZ2_bzReadGetUnused)18
-b Fa(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(22)748
-4167 y(3.4.4)93 b Fj(BZ2_bzReadClose)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)57 b Fl(22)748 4276 y(3.4.5)93 b
-Fj(BZ2_bzWriteOpen)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)57 b Fl(22)748 4386 y(3.4.6)93 b Fj(BZ2_bzWrite)16
-b Fa(.)11 b(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-45 b Fl(23)748 4496 y(3.4.7)93 b Fj(BZ2_bzWriteClose)21
-b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fl(23)748
-4605 y(3.4.8)93 b(Handling)28 b(em)m(b)s(edded)h(compressed)h(data)h
-(streams)17 b Fa(.)f(.)f(.)g(.)46 b Fl(24)748 4715 y(3.4.9)93
-b(Standard)29 b(\014le-reading/writing)e(co)s(de)22 b
-Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52
-b Fl(25)449 4824 y(3.5)92 b(Utilit)m(y)29 b(functions)f
-Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)59 b Fl(26)748 4934 y(3.5.1)93 b
-Fj(BZ2_bzBuffToBuffCompres)o(s)22 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)57 b Fl(26)748
-5044 y(3.5.2)93 b Fj(BZ2_bzBuffToBuffDecompr)o(ess)17
-b Fa(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-53 b Fl(27)449 5153 y(3.6)92 b Fj(zlib)29 b Fl(compatibilit)m(y)g
-(functions)23 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52
-b Fl(28)449 5263 y(3.7)92 b(Using)30 b(the)g(library)e(in)h(a)i
-Fj(stdio)p Fl(-free)e(en)m(vironmen)m(t)23 b Fa(.)15
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)52 b Fl(29)p
-eop
-%%Page: -2 39
--2 38 bop 3699 -116 a Fl(ii)748 83 y(3.7.1)93 b(Getting)31
-b(rid)d(of)j Fj(stdio)20 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49
-b Fl(29)748 193 y(3.7.2)93 b(Critical)28 b(error)i(handling)22
-b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fl(29)449 302
-y(3.8)92 b(Making)30 b(a)h(Windo)m(ws)e(DLL)15 b Fa(.)h(.)f(.)g(.)g(.)g
+b Fl(21)748 4057 y Fj(3.4.3)93 b Fi(BZ2_bzReadGetUnused)18
+b Fb(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(23)748
+4167 y Fj(3.4.4)93 b Fi(BZ2_bzReadClose)23 b Fb(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fl(23)748
+4276 y Fj(3.4.5)93 b Fi(BZ2_bzWriteOpen)23 b Fb(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fl(23)748
+4386 y Fj(3.4.6)93 b Fi(BZ2_bzWrite)16 b Fb(.)11 b(.)k(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fl(24)748
+4496 y Fj(3.4.7)93 b Fi(BZ2_bzWriteClose)21 b Fb(.)15
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fl(25)748
+4605 y Fj(3.4.8)93 b(Handling)30 b(em)m(b)s(edded)f(compressed)h(data)h
+(streams)9 b Fb(.)15 b(.)g(.)g(.)38 b Fl(25)748 4715
+y Fj(3.4.9)93 b(Standard)29 b(\014le-reading/writing)j(co)s(de)16
+b Fb(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)45
+b Fl(26)449 4824 y Fj(3.5)92 b(Utilit)m(y)32 b(functions)c
+Fb(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)44 b Fl(30)150 545
-y Fk(4)135 b(Miscellanea)11 b Fb(.)21 b(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)h
-(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)g(.)h(.)56 b Fk(31)449 682 y Fl(4.1)92 b(Limitations)29
-b(of)h(the)h(compressed)f(\014le)f(format)9 b Fa(.)15
-b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38
-b Fl(31)449 791 y(4.2)92 b(P)m(ortabilit)m(y)30 b(issues)14
-b Fa(.)f(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)43 b Fl(32)449 901 y(4.3)92 b(Rep)s(orting)29
-b(bugs)f Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fl(32)449 1010 y(4.4)92
-b(Did)29 b(y)m(ou)i(get)h(the)e(righ)m(t)g(pac)m(k)-5
-b(age?)22 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
-b Fl(34)449 1120 y(4.5)92 b(T)-8 b(esting)16 b Fa(.)f(.)g(.)g(.)g(.)g
+g(.)g(.)g(.)g(.)h(.)57 b Fl(27)748 4934 y Fj(3.5.1)93
+b Fi(BZ2_bzBuffToBuffCompres)o(s)22 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)57 b Fl(27)748
+5044 y Fj(3.5.2)93 b Fi(BZ2_bzBuffToBuffDecompr)o(ess)17
+b Fb(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+53 b Fl(28)449 5153 y Fj(3.6)92 b Fi(zlib)29 b Fj(compatibilit)m(y)k
+(functions)23 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)52
+b Fl(29)449 5263 y Fj(3.7)92 b(Using)30 b(the)h(library)f(in)g(a)h
+Fi(stdio)p Fj(-free)f(en)m(vironmen)m(t)12 b Fb(.)k(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)41 b Fl(30)p eop
+%%Page: -2 40
+-2 39 bop 3699 -116 a Fl(ii)748 83 y Fj(3.7.1)93 b(Getting)32
+b(rid)e(of)g Fi(stdio)17 b Fb(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46
+b Fl(30)748 193 y Fj(3.7.2)93 b(Critical)31 b(error)g(handling)18
+b Fb(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fl(30)449 302 y
+Fj(3.8)92 b(Making)31 b(a)f(Windo)m(ws)g(DLL)17 b Fb(.)d(.)h(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fl(31)150
+545 y Fk(4)135 b(Miscellanea)11 b Fa(.)21 b(.)f(.)f(.)h(.)f(.)g(.)h(.)f
+(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)g(.)h(.)56 b Fk(32)449 682 y Fj(4.1)92 b(Limitations)31
+b(of)g(the)g(compressed)f(\014le)g(format)c Fb(.)15 b(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)54 b Fl(32)449
+791 y Fj(4.2)92 b(P)m(ortabilit)m(y)33 b(issues)12 b
+Fb(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)41 b Fl(33)449 901 y Fj(4.3)92 b(Rep)s(orting)31
+b(bugs)24 b Fb(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)45 b Fl(34)449 1230 y(4.6)92
-b(F)-8 b(urther)30 b(reading)22 b Fa(.)14 b(.)h(.)g(.)h(.)f(.)g(.)g(.)g
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fl(33)449 1010
+y Fj(4.4)92 b(Did)30 b(y)m(ou)g(get)i(the)f(righ)m(t)g(pac)m(k)-5
+b(age?)18 b Fb(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)47 b Fl(35)449
+1120 y Fj(4.5)92 b(T)-8 b(esting)16 b Fb(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)46 b Fl(35)449 1230 y Fj(4.6)92 b(F)-8
+b(urther)30 b(reading)17 b Fb(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)51
-b Fl(35)p eop
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b
+Fl(36)p eop
 %%Trailer
 end
 userdict /end-hook known{end-hook}if
index 336776ab805a083f53ebd9c11a014a20823da701..5bc27d5f9f90abcef0788b9a47eac0511abb9a1c 100644 (file)
@@ -2,10 +2,10 @@
 @setfilename bzip2.info
 
 @ignore
-This file documents bzip2 version 1.0, and associated library
+This file documents bzip2 version 1.0.2, and associated library
 libbzip2, written by Julian Seward (jseward@acm.org).
 
-Copyright (C) 1996-2000 Julian R Seward
+Copyright (C) 1996-2002 Julian R Seward
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -30,8 +30,8 @@ END-INFO-DIR-ENTRY
 @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
+@subtitle copyright (C) 1996-2002 Julian Seward
+@subtitle version 1.0.2 of 30 December 2001
 @author Julian Seward
 
 @end titlepage
@@ -40,11 +40,17 @@ END-INFO-DIR-ENTRY
 @parskip 2mm
 
 @end iftex
-@node Top, Overview, (dir), (dir)
+@node Top,,, (dir)
+
+The following text is the License for this software.  You should
+find it identical to that contained in the file LICENSE in the 
+source distribution.
+
+@bf{------------------ START OF THE LICENSE ------------------}
 
 This program, @code{bzip2}, 
 and associated library @code{libbzip2}, are
-Copyright (C) 1996-2000 Julian R Seward.  All rights reserved.
+Copyright (C) 1996-2002 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
@@ -82,13 +88,15 @@ Julian Seward, Cambridge, UK.
 
 @code{jseward@@acm.org}
 
-@code{http://sourceware.cygnus.com/bzip2}
+@code{bzip2}/@code{libbzip2} version 1.0.2 of 30 December 2001.
 
-@code{http://www.cacheprof.org}
+@bf{------------------ END OF THE LICENSE ------------------}
 
-@code{http://www.muraroa.demon.co.uk}
+Web sites:
 
-@code{bzip2}/@code{libbzip2} version 1.0 of 21 March 2000.
+@code{http://sources.redhat.com/bzip2}
+
+@code{http://www.cacheprof.org}
 
 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
@@ -101,7 +109,6 @@ above statement.
 
 
 
-@node Overview, Implementation, Top, Top
 @chapter Introduction
 
 @code{bzip2}  compresses  files  using the Burrows-Wheeler 
@@ -134,7 +141,7 @@ and nothing else.
 @unnumberedsubsubsec NAME
 @itemize
 @item @code{bzip2}, @code{bunzip2}
-- a block-sorting file compressor, v1.0
+- a block-sorting file compressor, v1.0.2
 @item @code{bzcat} 
 - decompresses files to stdout
 @item @code{bzip2recover}
@@ -264,6 +271,11 @@ This really performs a trial decompression and throws away the result.
 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.
+
+@code{bzip2} normally declines to decompress files which don't have the
+correct magic header bytes.  If forced (@code{-f}), however, it will
+pass such files through unmodified.  This is how GNU @code{gzip}
+behaves.
 @item -k --keep
 Keep (don't delete) input files during compression
 or decompression.
@@ -286,9 +298,13 @@ 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
+@item -1 (or --fast) to -9 (or --best)
 Set the block size to 100 k, 200 k ..  900 k when compressing.  Has no
 effect when decompressing.  See MEMORY MANAGEMENT below.
+The @code{--fast} and @code{--best} aliases are primarily for GNU
+@code{gzip} compatibility.  In particular, @code{--fast} doesn't make
+things significantly faster.  And @code{--best} merely selects the
+default behaviour.
 @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
@@ -389,21 +405,19 @@ 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.
+takes a single argument, the name of the damaged file, and writes a
+number of files @code{rec00001file.bz2}, @code{rec00002file.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} -- processes 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.
+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
@@ -435,22 +449,31 @@ 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
+This manual page pertains to version 1.0.2 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.
+compatible with the previous public releases, versions 0.1pl2, 0.9.0,
+0.9.5, 1.0.0 and 1.0.1, 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} versions prior to this one, 1.0.2, used 32-bit
+integers to represent bit positions in compressed files, so it could not
+handle compressed files more than 512 megabytes long.  Version 1.0.2 and
+above uses 64-bit ints on some platforms which support them (GNU
+supported targets, and Windows).  To establish whether or not
+@code{bzip2recover} was built with such a limitation, run it without
+arguments.  In any event you can build yourself an unlimited version if
+you can recompile it with @code{MaybeUInt64} set to be an unsigned
+64-bit integer.
 
-@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}.
 
+@code{http://sources.redhat.com/bzip2}
+
 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
@@ -461,8 +484,9 @@ 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
+worst-case compression performance.  The @code{bz*} scripts are derived
+from those of GNU @code{gzip}.  Many people sent patches, helped with
+portability problems, lent machines, gave advice and were generally
 helpful.
 
 @end quotation
@@ -1769,16 +1793,20 @@ 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.
+   This is a bug in bzip2/libbzip2, 1.0.2, 30-Dec-2001.
    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.
+   quality software.  Thanks.  Julian Seward, 30 December 2001.
 @end example
-where @code{N} is some error code number.  @code{exit(3)}
-is then called.
+where @code{N} is some error code number.  If @code{N == 1007}, it also
+prints some extra text advising the reader that unreliable memory is
+often associated with internal error 1007.  (This is a
+frequently-observed-phenomenon with versions 1.0.0/1.0.1).
+
+@code{exit(3)} is then called.
 
 For a @code{stdio}-free library, assertion failures result
 in a call to a function declared as:
@@ -2056,10 +2084,10 @@ 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
+Gailly's and Mark Adler's work, @code{zlib-1.1.3} and
 @code{gzip-1.2.4}.  Look for them at
 
-@code{http://www.cdrom.com/pub/infozip/zlib} and
+@code{http://www.zlib.org} and
 @code{http://www.gzip.org} respectively.
 
 For something faster and lighter still, you might try Markus F X J
index 92ba7c6df62c69ce3556e0d68914771b0beb64e7..15f86c9972a13fd74cbd8f7e61d44dff3d0aa6b6 100644 (file)
@@ -1,47 +1,81 @@
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.54
-     from manual.texi on 23 March 2000 -->
+<TITLE>Untitled Document: 1. Introduction</TITLE>
 
-<TITLE>bzip2 and libbzip2 - Introduction</TITLE>
-<link href="manual_2.html" rel=Next>
-<link href="manual_toc.html" rel=ToC>
+<META NAME="description" CONTENT="Untitled Document: 1. Introduction">
+<META NAME="keywords" CONTENT="Untitled Document: 1. Introduction">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
 
 </HEAD>
-<BODY>
-<p>Go to the first, previous, <A HREF="manual_2.html">next</A>, <A HREF="manual_4.html">last</A> section, <A HREF="manual_toc.html">table of contents</A>.
-<P><HR><P>
 
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 
-<H1><A NAME="SEC1" HREF="manual_toc.html#TOC1">Introduction</A></H1>
-
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 1. Introduction </H1>
+<!--docid::SEC1::-->
 <P>
+
 <CODE>bzip2</CODE>  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.
+</P><P>
 
-</P>
-<P>
 <CODE>bzip2</CODE> is built on top of <CODE>libbzip2</CODE>, a flexible library
 for handling compressed data in the <CODE>bzip2</CODE> 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.
+</P><P>
 
-</P>
-<P>
 Chapter 2 describes how to use <CODE>bzip2</CODE>; 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.
+</P><P>
 
-</P>
+<HR SIZE="6">
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
 
-<P><HR><P>
-<p>Go to the first, previous, <A HREF="manual_2.html">next</A>, <A HREF="manual_4.html">last</A> section, <A HREF="manual_toc.html">table of contents</A>.
 </BODY>
 </HTML>
index 39453c42ded0e6d9adc98fa35e79a306f9be7246..a3bebc3f2d503f3c37d3fa720d4bb24eb33af2dc 100644 (file)
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.54
-     from manual.texi on 23 March 2000 -->
+<TITLE>Untitled Document: 2. How to use <CODE>bzip2</CODE></TITLE>
 
-<TITLE>bzip2 and libbzip2 - How to use bzip2</TITLE>
-<link href="manual_3.html" rel=Next>
-<link href="manual_1.html" rel=Previous>
-<link href="manual_toc.html" rel=ToC>
+<META NAME="description" CONTENT="Untitled Document: 2. How to use <CODE>bzip2</CODE>">
+<META NAME="keywords" CONTENT="Untitled Document: 2. How to use <CODE>bzip2</CODE>">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
 
 </HEAD>
-<BODY>
-<p>Go to the <A HREF="manual_1.html">first</A>, <A HREF="manual_1.html">previous</A>, <A HREF="manual_3.html">next</A>, <A HREF="manual_4.html">last</A> section, <A HREF="manual_toc.html">table of contents</A>.
-<P><HR><P>
 
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 
-<H1><A NAME="SEC2" HREF="manual_toc.html#TOC2">How to use <CODE>bzip2</CODE></A></H1>
-
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_1.html#SEC1"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. How to use <CODE>bzip2</CODE> </H1>
+<!--docid::SEC2::-->
 <P>
+
 This chapter contains a copy of the <CODE>bzip2</CODE> man page,
 and nothing else.
-
-</P>
+</P><P>
 
 <BLOCKQUOTE>
+<P>
 
-
-
-<H4><A NAME="SEC3" HREF="manual_toc.html#TOC3">NAME</A></H4>
-
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC2"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> NAME </H4>
+<!--docid::SEC3::-->
 <UL>
 <LI><CODE>bzip2</CODE>, <CODE>bunzip2</CODE>
-
-- a block-sorting file compressor, v1.0
+- a block-sorting file compressor, v1.0.2
 <LI><CODE>bzcat</CODE>
-
 - decompresses files to stdout
 <LI><CODE>bzip2recover</CODE>
-
 - recovers data from damaged bzip2 files
 </UL>
+<P>
 
-
-
-<H4><A NAME="SEC4" HREF="manual_toc.html#TOC4">SYNOPSIS</A></H4>
-
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC3"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> SYNOPSIS </H4>
+<!--docid::SEC4::-->
 <UL>
 <LI><CODE>bzip2</CODE> [ -cdfkqstvzVL123456789 ] [ filenames ...  ]
-
 <LI><CODE>bunzip2</CODE> [ -fkvsVL ] [ filenames ...  ]
-
 <LI><CODE>bzcat</CODE> [ -s ] [ filenames ...  ]
-
 <LI><CODE>bzip2recover</CODE> filename
-
 </UL>
+<P>
 
-
-
-<H4><A NAME="SEC5" HREF="manual_toc.html#TOC5">DESCRIPTION</A></H4>
-
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC4"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> DESCRIPTION </H4>
+<!--docid::SEC5::-->
 <P>
+
 <CODE>bzip2</CODE> 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.
+</P><P>
 
-</P>
-<P>
 The command-line options are deliberately very similar to those of GNU
 <CODE>gzip</CODE>, but they are not identical.
+</P><P>
 
-</P>
-<P>
 <CODE>bzip2</CODE> 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</CODE>.  Each compressed file has the same
@@ -82,61 +131,47 @@ 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.
+</P><P>
 
-</P>
-<P>
 <CODE>bzip2</CODE> and <CODE>bunzip2</CODE> will by default not overwrite existing
 files.  If you want this to happen, specify the <CODE>-f</CODE> flag.
+</P><P>
 
-</P>
-<P>
 If no file names are specified, <CODE>bzip2</CODE> compresses from standard
 input to standard output.  In this case, <CODE>bzip2</CODE> will decline to
 write compressed output to a terminal, as this would be entirely
 incomprehensible and therefore pointless.
+</P><P>
 
-</P>
-<P>
 <CODE>bunzip2</CODE> (or <CODE>bzip2 -d</CODE>) decompresses all
 specified files.  Files which were not created by <CODE>bzip2</CODE>
 will be detected and ignored, and a warning issued.  
 <CODE>bzip2</CODE> attempts to guess the filename for the decompressed file 
 from that of the compressed file as follows:
-
 <UL>
 <LI><CODE>filename.bz2 </CODE> becomes <CODE>filename</CODE>
-
 <LI><CODE>filename.bz  </CODE> becomes <CODE>filename</CODE>
-
 <LI><CODE>filename.tbz2</CODE> becomes <CODE>filename.tar</CODE>
-
 <LI><CODE>filename.tbz </CODE> becomes <CODE>filename.tar</CODE>
-
 <LI><CODE>anyothername </CODE> becomes <CODE>anyothername.out</CODE>
-
 </UL>
-
-<P>
 If the file does not end in one of the recognised endings, 
 <CODE>.bz2</CODE>, <CODE>.bz</CODE>, 
 <CODE>.tbz2</CODE> or <CODE>.tbz</CODE>, <CODE>bzip2</CODE> complains that it cannot
 guess the name of the original file, and uses the original name
 with <CODE>.out</CODE> appended.
-
-</P>
 <P>
+
 As with compression, supplying no
 filenames causes decompression from standard input to standard output.
+</P><P>
 
-</P>
-<P>
 <CODE>bunzip2</CODE> 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</CODE>) of concatenated compressed files is also supported.
+</P><P>
 
-</P>
-<P>
 You can also compress or decompress files to the standard output by
 giving the <CODE>-c</CODE> flag.  Multiple files may be compressed and
 decompressed like this.  The resulting outputs are fed sequentially to
@@ -145,30 +180,26 @@ containing multiple compressed file representations.  Such a stream
 can be decompressed correctly only by <CODE>bzip2</CODE> version 0.9.0 or
 later.  Earlier versions of <CODE>bzip2</CODE> will stop after decompressing
 the first file in the stream.
+</P><P>
 
-</P>
-<P>
 <CODE>bzcat</CODE> (or <CODE>bzip2 -dc</CODE>) decompresses all specified files to
 the standard output.
+</P><P>
 
-</P>
-<P>
 <CODE>bzip2</CODE> will read arguments from the environment variables
 <CODE>BZIP2</CODE> and <CODE>BZIP</CODE>, in that order, and will process them
 before any arguments read from the command line.  This gives a 
 convenient way to supply default arguments.
+</P><P>
 
-</P>
-<P>
 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%.
+</P><P>
 
-</P>
-<P>
 As a self-check for your protection, <CODE>bzip2</CODE> 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
@@ -179,94 +210,113 @@ 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</CODE> to try to recover data from
 damaged files.
+</P><P>
 
-</P>
-<P>
 Return values: 0 for a normal exit, 1 for environmental problems (file
 not found, invalid flags, I/O errors, &#38;c), 2 to indicate a corrupt
 compressed file, 3 for an internal consistency error (eg, bug) which
 caused <CODE>bzip2</CODE> to panic.
-
-</P>
-
-
-
-<H4><A NAME="SEC6" HREF="manual_toc.html#TOC6">OPTIONS</A></H4>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC5"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> OPTIONS </H4>
+<!--docid::SEC6::-->
 <DL COMPACT>
-
 <DT><CODE>-c  --stdout</CODE>
-<DD>
-Compress or decompress to standard output.
+<DD>Compress or decompress to standard output.
 <DT><CODE>-d  --decompress</CODE>
-<DD>
-Force decompression.  <CODE>bzip2</CODE>, <CODE>bunzip2</CODE> and <CODE>bzcat</CODE> are
+<DD>Force decompression.  <CODE>bzip2</CODE>, <CODE>bunzip2</CODE> and <CODE>bzcat</CODE> 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.
 <DT><CODE>-z --compress</CODE>
-<DD>
-The complement to <CODE>-d</CODE>: forces compression, regardless of the
+<DD>The complement to <CODE>-d</CODE>: forces compression, regardless of the
 invokation name.
 <DT><CODE>-t --test</CODE>
-<DD>
-Check integrity of the specified file(s), but don't decompress them.
+<DD>Check integrity of the specified file(s), but don't decompress them.
 This really performs a trial decompression and throws away the result.
 <DT><CODE>-f --force</CODE>
-<DD>
-Force overwrite of output files.  Normally, <CODE>bzip2</CODE> will not overwrite
+<DD>Force overwrite of output files.  Normally, <CODE>bzip2</CODE> will not overwrite
 existing output files.  Also forces <CODE>bzip2</CODE> to break hard links
 to files, which it otherwise wouldn't do.
+<P>
+
+<CODE>bzip2</CODE> normally declines to decompress files which don't have the
+correct magic header bytes.  If forced (<CODE>-f</CODE>), however, it will
+pass such files through unmodified.  This is how GNU <CODE>gzip</CODE>
+behaves.
 <DT><CODE>-k --keep</CODE>
-<DD>
-Keep (don't delete) input files during compression
+<DD>Keep (don't delete) input files during compression
 or decompression.
 <DT><CODE>-s --small</CODE>
-<DD>
-Reduce memory usage, for compression, decompression and testing.  Files
+<DD>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.
+<P>
 
 During compression, <CODE>-s</CODE> 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.
 <DT><CODE>-q --quiet</CODE>
-<DD>
-Suppress non-essential warning messages.  Messages pertaining to
+<DD>Suppress non-essential warning messages.  Messages pertaining to
 I/O errors and other critical events will not be suppressed.
 <DT><CODE>-v --verbose</CODE>
-<DD>
-Verbose mode -- show the compression ratio for each file processed.
+<DD>Verbose mode -- show the compression ratio for each file processed.
 Further <CODE>-v</CODE>'s increase the verbosity level, spewing out lots of
 information which is primarily of interest for diagnostic purposes.
 <DT><CODE>-L --license -V --version</CODE>
-<DD>
-Display the software version, license terms and conditions.
-<DT><CODE>-1 to -9</CODE>
-<DD>
-Set the block size to 100 k, 200 k ..  900 k when compressing.  Has no
+<DD>Display the software version, license terms and conditions.
+<DT><CODE>-1 (or --fast) to -9 (or --best)</CODE>
+<DD>Set the block size to 100 k, 200 k ..  900 k when compressing.  Has no
 effect when decompressing.  See MEMORY MANAGEMENT below.
+The <CODE>--fast</CODE> and <CODE>--best</CODE> aliases are primarily for GNU
+<CODE>gzip</CODE> compatibility.  In particular, <CODE>--fast</CODE> doesn't make
+things significantly faster.  And <CODE>--best</CODE> merely selects the
+default behaviour.
 <DT><CODE>--</CODE>
-<DD>
-Treats all subsequent arguments as file names, even if they start
+<DD>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</CODE>.
 <DT><CODE>--repetitive-fast</CODE>
-<DD>
-<DT><CODE>--repetitive-best</CODE>
-<DD>
-These flags are redundant in versions 0.9.5 and above.  They provided
+<DD><DT><CODE>--repetitive-best</CODE>
+<DD>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.
 </DL>
+<P>
 
-
-
-<H4><A NAME="SEC7" HREF="manual_toc.html#TOC7">MEMORY MANAGEMENT</A></H4>
-
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC6"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> MEMORY MANAGEMENT </H4>
+<!--docid::SEC7::-->
 <P>
+
 <CODE>bzip2</CODE> 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</CODE> through <CODE>-9</CODE>
@@ -277,43 +327,34 @@ compression is read from the header of the compressed file, and
 the file.  Since block sizes are stored in compressed files, it follows
 that the flags <CODE>-1</CODE> to <CODE>-9</CODE> are irrelevant to and so ignored
 during decompression.
+</P><P>
 
-</P>
-<P>
 Compression and decompression requirements, in bytes, can be estimated
 as:
-
-<PRE>
-     Compression:   400k + ( 8 x block size )
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>     Compression:   400k + ( 8 x block size )
 
      Decompression: 100k + ( 4 x block size ), or
                     100k + ( 2.5 x block size )
-</PRE>
-
-<P>
-Larger block sizes give rapidly diminishing marginal returns.  Most of
+</pre></td></tr></table>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</CODE> 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.
+</P><P>
 
-</P>
-<P>
 For files compressed with the default 900k block size, <CODE>bunzip2</CODE>
 will require about 3700 kbytes to decompress.  To support decompression
 of any file on a 4 megabyte machine, <CODE>bunzip2</CODE> 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</CODE>.
+</P><P>
 
-</P>
-<P>
 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.
+</P><P>
 
-</P>
-<P>
 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,
@@ -322,18 +363,15 @@ since the file is smaller than a block.  For example, compressing a file
 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.
+</P><P>
 
-</P>
-<P>
 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.
-
-<PRE>
-          Compress   Decompress   Decompress   Corpus
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>          Compress   Decompress   Decompress   Corpus
    Flag     usage      usage       -s usage     Size
 
     -1      1200k       500k         350k      914704
@@ -345,61 +383,78 @@ larger files, since the Corpus is dominated by smaller files.
     -7      6100k      2900k        1850k      834096
     -8      6800k      3300k        2100k      828642
     -9      7600k      3700k        2350k      828642
-</PRE>
-
-
-
-<H4><A NAME="SEC8" HREF="manual_toc.html#TOC8">RECOVERING DATA FROM DAMAGED FILES</A></H4>
-
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC7"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> RECOVERING DATA FROM DAMAGED FILES </H4>
+<!--docid::SEC8::-->
 <P>
+
 <CODE>bzip2</CODE> compresses files in blocks, usually 900kbytes long.  Each
 block is handled independently.  If a media or transmission error causes
 a multi-block <CODE>.bz2</CODE> file to become damaged, it may be possible to
 recover data from the undamaged blocks in the file.
+</P><P>
 
-</P>
-<P>
 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.
+</P><P>
 
-</P>
-<P>
 <CODE>bzip2recover</CODE> is a simple program whose purpose is to search for
 blocks in <CODE>.bz2</CODE> files, and write each block out into its own
 <CODE>.bz2</CODE> file.  You can then use <CODE>bzip2 -t</CODE> to test the
 integrity of the resulting files, and decompress those which are
 undamaged.
+</P><P>
 
-</P>
-<P>
 <CODE>bzip2recover</CODE> 
-takes a single argument, the name of the damaged file, 
-and writes a number of files <CODE>rec0001file.bz2</CODE>,
-       <CODE>rec0002file.bz2</CODE>, 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 &#62; recovered_data</CODE> -- lists the files in
-       the correct order.
-
-</P>
-<P>
-<CODE>bzip2recover</CODE> should be of most use dealing with large <CODE>.bz2</CODE>
-       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.
-
-</P>
-
-
-
-<H4><A NAME="SEC9" HREF="manual_toc.html#TOC9">PERFORMANCE NOTES</A></H4>
+takes a single argument, the name of the damaged file, and writes a
+number of files <CODE>rec00001file.bz2</CODE>, <CODE>rec00002file.bz2</CODE>, 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 &#62; recovered_data</CODE> -- processes the files in
+the correct order.
+</P><P>
 
+<CODE>bzip2recover</CODE> should be of most use dealing with large <CODE>.bz2</CODE>
+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.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC8"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> PERFORMANCE NOTES </H4>
+<!--docid::SEC9::-->
 <P>
+
 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
@@ -408,13 +463,11 @@ 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</CODE> option to monitor progress in great detail, if you want.
+</P><P>
 
-</P>
-<P>
 Decompression speed is unaffected by these phenomena.
+</P><P>
 
-</P>
-<P>
 <CODE>bzip2</CODE> 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
@@ -423,44 +476,71 @@ 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</CODE> will perform best on machines with very large
 caches.
-
-</P>
-
-
-
-<H4><A NAME="SEC10" HREF="manual_toc.html#TOC10">CAVEATS</A></H4>
-
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC9"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> CAVEATS </H4>
+<!--docid::SEC10::-->
 <P>
+
 I/O error messages are not as helpful as they could be.  <CODE>bzip2</CODE>
 tries hard to detect I/O errors and exit cleanly, but the details of
 what the problem is sometimes seem rather misleading.
+</P><P>
 
-</P>
-<P>
-This manual page pertains to version 1.0 of <CODE>bzip2</CODE>.  Compressed
+This manual page pertains to version 1.0.2 of <CODE>bzip2</CODE>.  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.
-
-</P>
+compatible with the previous public releases, versions 0.1pl2, 0.9.0,
+0.9.5, 1.0.0 and 1.0.1, 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.
+</P><P>
+
+<CODE>bzip2recover</CODE> versions prior to this one, 1.0.2, used 32-bit
+integers to represent bit positions in compressed files, so it could not
+handle compressed files more than 512 megabytes long.  Version 1.0.2 and
+above uses 64-bit ints on some platforms which support them (GNU
+supported targets, and Windows).  To establish whether or not
+<CODE>bzip2recover</CODE> was built with such a limitation, run it without
+arguments.  In any event you can build yourself an unlimited version if
+you can recompile it with <CODE>MaybeUInt64</CODE> set to be an unsigned
+64-bit integer.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC10"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H4> AUTHOR </H4>
+<!--docid::SEC11::-->
+Julian Seward, <CODE>jseward@acm.org</CODE>.
 <P>
-<CODE>bzip2recover</CODE> 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.
-
-</P>
 
+<CODE>http://sources.redhat.com/bzip2</CODE>
+</P><P>
 
-
-<H4><A NAME="SEC11" HREF="manual_toc.html#TOC11">AUTHOR</A></H4>
-<P>
-Julian Seward, <CODE>jseward@acm.org</CODE>.
-
-</P>
-<P>
 The ideas embodied in <CODE>bzip2</CODE> 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
@@ -471,14 +551,29 @@ 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
+worst-case compression performance.  The <CODE>bz*</CODE> scripts are derived
+from those of GNU <CODE>gzip</CODE>.  Many people sent patches, helped with
+portability problems, lent machines, gave advice and were generally
 helpful.
+</P><P>
 
-</P>
 </BLOCKQUOTE>
 
-<P><HR><P>
-<p>Go to the <A HREF="manual_1.html">first</A>, <A HREF="manual_1.html">previous</A>, <A HREF="manual_3.html">next</A>, <A HREF="manual_4.html">last</A> section, <A HREF="manual_toc.html">table of contents</A>.
+<HR SIZE="6">
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
 </BODY>
 </HTML>
index a8fa7e6828fad0255281ca1bdb3c29a0efc3d9dd..841d14d3e8cfd6a35edb9384b655e591def7a00f 100644 (file)
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.54
-     from manual.texi on 23 March 2000 -->
+<TITLE>Untitled Document: 3. Programming with <CODE>libbzip2</CODE></TITLE>
 
-<TITLE>bzip2 and libbzip2 - Programming with libbzip2</TITLE>
-<link href="manual_4.html" rel=Next>
-<link href="manual_2.html" rel=Previous>
-<link href="manual_toc.html" rel=ToC>
+<META NAME="description" CONTENT="Untitled Document: 3. Programming with <CODE>libbzip2</CODE>">
+<META NAME="keywords" CONTENT="Untitled Document: 3. Programming with <CODE>libbzip2</CODE>">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
 
 </HEAD>
-<BODY>
-<p>Go to the <A HREF="manual_1.html">first</A>, <A HREF="manual_2.html">previous</A>, <A HREF="manual_4.html">next</A>, <A HREF="manual_4.html">last</A> section, <A HREF="manual_toc.html">table of contents</A>.
-<P><HR><P>
-
 
-<H1><A NAME="SEC12" HREF="manual_toc.html#TOC12">Programming with <CODE>libbzip2</CODE></A></H1>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_2.html#SEC11"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 3. Programming with <CODE>libbzip2</CODE> </H1>
+<!--docid::SEC12::-->
 <P>
+
 This chapter describes the programming interface to <CODE>libbzip2</CODE>.
+</P><P>
 
-</P>
-<P>
 For general background information, particularly about memory
 use and performance aspects, you'd be well advised to read Chapter 2
 as well.
-
-</P>
-
-
-<H2><A NAME="SEC13" HREF="manual_toc.html#TOC13">Top-level structure</A></H2>
-
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC12"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.1 Top-level structure </H2>
+<!--docid::SEC13::-->
 <P>
+
 <CODE>libbzip2</CODE> is a flexible library for compressing and decompressing
 data in the <CODE>bzip2</CODE> 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.
+</P><P>
 
-</P>
-<P>
 The structure of <CODE>libbzip2</CODE>'s interfaces is similar to
 that of Jean-loup Gailly's and Mark Adler's excellent <CODE>zlib</CODE> 
 library.
+</P><P>
 
-</P>
-<P>
 All externally visible symbols have names beginning <CODE>BZ2_</CODE>.
 This is new in version 1.0.  The intention is to minimise pollution
 of the namespaces of library clients.
-
-</P>
-
-
-<H3><A NAME="SEC14" HREF="manual_toc.html#TOC14">Low-level summary</A></H3>
-
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC13"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.1.1 Low-level summary </H3>
+<!--docid::SEC14::-->
 <P>
+
 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</CODE>, which may be helpful for embedded applications.
+</P><P>
 
-</P>
-<P>
 The low-level part of the library has no global variables and
 is therefore thread-safe.
+</P><P>
 
-</P>
-<P>
 Six routines make up the low level interface: 
 <CODE>BZ2_bzCompressInit</CODE>, <CODE>BZ2_bzCompress</CODE>, and <BR> <CODE>BZ2_bzCompressEnd</CODE>
 for compression,
@@ -77,9 +118,8 @@ The <CODE>*Init</CODE> functions allocate
 memory for compression/decompression and do other
 initialisations, whilst the <CODE>*End</CODE> functions close down operations
 and release memory.
+</P><P>
 
-</P>
-<P>
 The real work is done by <CODE>BZ2_bzCompress</CODE> and <CODE>BZ2_bzDecompress</CODE>.  
 These compress and decompress data from a user-supplied input buffer
 to a user-supplied output buffer.  These buffers can be any size;
@@ -87,52 +127,70 @@ 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.
-
-</P>
-
-
-
-<H3><A NAME="SEC15" HREF="manual_toc.html#TOC15">High-level summary</A></H3>
-
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC14"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.1.2 High-level summary </H3>
+<!--docid::SEC15::-->
 <P>
+
 This interface provides some handy wrappers around the low-level
 interface to facilitate reading and writing <CODE>bzip2</CODE> format
 files (<CODE>.bz2</CODE> files).  The routines provide hooks to facilitate
 reading files in which the <CODE>bzip2</CODE> data stream is embedded 
 within some larger-scale file structure, or where there are
 multiple <CODE>bzip2</CODE> data streams concatenated end-to-end.
+</P><P>
 
-</P>
-<P>
 For reading files, <CODE>BZ2_bzReadOpen</CODE>, <CODE>BZ2_bzRead</CODE>,
 <CODE>BZ2_bzReadClose</CODE> and <BR> <CODE>BZ2_bzReadGetUnused</CODE> are supplied.  For
 writing files, <CODE>BZ2_bzWriteOpen</CODE>, <CODE>BZ2_bzWrite</CODE> and
 <CODE>BZ2_bzWriteFinish</CODE> are available.
+</P><P>
 
-</P>
-<P>
 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</CODE> to determine the cause of
 the error.  In that case, you'd need a C library which correctly
 supports <CODE>errno</CODE> in a multithreaded environment.
+</P><P>
 
-</P>
-<P>
 To make the library a little simpler and more portable,
 <CODE>BZ2_bzReadOpen</CODE> and <CODE>BZ2_bzWriteOpen</CODE> require you to pass them file
 handles (<CODE>FILE*</CODE>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.
-
-</P>
-
-
-
-<H3><A NAME="SEC16" HREF="manual_toc.html#TOC16">Utility functions summary</A></H3>
-<P>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC15"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.1.3 Utility functions summary </H3>
+<!--docid::SEC16::-->
 For very simple needs, <CODE>BZ2_bzBuffToBuffCompress</CODE> and
 <CODE>BZ2_bzBuffToBuffDecompress</CODE> are provided.  These compress
 data in memory from one buffer to another buffer in a single
@@ -140,9 +198,8 @@ 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.
-
-</P>
 <P>
+
 Yoshioka Tsuneo (<CODE>QWF00133@niftyserve.or.jp</CODE> /
 <CODE>tsuneo-y@is.aist-nara.ac.jp</CODE>) has contributed some functions to
 give better <CODE>zlib</CODE> compatibility.  These functions are
@@ -154,19 +211,29 @@ 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.
+</P><P>
 
-</P>
-<P>
 Yoshioka also contributed modifications to allow the library to be
 built as a Windows DLL.
-
-</P>
-
-
-
-<H2><A NAME="SEC17" HREF="manual_toc.html#TOC17">Error handling</A></H2>
-
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC16"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.2 Error handling </H2>
+<!--docid::SEC17::-->
 <P>
+
 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
@@ -174,9 +241,8 @@ 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.
+</P><P>
 
-</P>
-<P>
 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)
@@ -185,15 +251,13 @@ 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.
+</P><P>
 
-</P>
-<P>
 The file <CODE>bzlib.h</CODE> contains all definitions needed to use
 the library.  In particular, you should definitely not include
 <CODE>bzlib_private.h</CODE>.
+</P><P>
 
-</P>
-<P>
 In <CODE>bzlib.h</CODE>, 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
@@ -201,31 +265,23 @@ 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.
 <DL COMPACT>
-
 <DT><CODE>BZ_OK</CODE>
-<DD>
-The requested action was completed successfully.
+<DD>The requested action was completed successfully.
 <DT><CODE>BZ_RUN_OK</CODE>
-<DD>
-<DT><CODE>BZ_FLUSH_OK</CODE>
-<DD>
-<DT><CODE>BZ_FINISH_OK</CODE>
-<DD>
-In <CODE>BZ2_bzCompress</CODE>, the requested flush/finish/nothing-special action
+<DD><DT><CODE>BZ_FLUSH_OK</CODE>
+<DD><DT><CODE>BZ_FINISH_OK</CODE>
+<DD>In <CODE>BZ2_bzCompress</CODE>, the requested flush/finish/nothing-special action
 was completed successfully.
 <DT><CODE>BZ_STREAM_END</CODE>
-<DD>
-Compression of data was completed, or the logical stream end was
+<DD>Compression of data was completed, or the logical stream end was
 detected during decompression.
 </DL>
-
 <P>
+
 The following return values indicate an error of some kind.
 <DL COMPACT>
-
 <DT><CODE>BZ_CONFIG_ERROR</CODE>
-<DD>
-Indicates that the library has been improperly compiled on your
+<DD>Indicates that the library has been improperly compiled on your
 platform -- a major configuration error.  Specifically, it means
 that <CODE>sizeof(char)</CODE>, <CODE>sizeof(short)</CODE> and <CODE>sizeof(int)</CODE>
 are not 1, 2 and 4 respectively, as they should be.  Note that the 
@@ -235,8 +291,7 @@ and <CODE>sizeof(void*)</CODE> are 8.  Under LP64, <CODE>sizeof(int)</CODE> is
 still 4, so <CODE>libbzip2</CODE>, which doesn't use the <CODE>long</CODE> type,
 is OK.
 <DT><CODE>BZ_SEQUENCE_ERROR</CODE>
-<DD>
-When using the library, it is important to call the functions in the
+<DD>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</CODE> checks as much as it can to ensure this is
 happening, and returns <CODE>BZ_SEQUENCE_ERROR</CODE> if not.  Code which
@@ -244,15 +299,13 @@ complies precisely with the function semantics, as detailed below,
 should never receive this value; such an event denotes buggy code
 which you should investigate.
 <DT><CODE>BZ_PARAM_ERROR</CODE>
-<DD>
-Returned when a parameter to a function call is out of range 
+<DD>Returned when a parameter to a function call is out of range 
 or otherwise manifestly incorrect.  As with <CODE>BZ_SEQUENCE_ERROR</CODE>,
 this denotes a bug in the client code.  The distinction between
 <CODE>BZ_PARAM_ERROR</CODE> and <CODE>BZ_SEQUENCE_ERROR</CODE> is a bit hazy, but still worth
 making.
 <DT><CODE>BZ_MEM_ERROR</CODE>
-<DD>
-Returned when a request to allocate memory failed.  Note that the
+<DD>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</CODE> and
 <CODE>BZ2_bzRead</CODE> may return <CODE>BZ_MEM_ERROR</CODE> even though some of
@@ -260,19 +313,16 @@ the compressed data has been read.  The same is not true for
 compression; once <CODE>BZ2_bzCompressInit</CODE> or <CODE>BZ2_bzWriteOpen</CODE> have
 successfully completed, <CODE>BZ_MEM_ERROR</CODE> cannot occur.
 <DT><CODE>BZ_DATA_ERROR</CODE>
-<DD>
-Returned when a data integrity error is detected during decompression.
+<DD>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.
 <DT><CODE>BZ_DATA_ERROR_MAGIC</CODE>
-<DD>
-As a special case of <CODE>BZ_DATA_ERROR</CODE>, it is sometimes useful to
+<DD>As a special case of <CODE>BZ_DATA_ERROR</CODE>, it is sometimes useful to
 know when the compressed stream does not start with the correct
 magic bytes (<CODE>'B' 'Z' 'h'</CODE>).  
 <DT><CODE>BZ_IO_ERROR</CODE>
-<DD>
-Returned by <CODE>BZ2_bzRead</CODE> and <CODE>BZ2_bzWrite</CODE> when there is an error
+<DD>Returned by <CODE>BZ2_bzRead</CODE> and <CODE>BZ2_bzWrite</CODE> when there is an error
 reading or writing in the compressed file, and by <CODE>BZ2_bzReadOpen</CODE>
 and <CODE>BZ2_bzWriteOpen</CODE> for attempts to use a file for which the
 error indicator (viz, <CODE>ferror(f)</CODE>) is set.
@@ -280,26 +330,48 @@ On receipt of <CODE>BZ_IO_ERROR</CODE>, the caller should consult
 <CODE>errno</CODE> and/or <CODE>perror</CODE> to acquire operating-system
 specific information about the problem.
 <DT><CODE>BZ_UNEXPECTED_EOF</CODE>
-<DD>
-Returned by <CODE>BZ2_bzRead</CODE> when the compressed file finishes
+<DD>Returned by <CODE>BZ2_bzRead</CODE> when the compressed file finishes
 before the logical end of stream is detected.
 <DT><CODE>BZ_OUTBUFF_FULL</CODE>
-<DD>
-Returned by <CODE>BZ2_bzBuffToBuffCompress</CODE> and
+<DD>Returned by <CODE>BZ2_bzBuffToBuffCompress</CODE> and
 <CODE>BZ2_bzBuffToBuffDecompress</CODE> to indicate that the output data
 will not fit into the output buffer provided.
 </DL>
+<P>
 
-
-
-<H2><A NAME="SEC18" HREF="manual_toc.html#TOC18">Low-level interface</A></H2>
-
-
-
-<H3><A NAME="SEC19" HREF="manual_toc.html#TOC19"><CODE>BZ2_bzCompressInit</CODE></A></H3>
-
-<PRE>
-typedef 
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC17"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.3 Low-level interface </H2>
+<!--docid::SEC18::-->
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC18"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.3.1 <CODE>BZ2_bzCompressInit</CODE> </H3>
+<!--docid::SEC19::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>typedef 
    struct {
       char *next_in;
       unsigned int avail_in;
@@ -324,9 +396,8 @@ int BZ2_bzCompressInit ( bz_stream *strm,
                          int verbosity,
                          int workFactor );
 
-</PRE>
+</pre></td></tr></table><P>
 
-<P>
 Prepares for compression.  The <CODE>bz_stream</CODE> structure
 holds all data pertaining to the compression activity.  
 A <CODE>bz_stream</CODE> structure should be allocated and initialised
@@ -334,9 +405,8 @@ prior to the call.
 The fields of <CODE>bz_stream</CODE>
 comprise the entirety of the user-visible data.  <CODE>state</CODE>
 is a pointer to the private data structures required for compression.
+</P><P>
 
-</P>
-<P>
 Custom memory allocators are supported, via fields <CODE>bzalloc</CODE>, 
 <CODE>bzfree</CODE>,
 and <CODE>opaque</CODE>.  The value 
@@ -348,17 +418,15 @@ pointer <CODE>p</CODE> to
 <CODE>n * m</CODE> bytes of memory, and <CODE>bzfree ( opaque, p )</CODE> 
 should free
 that memory.
+</P><P>
 
-</P>
-<P>
 If you don't want to use a custom memory allocator, set <CODE>bzalloc</CODE>, 
 <CODE>bzfree</CODE> and
 <CODE>opaque</CODE> to <CODE>NULL</CODE>, 
 and the library will then use the standard <CODE>malloc</CODE>/<CODE>free</CODE>
 routines.
+</P><P>
 
-</P>
-<P>
 Before calling <CODE>BZ2_bzCompressInit</CODE>, fields <CODE>bzalloc</CODE>, 
 <CODE>bzfree</CODE> and <CODE>opaque</CODE> should
 be filled appropriately, as just described.  Upon return, the internal
@@ -372,24 +440,21 @@ As of version 1.0, 64-bit counts are maintained, even on 32-bit
 platforms, using the <CODE>_hi32</CODE> fields to store the upper 32 bits
 of the count.  So, for example, the total amount of data in
 is <CODE>(total_in_hi32 &#60;&#60; 32) + total_in_lo32</CODE>.
+</P><P>
 
-</P>
-<P>
 Parameter <CODE>blockSize100k</CODE> 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.
+</P><P>
 
-</P>
-<P>
 Parameter <CODE>verbosity</CODE> 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</CODE>, no such output will appear for any verbosity
 setting.
+</P><P>
 
-</P>
-<P>
 Parameter <CODE>workFactor</CODE> 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
@@ -397,9 +462,8 @@ 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.
+</P><P>
 
-</P>
-<P>
 Lower values of <CODE>workFactor</CODE> 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
@@ -407,30 +471,24 @@ 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.
+</P><P>
 
-</P>
-<P>
 Allowable values range from 0 to 250 inclusive.  0 is a special case,
 equivalent to using the default value of 30.
+</P><P>
 
-</P>
-<P>
 Note that the compressed output generated is the same regardless of
 whether or not the fallback algorithm is used.
+</P><P>
 
-</P>
-<P>
 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.
+</P><P>
 
-</P>
-<P>
 Possible return values:
-
-<PRE>
-      <CODE>BZ_CONFIG_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_CONFIG_ERROR</CODE>
          if the library has been mis-compiled
       <CODE>BZ_PARAM_ERROR</CODE> 
          if <CODE>strm</CODE> is <CODE>NULL</CODE> 
@@ -441,75 +499,70 @@ Possible return values:
          if not enough memory is available
       <CODE>BZ_OK</CODE> 
          otherwise
-</PRE>
-
-<P>
-Allowable next actions:
-
-<PRE>
-      <CODE>BZ2_bzCompress</CODE> 
+</pre></td></tr></table>Allowable next actions:
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ2_bzCompress</CODE> 
          if <CODE>BZ_OK</CODE> is returned
       no specific action needed in case of error
-</PRE>
-
-
-
-<H3><A NAME="SEC20" HREF="manual_toc.html#TOC20"><CODE>BZ2_bzCompress</CODE></A></H3>
-
-<PRE>
-   int BZ2_bzCompress ( bz_stream *strm, int action );
-</PRE>
-
-<P>
-Provides more input and/or output buffer space for the library.  The
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC19"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC21"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.3.2 <CODE>BZ2_bzCompress</CODE> </H3>
+<!--docid::SEC20::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   int BZ2_bzCompress ( bz_stream *strm, int action );
+</pre></td></tr></table>Provides more input and/or output buffer space for the library.  The
 caller maintains input and output buffers, and calls <CODE>BZ2_bzCompress</CODE> to
 transfer data between them.
-
-</P>
 <P>
+
 Before each call to <CODE>BZ2_bzCompress</CODE>, <CODE>next_in</CODE> should point at
 the data to be compressed, and <CODE>avail_in</CODE> should indicate how many
 bytes the library may read.  <CODE>BZ2_bzCompress</CODE> updates <CODE>next_in</CODE>,
 <CODE>avail_in</CODE> and <CODE>total_in</CODE> to reflect the number of bytes it
 has read.
+</P><P>
 
-</P>
-<P>
 Similarly, <CODE>next_out</CODE> should point to a buffer in which the
 compressed data is to be placed, with <CODE>avail_out</CODE> indicating how
 much output space is available.  <CODE>BZ2_bzCompress</CODE> updates
 <CODE>next_out</CODE>, <CODE>avail_out</CODE> and <CODE>total_out</CODE> to reflect the
 number of bytes output.
+</P><P>
 
-</P>
-<P>
 You may provide and remove as little or as much data as you like on each
 call of <CODE>BZ2_bzCompress</CODE>.  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.
+</P><P>
 
-</P>
-<P>
 A second purpose of <CODE>BZ2_bzCompress</CODE> is to request a change of mode of the
 compressed stream.  
+</P><P>
 
-</P>
-<P>
 Conceptually, a compressed stream can be in one of four states: IDLE,
 RUNNING, FLUSHING and FINISHING.  Before initialisation
 (<CODE>BZ2_bzCompressInit</CODE>) and after termination (<CODE>BZ2_bzCompressEnd</CODE>), a
 stream is regarded as IDLE.
+</P><P>
 
-</P>
-<P>
 Upon initialisation (<CODE>BZ2_bzCompressInit</CODE>), the stream is placed in the
 RUNNING state.  Subsequent calls to <CODE>BZ2_bzCompress</CODE> should pass
 <CODE>BZ_RUN</CODE> as the requested action; other actions are illegal and
 will result in <CODE>BZ_SEQUENCE_ERROR</CODE>.
+</P><P>
 
-</P>
-<P>
 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
@@ -518,9 +571,8 @@ state, <CODE>BZ2_bzCompress</CODE> will no longer attempt to read data from
 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</CODE>.
+</P><P>
 
-</P>
-<P>
 Instead, the calling program passes <CODE>BZ_FINISH</CODE> as an action to
 <CODE>BZ2_bzCompress</CODE>.  This changes the stream's state to FINISHING.  Any
 remaining input (ie, <CODE>next_in[0 .. avail_in-1]</CODE>) is compressed and
@@ -529,9 +581,8 @@ called repeatedly until all the output has been consumed.  At that
 point, <CODE>BZ2_bzCompress</CODE> returns <CODE>BZ_STREAM_END</CODE>, and the stream's
 state is set back to IDLE.  <CODE>BZ2_bzCompressEnd</CODE> should then be
 called.
+</P><P>
 
-</P>
-<P>
 Just to make sure the calling program does not cheat, the library makes
 a note of <CODE>avail_in</CODE> at the time of the first call to
 <CODE>BZ2_bzCompress</CODE> which has <CODE>BZ_FINISH</CODE> as an action (ie, at the
@@ -541,9 +592,8 @@ subsequent calls to <CODE>BZ2_bzCompress</CODE>, 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</CODE>.  This indicates a
 programming mistake which should be corrected.
+</P><P>
 
-</P>
-<P>
 Instead of asking to finish, the calling program may ask
 <CODE>BZ2_bzCompress</CODE> to take all the remaining input, compress it and
 terminate the current (Burrows-Wheeler) compression block.  This could
@@ -553,23 +603,19 @@ that for finishing: call <CODE>BZ2_bzCompress</CODE> with an action of
 <CODE>BZ_FLUSH</CODE> action until the value <CODE>BZ_RUN</CODE> is returned.  As
 with finishing, <CODE>BZ2_bzCompress</CODE> detects any attempt to provide more
 input data once the flush has begun.
+</P><P>
 
-</P>
-<P>
 Once the flush is complete, the stream returns to the normal RUNNING
 state.
+</P><P>
 
-</P>
-<P>
 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</CODE>.
-
-<PRE>
-IDLE/<CODE>any</CODE>           
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">IDLE/<CODE>any</CODE>           
       Illegal.  IDLE state only exists after <CODE>BZ2_bzCompressEnd</CODE> or
       before <CODE>BZ2_bzCompressInit</CODE>.
       Return value = <CODE>BZ_SEQUENCE_ERROR</CODE>
@@ -616,176 +662,167 @@ FINISHING/<CODE>BZ_FINISH</CODE>
 FINISHING/other
       Illegal.
       Return value = <CODE>BZ_SEQUENCE_ERROR</CODE>
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 That still looks complicated?  Well, fair enough.  The usual sequence
 of calls for compressing a load of data is:
-
 <UL>
 <LI>Get started with <CODE>BZ2_bzCompressInit</CODE>.
-
 <LI>Shovel data in and shlurp out its compressed form using zero or more
-
 calls of <CODE>BZ2_bzCompress</CODE> with action = <CODE>BZ_RUN</CODE>.
 <LI>Finish up.
-
 Repeatedly call <CODE>BZ2_bzCompress</CODE> with action = <CODE>BZ_FINISH</CODE>, 
 copying out the compressed output, until <CODE>BZ_STREAM_END</CODE> is returned.
 <LI>Close up and go home.  Call <CODE>BZ2_bzCompressEnd</CODE>.
-
 </UL>
-
-<P>
 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 )</CODE> and 
 just do the <CODE>BZ2_bzCompress ( ..., BZ_FINISH )</CODE> calls.
-
-</P>
 <P>
+
 All required memory is allocated by <CODE>BZ2_bzCompressInit</CODE>.  The
 compression library can accept any data at all (obviously).  So you
 shouldn't get any error return values from the <CODE>BZ2_bzCompress</CODE> calls.
 If you do, they will be <CODE>BZ_SEQUENCE_ERROR</CODE>, and indicate a bug in
 your programming.
+</P><P>
 
-</P>
-<P>
 Trivial other possible return values:
-
-<PRE>
-      <CODE>BZ_PARAM_ERROR</CODE>   
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_PARAM_ERROR</CODE>   
          if <CODE>strm</CODE> is <CODE>NULL</CODE>, or <CODE>strm-&#62;s</CODE> is <CODE>NULL</CODE>
-</PRE>
-
-
-
-<H3><A NAME="SEC21" HREF="manual_toc.html#TOC21"><CODE>BZ2_bzCompressEnd</CODE></A></H3>
-
-<PRE>
-int BZ2_bzCompressEnd ( bz_stream *strm );
-</PRE>
-
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC20"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC22"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.3.3 <CODE>BZ2_bzCompressEnd</CODE> </H3>
+<!--docid::SEC21::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>int BZ2_bzCompressEnd ( bz_stream *strm );
+</pre></td></tr></table>Releases all memory associated with a compression stream.
 <P>
-Releases all memory associated with a compression stream.
 
-</P>
-<P>
 Possible return values:
-
-<PRE>
-   <CODE>BZ_PARAM_ERROR</CODE>    if <CODE>strm</CODE> is <CODE>NULL</CODE> or <CODE>strm-&#62;s</CODE> is <CODE>NULL</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">   <CODE>BZ_PARAM_ERROR</CODE>    if <CODE>strm</CODE> is <CODE>NULL</CODE> or <CODE>strm-&#62;s</CODE> is <CODE>NULL</CODE>
    <CODE>BZ_OK</CODE>    otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC22" HREF="manual_toc.html#TOC22"><CODE>BZ2_bzDecompressInit</CODE></A></H3>
-
-<PRE>
-int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );
-</PRE>
-
-<P>
-Prepares for decompression.  As with <CODE>BZ2_bzCompressInit</CODE>, a
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC21"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC23"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.3.4 <CODE>BZ2_bzDecompressInit</CODE> </H3>
+<!--docid::SEC22::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );
+</pre></td></tr></table>Prepares for decompression.  As with <CODE>BZ2_bzCompressInit</CODE>, a
 <CODE>bz_stream</CODE> record should be allocated and initialised before the
 call.  Fields <CODE>bzalloc</CODE>, <CODE>bzfree</CODE> and <CODE>opaque</CODE> should be
 set if a custom memory allocator is required, or made <CODE>NULL</CODE> for
 the normal <CODE>malloc</CODE>/<CODE>free</CODE> routines.  Upon return, the internal
 state will have been initialised, and <CODE>total_in</CODE> and
 <CODE>total_out</CODE> will be zero.
-
-</P>
 <P>
+
 For the meaning of parameter <CODE>verbosity</CODE>, see <CODE>BZ2_bzCompressInit</CODE>.
+</P><P>
 
-</P>
-<P>
 If <CODE>small</CODE> 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.
+</P><P>
 
-</P>
-<P>
 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</CODE> succeeds, a subsequent
 <CODE>BZ2_bzDecompress</CODE> could fail with <CODE>BZ_MEM_ERROR</CODE>.
+</P><P>
 
-</P>
-<P>
 Possible return values:
-
-<PRE>
-      <CODE>BZ_CONFIG_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_CONFIG_ERROR</CODE>
          if the library has been mis-compiled
       <CODE>BZ_PARAM_ERROR</CODE>
          if <CODE>(small != 0 &#38;&#38; small != 1)</CODE>
          or <CODE>(verbosity &#60; 0 || verbosity &#62; 4)</CODE>
       <CODE>BZ_MEM_ERROR</CODE>
          if insufficient memory is available
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Allowable next actions:
-
-<PRE>
-      <CODE>BZ2_bzDecompress</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ2_bzDecompress</CODE>
          if <CODE>BZ_OK</CODE> was returned
       no specific action required in case of error
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
  
-
-</P>
-
-
-<H3><A NAME="SEC23" HREF="manual_toc.html#TOC23"><CODE>BZ2_bzDecompress</CODE></A></H3>
-
-<PRE>
-int BZ2_bzDecompress ( bz_stream *strm );
-</PRE>
-
-<P>
-Provides more input and/out output buffer space for the library.  The
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC23"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC22"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC24"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.3.5 <CODE>BZ2_bzDecompress</CODE> </H3>
+<!--docid::SEC23::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>int BZ2_bzDecompress ( bz_stream *strm );
+</pre></td></tr></table>Provides more input and/out output buffer space for the library.  The
 caller maintains input and output buffers, and uses <CODE>BZ2_bzDecompress</CODE>
 to transfer data between them.
-
-</P>
 <P>
+
 Before each call to <CODE>BZ2_bzDecompress</CODE>, <CODE>next_in</CODE> 
 should point at the compressed data,
 and <CODE>avail_in</CODE> should indicate how many bytes the library
 may read.  <CODE>BZ2_bzDecompress</CODE> updates <CODE>next_in</CODE>, <CODE>avail_in</CODE> 
 and <CODE>total_in</CODE>
 to reflect the number of bytes it has read.
+</P><P>
 
-</P>
-<P>
 Similarly, <CODE>next_out</CODE> should point to a buffer in which the uncompressed
 output is to be placed, with <CODE>avail_out</CODE> indicating how much output space
 is available.  <CODE>BZ2_bzCompress</CODE> updates <CODE>next_out</CODE>,
 <CODE>avail_out</CODE> and <CODE>total_out</CODE> to reflect
 the number of bytes output.
+</P><P>
 
-</P>
-<P>
 You may provide and remove as little or as much data as you like on
 each call of <CODE>BZ2_bzDecompress</CODE>.  
 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.
+</P><P>
 
-</P>
-<P>
 Use of <CODE>BZ2_bzDecompress</CODE> is simpler than <CODE>BZ2_bzCompress</CODE>.
+</P><P>
 
-</P>
-<P>
 You should provide input and remove output as described above, and
 repeatedly call <CODE>BZ2_bzDecompress</CODE> until <CODE>BZ_STREAM_END</CODE> is
 returned.  Appearance of <CODE>BZ_STREAM_END</CODE> denotes that
@@ -795,18 +832,14 @@ all output data has been placed into the output buffer, so once
 <CODE>BZ_STREAM_END</CODE> appears, you are guaranteed to have available all
 the decompressed output, and <CODE>BZ2_bzDecompressEnd</CODE> can safely be
 called.
+</P><P>
 
-</P>
-<P>
 If case of an error return value, you should call <CODE>BZ2_bzDecompressEnd</CODE>
 to clean up and release memory.
+</P><P>
 
-</P>
-<P>
 Possible return values:
-
-<PRE>
-      <CODE>BZ_PARAM_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_PARAM_ERROR</CODE>
          if <CODE>strm</CODE> is <CODE>NULL</CODE> or <CODE>strm-&#62;s</CODE> is <CODE>NULL</CODE>
          or <CODE>strm-&#62;avail_out &#60; 1</CODE>
       <CODE>BZ_DATA_ERROR</CODE>
@@ -820,60 +853,66 @@ Possible return values:
          output in has been consumed, eg <CODE>s-&#62;avail_out &#62; 0</CODE>
       <CODE>BZ_OK</CODE>
          otherwise
-</PRE>
-
-<P>
-Allowable next actions:
-
-<PRE>
-      <CODE>BZ2_bzDecompress</CODE>
+</pre></td></tr></table>Allowable next actions:
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ2_bzDecompress</CODE>
          if <CODE>BZ_OK</CODE> was returned
       <CODE>BZ2_bzDecompressEnd</CODE>
          otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC24" HREF="manual_toc.html#TOC24"><CODE>BZ2_bzDecompressEnd</CODE></A></H3>
-
-<PRE>
-int BZ2_bzDecompressEnd ( bz_stream *strm );
-</PRE>
-
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC24"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC23"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC25"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.3.6 <CODE>BZ2_bzDecompressEnd</CODE> </H3>
+<!--docid::SEC24::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>int BZ2_bzDecompressEnd ( bz_stream *strm );
+</pre></td></tr></table>Releases all memory associated with a decompression stream.
 <P>
-Releases all memory associated with a decompression stream.
 
-</P>
-<P>
 Possible return values:
-
-<PRE>
-      <CODE>BZ_PARAM_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_PARAM_ERROR</CODE>
          if <CODE>strm</CODE> is <CODE>NULL</CODE> or <CODE>strm-&#62;s</CODE> is <CODE>NULL</CODE>
       <CODE>BZ_OK</CODE>
          otherwise
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Allowable next actions:
-
-<PRE>
-      None.
-</PRE>
-
-
-
-<H2><A NAME="SEC25" HREF="manual_toc.html#TOC25">High-level interface</A></H2>
-
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      None.
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC25"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC24"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC26"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.4 High-level interface </H2>
+<!--docid::SEC25::-->
 <P>
+
 This interface provides functions for reading and writing 
 <CODE>bzip2</CODE> format files.  First, some general points.
-
-</P>
+</P><P>
 
 <UL>
 <LI>All of the functions take an <CODE>int*</CODE> first argument,
-
   <CODE>bzerror</CODE>.
   After each call, <CODE>bzerror</CODE> should be consulted first to determine
   the outcome of the call.  If <CODE>bzerror</CODE> is <CODE>BZ_OK</CODE>, 
@@ -887,7 +926,6 @@ This interface provides functions for reading and writing
   <CODE>bzerror</CODE> may also be set to various other values; precise details are
   given on a per-function basis below.
 <LI>If <CODE>bzerror</CODE> indicates an error
-
   (ie, anything except <CODE>BZ_OK</CODE> and <CODE>BZ_STREAM_END</CODE>),
   you should immediately call <CODE>BZ2_bzReadClose</CODE> (or <CODE>BZ2_bzWriteClose</CODE>,
   depending on whether you are attempting to read or to write)
@@ -898,66 +936,66 @@ This interface provides functions for reading and writing
   be checked after each call, and (2) if <CODE>bzerror</CODE> indicates an error, 
   <CODE>BZ2_bzReadClose</CODE> (<CODE>BZ2_bzWriteClose</CODE>) should then be called to clean up.
 <LI>The <CODE>FILE*</CODE> arguments passed to
-
    <CODE>BZ2_bzReadOpen</CODE>/<CODE>BZ2_bzWriteOpen</CODE>  
   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.
 <LI>Memory allocation requests are handled by
-
   <CODE>malloc</CODE>/<CODE>free</CODE>.  
   At present
   there is no facility for user-defined memory allocators in the file I/O
   functions (could easily be added, though).
 </UL>
+<P>
 
-
-
-<H3><A NAME="SEC26" HREF="manual_toc.html#TOC26"><CODE>BZ2_bzReadOpen</CODE></A></H3>
-
-<PRE>
-   typedef void BZFILE;
+<HR SIZE="6">
+<A NAME="SEC26"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC25"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC27"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.1 <CODE>BZ2_bzReadOpen</CODE> </H3>
+<!--docid::SEC26::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   typedef void BZFILE;
 
    BZFILE *BZ2_bzReadOpen ( int *bzerror, FILE *f, 
                             int small, int verbosity,
                             void *unused, int nUnused );
-</PRE>
-
-<P>
-Prepare to read compressed data from file handle <CODE>f</CODE>.  <CODE>f</CODE>
+</pre></td></tr></table>Prepare to read compressed data from file handle <CODE>f</CODE>.  <CODE>f</CODE>
 should refer to a file which has been opened for reading, and for which
 the error indicator (<CODE>ferror(f)</CODE>)is not set.  If <CODE>small</CODE> is 1,
 the library will try to decompress using less memory, at the expense of
 speed.
-
-</P>
 <P>
+
 For reasons explained below, <CODE>BZ2_bzRead</CODE> will decompress the
 <CODE>nUnused</CODE> bytes starting at <CODE>unused</CODE>, before starting to read
 from the file <CODE>f</CODE>.  At most <CODE>BZ_MAX_UNUSED</CODE> bytes may be
 supplied like this.  If this facility is not required, you should pass
 <CODE>NULL</CODE> and <CODE>0</CODE> for <CODE>unused</CODE> and n<CODE>Unused</CODE>
 respectively.
+</P><P>
 
-</P>
-<P>
 For the meaning of parameters <CODE>small</CODE> and <CODE>verbosity</CODE>,
 see <CODE>BZ2_bzDecompressInit</CODE>.
+</P><P>
 
-</P>
-<P>
 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</CODE> returns <CODE>BZ_OK</CODE> but a subsequent call of
 <CODE>BZ2_bzRead</CODE> will return <CODE>BZ_MEM_ERROR</CODE>.
+</P><P>
 
-</P>
-<P>
 Possible assignments to <CODE>bzerror</CODE>:
-
-<PRE>
-      <CODE>BZ_CONFIG_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_CONFIG_ERROR</CODE>
          if the library has been mis-compiled
       <CODE>BZ_PARAM_ERROR</CODE>
          if <CODE>f</CODE> is <CODE>NULL</CODE> 
@@ -970,38 +1008,39 @@ Possible assignments to <CODE>bzerror</CODE>:
          if insufficient memory is available
       <CODE>BZ_OK</CODE>
          otherwise.
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Possible return values:
-
-<PRE>
-      Pointer to an abstract <CODE>BZFILE</CODE>        
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      Pointer to an abstract <CODE>BZFILE</CODE>        
          if <CODE>bzerror</CODE> is <CODE>BZ_OK</CODE>   
       <CODE>NULL</CODE>
          otherwise
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Allowable next actions:
-
-<PRE>
-      <CODE>BZ2_bzRead</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ2_bzRead</CODE>
          if <CODE>bzerror</CODE> is <CODE>BZ_OK</CODE>   
       <CODE>BZ2_bzClose</CODE> 
          otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC27" HREF="manual_toc.html#TOC27"><CODE>BZ2_bzRead</CODE></A></H3>
-
-<PRE>
-   int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );
-</PRE>
-
-<P>
-Reads up to <CODE>len</CODE> (uncompressed) bytes from the compressed file 
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC27"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC26"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC28"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.2 <CODE>BZ2_bzRead</CODE> </H3>
+<!--docid::SEC27::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );
+</pre></td></tr></table>Reads up to <CODE>len</CODE> (uncompressed) bytes from the compressed file 
 <CODE>b</CODE> into
 the buffer <CODE>buf</CODE>.  If the read was successful, 
 <CODE>bzerror</CODE> is set to <CODE>BZ_OK</CODE>
@@ -1009,9 +1048,8 @@ and the number of bytes read is returned.  If the logical end-of-stream
 was detected, <CODE>bzerror</CODE> will be set to <CODE>BZ_STREAM_END</CODE>, 
 and the number
 of bytes read is returned.  All other <CODE>bzerror</CODE> values denote an error.
-
-</P>
 <P>
+
 <CODE>BZ2_bzRead</CODE> will supply <CODE>len</CODE> bytes,
 unless the logical stream end is detected
 or an error occurs.  Because of this, it is possible to detect the 
@@ -1020,9 +1058,8 @@ less than the number
 requested.  Nevertheless, this is regarded as inadvisable; you should
 instead check <CODE>bzerror</CODE> after every call and watch out for
 <CODE>BZ_STREAM_END</CODE>.
+</P><P>
 
-</P>
-<P>
 Internally, <CODE>BZ2_bzRead</CODE> copies data from the compressed file in chunks
 of size <CODE>BZ_MAX_UNUSED</CODE> bytes
 before decompressing it.  If the file contains more bytes than strictly
@@ -1030,13 +1067,10 @@ needed to reach the logical end-of-stream, <CODE>BZ2_bzRead</CODE> will almost c
 read some of the trailing data before signalling <CODE>BZ_SEQUENCE_END</CODE>.
 To collect the read but unused data once <CODE>BZ_SEQUENCE_END</CODE> has 
 appeared, call <CODE>BZ2_bzReadGetUnused</CODE> immediately before <CODE>BZ2_bzReadClose</CODE>.
+</P><P>
 
-</P>
-<P>
 Possible assignments to <CODE>bzerror</CODE>:
-
-<PRE>
-      <CODE>BZ_PARAM_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_PARAM_ERROR</CODE>
          if <CODE>b</CODE> is <CODE>NULL</CODE> or <CODE>buf</CODE> is <CODE>NULL</CODE> or <CODE>len &#60; 0</CODE>
       <CODE>BZ_SEQUENCE_ERROR</CODE> 
          if <CODE>b</CODE> was opened with <CODE>BZ2_bzWriteOpen</CODE>
@@ -1055,56 +1089,53 @@ Possible assignments to <CODE>bzerror</CODE>:
          if the logical end of stream was detected.
       <CODE>BZ_OK</CODE>
          otherwise.
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Possible return values:
-
-<PRE>
-      number of bytes read
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      number of bytes read
          if <CODE>bzerror</CODE> is <CODE>BZ_OK</CODE> or <CODE>BZ_STREAM_END</CODE>
       undefined
          otherwise
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Allowable next actions:
-
-<PRE>
-      collect data from <CODE>buf</CODE>, then <CODE>BZ2_bzRead</CODE> or <CODE>BZ2_bzReadClose</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      collect data from <CODE>buf</CODE>, then <CODE>BZ2_bzRead</CODE> or <CODE>BZ2_bzReadClose</CODE>
          if <CODE>bzerror</CODE> is <CODE>BZ_OK</CODE> 
       collect data from <CODE>buf</CODE>, then <CODE>BZ2_bzReadClose</CODE> or <CODE>BZ2_bzReadGetUnused</CODE> 
          if <CODE>bzerror</CODE> is <CODE>BZ_SEQUENCE_END</CODE>   
       <CODE>BZ2_bzReadClose</CODE> 
          otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC28" HREF="manual_toc.html#TOC28"><CODE>BZ2_bzReadGetUnused</CODE></A></H3>
-
-<PRE>
-   void BZ2_bzReadGetUnused ( int* bzerror, BZFILE *b, 
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC28"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC27"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC29"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.3 <CODE>BZ2_bzReadGetUnused</CODE> </H3>
+<!--docid::SEC28::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   void BZ2_bzReadGetUnused ( int* bzerror, BZFILE *b, 
                               void** unused, int* nUnused );
-</PRE>
-
-<P>
-Returns data which was read from the compressed file but was not needed
+</pre></td></tr></table>Returns data which was read from the compressed file but was not needed
 to get to the logical end-of-stream.  <CODE>*unused</CODE> is set to the address
 of the data, and <CODE>*nUnused</CODE> to the number of bytes.  <CODE>*nUnused</CODE> will
 be set to a value between <CODE>0</CODE> and <CODE>BZ_MAX_UNUSED</CODE> inclusive.
-
-</P>
 <P>
+
 This function may only be called once <CODE>BZ2_bzRead</CODE> has signalled 
 <CODE>BZ_STREAM_END</CODE> but before <CODE>BZ2_bzReadClose</CODE>.
+</P><P>
 
-</P>
-<P>
 Possible assignments to <CODE>bzerror</CODE>:
-
-<PRE>
-      <CODE>BZ_PARAM_ERROR</CODE> 
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_PARAM_ERROR</CODE> 
          if <CODE>b</CODE> is <CODE>NULL</CODE> 
          or <CODE>unused</CODE> is <CODE>NULL</CODE> or <CODE>nUnused</CODE> is <CODE>NULL</CODE>
       <CODE>BZ_SEQUENCE_ERROR</CODE> 
@@ -1112,82 +1143,82 @@ Possible assignments to <CODE>bzerror</CODE>:
          or if <CODE>b</CODE> was opened with <CODE>BZ2_bzWriteOpen</CODE>
      <CODE>BZ_OK</CODE>
          otherwise
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Allowable next actions:
-
-<PRE>
-      <CODE>BZ2_bzReadClose</CODE>
-</PRE>
-
-
-
-<H3><A NAME="SEC29" HREF="manual_toc.html#TOC29"><CODE>BZ2_bzReadClose</CODE></A></H3>
-
-<PRE>
-   void BZ2_bzReadClose ( int *bzerror, BZFILE *b );
-</PRE>
-
-<P>
-Releases all memory pertaining to the compressed file <CODE>b</CODE>.  
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ2_bzReadClose</CODE>
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC29"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC28"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC30"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.4 <CODE>BZ2_bzReadClose</CODE> </H3>
+<!--docid::SEC29::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   void BZ2_bzReadClose ( int *bzerror, BZFILE *b );
+</pre></td></tr></table>Releases all memory pertaining to the compressed file <CODE>b</CODE>.  
 <CODE>BZ2_bzReadClose</CODE> does not call <CODE>fclose</CODE> on the underlying file
 handle, so you should do that yourself if appropriate.
 <CODE>BZ2_bzReadClose</CODE> should be called to clean up after all error
 situations.
-
-</P>
 <P>
-Possible assignments to <CODE>bzerror</CODE>:
 
-<PRE>
-      <CODE>BZ_SEQUENCE_ERROR</CODE> 
+Possible assignments to <CODE>bzerror</CODE>:
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_SEQUENCE_ERROR</CODE> 
          if <CODE>b</CODE> was opened with <CODE>BZ2_bzOpenWrite</CODE> 
       <CODE>BZ_OK</CODE> 
          otherwise
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Allowable next actions:
-
-<PRE>
-      none
-</PRE>
-
-
-
-<H3><A NAME="SEC30" HREF="manual_toc.html#TOC30"><CODE>BZ2_bzWriteOpen</CODE></A></H3>
-
-<PRE>
-   BZFILE *BZ2_bzWriteOpen ( int *bzerror, FILE *f, 
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      none
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC30"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC29"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC31"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.5 <CODE>BZ2_bzWriteOpen</CODE> </H3>
+<!--docid::SEC30::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   BZFILE *BZ2_bzWriteOpen ( int *bzerror, FILE *f, 
                              int blockSize100k, int verbosity,
                              int workFactor );
-</PRE>
-
-<P>
-Prepare to write compressed data to file handle <CODE>f</CODE>.  
+</pre></td></tr></table>Prepare to write compressed data to file handle <CODE>f</CODE>.  
 <CODE>f</CODE> should refer to
 a file which has been opened for writing, and for which the error
 indicator (<CODE>ferror(f)</CODE>)is not set.  
-
-</P>
 <P>
+
 For the meaning of parameters <CODE>blockSize100k</CODE>,
 <CODE>verbosity</CODE> and <CODE>workFactor</CODE>, see
 <BR> <CODE>BZ2_bzCompressInit</CODE>.
+</P><P>
 
-</P>
-<P>
 All required memory is allocated at this stage, so if the call
 completes successfully, <CODE>BZ_MEM_ERROR</CODE> cannot be signalled by a
 subsequent call to <CODE>BZ2_bzWrite</CODE>.
+</P><P>
 
-</P>
-<P>
 Possible assignments to <CODE>bzerror</CODE>:
-
-<PRE>
-      <CODE>BZ_CONFIG_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_CONFIG_ERROR</CODE>
          if the library has been mis-compiled
       <CODE>BZ_PARAM_ERROR</CODE> 
          if <CODE>f</CODE> is <CODE>NULL</CODE> 
@@ -1198,47 +1229,45 @@ Possible assignments to <CODE>bzerror</CODE>:
          if insufficient memory is available
       <CODE>BZ_OK</CODE> 
          otherwise
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Possible return values:
-
-<PRE>
-      Pointer to an abstract <CODE>BZFILE</CODE>  
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      Pointer to an abstract <CODE>BZFILE</CODE>  
          if <CODE>bzerror</CODE> is <CODE>BZ_OK</CODE>   
       <CODE>NULL</CODE> 
          otherwise
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 Allowable next actions:
-
-<PRE>
-      <CODE>BZ2_bzWrite</CODE> 
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ2_bzWrite</CODE> 
          if <CODE>bzerror</CODE> is <CODE>BZ_OK</CODE> 
          (you could go directly to <CODE>BZ2_bzWriteClose</CODE>, but this would be pretty pointless)
       <CODE>BZ2_bzWriteClose</CODE> 
          otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC31" HREF="manual_toc.html#TOC31"><CODE>BZ2_bzWrite</CODE></A></H3>
-
-<PRE>
-   void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );
-</PRE>
-
-<P>
-Absorbs <CODE>len</CODE> bytes from the buffer <CODE>buf</CODE>, eventually to be
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC31"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC30"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC32"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.6 <CODE>BZ2_bzWrite</CODE> </H3>
+<!--docid::SEC31::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );
+</pre></td></tr></table>Absorbs <CODE>len</CODE> bytes from the buffer <CODE>buf</CODE>, eventually to be
 compressed and written to the file.
-
-</P>
 <P>
-Possible assignments to <CODE>bzerror</CODE>:
 
-<PRE>
-      <CODE>BZ_PARAM_ERROR</CODE> 
+Possible assignments to <CODE>bzerror</CODE>:
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_PARAM_ERROR</CODE> 
          if <CODE>b</CODE> is <CODE>NULL</CODE> or <CODE>buf</CODE> is <CODE>NULL</CODE> or <CODE>len &#60; 0</CODE>
       <CODE>BZ_SEQUENCE_ERROR</CODE> 
          if b was opened with <CODE>BZ2_bzReadOpen</CODE>
@@ -1246,14 +1275,24 @@ Possible assignments to <CODE>bzerror</CODE>:
          if there is an error writing the compressed file.
       <CODE>BZ_OK</CODE> 
          otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC32" HREF="manual_toc.html#TOC32"><CODE>BZ2_bzWriteClose</CODE></A></H3>
-
-<PRE>
-   void BZ2_bzWriteClose ( int *bzerror, BZFILE* f,
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC32"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC31"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC33"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.7 <CODE>BZ2_bzWriteClose</CODE> </H3>
+<!--docid::SEC32::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   void BZ2_bzWriteClose ( int *bzerror, BZFILE* f,
                            int abandon,
                            unsigned int* nbytes_in,
                            unsigned int* nbytes_out );
@@ -1264,18 +1303,16 @@ Possible assignments to <CODE>bzerror</CODE>:
                              unsigned int* nbytes_in_hi32,
                              unsigned int* nbytes_out_lo32,
                              unsigned int* nbytes_out_hi32 );
-</PRE>
+</pre></td></tr></table><P>
 
-<P>
 Compresses and flushes to the compressed file all data so far supplied
 by <CODE>BZ2_bzWrite</CODE>.  The logical end-of-stream markers are also written, so
 subsequent calls to <CODE>BZ2_bzWrite</CODE> are illegal.  All memory associated 
 with the compressed file <CODE>b</CODE> is released.  
 <CODE>fflush</CODE> is called on the
 compressed file, but it is not <CODE>fclose</CODE>'d.
+</P><P>
 
-</P>
-<P>
 If <CODE>BZ2_bzWriteClose</CODE> 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
@@ -1283,9 +1320,8 @@ automatically.  There is no attempt to complete the compression
 operation, nor to <CODE>fflush</CODE> 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</CODE>.
+</P><P>
 
-</P>
-<P>
 If <CODE>nbytes_in</CODE> is non-null, <CODE>*nbytes_in</CODE> will be set to be the
 total volume of uncompressed data handled.  Similarly, <CODE>nbytes_out</CODE>
 will be set to the total volume of compressed data written.  For 
@@ -1293,38 +1329,43 @@ compatibility with older versions of the library, <CODE>BZ2_bzWriteClose</CODE>
 only yields the lower 32 bits of these counts.  Use
 <CODE>BZ2_bzWriteClose64</CODE> if you want the full 64 bit counts.  These
 two functions are otherwise absolutely identical.
+</P><P>
 
-</P>
-
-<P>
 Possible assignments to <CODE>bzerror</CODE>:
-
-<PRE>
-      <CODE>BZ_SEQUENCE_ERROR</CODE> 
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_SEQUENCE_ERROR</CODE> 
          if <CODE>b</CODE> was opened with <CODE>BZ2_bzReadOpen</CODE>
       <CODE>BZ_IO_ERROR</CODE> 
          if there is an error writing the compressed file
       <CODE>BZ_OK</CODE> 
          otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC33" HREF="manual_toc.html#TOC33">Handling embedded compressed data streams</A></H3>
-
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC33"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC32"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC34"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.8 Handling embedded compressed data streams </H3>
+<!--docid::SEC33::-->
 <P>
+
 The high-level library facilitates use of
 <CODE>bzip2</CODE> data streams which form some part of a surrounding, larger
 data stream.
-
 <UL>
 <LI>For writing, the library takes an open file handle, writes
-
 compressed data to it, <CODE>fflush</CODE>es it but does not <CODE>fclose</CODE> it.
 The calling application can write its own data before and after the
 compressed data stream, using that same file handle.
 <LI>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</CODE> reads from the compressed file in blocks of size
 <CODE>BZ_MAX_UNUSED</CODE> bytes, and in doing so probably will overshoot
@@ -1334,8 +1375,8 @@ ended, call <CODE>BZ2_bzReadGetUnused</CODE> after the last call of <CODE>BZ2_bz
 (the one returning <CODE>BZ_STREAM_END</CODE>) but before calling
 <CODE>BZ2_bzReadClose</CODE>.
 </UL>
-
 <P>
+
 This mechanism makes it easy to decompress multiple <CODE>bzip2</CODE>
 streams placed end-to-end.  As the end of one stream, when <CODE>BZ2_bzRead</CODE>
 returns <CODE>BZ_STREAM_END</CODE>, call <CODE>BZ2_bzReadGetUnused</CODE> to collect the
@@ -1348,22 +1389,30 @@ Keep doing this until <CODE>BZ_STREAM_END</CODE> return coincides with the
 physical end of file (<CODE>feof(f)</CODE>).  In this situation
 <CODE>BZ2_bzReadGetUnused</CODE>
 will of course return no data.
+</P><P>
 
-</P>
-<P>
 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.
-
-</P>
-
-
-<H3><A NAME="SEC34" HREF="manual_toc.html#TOC34">Standard file-reading/writing code</A></H3>
-<P>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC34"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC33"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC35"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.4.9 Standard file-reading/writing code </H3>
+<!--docid::SEC34::-->
 Here's how you'd write data to a compressed file:
-
-<PRE>
-FILE*   f;
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>FILE*   f;
 BZFILE* b;
 int     nBuf;
 char    buf[ /* whatever size you like */ ];
@@ -1393,13 +1442,8 @@ BZ2_bzWriteClose ( &#38;bzerror, b );
 if (bzerror == BZ_IO_ERROR) {
    /* handle error */
 }
-</PRE>
-
-<P>
-And to read from a compressed file:
-
-<PRE>
-FILE*   f;
+</pre></td></tr></table>And to read from a compressed file:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>FILE*   f;
 BZFILE* b;
 int     nBuf;
 char    buf[ /* whatever size you like */ ];
@@ -1429,63 +1473,75 @@ if (bzerror != BZ_STREAM_END) {
 } else {
    BZ2_bzReadClose ( &#38;bzerror );
 }
-</PRE>
-
-
-
-<H2><A NAME="SEC35" HREF="manual_toc.html#TOC35">Utility functions</A></H2>
-
-
-<H3><A NAME="SEC36" HREF="manual_toc.html#TOC36"><CODE>BZ2_bzBuffToBuffCompress</CODE></A></H3>
-
-<PRE>
-   int BZ2_bzBuffToBuffCompress( char*         dest,
+</pre></td></tr></table><P>
+
+<HR SIZE="6">
+<A NAME="SEC35"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC34"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC36"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.5 Utility functions </H2>
+<!--docid::SEC35::-->
+<HR SIZE="6">
+<A NAME="SEC36"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC35"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC37"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.5.1 <CODE>BZ2_bzBuffToBuffCompress</CODE> </H3>
+<!--docid::SEC36::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   int BZ2_bzBuffToBuffCompress( char*         dest,
                                  unsigned int* destLen,
                                  char*         source,
                                  unsigned int  sourceLen,
                                  int           blockSize100k,
                                  int           verbosity,
                                  int           workFactor );
-</PRE>
-
-<P>
-Attempts to compress the data in <CODE>source[0 .. sourceLen-1]</CODE>
+</pre></td></tr></table>Attempts to compress the data in <CODE>source[0 .. sourceLen-1]</CODE>
 into the destination buffer, <CODE>dest[0 .. *destLen-1]</CODE>.
 If the destination buffer is big enough, <CODE>*destLen</CODE> is
 set to the size of the compressed data, and <CODE>BZ_OK</CODE> is
 returned.  If the compressed data won't fit, <CODE>*destLen</CODE>
 is unchanged, and <CODE>BZ_OUTBUFF_FULL</CODE> is returned.
-
-</P>
 <P>
+
 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</CODE> 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.
+</P><P>
 
-</P>
-<P>
 For the meaning of parameters <CODE>blockSize100k</CODE>, <CODE>verbosity</CODE>
 and <CODE>workFactor</CODE>, <BR> see <CODE>BZ2_bzCompressInit</CODE>.
+</P><P>
 
-</P>
-<P>
 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.
+</P><P>
 
-</P>
-<P>
 <CODE>BZ2_bzBuffToBuffDecompress</CODE> will not write data at or
 beyond <CODE>dest[*destLen]</CODE>, even in case of buffer overflow.
+</P><P>
 
-</P>
-<P>
 Possible return values:
-
-<PRE>
-      <CODE>BZ_CONFIG_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_CONFIG_ERROR</CODE>
          if the library has been mis-compiled
       <CODE>BZ_PARAM_ERROR</CODE> 
          if <CODE>dest</CODE> is <CODE>NULL</CODE> or <CODE>destLen</CODE> is <CODE>NULL</CODE>
@@ -1498,59 +1554,59 @@ Possible return values:
          if the size of the compressed data exceeds <CODE>*destLen</CODE>
       <CODE>BZ_OK</CODE> 
          otherwise
-</PRE>
-
-
-
-<H3><A NAME="SEC37" HREF="manual_toc.html#TOC37"><CODE>BZ2_bzBuffToBuffDecompress</CODE></A></H3>
-
-<PRE>
-   int BZ2_bzBuffToBuffDecompress ( char*         dest,
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC37"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC36"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC38"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.5.2 <CODE>BZ2_bzBuffToBuffDecompress</CODE> </H3>
+<!--docid::SEC37::-->
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   int BZ2_bzBuffToBuffDecompress ( char*         dest,
                                     unsigned int* destLen,
                                     char*         source,
                                     unsigned int  sourceLen,
                                     int           small,
                                     int           verbosity );
-</PRE>
-
-<P>
-Attempts to decompress the data in <CODE>source[0 .. sourceLen-1]</CODE>
+</pre></td></tr></table>Attempts to decompress the data in <CODE>source[0 .. sourceLen-1]</CODE>
 into the destination buffer, <CODE>dest[0 .. *destLen-1]</CODE>.
 If the destination buffer is big enough, <CODE>*destLen</CODE> is
 set to the size of the uncompressed data, and <CODE>BZ_OK</CODE> is
 returned.  If the compressed data won't fit, <CODE>*destLen</CODE>
 is unchanged, and <CODE>BZ_OUTBUFF_FULL</CODE> is returned.
-
-</P>
 <P>
+
 <CODE>source</CODE> is assumed to hold a complete <CODE>bzip2</CODE> format
 data stream.  <BR> <CODE>BZ2_bzBuffToBuffDecompress</CODE> tries to decompress
 the entirety of the stream into the output buffer.
+</P><P>
 
-</P>
-<P>
 For the meaning of parameters <CODE>small</CODE> and <CODE>verbosity</CODE>,
 see <CODE>BZ2_bzDecompressInit</CODE>.
+</P><P>
 
-</P>
-<P>
 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.
+</P><P>
 
-</P>
-<P>
 <CODE>BZ2_bzBuffToBuffDecompress</CODE> will not write data at or
 beyond <CODE>dest[*destLen]</CODE>, even in case of buffer overflow.
+</P><P>
 
-</P>
-<P>
 Possible return values:
-
-<PRE>
-      <CODE>BZ_CONFIG_ERROR</CODE>
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">      <CODE>BZ_CONFIG_ERROR</CODE>
          if the library has been mis-compiled
       <CODE>BZ_PARAM_ERROR</CODE> 
          if <CODE>dest</CODE> is <CODE>NULL</CODE> or <CODE>destLen</CODE> is <CODE>NULL</CODE>
@@ -1568,12 +1624,23 @@ Possible return values:
          if the compressed data ends unexpectedly
       <CODE>BZ_OK</CODE> 
          otherwise
-</PRE>
-
-
-
-<H2><A NAME="SEC38" HREF="manual_toc.html#TOC38"><CODE>zlib</CODE> compatibility functions</A></H2>
-<P>
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC38"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC37"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC39"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.6 <CODE>zlib</CODE> compatibility functions </H2>
+<!--docid::SEC38::-->
 Yoshioka Tsuneo has contributed some functions to
 give better <CODE>zlib</CODE> compatibility.  These functions are
 <CODE>BZ2_bzopen</CODE>, <CODE>BZ2_bzread</CODE>, <CODE>BZ2_bzwrite</CODE>, <CODE>BZ2_bzflush</CODE>,
@@ -1582,192 +1649,207 @@ give better <CODE>zlib</CODE> compatibility.  These functions are
 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.
-
-<PRE>
-typedef void BZFILE;
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>typedef void BZFILE;
 
 const char * BZ2_bzlibVersion ( void );
-</PRE>
-
-<P>
-Returns a string indicating the library version.
-
-<PRE>
-BZFILE * BZ2_bzopen  ( const char *path, const char *mode );
+</pre></td></tr></table>Returns a string indicating the library version.
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>BZFILE * BZ2_bzopen  ( const char *path, const char *mode );
 BZFILE * BZ2_bzdopen ( int        fd,    const char *mode );
-</PRE>
-
-<P>
-Opens a <CODE>.bz2</CODE> file for reading or writing, using either its name
+</pre></td></tr></table>Opens a <CODE>.bz2</CODE> file for reading or writing, using either its name
 or a pre-existing file descriptor. 
 Analogous to <CODE>fopen</CODE> and <CODE>fdopen</CODE>.
-
-<PRE>
-int BZ2_bzread  ( BZFILE* b, void* buf, int len );
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>int BZ2_bzread  ( BZFILE* b, void* buf, int len );
 int BZ2_bzwrite ( BZFILE* b, void* buf, int len );
-</PRE>
-
-<P>
-Reads/writes data from/to a previously opened <CODE>BZFILE</CODE>.
+</pre></td></tr></table>Reads/writes data from/to a previously opened <CODE>BZFILE</CODE>.
 Analogous to <CODE>fread</CODE> and <CODE>fwrite</CODE>.
-
-<PRE>
-int  BZ2_bzflush ( BZFILE* b );
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>int  BZ2_bzflush ( BZFILE* b );
 void BZ2_bzclose ( BZFILE* b );
-</PRE>
-
-<P>
-Flushes/closes a <CODE>BZFILE</CODE>.  <CODE>BZ2_bzflush</CODE> doesn't actually do
+</pre></td></tr></table>Flushes/closes a <CODE>BZFILE</CODE>.  <CODE>BZ2_bzflush</CODE> doesn't actually do
 anything.  Analogous to <CODE>fflush</CODE> and <CODE>fclose</CODE>.
-
-</P>
-
-<PRE>
-const char * BZ2_bzerror ( BZFILE *b, int *errnum )
-</PRE>
-
 <P>
-Returns a string describing the more recent error status of
-<CODE>b</CODE>, and also sets <CODE>*errnum</CODE> to its numerical value.
-
-</P>
-
-
-
-<H2><A NAME="SEC39" HREF="manual_toc.html#TOC39">Using the library in a <CODE>stdio</CODE>-free environment</A></H2>
-
-
-
-<H3><A NAME="SEC40" HREF="manual_toc.html#TOC40">Getting rid of <CODE>stdio</CODE></A></H3>
 
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>const char * BZ2_bzerror ( BZFILE *b, int *errnum )
+</pre></td></tr></table>Returns a string describing the more recent error status of
+<CODE>b</CODE>, and also sets <CODE>*errnum</CODE> to its numerical value.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC39"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC38"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC40"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.7 Using the library in a <CODE>stdio</CODE>-free environment </H2>
+<!--docid::SEC39::-->
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC40"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC39"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC41"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.7.1 Getting rid of <CODE>stdio</CODE> </H3>
+<!--docid::SEC40::-->
 <P>
+
 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</CODE>
 defined.  Doing this gives you a library containing only the following
 eight functions:
+</P><P>
 
-</P>
-<P>
 <CODE>BZ2_bzCompressInit</CODE>, <CODE>BZ2_bzCompress</CODE>, <CODE>BZ2_bzCompressEnd</CODE> <BR>
 <CODE>BZ2_bzDecompressInit</CODE>, <CODE>BZ2_bzDecompress</CODE>, <CODE>BZ2_bzDecompressEnd</CODE> <BR>
 <CODE>BZ2_bzBuffToBuffCompress</CODE>, <CODE>BZ2_bzBuffToBuffDecompress</CODE>
+</P><P>
 
-</P>
-<P>
 When compiled like this, all functions will ignore <CODE>verbosity</CODE>
 settings.
-
-</P>
-
-
-<H3><A NAME="SEC41" HREF="manual_toc.html#TOC41">Critical error handling</A></H3>
-<P>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC41"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC40"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC42"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.7.2 Critical error handling </H3>
+<!--docid::SEC41::-->
 <CODE>libbzip2</CODE> 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</CODE> set.
-
-</P>
 <P>
-For a normal compile, an assertion failure yields the message
 
-<PRE>
-   bzip2/libbzip2: internal error number N.
-   This is a bug in bzip2/libbzip2, 1.0 of 21-Mar-2000.
+For a normal compile, an assertion failure yields the message
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   bzip2/libbzip2: internal error number N.
+   This is a bug in bzip2/libbzip2, 1.0.2, 30-Dec-2001.
    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.
-</PRE>
+   quality software.  Thanks.  Julian Seward, 30 December 2001.
+</pre></td></tr></table>where <CODE>N</CODE> is some error code number.  If <CODE>N == 1007</CODE>, it also
+prints some extra text advising the reader that unreliable memory is
+often associated with internal error 1007.  (This is a
+frequently-observed-phenomenon with versions 1.0.0/1.0.1).
+</P><P>
 
-<P>
-where <CODE>N</CODE> is some error code number.  <CODE>exit(3)</CODE>
-is then called.
+<CODE>exit(3)</CODE> is then called.
+</P><P>
 
-</P>
-<P>
 For a <CODE>stdio</CODE>-free library, assertion failures result
 in a call to a function declared as:
-
-<PRE>
-   extern void bz_internal_error ( int errcode );
-</PRE>
-
-<P>
-The relevant code is passed as a parameter.  You should supply
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>   extern void bz_internal_error ( int errcode );
+</pre></td></tr></table>The relevant code is passed as a parameter.  You should supply
 such a function.
+</P><P>
 
-</P>
-<P>
 In either case, once an assertion failure has occurred, any 
 <CODE>bz_stream</CODE> records involved can be regarded as invalid.
 You should not attempt to resume normal operation with them.
+</P><P>
 
-</P>
-<P>
 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.
-
-</P>
-
-
-
-<H2><A NAME="SEC42" HREF="manual_toc.html#TOC42">Making a Windows DLL</A></H2>
-<P>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC42"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC41"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC43"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.8 Making a Windows DLL </H2>
+<!--docid::SEC42::-->
 Everything related to Windows has been contributed by Yoshioka Tsuneo
 <BR> (<CODE>QWF00133@niftyserve.or.jp</CODE> /
 <CODE>tsuneo-y@is.aist-nara.ac.jp</CODE>), so you should send your queries to
 him (but perhaps Cc: me, <CODE>jseward@acm.org</CODE>).
-
-</P>
 <P>
+
 My vague understanding of what to do is: using Visual C++ 5.0,
 open the project file <CODE>libbz2.dsp</CODE>, and build.  That's all.
+</P><P>
 
-</P>
-<P>
 If you can't
 open the project file for some reason, make a new one, naming these files:
 <CODE>blocksort.c</CODE>, <CODE>bzlib.c</CODE>, <CODE>compress.c</CODE>, 
 <CODE>crctable.c</CODE>, <CODE>decompress.c</CODE>, <CODE>huffman.c</CODE>, <BR>
 <CODE>randtable.c</CODE> and <CODE>libbz2.def</CODE>.  You will also need
 to name the header files <CODE>bzlib.h</CODE> and <CODE>bzlib_private.h</CODE>.
+</P><P>
 
-</P>
-<P>
 If you don't use VC++, you may need to define the proprocessor symbol
 <CODE>_WIN32</CODE>. 
+</P><P>
 
-</P>
-<P>
 Finally, <CODE>dlltest.c</CODE> is a sample program using the DLL.  It has a
 project file, <CODE>dlltest.dsp</CODE>.
+</P><P>
 
-</P>
-<P>
 If you just want a makefile for Visual C, have a look at
 <CODE>makefile.msc</CODE>.
+</P><P>
 
-</P>
-<P>
 Be aware that if you compile <CODE>bzip2</CODE> itself on Win32, you must set
 <CODE>BZ_UNIX</CODE> to 0 and <CODE>BZ_LCCWIN32</CODE> to 1, in the file
 <CODE>bzip2.c</CODE>, before compiling.  Otherwise the resulting binary won't
 work correctly.
+</P><P>
 
-</P>
-<P>
 I haven't tried any of this stuff myself, but it all looks plausible.
+</P><P>
+
+<HR SIZE="6">
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
 
-</P>
-
-<P><HR><P>
-<p>Go to the <A HREF="manual_1.html">first</A>, <A HREF="manual_2.html">previous</A>, <A HREF="manual_4.html">next</A>, <A HREF="manual_4.html">last</A> section, <A HREF="manual_toc.html">table of contents</A>.
 </BODY>
 </HTML>
index 9ab7fb24f33f7f8333bf8691726a52bba17d249d..fbe3938a82373e595caae171c57a64b2bf66ce4c 100644 (file)
@@ -1,45 +1,76 @@
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.54
-     from manual.texi on 23 March 2000 -->
+<TITLE>Untitled Document: 4. Miscellanea</TITLE>
 
-<TITLE>bzip2 and libbzip2 - Miscellanea</TITLE>
-<link href="manual_3.html" rel=Previous>
-<link href="manual_toc.html" rel=ToC>
+<META NAME="description" CONTENT="Untitled Document: 4. Miscellanea">
+<META NAME="keywords" CONTENT="Untitled Document: 4. Miscellanea">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
 
 </HEAD>
-<BODY>
-<p>Go to the <A HREF="manual_1.html">first</A>, <A HREF="manual_3.html">previous</A>, next, last section, <A HREF="manual_toc.html">table of contents</A>.
-<P><HR><P>
 
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 
-<H1><A NAME="SEC43" HREF="manual_toc.html#TOC43">Miscellanea</A></H1>
-
+<A NAME="SEC43"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_3.html#SEC42"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC44"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 4. Miscellanea </H1>
+<!--docid::SEC43::-->
 <P>
+
 These are just some random thoughts of mine.  Your mileage may
 vary.
-
-</P>
-
-
-<H2><A NAME="SEC44" HREF="manual_toc.html#TOC44">Limitations of the compressed file format</A></H2>
-<P>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC44"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC43"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC45"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.1 Limitations of the compressed file format </H2>
+<!--docid::SEC44::-->
 <CODE>bzip2-1.0</CODE>, <CODE>0.9.5</CODE> and <CODE>0.9.0</CODE>
 use exactly the same file format as the previous
 version, <CODE>bzip2-0.1</CODE>.  This decision was made in the interests of
 stability.  Creating yet another incompatible compressed file format
 would create further confusion and disruption for users.
-
-</P>
 <P>
+
 Nevertheless, this is not a painless decision.  Development
 work since the release of <CODE>bzip2-0.1</CODE> in August 1997
 has shown complexities in the file format which slow down
 decompression and, in retrospect, are unnecessary.  These are:
-
 <UL>
 <LI>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
@@ -48,7 +79,6 @@ decompression and, in retrospect, are unnecessary.  These are:
       repeats can be handled without difficulty in block
       sorting.
 <LI>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 
@@ -56,6 +86,7 @@ decompression and, in retrospect, are unnecessary.  These are:
       Kunihiko Sadakane has produced a derivative O(N (log N)^2) 
       algorithm which usually outperforms the Manber-Myers
       algorithm.
+<P>
 
       I could have changed to Sadakane's algorithm, but I find
       it to be slower than <CODE>bzip2</CODE>'s existing algorithm for
@@ -65,6 +96,7 @@ decompression and, in retrospect, are unnecessary.  These are:
       that I was not flooded with email complaints about
       <CODE>bzip2-0.1</CODE>'s performance on repetitive data, so
       perhaps it isn't a problem for real inputs.
+</P><P>
 
       Probably the best long-term solution,
       and the one I have incorporated into 0.9.5 and above,
@@ -72,7 +104,6 @@ decompression and, in retrospect, are unnecessary.  These are:
       algorithm initially, and fall back to a O(N (log N)^2)
       algorithm if the standard algorithm gets into difficulties.
 <LI>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
@@ -81,52 +112,52 @@ decompression and, in retrospect, are unnecessary.  These are:
       could have been avoided if the compressed size of
       each block of data was recorded in the data stream.
 <LI>An Adler-32 checksum, rather than a CRC32 checksum,
-
       would be faster to compute.
 </UL>
-
-<P>
 It would be fair to say that the <CODE>bzip2</CODE> format was frozen
 before I properly and fully understood the performance
 consequences of doing so.
-
-</P>
 <P>
+
 Improvements which I was able to incorporate into
 0.9.0, despite using the same file format, are:
-
 <UL>
 <LI>Single array implementation of the inverse BWT.  This
-
       significantly speeds up decompression, presumably
       because it reduces the number of cache misses.
 <LI>Faster inverse MTF transform for large MTF values.  The
-
       new implementation is based on the notion of sliding blocks
       of values.
 <LI><CODE>bzip2-0.9.0</CODE> now reads and writes files with <CODE>fread</CODE>
-
       and <CODE>fwrite</CODE>; version 0.1 used <CODE>putc</CODE> and <CODE>getc</CODE>.
       Duh!  Well, you live and learn.
+<P>
 
 </UL>
-
-<P>
 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.
-
-</P>
-
-
-
-<H2><A NAME="SEC45" HREF="manual_toc.html#TOC45">Portability issues</A></H2>
 <P>
+
+<HR SIZE="6">
+<A NAME="SEC45"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC44"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC46"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.2 Portability issues </H2>
+<!--docid::SEC45::-->
 After some consideration, I have decided not to use
 GNU <CODE>autoconf</CODE> to configure 0.9.5 or 1.0.
-
-</P>
 <P>
+
 <CODE>autoconf</CODE>, admirable and wonderful though it is, 
 mainly assists with portability problems between Unix-like
 platforms.  But <CODE>bzip2</CODE> doesn't have much in the way
@@ -134,15 +165,13 @@ of portability problems on Unix; most of the difficulties appear
 when porting to the Mac, or to Microsoft's operating systems.
 <CODE>autoconf</CODE> doesn't help in those cases, and brings in a 
 whole load of new complexity.
+</P><P>
 
-</P>
-<P>
 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.
+</P><P>
 
-</P>
-<P>
 There are a couple of <CODE>__inline__</CODE> directives in the code.  GNU C
 (<CODE>gcc</CODE>) should be able to handle them.  If you're not using
 GNU C, your C compiler shouldn't see them at all.
@@ -150,9 +179,8 @@ If your compiler does, for some reason, see them and doesn't
 like them, just <CODE>#define</CODE> <CODE>__inline__</CODE> to be <CODE>/* */</CODE>.  One
 easy way to do this is to compile with the flag <CODE>-D__inline__=</CODE>, 
 which should be understood by most Unix compilers.
+</P><P>
 
-</P>
-<P>
 If you still have difficulties, try compiling with the macro
 <CODE>BZ_STRICT_ANSI</CODE> defined.  This should enable you to build the
 library in a strictly ANSI compliant environment.  Building the program
@@ -160,165 +188,164 @@ itself like this is dangerous and not supported, since you remove
 <CODE>bzip2</CODE>'s checks against compressing directories, symbolic links,
 devices, and other not-really-a-file entities.  This could cause
 filesystem corruption!
+</P><P>
 
-</P>
-<P>
 One other thing: if you create a <CODE>bzip2</CODE> binary for public
 distribution, please try and link it statically (<CODE>gcc -s</CODE>).  This
 avoids all sorts of library-version issues that others may encounter
 later on.
+</P><P>
 
-</P>
-<P>
 If you build <CODE>bzip2</CODE> on Win32, you must set <CODE>BZ_UNIX</CODE> to 0 and
 <CODE>BZ_LCCWIN32</CODE> to 1, in the file <CODE>bzip2.c</CODE>, before compiling.
 Otherwise the resulting binary won't work correctly.
-
-</P>
-
-
-
-<H2><A NAME="SEC46" HREF="manual_toc.html#TOC46">Reporting bugs</A></H2>
-<P>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC46"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC45"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC47"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.3 Reporting bugs </H2>
+<!--docid::SEC46::-->
 I tried pretty hard to make sure <CODE>bzip2</CODE> is
 bug free, both by design and by testing.  Hopefully
 you'll never need to read this section for real.
-
-</P>
 <P>
+
 Nevertheless, if <CODE>bzip2</CODE> 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.
-
 <UL>
 <LI>
-
 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</CODE>, and I've run across two such examples myself.
+<P>
 
 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> <CODE>-fomit-frame-pointer</CODE> <CODE>-fno-strength-reduce</CODE>.
 You should specifically <EM>not</EM> use <CODE>-funroll-loops</CODE>.
+</P><P>
 
 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.
 <LI>
-
 If <CODE>bzip2</CODE> crashes randomly, and the crashes are not
 repeatable, you may have a flaky memory subsystem.  <CODE>bzip2</CODE>
 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.
+<P>
 
 Try using a different machine of the same type, and see if
 you can repeat the problem.
 <LI>This isn't really a bug, but ... If <CODE>bzip2</CODE> 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.
 </UL>
-
 <P>
+
 If you've incorporated <CODE>libbzip2</CODE> 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.
+</P><P>
 
-</P>
-<P>
 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
-
-<PRE>
-   bzip2 crashed with segmentation fault on my machine
-</PRE>
-
-<P>
-and absolutely nothing else.  Needless to say, a such a report
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">   bzip2 crashed with segmentation fault on my machine
+</pre></td></tr></table>and absolutely nothing else.  Needless to say, a such a report
 is <EM>totally, utterly, completely and comprehensively 100% useless; 
 a waste of your time, my time, and net bandwidth</EM>.
 With no details at all, there's no way I can possibly begin
 to figure out what the problem is.
+</P><P>
 
-</P>
-<P>
 The rules of the game are: facts, facts, facts.  Don't omit
 them because "oh, they won't be relevant".  At the bare 
 minimum:
-
-<PRE>
-   Machine type.  Operating system version.  
+<TABLE><tr><td>&nbsp;</td><td class=display><pre style="font-family: serif">   Machine type.  Operating system version.  
    Exact version of <CODE>bzip2</CODE> (do <CODE>bzip2 -V</CODE>).  
    Exact version of the compiler used.  
    Flags passed to the compiler.
-</PRE>
-
-<P>
-However, the most important single thing that will help me is
+</pre></td></tr></table>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.
+</P><P>
 
-</P>
-<P>
 Please remember that I connect to the Internet with a modem, so
 you should contact me before mailing me huge files.
-
-</P>
-
-
-
-<H2><A NAME="SEC47" HREF="manual_toc.html#TOC47">Did you get the right package?</A></H2>
-
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC47"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC46"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC48"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.4 Did you get the right package? </H2>
+<!--docid::SEC47::-->
 <P>
+
 <CODE>bzip2</CODE> 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.
+</P><P>
 
-</P>
-<P>
 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.
+</P><P>
 
-</P>
-<P>
 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</CODE> and
+Gailly's and Mark Adler's work, <CODE>zlib-1.1.3</CODE> and
 <CODE>gzip-1.2.4</CODE>.  Look for them at
+</P><P>
 
-</P>
-<P>
-<CODE>http://www.cdrom.com/pub/infozip/zlib</CODE> and
+<CODE>http://www.zlib.org</CODE> and
 <CODE>http://www.gzip.org</CODE> respectively.
+</P><P>
 
-</P>
-<P>
 For something faster and lighter still, you might try Markus F X J
 Oberhumer's <CODE>LZO</CODE> real-time compression/decompression library, at
 <BR> <CODE>http://wildsau.idv.uni-linz.ac.at/mfx/lzo.html</CODE>.
+</P><P>
 
-</P>
-<P>
 If you want to use the <CODE>bzip2</CODE> 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,
@@ -326,136 +353,117 @@ I've made a special library tuned for that kind of use.  It's part of
 <CODE>e2compr-0.40</CODE>, an on-the-fly disk compressor for the Linux
 <CODE>ext2</CODE> filesystem.  Look at
 <CODE>http://www.netspace.net.au/~reiter/e2compr</CODE>.
-
-</P>
-
-
-
-<H2><A NAME="SEC48" HREF="manual_toc.html#TOC48">Testing</A></H2>
-
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC48"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC47"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC49"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.5 Testing </H2>
+<!--docid::SEC48::-->
 <P>
+
 A record of the tests I've done.
+</P><P>
 
-</P>
-<P>
 First, some data sets:
-
 <UL>
 <LI>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.
 <LI>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.
 <LI>A: directory tree holding various applications built from source:
-
       <CODE>egcs</CODE>, <CODE>gcc-2.8.1</CODE>, KDE, GTK, Octave, etc.
       2200 megabytes.
 </UL>
-
-<P>
 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.
-
-</P>
 <P>
+
 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.
-
 <OL>
 <LI>Data set H, with
-
       buffer size of 1 byte, and block size of 23 bytes.
 <LI>Data set B, buffer sizes 1 byte, block size 1 byte.
-
 <LI>As (2) but small-mode decompression.
-
 <LI>As (2) with block size 2 bytes.
-
 <LI>As (2) with block size 3 bytes.
-
 <LI>As (2) with block size 4 bytes.
-
 <LI>As (2) with block size 5 bytes.
-
 <LI>As (2) with block size 6 bytes and small-mode decompression.
-
 <LI>H with buffer size of 1 byte, but normal block
-
       size (up to 900000 bytes).
 </OL>
-
-<P>
 Then some tests with unmodified source code.
-
 <OL>
 <LI>H, all settings normal.
-
 <LI>As (1), with small-mode decompress.
-
 <LI>H, compress with flag <CODE>-1</CODE>.
-
 <LI>H, compress with flag <CODE>-s</CODE>, decompress with flag <CODE>-s</CODE>.
-
 <LI>Forwards compatibility: H, <CODE>bzip2-0.1pl2</CODE> compressing,
-
       <CODE>bzip2-0.9.5</CODE> decompressing, all settings normal.
 <LI>Backwards compatibility:  H, <CODE>bzip2-0.9.5</CODE> compressing,
-
       <CODE>bzip2-0.1pl2</CODE> decompressing, all settings normal.
 <LI>Bigger tests: A, all settings normal.
-
 <LI>As (7), using the fallback (Sadakane-like) sorting algorithm.
-
 <LI>As (8), compress with flag <CODE>-1</CODE>, decompress with flag
-
       <CODE>-s</CODE>.
 <LI>H, using the fallback sorting algorithm.
-
 <LI>Forwards compatibility: A, <CODE>bzip2-0.1pl2</CODE> compressing,
-
       <CODE>bzip2-0.9.5</CODE> decompressing, all settings normal.
 <LI>Backwards compatibility:  A, <CODE>bzip2-0.9.5</CODE> compressing,
-
       <CODE>bzip2-0.1pl2</CODE> decompressing, all settings normal.
 <LI>Misc test: about 400 megabytes of <CODE>.tar</CODE> files with
-
       <CODE>bzip2</CODE> compiled with Checker (a memory access error
        detector, like Purify).
 <LI>Misc tests to make sure it builds and runs ok on non-Linux/x86
-
       platforms.
 </OL>
-
-<P>
 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.
-
-</P>
-
-
-
-<H2><A NAME="SEC49" HREF="manual_toc.html#TOC49">Further reading</A></H2>
 <P>
+
+<HR SIZE="6">
+<A NAME="SEC49"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_4.html#SEC48"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.6 Further reading </H2>
+<!--docid::SEC49::-->
 <CODE>bzip2</CODE> 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.
-
-</P>
 <P>
-Four documents describe essentially all the ideas behind <CODE>bzip2</CODE>:
 
-<PRE>
-Michael Burrows and D. J. Wheeler:
+Four documents describe essentially all the ideas behind <CODE>bzip2</CODE>:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Michael Burrows and D. J. Wheeler:
   "A block-sorting lossless data compression algorithm"
    10th May 1994. 
    Digital SRC Research Report 124.
@@ -479,50 +487,44 @@ Jon L. Bentley and Robert Sedgewick
   "Fast Algorithms for Sorting and Searching Strings"
    Available from Sedgewick's web page,
    www.cs.princeton.edu/~rs
-</PRE>
-
-<P>
-The following paper gives valuable additional insights into the
+</pre></td></tr></table>The following paper gives valuable additional insights into the
 algorithm, but is not immediately the basis of any code
 used in bzip2.
-
-<PRE>
-Peter Fenwick:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>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
-</PRE>
-
-<P>
-Kunihiko Sadakane's sorting algorithm, mentioned above,
+</pre></td></tr></table>Kunihiko Sadakane's sorting algorithm, mentioned above,
 is available from:
-
-<PRE>
-http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz
-</PRE>
-
-<P>
-The Manber-Myers suffix array construction
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz
+</pre></td></tr></table>The Manber-Myers suffix array construction
 algorithm is described in a paper
 available from:
-
-<PRE>
-http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps
-</PRE>
-
-<P>
-Finally, the following paper documents some recent investigations
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps
+</pre></td></tr></table>Finally, the following paper documents some recent investigations
 I made into the performance of sorting algorithms:
-
-<PRE>
-Julian Seward:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Julian Seward:
    On the Performance of BWT Sorting Algorithms
    Proceedings of the IEEE Data Compression Conference 2000
      Snowbird, Utah.  28-30 March 2000.
-</PRE>
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
 
-<P><HR><P>
-<p>Go to the <A HREF="manual_1.html">first</A>, <A HREF="manual_3.html">previous</A>, next, last section, <A HREF="manual_toc.html">table of contents</A>.
 </BODY>
 </HTML>
diff --git a/bz2lib/manual_abt.html b/bz2lib/manual_abt.html
new file mode 100644 (file)
index 0000000..d7f5472
--- /dev/null
@@ -0,0 +1,201 @@
+<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
+<HEAD>
+<TITLE>Untitled Document: About this document</TITLE>
+
+<META NAME="description" CONTENT="Untitled Document: About this document">
+<META NAME="keywords" CONTENT="Untitled Document: About this document">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
+</HEAD>
+
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>About this document</H1>
+This document was generated by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>  
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt; ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section 
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position 
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of 
+the following structure:
+<UL>
+<LI> 1. Section One  </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
+</BODY>
+</HTML>
diff --git a/bz2lib/manual_ovr.html b/bz2lib/manual_ovr.html
new file mode 100644 (file)
index 0000000..3b102b9
--- /dev/null
@@ -0,0 +1,54 @@
+<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
+<HEAD>
+<TITLE>Untitled Document: Short Table of Contents</TITLE>
+
+<META NAME="description" CONTENT="Untitled Document: Short Table of Contents">
+<META NAME="keywords" CONTENT="Untitled Document: Short Table of Contents">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
+</HEAD>
+
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="manual_1.html#SEC1">1. Introduction</A>
+<BR>
+<A NAME="TOC2" HREF="manual_2.html#SEC2">2. How to use <CODE>bzip2</CODE></A>
+<BR>
+<A NAME="TOC12" HREF="manual_3.html#SEC12">3. Programming with <CODE>libbzip2</CODE></A>
+<BR>
+<A NAME="TOC43" HREF="manual_4.html#SEC43">4. Miscellanea</A>
+<BR>
+
+</BLOCKQUOTE>
+<HR SIZE=1>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
+</BODY>
+</HTML>
index d4132c435ac696015ed3445f2f791295e66ced23..bc0870597696fbe08db6461b40d4023f60195f35 100644 (file)
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on January, 5  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.54
-     from manual.texi on 23 March 2000 -->
+<TITLE>Untitled Document: Table of Contents</TITLE>
 
-<TITLE>bzip2 and libbzip2 - Table of Contents</TITLE>
+<META NAME="description" CONTENT="Untitled Document: Table of Contents">
+<META NAME="keywords" CONTENT="Untitled Document: Table of Contents">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
 
 </HEAD>
-<BODY>
-<H1>bzip2 and libbzip2</H1>
-<H2>a program and library for data compression</H2>
-<H2>copyright (C) 1996-2000 Julian Seward</H2>
-<H2>version 1.0 of 21 March 2000</H2>
-<ADDRESS>Julian Seward</ADDRESS>
-<P>
-<P><HR><P>
 
-<P>
-This program, <CODE>bzip2</CODE>, 
-and associated library <CODE>libbzip2</CODE>, are
-Copyright (C) 1996-2000 Julian R Seward.  All rights reserved.
-
-</P>
-<P>
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-<UL>
-<LI>
-
-   Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-<LI>
-
-   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.
-<LI>
-
-   Altered source versions must be plainly marked as such, and must
-   not be misrepresented as being the original software.
-<LI>
-
-   The name of the author may not be used to endorse or promote 
-   products derived from this software without specific prior written 
-   permission.
-</UL>
-
-<P>
-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.
-
-</P>
-<P>
-Julian Seward, Cambridge, UK.
-
-</P>
-<P>
-<CODE>jseward@acm.org</CODE>
-
-</P>
-<P>
-<CODE>http://sourceware.cygnus.com/bzip2</CODE>
-
-</P>
-<P>
-<CODE>http://www.cacheprof.org</CODE>
-
-</P>
-<P>
-<CODE>http://www.muraroa.demon.co.uk</CODE>
-
-</P>
-<P>
-<CODE>bzip2</CODE>/<CODE>libbzip2</CODE> version 1.0 of 21 March 2000.
-
-</P>
-<P>
-PATENTS: To the best of my knowledge, <CODE>bzip2</CODE> 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.
-
-</P>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_toc.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="manual_abt.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
 <UL>
-<LI><A NAME="TOC1" HREF="manual_1.html#SEC1">Introduction</A>
-<LI><A NAME="TOC2" HREF="manual_2.html#SEC2">How to use <CODE>bzip2</CODE></A>
+<A NAME="TOC1" HREF="manual_1.html#SEC1">1. Introduction</A>
+<BR>
+<A NAME="TOC2" HREF="manual_2.html#SEC2">2. How to use <CODE>bzip2</CODE></A>
+<BR>
 <UL>
 <UL>
 <UL>
-<LI><A NAME="TOC3" HREF="manual_2.html#SEC3">NAME</A>
-<LI><A NAME="TOC4" HREF="manual_2.html#SEC4">SYNOPSIS</A>
-<LI><A NAME="TOC5" HREF="manual_2.html#SEC5">DESCRIPTION</A>
-<LI><A NAME="TOC6" HREF="manual_2.html#SEC6">OPTIONS</A>
-<LI><A NAME="TOC7" HREF="manual_2.html#SEC7">MEMORY MANAGEMENT</A>
-<LI><A NAME="TOC8" HREF="manual_2.html#SEC8">RECOVERING DATA FROM DAMAGED FILES</A>
-<LI><A NAME="TOC9" HREF="manual_2.html#SEC9">PERFORMANCE NOTES</A>
-<LI><A NAME="TOC10" HREF="manual_2.html#SEC10">CAVEATS</A>
-<LI><A NAME="TOC11" HREF="manual_2.html#SEC11">AUTHOR</A>
+<A NAME="TOC3" HREF="manual_2.html#SEC3">NAME</A>
+<BR>
+<A NAME="TOC4" HREF="manual_2.html#SEC4">SYNOPSIS</A>
+<BR>
+<A NAME="TOC5" HREF="manual_2.html#SEC5">DESCRIPTION</A>
+<BR>
+<A NAME="TOC6" HREF="manual_2.html#SEC6">OPTIONS</A>
+<BR>
+<A NAME="TOC7" HREF="manual_2.html#SEC7">MEMORY MANAGEMENT</A>
+<BR>
+<A NAME="TOC8" HREF="manual_2.html#SEC8">RECOVERING DATA FROM DAMAGED FILES</A>
+<BR>
+<A NAME="TOC9" HREF="manual_2.html#SEC9">PERFORMANCE NOTES</A>
+<BR>
+<A NAME="TOC10" HREF="manual_2.html#SEC10">CAVEATS</A>
+<BR>
+<A NAME="TOC11" HREF="manual_2.html#SEC11">AUTHOR</A>
+<BR>
 </UL>
 </UL>
 </UL>
-<LI><A NAME="TOC12" HREF="manual_3.html#SEC12">Programming with <CODE>libbzip2</CODE></A>
+<A NAME="TOC12" HREF="manual_3.html#SEC12">3. Programming with <CODE>libbzip2</CODE></A>
+<BR>
 <UL>
-<LI><A NAME="TOC13" HREF="manual_3.html#SEC13">Top-level structure</A>
+<A NAME="TOC13" HREF="manual_3.html#SEC13">3.1 Top-level structure</A>
+<BR>
 <UL>
-<LI><A NAME="TOC14" HREF="manual_3.html#SEC14">Low-level summary</A>
-<LI><A NAME="TOC15" HREF="manual_3.html#SEC15">High-level summary</A>
-<LI><A NAME="TOC16" HREF="manual_3.html#SEC16">Utility functions summary</A>
+<A NAME="TOC14" HREF="manual_3.html#SEC14">3.1.1 Low-level summary</A>
+<BR>
+<A NAME="TOC15" HREF="manual_3.html#SEC15">3.1.2 High-level summary</A>
+<BR>
+<A NAME="TOC16" HREF="manual_3.html#SEC16">3.1.3 Utility functions summary</A>
+<BR>
 </UL>
-<LI><A NAME="TOC17" HREF="manual_3.html#SEC17">Error handling</A>
-<LI><A NAME="TOC18" HREF="manual_3.html#SEC18">Low-level interface</A>
+<A NAME="TOC17" HREF="manual_3.html#SEC17">3.2 Error handling</A>
+<BR>
+<A NAME="TOC18" HREF="manual_3.html#SEC18">3.3 Low-level interface</A>
+<BR>
 <UL>
-<LI><A NAME="TOC19" HREF="manual_3.html#SEC19"><CODE>BZ2_bzCompressInit</CODE></A>
-<LI><A NAME="TOC20" HREF="manual_3.html#SEC20"><CODE>BZ2_bzCompress</CODE></A>
-<LI><A NAME="TOC21" HREF="manual_3.html#SEC21"><CODE>BZ2_bzCompressEnd</CODE></A>
-<LI><A NAME="TOC22" HREF="manual_3.html#SEC22"><CODE>BZ2_bzDecompressInit</CODE></A>
-<LI><A NAME="TOC23" HREF="manual_3.html#SEC23"><CODE>BZ2_bzDecompress</CODE></A>
-<LI><A NAME="TOC24" HREF="manual_3.html#SEC24"><CODE>BZ2_bzDecompressEnd</CODE></A>
+<A NAME="TOC19" HREF="manual_3.html#SEC19">3.3.1 <CODE>BZ2_bzCompressInit</CODE></A>
+<BR>
+<A NAME="TOC20" HREF="manual_3.html#SEC20">3.3.2 <CODE>BZ2_bzCompress</CODE></A>
+<BR>
+<A NAME="TOC21" HREF="manual_3.html#SEC21">3.3.3 <CODE>BZ2_bzCompressEnd</CODE></A>
+<BR>
+<A NAME="TOC22" HREF="manual_3.html#SEC22">3.3.4 <CODE>BZ2_bzDecompressInit</CODE></A>
+<BR>
+<A NAME="TOC23" HREF="manual_3.html#SEC23">3.3.5 <CODE>BZ2_bzDecompress</CODE></A>
+<BR>
+<A NAME="TOC24" HREF="manual_3.html#SEC24">3.3.6 <CODE>BZ2_bzDecompressEnd</CODE></A>
+<BR>
 </UL>
-<LI><A NAME="TOC25" HREF="manual_3.html#SEC25">High-level interface</A>
+<A NAME="TOC25" HREF="manual_3.html#SEC25">3.4 High-level interface</A>
+<BR>
 <UL>
-<LI><A NAME="TOC26" HREF="manual_3.html#SEC26"><CODE>BZ2_bzReadOpen</CODE></A>
-<LI><A NAME="TOC27" HREF="manual_3.html#SEC27"><CODE>BZ2_bzRead</CODE></A>
-<LI><A NAME="TOC28" HREF="manual_3.html#SEC28"><CODE>BZ2_bzReadGetUnused</CODE></A>
-<LI><A NAME="TOC29" HREF="manual_3.html#SEC29"><CODE>BZ2_bzReadClose</CODE></A>
-<LI><A NAME="TOC30" HREF="manual_3.html#SEC30"><CODE>BZ2_bzWriteOpen</CODE></A>
-<LI><A NAME="TOC31" HREF="manual_3.html#SEC31"><CODE>BZ2_bzWrite</CODE></A>
-<LI><A NAME="TOC32" HREF="manual_3.html#SEC32"><CODE>BZ2_bzWriteClose</CODE></A>
-<LI><A NAME="TOC33" HREF="manual_3.html#SEC33">Handling embedded compressed data streams</A>
-<LI><A NAME="TOC34" HREF="manual_3.html#SEC34">Standard file-reading/writing code</A>
+<A NAME="TOC26" HREF="manual_3.html#SEC26">3.4.1 <CODE>BZ2_bzReadOpen</CODE></A>
+<BR>
+<A NAME="TOC27" HREF="manual_3.html#SEC27">3.4.2 <CODE>BZ2_bzRead</CODE></A>
+<BR>
+<A NAME="TOC28" HREF="manual_3.html#SEC28">3.4.3 <CODE>BZ2_bzReadGetUnused</CODE></A>
+<BR>
+<A NAME="TOC29" HREF="manual_3.html#SEC29">3.4.4 <CODE>BZ2_bzReadClose</CODE></A>
+<BR>
+<A NAME="TOC30" HREF="manual_3.html#SEC30">3.4.5 <CODE>BZ2_bzWriteOpen</CODE></A>
+<BR>
+<A NAME="TOC31" HREF="manual_3.html#SEC31">3.4.6 <CODE>BZ2_bzWrite</CODE></A>
+<BR>
+<A NAME="TOC32" HREF="manual_3.html#SEC32">3.4.7 <CODE>BZ2_bzWriteClose</CODE></A>
+<BR>
+<A NAME="TOC33" HREF="manual_3.html#SEC33">3.4.8 Handling embedded compressed data streams</A>
+<BR>
+<A NAME="TOC34" HREF="manual_3.html#SEC34">3.4.9 Standard file-reading/writing code</A>
+<BR>
 </UL>
-<LI><A NAME="TOC35" HREF="manual_3.html#SEC35">Utility functions</A>
+<A NAME="TOC35" HREF="manual_3.html#SEC35">3.5 Utility functions</A>
+<BR>
 <UL>
-<LI><A NAME="TOC36" HREF="manual_3.html#SEC36"><CODE>BZ2_bzBuffToBuffCompress</CODE></A>
-<LI><A NAME="TOC37" HREF="manual_3.html#SEC37"><CODE>BZ2_bzBuffToBuffDecompress</CODE></A>
+<A NAME="TOC36" HREF="manual_3.html#SEC36">3.5.1 <CODE>BZ2_bzBuffToBuffCompress</CODE></A>
+<BR>
+<A NAME="TOC37" HREF="manual_3.html#SEC37">3.5.2 <CODE>BZ2_bzBuffToBuffDecompress</CODE></A>
+<BR>
 </UL>
-<LI><A NAME="TOC38" HREF="manual_3.html#SEC38"><CODE>zlib</CODE> compatibility functions</A>
-<LI><A NAME="TOC39" HREF="manual_3.html#SEC39">Using the library in a <CODE>stdio</CODE>-free environment</A>
+<A NAME="TOC38" HREF="manual_3.html#SEC38">3.6 <CODE>zlib</CODE> compatibility functions</A>
+<BR>
+<A NAME="TOC39" HREF="manual_3.html#SEC39">3.7 Using the library in a <CODE>stdio</CODE>-free environment</A>
+<BR>
 <UL>
-<LI><A NAME="TOC40" HREF="manual_3.html#SEC40">Getting rid of <CODE>stdio</CODE></A>
-<LI><A NAME="TOC41" HREF="manual_3.html#SEC41">Critical error handling</A>
+<A NAME="TOC40" HREF="manual_3.html#SEC40">3.7.1 Getting rid of <CODE>stdio</CODE></A>
+<BR>
+<A NAME="TOC41" HREF="manual_3.html#SEC41">3.7.2 Critical error handling</A>
+<BR>
 </UL>
-<LI><A NAME="TOC42" HREF="manual_3.html#SEC42">Making a Windows DLL</A>
+<A NAME="TOC42" HREF="manual_3.html#SEC42">3.8 Making a Windows DLL</A>
+<BR>
 </UL>
-<LI><A NAME="TOC43" HREF="manual_4.html#SEC43">Miscellanea</A>
+<A NAME="TOC43" HREF="manual_4.html#SEC43">4. Miscellanea</A>
+<BR>
 <UL>
-<LI><A NAME="TOC44" HREF="manual_4.html#SEC44">Limitations of the compressed file format</A>
-<LI><A NAME="TOC45" HREF="manual_4.html#SEC45">Portability issues</A>
-<LI><A NAME="TOC46" HREF="manual_4.html#SEC46">Reporting bugs</A>
-<LI><A NAME="TOC47" HREF="manual_4.html#SEC47">Did you get the right package?</A>
-<LI><A NAME="TOC48" HREF="manual_4.html#SEC48">Testing</A>
-<LI><A NAME="TOC49" HREF="manual_4.html#SEC49">Further reading</A>
+<A NAME="TOC44" HREF="manual_4.html#SEC44">4.1 Limitations of the compressed file format</A>
+<BR>
+<A NAME="TOC45" HREF="manual_4.html#SEC45">4.2 Portability issues</A>
+<BR>
+<A NAME="TOC46" HREF="manual_4.html#SEC46">4.3 Reporting bugs</A>
+<BR>
+<A NAME="TOC47" HREF="manual_4.html#SEC47">4.4 Did you get the right package?</A>
+<BR>
+<A NAME="TOC48" HREF="manual_4.html#SEC48">4.5 Testing</A>
+<BR>
+<A NAME="TOC49" HREF="manual_4.html#SEC49">4.6 Further reading</A>
+<BR>
 </UL>
 </UL>
-<P><HR><P>
-This document was generated on 23 March 2000 using the
-<A HREF="http://wwwcn.cern.ch/dci/texi2html/">texi2html</A>
-translator version 1.51a.</P>
+<HR SIZE=1>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Julian Seward</I> on <I>January, 5  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
 </BODY>
 </HTML>
diff --git a/bz2lib/mk251.c b/bz2lib/mk251.c
new file mode 100644 (file)
index 0000000..205778a
--- /dev/null
@@ -0,0 +1,16 @@
+
+/* Spew out a long sequence of the byte 251.  When fed to bzip2
+   versions 1.0.0 or 1.0.1, causes it to die with internal error
+   1007 in blocksort.c.  This assertion misses an extremely rare
+   case, which is fixed in this version (1.0.2) and above.
+*/
+
+#include <stdio.h>
+
+int main ()
+{
+   int i;
+   for (i = 0; i < 48500000 ; i++)
+     putchar(251);
+   return 0;
+}
index 983089d4684dcc1d3d44bf422975bbc02bd80ccf..5c922e94f3c55ef29625addd82657c54b4183847 100644 (file)
@@ -8,7 +8,7 @@
   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.
+  Copyright (C) 1996-2002 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
index 8486a84c8b39e690a79cc390ae8af81435ce721e..7a6b462443cf32b01e2b51964ef33b7aff77ecad 100644 (file)
@@ -15,8 +15,8 @@ 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).
+It is available in Postscript form (manual.ps), PDF form (manual.pdf),
+and HTML form (manual_toc.html).
 
 You can also do "bzip2 --help" to see some helpful information. 
 "bzip2 -L" displays the software license.
This page took 0.431865 seconds and 5 git commands to generate.