From cf5dd463506a1132944d724d49828bcbb44610e8 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Mon, 5 May 2003 10:57:53 +0000 Subject: [PATCH] Initial revision --- buddy/CHANGES | 200 + buddy/README | 118 + buddy/config | 46 + buddy/doc/bddnotes.ps | 15417 +++++++++++++++++ buddy/doc/buddy.ps | 7287 ++++++++ buddy/doc/makefile | 1 + buddy/doc/tech.txt | 186 + buddy/examples/adder/adder.cxx | 218 + buddy/examples/adder/makefile | 36 + buddy/examples/calculator/example.cal | 10 + buddy/examples/calculator/examples/c1355.cal | 818 + buddy/examples/calculator/examples/c1908.cal | 531 + buddy/examples/calculator/examples/c2670.cal | 1237 ++ buddy/examples/calculator/examples/c3540.cal | 2007 +++ buddy/examples/calculator/examples/c432.cal | 260 + buddy/examples/calculator/examples/c499.cal | 409 + buddy/examples/calculator/examples/readme | 3 + buddy/examples/calculator/hashtbl.cxx | 174 + buddy/examples/calculator/hashtbl.h | 56 + buddy/examples/calculator/lexer.l | 101 + buddy/examples/calculator/makefile | 48 + buddy/examples/calculator/parser.h | 44 + buddy/examples/calculator/parser.y | 457 + buddy/examples/calculator/readme | 99 + buddy/examples/calculator/slist.h | 235 + buddy/examples/calculator/tokens.h | 41 + buddy/examples/cmilner/makefile | 36 + buddy/examples/cmilner/milner.c | 299 + buddy/examples/cmilner/readme | 7 + buddy/examples/fdd/makefile | 36 + buddy/examples/fdd/statespace.cxx | 77 + buddy/examples/internal/bddtest.cxx | 143 + buddy/examples/internal/makefile | 38 + buddy/examples/milner/makefile | 36 + buddy/examples/milner/milner.cxx | 183 + buddy/examples/milner/readme | 15 + buddy/examples/money/makefile | 36 + buddy/examples/money/money.cxx | 73 + buddy/examples/queen/makefile | 37 + buddy/examples/queen/queen.cxx | 133 + buddy/examples/solitare/makefile | 36 + buddy/examples/solitare/readme | 35 + buddy/examples/solitare/solitare.cxx | 222 + buddy/makefile | 112 + buddy/src/bdd.h | 833 + buddy/src/bddio.c | 593 + buddy/src/bddop.c | 2832 +++ buddy/src/bddtest.cxx | 110 + buddy/src/bddtree.h | 60 + buddy/src/bvec.c | 1352 ++ buddy/src/bvec.h | 297 + buddy/src/cache.c | 97 + buddy/src/cache.h | 70 + buddy/src/cppext.cxx | 624 + buddy/src/depend.inf | 12 + buddy/src/fdd.c | 1077 ++ buddy/src/fdd.h | 173 + buddy/src/imatrix.c | 149 + buddy/src/imatrix.h | 59 + buddy/src/kernel.c | 1492 ++ buddy/src/kernel.h | 227 + buddy/src/makefile | 49 + buddy/src/pairs.c | 335 + buddy/src/prime.c | 321 + buddy/src/prime.h | 48 + buddy/src/reorder.c | 2322 +++ buddy/src/tree.c | 222 + 67 files changed, 44947 insertions(+) create mode 100644 buddy/CHANGES create mode 100644 buddy/README create mode 100644 buddy/config create mode 100644 buddy/doc/bddnotes.ps create mode 100644 buddy/doc/buddy.ps create mode 100644 buddy/doc/makefile create mode 100644 buddy/doc/tech.txt create mode 100644 buddy/examples/adder/adder.cxx create mode 100644 buddy/examples/adder/makefile create mode 100644 buddy/examples/calculator/example.cal create mode 100644 buddy/examples/calculator/examples/c1355.cal create mode 100644 buddy/examples/calculator/examples/c1908.cal create mode 100644 buddy/examples/calculator/examples/c2670.cal create mode 100644 buddy/examples/calculator/examples/c3540.cal create mode 100644 buddy/examples/calculator/examples/c432.cal create mode 100644 buddy/examples/calculator/examples/c499.cal create mode 100644 buddy/examples/calculator/examples/readme create mode 100644 buddy/examples/calculator/hashtbl.cxx create mode 100644 buddy/examples/calculator/hashtbl.h create mode 100644 buddy/examples/calculator/lexer.l create mode 100644 buddy/examples/calculator/makefile create mode 100644 buddy/examples/calculator/parser.h create mode 100644 buddy/examples/calculator/parser.y create mode 100644 buddy/examples/calculator/readme create mode 100644 buddy/examples/calculator/slist.h create mode 100644 buddy/examples/calculator/tokens.h create mode 100644 buddy/examples/cmilner/makefile create mode 100644 buddy/examples/cmilner/milner.c create mode 100644 buddy/examples/cmilner/readme create mode 100644 buddy/examples/fdd/makefile create mode 100644 buddy/examples/fdd/statespace.cxx create mode 100644 buddy/examples/internal/bddtest.cxx create mode 100644 buddy/examples/internal/makefile create mode 100644 buddy/examples/milner/makefile create mode 100644 buddy/examples/milner/milner.cxx create mode 100644 buddy/examples/milner/readme create mode 100644 buddy/examples/money/makefile create mode 100644 buddy/examples/money/money.cxx create mode 100644 buddy/examples/queen/makefile create mode 100644 buddy/examples/queen/queen.cxx create mode 100644 buddy/examples/solitare/makefile create mode 100644 buddy/examples/solitare/readme create mode 100644 buddy/examples/solitare/solitare.cxx create mode 100644 buddy/makefile create mode 100644 buddy/src/bdd.h create mode 100644 buddy/src/bddio.c create mode 100644 buddy/src/bddop.c create mode 100644 buddy/src/bddtest.cxx create mode 100644 buddy/src/bddtree.h create mode 100644 buddy/src/bvec.c create mode 100644 buddy/src/bvec.h create mode 100644 buddy/src/cache.c create mode 100644 buddy/src/cache.h create mode 100644 buddy/src/cppext.cxx create mode 100644 buddy/src/depend.inf create mode 100644 buddy/src/fdd.c create mode 100644 buddy/src/fdd.h create mode 100644 buddy/src/imatrix.c create mode 100644 buddy/src/imatrix.h create mode 100644 buddy/src/kernel.c create mode 100644 buddy/src/kernel.h create mode 100644 buddy/src/makefile create mode 100644 buddy/src/pairs.c create mode 100644 buddy/src/prime.c create mode 100644 buddy/src/prime.h create mode 100644 buddy/src/reorder.c create mode 100644 buddy/src/tree.c diff --git a/buddy/CHANGES b/buddy/CHANGES new file mode 100644 index 000000000..af636643f --- /dev/null +++ b/buddy/CHANGES @@ -0,0 +1,200 @@ +---------------------------------------------------------------------------- + Logfile for changes to the BDD package +---------------------------------------------------------------------------- + ++ means added code +x means bugfix or changed code +- means removed code + +Thanks to the following people for bug reports, suggestions and source code: + Alan Mishchenko + Gerd Behrmann + Henrik Hulgaard + Henrik Reif Andersen + Jacob Lichtenberg + Ken Larsen + Nicola Soranzo + Nikolaj Bjorner + + +VER 2.2 (november 2002) +----------------------- + + Added bvec_ite() for calculating an if-then-else operation on + a boolean vector. + x Fixed some garbage collection problems introduced in version 2.1. + + +VER 2.1 (march 2002) +-------------------- + + Added bdd_allsat() for calculating all possible variable assignments + to a bdd. + x Fixed some wrong garbage collection #defines in kernel.h. If you + haven't experinced any problems using BuDDy, then this should not + be an issue. No bug reports reported for this one - found by code + inspection thanx to Nicola Soranzo. + x Fixed some copy paste errors in the prime number calculation. + This should not be an issue. No bug reports reported for this one + - found by code inspection thanx to Nicola Soranzo. + + +VER 2.0 (march 2001) +-------------------- + x Change the copyright notice to a more acceptable form. + x Speedup changes in bdd_support() + x Rewrote all the prime number calculations in order to get the + copyright right. + + +VER 1.9 (august 2000) +--------------------- + + Added bdd_pathcount + + Added bdd_anodecount + + Added bdd_buildcube, bdd_ibuildcube + x Bugfix in bdd_satcountset and bdd_satcountlnset. This corrects a bug + introduced in version 1.8. + x bug fixes in bdd_constraint and bdd_simplify. Both did calculate a + correct cofactor, but not necessarily a minimal one. Changed the name + of bdd_constraint to bdd_constrain at the same time. + x bug fix in memory allocation for bdd_addvarblock + x Changed functions in bddop.c in order to avoid some compiler warnings. + x Makefile also installs "fdd.h" and "bvec.h". + x Small #include fix in N-Queen example. + x Minor changes in the documentation. + + +VER 1.8 (may 2000) +------------------ + + Bugfix in the kernel: canonicity was not unfortunately not guaranteed + on certain compilers (at least the microsoft visual C compiler) due to a + signed/unsigned bug in kernel.c (and actually not microsofts fault). + + Speedups in the reordering code. + + Added the use of an interaction matrix for variable swapping. + + Added bdd_satoneset + + Added bdd_getallocnum + + Added bdd_setvarorder + + Added bdd_unique, bdd_appuni. + + Added bvec_shlfixed, bvec_shrfixed and changed the prototype for + bvec_shl and bvec_shr. + + Added bvec_mulfixed, bdd_divfixed, bdd_div and changed the + prototype for bvec_mul. + + Added bdd_printstat + + Added new examples: solitare and money + + Forces cache tables to prime-number size. + + Added bdd_clear_error() if anybody needs that. + + Added reorder method WIN3 and WIN3ITE + x Small change in queen.cxx - with a huge impact on runtime! + x Bugfix in reordering. In some cases reordering would go on forever; + first reroder, then retry, then reorder again without resize etc. always + reordering in the same operation. Now at most one reordering is allowed + for each bdd operation. + x Bugfix in C++ printing in Dot format. Wrote zero for one and vice versa. + x Bugfix in the garbage collector. If bdd_setmaxincrease was used, then + BuDDy would call bdd_error prematurely. Not a major bug, but annoying. + x Bugfix in bdd_load. + x Speedup in bdd_satcountset and bdd_satcountlnset + x Updates to the docs. + x Updates to the makefiles + + +VER 1.7 (september 1999) +------------------------ + + Added support for boolean vector operations used in integer arithmetics + + Split "bdd.h" into "bdd.h", "fdd.h" and "bvec.h" + + Added bdd_cachestats + + Added bdd_and, bdd_or, bdd_xor, bdd_impl, bdd_biimpl + (wrappers for bdd_apply). + + Added a BDD calculator for combinatorial circuits as an example. + + Added an example showing the use of the FDD interface. + + Added bdd_autoreorder_times, bdd_getreorder_method, bdd_getreorder_times, + bdd_reorder_probe, bdd_enable_reorder, bdd_disable_reorder, + bdd_var2level, bdd_level2var, bdd_reorder_gain, bdd_swapvar + + Added bdd_file_hook, bdd_strm_hook, fdd_file_hook, fdd_strm_hook + + Added support for dynamic resizing of the operator caches with + the function bdd_setcacheratio. + + Added more documentation. + x Bugfix in reordering code. This would appear when recursive variable + blocks were defined (blocks with sub-blocks). + x Speedup changes in the variable reordering code + x The automatic reordering threshhold function has been changed + x Automatic reordering is now interrupting and restarts bdd operations + x Prototype for bdd_reorder_hook changed. + x Printing of reorder information (verbose level > 0) is changed. + x The threshold for stopping of the iterative reordering methods has + been changed. The reordering now continues until no progress is done + at all (before it would stop when less than 5% where gained). + x Added a few sanity checks to many of the functions. + x Bugfix (parameter checking) in fdd_ithvar. + - bdd_varlevel removed (use bdd_var2level and bdd_level2var). + + +VER 1.6 (november 1998) +----------------------- + + Added bdd_resetpair + + Added bdd_satcountset, bdd_satcountlnset + + Added macro bdd_relprod + + Added fdd_overlapdomain + + Added fdd_domain + x Fixed a bug in bdd_setvarnum and bdd_extvarnum. + x Fixed a bug in bdd_newpair() which would give problems with reordering. + x Speedup changes in bdd_exist, bdd_forall, bdd_appex, bdd_appall + x Speedup changes in bdd_restrict + x Changed bdd_gbc_hook to include both pre and post garbage collection. + + +VER 1.5 (september 1998) +------------------------ + + Added bdd_cofactor + + Added and fixed some error checks in fdd.c + x Fixed a bug in bdd_setvarnum(). + + +VER 1.4 (july 1998) +------------------- + The package just got a name: BuDDy + + Added functions bdd_compose, bdd_veccompose, bdd_ite. + + Added functions bdd_setbddpair, bdd_setbddpairs. + + Added functions bdd_var, bdd_low, bdd_high. + + Added technical documentation in docs/tech.txt + x Overloaded C++ functions are not used any more. This mainly changes + the name of the printing functions in C++. + x Changed datatype names (You'll hate me for this one): + BddPair -> bddPair + BddStat -> bddStat + BddGbcStat -> bddGbcStat + x Added slightly more documentation. + x Some internal changes to the code - should not be visible to users. + + +VER 1.3 (june 1998) +------------------- + x Fixed a few serious bugs in the reordering code + + +VER 1.2 (june 1998) +------------------- + + Added support for dynamic variable reordering + + Added reordering handler (bdd_reorder_hook) + + More added to the docs + x Changed the event handlers (bdd_xxx_hook) + + +VER 1.1 (april 1998) +-------------------- + + Added bdd_varprofile + + Added fdd_scanset + + Mucho better documentation. + + Added Henrik Reif Andersen's BDD notes to the documentation. + + Added BDD_REORDER_RANDOM for test purposes (usefull for others?) + x Fixed a bug in bdd_appex and bdd_appall. + x Fixed a bug in bdd_simplify. + x Speed fixup to fdd_extdomain + x Lots of small (insignificant?) bug fixes in fdd.c. + x bdd_load/save updated to take reordering into account. + x Generalized bdd_restrict to use a BDD variable set. + x Fixed the identifiers for the operator caches. + x The math functions log1p and pow2 has been removed as they didn't + exist on some systems. The same applies to M_LN2. + x New file structure and makefiles. + - Removed bdd_break, bdd_restart1 + + diff --git a/buddy/README b/buddy/README new file mode 100644 index 000000000..4e7c7d29e --- /dev/null +++ b/buddy/README @@ -0,0 +1,118 @@ +========================================================================== + *** BuDDy *** + Binary Decision Diagrams + Library Package v2.2 +-------------------------------------------------------------------------- + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================== + + + +--------------------------------------------------------------------- +--- REQUIREMENTS ---------------------------------------------------- +--------------------------------------------------------------------- + +* A (not to old) C++ compiler +* A machine that supports 32 bit integers + + +--------------------------------------------------------------------- +--- INSTALLING ------------------------------------------------------ +--------------------------------------------------------------------- + +2) Edit the file "config" to specify your compiler options and +where the package is to be installed. + +3) type "make" to make the binary. + +4) type "make install" to copy the BDD files to their appropriate +directories. + +5) type "make examples" to make the examples + + +--------------------------------------------------------------------- +--- USING ----------------------------------------------------------- +--------------------------------------------------------------------- + +Assuming that the files "bdd.h" and "libbdd.a" are in directories +"/usr/local/include" and "/usr/local/lib" then the compile command +could be: + + g++ -I/usr/local/include myfile.cc -o myfile -L/usr/local/lib -lbdd + +Your machine may be setup to use the above directories auto- +matically, so you might be able to do: + + g++ myfile.cc -o myfile -lbdd + + +--------------------------------------------------------------------- +--- FILES ----------------------------------------------------------- +--------------------------------------------------------------------- + +src: All files needed for the BuDDy package. +examples: Example files + fdd: An example of use of the FDD interface. + calculator: An example of a BDD calculator. Uses reordering. + adder: Construction of a N-bit adder. Uses reordering. + milner: A calculation of the reachable statespace for Milner's + scheduler. C++. + cmilner: As above but purely in ANSI-C. + queen: Solution to the N-queen chess problem. + solitare: Solution to a solitare game. + money: Solution to the send-more-money problem (bvec demo). + internal: Some internal regression tests. +doc: Documentation. + buddy.ps: Package documentation. + bddnotes.ps: BDD introduction notes. + + +--------------------------------------------------------------------- +--- FEEDBACK -------------------------------------------------------- +--------------------------------------------------------------------- + +Please do not hesitate to send any questions or bug reports to: + + Jorn Lind-Nielsen: buddy@itu.dk + (or maybe jorn_lind_nielsen@hotmail.com or jln@fjeldgruppen.dk) + +It may take some time to get an answer since BuDDy do not have that +much focus any more - but I'll try to give a reasonable answer +in (finite) time. + +New updates and other info can be found at: + + http://www.it-c.dk/research/buddy/ + (or http://www.itu.dk/research/buddy) + + +Hope you find some use for this software + + Jorn Lind-Nielsen + diff --git a/buddy/config b/buddy/config new file mode 100644 index 000000000..25886737a --- /dev/null +++ b/buddy/config @@ -0,0 +1,46 @@ +# ============================================================== +# Makefile for the BuDDy package +# - Edit the lines below to configure +# ============================================================== + +# --- Your compiler flags +CFLAGS = -g -ansi -Wmissing-prototypes -Wall + +# --- Where to install the library (directory, no trailing slash) +LIBDIR = /usr/local/lib + +# --- Where to install the include file (directory, no trailing slash) +INCDIR = /usr/local/include + +# --- Your C compiler +CC = gcc + +# --- Your C++ compiler +CPP = g++ + +# Some machines are missing "CLOCKS_PER_SEC". Please define a default value +# If you do not know this, then leave it as it is. +CLOCK=60 + +CLOCKFLAG = -DDEFAULT_CLOCK=$(CLOCK) + +# Debugging and statistical flags. Possible values are: +# -DSWAPCOUNT : Count number of fundamental variable swaps +# -DCACHESTATS : Gather statistical information about operator and +# unique node caching +DEBUGFLAGS = + +# Some of the BuDDy library needs 64 bit arithmetics. +# With gnu C++, Microsoft C++ and KAI C++ this is part of the +# language and used by BuDDy. With other compilers BuDDy need +# to implement the math it self -- which is a bit slower. If +# you now of a 64 bit unsigned integer type on your platform +# then define that in the BUDDYUINT64 variable. Example: +# BUDDYUINT64 = -DBUDDYUINT64="long long" + + +# -------------------------------------------------------------- +# Do not touch +# -------------------------------------------------------------- +DFLAGS = $(CLOCKFLAG) $(DEBUGFLAGS) $(BUDDYUINT64) + diff --git a/buddy/doc/bddnotes.ps b/buddy/doc/bddnotes.ps new file mode 100644 index 000000000..3c1960b52 --- /dev/null +++ b/buddy/doc/bddnotes.ps @@ -0,0 +1,15417 @@ +%!PS-Adobe-2.0 +%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software +%%Title: bdd-49285.dvi +%%Pages: 37 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSCommandLine: dvips bdd-49285 +%DVIPSParameters: dpi=600, comments removed +%DVIPSSource: TeX output 1998.04.28:1011 +%%BeginProcSet: tex.pro +/TeXDict 250 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]{ch-image}imagemask restore}B /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 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +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 product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{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 +%%EndProcSet +%%BeginProcSet: special.pro +TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N +/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen +false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B +/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit +div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ +/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ +10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B +/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale +true def end /@MacSetUp{userdict /md known{userdict /md get type +/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup +length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} +N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath +clippath mark{transform{itransform moveto}}{transform{itransform lineto} +}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ +itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ +closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 +0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N +/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 +scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get +ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip +not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 +TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR +pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 +-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg +TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg +sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr +0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add +2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp +{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 +div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} +N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict +maxlength dict begin /magscale true def normalscale currentpoint TR +/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts +/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx +psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy +scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR +/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict +begin /SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial +{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath +}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ +end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} +N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ +/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX +SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X +/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad +yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end +%%EndProcSet +TeXDict begin 40258431 52099146 1000 600 600 (bdd-49285.dvi) +@start /Fa 3 112 df<00003FF000003FF000003FF0000007F0000007F0000007F00000 +07F0000007F0000007F0000007F0000007F0000007F0000007F0007FC7F003FFFFF007FF +FFF01FE03FF03F800FF07F0007F07F0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE00 +07F0FE0007F0FE0007F0FE0007F07F0007F07F000FF03F801FF01FE07FF00FFFFFFE03FF +F7FE007F87FE1F237EA226>100 D109 +D<003FE00001FFFC0007FFFF001FE03FC03F800FE03F0007E07E0003F07E0003F0FE0003 +F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F87E0003F07F0007F03F0007E03F800F +E01FE03FC007FFFF0003FFFE00007FF0001D167E9523>111 D E +/Fb 3 117 df<00007F000003FFC0000FC0F0003F0038007C003800F800F801F001F803 +E003F807E003F80FC003F80F8001F01F8000003F8000003F0000003F0000007F0000007E +0000007E0000007E0000007E000000FC000000FC000000FC0000007C0000007C00000C7C +00001C7C0000383E0000703E0000E01F0003C00F800F0007C07E0001FFF000007F80001E +227EA021>99 D<0007E0000003FFE0000003FFE0000003FFC00000001FC00000001FC000 +00001FC00000001F800000001F800000001F800000003F800000003F000000003F000000 +003F000000007F000000007E000000007E000000007E00000000FE00000000FC0FE00000 +FC3FF80000FCF07E0001FFC03F0001FF001F0001FE001F0001FC001F8003FC001F8003F8 +001F8003F0001F8003F0003F8007F0003F0007E0003F0007E0003F0007E0007F000FE000 +7E000FC0007E000FC000FE000FC000FC001FC000FC001F8001FC001F8001F8081F8001F8 +1C3F8003F8183F0003F0183F0003F0383F0007F0307F0007E0307E0007E0707E0003E0E0 +7E0003E1C0FE0001E380FC0000FF003800003C0026357DB32C>104 +D<000380000FC0000FC0000FC0001FC0001FC0001F80001F80003F80003F80003F00003F +00007F00007F00007E007FFFFE7FFFFEFFFFFE00FC0000FC0001FC0001FC0001F80001F8 +0003F80003F80003F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0 +081FC01C1FC0181F80181F80381F80701F80601F00E01F01C00F83800F870007FE0001F8 +0017307FAE1C>116 D E /Fc 3 96 df<7FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FF +FFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF807FFFFFFFFFFFFFFF80000000000000000F8000 +0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 +0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 +0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 +0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 +0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 +0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 +0000000000000F80000000000000000200412079A950>58 D<00000001C0000000000000 +0003E00000000000000003E00000000000000007F00000000000000007F0000000000000 +000FF8000000000000000FF8000000000000000FF8000000000000001FFC000000000000 +001F7C000000000000003F7E000000000000003E3E000000000000007E3F000000000000 +007C1F000000000000007C1F00000000000000FC1F80000000000000F80F800000000000 +01F80FC0000000000001F007C0000000000003F007E0000000000003E003E00000000000 +03E003E0000000000007E003F0000000000007C001F000000000000FC001F80000000000 +0F8000F800000000001F8000FC00000000001F00007C00000000001F00007C0000000000 +3F00007E00000000003E00003E00000000007E00003F00000000007C00001F0000000000 +FC00001F8000000000F800000F8000000000F800000F8000000001F800000FC000000001 +F0000007C000000003F0000007E000000003E0000003E000000007E0000003F000000007 +C0000001F000000007C0000001F00000000FC0000001F80000000F80000000F80000001F +80000000FC0000001F000000007C0000003F000000007E0000003E000000003E0000003E +000000003E0000007E000000003F0000007C000000001F000000FC000000001F800000F8 +000000000F800001F8000000000FC00001F00000000007C00001F00000000007C00003F0 +0000000007E00003E00000000003E00007E00000000003F00007C00000000001F0000FC0 +0000000001F8000F800000000000F8000F800000000000F8001F800000000000FC001F00 +00000000007C003F0000000000007E003E0000000000003E007E0000000000003F007C00 +00000000001F007C0000000000001F00FC0000000000001F80F80000000000000F80F800 +00000000000F80700000000000000700414B79C750>94 D<700000000000000700F80000 +000000000F80F80000000000000F80FC0000000000001F807C0000000000001F007C0000 +000000001F007E0000000000003F003E0000000000003E003F0000000000007E001F0000 +000000007C001F800000000000FC000F800000000000F8000F800000000000F8000FC000 +00000001F80007C00000000001F00007E00000000003F00003E00000000003E00003F000 +00000007E00001F00000000007C00001F00000000007C00001F8000000000FC00000F800 +0000000F800000FC000000001F8000007C000000001F0000007E000000003F0000003E00 +0000003E0000003E000000003E0000003F000000007E0000001F000000007C0000001F80 +000000FC0000000F80000000F80000000FC0000001F800000007C0000001F000000007C0 +000001F000000007E0000003F000000003E0000003E000000003F0000007E000000001F0 +000007C000000001F800000FC000000000F800000F8000000000F800000F8000000000FC +00001F80000000007C00001F00000000007E00003F00000000003E00003E00000000003F +00007E00000000001F00007C00000000001F00007C00000000001F8000FC00000000000F +8000F800000000000FC001F8000000000007C001F0000000000007E003F0000000000003 +E003E0000000000003E003E0000000000003F007E0000000000001F007C0000000000001 +F80FC0000000000000F80F80000000000000FC1F800000000000007C1F00000000000000 +7C1F000000000000007E3F000000000000003E3E000000000000003F7E00000000000000 +1F7C000000000000001FFC000000000000000FF8000000000000000FF800000000000000 +0FF80000000000000007F00000000000000007F00000000000000003E000000000000000 +03E00000000000000001C000000000414B79C750>I E /Fd 1 49 +df<01E003F003F003F003F007E007E007C00FC00FC00F800F801F001F001E001E003E00 +3C003C007800780078007000F000E00060000C1A7E9B12>48 D E +/Fe 1 62 df<7FFFFFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFF +FFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC07FFFFFFFFFFFFFFFFFFFFF80000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000007FFFFFFFFFFF +FFFFFFFFFF80FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFF +FFFFFFFFFFC07FFFFFFFFFFFFFFFFFFFFF805A1F7AB267>61 D E +/Ff 1 95 df<000000000380000000000000000007C000000000000000000FE000000000 +000000000FE000000000000000000FE000000000000000001FF000000000000000001FF0 +00000000000000003FF800000000000000003FF800000000000000007FFC000000000000 +00007EFC00000000000000007EFC0000000000000000FEFE0000000000000000FC7E0000 +000000000001FC7F0000000000000001F83F0000000000000003F83F8000000000000003 +F01F8000000000000007F01FC000000000000007E00FC000000000000007E00FC0000000 +0000000FE00FE00000000000000FC007E00000000000001FC007F00000000000001F8003 +F00000000000003F8003F80000000000003F0001F80000000000003F0001F80000000000 +007F0001FC0000000000007E0000FC000000000000FE0000FE000000000000FC00007E00 +0000000001FC00007F000000000001F800003F000000000003F800003F800000000003F0 +00001F800000000003F000001F800000000007F000001FC00000000007E000000FC00000 +00000FE000000FE0000000000FC0000007E0000000001FC0000007F0000000001F800000 +03F0000000003F80000003F8000000003F00000001F8000000003F00000001F800000000 +7F00000001FC000000007E00000000FC00000000FE00000000FE00000000FC000000007E +00000001FC000000007F00000001F8000000003F00000001F8000000003F00000003F800 +0000003F80000003F0000000001F80000007F0000000001FC0000007E0000000000FC000 +000FE0000000000FE000000FC00000000007E000001FC00000000007F000001F80000000 +0003F000001F800000000003F000003F800000000003F800003F000000000001F800007F +000000000001FC00007E000000000000FC0000FE000000000000FE0000FC000000000000 +7E0001FC0000000000007F0001F80000000000003F0001F80000000000003F0003F80000 +000000003F8003F00000000000001F8007F00000000000001FC007E00000000000000FC0 +0FE00000000000000FE00FC000000000000007E00FC000000000000007E01FC000000000 +000007F01F8000000000000003F03F8000000000000003F83F0000000000000001F87F00 +00000000000001FC7E0000000000000000FCFE0000000000000000FEFC00000000000000 +007EFC00000000000000007EF800000000000000003E7800000000000000001C4F5978D5 +60>94 D E /Fg 8 58 df<00000FE00000003FF8000000F03E000003C01F000007800F80 +000F000F80001E0007C0001C0007C000380007C00078C007E00070E007E000F06007E000 +E06007E001E06007E001C06007E001C0E00FE003C0C00FC00380C00FC00381C00FC00381 +801FC00383801F800387003F80038E003F0001FC007E0000F000FC00000001F800000003 +F000000007E00000000FC00000001F000000007E00000000F800000003E00000000FC000 +00001F000000003E000000007800000001F000038003E000038003C00007800780000700 +0F00000F001E00000F001C00001E003F00003E003FF8007C007DFF80F800781FFFF800F0 +0FFFF000E003FFE000E001FF8000E0007E000023347AB127>50 D<000007F00000003FFC +000000F81E000003E00F000007800780000F0007C0001E0003C0003C0003C000380003E0 +00798003E00071C003E00070C007E000F0C007C000E0C007C000E0C007C000E1C00FC000 +E3800F80007F001F80003C001F000000003E000000007C00000000F800000001F0000000 +1FE0000007FF80000007FE00000003FF0000000007C000000003E000000003E000000001 +F000000001F000000001F000000001F000000001F000000003F000180003F0007E0003F0 +007E0003F0007E0007F000FC0007E000F80007E000E0000FC000E0000FC000F0001F8000 +70003F000070007E00007800FC00003C01F000001E07E0000007FF80000001FC00000023 +3479B127>I<0000000E0000001F0000001F0000003F0000003E0000003E0000003E0000 +007E0000007C0000007C000000FC000000F8000000F8000001F8000001F0000001F00000 +03E0000003E0000003E0000007C0000007C000000F8000000F8000001F0000001F000000 +3E0000003E0000007C00000078000000F8000000F0000001F0000003E0E00003C1F00007 +81F0000F83F0000F03E0001E03E0003C03E0007C07E000F807C001F007C003E007C007C0 +0FC00F800F801FFC0F803FFFCF807FFFFF82F003FFFF60003FFF00001FF800003F000000 +3E0000003E0000003E0000007E0000007C0000007C0000007C000000FC000000F8000000 +F8000000F8000000F8000000600020417DB127>I<00060000C0000FC00FC0000FFFFF80 +000FFFFF00000FFFFC00001FFFF000001FFFC000001CFE0000001C000000003C00000000 +3800000000380000000038000000007800000000700000000070000000007000000000F0 +00000000E0FE000000E3FF800000EF03C00001FC01E00001F801F00001F000F00001E000 +F80003C000F800038000F800000000F800000000F800000000F800000000F800000001F8 +00000001F800000001F800000001F8003C0003F800FC0003F000FC0003F000FC0003F000 +FC0007E000F80007E000E0000FC000E0000FC000E0001F8000E0003F0000F0007E000070 +00FC00007801F800003E07F000001FFFC000000FFF00000003F8000000223478B127>I< +000001F80000000FFE0000003FFF000000FE0F000001F807800003E00F800007C01F8000 +0F803F80001F003F00003E003F00007C000E0000FC00000000F800000001F800000003F0 +00000003F000000007E000000007E00000000FC1F800000FC7FF00000FDE0780001FB803 +C0001FF003E0001FE001E0003FE001F0003FC001F0003F8001F0003F8001F0007F0001F8 +007F0001F8007E0001F8007E0003F0007E0003F000FC0003F000FC0003F000FC0007F000 +FC0007E000FC0007E000F80007E000F8000FC000F8000FC000F8000F8000F8001F8000F8 +003F000078003E00007C007C00007C00F800003E01F000001F07E000001FFFC0000007FF +00000001F8000000213477B127>I<00E0F8003800E3FC003801EFFE007801FFFE00F003 +FFFE01E003FE0E03E007F80E03C007F0060F800FC0071F800F8003FF001F0001EF001E00 +001E003E00003C003C00003C007800007800780000F800F00000F000E00001F000E00001 +E000000003E000000007C000000007C00000000F800000000F800000001F800000001F00 +0000003F000000003E000000007E000000007E00000000FC00000000FC00000001F80000 +0001F800000001F800000003F000000003F000000007F000000007E000000007E0000000 +0FE00000000FC00000000FC00000001FC00000001FC00000001F800000003F800000003F +800000003F800000003F000000003F000000001C000000253476B127>I<000007E00000 +003FFC0000007FFE000001F81F000003E00F800007800780000F0007C0001F0003C0001E +0003C0003C0003C0003C0003C0003C0007C0007C000780007C000780007C000F80007C00 +0F00007E001E00007F003E00007F807C00003FC0F800003FE1E000001FFBC000000FFF00 +000007FE00000003FF00000007FF8000001EFFC000007C7FE00000F01FF00001E00FF800 +07C007F800078003F8000F0001F8001E0000F8003E0000F8003C000078007C0000780078 +000078007800007800780000F800F80000F000F00000F000F80001E000780003E0007800 +03C0007C000780003C001F00003E003E00001F81FC00000FFFF0000003FFC0000000FE00 +0000223479B127>I<00000FC00000007FF0000000FFFC000003F07E000007C03E00000F +801F00001F001F00003E000F00007E000F8000FC000F8000FC000F8001F8000F8001F800 +0F8003F0000F8003F0001F8003F0001F8007F0001F8007E0001F8007E0001F8007E0003F +0007E0003F000FC0003F000FC0007F000FC0007F0007C000FE0007C000FE0007C001FE00 +07C003FE0003C003FC0003E007FC0001E00EFC0000F03DF800007FF1F800000FC1F80000 +0003F000000003F000000007E000000007E000000007C00000000F800000001F80003800 +1F00007E003E0000FE007E0000FE00FC0000FC01F80000F803F00000F007E00000781F80 +00007FFF0000001FFC00000007E0000000213478B127>I E /Fh +7 104 df<00000007F00000000000003FFE000000000000FFFF00F000000003FC0F81FC +0000000FF007C3FC0000001FC003E7FC0000007F8001F7FC000000FF0000F7FC000001FE +0000FFFC000003FC00007FF8000007F800007FF800000FF800003FF800001FF000003FF8 +00003FE000003FF000003FE000003FF000007FC000001FF00000FFC000003FF00000FF80 +00003FE00001FF8000003FE00003FF8000003FE00003FF0000007FE00007FF0000007FC0 +0007FF0000007FC0000FFE0000007FC0000FFE000000FFC0000FFE000000FF80001FFC00 +0000FF80001FFC000000FF80001FFC000001FF80003FFC000001FF00003FF8000001FF00 +003FF8000001FF00003FF8000003FF00007FF8000003FE00007FF0000003FE00007FF000 +0003FE00007FF0000007FE00007FF0000007FC00007FE0000007FC0000FFE0000007FC00 +00FFE000000FFC0000FFE000000FF80070FFE000000FF800F0FFC000000FF800F0FFC000 +001FF800F07FC000001FF001F07FC000001FF001E07FC000001FF001E07FC000003FF003 +E07FC000007FF003C07FC000007FE003C03FC00000FFE003C03FC00001FFE007803FC000 +03FFE007801FE00007DFE00F801FE0000F9FE00F000FE0001F1FE01F0007F0003E1FE01E +0003F8007C0FE03E0003FC01F807F07C0000FE07E003F0F800007FFFC001FFF000001FFF +0000FFE0000003F800001F80003C4071BE48>97 D<000007E0000000000FFFF000000001 +FFFFF000000003FFFFE000000003FFFFE000000001FFFFE00000000001FFE00000000000 +FFC000000000007FC00000000000FFC00000000000FFC00000000000FF800000000000FF +800000000000FF800000000001FF800000000001FF000000000001FF000000000001FF00 +0000000003FF000000000003FE000000000003FE000000000003FE000000000007FE0000 +00000007FC000000000007FC000000000007FC00000000000FFC00000000000FF8000000 +00000FF800000000000FF800000000001FF800000000001FF000000000001FF000000000 +001FF000000000003FF000000000003FE000000000003FE000000000003FE00FF0000000 +7FE03FFE0000007FC0FFFF0000007FC3F01FC000007FC7C00FE00000FFDF8007F00000FF +BE0007F80000FFFC0003F80000FFF80003FC0001FFF00001FE0001FFE00001FE0001FFC0 +0001FE0001FFC00001FF0003FF800000FF0003FF000000FF0003FE000000FF8003FE0000 +00FF8007FE000001FF8007FC000001FF8007FC000001FF8007FC000001FF800FFC000001 +FF800FF8000001FF800FF8000001FF800FF8000003FF801FF8000003FF801FF0000003FF +801FF0000003FF801FF0000007FF803FF0000007FF003FE0000007FF003FE0000007FF00 +3FE000000FFF007FE000000FFE007FC000000FFE007FC000000FFE007FC000001FFE007F +C000001FFC007F8000001FFC00FF8000001FF800FF8000003FF800FF8000003FF800FF80 +00003FF000FF8000007FF000FF0000007FE000FF000000FFC0007F000000FFC0007F0000 +00FF80007F000001FF80007F000001FF00007F000003FE00007F800007FC00003F800007 +F800003F80000FF800001F80001FF000001FC0003FE000000FC0003F8000000FE000FF00 +000007E001FE00000003F003FC00000001FC0FF000000000FFFFC0000000003FFF000000 +000007F800000000316570E341>I<00000001FF00000000001FFFE0000000007FFFF800 +000001FF01FE00000007F8003F0000001FE0001F8000003FC0000F800000FF800007C000 +01FE000003C00003FC00000FC00007FC00003FC0000FF800007FC0001FF00000FFC0003F +E00001FFC0007FE00001FFC000FFC00001FFC000FF800001FFC001FF800001FF8003FF00 +0000FF0003FF0000007C0007FF000000000007FE00000000000FFE00000000000FFC0000 +0000001FFC00000000001FFC00000000003FF800000000003FF800000000003FF8000000 +00007FF800000000007FF000000000007FF000000000007FF00000000000FFF000000000 +00FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFC00000000000 +FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FF +C00000000000FF800000000000FF800000000300FF800000000380FFC000000007C07FC0 +0000000F807FC00000001F007FC00000003F003FC00000007E003FE0000000FC001FE000 +0001F8000FE0000007E0000FF000000FC00007F800003F800003FC0000FE000001FE0007 +F80000007F807FE00000003FFFFF800000000FFFFC0000000000FFC0000000324070BE41 +>I<000000000000003F000000000000007FFF8000000000000FFFFF8000000000001FFF +FF0000000000001FFFFF0000000000000FFFFF000000000000000FFF0000000000000007 +FE0000000000000003FE0000000000000007FE0000000000000007FE0000000000000007 +FC0000000000000007FC000000000000000FFC000000000000000FFC000000000000000F +F8000000000000000FF8000000000000001FF8000000000000001FF8000000000000001F +F0000000000000001FF0000000000000003FF0000000000000003FF0000000000000003F +E0000000000000003FE0000000000000007FE0000000000000007FE0000000000000007F +C0000000000000007FC000000000000000FFC000000000000000FFC000000000000000FF +8000000000000000FF8000000000000001FF8000000000000001FF8000000000000001FF +0000000000000001FF000000000007F003FF00000000003FFE03FF0000000000FFFF03FE +0000000003FC0F83FE000000000FF007C7FE000000001FC003E7FE000000007F8001F7FC +00000000FF0000F7FC00000001FE0000FFFC00000003FC00007FFC00000007F800007FF8 +0000000FF800003FF80000001FF000003FF80000003FE000003FF80000003FE000003FF0 +0000007FC000001FF0000000FFC000003FF0000000FF8000003FF0000001FF8000003FE0 +000003FF8000003FE0000003FF0000007FE0000007FF0000007FE0000007FF0000007FC0 +00000FFE0000007FC000000FFE000000FFC000000FFE000000FFC000001FFC000000FF80 +00001FFC000000FF8000001FFC000001FF8000003FFC000001FF8000003FF8000001FF00 +00003FF8000001FF0000003FF8000003FF0000007FF8000003FF0000007FF0000003FE00 +00007FF0000003FE0000007FF0000007FE0000007FF0000007FE0000007FE0000007FC00 +0000FFE0000007FC000000FFE000000FFC000000FFE000000FFC007000FFE000000FF800 +F000FFC000000FF800F000FFC000001FF800F0007FC000001FF801F0007FC000001FF001 +E0007FC000001FF001E0007FC000003FF003E0007FC000007FF003C0007FC000007FE003 +C0003FC00000FFE003C0003FC00001FFE00780003FC00003FFE00780001FE00007DFE00F +80001FE0000F9FE00F00000FE0001F1FE01F000007F0003E1FE01E000003F8007C0FE03E +000003FC01F807F07C000000FE07E003F0F80000007FFFC001FFF00000001FFF0000FFE0 +00000003F800001F800000416571E348>I<00000003FF00000000001FFFC000000000FF +FFF000000003FE01FC0000000FF8007E0000003FE0003F0000007F80001F000001FF0000 +1F800003FE00000F800007FC00000F80000FF800000F80001FF000000F80003FE000000F +80007FE000000F8000FFC000000F8000FF8000000F8001FF8000001F8003FF0000001F00 +03FF0000003F0007FF0000003E000FFE0000007E000FFE000000FC001FFC000003F8001F +FC00000FF0001FFC00003FC0003FFC0003FF00003FF801FFFC00003FFFFFFFE000003FFF +FFFE0000007FFFFF000000007FF000000000007FF000000000007FF000000000007FF000 +00000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000 +000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000000 +00007FC000000000007FC000000000007FC000000003007FC000000003807FC000000007 +C03FC00000000F803FC00000001F003FE00000003F001FE00000007E001FE0000000FC00 +0FF0000001F8000FF0000007E00007F800000FC00003F800003F800001FC0000FE000000 +FE0007F80000007F807FE00000001FFFFF8000000007FFFC0000000000FFC00000003240 +70BE41>I<0000000000000FE0000000000000003FFC00000000000000FFFF0000000000 +0001F81F80000000000007F007C000000000000FE00FC000000000001FE03FE000000000 +001FC07FE000000000003FC0FFE000000000003F80FFE000000000007F80FFE000000000 +007F81FFC00000000000FF81FFC00000000000FF00FF800000000001FF00FF0000000000 +01FF003C000000000001FF0000000000000001FE0000000000000003FE00000000000000 +03FE0000000000000003FE0000000000000007FE0000000000000007FC00000000000000 +07FC0000000000000007FC0000000000000007FC000000000000000FFC00000000000000 +0FF8000000000000000FF8000000000000000FF8000000000000000FF800000000000000 +1FF8000000000000001FF0000000000000001FF0000000000000001FF000000000000000 +1FF0000000000000003FF0000000000000003FE0000000000000003FE0000000000003FF +FFFFFF8000000007FFFFFFFFC000000007FFFFFFFFC000000007FFFFFFFF800000000000 +7FC0000000000000007FC0000000000000007FC0000000000000007FC000000000000000 +FFC000000000000000FF8000000000000000FF8000000000000000FF8000000000000000 +FF8000000000000001FF8000000000000001FF0000000000000001FF0000000000000001 +FF0000000000000001FF0000000000000003FF0000000000000003FE0000000000000003 +FE0000000000000003FE0000000000000003FE0000000000000007FE0000000000000007 +FC0000000000000007FC0000000000000007FC0000000000000007FC000000000000000F +FC000000000000000FF8000000000000000FF8000000000000000FF8000000000000000F +F8000000000000001FF8000000000000001FF0000000000000001FF0000000000000001F +F0000000000000001FF0000000000000003FF0000000000000003FE0000000000000003F +E0000000000000003FE0000000000000003FE0000000000000007FE0000000000000007F +C0000000000000007FC0000000000000007FC0000000000000007FC000000000000000FF +C000000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF +8000000000000001FF8000000000000001FF0000000000000001FF0000000000000001FF +0000000000000001FF0000000000000003FF0000000000000003FE0000000000000003FE +0000000000000003FE0000000000000003FE0000000000000007FC0000000000000007FC +0000000000000007FC0000000000000007F8000000000000000FF8000000000000000FF8 +000000000000000FF8000000000000000FF0000000000000000FF0000000000000001FF0 +000000000000001FE0000000000000001FE0000000000007801FC000000000001FE03FC0 +00000000003FE03FC000000000007FF03F8000000000007FF03F800000000000FFE07F00 +0000000000FFE07F000000000000FFE07E000000000000FFC0FC000000000000FF80FC00 +00000000007E01F80000000000007C03F00000000000003F07E00000000000001FFFC000 +000000000007FF0000000000000001FC00000000000000438283E42B>I<000000000FE0 +0000000000007FFC000000000003FFFE01E000000007F81F03F80000001FE00F87F80000 +007F8007CFF8000000FF0003EFF8000001FE0001EFF8000003FC0000FFF8000007F80000 +FFF800000FF00000FFF000001FF000007FF000003FE000007FF000007FC000007FF00000 +7FC000007FE00000FF8000003FE00001FF8000007FE00001FF0000007FE00003FF000000 +7FC00007FF0000007FC00007FE000000FFC0000FFE000000FFC0000FFC000000FF80001F +FC000000FF80001FFC000001FF80001FFC000001FF80003FF8000001FF00003FF8000001 +FF00003FF8000003FF00007FF8000003FF00007FF0000003FE00007FF0000003FE00007F +F0000007FE0000FFF0000007FE0000FFE0000007FC0000FFE0000007FC0000FFE000000F +FC0000FFE000000FFC0000FFC000000FF80000FFC000000FF80000FFC000001FF80000FF +C000001FF80000FFC000001FF00000FF8000001FF00000FF8000003FF00000FF8000003F +F00000FF8000003FE00000FF8000007FE00000FF8000007FE000007F800000FFE000007F +800001FFC000007F800003FFC000003FC00003FFC000003FC00007FFC000001FC0000FFF +8000001FE0001FFF8000000FE0003FFF80000007F000F9FF80000003F801F1FF00000001 +FC0FE1FF00000000FFFF83FF000000003FFE03FF0000000007F003FE00000000000003FE +00000000000007FE00000000000007FE00000000000007FC00000000000007FC00000000 +00000FFC0000000000000FFC0000000000000FF80000000000000FF80000000000001FF8 +0000000000001FF00000000000001FF00000000000003FF00000000000003FE000000F80 +00007FE000001FC000007FC000007FE00000FFC000007FE00000FF800000FFE00001FF00 +0000FFE00003FE000000FFE00007FC000000FFE0000FF8000000FFC0001FF0000000FF80 +003FC00000007E0000FF800000003FC007FE000000001FFFFFF80000000007FFFFC00000 +0000007FFE00000000003D5C78BE41>I E /Fi 4 50 df<0F001F801F803FC03FC03FC0 +1F80018001800300030006000E000C0018007000E000C0000A1272A715>39 +D<0F001F803F803F803F803F801F80018003000300070006000C00180038007000E00080 +0009127A8615>44 D<0001FC000007FF00001E0F80003C03C0007003C000F001C001E001 +E003C001E003C001E0078001E0078001E00F8003E00F0003E01F0003E01F0003E01F0003 +E03E0007C03E0007C03E0007C03E0007C07C000F807C000F807C000F807C000F8078001F +00F8001F00F8001E00F8003E00F8003E00F8003C00F0007C00F00078007000F0007800E0 +007801E0003C03C0003E0F00000FFE000003F000001B2778A523>48 +D<0000180000380000780000F80001F80003F0000FF001FFF001F3F00003E00003E00007 +E00007E00007C00007C0000FC0000FC0000F80000F80001F80001F80001F00001F00003F +00003F00003E00003E00007E00007E00007C00007C0000FC0000FC0000F80000F80001F8 +00FFFFF0FFFFF0152678A523>I E /Fj 5 118 df98 D100 D105 D108 D +117 D E /Fk 3 52 df<00600001E0000FE000FFE000F1E00001E00001E00001E00001E0 +0001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0 +0001E00001E00001E00001E00001E0007FFF807FFF80111C7B9B1C>49 +D<03FC000FFF003C0FC07003E07801F0FC00F0FC00F8FC00F8FC00787800780000F80000 +F00000F00001E00003C0000780000F00001C0000380000E00001C0180380180600180C00 +383FFFF07FFFF0FFFFF0FFFFF0151C7D9B1C>I<01FC000FFF801E07C03001E07C01F07C +00F07E00F07C01F03801E00003E00007C0001F8003FE0003FC000007800003C00001E000 +00F00000F83000F87800F8FC00F8FC00F8FC00F07801F07003E03C07C00FFF0003FC0015 +1D7D9B1C>I E /Fl 2 121 df<387CFEFFFF7F3B0303030606060C1838702008127A8614 +>59 D<007C03C001FF0FF007079C300E03B0780C03F0F81803E1F83003E1F83003E1F060 +07C0E06007C0000007C0000007C000000F8000000F8000000F8000000F8000001F000000 +1F0030381F00307C1F0060FC3E0060FC3E00C0F87E00C0F06F038070C707003F83FE001F +01F8001D1B7D9926>120 D E /Fm 3 96 df<0000700001C000000000700001C0000000 +00F00001E000000000E00000E000000001E00000F000000003C000007800000003800000 +38000000078000003C0000000F0000001E0000001FFFFFFFFF0000003FFFFFFFFF800000 +7FFFFFFFFFC00000F000000001E00003E000000000F8000FC0000000007E003F00000000 +001F80FC000000000007E0FC000000000007E03F00000000001F800F80000000003E0003 +C000000000780001F000000001F00000F800000003E000007FFFFFFFFFC000003FFFFFFF +FF8000001FFFFFFFFF0000000F0000001E000000078000003C0000000380000038000000 +03C000007800000001E00000F000000000E00000E000000000F00001E000000000700001 +C000000000700001C000003B237D9F42>44 D<00E001F003F803F803F807F007F007F007 +E007E00FE00FC00FC00FC01F801F801F001F003F003E003E003E007C007C007C007800F8 +00F800F00010000D1E7D9F13>48 D95 D E /Fn 46 +122 df<00000000FFFC0000000000001FFFFF800000000001FFFFFFE00000000007FFFF +FFF0000000001FFFC00FF8000000007FFE0003FC00000000FFF00000FE00000001FFE000 +03FF00000003FF800007FF00000007FF00000FFF8000000FFE00001FFF8000000FFE0000 +1FFF8000001FFC00001FFF8000001FFC00003FFFC000003FFC00001FFF8000003FF80000 +1FFF8000003FF800001FFF8000003FF800001FFF8000003FF800000FFF0000003FF80000 +07FE0000003FF8000001F80000003FF8000000000000003FF8000000000000003FF80000 +00000000003FF8000000000000003FF8000000000000003FF8000000000000003FF80000 +00000000003FF8000000000000003FF8000000000000003FF80003FFFFC000FFFFFFFFFF +FFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFF +FFFFC000003FFC000007FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 +03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0003FFFFFFC03 +FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03 +FFFFFFC042547DD34B>12 D<07F0001FF8003FFC007FFE007FFF00FFFF00FFFF80FFFF80 +FFFF80FFFFC0FFFFC0FFFFC07FFFC07FFFC03FFFC01FFFC007F3C00003C00003C00007C0 +000780000780000780000F80000F00000F00001F00001E00003E00003C00007C0000F800 +00F80001F00003E00007C0000F80001F00001E00000C00001228769025>44 +DI<07F0000FF8001FFC00 +3FFE007FFF00FFFF80FFFF80FFFF80FFFF80FFFF80FFFF80FFFF807FFF003FFE001FFC00 +0FF80007F0001111769025>I<000000780000000000FC0000000003FC0000000007FC00 +0000001FFC00000000FFFC0000000FFFFC000007FFFFFC0000FFFFFFFC0000FFFFFFFC00 +00FFFF7FFC0000FFF07FFC0000F8007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 +0000007FFC000000007FFC000000007FFC00007FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFF +FE7FFFFFFFFFFE7FFFFFFFFFFE2F4E76CD43>49 D<00003FFE0000000003FFFFE0000000 +0FFFFFFC0000003FFFFFFF000000FFFFFFFFC00001FFC07FFFE00003FE000FFFF80007F8 +0003FFFC000FE00001FFFE001FC00000FFFF003F8000007FFF003FF000007FFF807FF800 +003FFFC07FFC00003FFFC0FFFE00001FFFE0FFFF00001FFFE0FFFF00001FFFE0FFFF0000 +0FFFF0FFFF00000FFFF0FFFF00000FFFF0FFFF00000FFFF0FFFF00000FFFF07FFE00000F +FFF07FFE00000FFFF03FFC00000FFFF00FF000000FFFF003C000000FFFF0000000000FFF +E0000000001FFFE0000000001FFFE0000000001FFFC0000000003FFFC0000000003FFF80 +000000003FFF80000000007FFF00000000007FFE0000000000FFFC0000000001FFF80000 +000001FFF00000000003FFE00000000003FFC00000000007FF80000000000FFF00000000 +001FFE00000000001FFC00000000003FF800000000007FE00000000000FFC00000000001 +FF800000000003FE000000000007FC000000000007F800000000000FF00001F000001FE0 +0001F000003F800001F000007F000001F00000FE000003E00001FC000003E00003F80000 +03E00007F0000003E0000FE0000003E0001F80000007E0003F00000007E0003E0000000F +E0007FFFFFFFFFE000FFFFFFFFFFC001FFFFFFFFFFC003FFFFFFFFFFC007FFFFFFFFFFC0 +0FFFFFFFFFFFC01FFFFFFFFFFFC03FFFFFFFFFFFC07FFFFFFFFFFFC0FFFFFFFFFFFFC0FF +FFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80344E79CD43>I<0000 +0FFFC000000000FFFFFC00000007FFFFFF8000001FFFFFFFE000003FF807FFF00000FF80 +01FFFC0001FE00007FFE0003F800003FFF0003F000003FFF8007FC00001FFF800FFF0000 +1FFFC00FFF80001FFFC01FFFC0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFC0001F +FFE01FFFE0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFC0001FFFE00FFFC0001FFF +C007FF80001FFFC003FF00003FFFC001FC00003FFF80000000003FFF80000000007FFF00 +000000007FFE00000000007FFE0000000000FFFC0000000001FFF80000000003FFF00000 +000007FFC0000000000FFF8000000000FFFE00000000FFFFF800000000FFFFE000000000 +FFFFFC00000000FFFFFF800000000007FFE00000000001FFF800000000007FFE00000000 +003FFF00000000001FFF80000000000FFFC0000000000FFFE00000000007FFF000000000 +07FFF00000000007FFF80000000007FFF80000000003FFFC0000000003FFFC0000000003 +FFFE0000000003FFFE03E0000003FFFE0FF8000003FFFE1FFC000003FFFE3FFE000003FF +FE7FFF000003FFFEFFFF800003FFFEFFFF800003FFFEFFFF800003FFFEFFFF800003FFFC +FFFF800003FFFCFFFF800007FFFCFFFF800007FFF8FFFF000007FFF87FFF000007FFF07F +FE00000FFFF03FFC00000FFFE03FF000001FFFC01FE000003FFF800FF800007FFF0007FF +0000FFFE0003FFF007FFFC0000FFFFFFFFF000007FFFFFFFE000001FFFFFFF80000003FF +FFFC000000001FFF800000374F7ACD43>I<00000000007C00000000000000FE00000000 +000000FE00000000000001FE00000000000003FE00000000000007FE0000000000000FFE +0000000000000FFE0000000000001FFE0000000000003FFE0000000000007FFE00000000 +00007FFE000000000000FFFE000000000001FFFE000000000003FFFE000000000003FFFE +000000000007FFFE00000000000FFFFE00000000001FBFFE00000000003F3FFE00000000 +003E3FFE00000000007C3FFE0000000000FC3FFE0000000001F83FFE0000000001F03FFE +0000000003E03FFE0000000007E03FFE000000000FC03FFE000000000F803FFE00000000 +1F003FFE000000003F003FFE000000007E003FFE000000007C003FFE00000000F8003FFE +00000001F8003FFE00000003F0003FFE00000007E0003FFE00000007C0003FFE0000000F +80003FFE0000001F80003FFE0000003F00003FFE0000003E00003FFE0000007C00003FFE +000000FC00003FFE000001F800003FFE000001F000003FFE000003E000003FFE000007E0 +00003FFE00000FC000003FFE00001F8000003FFE00001F0000003FFE00003E0000003FFE +00007E0000003FFE0000FC0000003FFE0000FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFF +FFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0000000007FFE0000000000007FFE +0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE00000000 +00007FFE0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE +0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE00000000 +0FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFF +FFC03A4F7CCE43>I<03800000000E0007E00000007E0007FE000003FE0007FFF0007FFE +0007FFFFFFFFFC0007FFFFFFFFF80007FFFFFFFFF00007FFFFFFFFE00007FFFFFFFFC000 +07FFFFFFFF800007FFFFFFFF000007FFFFFFFE000007FFFFFFFC000007FFFFFFF0000007 +FFFFFFC0000007FFFFFF00000007FFFFF800000007E1FF0000000007E0000000000007E0 +000000000007E0000000000007E0000000000007E0000000000007E0000000000007E000 +0000000007E0000000000007E0000000000007E0000000000007E0000000000007E00FFF +00000007E07FFFF0000007E3FFFFFE000007E7FFFFFF800007FFF807FFC00007FFC001FF +E00007FE0000FFF80007FC00007FFC0007F800003FFC0007F000003FFE0007E000001FFF +0003C000001FFF80000000001FFF80000000001FFFC0000000000FFFC0000000000FFFE0 +000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFF0000000000FFFF000 +0000000FFFF00FE000000FFFF01FF000000FFFF03FF800000FFFF07FFC00000FFFF0FFFE +00000FFFF0FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFE0FFFE00 +000FFFE0FFFE00000FFFE0FFFC00000FFFE07FF800001FFFC07FF000001FFFC07FE00000 +1FFF803E0000003FFF803F0000003FFF001F8000007FFE001FC000007FFC000FE00000FF +F80007F80001FFF00003FE0007FFE00001FFC03FFFC00000FFFFFFFF8000003FFFFFFE00 +00001FFFFFF800000003FFFFC0000000007FF8000000344F79CD43>I<0000000FFF0000 +000000FFFFE000000007FFFFF00000001FFFFFFC0000007FFE03FE000001FFF0007F0000 +03FFC0003F800007FF00001F80000FFE00007FC0001FFC0000FFC0003FF80001FFE0007F +F00003FFE000FFF00007FFE001FFE00007FFE001FFE00007FFE003FFC00007FFE007FFC0 +0007FFE007FFC00007FFE00FFFC00003FFC00FFF800001FF801FFF800000FF001FFF8000 +007E001FFF80000000003FFF80000000003FFF80000000003FFF00000000007FFF000000 +00007FFF00000000007FFF00080000007FFF01FFF800007FFF07FFFF0000FFFF0FFFFFC0 +00FFFF1FFFFFF000FFFF3F007FF800FFFF3C003FFC00FFFF78001FFE00FFFFF0000FFF00 +FFFFF00007FF80FFFFE00007FFC0FFFFE00007FFC0FFFFC00007FFE0FFFFC00003FFF0FF +FF800003FFF0FFFF800003FFF8FFFF800003FFF8FFFF800003FFF8FFFF800003FFF8FFFF +000003FFFCFFFF000003FFFCFFFF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF00 +0003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC3FFF000003FFFC3FFF0000 +03FFFC3FFF000003FFFC3FFF000003FFFC1FFF000003FFF81FFF800003FFF81FFF800003 +FFF80FFF800003FFF80FFF800003FFF007FF800007FFF007FF800007FFE003FFC00007FF +C001FFC00007FFC001FFE0000FFF8000FFF0000FFF00007FF8001FFE00003FFC007FFC00 +001FFF01FFF800000FFFFFFFF0000003FFFFFFC0000000FFFFFF000000003FFFFC000000 +0007FFC00000364F7ACD43>I<1F000000000000001F800000000000001FC00000000000 +001FFF8000000000001FFFFFFFFFFFFF801FFFFFFFFFFFFF801FFFFFFFFFFFFF801FFFFF +FFFFFFFF803FFFFFFFFFFFFF803FFFFFFFFFFFFF003FFFFFFFFFFFFE003FFFFFFFFFFFFC +003FFFFFFFFFFFF8003FFFFFFFFFFFF8003FFFFFFFFFFFF0003FFFFFFFFFFFE0003FFFFF +FFFFFFC0007FFFFFFFFFFF80007F800000007F00007E00000000FF00007E00000001FE00 +007C00000003FC00007C00000003F800007C00000007F000007C0000000FF000007C0000 +001FE00000F80000003FC00000F80000007F800000F80000007F000000F8000000FE0000 +0000000001FE00000000000003FC00000000000003F800000000000007F0000000000000 +0FF00000000000001FE00000000000001FE00000000000003FC00000000000003FC00000 +000000007F80000000000000FF80000000000000FF80000000000001FF00000000000001 +FF00000000000003FF00000000000003FE00000000000007FE00000000000007FE000000 +0000000FFE0000000000000FFE0000000000000FFC0000000000001FFC0000000000001F +FC0000000000003FFC0000000000003FFC0000000000003FFC0000000000003FFC000000 +0000007FFC0000000000007FF80000000000007FF80000000000007FF8000000000000FF +F8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000 +000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FF +F8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000 +000001FFF8000000000001FFF8000000000001FFF8000000000000FFF0000000000000FF +F00000000000003FC00000000000001F8000000000395279D043>I<000007FFC0000000 +007FFFFC00000003FFFFFF8000000FFFFFFFE000001FFC01FFF800003FE0003FFC00007F +80000FFE0000FF000007FF0001FE000003FF0003FC000001FF8007FC000001FFC007F800 +0000FFC00FF8000000FFC00FF8000000FFE00FF80000007FE00FF80000007FE01FF80000 +007FE01FFC0000007FE01FFC0000007FE01FFE0000007FE01FFF0000007FE01FFF800000 +FFE01FFFE00000FFC01FFFF80000FFC01FFFFE0001FF800FFFFF0001FF800FFFFFC003FF +000FFFFFF007FE0007FFFFF807FC0007FFFFFE1FF80003FFFFFFBFF00001FFFFFFFFE000 +01FFFFFFFF800000FFFFFFFE0000007FFFFFFF0000003FFFFFFF8000000FFFFFFFE00000 +07FFFFFFF0000001FFFFFFFC000007FFFFFFFE00001FFFFFFFFF00003FFFFFFFFF8000FF +E7FFFFFF8001FF81FFFFFFC003FF007FFFFFE007FE001FFFFFF00FFC000FFFFFF01FF800 +03FFFFF01FF80000FFFFF83FF000007FFFF83FF000001FFFF87FE0000007FFFC7FE00000 +01FFFC7FE0000000FFFCFFC00000007FFCFFC00000003FFCFFC00000003FFCFFC0000000 +1FFCFFC00000001FFCFFC00000000FFCFFC00000000FFCFFC00000000FF8FFC00000000F +F8FFE00000000FF87FE00000000FF07FF00000001FF07FF00000001FF03FF80000003FE0 +1FF80000003FC01FFC0000007FC00FFE000000FF8007FF800003FF0003FFE0000FFE0001 +FFFC00FFFC00007FFFFFFFF000003FFFFFFFE000000FFFFFFF80000001FFFFFC00000000 +0FFFC00000364F7ACD43>I<00000000001F00000000000000000000003F800000000000 +00000000007FC0000000000000000000007FC000000000000000000000FFE00000000000 +0000000000FFE000000000000000000000FFE000000000000000000001FFF00000000000 +0000000001FFF000000000000000000003FFF800000000000000000003FFF80000000000 +0000000003FFF800000000000000000007FFFC00000000000000000007FFFC0000000000 +0000000007FFFC0000000000000000000FFFFE0000000000000000000FFFFE0000000000 +000000001FFFFF0000000000000000001FFFFF0000000000000000001FFFFF0000000000 +000000003FFFFF8000000000000000003F7FFF8000000000000000007F7FFFC000000000 +000000007E7FFFC000000000000000007E3FFFC00000000000000000FE3FFFE000000000 +00000000FC1FFFE00000000000000001FC1FFFF00000000000000001F81FFFF000000000 +00000001F80FFFF00000000000000003F80FFFF80000000000000003F007FFF800000000 +00000007F007FFFC0000000000000007E007FFFC0000000000000007E003FFFC00000000 +0000000FE003FFFE000000000000000FC001FFFE000000000000001FC001FFFF00000000 +0000001F8001FFFF000000000000001F8000FFFF000000000000003F8000FFFF80000000 +0000003F00007FFF800000000000007F00007FFFC00000000000007E00007FFFC0000000 +0000007E00003FFFC0000000000000FE00003FFFE0000000000000FC00001FFFE0000000 +000001FC00001FFFF0000000000001F800001FFFF0000000000001F800000FFFF0000000 +000003F800000FFFF8000000000003F0000007FFF8000000000007F0000007FFFC000000 +000007E0000007FFFC000000000007E0000003FFFC00000000000FFFFFFFFFFFFE000000 +00000FFFFFFFFFFFFE00000000001FFFFFFFFFFFFF00000000001FFFFFFFFFFFFF000000 +00001FFFFFFFFFFFFF00000000003F80000000FFFF80000000003F000000007FFF800000 +00007F000000007FFFC0000000007F000000007FFFC0000000007E000000003FFFC00000 +0000FE000000003FFFE000000000FC000000001FFFE000000001FC000000001FFFF00000 +0001FC000000001FFFF000000001F8000000000FFFF000000003F8000000000FFFF80000 +0003F00000000007FFF800000007F00000000007FFFC00000007F00000000007FFFC0000 +0007E00000000003FFFC0000000FE00000000003FFFE0000000FC00000000003FFFE0000 +001FC00000000001FFFF000000FFFC0000000001FFFF0000FFFFFFF800000FFFFFFFFFE0 +FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0 +FFFFFFF800000FFFFFFFFFE05B547BD366>65 DI<0000000001FFFC +000001C0000000007FFFFFC00003C000000007FFFFFFF80007C00000003FFFFFFFFE001F +C0000000FFFFFFFFFF803FC0000003FFFFE003FFC07FC000000FFFFC00003FF0FFC00000 +3FFFE000000FF9FFC000007FFF80000003FFFFC00001FFFE00000000FFFFC00003FFF800 +0000007FFFC00007FFF0000000003FFFC0000FFFE0000000001FFFC0001FFFC000000000 +0FFFC0003FFF800000000007FFC0007FFF000000000003FFC000FFFE000000000001FFC0 +00FFFE000000000001FFC001FFFC000000000000FFC003FFF8000000000000FFC003FFF8 +0000000000007FC007FFF00000000000007FC00FFFF00000000000003FC00FFFF0000000 +0000003FC01FFFE00000000000001FC01FFFE00000000000001FC01FFFE0000000000000 +1FC03FFFC00000000000001FC03FFFC00000000000000FC03FFFC00000000000000FC07F +FFC00000000000000FC07FFFC00000000000000FC07FFFC000000000000000007FFF8000 +000000000000007FFF800000000000000000FFFF800000000000000000FFFF8000000000 +00000000FFFF800000000000000000FFFF800000000000000000FFFF8000000000000000 +00FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF +800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF800000 +000000000000FFFF800000000000000000FFFF8000000000000000007FFF800000000000 +0000007FFF8000000000000000007FFFC000000000000000007FFFC00000000000000000 +7FFFC000000000000007C03FFFC000000000000007C03FFFC000000000000007C03FFFC0 +00000000000007C01FFFE000000000000007C01FFFE000000000000007C01FFFE0000000 +0000000FC00FFFF00000000000000F800FFFF00000000000000F8007FFF0000000000000 +1F8003FFF80000000000001F8003FFF80000000000001F0001FFFC0000000000003F0000 +FFFE0000000000007E0000FFFE0000000000007E00007FFF000000000000FC00003FFF80 +0000000001F800001FFFC00000000003F800000FFFE00000000007F0000007FFF0000000 +000FE0000003FFFC000000001FC0000001FFFE000000007F800000007FFF80000000FF00 +0000003FFFE0000007FE000000000FFFFE00001FF80000000003FFFFE001FFF000000000 +00FFFFFFFFFFC000000000003FFFFFFFFF00000000000007FFFFFFFC000000000000007F +FFFFE00000000000000001FFFC00000000525479D261>I69 D75 +D77 D<000000000FFFC00000000000000003FFFFFF000000 +000000001FFFFFFFE0000000000000FFFFFFFFFC000000000003FFFC00FFFF0000000000 +0FFFC0000FFFC0000000003FFF000003FFF0000000007FFC000000FFF800000001FFF000 +00003FFE00000003FFE00000001FFF00000007FFC00000000FFF8000000FFF8000000007 +FFC000001FFF0000000003FFE000003FFE0000000001FFF000007FFC0000000000FFF800 +00FFFC0000000000FFFC0000FFF800000000007FFC0001FFF800000000007FFE0003FFF0 +00000000003FFF0003FFF000000000003FFF0007FFE000000000001FFF8007FFE0000000 +00001FFF800FFFE000000000001FFFC00FFFC000000000000FFFC01FFFC000000000000F +FFE01FFFC000000000000FFFE01FFF80000000000007FFE03FFF80000000000007FFF03F +FF80000000000007FFF03FFF80000000000007FFF07FFF80000000000007FFF87FFF8000 +0000000007FFF87FFF00000000000003FFF87FFF00000000000003FFF87FFF0000000000 +0003FFF8FFFF00000000000003FFFCFFFF00000000000003FFFCFFFF00000000000003FF +FCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF +00000000000003FFFCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF000000 +00000003FFFCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF000000000000 +03FFFCFFFF00000000000003FFFCFFFF00000000000003FFFC7FFF00000000000003FFF8 +7FFF00000000000003FFF87FFF80000000000007FFF87FFF80000000000007FFF87FFF80 +000000000007FFF83FFF80000000000007FFF03FFF80000000000007FFF03FFF80000000 +000007FFF01FFFC000000000000FFFE01FFFC000000000000FFFE01FFFC000000000000F +FFE00FFFC000000000000FFFC00FFFE000000000001FFFC007FFE000000000001FFF8007 +FFF000000000003FFF8003FFF00001FE00003FFF0001FFF80007FF80007FFE0001FFF800 +0FFFE0007FFE0000FFFC003FFFF000FFFC00007FFC007F03F800FFF800003FFE007C00FC +01FFF000001FFF00F8007E03FFE000000FFF80F8003F07FFC0000007FFC0F0001F8FFF80 +000003FFE0F0001F9FFF00000001FFF0F0000FFFFE00000000FFFCF8000FFFFC00000000 +3FFFF80007FFF0000000000FFFFC000FFFC00000000003FFFF00FFFF000000000000FFFF +FFFFFC0000000000001FFFFFFFFC00000C00000003FFFFFFFC00001E000000001FFFE3FE +00001E00000000000001FF00001E00000000000001FF80003E00000000000001FFC0007E +00000000000001FFE000FE00000000000001FFF807FE00000000000000FFFFFFFE000000 +00000000FFFFFFFC00000000000000FFFFFFFC000000000000007FFFFFFC000000000000 +007FFFFFFC000000000000007FFFFFF8000000000000007FFFFFF8000000000000003FFF +FFF8000000000000003FFFFFF0000000000000001FFFFFE0000000000000001FFFFFE000 +0000000000000FFFFFC00000000000000007FFFF800000000000000003FFFF0000000000 +00000001FFFE0000000000000000007FF80000000000000000001FE000576A79D265>81 +DI<00000FFF +800007000000FFFFF8000F000007FFFFFF001F00001FFFFFFFC03F00003FFFFFFFF07F00 +00FFFC00FFF8FF0001FFE0000FFDFF0003FF800001FFFF0007FE0000007FFF000FFC0000 +003FFF000FF80000000FFF001FF800000007FF001FF000000003FF003FF000000003FF00 +3FE000000001FF007FE000000000FF007FE000000000FF007FE0000000007F00FFE00000 +00007F00FFE0000000003F00FFE0000000003F00FFF0000000003F00FFF0000000003F00 +FFF8000000001F00FFF8000000001F00FFFC000000001F00FFFE000000001F00FFFF0000 +00000000FFFFC000000000007FFFF000000000007FFFFF00000000007FFFFFF800000000 +3FFFFFFF800000003FFFFFFFFC0000001FFFFFFFFFC000001FFFFFFFFFF000000FFFFFFF +FFFC000007FFFFFFFFFF000003FFFFFFFFFFC00001FFFFFFFFFFE00000FFFFFFFFFFF000 +007FFFFFFFFFF800003FFFFFFFFFFC00000FFFFFFFFFFE000003FFFFFFFFFE000000FFFF +FFFFFF0000001FFFFFFFFF80000000FFFFFFFF800000000FFFFFFFC0000000007FFFFFC0 +0000000007FFFFE00000000000FFFFE000000000003FFFE000000000000FFFF000000000 +0007FFF0000000000003FFF0000000000003FFF0780000000001FFF0F80000000000FFF0 +F80000000000FFF0F80000000000FFF0F800000000007FF0F800000000007FF0FC000000 +00007FF0FC00000000007FF0FC00000000007FE0FE00000000007FE0FE00000000007FE0 +FF0000000000FFC0FF0000000000FFC0FF8000000000FFC0FFC000000001FF80FFE00000 +0001FF00FFF000000003FF00FFFC00000007FE00FFFF0000000FFC00FFFFC000001FF800 +FFFFF800007FF000FF1FFFC003FFE000FE0FFFFFFFFFC000FC03FFFFFFFF0000F8007FFF +FFFC0000F0000FFFFFF00000E000007FFF0000003C5479D24B>I<3FFFFFFFFFFFFFFFFF +FF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803F +FFFFFFFFFFFFFFFFFF803FFFC0003FFFC0007FFF803FFE00003FFFC00007FF807FF80000 +3FFFC00001FFC07FE000003FFFC00000FFC07FC000003FFFC000007FC07F8000003FFFC0 +00003FC07F0000003FFFC000001FC07F0000003FFFC000001FC07E0000003FFFC000000F +C07E0000003FFFC000000FC07E0000003FFFC000000FC07C0000003FFFC0000007C07C00 +00003FFFC0000007C07C0000003FFFC0000007C07C0000003FFFC0000007C07C0000003F +FFC0000007C0FC0000003FFFC0000007E0F80000003FFFC0000003E0F80000003FFFC000 +0003E0F80000003FFFC0000003E0F80000003FFFC0000003E0F80000003FFFC0000003E0 +F80000003FFFC0000003E0000000003FFFC000000000000000003FFFC000000000000000 +003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFF +C000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000 +0000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000 +0000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000000000 +3FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0 +00000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000 +00000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000 +00003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003F +FFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000 +000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000 +000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000 +003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFF +C000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000 +0000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000 +00FFFFFFFFFFFFF000000000FFFFFFFFFFFFF000000000FFFFFFFFFFFFF000000000FFFF +FFFFFFFFF000000000FFFFFFFFFFFFF0000053517BD05E>I<00007FFF000000000007FF +FFF0000000003FFFFFFE00000000FFFFFFFF80000001FFE00FFFC0000003FE0001FFF000 +0007FF0000FFF8000007FF80003FFC00000FFF80003FFE00000FFFC0001FFE00000FFFC0 +001FFF00000FFFC0000FFF80000FFFC0000FFF80000FFFC0000FFF800007FF800007FFC0 +0007FF800007FFC00003FF000007FFC00001FE000007FFC0000000000007FFC000000000 +0007FFC0000000000007FFC0000000000007FFC0000000000007FFC0000000000007FFC0 +000000007FFFFFC00000000FFFFFFFC0000000FFFFFFFFC0000007FFFF87FFC000003FFF +F007FFC000007FFF8007FFC00001FFFC0007FFC00003FFF00007FFC00007FFE00007FFC0 +000FFFC00007FFC0001FFF800007FFC0003FFF000007FFC0007FFF000007FFC0007FFE00 +0007FFC0007FFE000007FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC0 +00FFFC000007FFC000FFFC00000FFFC000FFFC00000FFFC000FFFE00001FFFC0007FFE00 +001DFFC0007FFE00003DFFC0003FFF000079FFE0001FFF8000F1FFF8000FFFC003E1FFFF +E007FFF81FC0FFFFF003FFFFFF807FFFF000FFFFFF001FFFF0001FFFFC0007FFE00001FF +E0000000003C387CB641>97 D<003FF0000000000000FFFFF0000000000000FFFFF00000 +00000000FFFFF0000000000000FFFFF0000000000000FFFFF000000000000003FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF001FFE000000000FFF00FFF +FE00000000FFF03FFFFFC0000000FFF0FFFFFFF0000000FFF3FF01FFF8000000FFF7F800 +3FFE000000FFFFE0000FFF000000FFFF800007FF800000FFFF000003FFC00000FFFE0000 +01FFE00000FFFC000001FFF00000FFF8000000FFF80000FFF8000000FFF80000FFF80000 +007FFC0000FFF80000007FFC0000FFF80000007FFE0000FFF80000007FFE0000FFF80000 +007FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000 +003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 +003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 +003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 +003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000 +007FFE0000FFF80000007FFE0000FFF80000007FFE0000FFF80000007FFC0000FFF80000 +00FFFC0000FFF8000000FFF80000FFFC000001FFF00000FFFC000001FFF00000FFFE0000 +03FFE00000FFFF000007FFC00000FFFF80000FFF800000FFCFC0001FFF000000FF87F000 +7FFC000000FF03FE03FFF8000000FE00FFFFFFE0000000FC007FFFFF80000000F8001FFF +FC00000000000003FFC000000041547BD24B>I<000001FFF8000000001FFFFF80000000 +FFFFFFF0000003FFFFFFFC00000FFFC00FFE00001FFE0001FF00007FFC0003FF8000FFF0 +0007FF8001FFF00007FFC003FFE0000FFFC003FFC0000FFFC007FFC0000FFFC00FFF8000 +0FFFC00FFF80000FFFC01FFF800007FF801FFF000007FF803FFF000003FF003FFF000001 +FE007FFF00000000007FFE00000000007FFE00000000007FFE0000000000FFFE00000000 +00FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000 +FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FF +FE0000000000FFFE00000000007FFE00000000007FFF00000000007FFF00000000003FFF +00000000003FFF00000000003FFF00000003E01FFF80000003E01FFF80000007E00FFFC0 +000007C007FFC0000007C007FFE000000FC003FFE000001F8001FFF000003F0000FFF800 +007E00007FFE0000FC00003FFF0003F800000FFFE01FF0000003FFFFFFE0000000FFFFFF +800000003FFFFE0000000001FFE0000033387CB63C>I<000000000001FF800000000000 +07FFFF80000000000007FFFF80000000000007FFFF80000000000007FFFF800000000000 +07FFFF800000000000001FFF8000000000000007FF8000000000000007FF800000000000 +0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 +0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 +0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 +0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 +0007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000001FF +E007FF800000001FFFFC07FF80000000FFFFFF07FF80000003FFFFFFC7FF8000000FFFE0 +3FE7FF8000001FFF0007F7FF8000007FFC0001FFFF800000FFF80000FFFF800001FFF000 +003FFF800003FFE000001FFF800007FFC000001FFF800007FFC000000FFF80000FFF8000 +000FFF80001FFF8000000FFF80001FFF0000000FFF80003FFF0000000FFF80003FFF0000 +000FFF80003FFF0000000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000 +000FFF80007FFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000 +000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000 +000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000 +000FFF8000FFFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000 +000FFF80003FFF0000000FFF80003FFF0000000FFF80003FFF0000000FFF80001FFF0000 +000FFF80001FFF0000000FFF80000FFF8000000FFF80000FFF8000001FFF800007FFC000 +003FFF800003FFC000003FFF800001FFE000007FFF800000FFF00001FFFF8000007FF800 +03FFFFE000003FFE000FEFFFFF80000FFFC07FCFFFFF800007FFFFFF8FFFFF800001FFFF +FE0FFFFF8000003FFFF80FFFFF80000003FFC00FFE000041547CD24B>I<000003FFC000 +0000003FFFFC00000001FFFFFF00000007FFFFFFC000000FFF81FFE000003FFC007FF800 +007FF8003FFC0000FFF0001FFE0001FFE0000FFE0003FFC00007FF0007FFC00007FF800F +FF800003FF800FFF800003FFC01FFF800001FFC01FFF000001FFC03FFF000001FFE03FFF +000001FFE07FFF000000FFE07FFE000000FFE07FFE000000FFF07FFE000000FFF0FFFE00 +0000FFF0FFFE000000FFF0FFFE000000FFF0FFFE000000FFF0FFFFFFFFFFFFF0FFFFFFFF +FFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFE0FFFE0000000000FFFE0000000000FFFE000000 +0000FFFE0000000000FFFE0000000000FFFE00000000007FFE00000000007FFE00000000 +007FFF00000000003FFF00000000003FFF00000000003FFF00000000E01FFF00000001F0 +1FFF80000003F00FFF80000003F007FFC0000007E007FFC0000007E003FFE000000FC001 +FFF000001FC000FFF800003F80007FFC0000FF00001FFE0003FE00000FFFC03FF8000003 +FFFFFFF0000000FFFFFFC00000001FFFFE0000000001FFF0000034387CB63D>I<000000 +3FFC00000003FFFF0000000FFFFFC000003FFFFFE00000FFF81FF00001FFC03FF80003FF +807FF80007FF00FFFC000FFE00FFFC001FFC00FFFC001FFC00FFFC003FF800FFFC003FF8 +00FFFC003FF8007FF8007FF0007FF8007FF0003FF0007FF0000FC0007FF0000000007FF0 +000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0 +000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0 +000000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 +0000007FFFFFFE00007FFFFFFE00007FFFFFFE00007FFFFFFE00007FFFFFFE00002E547C +D329>I<00003FFF0000FF000003FFFFF007FFC0000FFFFFFC1FFFE0003FFFFFFF7FFFE0 +007FFC0FFFFF9FF000FFE001FFF83FF001FFC000FFE03FF003FF80007FF01FF007FF0000 +3FF81FE00FFF00003FFC0FC00FFF00003FFC07801FFE00001FFE00001FFE00001FFE0000 +3FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE0000 +1FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF0000 +1FFE00001FFE00001FFE00001FFE00000FFF00003FFC00000FFF00003FFC000007FF0000 +3FF8000003FF80007FF0000001FFC000FFE0000000FFE001FFC0000000FFFC0FFF800000 +01FFFFFFFF00000003EFFFFFFC00000003C3FFFFF000000007C03FFF0000000007C00000 +0000000007C00000000000000FC00000000000000FC00000000000000FC0000000000000 +0FE00000000000000FE00000000000000FF80000000000000FFE0000000000000FFFFFFF +FF00000007FFFFFFFFF8000007FFFFFFFFFF000007FFFFFFFFFFC00003FFFFFFFFFFE000 +01FFFFFFFFFFF00000FFFFFFFFFFF800007FFFFFFFFFFC00007FFFFFFFFFFE0001FFFFFF +FFFFFF0007FFFFFFFFFFFF000FFE000003FFFF801FF80000003FFF803FF000000007FF80 +7FE000000003FFC07FE000000001FFC0FFC000000001FFC0FFC000000000FFC0FFC00000 +0000FFC0FFC000000000FFC0FFC000000000FFC0FFC000000000FFC0FFE000000001FFC0 +7FE000000001FF807FF000000003FF803FF000000003FF001FF800000007FE000FFE0000 +001FFC0007FF8000007FF80003FFE00001FFF00001FFFE001FFFE000007FFFFFFFFF8000 +000FFFFFFFFC00000001FFFFFFE0000000000FFFFC0000003C4F7CB543>I<003FF00000 +00000000FFFFF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF00000 +00000000FFFFF000000000000003FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 +0000000000FFF0001FFC00000000FFF000FFFFC0000000FFF003FFFFF0000000FFF00FFF +FFF8000000FFF01FE07FFC000000FFF03F001FFE000000FFF07C001FFF000000FFF0F000 +0FFF000000FFF1E0000FFF800000FFF3C0000FFF800000FFF7800007FF800000FFF78000 +07FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC0000 +07FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF80000 +07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 +07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 +07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 +07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 +07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 +07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 +07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 +07FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807 +FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042537BD24B>I<007F000000FF80 +0003FFE00007FFF00007FFF0000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8 +000FFFF80007FFF00007FFF00003FFE00000FF8000007F00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000003FF000FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 +0000FFF00000FFF00000FFF00000FFF00000FFF000FFFFFFE0FFFFFFE0FFFFFFE0FFFFFF +E0FFFFFFE01B547BD325>I<0000007F00000000FF80000003FFE0000007FFF0000007FF +F000000FFFF800000FFFF800000FFFF800000FFFF800000FFFF800000FFFF800000FFFF8 +000007FFF0000007FFF0000003FFE0000000FF800000007F000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000001FF80000FFFFF80000FFFFF80000FF +FFF80000FFFFF80000FFFFF8000001FFF80000007FF80000007FF80000007FF80000007F +F80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8 +0000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF800 +00007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000 +007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8000000 +7FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007F +F80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8 +0000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80780007FF81F +E0007FF83FF0007FF87FF8007FF8FFFC00FFF8FFFC00FFF0FFFC00FFF0FFFC00FFE0FFFC +01FFE0FFFC01FFC0FFFC03FF807FF807FF007FF00FFE003FF01FFC000FFFFFF00007FFFF +E00001FFFF8000001FFC0000256C87D329>I<003FF00000000000FFFFF00000000000FF +FFF00000000000FFFFF00000000000FFFFF00000000000FFFFF0000000000003FFF00000 +00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000 +FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000 +00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000 +FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000 +00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000 +FFF0000000000000FFF00001FFFFF800FFF00001FFFFF800FFF00001FFFFF800FFF00001 +FFFFF800FFF00001FFFFF800FFF000003FFE0000FFF000001FF00000FFF000003FC00000 +FFF000007F800000FFF00000FF000000FFF00003FE000000FFF00007F8000000FFF0000F +F0000000FFF0001FE0000000FFF0007FC0000000FFF000FF00000000FFF001FE00000000 +FFF003FC00000000FFF00FF800000000FFF01FE000000000FFF03FF000000000FFF07FF8 +00000000FFF1FFF800000000FFF3FFFC00000000FFF7FFFE00000000FFFFFFFF00000000 +FFFFFFFF80000000FFFF9FFF80000000FFFF0FFFC0000000FFFE0FFFE0000000FFF807FF +F0000000FFF003FFF0000000FFF001FFF8000000FFF000FFFC000000FFF000FFFE000000 +FFF0007FFF000000FFF0003FFF000000FFF0001FFF800000FFF0001FFFC00000FFF0000F +FFE00000FFF00007FFF00000FFF00003FFF00000FFF00001FFF80000FFF00001FFFC0000 +FFF00000FFFE0000FFF000007FFE0000FFF000003FFF0000FFF000007FFFC0FFFFFFF003 +FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFF40 +537CD247>I<003FF000FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF +F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000FFFFFFF0FFFF +FFF0FFFFFFF0FFFFFFF0FFFFFFF01C537BD225>I<003FF0001FFC000000FFE00000FFFF +F000FFFFC00007FFFE0000FFFFF003FFFFF0001FFFFF8000FFFFF00FFFFFF8007FFFFFC0 +00FFFFF01FE07FFC00FF03FFE000FFFFF03F001FFE01F800FFF00003FFF07C001FFF03E0 +00FFF80000FFF0F0000FFF0780007FF80000FFF1E0000FFF8F00007FFC0000FFF3C0000F +FF9E00007FFC0000FFF7800007FFBC00003FFC0000FFF7800007FFFC00003FFE0000FFFF +000007FFF800003FFE0000FFFE000007FFF000003FFE0000FFFE000007FFF000003FFE00 +00FFFC000007FFE000003FFE0000FFFC000007FFE000003FFE0000FFFC000007FFE00000 +3FFE0000FFFC000007FFE000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FF +C000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF800 +0007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000 +FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003F +FE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC0 +00003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF80000 +07FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FF +F8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE +0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000 +003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007 +FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8 +000007FFC000003FFE00FFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFE +FFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03F +FFFFFE67367BB570>I<003FF0001FFC000000FFFFF000FFFFC00000FFFFF003FFFFF000 +00FFFFF00FFFFFF80000FFFFF01FE07FFC0000FFFFF03F001FFE000003FFF07C001FFF00 +0000FFF0F0000FFF000000FFF1E0000FFF800000FFF3C0000FFF800000FFF7800007FF80 +0000FFF7800007FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC0 +0000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 +0000FFF8000007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFF +C0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042367BB54B>I<00 +0001FFE000000000001FFFFE0000000000FFFFFFC000000003FFFFFFF00000000FFF807F +FC0000001FFC000FFE0000007FF80007FF800000FFF00003FFC00001FFE00001FFE00003 +FFC00000FFF00003FF8000007FF00007FF8000007FF8000FFF0000003FFC000FFF000000 +3FFC001FFF0000003FFE001FFF0000003FFE003FFE0000001FFF003FFE0000001FFF003F +FE0000001FFF007FFE0000001FFF807FFE0000001FFF807FFE0000001FFF807FFE000000 +1FFF80FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FF +FE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE000000 +1FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC07FFE0000001FFF807F +FE0000001FFF807FFE0000001FFF803FFE0000001FFF003FFF0000003FFF003FFF000000 +3FFF001FFF0000003FFE001FFF0000003FFE000FFF0000003FFC000FFF8000007FFC0007 +FF8000007FF80003FFC00000FFF00001FFE00001FFE00000FFF00003FFC000007FF80007 +FF8000003FFE001FFF0000000FFF807FFC00000007FFFFFFF800000000FFFFFFC0000000 +003FFFFF000000000001FFE00000003A387CB643>I<003FF001FFE0000000FFFFF00FFF +FE000000FFFFF03FFFFFC00000FFFFF0FFFFFFF00000FFFFF3FF01FFF80000FFFFF7F800 +7FFE000003FFFFE0001FFF000000FFFF80000FFF800000FFFF000007FFC00000FFFE0000 +07FFE00000FFFC000003FFF00000FFF8000001FFF80000FFF8000001FFF80000FFF80000 +00FFFC0000FFF8000000FFFC0000FFF8000000FFFE0000FFF80000007FFE0000FFF80000 +007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000 +003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 +003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 +003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 +003FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000 +007FFE0000FFF8000000FFFE0000FFF8000000FFFE0000FFF8000000FFFC0000FFF80000 +01FFFC0000FFF8000001FFF80000FFFC000003FFF00000FFFC000003FFF00000FFFE0000 +07FFE00000FFFF00000FFFC00000FFFF80001FFF800000FFFFC0003FFF000000FFFFF000 +FFFC000000FFFBFE07FFF8000000FFF8FFFFFFE0000000FFF87FFFFF80000000FFF81FFF +FC00000000FFF803FFC000000000FFF800000000000000FFF800000000000000FFF80000 +0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 +0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 +0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 +0000000000FFF800000000000000FFF8000000000000FFFFFFF80000000000FFFFFFF800 +00000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000414D7BB54B +>I<000001FFE00007800000001FFFF8000F80000000FFFFFE001F80000003FFFFFF801F +8000000FFFF03FC03F8000001FFF800FE07F8000007FFE0003F07F800000FFFC0001F8FF +800001FFF80000FDFF800003FFF000007FFF800003FFE000003FFF800007FFE000003FFF +80000FFFC000001FFF80001FFFC000001FFF80001FFF8000000FFF80003FFF8000000FFF +80003FFF8000000FFF80003FFF00000007FF80007FFF00000007FF80007FFF00000007FF +80007FFF00000007FF80007FFE00000007FF8000FFFE00000007FF8000FFFE00000007FF +8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF +8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF +8000FFFE00000007FF8000FFFE00000007FF80007FFF00000007FF80007FFF00000007FF +80007FFF00000007FF80003FFF00000007FF80003FFF00000007FF80003FFF80000007FF +80001FFF8000000FFF80001FFF8000000FFF80000FFFC000001FFF80000FFFC000001FFF +800007FFE000003FFF800003FFF000007FFF800001FFF00000FFFF800000FFF80001FFFF +8000007FFC0003FFFF8000003FFF000FEFFF8000000FFFC07FCFFF80000007FFFFFF0FFF +80000001FFFFFE0FFF800000003FFFF80FFF8000000003FF800FFF800000000000000FFF +800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF +800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF +800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF +800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF +8000000000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000FFFFF +FF80000000000FFFFFFF80414D7CB547>I<007FE003FE00FFFFE00FFF80FFFFE03FFFE0 +FFFFE07FFFF0FFFFE0FE1FF8FFFFE1F83FFC03FFE3E03FFE00FFE3C07FFE00FFE7807FFE +00FFEF807FFE00FFEF007FFE00FFEE007FFE00FFFE003FFC00FFFC003FFC00FFFC001FF8 +00FFFC000FF000FFF800000000FFF800000000FFF800000000FFF800000000FFF8000000 +00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 +00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 +00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 +00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 +00FFF000000000FFF000000000FFF000000000FFF0000000FFFFFFFC0000FFFFFFFC0000 +FFFFFFFC0000FFFFFFFC0000FFFFFFFC00002F367CB537>I<0003FFF00F00003FFFFE1F +0000FFFFFFFF0003FFFFFFFF0007FF003FFF000FF80007FF001FE00001FF003FC00000FF +003F8000007F007F8000007F007F0000003F007F0000003F00FF0000001F00FF0000001F +00FF8000001F00FF8000001F00FFC000001F00FFF000000000FFFC00000000FFFFC00000 +007FFFFF0000007FFFFFF800003FFFFFFF00003FFFFFFFC0001FFFFFFFF0000FFFFFFFF8 +0007FFFFFFFC0003FFFFFFFE0000FFFFFFFF00003FFFFFFF80000FFFFFFFC00000FFFFFF +C0000007FFFFE00000003FFFE000000007FFF000000001FFF0780000007FF0F80000003F +F0F80000001FF0FC0000001FF0FC0000000FF0FC0000000FF0FE0000000FF0FE0000000F +E0FF0000000FE0FF8000001FE0FF8000001FC0FFC000001FC0FFE000003F80FFF800007F +00FFFE0001FE00FFFFC00FFC00FF7FFFFFF800FC1FFFFFE000F807FFFF8000F000FFF800 +002C387CB635>I<00003E00000000003E00000000003E00000000003E00000000003E00 +000000003E00000000007E00000000007E00000000007E00000000007E0000000000FE00 +00000000FE0000000001FE0000000001FE0000000001FE0000000003FE0000000007FE00 +00000007FE000000000FFE000000001FFE000000003FFE00000000FFFE00000001FFFE00 +00000FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 +0000003FFE000000003FFE000000003FFE0007C0003FFE0007C0003FFE0007C0003FFE00 +07C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE00 +07C0003FFE0007C0001FFE000F80001FFF000F80001FFF000F80000FFF001F00000FFF80 +1F000007FFC03E000003FFF0FC000001FFFFF80000007FFFF00000001FFFE000000003FF +80002A4D7ECB34>I<003FF8000001FFC000FFFFF80007FFFFC000FFFFF80007FFFFC000 +FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC00003FFF800001FFFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 +00FFF800000FFFC00000FFF800000FFFC00000FFF800000FFFC00000FFF800001FFFC000 +00FFF800001FFFC000007FF800003FFFC000007FF800003BFFC000007FF800007BFFC000 +003FFC0000F3FFC000003FFC0001E3FFF000001FFE0007C3FFFFC0000FFFC03F83FFFFC0 +0007FFFFFF03FFFFC00001FFFFFE03FFFFC000007FFFF803FFFFC0000007FFE003FF0000 +42377BB54B>II<7FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0 +007FFFFE007FFFFFF0007FFFFE007FFFFFF0007FFFFE00007FFE00000FFF0000003FFF00 +0007F80000001FFF800007F00000000FFFC0000FE000000007FFC0001FC000000007FFE0 +003F8000000003FFF0003F0000000001FFF8007E0000000000FFFC00FC00000000007FFE +01FC00000000007FFE03F800000000003FFF07F000000000001FFF8FE000000000000FFF +CFC0000000000007FFFF80000000000003FFFF00000000000003FFFF00000000000001FF +FE00000000000000FFFC000000000000007FFE000000000000003FFF000000000000003F +FF000000000000001FFF800000000000001FFFC00000000000003FFFE00000000000007F +FFF0000000000000FFFFF0000000000001FDFFF8000000000001F8FFFC000000000003F0 +7FFE000000000007E03FFF00000000000FE01FFF00000000001FC01FFF80000000003F80 +0FFFC0000000007F0007FFE000000000FE0003FFF000000000FC0001FFF800000001F800 +01FFF800000003F00000FFFC00000007F000007FFE0000000FE000003FFF0000001FC000 +001FFF800000FFF000001FFF8000FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE00 +01FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC042357EB447>120 +DI E /Fo 19 120 df<03800FE01FE01FE01FF01FF01FE00760 +006000E000C001C001800380070006000E001C003800F000C0000C157B8716>44 +D<00007F000003FFC0000783E0001F00F0003C00F80078007800F8007800F0007C01F000 +7C03E0007C03E0007C07C0007C07C0007C0FC000FC0F8000FC1F8000FC1F8000FC1F8000 +F83F0001F83F0001F83F0001F83F0001F87E0003F07E0003F07E0003F07E0003F0FC0007 +E0FC0007E0FC0007E0FC0007C0FC000FC0F8000FC0F8000F80F8001F80F8001F00F8001F +00F8003E00F8003C00F80078007800F8007801F0003C03E0001F0F80000FFE000003F800 +001E2D78AB24>48 D<00000300000700000F00001E00003E00007E0000FE0003FC001F7C +007CFC0060FC0000F80000F80001F80001F80001F00001F00003F00003F00003E00003E0 +0007E00007E00007C00007C0000FC0000FC0000F80000F80001F80001F80001F00001F00 +003F00003F00003E00003E00007E00007E00007C00007C0000FC00FFFFF8FFFFF8182C79 +AB24>I<00007F000001FFC00007C1F0000F00F8001E007C0038007C0078003E00F3003E +00E3803E01E1803F01C1803F03C1803F0381803F0383807F0783007E0707007E0706007E +070E00FE071C00FC03F801F801E003F0000007E000000FC000001F8000003F000000FC00 +0001F8000007E000000F8000003E0000007C000001F0000003E0001C07C0003C07800038 +0F0000381E0000783C0000F03FC001F07FFE03E078FFFFC0703FFFC0F00FFF00E003FE00 +E000F800202D7AAB24>I<00007F800001FFE00007C0F8001E007C003C003C0078003E00 +F0001E01E6001E01C7001E01C3003E03C3003E0383003E0387003E01CE007E01FC007C00 +7800F8000000F8000001F0000003E000000F8000003F00000FFC00000FFC0000001E0000 +001F0000000F8000000F8000000FC000000FC000000FC000000FC018000FC07C000FC07C +001FC0FC001F80FC001F80F8003F80E0003F00E0007E00F000FC007001F8007803F0003C +0FC0000FFF000003F800001F2D79AB24>I<0000003800000078000000F8000000F80000 +00F8000001F8000001F0000001F0000001F0000003E0000003E0000003E0000007C00000 +07C000000F8000000F8000000F8000001F0000001F0000003E0000003C0000007C000000 +78000000F8000000F0000001E0000001E0000003C0000007838000078780000F0F80001E +0F80001C0F8000381F8000701F0000E01F0001E01F0003803F0007003E000E003E001FF8 +3E007FFF7E00F007FC18C000FFF800007FE00000FC000000F8000000F8000000F8000001 +F8000001F0000001F0000001F0000003F0000003E0000003E0000001C0001D397DAB24> +I<00180006001F007E001FFFFC001FFFF0003FFFE0003FFF80003BFC0000380000007800 +0000700000007000000070000000F0000000E0000000E0000000E0000001E3F80001CFFE +0001FC0F0001F00F8003E007C003C007C0038007C0000003E0000007E0000007E0000007 +E0000007E0000007E000000FE03C000FC07E000FC07E000FC07E001FC0FE001F80F8001F +80E0003F00E0007E0070007C007000F8007801F0003803E0001E0F80000FFE000003F800 +001F2D79AB24>I<00001FC000007FF00001F0780007C038000F8078001F00F8003E01F8 +007C01F800F801F801F000E001F0000003E0000007E0000007C000000FC000000FC00000 +1F87E0001F9FF8003FF83C003FE01E003FC01F003FC01F007F800F007F000F807F000F80 +7E001F80FE001F80FC001F80FC001F80FC003F80FC003F00F8003F00F8003F00F8007F00 +F8007E00F8007E00F800FC00F800F800F801F8007801F0007803E0003C07C0001E1F0000 +0FFC000003F000001D2D77AB24>I<01C3E001C001CFF003C003FFF8078003FFF80F0007 +FFF81F0007F8383E000FE01C7C000FC00FFC001F8007F8001E0000F8003E0000F0003C00 +01E000780001E000700003C000F00007C000E00007800000000F800000001F000000001F +000000003E000000003E000000007C000000007C00000000FC00000000F800000001F800 +000001F000000003F000000003F000000007E000000007E00000000FE00000000FC00000 +000FC00000001FC00000001F800000001F800000003F800000003F800000003F00000000 +7F000000007F000000007E000000007E0000000038000000222D77AB24>I<00003F8000 +01FFE00007C0F0000F0078001E003C003C003E0078001E00F0001E00F0001E00F0003E01 +F0003C01F0003C01F0007C01F8007801FC00F001FE01E001FF03C000FFCF80007FFE0000 +3FF800001FF800000FFC00003FFE0000FBFF0001E0FF8003C07FC007803FC00F001FC01E +000FC03E0007C03C0007C07C0007C0780003C0780007C0F8000780F0000780F0000F00F0 +000F0078001E0078003C007C0078003C00F0001F03C00007FF800001FC00001F2D79AB24 +>I<0007C000001FF000007C39C000F81FC001F01FC003E00FC007C00FC00FC00FC01F80 +0F801F800F803F000F803F001F807F001F007E001F007E001F007E003F00FE003E00FC00 +3E00FC003E00FC007E18FC007C38F8007C38F8007C38F800FC387801FC787C03F8707C03 +F8703C0F78E01E1E3DE00FF81FC003E00F001D1F799D24>97 D<0000F8000003FE00000F +8738001F03F8007E03F8007C01F800F801F801F801F803F001F803F001F007E001F007E0 +03F00FE003F00FC003E00FC003E00FC007E01FC007E01F8007C01F8007C01F800FC01F80 +0FC01F800F801F801F800F801F800F803F800F807F0007C0FF0003C3FF0001FFBF00007E +3E0000003E0000007E0000007E0000007C0000007C000000FC003800F800FC01F800FC01 +F000FC03E000F807C000F01F80007FFE00001FF000001D2C7C9D21>103 +D<001F000003FF000003FF0000003F0000003F0000003E0000003E0000007E0000007E00 +00007C0000007C000000FC000000FC000000F8000000F8000001F8000001F87E0001F3FF +8001F787C003FE03E003FC03E003F803E003F803E007F003E007E003E007E003E007C003 +E00FC007E00FC007C00F8007C00F8007C01F800FC01F800F801F000F801F001F803F001F +063F001F0E3E003F0E3E003E0E7E003E1E7E007E1C7C007C1C7C003C38FC003C38FC003C +70F8001FE0700007801F2F7BAD24>I<000E00001F00003F80003F80001F00000E000000 +0000000000000000000000000000000000000000000000000003E0000FF0001E78001C7C +00387C00787C00707C0070FC00F0F800E0F800E1F800C1F00001F00003F00003E00007E0 +0007C00007C0000FC0000F83000F87001F87001F07001F0F003F0E003E0E001E1C001E3C +001E38000FF00003C000112E7AAC16>I<007C0FFC0FFC00FC00FC00F800F801F801F801 +F001F003F003F003E003E007E007E007C007C00FC00FC00F800F801F801F801F001F003F +003F003E003E007E007E007C007C00FC30FC70F870F870F8F0F8E0F0E0F1E0F1C0FBC07F +801E000E2F7AAD12>108 D<0003F800000FFE00003E0F8000FC07C001F003C003E003E0 +07E003E00FC001F00F8001F01F8001F03F0001F03F0003F07F0003F07E0003F07E0003F0 +7E0007F0FE0007E0FC0007E0FC0007E0FC000FC0FC000FC0FC001F80FC001F807C003F00 +7C003E007C007C003E00F8001E01F0000F07C00007FF000001FC00001C1F799D24>111 +D<07803E001FE0FF803CF3C1C038F781E078FF07E070FE07E070FC07E0F1FC07E0E1F803 +80E1F80000E1F00000C3F0000003F0000003E0000003E0000007E0000007E0000007C000 +0007C000000FC000000FC000000F8000000F8000001F8000001F8000001F0000001F0000 +003F0000003F0000003E0000001C0000001B1F7A9D1E>114 D<03C001C00FF003E01E78 +07F01C7C07F0387C07F0787C03F0707C01F070FC01F0F0F801E0E0F801E0E1F800E0C1F0 +01E001F001C003F001C003E001C003E003C007E0038007C0038007C0038007C007000FC0 +07000F8007000F800E000F800E000F801C0007801C0007C0380003C0700003E0E00000FF +C000003F00001C1F7A9D21>118 D<03C0000007000FF000700F801E7800F81FC01C7C01 +F81FC0387C01F01FC0787C01F00FC0707C01F007C070FC03F007C0F0F803E00780E0F803 +E00780E1F803E00380C1F007E0078001F007E0070003F007C0070003E007C0070003E00F +C00F0007E00FC00E0007C00F800E0007C00F800E0007C00F801E000FC01F801C000F801F +001C000F801F003C000F801F0038000F801F00780007803F00700007C07F80F00003C07F +81E00001E0E7C3C00000FFC1FF8000003F007E00002A1F7A9D2F>I +E /Fp 4 101 df<000001FC000000000007FF00000000001FFFC0E00000007F03E3F800 +0001FC01F3F8000003F800FFF8000007F0007FF800000FE0007FF000001FC0003FF00000 +3F80003FF000007F80003FF00000FF00001FE00000FE00001FE00001FE00001FE00003FC +00001FE00003FC00001FC00007FC00001FC00007F800003FC0000FF800003FC0000FF000 +003F80001FF000003F80001FF000007F80003FF000007F80003FE000007F00003FE00000 +7F00003FE00000FF00007FE00000FF00007FC00000FE00007FC00000FE00007FC00001FE +00007FC00001FE0000FF800001FC0000FF800001FC0000FF800003FC0000FF800003FC03 +C0FF800003F803C0FF000003F803C0FF000007F803C0FF000007F807C07F00000FF00780 +7F00000FF007807F00001FF00F807F00003FF00F003F80007FE00F003F8000FFE01F001F +8001F7E01E001FC003E7E03E000FC007C3F03C0007E00F83F07C0003F03F01F8F80001FF +FC00FFF000007FF0007FE000001FC0001F8000323574B33C>97 D<0003FE000003FFFE00 +0007FFFC000007FFFC000007FFFC00000007FC00000007F800000003F800000007F80000 +0007F800000007F000000007F00000000FF00000000FF00000000FE00000000FE0000000 +1FE00000001FE00000001FC00000001FC00000003FC00000003FC00000003F800000003F +800000007F800000007F800000007F000000007F00000000FF00000000FF00000000FE00 +000000FE01FC0001FE0FFF0001FE1FFFC001FC7E07E001FCF803F003FFF001F803FFC001 +FC03FF8000FC03FF0000FE07FE0000FE07FE0000FE07FC00007F07F800007F0FF800007F +0FF000007F0FE00000FF0FE00000FF1FE00000FF1FE00000FF1FC00000FF1FC00000FF3F +C00001FF3FC00001FF3F800001FF3F800001FF7F800003FF7F800003FE7F000003FE7F00 +0003FE7F000007FE7F000007FCFE000007FCFE000007FCFE00000FF8FE00000FF8FE0000 +0FF0FE00001FF0FE00001FE0FC00003FE0FE00003FC07E00007F807E00007F007E0000FF +007E0001FE003E0001FC003F0003F8001F0007F0001F800FE0000FC03F800007E07F0000 +03FFFC000000FFF00000003F800000285473D236>I<0000003FC000000001FFF8000000 +0FFFFE0000003FE07F0000007F001F800001FE000F800003F80007C00007F00003C0000F +E0001FC0001FC0003FC0003F80007FC0007F80007FC000FF00007FC001FE00007FC001FE +00007F8003FC00003F0007FC0000080007F8000000000FF8000000000FF8000000001FF0 +000000001FF0000000003FF0000000003FE0000000003FE0000000003FE0000000007FE0 +000000007FC0000000007FC0000000007FC0000000007FC000000000FF8000000000FF80 +00000000FF8000000000FF8000000000FF80000000007F80000000007F80000000007F80 +000001807F80000003C07F80000007C03F8000000F803F8000001F803F8000003F001FC0 +00007E001FC00000FC000FE00003F00007F0000FE00003F8003F800001FE03FE0000007F +FFF80000001FFFE000000007FE0000002A3574B336>I<000000000007FC0000000007FF +FC000000000FFFF8000000000FFFF8000000000FFFF800000000000FF800000000000FF0 +000000000007F000000000000FF000000000000FF000000000000FE000000000000FE000 +000000001FE000000000001FE000000000001FC000000000001FC000000000003FC00000 +0000003FC000000000003F8000000000003F8000000000007F8000000000007F80000000 +00007F0000000000007F000000000000FF000000000000FF000000000000FE0000000000 +00FE000000000001FE000000000001FE000000000001FC00000001FC01FC00000007FF03 +FC0000001FFFC3FC0000007F03E3F8000001FC01F3F8000003F800FFF8000007F0007FF8 +00000FE0007FF000001FC0003FF000003F80003FF000007F80003FF00000FF00001FE000 +00FE00001FE00001FE00001FE00003FC00001FE00003FC00001FC00007FC00001FC00007 +F800003FC0000FF800003FC0000FF000003F80001FF000003F80001FF000007F80003FF0 +00007F80003FE000007F00003FE000007F00003FE00000FF00007FE00000FF00007FC000 +00FE00007FC00000FE00007FC00001FE00007FC00001FE0000FF800001FC0000FF800001 +FC0000FF800003FC0000FF800003FC03C0FF800003F803C0FF000003F803C0FF000007F8 +03C0FF000007F807C07F00000FF007807F00000FF007807F00001FF00F807F00003FF00F +003F80007FE00F003F8000FFE01F001F8001F7E01E001FC003E7E03E000FC007C3F03C00 +07E00F83F07C0003F03F01F8F80001FFFC00FFF000007FF0007FE000001FC0001F800036 +5474D23C>I E /Fq 8 122 df<00000FFFFFFFF000000FFFFFFFF000001FFFFFFFE00000 +1FFFFFFFE000000007FF800000000003FF000000000003FE000000000007FE0000000000 +07FE000000000007FC000000000007FC00000000000FFC00000000000FFC00000000000F +F800000000000FF800000000001FF800000000001FF800000000001FF000000000001FF0 +00000000003FF000000000003FF000000000003FE000000000003FE000000000007FE000 +000000007FE000000000007FC000000000007FC00000000000FFC00000000000FFC00000 +000000FF800000000000FF800000000001FF800000000001FF800000000001FF00000000 +0001FF000000000003FF000000000003FF000000000003FE000000000003FE0000000000 +07FE000000000007FE000000000007FC000000000007FC00000000000FFC00000000000F +FC00000000000FF800000000000FF800000000001FF800000000001FF800000000001FF0 +00000000001FF000000000003FF000000000003FF000000000003FE000000000003FE000 +000000007FE000000000007FE000000000007FC000000000007FC00000000000FFC00000 +000000FFC00000000000FF800000000000FF800000000001FF800000000001FF80000000 +0001FF000000000001FF000000000003FF000000000003FF000000000003FE0000000000 +03FE000000000007FE000000000007FE000000000007FC000000000007FC00000000000F +FC00000000000FFC00000000003FFE00000000FFFFFFFF000000FFFFFFFF000000FFFFFF +FF000000FFFFFFFF00000034527BD134>73 D<00000FFFFFFFFFF800000000000FFFFFFF +FFFFC0000000000FFFFFFFFFFFF8000000000FFFFFFFFFFFFE000000000007FF00001FFF +000000000003FE000001FFC00000000003FE0000007FE00000000007FE0000003FF00000 +000007FE0000001FF80000000007FC0000000FFC0000000007FC00000007FE000000000F +FC00000007FE000000000FFC00000003FF000000000FF800000003FF000000000FF80000 +0003FF000000001FF800000003FF000000001FF800000003FF800000001FF000000003FF +800000001FF000000003FF800000003FF000000003FF000000003FF000000007FF000000 +003FE000000007FF000000003FE000000007FF000000007FE000000007FE000000007FE0 +0000000FFE000000007FC00000000FFE000000007FC00000001FFC00000000FFC0000000 +1FF800000000FFC00000003FF800000000FF800000003FF000000000FF800000007FE000 +000001FF80000000FFC000000001FF80000001FF8000000001FF00000003FE0000000001 +FF00000007FC0000000003FF0000001FF00000000003FF0000007FE00000000003FE0000 +03FF800000000003FE00003FFC000000000007FFFFFFFFF0000000000007FFFFFFFF0000 +0000000007FFFFFFFF00000000000007FC00007FC000000000000FFC00001FE000000000 +000FFC000007F800000000000FF8000003FC00000000000FF8000001FE00000000001FF8 +000001FE00000000001FF8000000FF00000000001FF0000000FF00000000001FF0000000 +FF80000000003FF00000007F80000000003FF00000007F80000000003FE00000007F8000 +0000003FE00000007F80000000007FE0000000FF80000000007FE0000000FF8000000000 +7FC0000000FF80000000007FC0000000FF8000000000FFC0000001FF8000000000FFC000 +0001FF8000000000FF80000001FF8000000000FF80000001FF8000000001FF80000003FF +8000000001FF80000003FF8000000001FF00000003FF8000000001FF00000003FF800000 +0003FF00000003FF8000000003FF00000007FF8000000003FE00000007FF8000000003FE +00000007FF0001C00007FE00000007FF0003C00007FE00000007FF0003800007FC000000 +07FF0003800007FC00000007FF000780000FFC00000007FF800700000FFC00000003FF80 +0F00003FFE00000003FF801E007FFFFFFF000001FF803C00FFFFFFFF000000FFC07C00FF +FFFFFF0000007FE0F800FFFFFFFE0000003FFFE000000000000000000FFFC00000000000 +00000000FF000052547AD159>82 D<0000007F000000000007FFC0000000001FFFE03C00 +00007F81F87E000000FE0078FF000001FC003DFF000007F0001FFF00000FE0000FFE0000 +1FE0000FFE00003FC00007FE00007F800007FC0000FF000007FC0000FF000007FC0001FE +000007FC0003FE000007F80003FC000007F80007FC000007F80007F800000FF8000FF800 +000FF0000FF800000FF0001FF000000FF0001FF000001FF0003FF000001FE0003FE00000 +1FE0003FE000001FE0003FE000003FE0007FE000003FC0007FC000003FC0007FC000003F +C0007FC000007FC0007FC000007F8000FF8000007F8000FF8000007F8000FF800000FF80 +00FF800000FF0038FF800000FF0038FF000000FF0038FF000001FF00387F000001FE0078 +7F000001FE00707F000003FE00707F800007FE00F03F800007FE00E03F80000FFE00E03F +80001FFC01E01FC0003DFC01C00FC00079FE03C00FE001F0FE038007F003E0FE078003F8 +1F807F0F0000FFFF003FFE00007FFC000FFC00000FE00003F00035357CB33D>97 +D<0001FF00000003FFFF00000003FFFE00000007FFFE00000007FFFE0000000007FE0000 +000007FC0000000003FC0000000007FC0000000007FC0000000007F80000000007F80000 +00000FF8000000000FF8000000000FF0000000000FF0000000001FF0000000001FF00000 +00001FE0000000001FE0000000003FE0000000003FE0000000003FC0000000003FC00000 +00007FC0000000007FC0000000007F80000000007F8000000000FF8000000000FF800000 +0000FF0000000000FF00FE000001FF03FFC00001FF0FFFE00001FE3F03F80001FE7C01FC +0003FEF000FE0003FFE0007E0003FFC0007F0003FF80003F8007FF00003F8007FE00003F +8007FC00003FC007F800003FC00FF800003FC00FF800003FC00FF000003FC00FF000003F +C01FF000003FC01FF000003FC01FE000003FC01FE000003FC03FE000007FC03FE000007F +C03FC000007FC03FC000007FC07FC00000FFC07FC00000FF807F800000FF807F800000FF +807F800001FF807F800001FF00FF000001FF00FF000001FF00FF000003FE00FF000003FE +00FF000003FC00FF000007FC00FE000007F800FE00000FF0007E00000FF0007F00001FE0 +007F00001FC0007F00003FC0003F00007F80003F0000FF00001F8000FE00001F8001FC00 +000FC007F0000007E00FE0000003F03FC0000001FFFF000000007FFC000000001FE00000 +002A547BD232>I<0000001FF000000001FFFE00000007FFFF8000001FF00FC000007F80 +01E00000FE0000F00003FC0000780007F80001F8000FF00007F8001FE0000FF8003FC000 +1FF8007F80001FF800FF00001FF801FF00001FF801FE00001FF003FC00001FE007FC0000 +078007F8000000000FF8000000000FF8000000001FF0000000001FF0000000003FF00000 +00003FE0000000003FE0000000003FE0000000007FE0000000007FC0000000007FC00000 +00007FC0000000007FC0000000007F8000000000FF8000000000FF8000000000FF800000 +00007F80000000007F80000000007F80000000007F80000000307F80000000387F800000 +00783F80000000F03F80000001E01FC0000003C01FC000000F800FE000001F0007F00000 +7E0007F00001F80001FC000FE00000FF00FF8000007FFFFE0000001FFFF000000003FF00 +00002D357CB332>I<000000FFC000000007FFF80000003FFFFE0000007F003F000001FC +000F800003F00003C00007E00001E0000FC00001E0000FC00003E0001F80000FE0001F80 +001FE0003F00001FE0003F00001FE0003F00001FE0007F00001FC0007F80000F80007F80 +000000007FC0000000007FE0000000007FFC000000007FFFE00000003FFFFE0000003FFF +FF8000001FFFFFE000000FFFFFF0000007FFFFF8000001FFFFFC0000007FFFFE0000000F +FFFE000000007FFF000000000FFF0000000003FF0000000001FF0000000000FF00070000 +007F001F8000007F007FC000007F007FC000007F00FFC000007E00FFC000007E00FFC000 +007E00FF800000FC00FF800000FC00FE000001F800F0000003F000F0000003F000780000 +07E0003C00001F80001F00007F00000FF003FE000003FFFFF8000000FFFFC00000001FFC +0000002B357AB337>115 D<00003F80003F800000FFE000FFE00003FFF803FFF8000FC0 +FC07C0FC001F007E0F001E003C003F1E007E0078003F9C01FF00F0003FBC03FF00E0001F +F803FF01E0001FF007FF03C0001FF007FF0380001FE007FE0780001FE007FE0700003FE0 +03FC0F00003FC000F00E00003FC000000E00003FC000001E00007FC000001E00007FC000 +000000007F8000000000007F800000000000FF800000000000FF000000000000FF000000 +000000FF000000000001FF000000000001FE000000000001FE000000000001FE00000000 +0003FE000000000003FC000000000003FC000000000003FC000000000007FC0000000000 +07F8000070000007F8000070000007F800007000000FF80000F00F000FF80000E03FC00F +F00001E07FC00FF00001C07FC01FF00003C0FFC01FF0000380FFC03FF0000780FFC03FF0 +000F00FF807BF0001E00FF0073F8003C00FC00F1F8007C007801E0FC00F0003E07C07E07 +E0001FFF803FFFC0000FFE000FFF000001F80003F8000038357CB343>120 +D<000FE000000000003FF8000000E0007FFC000003F800F07E000007F801E07F000007F8 +03C03F00000FF807803F80000FF00F003F80000FF00E007F80000FF01E007F80001FF01C +007F80001FE03C007F80001FE03800FF80001FE03800FF00003FE07800FF00003FC07001 +FF00003FC07001FE00003FC0F001FE00007FC0F003FE00007F800003FC00007F800007FC +00007F800007F80000FF800007F80000FF00000FF80000FF00000FF00000FF00000FF000 +01FF00001FF00001FE00001FE00001FE00001FE00001FE00001FE00003FE00003FE00003 +FC00003FC00003FC00003FC00003FC00003FC00007FC00007FC00007F800007F800007F8 +00007F800007F800007F80000FF800007F80000FF000007F80000FF000007F80000FF000 +007F80001FF000007F80001FE000007F80003FE000003F80007FE000003F80007FE00000 +3FC000FFC000001FC003FFC000000FE007FFC0000007F81FFFC0000003FFFE7F80000000 +FFF87F800000001FE07F800000000000FF800000000000FF000000000000FF0000000000 +01FF000000000001FE000000000001FE000007E00003FC00000FF00003FC00001FF00007 +F800003FF00007F800003FF0000FF000003FF0001FE000003FF0001FC000003FE0003F80 +00003F80007F0000003C0000FE0000003C0001FC0000001E0003F80000000F000FF00000 +000FE03FC000000003FFFF0000000000FFFC00000000003FE000000000354C7DB339>I +E /Fr 33 122 df<00000FF8000000007FFE00000001F80780000007E001C000001F8000 +E000003F0007E000007E000FF000007E000FF00000FC000FF00000FC000FF00001F8000F +F00001F80007E00001F80001800001F80000000001F80000000001F80000000001F80000 +000001F80000000001F80000000001F80000000001F80000000001F80000000001F80003 +F000FFFFFFFFF000FFFFFFFFF000FFFFFFFFF00001F8000FF00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 +F00001F80003F00001F80003F00003FC0007F8007FFFE0FFFFC07FFFE0FFFFC07FFFE0FF +FFC02A3B7FBA2E>12 D<1C007F00FF80FF80FF80FF80FF807F001C000909798817>46 +D<0003F80000001FFF0000007E0FC00000F803E00001E000F00003C000780007C0007C00 +0F80003E000F80003E001F00001F001F00001F003F00001F803F00001F803F00001F807E +00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC0FE00000FE0FE00 +000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE0000 +0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000F +E0FE00000FE0FE00000FE0FE00000FE07E00000FC07E00000FC07E00000FC07E00000FC0 +7F00001FC03F00001F803F00001F803F00001F801F00001F001F80003F000F80003E000F +80003E0007C0007C0003E000F80001F001F00000F803E000007E0FC000001FFF00000003 +F80000233A7DB72A>48 D<0001C0000003C0000007C000001FC00000FFC000FFFFC000FF +FFC000FF1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 +1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 +1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 +1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 +1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 +1FC000003FE0007FFFFFF07FFFFFF07FFFFFF01C3879B72A>I<000FF00000007FFE0000 +01FFFF800003E03FE0000F000FF0000E0007F8001C0003FC00380001FE00300001FE0070 +0000FF00600000FF00FC0000FF00FF00007F80FF80007F80FF80007F80FF80007F80FF80 +007F80FF80007F807F00007F801C00007F800000007F80000000FF00000000FF00000000 +FF00000001FE00000001FC00000003FC00000003F800000007F000000007E00000000FE0 +0000001FC00000003F800000003F000000007C00000000F800000001F000000003E00000 +0007C00000000F800000000F000000001E000180003C000180007800018000F000038001 +E000030003C000030007800003000E000007000FFFFFFF001FFFFFFF003FFFFFFF007FFF +FFFE00FFFFFFFE00FFFFFFFE00FFFFFFFE0021387CB72A>I<0007F80000003FFF000000 +7FFFC00001F80FF00003C007F800078003FC000E0001FC000F0001FE001FE000FE001FF0 +00FF001FF000FF001FF000FF001FF000FF001FF000FF000FE000FF0007C000FF00000000 +FE00000001FE00000001FE00000001FC00000003F800000003F800000007F000000007E0 +0000000F800000007E0000001FFC0000001FFF800000000FE000000007F000000001FC00 +000001FE00000000FF000000007F800000007F800000007FC00000007FC00000003FC000 +00003FE00000003FE01E00003FE07F80003FE0FFC0003FE0FFC0003FE0FFC0003FE0FFC0 +003FE0FFC0003FC0FF80007FC07F80007F807E00007F80700000FF00380001FE001E0001 +FE000F8003F80007F00FF00001FFFFC000007FFF0000000FF80000233A7DB72A>I66 D68 D<000003FF00000000001FFFE000000000 +FE01FC00000001F8007E00000007E0001F8000000FC0000FC000003F800007F000007F00 +0003F80000FE000001FC0001FC000000FE0001F80000007E0003F80000007F0007F00000 +003F8007F00000003F800FE00000001FC00FE00000001FC01FE00000001FE01FC0000000 +0FE03FC00000000FF03FC00000000FF03FC00000000FF07FC00000000FF87F8000000007 +F87F8000000007F87F8000000007F8FF8000000007FCFF8000000007FCFF8000000007FC +FF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF +8000000007FCFF8000000007FCFF8000000007FCFF8000000007FC7F8000000007F87FC0 +0000000FF87FC00000000FF87FC00000000FF83FC00000000FF03FC00000000FF01FE000 +00001FE01FE00000001FE01FE00000001FE00FF00000003FC007F00000003F8007F80000 +007F8003F80000007F0001FC000000FE0001FC000000FE0000FE000001FC00007F000003 +F800003F800007F000001FC0000FE0000007E0001F80000003F8007F00000000FE01FC00 +0000001FFFE00000000003FF000000363D7BBA41>79 D82 +D<000FF800C0003FFE01C000FFFF81C003F807E3C007E000F7C00FC0007FC01F80003FC0 +3F00001FC03E00000FC07E000007C07E000007C07C000003C0FC000003C0FC000001C0FC +000001C0FC000001C0FE000000C0FE000000C0FE000000C0FF000000C0FF800000007FC0 +0000007FE00000007FF80000003FFF8000001FFFF800001FFFFF80000FFFFFE00007FFFF +F80003FFFFFE0000FFFFFF00003FFFFF800007FFFFC000007FFFC0000007FFE00000007F +E00000003FF00000001FF00000000FF000000007F800000007F8C0000003F8C0000003F8 +C0000001F8C0000001F8C0000001F8E0000001F8E0000001F8E0000001F0F0000001F0F0 +000003F0F8000003E0FC000007E0FE000007C0FF00000FC0FF80001F80FBF0003F00F0FE +00FE00E03FFFF800E00FFFE000C001FF0000253D7CBA2E>I<001FE0000000FFFC000003 +E03F000007000F80000F8007E0001FC003F0001FE003F0001FE001F8001FE001F8001FE0 +00FC000FC000FC00078000FC00000000FC00000000FC00000000FC00000000FC0000007F +FC000007FFFC00003FE0FC0000FE00FC0003F800FC000FF000FC001FC000FC003FC000FC +007F8000FC007F0000FC007F0000FC0CFE0000FC0CFE0000FC0CFE0000FC0CFE0001FC0C +FE0001FC0CFF0003FC0C7F00077C0C7F80063E183FC01E3E180FE0781FF003FFF00FE000 +7F8007C026277DA52A>97 D<03F0000000FFF0000000FFF0000000FFF00000000FF00000 +0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 +03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 +F000000003F000000003F01FE00003F07FF80003F1E03E0003F3801F8003F7000FC003FE +0007E003FC0003F003F80001F803F00001F803F00000FC03F00000FC03F00000FE03F000 +00FE03F000007E03F000007F03F000007F03F000007F03F000007F03F000007F03F00000 +7F03F000007F03F000007F03F000007F03F000007F03F000007E03F00000FE03F00000FE +03F00000FC03F00001FC03F80001F803F80003F003FC0003F003EE0007E003C6000FC003 +C7801F000381E07E000300FFF80000001FC000283B7EB92E>I<0003FC00001FFF80007E +03E001F8007003F000F807E001FC0FC003FC0FC003FC1F8003FC3F8003FC3F0001F87F00 +00F07F0000007F0000007E000000FE000000FE000000FE000000FE000000FE000000FE00 +0000FE000000FE000000FE000000FE0000007E0000007F0000007F0000003F0000063F80 +00061F80000E1FC0000C0FC0001C07E0003803F0007001F800E0007C07C0001FFF000007 +F8001F277DA525>I<0000000FC0000003FFC0000003FFC0000003FFC00000003FC00000 +000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000000 +0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F +C00000000FC00003F80FC0001FFF0FC0007E078FC000F801EFC003F0007FC007E0003FC0 +0FC0001FC00FC0001FC01F80000FC03F80000FC03F00000FC07F00000FC07F00000FC07E +00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00 +000FC0FE00000FC0FE00000FC0FE00000FC07E00000FC07F00000FC07F00000FC03F0000 +0FC03F00000FC01F80001FC01F80001FC00FC0003FC007E0007FC003F000EFF001F801CF +FF007C078FFF001FFE0FFF0007F80FC0283B7DB92E>I<0007F800001FFF00007C0FC001 +F803E003F001F007E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E7F +00003F7E00003FFE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000FE +000000FE000000FE0000007E0000007E0000007F0000007F0000003F0000033F8000031F +8000070FC0000607C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC0020 +277EA525>I<00007E000003FF80000FC1E0001F87E0003F0FF0007E0FF0007E0FF000FC +0FF000FC0FF001F803C001F8000001F8000001F8000001F8000001F8000001F8000001F8 +000001F8000001F8000001F8000001F8000001F8000001F80000FFFFFC00FFFFFC00FFFF +FC0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 +000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 +000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 +000001F8000001F8000003FC00007FFFF8007FFFF8007FFFF8001C3B7FBA19>I<000000 +03F0000FF00FF8003FFC3C3C00F81F707C01F00FE07C03E007C07C07C003E0100FC003F0 +000FC003F0001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F800 +1F8001F8001F8001F8000FC003F0000FC003F00007C003E00003E007C00003F00F800003 +F81F0000073FFC0000060FF000000E000000000E000000000E000000000E000000000F00 +0000000F000000000FC000000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF8003FFFF +FFC00F80007FE01F00000FF03E000003F07C000001F07C000001F8F8000000F8F8000000 +F8F8000000F8F8000000F8F8000000F8FC000001F87C000001F03E000003E03F000007E0 +0F80000F8007E0003F0001FC01FC00007FFFF0000007FF000026387EA52A>I<03F00000 +0000FFF000000000FFF000000000FFF0000000000FF00000000003F00000000003F00000 +000003F00000000003F00000000003F00000000003F00000000003F00000000003F00000 +000003F00000000003F00000000003F00000000003F00000000003F00000000003F00000 +000003F00000000003F00000000003F00FF0000003F03FFC000003F0F03F000003F1C01F +800003F3800FC00003F7000FC00003FE000FC00003FC0007E00003FC0007E00003F80007 +E00003F80007E00003F80007E00003F00007E00003F00007E00003F00007E00003F00007 +E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007 +E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007 +E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00007F8000F +F000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80293A7EB92E>I<0380000FE0001FF000 +1FF0001FF0001FF0001FF0000FE000038000000000000000000000000000000000000000 +00000000000000000000000003F000FFF000FFF000FFF00007F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 +03F00007F800FFFFC0FFFFC0FFFFC012387EB717>I<03F000FFF000FFF000FFF0000FF0 +0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 +0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 +0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 +0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 +0003F00007F800FFFFC0FFFFC0FFFFC0123A7EB917>108 D<03F00FF0001FE000FFF03F +FC007FF800FFF0F03F01E07E00FFF1C01F83803F000FF3800FC7001F8003F7000FCE001F +8003FE000FDC001F8003FC0007F8000FC003FC0007F8000FC003F80007F0000FC003F800 +07F0000FC003F80007F0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F +C003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F000 +07E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F +C003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F000 +07E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F +C007F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40257E +A445>I<03F00FF00000FFF03FFC0000FFF0F03F0000FFF1C01F80000FF3800FC00003F7 +000FC00003FE000FC00003FC0007E00003FC0007E00003F80007E00003F80007E00003F8 +0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0 +0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0 +0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0 +0007E00003F00007E00003F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FFFF +C1FFFF80FFFFC1FFFF8029257EA42E>I<0003FE0000000FFF8000003E03E00000F800F8 +0001F0007C0003E0003E0007C0001F000F80000F801F80000FC01F000007C03F000007E0 +3F000007E07E000003F07E000003F07E000003F07E000003F0FE000003F8FE000003F8FE +000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F87E00 +0003F07E000003F07F000007F03F000007E03F000007E01F80000FC00F80000F800FC000 +1F8007E0003F0003F0007E0000F800F800007E03F000001FFFC0000003FE000025277EA5 +2A>I<03F01FE000FFF07FF800FFF1E07E00FFF3801F8007F7000FC003FE0007E003FC00 +03F003F80003F803F00001F803F00001FC03F00000FC03F00000FE03F00000FE03F00000 +FE03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F +03F000007F03F000007F03F000007F03F00000FE03F00000FE03F00000FE03F00001FC03 +F00001FC03F80003F803F80003F003FC0007F003FE000FE003F6000FC003F7803F0003F1 +E07E0003F0FFF80003F01FC00003F000000003F000000003F000000003F000000003F000 +000003F000000003F000000003F000000003F000000003F000000003F000000007F80000 +00FFFFC00000FFFFC00000FFFFC0000028357EA42E>I<0003F800C0001FFE01C0007E07 +81C000FC01C3C003F000E3C007F00077C00FE00037C00FC0003FC01FC0001FC03F80001F +C03F80000FC07F00000FC07F00000FC07F00000FC0FE00000FC0FE00000FC0FE00000FC0 +FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC07F +00000FC07F00000FC07F00000FC03F00000FC03F80001FC01F80001FC01FC0003FC00FC0 +003FC007E0007FC003F000EFC001F801CFC0007E078FC0001FFE0FC00007F80FC0000000 +0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F +C00000000FC00000000FC00000000FC00000001FE0000003FFFF000003FFFF000003FFFF +28357DA42C>I<07E01F00FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003EE07F003 +EC03E003FC008003F8000003F8000003F8000003F8000003F0000003F0000003F0000003 +F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003 +F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000007F80000FF +FFF000FFFFF000FFFFF0001C257EA421>I<00FF030003FFE7000F80FF001E003F003C00 +1F0078000F0070000700F0000700F0000700F0000300F8000300F8000300FC000300FF00 +00007FE000007FFF00003FFFE0001FFFF8000FFFFC0003FFFE0000FFFF000007FF800000 +7F8000001F80C0000FC0C00007C0C00007C0E00003C0E00003C0E00003C0F00003C0F000 +0380F8000780FC000780FC000F00FF001E00F3C07C00E1FFF000C03F80001A277DA521> +I<0018000000180000001800000018000000180000003800000038000000380000007800 +00007800000078000000F8000001F8000003F8000007F800001FFFFF00FFFFFF00FFFFFF +0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800 +0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800 +0001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800 +C000FC01C000FC0180007C0380007E0300003F0700000FFE000001F8001A347FB220>I< +03F00007E000FFF001FFE000FFF001FFE000FFF001FFE0000FF0001FE00003F00007E000 +03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 +03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 +03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 +03F00007E00003F00007E00003F00007E00003F0000FE00003F0000FE00003F0000FE000 +03F0001FE00001F0001FE00001F8003FE00000F80077F80000FC00E7FF80003F03C7FF80 +001FFF87FF800003FC07E00029267EA42E>III121 +D E /Fs 7 53 df<0006000C00180030006000E001C00380038007000F000E001E001E00 +1C003C003C003C0078007800780078007800F800F000F000F000F000F000F000F000F000 +F000F000F000F800780078007800780078003C003C003C001C001E001E000E000F000700 +0380038001C000E0006000300018000C00060F3B7AAB1A>40 DI<003F800001FFF00003E0F80007803C000F001E001E000F003E000F803E +000F803C0007807C0007C07C0007C07C0007C07C0007C0FC0007E0FC0007E0FC0007E0FC +0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC +0007E0FC0007E07C0007C07C0007C07C0007C03E000F803E000F803E000F801F001F000F +001E0007803C0003E0F80001FFF000003F80001B277EA521>48 D<00380000780001F800 +1FF800FEF800E0F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 +00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 +00F80000F80000F80000F80000F80000F80000F80000F80001FC00FFFFF8FFFFF815267B +A521>I<00FF000003FFE0000E03F0001800F80030007C0060007E0078003F00FC003F00 +FE001F80FE001F80FE001F80FE001F807C001F8000001F8000001F0000003F0000003E00 +00007E0000007C000000F8000001F0000003E0000003C00000078000000E0000001C0000 +003800000070018000E001800180018003000300060003000C0003001FFFFF003FFFFF00 +7FFFFE00FFFFFE00FFFFFE0019267DA521>I<00FF000003FFE0000F01F8001C007C0030 +007E003C003E007E003F007E003F007E003F007E003F003C003F0000003E0000007E0000 +007C000000F8000001F0000007E00001FF800001FF00000001E0000000F00000007C0000 +003E0000003F0000001F0000001F8000001F8038001F807C001F80FE001F80FE001F80FE +001F00FC003F0078003E0070007C003800F8001F01F00007FFC00000FF000019277DA521 +>I<0000380000003800000078000000F8000001F8000001F8000003F8000007F8000006 +F800000CF800001CF8000018F8000030F8000070F8000060F80000C0F80001C0F8000180 +F8000300F8000700F8000E00F8000C00F8001C00F8003800F8003000F8006000F800E000 +F800FFFFFFE0FFFFFFE00000F8000000F8000000F8000000F8000000F8000000F8000000 +F8000001FC00003FFFE0003FFFE01B277EA621>I E /Ft 7 123 +df<0000000000038000000000000FC000000000003FC00000000000FF800000000003FE +00000000000FF800000000003FE00000000000FF800000000003FE00000000000FF80000 +0000003FE00000000000FF800000000003FE00000000000FF800000000003FE000000000 +00FF800000000003FE00000000000FF800000000003FE00000000000FF800000000003FE +00000000000FF800000000003FE000000000007F800000000000FE000000000000FE0000 +000000007F8000000000003FE000000000000FF8000000000003FE000000000000FF8000 +000000003FE000000000000FF8000000000003FE000000000000FF8000000000003FE000 +000000000FF8000000000003FE000000000000FF8000000000003FE000000000000FF800 +0000000003FE000000000000FF8000000000003FE000000000000FF8000000000003FE00 +0000000000FF8000000000003FC000000000000FC000000000000380323279AD41>60 +D<0000E00003F80003F80007F80007F80007F80007F00001C00000000000000000000000 +0000000000000000000000000000000000000000000000F80003FE00070F000E0F801C0F +80180F80380F80300F80701F80601F80603F80E03F00C03F00C07F00007E00007E0000FE +0000FC0001FC0001FC0001F80003F80003F00003F00007F01807E01807E0380FE0300FC0 +300FC0700F80600F80E00F80C00F81C00F838007870003FE0000F80015397EB71D>105 +D<00001FC0000000FFF8000007E07E00000F801F00003F000F80007E000FC000FC0007C0 +01F80007E003F00007E007E00003F00FE00003F00FC00003F01FC00003F03F800007F03F +800007F07F800007F07F000007F07F000007F07F00000FF0FF00000FF0FE00000FE0FE00 +000FE0FE00001FE0FE00001FC0FE00001FC0FC00003F80FC00003F00FC00007F00FC0000 +7E007E0000FC007E0001F8003E0003F0003F0007E0001F000FC0000F801F000007E07E00 +0001FFF00000003F80000024267DA428>111 D<0001C0000003E0000007E0000007E000 +0007E0000007E000000FE000000FC000000FC000000FC000001FC000001F8000001F8000 +001F8000003F8000003F00007FFFFF807FFFFF80FFFFFF80007E0000007E0000007E0000 +00FE000000FC000000FC000000FC000001FC000001F8000001F8000001F8000003F80000 +03F0000003F0000003F0000007F0000007E0000007E0000007E000000FE000000FC00600 +0FC006000FC00E001FC00C001F801C001F8018001F8038001F8070001F8060001F80E000 +0F81C0000787800003FE000000F8000019357EB31E>116 D<0007E001F000001FF807FC +0000783E0E0F0000E01F1C1F0001C01F383F8003800FF07F8003000FE0FF8007000FE0FF +800E000FC0FF000C000FC07E000C001FC03C001C001F80000018001F80000018001F8000 +0000003F80000000003F80000000003F00000000003F00000000007F00000000007F0000 +0000007E00000000007E0000000000FE0000000000FE0000000000FC000C000000FC000C +000001FC001C001E01FC0018003F01F80018007F81F80038007F83F8007000FF83F80060 +00FF07F800E000FE0E7C01C0007C1C7C03800078383E0F00001FF00FFC000007C003F000 +0029267EA42F>120 D<00F800000003FE000070070F0000F80E0F8001F81C0F8001F818 +0F8001F8380F8003F8300F8003F0701F8003F0601F8003F0603F8007F0E03F0007E0C03F +0007E0C07F0007E0007E000FE0007E000FC000FE000FC000FC000FC000FC001FC001FC00 +1F8001F8001F8001F8001F8001F8003F8003F8003F0003F0003F0003F0003F0003F0007F +0003F0007E0003F0007E0003F0007E0003F000FE0003F000FC0003F001FC0001F003FC00 +00F807FC00007C1FF800003FF9F800000FE1F800000003F800000003F000000003F0000E +0007F0003F8007E0007F800FC0007F800FC0007F801F80007F801F00007F003E00007C00 +7C00007000F800003801F000001E07C000000FFF00000001FC00000025367EA429>I<00 +01E00060000FF800E0001FFC00C0003FFE01C0007FFF038000FFFF070000F81FFF0001E0 +03FE0001C0001C0001800038000180007000000000E000000001C0000000038000000007 +000000000E000000001C000000003800000000F000000001E00000000380000000070000 +00000E000000001C0000000038000300007000030000E000070001C00006000380000E00 +0700001C000FFC007C001FFF81F8001E0FFFF8003807FFF0007003FFE0006003FFC000E0 +01FF0000C0007C000023267DA427>I E /Fu 1 4 df<7FFFFFFFFFFFFFFF80FFFFFFFFFF +FFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 +000003C0F000000000000003C0F000000000000003C0FFFFFFFFFFFFFFFFC0FFFFFFFFFF +FFFFFFC0FFFFFFFFFFFFFFFFC07FFFFFFFFFFFFFFF8042447BC34D>3 +D E /Fv 7 96 df<0000000000007C000000000000FC000000000001F8000000000001F8 +000000000003F0000000000007E000000000000FC000000000001FC000000000001F8000 +000000003F0000000000007F0000000000007E000000000000FE000000000001FC000000 +000001F8000000000003F8000000000007F0000000000007F000000000000FE000000000 +001FC000000000001FC000000000003F8000000000007F8000000000007F000000000000 +FF000000000000FE000000000001FE000000000001FC000000000003FC000000000007F8 +000000000007F800000000000FF000000000000FF000000000001FE000000000001FE000 +000000003FC000000000003FC000000000007FC000000000007F800000000000FF800000 +000000FF000000000000FF000000000001FE000000000001FE000000000003FE00000000 +0003FC000000000007FC000000000007F8000000000007F800000000000FF80000000000 +0FF000000000001FF000000000001FF000000000001FE000000000003FE000000000003F +E000000000007FC000000000007FC000000000007FC00000000000FF800000000000FF80 +0000000000FF800000000001FF000000000001FF000000000001FF000000000003FF0000 +00000003FE000000000003FE000000000007FE000000000007FC000000000007FC000000 +000007FC00000000000FFC00000000000FF800000000000FF800000000001FF800000000 +001FF800000000001FF000000000001FF000000000003FF000000000003FF00000000000 +3FF000000000003FE000000000007FE000000000007FE000000000007FE000000000007F +E00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0 +0000000001FF800000000001FF800000000001FF800000000001FF800000000001FF8000 +00000003FF800000000003FF000000000003FF000000000003FF000000000003FF000000 +000003FF000000000007FF000000000007FE000000000007FE000000000007FE00000000 +0007FE000000000007FE00000000000FFE00000000000FFE00000000000FFE0000000000 +0FFC00000000000FFC00000000000FFC00000000000FFC00000000001FFC00000000001F +FC00000000001FFC00000000001FFC00000000001FFC00000000001FF800000000001FF8 +00000000001FF800000000001FF800000000003FF800000000003FF800000000003FF800 +000000003FF800000000003FF800000000003FF800000000003FF800000000003FF00000 +0000003FF000000000003FF000000000003FF000000000007FF000000000007FF0000000 +00007FF000000000007FF000000000007FF000000000007FF000000000007FF000000000 +007FF000000000007FF000000000007FF000000000007FF000000000007FF00000000000 +7FF000000000007FF000000000007FF000000000007FE000000000007FE00000000000FF +E00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0 +0000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000 +00000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000 +000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000000 +0000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000000 +0036B3638257>48 DI64 D<00000000001FFC00000000001FFC00000000001FFC0000000000 +1FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001F +FC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC +00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00 +000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0000 +0000001FFC00000000001FFC00000000001FF800000000001FF800000000003FF8000000 +00003FF800000000003FF800000000003FF800000000003FF800000000003FF800000000 +003FF800000000003FF800000000003FF800000000003FF800000000003FF80000000000 +3FF800000000003FF800000000003FF800000000003FF800000000003FF000000000003F +F000000000003FF000000000003FF000000000007FF000000000007FF000000000007FF0 +00000000007FF000000000007FF000000000007FF000000000007FF000000000007FE000 +000000007FE000000000007FE000000000007FE00000000000FFE00000000000FFE00000 +000000FFE00000000000FFE00000000000FFE00000000000FFC00000000000FFC0000000 +0000FFC00000000000FFC00000000001FFC00000000001FFC00000000001FFC000000000 +01FF800000000001FF800000000001FF800000000001FF800000000001FF800000000003 +FF800000000003FF000000000003FF000000000003FF000000000003FF000000000003FF +000000000007FF000000000007FE000000000007FE000000000007FE000000000007FE00 +0000000007FE00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000 +0000000FFC00000000001FF800000000001FF800000000001FF800000000001FF8000000 +00001FF000000000003FF000000000003FF000000000003FF000000000003FE000000000 +003FE000000000007FE000000000007FE000000000007FC000000000007FC00000000000 +FFC00000000000FF800000000000FF800000000000FF800000000001FF800000000001FF +000000000001FF000000000003FF000000000003FE000000000003FE000000000003FE00 +0000000007FC000000000007FC000000000007FC00000000000FF800000000000FF80000 +0000000FF800000000001FF000000000001FF000000000001FE000000000003FE0000000 +00003FE000000000003FC000000000007FC000000000007F8000000000007F8000000000 +00FF800000000000FF000000000001FF000000000001FE000000000001FE000000000003 +FC000000000003FC000000000007FC000000000007F800000000000FF800000000000FF0 +00000000000FF000000000001FE000000000001FE000000000003FC000000000003FC000 +000000007F8000000000007F800000000000FF000000000000FE000000000001FE000000 +000001FC000000000003FC000000000003F8000000000007F8000000000007F000000000 +000FE000000000000FE000000000001FC000000000003F8000000000003F800000000000 +7F0000000000007E000000000000FE000000000001FC000000000001F8000000000003F8 +000000000003F0000000000007E000000000000FE000000000000FC000000000001F8000 +000000003F0000000000007E0000000000007E000000000000FC000000000000F8000000 +00000036B37D8457>I<000000003C00000000000000007E00000000000000007F000000 +0000000000FF0000000000000000FF0000000000000001FF8000000000000001FF800000 +0000000001FF8000000000000003FFC000000000000003FFC000000000000003FFC00000 +0000000007FFE000000000000007FFE000000000000007FFE00000000000000FFFF00000 +000000000FFFF00000000000000FE7F00000000000001FE7F80000000000001FE7F80000 +000000001FC3F80000000000003FC3FC0000000000003FC3FC0000000000003F81FC0000 +000000007F81FE0000000000007F81FE000000000000FF00FF000000000000FF00FF0000 +00000000FE007F000000000001FE007F800000000001FE007F800000000001FC003F8000 +00000003FC003FC00000000003FC003FC00000000003F8001FC00000000007F8001FE000 +00000007F8001FE00000000007F0000FE0000000000FF0000FF0000000000FF0000FF000 +0000000FE00007F0000000001FE00007F8000000001FE00007F8000000001FC00003F800 +0000003FC00003FC000000003FC00003FC000000007F800001FE000000007F800001FE00 +0000007F000000FE00000000FF000000FF00000000FF000000FF00000000FE0000007F00 +000001FE0000007F80000001FE0000007F80000001FC0000003F80000003FC0000003FC0 +000003FC0000003FC0000003F80000001FC0000007F80000001FE0000007F80000001FE0 +000007F00000000FE000000FF00000000FF000000FF00000000FF000000FE000000007F0 +00001FE000000007F800001FE000000007F800003FC000000003FC00003FC000000003FC +00003F8000000001FC00007F8000000001FE00007F8000000001FE00007F0000000000FE +0000FF0000000000FF0000FF0000000000FF0000FE00000000007F0001FE00000000007F +8001FE00000000007F8001FC00000000003F8003FC00000000003FC003FC00000000003F +C003F800000000001FC007F800000000001FE007F800000000001FE007F000000000000F +E00FF000000000000FF00FF000000000000FF01FE0000000000007F81FE0000000000007 +F81FC0000000000003F83FC0000000000003FC3FC0000000000003FC3F80000000000001 +FC7F80000000000001FE7F80000000000001FE7F00000000000000FEFF00000000000000 +FFFF00000000000000FFFE000000000000007FFE000000000000007F7C00000000000000 +3E7C000000000000001E48647B7F53>86 D<000000000000F00000000000000000000000 +01FC000000000000000000000003FC000000000000000000000003FC0000000000000000 +00000007FE000000000000000000000007FE000000000000000000000007FE0000000000 +0000000000000FFF00000000000000000000000FFF00000000000000000000000FFF0000 +0000000000000000001FFF80000000000000000000001FFF80000000000000000000003F +FFC0000000000000000000003FFFC0000000000000000000003FFFC00000000000000000 +00007FFFE0000000000000000000007FFFE0000000000000000000007FFFE00000000000 +0000000000FFFFF000000000000000000000FF9FF000000000000000000000FF9FF00000 +0000000000000001FF9FF800000000000000000001FF0FF800000000000000000001FF0F +F800000000000000000003FF0FFC00000000000000000003FE07FC000000000000000000 +03FE07FC00000000000000000007FE07FE00000000000000000007FC03FE000000000000 +00000007FC03FE0000000000000000000FFC03FF0000000000000000000FF801FF000000 +0000000000001FF801FF8000000000000000001FF801FF8000000000000000001FF000FF +8000000000000000003FF000FFC000000000000000003FE0007FC000000000000000003F +E0007FC000000000000000007FE0007FE000000000000000007FC0003FE0000000000000 +00007FC0003FE00000000000000000FFC0003FF00000000000000000FF80001FF0000000 +0000000000FF80001FF00000000000000001FF80001FF80000000000000001FF00000FF8 +0000000000000001FF00000FF80000000000000003FF00000FFC0000000000000003FE00 +0007FC0000000000000003FE000007FC0000000000000007FE000007FE00000000000000 +07FC000003FE000000000000000FFC000003FF000000000000000FFC000003FF00000000 +0000000FF8000001FF000000000000001FF8000001FF800000000000001FF0000000FF80 +0000000000001FF0000000FF800000000000003FF0000000FFC00000000000003FE00000 +007FC00000000000003FE00000007FC00000000000007FE00000007FE00000000000007F +C00000003FE00000000000007FC00000003FE0000000000000FFC00000003FF000000000 +0000FF800000001FF0000000000000FF800000001FF0000000000001FF800000001FF800 +0000000001FF000000000FF8000000000001FF000000000FF8000000000003FF00000000 +0FFC000000000003FE0000000007FC000000000007FE0000000007FE000000000007FE00 +00000007FE000000000007FC0000000003FE00000000000FFC0000000003FF0000000000 +0FF80000000001FF00000000000FF80000000001FF00000000001FF80000000001FF8000 +0000001FF00000000000FF80000000001FF00000000000FF80000000003FF00000000000 +FFC0000000003FE000000000007FC0000000003FE000000000007FC0000000007FE00000 +0000007FE0000000007FC000000000003FE0000000007FC000000000003FE000000000FF +C000000000003FF000000000FF8000000000001FF000000000FF8000000000001FF00000 +0001FF8000000000001FF800000001FF0000000000000FF800000003FF0000000000000F +FC00000003FF0000000000000FFC00000003FE00000000000007FC00000007FE00000000 +000007FE00000007FC00000000000003FE00000007FC00000000000003FE0000000FFC00 +000000000003FF0000000FF800000000000001FF0000000FF800000000000001FF000000 +1FF800000000000001FF8000001FF000000000000000FF8000001FF000000000000000FF +8000003FF000000000000000FFC000003FE0000000000000007FC000003FE00000000000 +00007FC000007FE0000000000000007FE000007FC0000000000000003FE000007FC00000 +00000000003FE00000FFC0000000000000003FF00000FF80000000000000001FF00001FF +80000000000000001FF80001FF80000000000000001FF80001FF00000000000000000FF8 +0003FF00000000000000000FFC0003FE000000000000000007FC0003FE00000000000000 +0007FC0007FE000000000000000007FE0007FC000000000000000003FE0007FC00000000 +0000000003FE000FFC000000000000000003FF000FF8000000000000000001FF000FF800 +0000000000000001FF001FF8000000000000000001FF801FF0000000000000000000FF80 +1FF0000000000000000000FF803FF0000000000000000000FFC03FE00000000000000000 +007FC03FE00000000000000000007FC07FE00000000000000000007FE07FC00000000000 +000000003FE0FFC00000000000000000003FF0FFC00000000000000000003FF0FF800000 +000000000000001FF0FF800000000000000000001FF0FF000000000000000000000FF07F +000000000000000000000FE03E0000000000000000000007C0648B7B7F6F>94 +D<3E0000000000000000000007C07F000000000000000000000FE0FF0000000000000000 +00000FF0FF800000000000000000001FF0FF800000000000000000001FF0FFC000000000 +00000000003FF0FFC00000000000000000003FF07FC00000000000000000003FE07FE000 +00000000000000007FE03FE00000000000000000007FC03FE00000000000000000007FC0 +3FF0000000000000000000FFC01FF0000000000000000000FF801FF00000000000000000 +00FF801FF8000000000000000001FF800FF8000000000000000001FF000FF80000000000 +00000001FF000FFC000000000000000003FF0007FC000000000000000003FE0007FC0000 +00000000000003FE0007FE000000000000000007FE0003FE000000000000000007FC0003 +FE000000000000000007FC0003FF00000000000000000FFC0001FF00000000000000000F +F80001FF80000000000000001FF80001FF80000000000000001FF80000FF800000000000 +00001FF00000FFC0000000000000003FF000007FC0000000000000003FE000007FC00000 +00000000003FE000007FE0000000000000007FE000003FE0000000000000007FC000003F +E0000000000000007FC000003FF000000000000000FFC000001FF000000000000000FF80 +00001FF000000000000000FF8000001FF800000000000001FF8000000FF8000000000000 +01FF0000000FF800000000000001FF0000000FFC00000000000003FF00000007FC000000 +00000003FE00000007FC00000000000003FE00000007FE00000000000007FE00000003FE +00000000000007FC00000003FF0000000000000FFC00000003FF0000000000000FFC0000 +0001FF0000000000000FF800000001FF8000000000001FF800000000FF8000000000001F +F000000000FF8000000000001FF000000000FFC000000000003FF0000000007FC0000000 +00003FE0000000007FC000000000003FE0000000007FE000000000007FE0000000003FE0 +00000000007FC0000000003FE000000000007FC0000000003FF00000000000FFC0000000 +001FF00000000000FF80000000001FF00000000000FF80000000001FF80000000001FF80 +000000000FF80000000001FF00000000000FF80000000001FF00000000000FFC00000000 +03FF000000000007FC0000000003FE000000000007FE0000000007FE000000000007FE00 +00000007FE000000000003FE0000000007FC000000000003FF000000000FFC0000000000 +01FF000000000FF8000000000001FF000000000FF8000000000001FF800000001FF80000 +00000000FF800000001FF0000000000000FF800000001FF0000000000000FFC00000003F +F00000000000007FC00000003FE00000000000007FC00000003FE00000000000007FE000 +00007FE00000000000003FE00000007FC00000000000003FE00000007FC0000000000000 +3FF0000000FFC00000000000001FF0000000FF800000000000001FF0000000FF80000000 +0000001FF8000001FF800000000000000FF8000001FF000000000000000FFC000003FF00 +0000000000000FFC000003FF0000000000000007FC000003FE0000000000000007FE0000 +07FE0000000000000003FE000007FC0000000000000003FE000007FC0000000000000003 +FF00000FFC0000000000000001FF00000FF80000000000000001FF00000FF80000000000 +000001FF80001FF80000000000000000FF80001FF00000000000000000FF80001FF00000 +000000000000FFC0003FF000000000000000007FC0003FE000000000000000007FC0003F +E000000000000000007FE0007FE000000000000000003FE0007FC000000000000000003F +E0007FC000000000000000003FF000FFC000000000000000001FF000FF80000000000000 +00001FF801FF8000000000000000001FF801FF8000000000000000000FF801FF00000000 +00000000000FFC03FF00000000000000000007FC03FE00000000000000000007FC03FE00 +000000000000000007FE07FE00000000000000000003FE07FC00000000000000000003FE +07FC00000000000000000003FF0FFC00000000000000000001FF0FF80000000000000000 +0001FF0FF800000000000000000001FF9FF800000000000000000000FF9FF00000000000 +0000000000FF9FF000000000000000000000FFFFF0000000000000000000007FFFE00000 +00000000000000007FFFE0000000000000000000007FFFE0000000000000000000003FFF +C0000000000000000000003FFFC0000000000000000000003FFFC0000000000000000000 +001FFF80000000000000000000001FFF80000000000000000000000FFF00000000000000 +000000000FFF00000000000000000000000FFF000000000000000000000007FE00000000 +0000000000000007FE000000000000000000000007FE000000000000000000000003FC00 +0000000000000000000003FC000000000000000000000001FC0000000000000000000000 +00F0000000000000648B7B7F6F>I E /Fw 5 111 df<00FFE000FFF000FFE000FFF00007 +F0000F000007F0000E00000DF8000C00000CF8000C00000CFC000C00000C7C000C000018 +7C00180000183E00180000183E00180000181F00180000301F00300000300F8030000030 +0F803000003007C03000006007C06000006007E06000006003E06000006003F0600000C0 +01F0C00000C001F8C00000C000F8C00000C000FCC0000180007D80000180007F80000180 +003F80000180003F80000300001F00000300001F00000300000F00000F80000F0000FFF0 +00060000FFF0000600002C227CA130>78 D<0038007C007C007800700000000000000000 +00000000000007801FC038E030E060F0C1E0C1E0C1E003C003C003C0078007800F000F04 +0F061E0C1E0C1E181C181E700FE007800F237DA116>105 D<00001800003C00007C0000 +7C000038000000000000000000000000000000000000000000000780001FE00038E00060 +F000C0F000C0F00180F00180F00001E00001E00001E00001E00003C00003C00003C00003 +C0000780000780000780000780000F00000F00000F00000F00001E00001E00381E00783C +00F83800F8780070F0007FC0001F0000162D81A119>I<01F01FE01FE001E001E003C003 +C003C003C007800780078007800F000F000F000F001E001E001E001E003C003C003C003C +007800780078407860F0C0F0C0F0C0F18071803F001E000C247DA214>108 +D<0F00FC001FC3FF0031C7078061EC038061F803C0C1F003C0C1F003C0C1E003C003C007 +8003C0078003C0078003C00F0007800F0007800F0007801E0407801E060F001E0C0F003C +0C0F003C180F003C381E001C701E001FE00C0007801F177D9526>110 +D E /Fx 14 112 df<000C0038007000E001C00380030007000E000E001C001C00380038 +0038007800700070007000F000F000F000F000F000F000F000F000F000F000F000700070 +00700078003800380038001C001C000E000E0007000300038001C000E000700038000C0E +317AA418>40 DI<0000380000000038000000003800000000380000000038000000003800000000 +380000000038000000003800000000380000000038000000003800000000380000000038 +00000000380000000038000000003800000000380000FFFFFFFFFEFFFFFFFFFEFFFFFFFF +FE0000380000000038000000003800000000380000000038000000003800000000380000 +000038000000003800000000380000000038000000003800000000380000000038000000 +0038000000003800000000380000000038000027277C9F2F>43 D<00FF0003FFC00781E0 +0F00F01E00783C003C3C003C78001E78001E78001E78001EF8001FF8001FF8001FF8001F +F8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001F78001E78001E7C003E +3C003C3C003C1E00780F00F00781E003FFC000FF0018227DA01E>48 +D<00E00001E00007E000FFE000F9E00001E00001E00001E00001E00001E00001E00001E0 +0001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0 +0001E00001E00001E00001E00001E00001E00003F000FFFFC0FFFFC012217AA01E>I<01 +FC0007FF801C0FC03003E06001F06000F8F800F8FC00FCFC00FCFC007C78007C3000FC00 +00FC0000F80000F80001F00003E00003C0000780000F00001E0000380000700000E00001 +C00C03800C0600180C00181800183FFFF87FFFF8FFFFF0FFFFF016217CA01E>I<00FF00 +03FFC00F03E01C00F01C00F83E00FC3E007C3E007C1E00FC0C00FC0000F80000F80001F0 +0003E0000FC001FF0001FF000003E00000F000007800007C00003E00003F30003F78003F +FC003FFC003FFC003EF8007E60007C3800F81E03F00FFFC001FF0018227DA01E>I<0000 +E00001E00001E00003E00007E00007E0000DE0001DE00039E00031E00061E000E1E000C1 +E00181E00381E00701E00601E00C01E01C01E01801E03001E07001E0E001E0FFFFFFFFFF +FF0001E00001E00001E00001E00001E00001E00003F0003FFF003FFF18227DA11E>I<10 +00301E01F01FFFE01FFFC01FFF801FFE001BF00018000018000018000018000018000018 +FE001BFF801F03C01C01E01800F01800F800007800007800007C00007C30007C78007CF8 +007CF8007CF80078F000F86000F07001E03801E01E078007FF0001F80016227CA01E>I< +00000F000000FF000000FF0000001F0000000F0000000F0000000F0000000F0000000F00 +00000F0000000F0000000F0000000F0000FF0F0003FFCF0007C0FF000F003F001E001F00 +3C000F007C000F0078000F00F8000F00F8000F00F8000F00F8000F00F8000F00F8000F00 +F8000F0078000F007C000F003C000F003E001F001F003F800FC1EFF003FF8FF000FE0F00 +1C247DA222>100 D<00FC0003FF800F83C01F01E03E00F03C00F07C00F07C0078F80078 +F80078FFFFF8FFFFF8F80000F80000F80000F800007C00007C00183E00181E00381F0070 +0781E003FF80007E0015187D961B>I<000F80007FC000F1E001E3E003C3E003C1C00780 +00078000078000078000078000078000078000078000078000FFFE00FFFE000780000780 +000780000780000780000780000780000780000780000780000780000780000780000780 +000780000780000780007FFC007FFC0013247EA313>I<0F07F007F000FF1FFC1FFC00FF +703E703E001FC01EC01E000F800F800F000F800F800F000F000F000F000F000F000F000F +000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F +000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00FF +F0FFF0FFF0FFF0FFF0FFF02C167D9532>109 D<007E0003FFC00781E00F00F01E00783C +003C3C003C78001E78001EF8001FF8001FF8001FF8001FF8001FF8001FF8001F78001E7C +003E3C003C3E007C1F00F80F81F003FFC000FF0018187D961E>111 +D E /Fy 10 111 df0 +D<0000030000000000038000000000038000000000038000000000038000000000038000 +000000038000000000038000000000038000000000038000000000038000000000038000 +000000038000000000038000000000038000000000038000000000038000000000038000 +00000003800000000003800000000003800000000003800000FFFFFFFFFFFCFFFFFFFFFF +FCFFFFFFFFFFFC0000038000000000038000000000038000000000038000000000038000 +000000038000000000038000000000038000000000038000000000038000000000038000 +000000038000000000038000000000038000000000038000000000038000000000038000 +00000003800000000003800000FFFFFFFFFFFCFFFFFFFFFFFCFFFFFFFFFFFC2E2F7CAD37 +>6 D<0000000001C00000000007C0000000001FC0000000007F0000000001FC00000000 +07F0000000001FC0000000007F0000000001FC0000000007F0000000000FC0000000003F +0000000000FC0000000003F8000000000FE0000000003F8000000000FE0000000003F800 +0000000FE0000000003F8000000000FE0000000000F80000000000FE00000000003F8000 +0000000FE00000000003F80000000000FE00000000003F80000000000FE00000000003F8 +0000000000FC00000000003F00000000000FC00000000007F00000000001FC0000000000 +7F00000000001FC00000000007F00000000001FC00000000007F00000000001FC0000000 +0007C00000000001C0000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000007FFFFFFFFF80FFFFFFFFFFC0FFFFFFFFFFC02A3B7A +AB37>20 D<007800FE01FE01FE01FE03FE03FC03FC03FC07F807F807F807F007F00FE00F +E00FE00FC01FC01F801F801F803F003F003F003E007E007C007C007C00F800F800F800F0 +000F227EA413>48 D<0000FFFFC00007FFFFC0001FFFFFC0007F80000000FC00000001F0 +00000003C000000007800000000F000000000E000000001E000000003C00000000380000 +0000780000000070000000007000000000F000000000E000000000E000000000E0000000 +00FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0E000000000E000000000E000000000F000000000 +70000000007000000000780000000038000000003C000000001E000000000E000000000F +00000000078000000003C000000001F000000000FC000000007F800000001FFFFFC00007 +FFFFC00000FFFFC0222B7AA52F>50 D<00000001C000000001C000000003C00000000380 +000000078000000007000000000F000000000E000000001E000000003C00000000380000 +000078000000007000000000F000000000E000000001E000000001C000000003C0000000 +0380000000078000000007000000000F000000000E000000001E000000003C0000000038 +0000000078000000007000000000F000000000E000000001E000000001C000000003C000 +00000380000000078000000007000000000F000000001E000000001C000000003C000000 +00380000000078000000007000000000F000000000E000000001E000000001C000000003 +C00000000380000000078000000007000000000F000000001E000000001C000000003C00 +000000380000000078000000007000000000F000000000E0000000006000000000223D76 +AE00>54 D<00001F0000FF0003F0000FC0001F80001F00003F00003E00003E00003E0000 +3E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0000 +3E00003E00003E00003E00003E00007E00007C0000FC0001F80003F0007FC000FF00007F +C00003F00001F80000FC00007C00007E00003E00003E00003E00003E00003E00003E0000 +3E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0000 +3E00003E00003F00001F00001F80000FC00003F00000FF00001F18437BB123>102 +DI106 +D110 D E +/Fz 1 67 df<7FFFFFFFFF800000FFFFFFFFFFF80000FFFFFFFFFFFF00007FFFFFFFFFFF +800000FC03F83FFFE000007C03E00F8FF000003C03C007C1F800003C03C007C0FC00003C +03C003E07C00003C03C003E03E00003C03C001E03E00003C03C001F01E00003C03C001F0 +1F00003C03C000F01F00003C03C000F00F00003C03C000F00F00003C03C000F00F00003C +03C000F00F00003C03C000F00F00003C03C000F01F00003C03C000F01F00003C03C000F0 +1E00003C03C001F03E00003C03C001F07E00003C03C001E0FC00003C03C003E1F800003C +03C003E3F000003C03C007CFE000003C03C00FFFC000003C03C03FFF8000003C03C3FFFE +0000003C03FFFFFC0000003C03FFFFFF0000003C03FFFFFFC000003C03FFFFFFF000003C +03C00FF7F800003C03C001F1FE00003C03C000F87F00003C03C000F81F80003C03C0007C +0F80003C03C0007C07C0003C03C0003C07C0003C03C0003E03E0003C03C0003E03E0003C +03C0001E01F0003C03C0001E01F0003C03C0001E00F0003C03C0001E00F0003C03C0001E +00F0003C03C0001E00F0003C03C0001E00F0003C03C0001E00F0003C03C0001E01F0003C +03C0001E01F0003C03C0003E01E0003C03C0003E03E0003C03C0003C07E0003C03C0003C +07C0003C03C0007C0F80003C03C0007C1F80003C03C000F87F00003C03C001F9FE00007C +03E003FFF80000FC03F81FFFF0007FFFFFFFFFFFC000FFFFFFFFFFFF0000FFFFFFFFFFF8 +00007FFFFFFFFF0000003C447FC32D>66 D E /FA 19 127 df<3C7EFFFFFFFF7E3C0808 +7A8714>58 D<3C007E00FF00FF00FF80FF807F803D800180018001800380030003000700 +06000E001C0038007000600009157A8714>I<003FFE0000FFFF003FFE0000FFFF0000FF +000007E00000FF000007C00000FF800003800000DF800003000001DFC00007000001CFC0 +00060000018FE0000600000187E0000600000387F0000E00000387F0000C00000303F000 +0C00000303F8000C00000701F8001C00000701FC001800000600FC001800000600FE0018 +00000E007E003800000E007F003000000C003F003000000C003F003000001C003F807000 +001C001F8060000018001FC060000018000FC060000038000FE0E00000380007E0C00000 +300007F0C00000300003F0C00000700003F1C00000700003F9800000600001F980000060 +0001FD800000E00000FF800000E00000FF000000C000007F000000C000007F000001C000 +003F000001C000003E0000018000003E000003C000001E00000FE000001E0000FFFE0000 +0C0000FFFE00000C0000382D7CAC38>78 D<000007F00600003FFE0E0000F80F9E0003E0 +01FE00078000FE000F00007C001E00007C003C00003C003C00003C007800003800780000 +38007800003800F800003800F800003000F800003000FC00000000FC00000000FE000000 +007F800000007FF80000003FFF8000003FFFF000001FFFFC000007FFFE000000FFFF0000 +001FFF00000001FF800000003F800000001F800000000F800000000F8000000007801800 +000780180000078018000007801800000F803800000F003800000F003800001E00380000 +1E007C00003C007E000078007F0000F0007B8003E000F1F00F8000E07FFE0000C00FF000 +00272F7CAD2B>83 D<00F800001FF800001FF8000001F8000001F8000001F0000001F000 +0003F0000003F0000003E0000003E0000007E0000007E0000007C0000007C000000FC000 +000FC7E0000F9FF8000FB83C001FF01E001FE01F001FC01F001F800F803F000F803F000F +803E000F803E000F807E001F807E001F807C001F807C001F807C003F80FC003F00F8003F +00F8003F00F8007E00F8007E00F8007C00F800FC00F800F8007801F0007803F0007807E0 +003C0F80001E1F00000FFC000003F00000192F7DAD1E>98 D<0001F800000FFE00003E07 +80007C018001F801C003F007C007E00FC00FC00FC00F800F801F800F803F0000003F0000 +007F0000007E0000007E0000007E000000FE000000FC000000FC000000FC000000FC0000 +00FC000000FC0000607C0000E07C0001C07C0003803E000F001E001C000F81F80007FFE0 +0000FE00001B1F7D9D1F>I<0000001F000003FF000003FF0000003F0000003F0000003E +0000003E0000007E0000007E0000007C0000007C000000FC000000FC000000F8000000F8 +000001F80007E1F8001FF9F0007C1DF000F80FF001F00FF003E007E007C007E00FC007E0 +1F8007E01F8007C03F0007C03F000FC07F000FC07E000F807E000F807E001F80FE001F80 +FC001F00FC001F00FC003F02FC003F06FC003E06F8003E06F8007E0E7C00FE0C7C00FC0C +7C01FC1C3E07BE181F0E1E380FFC0FF003F003C0202F7DAD24>I<001F00000003FF0000 +0003FF000000003F000000003F000000003E000000003E000000007E000000007E000000 +007C000000007C00000000FC00000000FC00000000F800000000F800000001F800000001 +F83F000001F1FFC00001F3C1F00003FF00F00003FC00F80003F800F80003F800F80007F0 +00F80007E000F80007E000F80007C000F8000FC001F8000FC001F0000F8001F0000F8001 +F0001F8003F0001F8003E0001F0003E0001F0007E0003F0007C0403F0007C0C03E000FC0 +C03E000F80C07E000F81C07E001F01807C001F03807C001F0700FC000F0600FC000F1E00 +F80007F800700001E000222F7DAD29>104 D<000700000F80001FC0001FC0000F800007 +0000000000000000000000000000000000000000000000000000000001E00007F8000E3C +001C3E00383E00303E00703E00607E00E07C00C07C00C0FC0080F80000F80001F80001F0 +0003F00003E00003E00007E00007C04007C0C00FC0C00F80C00F81C01F01801F03801F07 +000F06000F1E0007F80001F000122E7EAC18>I<000000E0000001F0000003F0000003F0 +000003F0000001C000000000000000000000000000000000000000000000000000000000 +000000000000000000007C000003FE0000078F80000E0780001C0780003807C0003007C0 +00700FC000600F8000E00F8000C00F8000801F8000001F8000001F0000001F0000003F00 +00003F0000003E0000003E0000007E0000007E0000007C0000007C000000FC000000FC00 +0000F8000000F8000001F8000001F8000001F0000001F0000003F0000003F0000003E000 +0003E0000007E0003807C000FC0FC000FC0F8000FC1F0000F83E0000F0F800007FF00000 +1F8000001C3B81AC1D>I<001F000003FF000003FF0000003F0000003F0000003E000000 +3E0000007E0000007E0000007C0000007C000000FC000000FC000000F8000000F8000001 +F8000001F800F801F003FC01F00F0E03F01C1E03F0387E03E0707E03E0E07E07E1C07E07 +E3803807C7000007CE00000FDC00000FF800000FF800000FFF80001F9FE0001F83F0001F +01F8001F00F8003F00F8043F00F80C3E00F80C3E00F80C7E00F81C7E00F8187C00F0387C +00F830FC00F870FC0078E0F8003FC070000F801F2F7DAD25>I<007C0FFC0FFC00FC00FC +00F800F801F801F801F001F003F003F003E003E007E007E007C007C00FC00FC00F800F80 +1F801F801F001F003F003F003E003E007E007E007C007C00FC08FC18F818F818F838F830 +F030F070F86078E03FC00F000E2F7DAD15>I<07C007E0001FE03FF80018F8783E003879 +E01E00307B801F00707F001F00607F001F0060FE001F00E0FC001F00C0FC001F00C0F800 +1F0081F8003F0001F8003E0001F0003E0001F0003E0003F0007E0003F0007C0003E0007C +0003E000FC0007E000F80807E000F81807C001F81807C001F0180FC001F0380FC003E030 +0F8003E0700F8003E0E01F8001E0C01F8001E3C01F0000FF000E00003E00251F7E9D2B> +110 D<0001F800000FFF00003F0780007C03C001F803E003F001F007E001F00FC001F80F +8000F81F8000F83F0000F83F0001F87F0001F87E0001F87E0001F87E0003F8FE0003F0FC +0003F0FC0003F0FC0007E0FC0007E0FC000FC0FC000FC07C001F807C001F007C003E003E +007C001F01F8000F83E00003FF800000FC00001D1F7D9D22>I<000E00001F00001F0000 +3F00003F00003E00003E00007E00007E00007C00007C0000FC0000FC00FFFFF8FFFFF801 +F80001F80001F00001F00003F00003F00003E00003E00007E00007E00007C00007C0000F +C0000FC0000F80000F80001F80101F80301F00301F00701F00601F00E01E01C01E03801F +07000F0E0007FC0001F000152B7EA919>116 D<01E000000007F8000E000E3C001F001C +3E003F00383E003E00303E003E00703E003E00607E007E00E07C007C00C07C007C00C0FC +007C0080F800FC0000F800F80001F800F80001F000F80001F001F80003F001F00003E001 +F00003E001F00003E003F02007E003E06007C003E06007C003E06007C003E0E007C007E0 +C003C00FC0C003E01FC1C003E03BE18001F071E380007FE0FF00001F803C00231F7E9D29 +>I<01E0007007F800F80E3C01F81C3E01FC383E01FC303E00FC703E007C607E007CE07C +0038C07C0038C0FC003880F8003800F8003001F8003001F0003001F0007003F0006003E0 +006003E000E003E000C007E000C007C001C007C0018007C0038007C0070003C0060003E0 +0E0001E01C0001F07800007FE000001F80001E1F7E9D22>I<003F007C0000FFC1FF0001 +C1E383800380F703C00700F60FC00E00FE0FC01C00FC0FC01800FC0FC03800FC07003000 +F800003000F800002001F800000001F000000001F000000001F000000003F000000003E0 +00000003E000000003E000000007E001000007E003000007C003003807C007007C0FC006 +00FC0FC00E00FC1FC00C00FC1BC01C00F03BE038007071E0F0003FE0FFC0000F803F0000 +221F7E9D28>120 D<000000C0000001E0000000E0000000F0000000707FFFFFFCFFFFFF +FC7FFFFFFC000001F0000003E00000078000000700000006001E0D74AE23>126 +D E /FB 11 62 df<00030007000E001C0038007000F001E001C003C0078007800F000F +001E001E001E003C003C003C003C0078007800780078007800F800F800F000F000F000F0 +00F000F000F000F000F000F000F000F800F800780078007800780078003C003C003C003C +001E001E001E000F000F000780078003C001C001E000F000700038001C000E0007000310 +437AB11B>40 DI<0000038000000000038000000000038000000000038000000000038000000000 +038000000000038000000000038000000000038000000000038000000000038000000000 +038000000000038000000000038000000000038000000000038000000000038000000000 +03800000000003800000000003800000000003800000000003800000FFFFFFFFFFFCFFFF +FFFFFFFCFFFFFFFFFFFC0000038000000000038000000000038000000000038000000000 +038000000000038000000000038000000000038000000000038000000000038000000000 +038000000000038000000000038000000000038000000000038000000000038000000000 +038000000000038000000000038000000000038000000000038000000000038000002E2F +7CA737>43 D<003FC00000FFF00003E07C0007C03E000F801F000F000F001E0007801E00 +07803E0007C03E0007C07C0003E07C0003E07C0003E07C0003E07C0003E0FC0003F0FC00 +03F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC00 +03F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F07C0003E07C0003E07C0003E07E00 +07E03E0007C03E0007C03E0007C01F000F800F000F000F801F0007C03E0003F0FC0000FF +F000003FC0001C2D7DAB23>48 D<000C00003C00007C0003FC00FFFC00FC7C00007C0000 +7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000 +7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000 +7C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000FE007FFFFE7F +FFFE172C7AAB23>I<007F800001FFF0000780FC000E003F001C001F8038000FC070000F +C0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003F0FE0003F07C0007F0000007 +F0000007F0000007E000000FE000000FC000001FC000001F8000003F0000007E0000007C +000000F8000001F0000003E0000007C000000F8000001E0000003C00000078000000F000 +3000E0003001C0003003800060070000600E0000E01FFFFFE03FFFFFE07FFFFFC0FFFFFF +C0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC000E007E001C003F001C001F80 +3F001FC03F001FC03F800FC03F000FC03F000FC00C001FC000001FC000001F8000001F80 +00003F0000003E0000007C000000F8000003F00000FFC00000FFF0000000FC0000003F00 +00001F8000001FC000000FC000000FE000000FE0000007F0000007F0380007F07C0007F0 +FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC070001FC038001F801E003F00 +0780FC0001FFF000007FC0001C2D7DAB23>I<00000E0000000E0000001E0000003E0000 +003E0000007E000000FE000000FE000001BE000003BE0000033E0000063E00000E3E0000 +0C3E0000183E0000383E0000303E0000603E0000E03E0000C03E0001803E0003803E0003 +003E0006003E000E003E000C003E0018003E0038003E0030003E0060003E00E0003E00FF +FFFFFCFFFFFFFC00003E0000003E0000003E0000003E0000003E0000003E0000003E0000 +003E0000003E0000007F00001FFFFC001FFFFC1E2D7EAC23>I<0C0001800FC01F800FFF +FF000FFFFE000FFFFC000FFFF0000FFFC0000C7E00000C0000000C0000000C0000000C00 +00000C0000000C0000000C0000000C0000000C1FC0000C7FF8000DE07C000F801F000F00 +1F800E000F800C0007C0000007E0000007E0000003E0000003F0000003F0000003F00000 +03F0780003F0FC0003F0FC0003F0FC0003F0FC0003F0F80007E0E00007E0600007C07000 +0FC038000F801C001F000E003E000780F80001FFE000007F80001C2D7DAB23>I<0003F8 +00000FFE00003E078000F8018001F007C003E00FC007C00FC00F800FC00F800FC01F0007 +801F0000003E0000003E0000007E0000007E0000007C0000007C0FC000FC3FF000FCF07C +00FDC01E00FF800F00FF000F80FF0007C0FE0007E0FE0007E0FE0003E0FC0003F0FC0003 +F0FC0003F0FC0003F07C0003F07C0003F07C0003F07E0003F07E0003F03E0003E03E0007 +E01E0007E01F0007C00F000F8007801F0003C03E0001E07C00007FF000001FC0001C2D7D +AB23>I61 D E /FC 41 127 df<00000007F0000000001F +FE000000007C1F00000001F00FC0000007C007E000000F8003E000001F0003F000003E00 +01F800007E0001F80000FC0001F80000F80001FC0001F80001FC0003F00001FC0003F000 +01FC0007E00001FC0007E00001FC000FC00001FC000FC00003FC001FC00003FC001F8000 +03FC001F800003FC001F800007FC003F800007F8003F000007F8003F000007F8007F0000 +0FF8007F00000FF0007E00000FF0007E00000FE000FE00001FE000FE00001FC000FC0000 +3FC000FC00003F8001FC00007F8001FC00007F0001FC0000FE0001FC0000FC0003FE0001 +F80003FE0003F00003F70007E00003F3800FC00007F1C01F000007F0E07E000007E07FF8 +000007E01FC000000FE0000000000FE0000000000FC0000000000FC0000000001FC00000 +00001FC0000000001F80000000001F80000000003F80000000003F80000000003F000000 +00003F00000000007F00000000007F00000000007E00000000007E0000000000FE000000 +0000FE0000000000FC00000000003800000000002E417DAB32>26 +D<1E007F807F80FFC0FFC0FFC0FFC07F807F801E000A0A78891B>58 +D<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60006000600060006000E000C000C000 +C001C0018003800300070006000E001C003800700060000B1D78891B>I<000000000000 +01C000000000000007E00000000000001FE00000000000007FC0000000000001FF000000 +00000007FC0000000000001FF00000000000007FC0000000000001FF0000000000000FFC +0000000000003FF0000000000000FFC0000000000003FF0000000000000FF80000000000 +003FE0000000000000FF80000000000003FE0000000000001FF80000000000007FE00000 +00000001FF80000000000007FE0000000000001FF00000000000007FC0000000000001FF +00000000000007FC0000000000001FF00000000000007FC0000000000000FF0000000000 +0000FF000000000000007FC00000000000001FF000000000000007FC00000000000001FF +000000000000007FC00000000000001FF000000000000007FE00000000000001FF800000 +000000007FE00000000000001FF800000000000003FE00000000000000FF800000000000 +003FE00000000000000FF800000000000003FF00000000000000FFC00000000000003FF0 +0000000000000FFC00000000000001FF000000000000007FC00000000000001FF0000000 +00000007FC00000000000001FF000000000000007FC00000000000001FE0000000000000 +07E000000000000001C03B3878B44C>I<0000000018000000003C000000007C00000000 +7C000000007800000000F800000000F800000000F000000001F000000001F000000001E0 +00000003E000000003E000000003C000000007C000000007C000000007800000000F8000 +00000F800000001F000000001F000000001E000000003E000000003E000000003C000000 +007C000000007C000000007800000000F800000000F800000000F000000001F000000001 +F000000003E000000003E000000003C000000007C000000007C000000007800000000F80 +0000000F800000000F000000001F000000001F000000001E000000003E000000003E0000 +00003C000000007C000000007C00000000F800000000F800000000F000000001F0000000 +01F000000001E000000003E000000003E000000003C000000007C000000007C000000007 +800000000F800000000F800000000F000000001F000000001F000000003E000000003E00 +0000003C000000007C000000007C000000007800000000F800000000F800000000F00000 +0001F000000001F000000001E000000003E000000003E000000007C000000007C0000000 +07800000000F800000000F800000000F000000001F000000001F000000001E000000003E +000000003E000000003C000000007C000000007C000000007800000000F800000000F800 +000000F000000000600000000026647BCA31>I<7000000000000000FC00000000000000 +FF000000000000007FC00000000000001FF000000000000007FC00000000000001FF0000 +00000000007FC00000000000001FF000000000000007FE00000000000001FF8000000000 +00007FE00000000000001FF800000000000003FE00000000000000FF800000000000003F +E00000000000000FF800000000000003FF00000000000000FFC00000000000003FF00000 +000000000FFC00000000000001FF000000000000007FC00000000000001FF00000000000 +0007FC00000000000001FF000000000000007FC00000000000001FE00000000000001FE0 +0000000000007FC0000000000001FF00000000000007FC0000000000001FF00000000000 +007FC0000000000001FF0000000000000FFC0000000000003FF0000000000000FFC00000 +00000003FF0000000000000FF80000000000003FE0000000000000FF80000000000003FE +0000000000001FF80000000000007FE0000000000001FF80000000000007FE0000000000 +001FF00000000000007FC0000000000001FF00000000000007FC0000000000001FF00000 +000000007FC0000000000000FF00000000000000FC000000000000007000000000000000 +3B3878B44C>I<000000000000300000000000000000700000000000000000F000000000 +00000000F00000000000000001F00000000000000003F00000000000000003F000000000 +00000007F80000000000000007F8000000000000000FF8000000000000001FF800000000 +0000001FF80000000000000037F80000000000000037F80000000000000067F800000000 +000000E7F800000000000000C7F80000000000000187FC0000000000000187FC00000000 +00000307FC0000000000000703FC0000000000000603FC0000000000000C03FC00000000 +00000C03FC0000000000001803FC0000000000003803FC0000000000003003FC00000000 +00006003FE0000000000006003FE000000000000C003FE000000000001C001FE00000000 +00018001FE0000000000030001FE0000000000030001FE0000000000060001FE00000000 +000E0001FE00000000000C0001FE0000000000180001FE0000000000180001FF00000000 +00300001FF0000000000700000FF0000000000600000FF0000000000C00000FF00000000 +00C00000FF0000000001800000FF0000000003FFFFFFFF0000000003FFFFFFFF00000000 +07FFFFFFFF0000000006000000FF800000000C000000FF800000001C0000007F80000000 +180000007F80000000300000007F80000000300000007F80000000600000007F80000000 +E00000007F80000000C00000007F80000001800000007F80000001800000007FC0000003 +000000007FC0000007000000003FC0000006000000003FC000000E000000003FC000001C +000000003FC000003C000000003FC000007C000000003FC00000FE000000007FE00007FF +00000001FFE0007FFFF000007FFFFFC0FFFFF000007FFFFFC0FFFFE000007FFFFFC04247 +7DC649>65 D<0000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFC000000 +FFC000003FFC0000007F80000003F8000000FF80000001F8000000FF80000000F8000000 +FF0000000078000000FF0000000078000000FF0000000038000001FF0000000038000001 +FE0000000038000001FE0000000038000001FE0000000038000003FE0000000030000003 +FC0000000030000003FC0000000030000003FC0000000030000007FC0000000030000007 +F80000600030000007F80000600030000007F80000E0003000000FF80000C0000000000F +F00000C0000000000FF00000C0000000000FF00001C0000000001FF0000180000000001F +E0000380000000001FE0000780000000001FE0000F80000000003FE0007F00000000003F +FFFFFF00000000003FFFFFFF00000000003FFFFFFF00000000007FC0007E00000000007F +80001E00000000007F80001E00000000007F80000E0000000000FF80000C0000000000FF +00000C0000000000FF00000C0000000000FF00001C0000000001FF0000180003000001FE +0000180003000001FE0000180007000001FE0000180006000003FE0000000006000003FC +000000000E000003FC000000000C000003FC000000001C000007FC0000000018000007F8 +0000000038000007F80000000030000007F8000000007000000FF8000000007000000FF0 +00000000E000000FF000000001E000000FF000000001C000001FF000000003C000001FE0 +00000007C000001FE00000000F8000003FE00000003F8000003FE00000007F0000003FC0 +000003FF000000FFC000003FFE0000FFFFFFFFFFFFFE0000FFFFFFFFFFFFFE0000FFFFFF +FFFFFFFC000046447CC348>69 D<0000000001FF800018000000003FFFF0003800000001 +FFFFFC003800000007FF007E00780000001FF0000F80F00000007F800003C1F0000001FE +000001C3F0000003FC000000E7F000000FF00000007FE000001FE00000003FE000003FC0 +0000003FE00000FF000000001FE00001FE000000001FC00003FC000000000FC00007F800 +0000000FC0000FF8000000000FC0000FF0000000000F80001FE0000000000780003FC000 +0000000780007FC000000000078000FF8000000000070000FF0000000000070001FF0000 +000000070003FE0000000000070003FE0000000000060007FC0000000000060007FC0000 +00000006000FF8000000000006000FF8000000000000001FF8000000000000001FF00000 +00000000001FF0000000000000003FF0000000000000003FE0000000000000003FE00000 +00000000003FE0000000000000007FE0000000000000007FC0000000000000007FC00000 +00000000007FC0000000000000007FC000000000000000FF8000000000000000FF800000 +01FFFFFF80FF80000003FFFFFF80FF80000003FFFFFF80FF8000000000FFE000FF800000 +00007FC000FF80000000007FC000FF80000000007FC0007F80000000007F80007F800000 +00007F80007F8000000000FF80007F8000000000FF00007F8000000000FF00003FC00000 +0000FF00003FC000000001FF00003FC000000001FE00001FE000000001FE00001FE00000 +0001FE00000FE000000003FE00000FF000000003FC000007F800000007FC000003F80000 +000FFC000001FC0000001FFC000000FE0000003DF80000007F80000078F80000003FC000 +01E0F80000001FF00007C07800000007FE007F007000000001FFFFFC0030000000003FFF +F000000000000007FF000000000045487CC54D>71 D<0000FFFFFFE003FFFFFF800000FF +FFFFE003FFFFFF800000FFFFFFE003FFFFFF80000000FFE0000003FF80000000007F8000 +0001FE0000000000FF80000003FE0000000000FF80000003FE0000000000FF00000003FC +0000000000FF00000003FC0000000000FF00000007FC0000000001FF00000007FC000000 +0001FE00000007F80000000001FE00000007F80000000001FE0000000FF80000000003FE +0000000FF80000000003FC0000000FF00000000003FC0000000FF00000000003FC000000 +1FF00000000007FC0000001FF00000000007F80000001FE00000000007F80000001FE000 +00000007F80000003FE0000000000FF80000003FE0000000000FF00000003FC000000000 +0FF00000003FC0000000000FF00000007FC0000000001FF00000007FC0000000001FE000 +00007F80000000001FE00000007F80000000001FE0000000FF80000000003FE0000000FF +80000000003FFFFFFFFFFF00000000003FFFFFFFFFFF00000000003FFFFFFFFFFF000000 +00007FC0000001FF00000000007F80000001FE00000000007F80000001FE00000000007F +80000003FE0000000000FF80000003FE0000000000FF00000003FC0000000000FF000000 +03FC0000000000FF00000007FC0000000001FF00000007FC0000000001FE00000007F800 +00000001FE00000007F80000000001FE0000000FF80000000003FE0000000FF800000000 +03FC0000000FF00000000003FC0000000FF00000000003FC0000001FF00000000007FC00 +00001FF00000000007F80000001FE00000000007F80000001FE00000000007F80000003F +E0000000000FF80000003FE0000000000FF00000003FC0000000000FF00000003FC00000 +00000FF00000007FC0000000001FF00000007FC0000000001FE00000007F80000000001F +E00000007F80000000003FE0000000FF80000000003FE0000000FF80000000003FC00000 +00FF0000000000FFE0000003FF80000000FFFFFFE003FFFFFF800000FFFFFFE003FFFFFF +800000FFFFFFE003FFFFFF80000051447CC351>I<00007FFFFFF800007FFFFFF800007F +FFFFF00000007FF0000000003FC0000000007FC0000000007FC0000000007F8000000000 +7F80000000007F8000000000FF8000000000FF0000000000FF0000000000FF0000000001 +FF0000000001FE0000000001FE0000000001FE0000000003FE0000000003FC0000000003 +FC0000000003FC0000000007FC0000000007F80000000007F80000000007F8000000000F +F8000000000FF0000000000FF0000000000FF0000000001FF0000000001FE0000000001F +E0000000001FE0000000003FE0000000003FC0000000003FC0000000003FC0000000007F +C0000000007F80000000007F80000000007F8000000000FF8000000000FF0000000000FF +0000000000FF0000000001FF0000000001FE0000000001FE0000000001FE0000000003FE +0000000003FC0000000003FC0000000003FC0000000007FC0000000007F80000000007F8 +0000000007F8000000000FF8000000000FF0000000000FF0000000001FF0000000001FF0 +000000001FE0000000007FF00000007FFFFFF00000FFFFFFF00000FFFFFFF000002D447D +C32B>I<0000FFFFC00000000003FFFE0000FFFFC00000000007FFFE0000FFFFC0000000 +000FFFFE000000FFC0000000000FFE000000006FE0000000001BF800000000EFE0000000 +001FF800000000EFE00000000037F800000000CFE00000000067F000000000CFE0000000 +0067F000000000CFE000000000CFF000000001CFE0000000018FF0000000018FE0000000 +018FE00000000187F0000000030FE00000000187F0000000031FE00000000387F0000000 +061FE00000000307F00000000C1FC00000000307F00000000C1FC00000000307F0000000 +183FC00000000707F0000000303FC00000000607F0000000303F800000000603F8000000 +603F800000000603F8000000607F800000000E03F8000000C07F800000000C03F8000001 +807F000000000C03F8000001807F000000000C03F800000300FF000000001C03F8000006 +00FF000000001803F800000600FE000000001801FC00000C00FE000000001801FC00000C +01FE000000003801FC00001801FE000000003001FC00003001FC000000003001FC000030 +01FC000000003001FC00006003FC000000007001FC0000C003FC000000006001FC0000C0 +03F8000000006000FE00018003F8000000006000FE00018007F800000000E000FE000300 +07F800000000C000FE00060007F000000000C000FE00060007F000000000C000FE000C00 +0FF000000001C000FE0018000FF0000000018000FE0018000FE00000000180007F003000 +0FE00000000180007F0030001FE00000000380007F0060001FE00000000300007F00C000 +1FC00000000300007F00C0001FC00000000300007F0180003FC00000000700007F030000 +3FC00000000600007F0300003F800000000600003F8600003F800000000600003F860000 +7F800000000E00003F8C00007F800000000C00003F9800007F000000000C00003F980000 +7F000000000C00003FB00000FF000000001C00003FE00000FF000000001800003FE00000 +FE000000003800001FC00000FE000000003800001FC00001FE000000007800001F800001 +FE00000000FC00001F000001FC00000003FF00001F000007FE000000FFFFF8001E0007FF +FFFE0000FFFFF8001C0007FFFFFE0000FFFFF8000C0007FFFFFE00005F447BC35E>77 +D<0000FFFFC000000FFFFF800000FFFFE000000FFFFF800000FFFFE000000FFFFF800000 +007FE00000007FE0000000007FF00000001F80000000007FF00000000F0000000000EFF8 +0000000E0000000000CFF80000000E0000000000C7F80000000C0000000000C7FC000000 +1C0000000001C7FC0000001C000000000183FE00000018000000000183FE000000180000 +00000181FF00000038000000000381FF00000038000000000300FF000000300000000003 +00FF80000030000000000300FF800000700000000007007FC00000700000000006007FC0 +0000600000000006003FC00000600000000006003FE00000E0000000000E003FE00000E0 +000000000C001FF00000C0000000000C001FF00000C0000000000C000FF80001C0000000 +001C000FF80001C000000000180007F800018000000000180007FC000180000000001800 +07FC00038000000000380003FE00038000000000300003FE00030000000000300001FE00 +030000000000300001FF00070000000000700001FF00070000000000600000FF80060000 +000000600000FF800600000000006000007FC00E0000000000E000007FC00E0000000000 +C000003FC00C0000000000C000003FE00C0000000000C000003FE01C0000000001C00000 +1FF01C00000000018000001FF01800000000018000000FF01800000000018000000FF838 +00000000038000000FF838000000000300000007FC30000000000300000007FC30000000 +000300000003FE70000000000700000003FE70000000000600000001FE60000000000600 +000001FF60000000000600000001FFE0000000000E00000000FFE0000000000C00000000 +FFC0000000000C000000007FC0000000000C000000007FC0000000001C000000007FC000 +00000018000000003F800000000038000000003F800000000038000000001F8000000000 +78000000001F8000000000FC000000000F0000000003FF000000000F00000000FFFFF800 +00000F00000000FFFFF80000000700000000FFFFF8000000060000000051447CC34E>I< +0000000003FF000000000000007FFFF0000000000001FC01FC00000000000FE0007F0000 +0000003F00001FC000000000FE000007E000000001F8000003F000000007F0000001F800 +00000FC0000000FC0000001F80000000FE0000007F000000007E000000FE000000007F00 +0001FC000000003F000003F8000000003F800007F0000000003F80000FF0000000001FC0 +000FE0000000001FC0001FC0000000001FC0003F80000000001FE0007F80000000001FE0 +007F00000000001FE000FF00000000001FE001FE00000000000FE001FE00000000001FF0 +03FC00000000001FF003FC00000000001FF007F800000000001FF007F800000000001FF0 +0FF800000000001FF00FF000000000001FF01FF000000000001FE01FF000000000001FE0 +1FE000000000003FE03FE000000000003FE03FE000000000003FE03FE000000000003FE0 +7FC000000000007FC07FC000000000007FC07FC000000000007FC07FC00000000000FF80 +7FC00000000000FF80FF800000000000FF80FF800000000001FF00FF800000000001FF00 +FF800000000001FF00FF800000000003FE00FF800000000003FE00FF800000000007FC00 +FF800000000007F800FF80000000000FF8007F80000000000FF0007F80000000001FF000 +7F80000000001FE0007F80000000003FC0007F80000000007F80003FC0000000007F8000 +3FC000000000FF00003FC000000001FE00001FC000000003FC00001FE000000007F80000 +0FE000000007F0000007F00000000FE0000007F00000003F80000003F80000007F000000 +01FC000000FE00000000FE000001F8000000007F000007F0000000003F80001FC0000000 +000FE0007F000000000003F803FC000000000000FFFFE00000000000000FFE0000000000 +44487CC54B>I<0000FFFFFFFFFE00000000FFFFFFFFFFE0000000FFFFFFFFFFF8000000 +00FFC0000FFE000000007F800001FF00000000FF8000007F80000000FF8000003FC00000 +00FF0000001FE0000000FF0000001FE0000001FF0000000FF0000001FF0000000FF00000 +01FE0000000FF0000001FE0000000FF8000003FE0000000FF8000003FE0000000FF80000 +03FC0000000FF8000003FC0000000FF8000007FC0000000FF8000007FC0000001FF00000 +07F80000001FF0000007F80000001FF000000FF80000003FE000000FF80000003FE00000 +0FF00000003FC000000FF00000007FC000001FF00000007F8000001FF0000000FF000000 +1FE0000001FE0000001FE0000003FC0000003FE0000007F80000003FE000000FF0000000 +3FC000003FC00000003FC00000FF000000007FC00007FC000000007FFFFFFFF000000000 +7FFFFFFF80000000007F8000000000000000FF8000000000000000FF8000000000000000 +FF0000000000000000FF0000000000000001FF0000000000000001FF0000000000000001 +FE0000000000000001FE0000000000000003FE0000000000000003FE0000000000000003 +FC0000000000000003FC0000000000000007FC0000000000000007FC0000000000000007 +F80000000000000007F8000000000000000FF8000000000000000FF8000000000000000F +F0000000000000000FF0000000000000001FF0000000000000001FF0000000000000001F +E0000000000000001FE0000000000000003FE0000000000000003FE0000000000000003F +C000000000000000FFE0000000000000FFFFFFE00000000000FFFFFFE00000000000FFFF +FFE0000000000045447CC33F>I<0000FFFFFFFFF000000000FFFFFFFFFF00000000FFFF +FFFFFFE000000000FFC0003FF8000000007F800007FC00000000FF800001FE00000000FF +8000007F00000000FF0000003F80000000FF0000003FC0000000FF0000001FE0000001FF +0000001FE0000001FE0000001FE0000001FE0000001FF0000001FE0000001FF0000003FE +0000001FF0000003FC0000001FF0000003FC0000001FF0000003FC0000001FF0000007FC +0000003FE0000007F80000003FE0000007F80000003FE0000007F80000007FC000000FF8 +0000007F8000000FF0000000FF8000000FF0000000FF0000000FF0000001FE0000001FF0 +000003FC0000001FE0000007F80000001FE000000FE00000001FE000001FC00000003FE0 +00007F000000003FC00003FC000000003FC0001FF0000000003FFFFFFF80000000007FFF +FFFE00000000007F80007F80000000007F80000FC0000000007F800007F000000000FF80 +0003F800000000FF000003FC00000000FF000001FC00000000FF000001FE00000001FF00 +0001FE00000001FE000000FE00000001FE000000FE00000001FE000001FE00000003FE00 +0001FE00000003FC000001FE00000003FC000001FE00000003FC000003FE00000007FC00 +0003FE00000007F8000003FE00000007F8000003FE00000007F8000007FC0000000FF800 +0007FC0000000FF0000007FC0000000FF0000007FC0000000FF0000007FC0000001FF000 +0007FC0018001FE0000007FC0018001FE0000007FC0018003FE0000007F80038003FE000 +0007F80030003FC0000007FC007000FFE0000003FC00E0FFFFFFE00003FC01C0FFFFFFE0 +0001FC0380FFFFFFE00000FE0F000000000000003FFE0000000000000007F00045467CC3 +4A>82 D<00000000FF80018000000007FFF003800000003FFFFC0380000000FF007E0780 +000001F8000F0F80000007E000079F0000000FC00003FF0000001F000001FF0000003E00 +0000FF0000007C000000FE0000007C0000007E000000F80000007E000001F00000007E00 +0001F00000003C000003E00000003C000003E00000003C000007E00000003C000007C000 +000038000007C000000038000007C00000003800000FC00000003800000FC00000003000 +000FE00000003000000FE00000003000000FE00000000000000FF000000000000007F800 +000000000007FC00000000000007FF00000000000003FFE0000000000003FFFC00000000 +0001FFFFC00000000000FFFFFC00000000007FFFFF00000000003FFFFFC0000000000FFF +FFE00000000003FFFFF800000000003FFFF8000000000007FFFC0000000000007FFE0000 +000000000FFE00000000000003FE00000000000001FF00000000000000FF000000000000 +007F000000000000007F000000000000003F000000000000003F000006000000003F0000 +06000000003F000006000000003F000006000000003F00000E000000003E00000E000000 +003E00000C000000003E00000C000000007E00001E000000007C00001E000000007C0000 +1E00000000F800001E00000000F000003F00000001F000003F00000003E000003F800000 +07C000003F8000000F8000007FC000001F0000007FE000003E0000007CF800007C000000 +787E0001F8000000F01FC00FE0000000E007FFFF80000000E001FFFE00000000C0003FF0 +0000000039487BC53C>I<01FFFFFFFFFFFFFFC003FFFFFFFFFFFFFFC003FFFFFFFFFFFF +FFC003FF0000FF8000FF8007F00000FF00001F8007E00001FF00000F8007800001FF0000 +07800F000001FE000007800F000001FE000003800E000001FE000003801C000003FE0000 +03001C000003FC0000030018000003FC0000030038000003FC0000030030000007FC0000 +030030000007F80000070070000007F80000060060000007F800000600E000000FF80000 +0600C000000FF000000600C000000FF000000600C000000FF0000006000000001FF00000 +00000000001FE0000000000000001FE0000000000000001FE0000000000000003FE00000 +00000000003FC0000000000000003FC0000000000000003FC0000000000000007FC00000 +00000000007F80000000000000007F80000000000000007F8000000000000000FF800000 +0000000000FF0000000000000000FF0000000000000000FF0000000000000001FF000000 +0000000001FE0000000000000001FE0000000000000001FE0000000000000003FE000000 +0000000003FC0000000000000003FC0000000000000003FC0000000000000007FC000000 +0000000007F80000000000000007F80000000000000007F8000000000000000FF8000000 +000000000FF0000000000000000FF0000000000000000FF0000000000000001FF0000000 +000000001FE0000000000000001FE0000000000000001FE0000000000000003FE0000000 +000000003FC0000000000000003FC0000000000000007FC0000000000000007FC0000000 +00000000FFC000000000000003FFE000000000001FFFFFFFFC000000001FFFFFFFFC0000 +00001FFFFFFFF80000000042447EC339>I<00000FC0000000007FF000000001F8381C00 +0007E01C7E00000FC00E7E00003F0007FE00007F0003FC0000FE0003FC0001FC0003FC00 +01F80001FC0003F80001F80007F00001F8000FF00001F8000FE00003F8001FE00003F000 +1FE00003F0003FC00003F0003FC00007F0007FC00007E0007F800007E0007F800007E000 +7F80000FE000FF80000FC000FF00000FC000FF00000FC000FF00001FC000FF00001F8000 +FE00001F8000FE00001F8000FE00003F8030FE00003F0070FE00003F0060FE00003F0060 +FE00007F00E0FE00007F00C0FE0000FE00C07E0001FE00C07E0003FE01C03E00073E0180 +3F000E3E03801F001C3E03000F80381F070007C0F00F0E0001FFC007FC00007F0001F000 +2C2D7CAB33>97 D<000FE0000007FFE0000007FFE0000007FFE00000001FC00000000FC0 +0000001FC00000001FC00000001F800000001F800000001F800000003F800000003F0000 +00003F000000003F000000007F000000007E000000007E000000007E00000000FE000000 +00FC00000000FC00000000FC00000001FC00000001F800000001F80FC00001F83FF00003 +F8F07C0003F3C03E0003F7001F0003FE001F8007FC000F8007F8000FC007F0000FC007F0 +000FE00FE0000FE00FC0000FE00FC0000FE00FC0000FE01FC0000FE01F80000FE01F8000 +0FE01F80001FE03F80001FE03F00001FE03F00001FE03F00003FE07F00003FC07E00003F +C07E00003FC07E00007FC07E00007F80FC00007F80FC00007F00FC0000FF00FC0000FF00 +FC0001FE007C0001FC007C0001FC007C0003F8007C0007F0007C0007E0003C000FE0003E +001FC0001E003F80001F007E00000F00FC000007C1F0000001FFC00000007F0000002346 +7CC429>I<000007F80000003FFF000000FC07C00003F000E00007E00070001F80003000 +3F000070007E0003F800FE0007F801FC0007F803F8000FF007F8000FF007F0000FF00FF0 +0007C01FE00000001FE00000003FC00000003FC00000007FC00000007F800000007F8000 +00007F80000000FF80000000FF00000000FF00000000FF00000000FF00000000FE000000 +00FE00000000FE00000000FE00000000FE00000000FE00000018FE00000038FE00000070 +7E000000E07E000001C03F000003803F000007001F80001E000F8000380007C001F00003 +F00FC00000FFFE0000001FF00000252D7CAB2A>I<0000000001FC00000000FFFC000000 +00FFFC00000000FFFC0000000003F80000000001F80000000003F80000000003F8000000 +0003F00000000003F00000000007F00000000007F00000000007E00000000007E0000000 +000FE0000000000FE0000000000FC0000000000FC0000000001FC0000000001FC0000000 +001F80000000001F80000000003F80000000003F80000000003F0000000FC03F0000007F +F07F000001F8387F000007E01C7E00000FC00E7E00003F0007FE00007F0003FE0000FE00 +03FC0001FC0003FC0001F80001FC0003F80001FC0007F00001F8000FF00001F8000FE000 +03F8001FE00003F8001FE00003F0003FC00003F0003FC00007F0007FC00007F0007F8000 +07E0007F800007E0007F80000FE000FF80000FE000FF00000FC000FF00000FC000FF0000 +1FC000FF00001FC000FE00001F8000FE00001F8000FE00003F8030FE00003F8070FE0000 +3F0060FE00003F0060FE00007F00E0FE00007F00C0FE0000FE00C07E0001FE00C07E0003 +FE01C03E00073E01803F000E3E03801F001C3E03000F80381F070007C0F00F0E0001FFC0 +07FC00007F0001F0002E467CC433>I<0000000007E0000000001FF8000000007C1C0000 +0000F80E00000001F03E00000003E07F00000003E0FF00000007E1FF00000007C1FF0000 +0007C1FE0000000FC0FC0000000FC0780000000FC0000000001F80000000001F80000000 +001F80000000001F80000000003F80000000003F00000000003F00000000003F00000000 +003F00000000007F00000000007E00000000007E00000000007E00000000007E00000000 +FFFFFF800000FFFFFF800000FFFFFF80000000FC0000000000FC0000000000FC00000000 +01FC0000000001F80000000001F80000000001F80000000001F80000000003F800000000 +03F00000000003F00000000003F00000000003F00000000007F00000000007E000000000 +07E00000000007E00000000007E0000000000FE0000000000FC0000000000FC000000000 +0FC0000000000FC0000000000FC0000000001FC0000000001F80000000001F8000000000 +1F80000000001F80000000003F80000000003F00000000003F00000000003F0000000000 +3F00000000007F00000000007E00000000007E00000000007E00000000007E0000000000 +FC0000000000FC0000000000FC0000000000FC0000000000F80000000001F80000000001 +F80000000001F00000000001F00000001C03F00000007F03E0000000FF03E0000000FF03 +C0000000FF07C0000000FF0780000000FE0F00000000F80F00000000601E00000000783C +000000001FF00000000007C000000000305A7BC530>102 D<0000007E0000000003FF80 +0000000FC1E0E000001F0073F000007E0033F00000FC003FF00001F8001FF00003F8001F +E00007F0000FE0000FE0000FE0000FE0000FE0001FC0000FC0003FC0000FC0003F80001F +C0007F80001FC0007F00001F8000FF00001F8000FF00003F8001FF00003F8001FE00003F +0001FE00003F0001FE00007F0003FE00007F0003FC00007E0003FC00007E0003FC0000FE +0003FC0000FE0003F80000FC0003F80000FC0003F80001FC0003F80001FC0003F80001F8 +0003F80001F80003F80003F80003F80007F80001F80007F00001F8000FF00000F8001FF0 +0000FC003FF000007C0077E000003E01E7E000001F078FE0000007FE0FE0000001F80FC0 +000000000FC0000000001FC0000000001FC0000000001F80000000001F80000000003F80 +000000003F80000000003F00000000003F00001C00007E00007F0000FE0000FF0000FC00 +00FF0001F80000FF0003F80000FE0007F00000FE000FC00000F8001F8000007C00FE0000 +001FFFF800000003FFC00000002C407EAB2F>I<0000FE000000007FFE000000007FFE00 +0000007FFE0000000001FC0000000000FC0000000001FC0000000001FC0000000001F800 +00000001F80000000003F80000000003F80000000003F00000000003F00000000007F000 +00000007F00000000007E00000000007E0000000000FE0000000000FE0000000000FC000 +0000000FC0000000001FC0000000001FC0000000001F80000000001F803FC000003F81FF +F000003F87C0FC00003F0E007E00003F3C003E00007F70003F00007FE0001F00007FC000 +1F80007F80001F8000FF80001F8000FF00001F8000FE00001F8000FE00001F8001FC0000 +3F8001FC00003F0001F800003F0001F800003F0003F800007F0003F800007E0003F00000 +7E0003F000007E0007F00000FE0007F00000FC0007E00000FC0007E00001FC000FE00001 +F8000FE00001F8000FC00003F8000FC00003F0001FC00003F0071FC00007F0061F800007 +E0061F80000FE0063F80000FC00E3F80000FC00C3F00000FC01C3F00000F80187F00000F +80387F00000F80307E00000F80707E00000F80E0FE00000781C0FE000007C380FC000001 +FF00380000007C0030467BC438>I<00001E0000003F0000007F000000FF000000FF0000 +00FF0000007E000000380000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000003E000000 +FF800001C3C0000781E0000601F0000E01F0001C01F0001803F0003803F0003003F00030 +03F0007007F0006007E0006007E000E00FE000C00FC000001FC000001F8000001F800000 +3F8000003F0000003F0000007F0000007E000000FE000000FC000000FC000001FC000001 +F8000001F8038003F8030003F0030007F0030007E0070007E0060007E00E0007E00C0007 +C01C0007C0180007C0380007C0700003C0E00003E1C00000FF8000003E000019437DC121 +>I<000000003C00000000FE00000000FE00000001FE00000001FE00000001FE00000001 +FC0000000070000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FC00000003FF0000000F078000001C07C000003803E000007003E00000 +E003E00000C003E00001C003E000018007E000038007E000030007E000070007E0000600 +0FE0000E000FE0000C000FC00000000FC00000001FC00000001FC00000001F800000001F +800000003F800000003F800000003F000000003F000000007F000000007F000000007E00 +0000007E00000000FE00000000FE00000000FC00000000FC00000001FC00000001FC0000 +0001F800000001F800000003F800000003F800000003F000000003F000000007F0000000 +07F000000007E000000007E00000000FE00000000FE00000000FC00000000FC00000001F +C00000001F800000001F800000003F80001C003F00007F003F0000FF007E0000FF00FC00 +00FF00FC0000FE01F80000FE03E00000F807C00000781F8000003FFE00000007F0000000 +275681C128>I<0000FE000000007FFE000000007FFE000000007FFE0000000001FC0000 +000000FC0000000001FC0000000001FC0000000001F80000000001F80000000003F80000 +000003F80000000003F00000000003F00000000007F00000000007F00000000007E00000 +000007E0000000000FE0000000000FE0000000000FC0000000000FC0000000001FC00000 +00001FC0000000001F80000000001F80003F00003F8000FFC0003F8003C0E0003F000703 +E0003F001E0FE0007F00380FE0007F00701FE0007E00E01FE0007E01C01FE000FE01801F +C000FE0380070000FC0700000000FC0E00000001FC1C00000001FC3800000001F8700000 +0001F8E000000003FBC000000003FF0000000003FF8000000003FFF800000007F1FE0000 +0007F03F80000007E00FE0000007E007F000000FE003F000000FE003F800000FC001F800 +000FC001F800001FC001F801C01FC001F801801F8001F801801F8001F801803F8001F803 +803F8001F803003F0001F003003F0001F007007F0001F006007F0001F00E007E0001F00C +007E0001F01C00FE0000F03800FE0000787000FC00003FE0003800000F80002B467BC433 +>I<0003F801FFF801FFF801FFF80007F00003F00007F00007F00007E00007E0000FE000 +0FE0000FC0000FC0001FC0001FC0001F80001F80003F80003F80003F00003F00007F0000 +7F00007E00007E0000FE0000FE0000FC0000FC0001FC0001FC0001F80001F80003F80003 +F80003F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0001FC0001F +C0001F80001F80003F80003F80003F00003F00007F00607F00E07E00C07E00C07E01C0FE +0180FC0180FC0180FC03807C03007C07007C06003E0E001E1C000FF80003E00015467CC4 +1D>I<00F80003FC00007F800003FE001FFF0003FFE000071F007C0FC00F81F8000E0F80 +E007E01C00FC001C0FC3C003E078007C001807C70003F0E0007E001807CE0001F1C0003E +003807DC0001FB80003F003007D80001FB00003F00300FF80001FF00003F00700FF00001 +FE00003F00600FE00001FC00003F00600FE00001FC00003F00E00FC00003F800007F00C0 +1FC00003F800007E00C01F800003F000007E00001F800003F000007E00001F800007F000 +00FE00003F800007F00000FC00003F000007E00000FC00003F000007E00000FC00003F00 +000FE00001FC00007F00000FE00001F800007E00000FC00001F800007E00000FC00003F8 +00007E00001FC00003F00000FE00001FC00003F00000FC00001F800007F00000FC00001F +800007E00000FC00003F800007E00E01FC00003F80000FE00C01F800003F00000FC00C01 +F800003F00001FC00C01F800007F00001F801C03F800007F00001F801803F000007E0000 +1F803803F000007E00001F003003F00000FE00001F007007F00000FE00001F006007E000 +00FC00001F00E007E00000FC00001F01C007E00001FC00000F03800FE00001FC00000F87 +000FC00001F8000003FE000380000070000000F8004F2D7DAB55>I<00F80003FC000003 +FE001FFF0000071F007C0FC0000E0F80E007E0000C07C3C003E0001C07C70003F0001807 +CE0001F0003807DC0001F8003007D80001F800300FF80001F800700FF00001F800600FE0 +0001F800600FE00001F800E00FC00003F800C01FC00003F000C01F800003F000001F8000 +03F000001F800007F000003F800007E000003F000007E000003F000007E000003F00000F +E000007F00000FC000007E00000FC000007E00001FC000007E00001F800000FE00001F80 +0000FC00003F800000FC00003F000000FC00003F007001FC00007F006001F800007E0060 +01F80000FE006001F80000FC00E003F80000FC00C003F00000FC01C003F00000F8018003 +F00000F8038007F00000F8030007E00000F8070007E00000F80E0007E00000781C000FE0 +00007C38000FC000001FF0000380000007C000342D7DAB3A>I<000003FC000000003FFF +00000000FE07C0000003F003F0000007E001F800001FC000FC00003F00007C00007F0000 +7E0000FE00007F0001FC00003F0003F800003F0007F800003F8007F000003F800FF00000 +3F801FE000003F801FE000003F803FC000003F803FC000007F807FC000007F807F800000 +7F807F8000007F807F800000FF80FF800000FF00FF000000FF00FF000000FF00FF000001 +FF00FF000001FE00FE000001FE00FE000003FC00FE000003FC00FE000003F800FE000007 +F800FE000007F000FE00000FE000FE00001FE0007E00001FC0007E00003F80003F00007F +00003F0000FE00001F8001F800000FC003F0000007E00FC0000001F03F80000000FFFC00 +0000001FE0000000292D7CAB2F>I<0003E0003F8000000FF800FFE000001C7C03C0F800 +00383E07007C0000703F1E007E0000601F38003F0000601F70003F0000E01F60001F8000 +C01FE0001F8000C03FC0001F8001C03F80001FC001803F00001FC001803F00001FC00380 +7F00001FC003007F00001FC003007E00001FC000007E00001FC00000FE00003FC00000FE +00003FC00000FC00003FC00000FC00003FC00001FC00007FC00001FC00007F800001F800 +007F800001F800007F800003F80000FF800003F80000FF000003F00000FF000003F00000 +FE000007F00001FE000007F00001FC000007E00003FC000007E00003F800000FE00007F8 +00000FE00007F000000FE0000FE000000FE0000FC000001FF0001F8000001FF0003F0000 +001FB8007E0000001F9800FC0000003F9C01F80000003F8F07E00000003F03FF80000000 +3F00FC000000007F0000000000007F0000000000007E0000000000007E000000000000FE +000000000000FE000000000000FC000000000000FC000000000001FC000000000001FC00 +0000000001F8000000000001F8000000000003F8000000000003F8000000000007F80000 +000000FFFFF000000000FFFFF000000000FFFFE000000000323F83AB31>I<00F8000FC0 +03FE007FF0070F00F0380E0F83C07C0C07C701FC1C07CE01FC1807DC03FC3807D803FC30 +07F803FC300FF003F8700FE000E0600FE00000600FC00000E00FC00000C01FC00000C01F +800000001F800000001F800000003F800000003F000000003F000000003F000000007F00 +0000007E000000007E000000007E00000000FE00000000FC00000000FC00000000FC0000 +0001FC00000001F800000001F800000001F800000003F800000003F000000003F0000000 +03F000000007F000000007E000000007E000000007E00000000FE00000000FC000000003 +80000000262D7DAB2C>114 D<00000FF00000007FFE000001F00F8000078001C0000F00 +00E0001E000060003C000060003C0001F000780007F000780007F000F8000FE000F0000F +E000F8000FE000F800038000FC00000000FE00000000FF00000000FFF80000007FFF8000 +007FFFE000003FFFF800001FFFFC000007FFFE000000FFFE00000007FF00000000FF0000 +00007F000000003F800000001F800E00001F803F00000F007F80000F007F80000F007F80 +001F00FF00001E00FF00001E00FC00003C006000003C006000007800700000F000380001 +E0001C0007C0000F803F000003FFFC0000007FE00000242D7BAB2E>I<00001C0000007E +0000007E0000007E000000FE000000FC000000FC000000FC000001FC000001F8000001F8 +000001F8000003F8000003F0000003F0000003F0000007F0000007E0000007E0007FFFFF +FCFFFFFFFCFFFFFFF8000FC000000FC000001FC000001F8000001F8000001F8000003F80 +00003F0000003F0000003F0000007F0000007E0000007E0000007E000000FE000000FC00 +0000FC000000FC000001FC000001F8000001F8000001F8000003F8000003F0000003F000 +0003F0007007F0006007E0006007E000E007E000C00FE001C00FC001800FC003800FC007 +0007C0060007C00E0007C01C0003E0380001E0F00000FFC000003F00001E3F7EBD23>I< +003E000000000000FF800000E00003C3C00003F0000703E00003F0000601F00003F0000E +01F00007F0001C01F00007F0001803F00007E0003803F00007E0003003F0000FE0003003 +F0000FE0007007F0000FC0006007E0000FC0006007E0001FC000E00FE0001FC000C00FC0 +001F8000001FC0001F8000001F80003F8000001F80003F8000003F80003F0000003F0000 +3F0000003F00007F0000007F00007F0000007E00007E0000007E00007E0000007E0000FE +000000FE0000FE000000FC0000FC000000FC0000FC000000FC0001FC018000FC0001FC03 +8001F80001F8030001F80001F8030001F80001F8070001F80003F8060001F80003F00600 +00F80007F0060000F8000FF00E0000FC000DF00C00007C001DF01C00007C0039F0180000 +3E00F0F83800001F03C07870000007FF803FE0000001FC000F8000312D7DAB38>I<003E +00000E0000FF80003F8003C3C0007F800703E0007F800601F0007F800E01F0007F801C01 +F0007F801803F0003F803803F0001F803003F0000F803003F0000F807007F00007806007 +E00007806007E0000780E00FE0000700C00FC0000300001FC0000300001F80000700001F +80000600003F80000600003F00000600003F00000E00007F00000C00007E00000C00007E +00000C00007E00001C0000FE0000180000FC0000180000FC0000380000FC0000300000FC +0000700001F80000600001F80000E00001F80000C00001F80001C00000F80001800000F8 +0003800000FC0007000000FC00060000007C000E0000007E001C0000003F00780000000F +81E000000007FFC000000000FE000000292D7DAB2F>I<0000FC0007E00003FF801FFC00 +0F07C0781E001C03E0E01F003801F1C07F007000F1807F00E000FB80FF01C000FF00FF01 +8000FE00FF038000FE00FE030000FE0038070000FC0000060000FC0000060001FC00000E +0001F800000C0001F80000000001F80000000003F80000000003F00000000003F0000000 +0003F00000000007F00000000007E00000000007E00000000007E0000000000FE0000000 +000FC0000000000FC0000000000FC0000000001FC0003800001FC0003000001F80003000 +001F80007000003F8000601E003F8000603F003F8000E07F807F8001C07F806F800180FF +80EF800380FF01CF800700FE0187C00E007C0383C01C003C0F01E078001FFC00FFE00003 +F0003F8000302D7EAB37>120 D<003E0000000000FF800000E003C3C00003F00703E000 +03F00601F00003F00E01F00007F01C01F00007E01803F00007E03803F00007E03003F000 +0FE07003F0000FC06007F0000FC06007E0000FC06007E0001FC0E00FE0001F80C00FC000 +1F80001FC0001F80001F80003F80001F80003F00003F80003F00003F00003F00003F0000 +7F00007F00007E00007E00007E00007E00007E00007E0000FE0000FE0000FC0000FC0000 +FC0000FC0000FC0000FC0001FC0000FC0001F80001F80001F80001F80001F80001F80003 +F80001F80003F00001F80003F00000F80007F00000F8000FF00000FC000FE000007C001F +E000007C003FE000003E00FFE000001F03CFC0000007FF8FC0000001FC0FC0000000001F +C0000000001F80000000001F80000000003F80000000003F000007C0007F00001FE0007E +00001FE000FC00001FE000FC00003FC001F800003FC003F000003F8003E00000380007C0 +000018000F8000001C001F0000000E007C0000000781F800000003FFE0000000007F0000 +00002C407DAB30>I<000000003000000000007800000000007C00000000007C00000000 +003C00000000003E00000000003F00000000001F007FFFFFFFFFC0FFFFFFFFFFC0FFFFFF +FFFFC07FFFFFFFFFC0000000007F0000000000FC0000000001F80000000003F000000000 +03E00000000007C00000000007C0000000000300002A146EC631>126 +D E /FD 53 122 df<00000000007FF8000000000007FFFF00000000001FC00FC0000000 +003E0001E000000000FC0000F000000001F80001F000000003F00007F000000003E00007 +F000000007E0000FF000000007E0000FF00000000FC0000FF00000000FC0000FE0000000 +1FC00003800000001F800000000000001F800000000000001F800000000000003F800000 +000000003F000000000000003F000000000000003F000000000000003F00000000000000 +7F000000000000007E000000000000007E000000000000007E000000000000007E000000 +00000000FE000000000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFE00000000 +FC00007E00000001FC0000FE00000001F80000FC00000001F80000FC00000001F80000FC +00000001F80001FC00000001F80001F800000003F80001F800000003F00001F800000003 +F00003F800000003F00003F000000003F00003F000000007F00003F000000007E00007F0 +00000007E00007E000000007E00007E000000007E00007E00000000FE0000FE00000000F +C0000FC00000000FC0000FC00000000FC0000FC00000000FC0001FC00000001FC0001F80 +0000001F80001F800000001F80001F800000001F80003F80E000001F80003F01E000003F +80003F01C000003F00003F01C000003F00003F01C000003F00007F03C000003F00007E03 +8000007F00007E038000007E00007E078000007E00007E070000007E00003E070000007E +00003E0E000000FE00001E1E000000FC00001F1C000000FC000007F8000000FC000001E0 +000000FC00000000000001F800000000000001F800000000000001F800000000000001F0 +00000000000003F000000000000003F000000000001C03E000000000007F03E000000000 +00FF07E00000000000FF07C00000000000FF07C00000000000FF0F800000000000FE0F00 +0000000000F81F000000000000701E000000000000783C0000000000001FF00000000000 +0007C00000000000003C5A83C537>12 D<00F003F807FC0FFC0FFC0FFC0FFC0FFC0FFC03 +CC001C00180018003800300030007000E000C001C00180038007000E001C0038007000E0 +00C0000E1D6BC41E>39 D<000000007000000000E000000001C000000003800000000700 +0000000E000000003C000000007800000000F800000000F000000001E000000003C00000 +0007800000000F800000001F000000001E000000003E000000007C000000007800000000 +F800000001F000000001E000000003E000000007C000000007C00000000F800000000F80 +0000001F000000001F000000003F000000003E000000007E000000007C000000007C0000 +0000F800000000F800000001F800000001F000000001F000000003F000000003E0000000 +03E000000007E000000007C000000007C00000000FC00000000FC00000000F800000000F +800000001F800000001F800000001F000000001F000000003F000000003F000000003E00 +0000003E000000003E000000007E000000007E000000007C000000007C000000007C0000 +00007C000000007C000000007C00000000F800000000F800000000F800000000F8000000 +00F800000000F800000000F800000000F800000000F800000000F800000000F800000000 +7800000000780000000078000000007800000000780000000078000000007C000000003C +000000003C000000003C000000003C000000001E000000001E000000000E000000000F00 +0000000F0000000007000000000380000000038000000001C000000001C000000000E000 +00000060000000246472CA28>I<00000060000000006000000000700000000038000000 +0038000000001C000000001E000000000E000000000F000000000F000000000700000000 +07800000000780000000078000000003C000000003C000000003C000000003C000000003 +C000000003E000000003E000000001E000000001E000000001E000000001E000000001E0 +00000001E000000001E000000003E000000003E000000003E000000003E000000003E000 +000003E000000003E000000003E000000003E000000007E000000007E000000007C00000 +0007C000000007C000000007C00000000FC00000000FC00000000F800000000F80000000 +1F800000001F800000001F000000001F000000003F000000003F000000003E000000003E +000000007E000000007E000000007C00000000FC00000000FC00000000F800000001F800 +000001F800000001F000000003F000000003E000000003E000000007E000000007C00000 +000FC00000000F800000000F800000001F000000001F000000003E000000003E00000000 +7C000000007800000000F800000001F000000001F000000003E000000003C000000007C0 +0000000F800000000F000000001E000000003E000000007C000000007800000000F00000 +0001E000000003C000000007800000000F000000001E000000003C000000007800000000 +E000000000C00000000023647FCA28>I<00F003FC07FC07FC0FFE0FFE0FFE0FFE07FC03 +CC000C001C00180018003800300070006000E001C00180038007000E001C0038007000E0 +00C0000F1D7A891E>44 D<7FFFFFFFFFFFFFFFFFFFFFFEFFFFFE1805789723>I<0F003F +C07FC07FC0FFC0FFC0FFC0FF807F003C000A0A76891E>I<0000003F8000000001FFE000 +000007C0F80000001F007C0000003C003E00000078001E000000F0001F000001E0000F00 +0003E0000F800007C0000F80000780000F80000F80000F80001F00000FC0001F00000FC0 +003F00000FC0007E00000FC0007E00000FC000FE00000FC000FC00000FC000FC00001FC0 +01FC00001FC001F800001F8003F800001F8003F800001F8003F000003F8007F000003F80 +07F000003F8007F000003F000FE000007F000FE000007F000FE000007F000FE000007F00 +1FC00000FE001FC00000FE001FC00000FE001FC00000FE003F800001FC003F800001FC00 +3F800001FC003F800001FC007F000003F8007F000003F8007F000003F8007F000003F000 +7F000007F0007E000007F0007E000007E000FE00000FE000FE00000FC000FE00000FC000 +FC00001FC000FC00001F8000FC00001F8000FC00003F0000FC00003E0000FC00007E0000 +7C00007C00007C0000FC00007C0000F800007C0001F000003C0003E000003E0003C00000 +3E00078000001F001F0000000F803E00000007C0F800000001FFE0000000007F00000000 +2A4475C132>48 D<00000000C000000001C000000001C000000003C000000007C0000000 +0F800000001F800000003F800000007F80000001FF00000003FF0000000FFF0000007FFF +000007FCFE00000FF0FE00000700FE00000001FE00000001FC00000001FC00000001FC00 +000003FC00000003F800000003F800000003F800000007F800000007F000000007F00000 +0007F00000000FF00000000FE00000000FE00000000FE00000001FE00000001FC0000000 +1FC00000001FC00000003FC00000003F800000003F800000003F800000007F800000007F +000000007F000000007F00000000FF00000000FE00000000FE00000000FE00000001FE00 +000001FC00000001FC00000001FC00000003FC00000003F800000003F800000003F80000 +0007F800000007F000000007F00000000FF00000000FF00000001FF00000003FF00000FF +FFFFFC00FFFFFFFC00FFFFFFF800224276C132>I<0000001FE000000000FFFC00000003 +FFFF00000007E03F8000001F800FC000003E0007E000007C0003E00000F80003F00001F0 +0001F00003E00001F00003E00001F00007C00001F00007C00001F0000F800001F0000F80 +0001F0000F800003F0001F800003E0001F800003E0001F800007E0001FC00007C0001FC0 +000F80001FE0001F80001FF0003F00001FF8003E00000FFC007C00000FFF00F000000FFF +83E0000007FFC7C0000003FFFF00000001FFFC00000000FFF8000000007FFC000000003F +FE00000000FFFF80000001EFFFC000000783FFE000001F01FFE000003E00FFF000007C00 +7FF80000F8003FF80001F0001FF80003E0000FF80007C00007FC000F800003FC001F8000 +01FC001F000001FC003F000001FC003E000000FC007E000000F8007C000000F8007C0000 +00F8007C000001F800FC000001F000F8000001F000F8000003E000F8000003E000F80000 +07C0007C000007C0007C00000F80007C00001F00003E00003E00003F00007C00001F0001 +F800000FC003F0000007F01FC0000003FFFF00000000FFFC000000001FE00000002C4477 +C132>56 D<000F00001FC0003FC0007FE000FFE000FFE000FFC0007F80007F00001E0000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000F00003F +C0007FC0007FC000FFC000FFC000FFC000FF80007F00003C0000132B76AA1E>58 +D<00000000000380000000000000078000000000000007800000000000000FC000000000 +00000FC00000000000001FC00000000000001FC00000000000003FC00000000000007FC0 +0000000000007FC0000000000000FFC0000000000000FFC0000000000001FFC000000000 +0001FFC0000000000003BFC0000000000007BFC00000000000073FC000000000000F3FC0 +00000000000E3FC000000000001C3FC000000000001C3FE00000000000383FE000000000 +00381FE00000000000701FE00000000000F01FE00000000000E01FE00000000001C01FE0 +0000000001C01FE00000000003801FE00000000003801FE00000000007001FE000000000 +07001FE0000000000E001FE0000000001E001FE0000000001C001FE00000000038001FE0 +0000000038001FF00000000070001FF00000000070000FF000000000E0000FF000000001 +E0000FF000000001C0000FF000000003C0000FF00000000380000FF00000000700000FF0 +00000007FFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000001C00000FF00000003C +00000FF00000003800000FF00000007000000FF00000007000000FF0000000E000000FF8 +000000E000000FF8000001C0000007F8000001C0000007F800000380000007F800000780 +000007F800000700000007F800000E00000007F800001E00000007F800001E00000007F8 +00003C00000007F800007C00000007F80000FC00000007F80001FC0000000FFC0007FE00 +00001FFC00FFFFE00007FFFFF8FFFFE00007FFFFF8FFFFE00007FFFFF03D477BC648>65 +D<0000FFFFFFFFFC00000000FFFFFFFFFF80000000FFFFFFFFFFE000000001FF80001FF0 +00000000FF000007F800000001FF000003FC00000001FF000001FE00000001FE000001FF +00000001FE000000FF00000001FE000000FF80000003FE0000007F80000003FC0000007F +80000003FC0000007F80000003FC0000007F80000007FC0000007F80000007F80000007F +80000007F8000000FF80000007F8000000FF8000000FF8000000FF0000000FF0000001FF +0000000FF0000001FE0000000FF0000003FE0000001FF0000003FC0000001FE0000007F8 +0000001FE000000FF80000001FE000001FF00000003FE000003FE00000003FC000007F80 +0000003FC00000FF000000003FC00003FC000000007FC0000FF8000000007F8000FFC000 +0000007FFFFFFF00000000007FFFFFFFE000000000FF800007F800000000FF000001FC00 +000000FF000000FE00000000FF0000007F00000001FF0000007F80000001FE0000003FC0 +000001FE0000003FC0000001FE0000003FC0000003FE0000003FE0000003FC0000003FE0 +000003FC0000003FE0000003FC0000003FE0000007FC0000003FE0000007F80000003FE0 +000007F80000003FE0000007F80000003FE000000FF80000003FC000000FF00000007FC0 +00000FF00000007FC000000FF0000000FF8000001FF0000000FF8000001FE0000001FF00 +00001FE0000001FE0000001FE0000003FE0000003FE0000007FC0000003FC000000FF800 +00003FC000001FF00000007FC000003FE00000007FC000007FC00000007F800001FF0000 +0000FF80000FFE000000FFFFFFFFFFF8000000FFFFFFFFFFC0000000FFFFFFFFFE000000 +0041447AC345>I<000000000FF8000300000000FFFF000700000007FFFFC00F0000001F +F803E01F0000007FC000F81E000000FF00007C3E000003FC00003C7E00000FF000001EFE +00001FE000000FFC00003FC0000007FC00007F00000007FC0000FE00000003FC0001FC00 +000003F80003FC00000003F80007F800000001F8000FF000000001F8001FE000000001F0 +003FC000000001F0007FC000000001F0007F8000000001F000FF8000000001E001FF0000 +000001E001FF0000000001E003FE0000000001E003FE0000000001C007FC0000000001C0 +07FC0000000001C00FF80000000001C00FF80000000000001FF80000000000001FF00000 +000000001FF00000000000003FF00000000000003FE00000000000003FE0000000000000 +3FE00000000000007FE00000000000007FC00000000000007FC00000000000007FC00000 +000000007FC0000000000000FF80000000000000FF80000000000000FF80000000000000 +FF80000000000000FF80000000003800FF80000000003800FF80000000007800FF800000 +00007000FF80000000007000FF8000000000F0007F8000000000E0007F8000000001E000 +7F8000000001C0007F8000000003C0003F800000000380003F800000000780003FC00000 +000F00001FC00000000E00001FC00000001E00000FE00000003C00000FF0000000780000 +07F0000000F0000003F8000001E0000003FC000007C0000001FE00000F800000007F0000 +3E000000003FC000FC000000001FF807F00000000007FFFFC00000000001FFFF00000000 +00001FF000000000404872C546>I<0000FFFFFFFFF800000000FFFFFFFFFF00000000FF +FFFFFFFFC000000001FF80003FF000000000FF00000FF800000001FF000003FC00000001 +FF000000FE00000001FE0000007F00000001FE0000007F00000001FE0000003F80000003 +FE0000001FC0000003FC0000001FC0000003FC0000000FE0000003FC0000000FE0000007 +FC0000000FE0000007F80000000FF0000007F800000007F0000007F800000007F000000F +F800000007F000000FF000000007F000000FF000000007F800000FF000000007F800001F +F000000007F800001FE000000007F800001FE000000007F800001FE00000000FF800003F +E00000000FF800003FC00000000FF800003FC00000000FF000003FC00000000FF000007F +C00000000FF000007F800000001FF000007F800000001FF000007F800000001FF00000FF +800000001FE00000FF000000003FE00000FF000000003FE00000FF000000003FE00001FF +000000003FC00001FE000000007FC00001FE000000007F800001FE000000007F800003FE +00000000FF800003FC00000000FF000003FC00000000FF000003FC00000001FE000007FC +00000001FE000007F800000003FC000007F800000003F8000007F800000007F800000FF8 +00000007F000000FF00000000FE000000FF00000001FE000000FF00000001FC000001FF0 +0000003F8000001FE00000007F0000001FE0000000FE0000001FE0000001FC0000003FE0 +000003F80000003FC0000007F00000003FC000000FE00000007FC000003FC00000007FC0 +0000FF000000007F800003FE00000000FF80001FF8000000FFFFFFFFFFE0000000FFFFFF +FFFF00000000FFFFFFFFF80000000045447AC34A>I<0000FFFFFFFFFFFFC00000FFFFFF +FFFFFFC00000FFFFFFFFFFFFC0000001FF800003FF80000000FF0000007F80000001FF00 +00003F80000001FF0000001F80000001FE0000000F80000001FE0000000F80000001FE00 +00000F80000003FE0000000700000003FC0000000700000003FC0000000700000003FC00 +00000700000007FC0000000700000007F80000000F00000007F80000000E00000007F800 +00000E0000000FF80000000E0000000FF00007000E0000000FF00007000E0000000FF000 +0F000E0000001FF0000E00000000001FE0000E00000000001FE0000E00000000001FE000 +1E00000000003FE0001C00000000003FC0003C00000000003FC0007C00000000003FC000 +FC00000000007FC003F800000000007FFFFFF800000000007FFFFFF800000000007FFFFF +F80000000000FF8003F00000000000FF0001F00000000000FF0000F00000000000FF0000 +F00000000001FF0000E00000000001FE0000E00000000001FE0000E00000000001FE0001 +E00000000003FE0001C00070000003FC0001C00070000003FC0001C000F0000003FC0001 +C000E0000007FC00000000E0000007F800000001E0000007F800000001C0000007F80000 +0003C000000FF8000000038000000FF0000000078000000FF0000000070000000FF00000 +000F0000001FF00000000F0000001FE00000001E0000001FE00000003E0000001FE00000 +003C0000003FE00000007C0000003FC0000000FC0000003FC0000001F80000007FC00000 +03F80000007FC000000FF00000007F8000003FF0000000FF800003FFE00000FFFFFFFFFF +FFE00000FFFFFFFFFFFFE00000FFFFFFFFFFFFC0000042447AC342>I<0000FFFFFFFFFF +FF800000FFFFFFFFFFFF800000FFFFFFFFFFFF80000001FF800007FF00000000FF000000 +FF00000001FF0000003F00000001FF0000003F00000001FE0000001F00000001FE000000 +1F00000001FE0000001F00000003FE0000000E00000003FC0000000E00000003FC000000 +0E00000003FC0000000E00000007FC0000000E00000007F80000001E00000007F8000000 +1C00000007F80000001C0000000FF80000001C0000000FF00000001C0000000FF0000700 +1C0000000FF0000F001C0000001FF0000E00000000001FE0000E00000000001FE0000E00 +000000001FE0001E00000000003FE0001C00000000003FC0003C00000000003FC0003C00 +000000003FC0007C00000000007FC000F800000000007F8003F800000000007FFFFFF800 +000000007FFFFFF80000000000FFFFFFF00000000000FF0007F00000000000FF0001F000 +00000000FF0001F00000000001FF0000E00000000001FE0000E00000000001FE0000E000 +00000001FE0001E00000000003FE0001C00000000003FC0001C00000000003FC0001C000 +00000003FC0003C00000000007FC0003800000000007F80000000000000007F800000000 +00000007F8000000000000000FF8000000000000000FF0000000000000000FF000000000 +0000000FF0000000000000001FF0000000000000001FE0000000000000001FE000000000 +0000001FE0000000000000003FE0000000000000003FC0000000000000003FC000000000 +0000007FC0000000000000007FC0000000000000007FC000000000000000FFC000000000 +0000FFFFFFE00000000000FFFFFFE00000000000FFFFFFE0000000000041447AC340>I< +0000FFFFFF803FFFFFE00000FFFFFF803FFFFFE00000FFFFFF803FFFFFE0000001FF8000 +007FE000000000FF0000003FC000000001FF0000007FC000000001FF0000007FC0000000 +01FE0000007F8000000001FE0000007F8000000001FE000000FF8000000003FE000000FF +8000000003FC000000FF0000000003FC000000FF0000000003FC000001FF0000000007FC +000001FF0000000007F8000001FE0000000007F8000001FE0000000007F8000003FE0000 +00000FF8000003FE000000000FF0000003FC000000000FF0000003FC000000000FF00000 +07FC000000001FF0000007FC000000001FE0000007F8000000001FE0000007F800000000 +1FE000000FF8000000003FE000000FF8000000003FC000000FF0000000003FC000000FF0 +000000003FC000001FF0000000007FC000001FF0000000007FFFFFFFFFE0000000007FFF +FFFFFFE0000000007FFFFFFFFFE000000000FF8000003FE000000000FF0000003FC00000 +0000FF0000003FC000000000FF0000007FC000000001FF0000007FC000000001FE000000 +7F8000000001FE0000007F8000000001FE000000FF8000000003FE000000FF8000000003 +FC000000FF0000000003FC000000FF0000000003FC000001FF0000000007FC000001FF00 +00000007F8000001FE0000000007F8000001FE0000000007F8000003FE000000000FF800 +0003FE000000000FF0000003FC000000000FF0000003FC000000000FF0000007FC000000 +001FF0000007FC000000001FE0000007F8000000001FE0000007F8000000001FE000000F +F8000000003FE000000FF8000000003FC000000FF0000000003FC000000FF0000000007F +C000001FF0000000007FC000001FF0000000007F8000001FE000000000FFC000003FF000 +0000FFFFFF803FFFFFE00000FFFFFF803FFFFFE00000FFFFFF803FFFFFE000004B447AC3 +48>72 D<00007FFFFFE00000FFFFFFE00000FFFFFFE0000000FFE0000000007F80000000 +00FF8000000000FF8000000000FF0000000000FF0000000000FF0000000001FF00000000 +01FE0000000001FE0000000001FE0000000003FE0000000003FC0000000003FC00000000 +03FC0000000007FC0000000007F80000000007F80000000007F8000000000FF800000000 +0FF0000000000FF0000000000FF0000000001FF0000000001FE0000000001FE000000000 +1FE0000000003FE0000000003FC0000000003FC0000000003FC0000000007FC000000000 +7F80000000007F80000000007F8000000000FF8000000000FF0000000000FF0000000000 +FF0000000001FF0000000001FE0000000001FE0000000001FE0000000003FE0000000003 +FC0000000003FC0000000003FC0000000007FC0000000007F80000000007F80000000007 +F8000000000FF8000000000FF0000000000FF0000000000FF0000000001FF0000000001F +E0000000001FE0000000003FE0000000003FE0000000003FC000000000FFE0000000FFFF +FFE00000FFFFFFE00000FFFFFFC000002B447BC326>I<0000FFFFFFF0000000FFFFFFF0 +000000FFFFFFE000000001FFC00000000000FF800000000001FF000000000001FF000000 +000001FE000000000001FE000000000001FE000000000003FE000000000003FC00000000 +0003FC000000000003FC000000000007FC000000000007F8000000000007F80000000000 +07F800000000000FF800000000000FF000000000000FF000000000000FF000000000001F +F000000000001FE000000000001FE000000000001FE000000000003FE000000000003FC0 +00000000003FC000000000003FC000000000007FC000000000007F8000000000007F8000 +000000007F800000000000FF800000000000FF000000000000FF000000000000FF000000 +000001FF000000000001FE000000000001FE000000000001FE000000000003FE00000010 +0003FC000000380003FC000000380003FC000000780007FC000000700007F80000007000 +07F8000000F00007F8000000E0000FF8000001E0000FF0000001E0000FF0000001C0000F +F0000003C0001FF0000007C0001FE000000780001FE000000F80001FE000000F80003FE0 +00001F00003FC000003F00003FC000007F00007FC00000FE00007FC00003FE00007F8000 +0FFE0000FF80007FFC00FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFF80035447AC33D +>76 D<0000FFFF80000000007FFFC00000FFFFC0000000007FFFC00000FFFFC000000000 +FFFFC0000001FFC000000001FFC000000000FFC000000001FF8000000001FFC000000003 +FF8000000001FFC000000003FF8000000001DFC0000000077F0000000001DFC00000000E +7F0000000001DFC00000000EFF0000000003CFE00000001CFF00000000038FE00000001C +FE00000000038FE000000038FE00000000038FE000000071FE00000000078FE000000071 +FE00000000070FE0000000E1FC00000000070FE0000000E1FC00000000070FE0000001C3 +FC000000000F0FE000000383FC000000000E0FE000000383F8000000000E0FE000000703 +F8000000000E07F000000707F8000000001E07F000000E07F8000000001C07F000000E07 +F0000000001C07F000001C07F0000000001C07F00000380FF0000000003C07F00000380F +F0000000003807F00000700FE0000000003807F00000700FE0000000003807F00000E01F +E0000000007807F00001C01FE0000000007003F80001C01FC0000000007003F80003801F +C0000000007003F80003803FC000000000F003F80007003FC000000000E003F8000E003F +8000000000E003F8000E003F8000000000E003F8001C007F8000000001E003F8001C007F +8000000001C003F80038007F0000000001C003F80070007F0000000001C003F8007000FF +0000000003C001FC00E000FF00000000038001FC00E000FE00000000038001FC01C000FE +00000000038001FC038001FE00000000078001FC038001FE00000000070001FC070001FC +00000000070001FC070001FC00000000070001FC0E0003FC000000000F0001FC1C0003FC +000000000E0001FC1C0003F8000000000E0000FE380003F8000000000E0000FE380007F8 +000000001E0000FE700007F8000000001C0000FEE00007F0000000001C0000FEE00007F0 +000000001C0000FFC0000FF0000000003C0000FFC0000FF000000000380000FF80000FE0 +00000000780000FF00000FE000000000780000FF00001FE000000000F80000FE00001FE0 +00000001FC00007E00001FC000000007FE00007C00003FE0000000FFFFF00078003FFFFF +C00000FFFFF00078003FFFFFC00000FFFFF00070003FFFFFC000005A447AC357>I<0000 +FFFF800001FFFFE00000FFFF800001FFFFE00000FFFFC00001FFFFE0000000FFC000000F +FC00000000FFC0000007F000000000FFE0000003E000000001FFE0000003C000000001DF +E0000003C000000001DFF00000038000000001DFF00000078000000003CFF00000078000 +0000038FF800000700000000038FF8000007000000000387F800000F000000000787FC00 +000F000000000703FC00000E000000000703FC00000E000000000703FE00001E00000000 +0F01FE00001E000000000E01FE00001C000000000E01FF00001C000000000E00FF00003C +000000001E00FF00003C000000001C00FF800038000000001C007F800038000000001C00 +7F800078000000003C007FC000780000000038003FC000700000000038003FC000700000 +000038003FE000F00000000078001FE000F00000000070001FE000E00000000070001FF0 +00E00000000070000FF001E000000000F0000FF801E000000000E0000FF801C000000000 +E00007F801C000000000E00007FC03C000000001E00007FC03C000000001C00003FC0380 +00000001C00003FE038000000001C00003FE078000000003C00001FE0780000000038000 +01FF070000000003800001FF070000000003800000FF0F0000000007800000FF8F000000 +0007000000FF8E00000000070000007F8E00000000070000007FDE000000000F0000007F +DE000000000E0000003FDC000000000E0000003FFC000000000E0000003FFC000000001E +0000001FFC000000001C0000001FF8000000001C0000001FF8000000001C0000000FF800 +0000003C0000000FF8000000003800000007F0000000007800000007F000000000780000 +0007F000000000F800000003F000000001FC00000003E000000007FE00000003E0000000 +FFFFF0000001E0000000FFFFF0000001E0000000FFFFF0000001C00000004B447AC348> +I<000000001FF8000000000001FFFF000000000007F01FC0000000001F8003F000000000 +7E0001F800000001F80000FC00000003E000007E0000000FC000003F0000001F8000001F +8000003F0000001FC000007E0000000FC00000FC0000000FE00001F800000007E00003F0 +00000007F00007F000000007F0000FE000000007F0001FC000000007F8003FC000000003 +F8003F8000000003F8007F8000000003F800FF0000000003F800FE0000000003FC01FE00 +00000003FC03FE0000000003FC03FC0000000003FC07FC0000000003FC07F80000000007 +FC0FF80000000007FC0FF80000000007FC0FF00000000007FC1FF00000000007FC1FF000 +00000007F81FE0000000000FF83FE0000000000FF83FE0000000000FF83FE0000000000F +F87FC0000000001FF07FC0000000001FF07FC0000000001FF07FC0000000003FF07FC000 +0000003FE0FF80000000003FE0FF80000000003FC0FF80000000007FC0FF80000000007F +C0FF8000000000FF80FF8000000000FF80FF8000000000FF00FF8000000001FF00FF8000 +000001FE00FF8000000003FC00FF8000000003FC007F8000000007F8007F800000000FF0 +007F800000000FF0007F800000001FE0003F800000001FC0003F800000003F80003FC000 +00007F00001FC0000000FF00001FC0000001FE00000FE0000001FC00000FE0000003F000 +0007F0000007E0000003F000001FC0000001F800003F80000000FC00007E000000007E00 +01F8000000003F8007F0000000000FE03F800000000003FFFE0000000000007FE0000000 +003E4872C54B>I<0000FFFFFFFFF0000000FFFFFFFFFE000000FFFFFFFFFF80000001FF +80007FE0000000FF00001FF0000001FF000007F8000001FF000003F8000001FE000003FC +000001FE000001FE000003FE000001FE000003FE000001FE000003FC000001FF000003FC +000001FF000007FC000001FF000007FC000001FF000007F8000001FF000007F8000001FF +00000FF8000001FF00000FF8000003FE00000FF0000003FE00000FF0000003FE00001FF0 +000003FC00001FF0000007FC00001FE0000007F800001FE000000FF800003FE000000FF0 +00003FE000001FE000003FC000001FC000003FC000003F8000007FC000007F0000007FC0 +0000FE0000007F800003FC0000007F80000FF0000000FF80007FC0000000FFFFFFFF0000 +0000FFFFFFF800000000FF00000000000001FF00000000000001FF00000000000001FE00 +000000000001FE00000000000003FE00000000000003FE00000000000003FC0000000000 +0003FC00000000000007FC00000000000007FC00000000000007F800000000000007F800 +00000000000FF80000000000000FF80000000000000FF00000000000000FF00000000000 +001FF00000000000001FF00000000000001FE00000000000001FE00000000000003FE000 +00000000003FE00000000000003FC00000000000003FC00000000000007FC00000000000 +007FC00000000000007F80000000000000FFC00000000000FFFFFF8000000000FFFFFF80 +00000000FFFFFF800000000040447AC342>I<0000FFFFFFFF80000000FFFFFFFFF80000 +00FFFFFFFFFE00000001FF8001FF80000000FF00003FC0000001FF00001FE0000001FF00 +000FF0000001FE000007F8000001FE000003F8000001FE000003FC000003FE000003FC00 +0003FC000003FE000003FC000003FE000003FC000003FE000007FC000003FE000007F800 +0003FE000007F8000003FE000007F8000003FE00000FF8000007FC00000FF0000007FC00 +000FF0000007FC00000FF000000FF800001FF000000FF800001FE000000FF000001FE000 +001FE000001FE000003FC000003FE000003F8000003FC000007F0000003FC00000FE0000 +003FC00003F80000007FC00007F00000007F80001FC00000007F8001FF000000007FFFFF +F800000000FFFFFFE000000000FF0003F800000000FF0000FE00000000FF00007F000000 +01FF00003F80000001FE00001FC0000001FE00001FC0000001FE00001FE0000003FE0000 +1FE0000003FC00000FE0000003FC00000FE0000003FC00001FE0000007FC00001FE00000 +07F800001FE0000007F800001FE0000007F800003FE000000FF800003FE000000FF00000 +3FE000000FF000003FE000000FF000007FC000001FF000007FC000001FE000007FC00000 +1FE000007FC000001FE000007FC000003FE000007FC00E003FC000007FC00E003FC00000 +7FC00E007FC000007F801E007FC000007F801C007F8000007F803C00FFC000007F8038FF +FFFF80003FC070FFFFFF80001FC0F0FFFFFF80000FE1E0000000000003FF800000000000 +00FE003F467AC347>82 D<00000003FE000C0000000FFF801C0000007FFFE03C000000FE +03F83C000003F0007C7C000007E0003EF800000FC0001FF800001F80000FF800003F0000 +0FF800007E000007F00000FC000007F00000FC000003F00001F8000003F00001F8000003 +E00003F0000003E00003F0000003E00007F0000003E00007E0000003C00007E0000003C0 +0007E0000003C0000FE0000003C0000FE000000380000FE000000380000FF00000038000 +0FF000000000000FF000000000000FF800000000000FFC000000000007FE000000000007 +FFE00000000007FFFC0000000003FFFF8000000001FFFFF000000001FFFFFC00000000FF +FFFF000000003FFFFF800000000FFFFFC000000003FFFFC0000000003FFFE00000000007 +FFE00000000000FFF000000000003FF000000000001FF000000000000FF000000000000F +F0000000000007F0000000000007F0000000000007F0000700000007F0000700000003F0 +000700000007F0000700000007F0000F00000007E0000F00000007E0000E00000007E000 +0E0000000FE0001E0000000FC0001E0000000FC0001F0000001F80001F0000001F80003F +0000003F00003F8000003E00003F8000007E00003FC00000FC00007FC00001F800007FE0 +0003F000007CF00007E00000787C001F800000F03F807F000000F01FFFFC000000E007FF +F0000000C0007F80000000364879C537>I<01FFFFFFFFFFFFF803FFFFFFFFFFFFF803FF +FFFFFFFFFFF803FF0007FC001FF007F80007F80007F007E0000FF80003F007C0000FF800 +01F00F80000FF00001F00F00000FF00000F00F00000FF00000F01E00001FF00000E01E00 +001FE00000E01C00001FE00000E03C00001FE00000E03800003FE00000E03800003FC000 +01E07800003FC00001C07000003FC00001C0F000007FC00001C0E000007F800001C0E000 +007F800001C0E000007F800001C0000000FF80000000000000FF00000000000000FF0000 +0000000000FF00000000000001FF00000000000001FE00000000000001FE000000000000 +01FE00000000000003FE00000000000003FC00000000000003FC00000000000003FC0000 +0000000007FC00000000000007F800000000000007F800000000000007F8000000000000 +0FF80000000000000FF00000000000000FF00000000000000FF00000000000001FF00000 +000000001FE00000000000001FE00000000000001FE00000000000003FE0000000000000 +3FC00000000000003FC00000000000003FC00000000000007FC00000000000007F800000 +000000007F800000000000007F80000000000000FF80000000000000FF00000000000000 +FF00000000000000FF00000000000001FF00000000000001FE00000000000001FE000000 +00000003FE00000000000003FE00000000000007FE0000000000000FFF00000000007FFF +FFFFC00000007FFFFFFFC00000007FFFFFFF800000003D446FC346>I86 D<00001F80000000007FE000000001F0 +7070000007C039F800000F801DF800001F001FF800003E000FF000007E000FF00000FC00 +0FF00001F80007F00001F80007E00003F00007E00007F00007E00007E0000FE0000FE000 +0FC0000FE0000FC0001FC0000FC0001FC0001FC0003FC0001F80003F80001F80003F8000 +1F80003F80003F80007F80003F00007F00003F00007F00003F00007F00007F00007F0000 +7E0000FE00007E0000FE00007E0000FE0000FE0380FE0000FC0780FE0000FC0700FE0000 +FC07007E0001FC07007E0001FC0F007E0003F80E007E0007F80E003E000FF81E003E000F +F81C001F001CF81C001F0038F838000F80F078780007C3E07C700001FF801FE000007E00 +078000292D76AB32>97 D<000FE0000007FFE0000007FFE0000007FFE00000001FC00000 +000FC00000001FC00000001FC00000001F800000001F800000001F800000003F80000000 +3F000000003F000000003F000000007F000000007E000000007E000000007E00000000FE +00000000FC00000000FC00000000FC00000001FC00000001F800000001F81F800001F87F +E00003F9E0F80003F3C07C0003F7003E0003FE003E0007FC001F0007F8001F0007F8001F +0007F0001F800FE0001F800FE0001F800FC0001F800FC0001F801FC0001F801F80001F80 +1F80001F801F80003F803F80003F803F00003F803F00003F803F00007F807F00007F007E +00007F007E00007F007E0000FF007E0000FE00FC0000FE00FC0000FE00FC0001FC00FC00 +01FC00FC0003F800FC0003F8007C0003F0007C0007E0007C000FE0007C000FC0007C001F +80003C003F00003E007E00001E00FC00000F01F800000783E0000003FF80000000FE0000 +00214676C42D>I<00000FE00000007FF8000001F81E000007E00F00000F800780001F00 +0380007E0003C000FC001FC001FC003FC001F8003FC003F0007F8007F0007F800FE0007F +800FE0003E001FC00000001FC00000003F800000003F800000007F800000007F00000000 +7F000000007F00000000FF00000000FE00000000FE00000000FE00000000FE00000000FC +00000000FC00000000FC00000000FC00000000FC00000000FC00000180FC000003C0FC00 +000780FC000007807C00000F007E00001E003E00007C003E0000F0001F0003E0000F800F +800007C07E000001FFF80000007FC00000222D75AB2D>I<0000000007F000000003FFF0 +00000003FFF000000003FFF0000000000FE00000000007E0000000000FE0000000000FE0 +000000000FC0000000000FC0000000001FC0000000001FC0000000001F80000000001F80 +000000003F80000000003F80000000003F00000000003F00000000007F00000000007F00 +000000007E00000000007E0000000000FE0000000000FE0000000000FC0000001F80FC00 +00007FE1FC000001F071FC000007C039F800000F801DF800001F001FF800003E000FF800 +007E000FF00000FC000FF00001F80007F00001F80007F00003F00007E00007F00007E000 +07E0000FE0000FE0000FE0000FE0000FC0001FC0000FC0001FC0001FC0003FC0001FC000 +3F80001F80003F80001F80003F80003F80007F80003F80007F00003F00007F00003F0000 +7F00007F00007F00007F0000FE00007E0000FE00007E0000FE0000FE0380FE0000FE0780 +FE0000FC0700FE0000FC07007E0001FC07007E0001FC0F007E0003F80E007E0007F80E00 +3E000FF81E003E000FF81C001F001CF81C001F0038F838000F80F078780007C3E07C7000 +01FF801FE000007E000780002C4676C432>I<00000FE00000007FF8000001F83E000007 +C00F00001F800780003F000780007E0007C000FC0003C001F80003C003F00007C007F000 +078007E00007800FE0000F801FC0000F001FC0001F003F80003E003F8000FC003F8007F0 +007F80FFC0007FFFFE00007FFFC000007F00000000FF00000000FE00000000FE00000000 +FE00000000FE00000000FE00000000FC00000000FC00000000FC00000000FC00000000FC +00000180FC000003C07C000007807C000007807E00000F003E00001E003E00007C001F00 +00F0000F0003E00007800F800003C07E000001FFF80000003FC00000222D75AB2D>I<00 +0000000F80000000003FE000000000F87000000001F03800000003E0F800000007E1FC00 +000007C3FC0000000FC7FC0000000FC7FC0000000F87F80000001F83F00000001F81E000 +00001F80000000003F80000000003F00000000003F00000000003F00000000003F000000 +00007F00000000007E00000000007E00000000007E00000000007E0000000000FE000000 +0000FC0000000000FC0000000000FC00000001FFFFFE000001FFFFFE000001FFFFFE0000 +0001F80000000001F80000000001F80000000003F80000000003F00000000003F0000000 +0003F00000000003F00000000007F00000000007E00000000007E00000000007E0000000 +0007E0000000000FE0000000000FC0000000000FC0000000000FC0000000000FC0000000 +001FC0000000001F80000000001F80000000001F80000000001F80000000003F80000000 +003F00000000003F00000000003F00000000003F00000000003F00000000007F00000000 +007E00000000007E00000000007E0000000000FE0000000000FC0000000000FC00000000 +00FC0000000000FC0000000001FC0000000001F80000000001F80000000001F800000000 +01F80000000003F00000000003F00000000003F00000000003E00000000007E00000001C +07E00000007F07C0000000FF07C0000000FF0F80000000FF0F80000000FF0F00000000FE +1F00000000F81E00000000F03C000000007878000000001FF00000000007C0000000002E +5A83C51E>I<000000FC0000000003FF000000000F83838000003E01CFC000007C00EFC0 +0000F800FFC00001F0007FC00003F0007F800007E0003F80000FC0003F80001FC0003F80 +001F80003F00003F80003F00003F00007F00007F00007F00007F00007E0000FE00007E00 +00FE0000FE0001FE0000FE0001FC0000FC0001FC0000FC0001FC0001FC0003FC0001FC00 +03F80001F80003F80001F80003F80003F80003F80003F80003F00003F00003F00003F000 +03F00007F00003F00007F00003F00007E00003F00007E00003F0000FE00003F0001FE000 +03F0001FC00001F0003FC00001F0007FC00000F800FFC00000F801DF8000007C039F8000 +003E0F3F8000000FFC3F80000003F03F00000000003F00000000007F00000000007F0000 +0000007E00000000007E0000000000FE0000000000FE0000000000FC0000000000FC0000 +1C0001F800007F0001F80000FF0003F00000FF0007F00000FF000FE00000FE000FC00000 +FE003F000000F8007E0000007C01F80000001FFFE000000003FF000000002A407BAB2D> +I<0000FE000000007FFE000000007FFE000000007FFE0000000001FC0000000000FC0000 +000001FC0000000001FC0000000001F80000000001F80000000003F80000000003F80000 +000003F00000000003F00000000007F00000000007F00000000007E00000000007E00000 +00000FE0000000000FE0000000000FC0000000000FC0000000001FC0000000001FC00000 +00001F80000000001F807F0000003F83FFC000003F8F81F000003F1E00F800003F3800FC +00007F70007C00007FE0007C00007FC0007E00007FC0007E0000FF80007E0000FF00007E +0000FF00007E0000FE00007E0001FC0000FE0001FC0000FC0001F80000FC0001F80000FC +0003F80001FC0003F80001F80003F00001F80003F00001F80007F00003F80007F00003F0 +0007E00003F00007E00007F0000FE00007E0000FE00007E0000FC0000FE0000FC0000FC0 +001FC0000FC0781FC0001FC0701F80001F80701F80001F80703F80003F80F03F80003F00 +E03F00003F00E03F00003F01E07F00003E01C07F00003E03C07E00003E03807E00003E07 +00FE00001E0F00FE00001F1E00FC00000FF80038000003E0002D467AC432>I<00003C00 +007E0000FE0001FE0001FE0001FE0000FC00007000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000007C0001FF0003C78007 +03C00F03E00E03E01C03E01C07E03807E03807E07807E0700FE0700FC0701FC0F01F80E0 +1F80003F80003F00003F00007F00007E00007E0000FE0000FC0001FC0001F80001F80003 +F80003F00003F01E07F01C07E01C07E01C0FE03C0FC0380FC0380FC0780F80700F80F00F +80E00F81C00783C007C78003FE0000F800174378C11E>I<00000000F000000003F80000 +0003F800000007F800000007F800000007F800000007F000000001C00000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000001F000000007FC00 +00001E1E000000380F000000700F800000E00F800001E00F800001C00F800003800F8000 +07801F800007001F800007001F80000E001F80000E003F80001E003F80001C003F000000 +003F000000007F000000007F000000007E000000007E00000000FE00000000FE00000000 +FC00000000FC00000001FC00000001FC00000001F800000001F800000003F800000003F8 +00000003F000000003F000000007F000000007F000000007E000000007E00000000FE000 +00000FE00000000FC00000000FC00000001FC00000001FC00000001F800000001F800000 +003F800000003F800000003F000000003F000000007F000000007E000000007E00000000 +FE00001C00FC00007F00FC0000FF01F80000FF03F00000FF03F00000FE07E00000FE0FC0 +0000F81F000000707E0000003FF80000000FC0000000255683C11E>I<0000FE00000000 +7FFE000000007FFE000000007FFE0000000001FC0000000000FC0000000001FC00000000 +01FC0000000001F80000000001F80000000003F80000000003F80000000003F000000000 +03F00000000007F00000000007F00000000007E00000000007E0000000000FE000000000 +0FE0000000000FC0000000000FC0000000001FC0000000001FC0000000001F8000000000 +1F80007E00003F8001FF00003F800783C0003F000E07C0003F003C1FC0007F00701FC000 +7F00603FC0007E00E03FC0007E01C03FC000FE03803F8000FE07000E0000FC0E00000000 +FC1C00000001FC3800000001FC7000000001F8E000000001F9C000000003FB8000000003 +FF0000000003FF0000000003FFF000000007F3FC00000007F07F00000007E01FC0000007 +E00FE000000FE007E000000FE007F000000FC003F000000FC003F000001FC003F00F001F +C003F00F001F8003F00E001F8003F00E003F8003F01E003F8003F01C003F0003E01C003F +0003E01C007F0003E038007F0003E038007E0003E078007E0003E07000FE0001E0E000FE +0001F1E000FC00007F80003800001F00002A467AC42D>I<0003F801FFF801FFF801FFF8 +0007F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0001FC0001FC0 +001F80001F80003F80003F80003F00003F00007F00007F00007E00007E0000FE0000FE00 +00FC0000FC0001FC0001FC0001F80001F80003F80003F80003F00003F00007F00007F000 +07E00007E0000FE0000FE0000FC0000FC0001FC0001FC0001F80001F80003F80003F8000 +3F00003F00007F01C07F03C07E03807E03807E0780FE0700FC0700FC0700FC0F00FC0E00 +7C1E007C1C003C3C003E78001FF00007C000154678C419>I<01F0000FE00007F0000003 +FC007FF8003FFC0000071E01F03E00F81F00000E1F03C01F01E00F80001E0F87001F8380 +0FC0001C0F8E000F870007C0003C0F9C000F8E0007C000380FB8000FDC0007E000380FF8 +000FFC0007E000781FF0000FF80007E000701FE0000FF00007E000701FE0000FF00007E0 +00701FC0000FE00007E000F01F80001FC0000FE000E03F80001FC0000FC000E03F00001F +80000FC000003F00001F80000FC000003F00003F80001FC000007F00003F80001F800000 +7E00003F00001F8000007E00003F00001F8000007E00007F00003F800000FE00007F0000 +3F000000FC00007E00003F000000FC00007E00007F000000FC0000FE00007E000001FC00 +00FE00007E000001F80000FC0000FE000001F80000FC0000FC000001F80001FC0000FC07 +8003F80001FC0001FC070003F00001F80001F8070003F00001F80001F8070003F00003F8 +0003F80F0007F00003F80003F00E0007E00003F00003F00E0007E00003F00003F01E0007 +E00007F00003E01C000FE00007F00003E03C000FC00007E00003E038000FC00007E00003 +E070000FC0000FE00001E0F0001FC0000FE00001F1E0001F80000FC00000FF8000070000 +038000003E0000492D78AB50>I<01F0000FE00003FC007FF800071E01F03E000E0F03C0 +1F001E0F87001F801C0F8E000F803C0F9C000F80380FB8000FC0380FF8000FC0781FF000 +0FC0701FE0000FC0701FE0000FC0701FC0000FC0F01F80001FC0E03F80001F80E03F0000 +1F80003F00001F80003F00003F80007F00003F00007E00003F00007E00003F00007E0000 +7F0000FE00007E0000FC00007E0000FC0000FE0000FC0000FC0001FC0000FC0001F80001 +FC0001F80001F80001F80001F80F03F80003F80E03F00003F00E03F00003F00E03F00007 +F01E07F00007E01C07E00007E01C07E00007E03C07E00007C0380FE00007C0780FC00007 +C0700FC00007C0E00FC00003C1E01FC00003E3C01F800001FF00070000007C00302D78AB +37>I<00000FE00000007FFC000001F83E000007E00F80000F8007C0001F0007C0007E00 +03E000FC0003F000FC0003F001F80001F003F00001F807F00001F80FE00001F80FE00001 +F81FC00001F81FC00001F83F800001F83F800003F87F800003F87F000003F87F000003F8 +7F000007F8FF000007F0FE000007F0FE000007F0FE00000FF0FE00000FE0FC00000FE0FC +00001FC0FC00001FC0FC00001F80FC00003F80FC00003F00FC00007F00FC00007E00FC00 +00FC007C0001F8007E0003F0003E0003E0003E0007C0001F001F80000F803E000007C0FC +000001FFF00000003F800000252D75AB32>I<0003E0007E000007F801FF80000E3C0783 +E0001C1E0F01F0003C1F1C00F800381F3800F800781F70007C00701FE0007C00701FE000 +7C00703FC0007E00E03F80007E00E03F80007E00E03F00007E01E07F00007E01C07F0000 +7E01C07E00007E00007E00007E0000FE0000FE0000FE0000FE0000FC0000FE0000FC0000 +FE0001FC0001FE0001FC0001FC0001F80001FC0001F80001FC0003F80003FC0003F80003 +F80003F00003F80003F00003F80007F00007F00007F00007F00007E0000FE00007E0000F +E0000FE0000FC0000FE0001F80000FE0003F80000FE0003F00001FF0007E00001FF000FC +00001FF001F800001FB803F000003F9C07E000003F9E0F8000003F07FE0000003F01F800 +00007F00000000007F00000000007E00000000007E0000000000FE0000000000FE000000 +0000FC0000000000FC0000000001FC0000000001FC0000000001F80000000001F8000000 +0003F80000000003F80000000007F800000000FFFFF0000000FFFFF0000000FFFFE00000 +002F3F7FAB32>I<00001F800C00007FE01C0001F0703C0007C03878000F801CF8001F00 +1DF8003E000FF8007E000FF000FC000FF001F80007F001F80007F003F00007E007F00007 +E007E00007E00FE0000FE00FE0000FC01FC0000FC01FC0000FC03FC0001FC03F80001F80 +3F80001F803F80001F807F80003F807F00003F007F00003F007F00003F007F00007F00FE +00007E00FE00007E00FE00007E00FE0000FE00FE0000FC00FE0000FC007E0001FC007E00 +01FC007E0003F8007E0007F8003E000FF8003E000FF8001F001FF0001F003BF0000F80F3 +F00007C3E7F00001FF87E000007E07E000000007E00000000FE00000000FC00000000FC0 +0000000FC00000001FC00000001F800000001F800000001F800000003F800000003F0000 +00003F000000007F000000007F00000000FF0000007FFFFE00007FFFFE00007FFFFC0026 +3F76AB2D>I<01F0003F8003FC01FFF0071E03C0F80E0F0F007C1E0F9E01FC1C0F9C01FC +1C0FB803FC380FF003FC380FF003FC381FE003F8781FE000E0701FC00000701FC00000F0 +1F800000E03F800000E03F000000003F000000003F000000007F000000007E000000007E +000000007E00000000FE00000000FC00000000FC00000000FC00000001FC00000001F800 +000001F800000001F800000003F800000003F000000003F000000003F000000007F00000 +0007E000000007E000000007E00000000FE00000000FC00000000FC00000000FC0000000 +1FC00000001F800000000700000000262D78AB29>I<00000FE00000007FF8000001F01E +000003C00F000007800780000F000380001E0003C0001E0007C0003C001FC0003C001FC0 +007C003F800078003F80007C003F80007C000E00007C000000007E000000007F00000000 +7FF00000007FFF0000003FFFC000001FFFF000000FFFF8000007FFFC000000FFFC000000 +0FFE00000001FE00000000FE000000007F000000003F000E00003F003F00001E007F8000 +1E007F80001E007F80003E00FF00003C00FF00003C00FC000078007000007800700000F0 +00780001E0003C0003C0001E000F80000F803E000003FFF80000007FC00000222D7AAB28 +>I<000070000001F8000001F8000001F8000003F8000003F0000003F0000003F0000007 +F0000007E0000007E0000007E000000FE000000FC000000FC000000FC000001FC000001F +8000001F80007FFFFFE0FFFFFFE0FFFFFFC0003F0000003F0000007F0000007E0000007E +0000007E000000FE000000FC000000FC000000FC000001FC000001F8000001F8000001F8 +000003F8000003F0000003F0000003F0000007F0000007E0000007E0000007E000000FE0 +00000FC000000FC000000FC007801FC007001F8007001F800F001F800E003F801E003F00 +1C003F003C003F0038003F0070001F00F0001F01E0000F03C0000F87800007FE000001F8 +00001B3F78BD20>I<007C0000000001FF0000070003C780001F800703C0001F800F03E0 +001F800E03E0003F801C03E0003F801C07E0003F003807E0003F003807E0007F007807E0 +007F00700FE0007E00700FC0007E00701FC000FE00F01F8000FE00E01F8000FC00003F80 +00FC00003F0001FC00003F0001FC00007F0001F800007E0001F800007E0003F80000FE00 +03F80000FC0003F00000FC0003F00000FC0007F00001FC0007F00001F80007E00001F800 +07E00001F8000FE03803F8000FE07803F0000FC07003F0000FC07003F0000FC07003F000 +1FC0F003F0001F80E003F0003F80E001F0003F81E001F0007F81C001F800EF83C000F801 +EF8380007C03C78780003E0F07C700001FFE01FE000003F00078002D2D78AB34>I<007C +00003801FF0000FC03C78001FE0703C001FE0F03E001FE0E03E001FE1C03E000FE1C07E0 +007E3807E0007E3807E0003E7807E0003E700FE0001E700FC0001E701FC0001EF01F8000 +1CE01F80001C003F80001C003F00003C003F000038007F000038007E000038007E000078 +00FE00007000FC00007000FC00007000FC0000F001FC0000E001F80000E001F80001E001 +F80001C001F80001C003F000038003F000038003F000070003F000070003F0000E0001F0 +000E0001F0001C0001F800380000F800780000FC00F000007C01E000003F078000000FFF +00000003F80000272D78AB2D>I<007C00000000038001FF00000E000FC003C780003F00 +1FE00703C0003F001FE00E03E0003F001FE00E03E0007F001FE01C03E0007E000FE01C07 +E0007E0007E03807E0007E0007E03807E000FE0003E07807E000FC0003E0700FE000FC00 +03E0700FC000FC0001E0701FC001FC0001E0F01F8001F80001C0E01F8001F80001C0003F +8001F80001C0003F0003F80003C0003F0003F0000380007F0003F0000380007E0003F000 +0380007E0007F000078000FE0007F000070000FC0007E000070000FC0007E000070000FC +000FE0000F0001FC000FE0000E0001F8000FC0000E0001F8000FC0000E0001F8000FC000 +1C0001F8000FC0001C0003F0001F80001C0003F0001F8000380003F0001F8000380003F0 +001F8000700001F0001F8000700001F0003F8000E00001F8003F8000E00001F8007FC001 +C00000F800F7C003C00000FC00E7E0078000007E01C3E00F0000001F0781F81E0000000F +FF007FF800000001FC000FE000003B2D78AB41>I<0000F8003F000007FE00FFE0000F0F +83C0F0001C07C780F8003803CF03F8007003EE03F800E003FC07F801E003FC07F801C003 +F807F803C003F807F0038003F801C0078003F00000070003F00000070007F000000F0007 +E000000E0007E00000000007E0000000000FE0000000000FC0000000000FC0000000000F +C0000000001FC0000000001F80000000001F80000000001F80000000003F80000000003F +00000000003F00000000003F00000000007F0003C000007F00038000007E00038000007E +0003800000FE0007001E00FE0007003F00FE000F007F81FC000E007F81FE001C00FF83FE +003C00FF03BE007800FE079E00F0007C0F1F01E0003C1E0F83C0001FF803FF000007E000 +FC00002D2D7CAB2D>I<007C0000000001FF0000070003C780001F800703C0001F800F03 +E0001F800E03E0003F801C03E0003F001C07E0003F003807E0003F003807E0007F007807 +E0007E00700FE0007E00700FC0007E00701FC000FE00F01F8000FC00E01F8000FC00003F +8000FC00003F0001FC00003F0001F800007F0001F800007E0001F800007E0003F80000FE +0003F00000FC0003F00000FC0003F00000FC0007F00001FC0007E00001F80007E00001F8 +0007E00001F8000FE00003F8000FC00003F0000FC00003F0000FC00003F0001FC00003F0 +001F800003F0001F800003F0003F800001F0003F800001F0007F000001F800FF000000F8 +01FF0000007C03FF0000003E0F7E0000001FFE7E00000003F07E0000000000FE00000000 +00FC0000000000FC0000000001FC0000000001F800001F0001F800007F8003F000007F80 +03F000007F8007E00000FF000FC00000FF000F800000FE001F800000F0003F0000007000 +7E0000007800F80000003801F00000001E07C00000000FFF0000000001FC000000002940 +78AB2F>I E /FE 29 122 df45 D<000000003800000000000000007C00000000000000007C00000000 +000000007C0000000000000000FE0000000000000000FE0000000000000000FE00000000 +00000001FF0000000000000001FF0000000000000003FF8000000000000003FF80000000 +00000003FF8000000000000007FFC0000000000000077FC0000000000000077FC0000000 +0000000E7FE00000000000000E3FE00000000000000E3FE00000000000001C1FF0000000 +0000001C1FF00000000000003C1FF8000000000000380FF8000000000000380FF8000000 +000000780FFC0000000000007007FC0000000000007007FC000000000000E007FE000000 +000000E003FE000000000000E003FE000000000001C001FF000000000001C001FF000000 +000003C001FF8000000000038000FF8000000000038000FF8000000000078000FFC00000 +00000700007FC0000000000700007FC0000000000E00007FE0000000000E00003FE00000 +00000E00003FE0000000001C00001FF0000000001C00001FF0000000003C00001FF80000 +00003800000FF8000000003800000FF8000000007FFFFFFFFC000000007FFFFFFFFC0000 +00007FFFFFFFFC00000000E0000007FE00000000E0000003FE00000001E0000003FF0000 +0001C0000001FF00000001C0000001FF00000003C0000001FF8000000380000000FF8000 +000380000000FF8000000700000000FFC0000007000000007FC0000007000000007FC000 +000E000000003FE000000E000000003FE000001E000000003FF000001E000000001FF000 +003E000000001FF000003E000000001FF800007E000000001FF80001FF000000001FFC00 +07FFC00000007FFF00FFFFFC00001FFFFFFEFFFFFC00001FFFFFFEFFFFFC00001FFFFFFE +47477CC651>65 DI<00000003FF00000C0000003FFFF0001C00 +0001FFFFFC003C00000FFE007F003C00001FF0000FC07C00007F800003E0FC0001FF0000 +00F0FC0003FC00000079FC0007F80000003FFC001FF00000001FFC003FE00000000FFC00 +7FC000000007FC007F8000000003FC00FF0000000003FC01FE0000000001FC03FE000000 +0001FC03FC0000000000FC07FC0000000000FC0FF800000000007C0FF800000000007C1F +F000000000003C1FF000000000003C3FF000000000003C3FF000000000003C3FE0000000 +00001C7FE000000000001C7FE000000000001C7FE000000000001C7FE00000000000007F +C0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000 +000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FF +C0000000000000FFC0000000000000FFC0000000000000FFC00000000000007FC0000000 +0000007FE00000000000007FE00000000000007FE000000000001C7FE000000000001C3F +E000000000001C3FF000000000001C3FF000000000001C1FF000000000003C1FF0000000 +0000380FF80000000000380FF800000000003807FC00000000007803FC00000000007003 +FE0000000000F001FE0000000000E000FF0000000001E0007F8000000001C0007FC00000 +0003C0003FE00000000780001FF00000000F000007F80000001E000003FC0000003C0000 +01FF000000780000007F800001F00000001FF00007C00000000FFE007F8000000001FFFF +FE00000000003FFFF0000000000003FF8000003E4879C54E>I73 D77 D80 +D82 D<0001FF8000C0000FFF +F001C0003FFFFC03C000FF007F03C001F8000F87C003F00003E7C007C00001FFC00F8000 +00FFC01F8000007FC01F0000003FC03E0000001FC03E0000001FC07E0000000FC07C0000 +000FC07C00000007C0FC00000007C0FC00000003C0FC00000003C0FC00000003C0FE0000 +0003C0FE00000001C0FF00000001C0FF00000001C0FF80000001C07FC0000000007FE000 +0000007FF0000000003FFC000000003FFFC00000001FFFFC0000000FFFFFC000000FFFFF +FC000007FFFFFF800003FFFFFFE00000FFFFFFF800007FFFFFFC00001FFFFFFE000003FF +FFFF0000003FFFFF80000003FFFFC00000003FFFC000000003FFE000000000FFE0000000 +007FF0000000001FF0000000001FF0000000000FF80000000007F8E000000007F8E00000 +0003F8E000000003F8E000000001F8E000000001F8E000000001F8F000000001F8F00000 +0001F8F000000001F0F800000001F0F800000003F0FC00000003F0FC00000003E0FE0000 +0007E0FF00000007C0FF8000000F80FFC000001F80FFE000003F00F8F800007E00F87F00 +00FC00F01FE007F000F007FFFFE000E001FFFF0000C0001FFC00002D4879C53D>I<0000 +0070000000000000F8000000000000F8000000000000F8000000000001FC000000000001 +FC000000000003FE000000000003FE000000000003FE000000000007FF0000000000077F +0000000000077F00000000000E3F80000000000E3F80000000001E3FC0000000001C1FC0 +000000001C1FC000000000380FE000000000380FE000000000380FE0000000007007F000 +0000007007F000000000F007F800000000E003F800000000E003F800000001C001FC0000 +0001C001FC00000001C001FC000000038000FE000000038000FE000000078000FF000000 +0700007F0000000700007F0000000FFFFFFF8000000FFFFFFF8000001FFFFFFFC000001C +00001FC000001C00001FC000003C00001FE000003800000FE000003800000FE000007000 +0007F0000070000007F00000F0000007F80000E0000003F80001E0000003F80001E00000 +03FC0003F0000001FC0007F0000003FE001FF8000007FF00FFFF00007FFFF8FFFF00007F +FFF8FFFF00007FFFF835357CB43D>97 DI<000001FF00018000001FFFF003800000FFFFFC07800003FF007E0F800007 +F8000F9F80001FE00003DF80003FC00001FF8000FF000000FF8001FE0000007F8003FC00 +00003F8003FC0000003F8007F80000001F800FF00000000F801FF00000000F801FE00000 +0007803FE000000007803FC000000007803FC000000007807FC000000003807FC0000000 +03807FC00000000380FF800000000000FF800000000000FF800000000000FF8000000000 +00FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000 +FF800000000000FF8000000000007FC000000000007FC000000003807FC000000003803F +C000000003803FC000000003803FE000000003801FE000000007801FF000000007000FF0 +0000000F0007F80000000E0003FC0000001E0003FC0000001C0001FE0000003C0000FF00 +00007800003FC00000F000001FE00003E0000007F80007C0000003FF807F00000000FFFF +FC000000001FFFF00000000001FF80000031357BB33B>IIII104 DI<003FFFFE003FFFFE +003FFFFE00007FE000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 +00001FC07E001FC0FF001FC0FF001FC0FF001FC0FF001FC0FF003F80FE003F8070007F00 +38007E001E00FC000F83F80003FFE00000FF00001F347BB22A>IIIII<000007FF00000000003FFFE000000001FE03FC00000007F0007F000000 +0FC0001F8000003F80000FE000007F000007F00000FE000003F80001FC000001FC0003F8 +000000FE0007F00000007F0007F00000007F000FE00000003F801FE00000003FC01FE000 +00003FC03FC00000001FE03FC00000001FE03FC00000001FE07FC00000001FF07F800000 +000FF07F800000000FF07F800000000FF0FF800000000FF8FF800000000FF8FF80000000 +0FF8FF800000000FF8FF800000000FF8FF800000000FF8FF800000000FF8FF800000000F +F8FF800000000FF8FF800000000FF87F800000000FF07FC00000001FF07FC00000001FF0 +3FC00000001FE03FC00000001FE03FE00000003FE01FE00000003FC01FE00000003FC00F +F00000007F8007F00000007F0007F8000000FF0003F8000000FE0001FC000001FC0000FE +000003F800007F000007F000003F80000FE000000FC0001F80000007F0007F00000001FE +03FC000000003FFFE00000000007FF00000035357BB33F>II114 D<000FF00180007FFE03 +8001FFFF878007F00FEF800FC001FF801F0000FF803E00003F803E00001F807C00001F80 +7C00000F80F800000F80F800000780F800000780F800000780FC00000380FC00000380FE +00000380FF000000007F800000007FC00000003FF80000003FFF8000001FFFFC00000FFF +FFC00007FFFFF00003FFFFF80000FFFFFE00001FFFFF000003FFFF8000001FFFC0000001 +FFC00000003FE00000001FE00000000FE000000007F000000003F0E0000003F0E0000001 +F0E0000001F0E0000001F0F0000001F0F0000001F0F0000001E0F8000003E0F8000003E0 +FC000007C0FE00000F80FF80001F00FFE0003E00FBFE00FC00F0FFFFF800E01FFFE000C0 +03FF000024357BB32E>I<7FFFFFFFFFFFC07FFFFFFFFFFFC07FFFFFFFFFFFC07F8007FC +003FC07E0003F8000FC07C0003F80007C0780003F80003C0700003F80001C0700003F800 +01C0F00003F80001E0F00003F80001E0E00003F80000E0E00003F80000E0E00003F80000 +E0E00003F80000E0E00003F80000E0E00003F80000E0000003F8000000000003F8000000 +000003F8000000000003F8000000000003F8000000000003F8000000000003F800000000 +0003F8000000000003F8000000000003F8000000000003F8000000000003F80000000000 +03F8000000000003F8000000000003F8000000000003F8000000000003F8000000000003 +F8000000000003F8000000000003F8000000000003F8000000000003F8000000000003F8 +000000000003F8000000000003F8000000000003F8000000000003F8000000000003F800 +0000000007FC00000000000FFE000000000FFFFFFE0000000FFFFFFE0000000FFFFFFE00 +0033327CB13B>II121 D E /FF 61 122 df<0000000FFF0000000001FFFFC00000000FFFFFF00000007F +FFFFF8000001FFF803FC000003FFC000FE00000FFF0003FE00001FFE0007FF00003FFC00 +0FFF00003FF8000FFF00007FF0000FFF00007FF0001FFF8000FFF0000FFF0000FFE0000F +FF0000FFE0000FFF0000FFE0000FFF0000FFE00007FE0000FFE00001F80000FFE0000000 +0000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000000 +00FFE00000000000FFE001FFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FF +FFFFFFFFFF80FFFFFFFFFFFF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FF +E00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE0 +0003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE000 +03FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003 +FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF +8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF80 +00FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF807F +FFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF3846 +7EC53E>12 D<07C0001FF0003FF8007FFC00FFFE00FFFF00FFFF00FFFF00FFFF80FFFF80 +FFFF807FFF803FFF801FF78007C780000780000F80000F80000F00000F00001F00001E00 +003E00003E00007C0000FC0000F80001F00003E00007E0000FC0001F80001F00000C0000 +112278C41F>39 D<000001E0000003E000000FC000001F8000003F0000007E000000FC00 +0001FC000003F8000007F0000007E000000FE000001FC000003FC000003F8000007F8000 +00FF000000FF000001FE000001FE000003FC000003FC000007FC000007F8000007F80000 +0FF800000FF000000FF000001FF000001FF000001FE000003FE000003FE000003FE00000 +3FE000007FC000007FC000007FC000007FC000007FC000007FC00000FFC00000FFC00000 +FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000 +FF800000FF800000FF800000FF800000FF800000FFC00000FFC000007FC000007FC00000 +7FC000007FC000007FC000007FC000003FE000003FE000003FE000003FE000001FE00000 +1FF000001FF000000FF000000FF000000FF8000007F8000007F8000007FC000003FC0000 +03FC000001FE000001FE000000FF000000FF0000007F8000003F8000003FC000001FC000 +000FE0000007E0000007F0000003F8000001FC000000FC0000007E0000003F0000001F80 +00000FC0000003E0000001E01B6476CA2C>II +45 D<07C01FF03FF87FFCFFFEFFFEFFFEFFFEFFFEFFFEFFFE7FFC3FF81FF007C00F0F78 +8E1F>I<00003FF800000001FFFF0000000FFFFFE000003FFFFFF800007FF01FFC0000FF +C007FE0001FF0001FF0003FE0000FF8007FE0000FFC007FC00007FC00FFC00007FE00FF8 +00003FE01FF800003FF01FF800003FF03FF800003FF83FF800003FF83FF000001FF87FF0 +00001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFCFFF0 +00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 +00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 +00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 +00001FFEFFF000001FFEFFF000001FFE7FF000001FFC7FF000001FFC7FF000001FFC7FF0 +00001FFC7FF000001FFC3FF800003FF83FF800003FF83FF800003FF81FF800003FF01FF8 +00003FF00FF800003FE00FFC00007FE007FC00007FC007FE0000FFC003FF0001FF8001FF +8003FF0000FFC007FE00007FF01FFC00003FFFFFF800000FFFFFE0000003FFFF80000000 +3FF800002F427CC038>48 D<000003C000000007C00000001FC00000007FC0000003FFC0 +00003FFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFC3FFC0000003FFC000 +0003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000 +03FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003 +FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF +C0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0 +000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000 +0003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000 +03FFC0000003FFC0000003FFC0000003FFC0000003FFC000FFFFFFFFFCFFFFFFFFFCFFFF +FFFFFCFFFFFFFFFCFFFFFFFFFC264177C038>I<0000FFE00000000FFFFE0000003FFFFF +800000FFFFFFE00003FFFFFFF80007FC03FFFE000FE0007FFF001F80003FFF803F00000F +FFC07F000007FFC07FC00007FFE07FF00003FFE0FFF00001FFF0FFF80001FFF0FFF80001 +FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF87FF00000FFF83FE00000 +FFF81FC00000FFF800000000FFF800000000FFF000000001FFF000000001FFF000000001 +FFE000000003FFE000000003FFC000000007FF800000000FFF000000000FFF000000001F +FC000000003FF8000000003FF0000000007FE000000000FFC000000001FF0000000003FE +0000000007FC000000000FF0000000001FE0000000003F80000000007F0000780000FE00 +00780001FC0000780003F80000F80007E00000F0000FC00000F0001F800000F0003F0000 +00F0007C000001F000F8000003F001FFFFFFFFF003FFFFFFFFE007FFFFFFFFE00FFFFFFF +FFE01FFFFFFFFFE03FFFFFFFFFE07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFC0FFFFFFFF +FFC0FFFFFFFFFFC0FFFFFFFFFFC02D417BC038>I<0000FFF000000007FFFF0000001FFF +FFC000007FFFFFF00000FF007FF80003F8003FFE0007E0001FFF0007E0000FFF000FF800 +07FF800FFE0007FF801FFE0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF00 +07FFC01FFF0007FFC01FFF0007FFC00FFE0007FFC007FC0007FF8003F8000FFF80000000 +0FFF000000001FFF000000001FFE000000003FFC000000007FF800000000FFF000000001 +FFE00000000FFF80000007FFFE00000007FFF800000007FFFF00000007FFFFC000000000 +FFF0000000003FFC000000000FFE000000000FFF8000000007FF8000000003FFC0000000 +03FFE000000003FFE000000001FFF000000001FFF000000001FFF800000001FFF8000000 +01FFF80FC00001FFF83FF00001FFF87FF80001FFF87FF80001FFF8FFFC0001FFF8FFFC00 +01FFF8FFFC0001FFF0FFFC0001FFF0FFFC0003FFF0FFFC0003FFE07FF80003FFE07FF000 +07FFC07FE00007FFC03F80000FFF801FF0001FFF000FFE00FFFE0007FFFFFFF80001FFFF +FFF000007FFFFFC000001FFFFE00000001FFE000002D427BC038>I<000000003F000000 +0000003F0000000000007F000000000000FF000000000001FF000000000003FF00000000 +0003FF000000000007FF00000000000FFF00000000001FFF00000000003FFF0000000000 +3FFF00000000007FFF0000000000FFFF0000000001F7FF0000000003E7FF0000000007E7 +FF0000000007C7FF000000000F87FF000000001F07FF000000003E07FF000000007E07FF +000000007C07FF00000000F807FF00000001F007FF00000003E007FF00000007E007FF00 +000007C007FF0000000F8007FF0000001F0007FF0000003E0007FF0000007C0007FF0000 +007C0007FF000000F80007FF000001F00007FF000003E00007FF000007C00007FF00000F +C00007FF00000F800007FF00001F000007FF00003E000007FF00007C000007FF0000FC00 +0007FF0000FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFF +FFFFFF800000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000F +FF00000000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF +00000000000FFF00000000000FFF000000007FFFFFFF8000007FFFFFFF8000007FFFFFFF +8000007FFFFFFF8000007FFFFFFF8031417DC038>I<07000000030007E000003F0007FF +0007FF0007FFFFFFFF0007FFFFFFFE0007FFFFFFFC0007FFFFFFF80007FFFFFFF00007FF +FFFFE00007FFFFFF800007FFFFFE000007FFFFFC000007FFFFE0000007FFFF00000007C0 +0000000007C00000000007C00000000007C00000000007C00000000007C00000000007C0 +0000000007C00000000007C00000000007C00000000007C03FF0000007C1FFFF000007C7 +FFFFC00007DFFFFFF00007FFE03FFC0007FF000FFE0007FC0007FF0007F00003FF8007E0 +0003FFC007C00001FFC003800001FFE000000001FFE000000000FFF000000000FFF00000 +0000FFF000000000FFF800000000FFF800000000FFF800000000FFF80F800000FFF83FE0 +0000FFF87FF00000FFF8FFF00000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF8 +0000FFF0FFF00000FFF0FFF00001FFF07FE00001FFE07FC00001FFE07E000003FFC03E00 +0003FFC03F000007FF801FC0000FFF000FF0001FFE0007FE00FFFC0003FFFFFFF00000FF +FFFFE000003FFFFF8000000FFFFC00000001FFC000002D427BC038>I<000001FF800000 +001FFFF00000007FFFFC000001FFFFFF000007FF807F80000FFC001F80003FF0001FC000 +7FE0007FC000FFC000FFE001FF8001FFE003FF8001FFE003FF0001FFE007FE0001FFE00F +FE0001FFE00FFE0001FFE01FFC0000FFC01FFC00007F801FFC00001E003FFC000000003F +FC000000003FF8000000007FF8000000007FF8000000007FF807FC00007FF81FFF8000FF +F87FFFE000FFF8FFFFF800FFF9F01FFC00FFFBC007FE00FFFF8003FF00FFFF8003FF80FF +FF0001FFC0FFFE0001FFC0FFFE0000FFE0FFFE0000FFE0FFFC0000FFF0FFFC0000FFF0FF +FC0000FFF0FFFC0000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF87F +F80000FFF87FF80000FFF87FF80000FFF87FF80000FFF87FF80000FFF83FF80000FFF83F +F80000FFF83FF80000FFF03FFC0000FFF01FFC0000FFF01FFC0000FFF00FFC0001FFE00F +FC0001FFE007FE0001FFC007FF0003FF8003FF8003FF0001FFC007FE0000FFE01FFC0000 +7FFFFFF800001FFFFFF0000007FFFFC0000001FFFF000000003FF000002D427BC038>I< +1E00000000001F00000000001FFC000000001FFFFFFFFFFE1FFFFFFFFFFE1FFFFFFFFFFE +1FFFFFFFFFFE3FFFFFFFFFFE3FFFFFFFFFFC3FFFFFFFFFF83FFFFFFFFFF03FFFFFFFFFE0 +3FFFFFFFFFC03FFFFFFFFFC07FFFFFFFFF807E0000003F007C0000007E007C000000FC00 +78000000F80078000001F80078000003F000F8000007E000F000000FC000F000000F8000 +F000001F80000000003F00000000007E0000000000FC0000000000FC0000000001F80000 +000003F80000000003F00000000007F0000000000FE0000000000FE0000000001FE00000 +00001FC0000000003FC0000000003FC0000000007FC0000000007F8000000000FF800000 +0000FF8000000001FF8000000001FF8000000001FF8000000003FF8000000003FF000000 +0003FF0000000003FF0000000007FF0000000007FF0000000007FF0000000007FF000000 +0007FF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000 +000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000007FE000000 +0003FC0000000001F80000002F447AC238>I<00007FF000000003FFFF0000000FFFFFC0 +00003FFFFFF000007F801FFC0001FC0003FE0003F80001FF0003F00000FF0007E000007F +8007E000003F800FC000003FC00FC000003FC01FC000001FC01FC000001FC01FE000001F +C01FE000001FC01FF000001FC01FF800001FC01FFE00003FC01FFF00003F801FFFC0007F +801FFFF0007F000FFFFC00FF000FFFFE01FE0007FFFF83FC0007FFFFE7F80003FFFFFFE0 +0001FFFFFFC00000FFFFFF0000007FFFFFC000003FFFFFE000000FFFFFF800000FFFFFFC +00003FFFFFFE0000FFFFFFFF0001FF3FFFFF8007FC0FFFFFC00FF803FFFFE01FF000FFFF +E01FE0007FFFF03FE0001FFFF07FC00007FFF07F800003FFF87F800000FFF8FF8000007F +F8FF0000003FF8FF0000001FF8FF0000000FF8FF0000000FF8FF00000007F8FF00000007 +F8FF00000007F8FF80000007F07F80000007F07F8000000FF07FC000000FE03FE000001F +E03FF000003FC01FF800007F800FFE0001FF0007FFC00FFE0003FFFFFFFC0000FFFFFFF0 +00003FFFFFC000000FFFFF00000000FFF000002D427BC038>I<00007FF000000007FFFE +0000001FFFFF8000007FFFFFE00000FFE03FF00001FF800FF80003FF0007FC0007FE0007 +FE000FFC0003FF001FFC0001FF003FFC0001FF803FFC0001FF807FF80001FFC07FF80000 +FFC07FF80000FFE07FF80000FFE0FFF80000FFE0FFF80000FFF0FFF80000FFF0FFF80000 +FFF0FFF80000FFF0FFF80000FFF0FFF80000FFF0FFF80000FFF8FFF80000FFF8FFF80000 +FFF8FFF80000FFF8FFF80001FFF87FF80001FFF87FF80001FFF87FF80001FFF83FF80003 +FFF83FF80003FFF81FFC0003FFF81FFC0007FFF80FFE000FFFF807FE000FFFF803FF001E +FFF801FFC07CFFF800FFFFF8FFF8003FFFF0FFF8000FFFC0FFF00001FF00FFF000000000 +FFF000000000FFF000000000FFE000000001FFE000000001FFE003C00001FFE00FF00001 +FFC01FF80001FFC03FFC0003FF803FFC0003FF803FFC0003FF003FFC0007FE003FFC000F +FE003FFC000FFC003FF8001FF8001FF0003FF0001FC000FFE0000FF003FFC00007FFFFFF +800003FFFFFE000001FFFFF80000007FFFE000000007FE0000002D427BC038>I<07C01F +F03FF87FFCFFFEFFFEFFFEFFFEFFFEFFFEFFFE7FFC3FF81FF007C0000000000000000000 +0000000000000000000000000000000000000007C01FF03FF87FFCFFFEFFFEFFFEFFFEFF +FEFFFEFFFE7FFC3FF81FF007C00F2C78AB1F>I<7FFFFFFFFFFFFFFFFF80FFFFFFFFFFFF +FFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC03FFF +FFFFFFFFFFFFFF8000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000003FFFFFFFFFFFFFFFFF80FFFF +FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFF +FFC07FFFFFFFFFFFFFFFFF804A1C7AA657>61 D<000000001F8000000000000000001F80 +00000000000000003FC000000000000000003FC000000000000000007FE0000000000000 +00007FE000000000000000007FE00000000000000000FFF00000000000000000FFF00000 +000000000001FFF80000000000000001FFF80000000000000001FFF80000000000000003 +FFFC0000000000000003FFFC0000000000000007FFFE0000000000000007FFFE00000000 +00000007FFFE000000000000000FFFFF000000000000000F9FFF000000000000001F9FFF +800000000000001F1FFF800000000000001F0FFF800000000000003F0FFFC00000000000 +003E07FFC00000000000007E07FFE00000000000007C07FFE00000000000007C03FFE000 +0000000000FC03FFF0000000000000F801FFF0000000000001F801FFF8000000000001F0 +01FFF8000000000001F000FFF8000000000003F000FFFC000000000003E0007FFC000000 +000007E0007FFE000000000007C0007FFE000000000007C0003FFE00000000000FC0003F +FF00000000000F80001FFF00000000001F80001FFF80000000001F00000FFF8000000000 +1F00000FFF80000000003F00000FFFC0000000003E000007FFC0000000007E000007FFE0 +000000007FFFFFFFFFE0000000007FFFFFFFFFE000000000FFFFFFFFFFF000000000FFFF +FFFFFFF000000001FFFFFFFFFFF800000001F0000000FFF800000001F0000000FFF80000 +0003F0000000FFFC00000003E00000007FFC00000007E00000007FFE00000007C0000000 +3FFE00000007C00000003FFE0000000F800000003FFF0000000F800000001FFF0000001F +800000001FFF8000001F000000000FFF8000003F000000000FFFC000003E000000000FFF +C000007E0000000007FFC000FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF0FFFFFF00 +000FFFFFFFF0FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF04C457CC455>65 +DI<00000000FFF00000700000001FFFFF0000F0000001FFFFFFE001F000 +0007FFFFFFF803F000003FFFFFFFFE07F00000FFFFE001FF0FF00001FFFE00003F9FF000 +07FFF000000FFFF0000FFFC0000007FFF0001FFF00000003FFF0003FFE00000001FFF000 +7FFC00000000FFF000FFF8000000007FF001FFF0000000003FF003FFE0000000001FF007 +FFE0000000001FF007FFC0000000000FF00FFF80000000000FF00FFF800000000007F01F +FF000000000007F01FFF000000000003F03FFF000000000003F03FFE000000000003F03F +FE000000000003F07FFE000000000001F07FFE000000000001F07FFE000000000001F07F +FC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FF +FC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FF +FC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FF +FC00000000000000FFFC00000000000000FFFC000000000000007FFC000000000000007F +FE000000000000007FFE000000000000F07FFE000000000000F03FFE000000000000F03F +FE000000000000F03FFF000000000000F01FFF000000000001F01FFF000000000001E00F +FF800000000001E00FFF800000000003E007FFC00000000003C007FFE00000000007C003 +FFE00000000007C001FFF0000000000F8000FFF8000000001F00007FFC000000003F0000 +3FFE000000007E00001FFF80000000FC00000FFFC0000001F8000007FFF0000007F00000 +01FFFE00001FE0000000FFFFF001FF800000003FFFFFFFFF0000000007FFFFFFFC000000 +0001FFFFFFF000000000001FFFFF80000000000000FFF800000044467AC451>II< +FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800 +FFFFFFFFFFFFFFFC00001FFF000001FFFC00001FFF0000003FFC00001FFF0000000FFC00 +001FFF00000003FC00001FFF00000001FC00001FFF00000000FC00001FFF00000000FC00 +001FFF000000007E00001FFF000000003E00001FFF000000003E00001FFF000000003E00 +001FFF000000001E00001FFF000000001E00001FFF000078001E00001FFF000078001E00 +001FFF000078000F00001FFF000078000F00001FFF000078000F00001FFF000078000F00 +001FFF0000F8000000001FFF0000F8000000001FFF0000F8000000001FFF0001F8000000 +001FFF0003F8000000001FFF001FF8000000001FFFFFFFF8000000001FFFFFFFF8000000 +001FFFFFFFF8000000001FFFFFFFF8000000001FFFFFFFF8000000001FFF001FF8000000 +001FFF0003F8000000001FFF0001F8000000001FFF0000F8000000001FFF0000F8000000 +001FFF0000F80001E0001FFF0000780001E0001FFF0000780001E0001FFF0000780003C0 +001FFF0000780003C0001FFF0000780003C0001FFF0000780003C0001FFF0000000003C0 +001FFF0000000007C0001FFF0000000007C0001FFF000000000780001FFF000000000780 +001FFF000000000F80001FFF000000000F80001FFF000000001F80001FFF000000001F80 +001FFF000000003F80001FFF000000007F00001FFF00000000FF00001FFF00000001FF00 +001FFF00000007FF00001FFF0000001FFF00001FFF000001FFFF00FFFFFFFFFFFFFFFF00 +FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00 +43447DC34A>II73 D75 DIII<00000007FFC0000000000000FFFFFE000000000007 +FFFFFFC0000000001FFFFFFFF0000000007FFE00FFFC00000001FFF0001FFF00000007FF +800003FFC000000FFF000001FFE000001FFC0000007FF000003FF80000003FF800007FF0 +0000001FFC0000FFF00000001FFE0001FFE00000000FFF0003FFC000000007FF8003FFC0 +00000007FF8007FF8000000003FFC007FF8000000003FFC00FFF0000000001FFE00FFF00 +00000001FFE01FFF0000000001FFF01FFE0000000000FFF03FFE0000000000FFF83FFE00 +00000000FFF83FFE0000000000FFF87FFE0000000000FFFC7FFC00000000007FFC7FFC00 +000000007FFC7FFC00000000007FFC7FFC00000000007FFCFFFC00000000007FFEFFFC00 +000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00 +000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00 +000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFE7FFC00 +000000007FFC7FFE0000000000FFFC7FFE0000000000FFFC7FFE0000000000FFFC3FFE00 +00000000FFF83FFE0000000000FFF83FFF0000000001FFF81FFF0000000001FFF01FFF00 +00000001FFF01FFF8000000003FFF00FFF8000000003FFE00FFF8000000003FFE007FFC0 +00000007FFC003FFC000000007FF8003FFE00000000FFF8001FFF00000001FFF0000FFF8 +0000003FFE00007FFC0000007FFC00003FFE000000FFF800001FFF000001FFF000000FFF +C00007FFE0000007FFF0001FFFC0000001FFFE00FFFF00000000FFFFFFFFFE000000003F +FFFFFFF80000000007FFFFFFC00000000000FFFFFE00000000000007FFC000000047467A +C454>II<00000007FFC0000000000000FFFFFE000000000007FFFFFFC0 +000000001FFFFFFFF0000000007FFE00FFFC00000001FFF0001FFF00000007FFC00007FF +C000000FFF000001FFE000001FFE000000FFF000003FFC0000007FF800007FF80000003F +FC0000FFF00000001FFE0001FFE00000000FFF0003FFC000000007FF8003FFC000000007 +FF8007FF8000000003FFC007FF8000000003FFC00FFF8000000003FFE00FFF0000000001 +FFE01FFF0000000001FFF01FFF0000000001FFF03FFE0000000000FFF83FFE0000000000 +FFF83FFE0000000000FFF87FFE0000000000FFFC7FFE0000000000FFFC7FFC0000000000 +7FFC7FFC00000000007FFC7FFC00000000007FFCFFFC00000000007FFEFFFC0000000000 +7FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC0000000000 +7FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC0000000000 +7FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFE7FFC0000000000 +7FFC7FFC00000000007FFC7FFC00000000007FFC7FFE0000000000FFFC3FFE0000000000 +FFF83FFE0000000000FFF83FFE0000000000FFF81FFE0000000000FFF01FFF0000000001 +FFF01FFF0000000001FFF00FFF0000000001FFE00FFF8000FE0003FFE007FF8003FF8003 +FFC003FFC007FFC007FF8003FFC00FFFE007FF8001FFE01F83F00FFF0000FFF01E00F81F +FE00007FF83E007C3FFC00003FFC3C003E7FF800001FFE3C001EFFF000000FFF3C001FFF +E0000007FFFE001FFFC0000001FFFE001FFF00000000FFFF80FFFE000000003FFFFFFFF8 +0000000007FFFFFFE00002000000FFFFFFF0000700000007FFC7F00007000000000007F8 +0007000000000003FC000F000000000003FE001F000000000003FF80FF000000000003FF +FFFF000000000001FFFFFE000000000001FFFFFE000000000001FFFFFE000000000000FF +FFFE000000000000FFFFFC000000000000FFFFFC0000000000007FFFF80000000000007F +FFF00000000000003FFFF00000000000001FFFE00000000000000FFFC000000000000007 +FF0000000000000001FC0048587AC454>II<0000FFE000 +1C000007FFFE003C00003FFFFF807C0000FFFFFFE0FC0001FFFFFFF9FC0003FF801FFFFC +0007FC0001FFFC000FF800007FFC001FF000003FFC003FE000000FFC003FC0000007FC00 +7FC0000003FC007F80000003FC007F80000001FC007F80000000FC00FF80000000FC00FF +800000007C00FF800000007C00FFC00000007C00FFC00000007C00FFE00000003C00FFF0 +0000003C00FFF80000003C00FFFC00000000007FFE00000000007FFFE0000000007FFFFE +000000003FFFFFF00000003FFFFFFF0000001FFFFFFFE000001FFFFFFFFC00000FFFFFFF +FE000007FFFFFFFF800003FFFFFFFFC00001FFFFFFFFE000007FFFFFFFF000001FFFFFFF +F8000007FFFFFFFC000000FFFFFFFC0000000FFFFFFE00000000FFFFFE0000000007FFFF +00000000007FFF00000000003FFF00000000000FFF800000000007FF800000000003FF80 +F000000003FF80F000000001FF80F000000001FF80F000000000FF80F000000000FF80F8 +00000000FF80F800000000FF80F800000000FF00FC00000000FF00FC00000000FF00FE00 +000001FF00FF00000001FE00FF80000003FE00FFC0000003FC00FFE0000007FC00FFF800 +000FF800FFFF00003FF000FFFFF800FFE000FE7FFFFFFFC000FC1FFFFFFF0000F807FFFF +FC0000F000FFFFF00000E00007FF80000031467AC43E>I<3FFFFFFFFFFFFFFFE03FFFFF +FFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFE00 +0FFF8003FFE07FE0000FFF80003FF07FC0000FFF80001FF07F00000FFF800007F07F0000 +0FFF800007F07E00000FFF800003F07C00000FFF800001F07C00000FFF800001F07C0000 +0FFF800001F07800000FFF800000F07800000FFF800000F07800000FFF800000F0780000 +0FFF800000F0F800000FFF800000F8F000000FFF80000078F000000FFF80000078F00000 +0FFF80000078F000000FFF80000078F000000FFF800000780000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 +0FFF800000000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFFFF00000007FF +FFFFFFFF00000007FFFFFFFFFF000045437CC24E>I86 +D<0001FFE0000000001FFFFE000000007FFFFF80000001FFFFFFE0000003FE007FF80000 +07FC001FFC000007FE000FFE00000FFF0007FF00000FFF0007FF00000FFF0003FF80000F +FF0003FF80000FFF0003FF80000FFF0001FFC00007FE0001FFC00003FC0001FFC00000F0 +0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000003 +FFFFC0000000FFFFFFC0000007FFFFFFC000003FFFF1FFC00000FFFC01FFC00003FFE001 +FFC0000FFF8001FFC0001FFE0001FFC0003FFC0001FFC0003FF80001FFC0007FF80001FF +C0007FF00001FFC000FFF00001FFC000FFE00001FFC000FFE00001FFC000FFE00001FFC0 +00FFE00003FFC000FFE00003FFC000FFF00007FFC0007FF8000FFFC0007FF8001FFFF000 +3FFE003EFFFFC01FFF80FC7FFFC007FFFFF87FFFC003FFFFE01FFFC0007FFF8007FFC000 +0FFC00000000322F7DAD36>97 D<007FC000000000FFFFC000000000FFFFC000000000FF +FFC000000000FFFFC000000000FFFFC00000000003FFC00000000001FFC00000000001FF +C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 +0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000 +00000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000 +000001FFC00FF8000001FFC0FFFF800001FFC3FFFFE00001FFCFFFFFF80001FFDFC03FFC +0001FFFF000FFE0001FFFC0003FF0001FFF80001FF8001FFF00001FFC001FFE00000FFE0 +01FFC00000FFE001FFC000007FF001FFC000007FF001FFC000007FF801FFC000003FF801 +FFC000003FF801FFC000003FF801FFC000003FFC01FFC000003FFC01FFC000003FFC01FF +C000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC0 +00003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FF801FFC000 +003FF801FFC000007FF801FFC000007FF001FFC000007FF001FFC000007FF001FFC00000 +FFE001FFE00000FFC001FFF00001FFC001FFF80003FF8001FF7C0007FF0001FE3E000FFE +0001FC1FC07FFC0001F80FFFFFF00001F003FFFFC00001E000FFFF00000000001FF00000 +36467DC43E>I<00003FFC00000001FFFFC000000FFFFFF000003FFFFFFC00007FF003FE +0000FFC001FF0003FF8003FF0007FF0007FF8007FE0007FF800FFE0007FF801FFC0007FF +801FFC0007FF803FF80007FF803FF80003FF007FF80001FE007FF8000078007FF0000000 +007FF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 +00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 +00FFF0000000007FF8000000007FF8000000007FF8000000003FF8000000003FFC000003 +C03FFC000003C01FFE000007C00FFE000007800FFF00000F8007FF80001F0003FFC0003E +0001FFF0007C00007FFC03F800003FFFFFF000000FFFFFC0000003FFFF000000003FF800 +002A2F7CAD32>I<0000000003FE0000000007FFFE0000000007FFFE0000000007FFFE00 +00000007FFFE0000000007FFFE00000000001FFE00000000000FFE00000000000FFE0000 +0000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000 +00000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000 +000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000003FE0 +0FFE000003FFFC0FFE00000FFFFF8FFE00003FFFFFCFFE0000FFF807FFFE0001FFC001FF +FE0003FF80007FFE0007FF00003FFE000FFE00001FFE000FFC00000FFE001FFC00000FFE +003FF800000FFE003FF800000FFE003FF800000FFE007FF800000FFE007FF000000FFE00 +7FF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FF +F000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF0 +00000FFE00FFF000000FFE00FFF000000FFE007FF000000FFE007FF000000FFE007FF000 +000FFE007FF800000FFE003FF800000FFE003FF800000FFE001FFC00001FFE001FFC0000 +1FFE000FFE00003FFE0007FE00007FFE0003FF0000FFFF0001FFC003FFFFFC00FFF01FEF +FFFC007FFFFF8FFFFC001FFFFE0FFFFC0007FFF80FFFFC00007FC00FF80036467CC43E> +I<00003FF800000003FFFF8000000FFFFFE000003FFFFFF000007FF83FF80000FFC007FC +0001FF8003FE0003FF0001FF0007FE0000FF800FFC0000FF801FFC00007FC01FF800007F +C03FF800003FE03FF800003FE07FF800003FE07FF000003FE07FF000003FF07FF000001F +F0FFF000001FF0FFF000001FF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFF +F0FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000007FF0000000 +007FF0000000007FF8000000007FF8000000003FF8000000003FF8000000F01FFC000000 +F01FFC000001F00FFE000001E007FF000003E003FF800007C001FFC0000F8000FFF0003F +00007FFE01FE00001FFFFFFC000007FFFFF0000001FFFFC00000001FFE00002C2F7DAD33 +>I<000000FF8000000FFFE000007FFFF00001FFFFF80003FF8FFC000FFE0FFE001FFC1F +FE001FF81FFE003FF81FFE007FF01FFE007FF01FFE007FF00FFC00FFE00FFC00FFE003F0 +00FFE000C000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 +FFE0000000FFE0000000FFE0000000FFE0000000FFE00000FFFFFFF800FFFFFFF800FFFF +FFF800FFFFFFF800FFFFFFF80000FFE0000000FFE0000000FFE0000000FFE0000000FFE0 +000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000 +0000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000 +00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 +FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF +E000007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE00027467DC522>I<00 +00FFE0007E00000FFFFE03FF80003FFFFF8FFF8000FFFFFFFFFFC001FFC07FFF3FC003FF +001FF83FC007FE000FFC3FC00FFC0007FE1F801FFC0007FF0F001FF80003FF00001FF800 +03FF00003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003 +FF80003FF80003FF80003FF80003FF80003FF80003FF80001FF80003FF00001FF80003FF +00001FFC0007FF00000FFC0007FE000007FE000FFC000003FF001FF8000001FFC07FF000 +0003FFFFFFE0000003FFFFFF800000078FFFFE0000000780FFE00000000F800000000000 +0F8000000000000F8000000000000F8000000000000FC000000000000FE000000000000F +F000000000000FFFFFFFC000000FFFFFFFFC000007FFFFFFFF800007FFFFFFFFE00003FF +FFFFFFF00001FFFFFFFFFC0000FFFFFFFFFC0003FFFFFFFFFE000FFFFFFFFFFF001FF000 +007FFF003FC0000007FF007F80000001FF807F80000000FF80FF00000000FF80FF000000 +007F80FF000000007F80FF000000007F80FF000000007F80FF80000000FF807F80000000 +FF007FC0000001FF003FE0000003FE001FF0000007FC000FFE00003FF80007FFC001FFF0 +0001FFFFFFFFC000007FFFFFFF0000000FFFFFF8000000007FFF00000032427DAC38>I< +007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FF +FFC00000000003FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF +C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 +0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000 +00000001FFC00000000001FFC00000000001FFC00000000001FFC007FE000001FFC03FFF +800001FFC0FFFFE00001FFC1FFFFF80001FFC7F03FFC0001FFCF801FFC0001FFDF000FFE +0001FFDE000FFE0001FFFC000FFE0001FFF80007FF0001FFF00007FF0001FFF00007FF00 +01FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC00007FF0001FFC00007FF0001 +FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF +C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 +0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 +07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 +FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFF +FEFFFFFF83FFFFFEFFFFFF83FFFFFE37457CC43E>I<007C0001FF0003FF8007FFC007FF +C00FFFE00FFFE00FFFE00FFFE00FFFE007FFC007FFC003FF8001FF00007C000000000000 +00000000000000000000000000000000000000000000000000007FC07FFFC07FFFC07FFF +C07FFFC07FFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF +C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF +C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF +C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18467CC520>I<000003E000000FF800001FFC00 +003FFE00003FFE00007FFF00007FFF00007FFF00007FFF00007FFF00003FFE00003FFE00 +001FFC00000FF8000003E000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001FF0003FFFF0003FFFF0003FFFF0003FFFF00 +03FFFF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 +0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 +0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 +0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 +0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF1F +8007FF3FC007FF7FE007FFFFF007FFFFF00FFEFFF00FFEFFF00FFCFFF01FFCFFE01FF87F +E03FF03FC0FFE01FFFFF800FFFFF0003FFFC0000FFC000205A86C522>I<007FC0000000 +00FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000 +03FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001 +FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF +C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 +0000000001FFC00000000001FFC00000000001FFC00000000001FFC0007FFFE001FFC000 +7FFFE001FFC0007FFFE001FFC0007FFFE001FFC0007FFFE001FFC0000FE00001FFC0001F +C00001FFC0003F000001FFC0007E000001FFC000FC000001FFC003F8000001FFC007E000 +0001FFC00FC0000001FFC01F80000001FFC07F00000001FFC0FE00000001FFC1FC000000 +01FFC3FE00000001FFC7FE00000001FFDFFF00000001FFFFFF80000001FFFFFFC0000001 +FFFFFFC0000001FFF9FFE0000001FFE1FFF0000001FFC0FFF8000001FF807FF8000001FF +803FFC000001FF803FFE000001FF801FFF000001FF800FFF000001FF8007FF800001FF80 +07FFC00001FF8003FFE00001FF8001FFE00001FF8000FFF00001FF8000FFF80001FF8000 +7FFC0001FF80003FFC00FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FF +FFF8FFFFFF03FFFFF835457DC43B>I<007FC000FFFFC000FFFFC000FFFFC000FFFFC000 +FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 +01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 +01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 +01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 +01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 +01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 +01FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80 +FFFFFF8019457CC420>I<007F8007FE00000FFC0000FFFF803FFFC0007FFF8000FFFF80 +FFFFF001FFFFE000FFFF81FFFFF803FFFFF000FFFF87F01FFC0FE03FF800FFFF8FC00FFE +1F801FFC0003FF9F000FFF3E001FFE0001FF9E0007FF3C000FFE0001FFBC0007FF78000F +FE0001FFF80003FFF00007FF0001FFF80003FFF00007FF0001FFF00003FFE00007FF0001 +FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFC000 +03FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF80 +0007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF +0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FF +C00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003 +FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF8000 +07FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF00 +01FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC0 +0003FF800007FF0001FFC00003FF800007FF00FFFFFF81FFFFFF03FFFFFEFFFFFF81FFFF +FF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FF +FFFE572D7CAC5E>I<007F8007FE0000FFFF803FFF8000FFFF80FFFFE000FFFF81FFFFF8 +00FFFF87F03FFC00FFFF8F801FFC0003FF9F000FFE0001FF9E000FFE0001FFBC000FFE00 +01FFF80007FF0001FFF00007FF0001FFF00007FF0001FFE00007FF0001FFE00007FF0001 +FFE00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF +C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 +0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 +07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 +FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF +00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE +372D7CAC3E>I<00001FFC0000000001FFFFC000000007FFFFF00000001FFFFFFC000000 +7FF80FFF000000FFC001FF800001FF8000FFC00003FE00003FE00007FE00003FF0000FFC +00001FF8000FF800000FF8001FF800000FFC001FF800000FFC003FF800000FFE003FF000 +0007FE007FF0000007FF007FF0000007FF007FF0000007FF007FF0000007FF00FFF00000 +07FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007 +FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF807FF0000007FF +007FF0000007FF007FF0000007FF007FF0000007FF003FF800000FFE003FF800000FFE00 +1FF800000FFC001FFC00001FFC000FFC00001FF80007FE00003FF00007FE00003FF00003 +FF8000FFE00001FFC001FFC000007FF80FFF0000003FFFFFFE0000000FFFFFF800000001 +FFFFC0000000001FFC000000312F7DAD38>I<007FC00FF80000FFFFC0FFFF8000FFFFC3 +FFFFE000FFFFCFFFFFF800FFFFDFC03FFC00FFFFFF001FFE0003FFFC0007FF0001FFF800 +03FF8001FFF00003FFC001FFE00001FFE001FFC00001FFE001FFC00000FFF001FFC00000 +FFF001FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF801FFC000003F +FC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC +01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01 +FFC000003FFC01FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF001FF +C00000FFF001FFC00000FFF001FFC00001FFE001FFE00001FFC001FFF00003FFC001FFF8 +0007FF8001FFFC000FFF0001FFFE001FFE0001FFDFC07FFC0001FFCFFFFFF00001FFC3FF +FFC00001FFC0FFFF000001FFC01FF0000001FFC00000000001FFC00000000001FFC00000 +000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0000000 +0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000 +FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF8000000036 +407DAC3E>I<00003FE0001E000003FFFC003E00000FFFFF007E00003FFFFF807E0000FF +F80FE0FE0001FFE003F1FE0003FFC001F1FE0007FF8000FBFE000FFF00007FFE000FFE00 +003FFE001FFE00001FFE003FFC00001FFE003FFC00000FFE003FF800000FFE007FF80000 +0FFE007FF800000FFE007FF800000FFE00FFF000000FFE00FFF000000FFE00FFF000000F +FE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE +00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE007FF800000FFE00 +7FF800000FFE007FF800000FFE007FF800000FFE003FFC00000FFE003FFC00000FFE001F +FE00001FFE001FFE00003FFE000FFF00007FFE0007FF0000FFFE0003FF8001FFFE0001FF +E003EFFE0000FFF01FCFFE00007FFFFF8FFE00001FFFFE0FFE000003FFF80FFE0000007F +C00FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000000000 +0FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000F +FE00000000000FFE00000000000FFE00000000000FFE0000000007FFFFFC00000007FFFF +FC00000007FFFFFC00000007FFFFFC00000007FFFFFC36407CAC3B>I<007F807F00FFFF +81FFE0FFFF83FFF0FFFF8FFFF8FFFF8F8FFCFFFF9F1FFE03FFBE1FFE01FFBC1FFE01FFF8 +1FFE01FFF81FFE01FFF01FFE01FFF00FFC01FFE007F801FFE001E001FFE0000001FFE000 +0001FFE0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC00000 +01FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001 +FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FF +C0000001FFC0000001FFC00000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFF +E000272D7DAC2E>I<001FFC038000FFFF878003FFFFFF800FFFFFFF801FF003FF803FC0 +00FF803F80003F807F00001F807E00001F80FE00000F80FE00000F80FE00000780FF0000 +0780FF00000780FF80000780FFE0000000FFFE0000007FFFF000007FFFFF00003FFFFFC0 +003FFFFFF0001FFFFFFC000FFFFFFE0003FFFFFF0001FFFFFF80007FFFFF80000FFFFFC0 +00003FFFC0000003FFE0000000FFE0F000003FE0F000003FE0F800001FE0F800000FE0F8 +00000FE0FC00000FE0FC00000FE0FE00000FC0FF00001FC0FF00001FC0FF80003F80FFE0 +007F00FFF803FE00FFFFFFFC00FCFFFFF800F03FFFE000E007FE0000232F7CAD2C>I<00 +01E000000001E000000001E000000001E000000001E000000003E000000003E000000003 +E000000003E000000007E000000007E00000000FE00000000FE00000001FE00000001FE0 +0000003FE00000007FE0000000FFE0000003FFE000000FFFFFFF80FFFFFFFF80FFFFFFFF +80FFFFFFFF80FFFFFFFF8000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000 +00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 +FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF +E0000000FFE0000000FFE001E000FFE001E000FFE001E000FFE001E000FFE001E000FFE0 +01E000FFE001E000FFE001E000FFE001E000FFE003E000FFF003C0007FF003C0007FF007 +C0003FF80F80001FFC1F00000FFFFF000007FFFC000001FFF80000003FE00023407EBE2C +>I<007FC00001FF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF +00FFFFC003FFFF0003FFC0000FFF0001FFC00007FF0001FFC00007FF0001FFC00007FF00 +01FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001 +FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF +C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 +0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 +07FF0001FFC00007FF0001FFC00007FF0001FFC0000FFF0001FFC0000FFF0001FFC0001F +FF0001FFC0001FFF0001FFC0003FFF0000FFC0003FFF0000FFE0007FFF80007FE001F7FF +FE007FF807E7FFFE003FFFFFC7FFFE000FFFFF07FFFE0003FFFE07FFFE00007FF007FC00 +372E7CAC3E>IIIII +E /FG 33 90 df<0000001C0000003C0000007C000001FC000007F800007FF8007FFFF8 +007FF3F8007F83F8000007F8000007F0000007F0000007F0000007F0000007F000000FF0 +00000FE000000FE000000FE000000FE000000FE000001FE000001FC000001FC000001FC0 +00001FC000001FC000003FC000003F8000003F8000003F8000003F8000003F8000007F80 +00007F0000007F0000007F0000007F0000007F000000FF000000FE000000FE000000FE00 +0000FE000000FE000001FE000001FC000001FC000001FC000001FC000001FC000003FC00 +0003F8000003F8000003F8000003F8000003F8000007F8000007F0000007F0000007F000 +000FF000003FFC00FFFFFFFEFFFFFFFEFFFFFFFE1F4277C131>49 +D<000000FF8000000007FFF00000001FFFFE0000003E01FF000000F8007F800001E0003F +C0000380001FE0000700000FF0000E00000FF8001C000007F8001C000007F80038000007 +FC0030000003FC007E000003FC007F800003FC00FFC00003FC00FFC00003FC00FFC00003 +FC00FFC00007FC00FFC00007FC00FF800007FC00FF800007F8003E00000FF8000000000F +F8000000000FF0000000001FF0000000001FE0000000003FE0000000003FC0000000007F +8000000000FF8000000000FF0000000001FE0000000003FC0000000007F80000000007F0 +000000000FE0000000001FC0000000003F00000000007E0000000000FC0000000001F800 +00000003F00000000007C0000000000F80000000001F00000000003E0000000000780000 +000000F00000000001E00001800003C0000300000780000300000F00000300001C000006 +00003800000600007000000E0000E000000C0001C000001C00038000001C000FFFFFFFF8 +001FFFFFFFF8003FFFFFFFF8007FFFFFFFF000FFFFFFFFF000FFFFFFFFF000FFFFFFFFE0 +002E427BC131>I<000000FF8000000007FFF00000003FFFFC0000007F01FF000001F000 +7F800003C0003FC0000700001FC0000E00001FE0001C00001FE0001FC0000FF0003FE000 +0FF0003FE0000FF0003FE0001FF0003FE0001FF0003FE0001FF0003FE0001FE0003FC000 +1FE0000F00003FE0000000003FC0000000003FC0000000007F80000000007F8000000000 +FF0000000001FE0000000001FC0000000003F80000000007F0000000000FC0000000003F +0000000001FC00000000FFF000000000FFFE00000000001F80000000000FE00000000007 +F00000000003F80000000001FC0000000001FE0000000000FE0000000000FF0000000000 +FF0000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000 +FF800F000000FF803FC00000FF807FC00000FF807FC00001FF80FFC00001FF00FFC00001 +FF00FFC00001FF00FF800003FE00FF000003FE00FC000007FC0060000007F8007000000F +F8007000001FF0003800001FE0001C00003FC0001F00007F80000F8001FE000003F807FC +000000FFFFF00000003FFF8000000007FC0000002C447AC131>I<000000000380000000 +000380000000000780000000000F80000000001F00000000003F00000000007F00000000 +007F0000000000FF0000000001FF0000000003FE0000000007FE0000000006FE00000000 +0CFE0000000018FE0000000030FE0000000071FC00000000E1FC00000000C1FC00000001 +81FC0000000301FC0000000701FC0000000E03F80000000C03F80000001803F800000030 +03F80000006003F8000000E003F8000001C007F00000018007F00000030007F000000600 +07F000000E0007F000001C0007F0000018000FE0000030000FE0000060000FE00000C000 +0FE00001C0000FE0000380000FE0000300001FC0000600001FC0000C00001FC0001C0000 +1FC0003800001FC0003000001FC0006000003F8000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFF +FFFFC00000003F80000000007F80000000007F80000000007F00000000007F0000000000 +7F00000000007F0000000000FF0000000000FF0000000000FE0000000000FE0000000000 +FE0000000001FE0000000003FF00000003FFFFFF000003FFFFFF000003FFFFFE002A437A +C231>I<0003000000600003E00003E00003FC003FC00003FFFFFF800007FFFFFF000007 +FFFFFC000007FFFFF8000007FFFFE0000007FFFF800000063FFC0000000E00000000000C +00000000000C00000000000C00000000000C00000000000C00000000001C000000000018 +000000000018000000000018000000000018000000000018000000000038000000000030 +00000000003007F8000000303FFE00000030F80F80000033C007C00000770003E000007E +0003F00000780001F80000700001F80000600000FC0000600000FC0000000000FE000000 +0000FE0000000000FE0000000000FE0000000000FF0000000000FF0000000000FF000000 +0000FF0000000000FF0000000000FF0000000001FF000F000001FE003FC00001FE007FC0 +0001FE007FC00001FE007FC00001FE007FC00003FC00FFC00003FC00FF800003F800FE00 +0007F80060000007F0006000000FF0006000000FE0007000001FC0007000001FC0003800 +003F80003800007F00001C0000FE00000E0001FC00000F8007F0000007E01FE0000001FF +FF800000007FFE000000001FE00000002B4479C131>I<0000000FF0000000007FFE0000 +0003FFFF00000007F00FC000001FC001C000007F0000E00000FC0000600001F8000FE000 +03F0001FE00007E0003FE0000FC0003FE0001FC0003FE0003F80003FE0003F00003FC000 +7F00001F8000FE0000000000FC0000000001FC0000000003FC0000000003F80000000007 +F80000000007F00000000007F0000000000FF0000000000FE00FF000001FE07FFC00001F +E0F01F00001FE3C00FC0003FC70007E0003FCE0003F0003FDC0001F0003FD80001F8003F +F80000FC007FF00000FC007FE00000FE007FE00000FE007FC00000FE007FC00000FF007F +800000FF00FF800000FF00FF800000FF00FF000000FF00FF000000FF00FF000000FF00FF +000001FF00FF000001FE00FF000001FE00FE000001FE00FE000001FE00FE000001FE00FE +000003FC00FE000003FC007E000003FC007E000003F8007E000007F8007E000007F0007F +00000FE0003F00000FE0003F00001FC0001F00003F80001F80003F00000FC0007E00000F +C000FC000007E003F8000003F80FE0000000FFFFC00000003FFE000000000FF00000002B +4478C131>I<01800000000003800000000003F00000000007FFFFFFFFF807FFFFFFFFF0 +07FFFFFFFFF00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFC01FFFFFFFFF801C0000000700 +180000000E00380000001C0030000000380030000000300060000000700060000000E000 +60000001C000C00000038000C000000700000000000E00000000001C00000000001C0000 +000000380000000000700000000000E00000000001C00000000003800000000003800000 +00000700000000000E00000000001E00000000001C00000000003C000000000078000000 +0000F80000000000F00000000001F00000000001F00000000003E00000000007E0000000 +0007E0000000000FC0000000000FC0000000001FC0000000001F80000000003F80000000 +003F80000000007F80000000007F0000000000FF0000000000FF0000000000FF00000000 +01FE0000000001FE0000000003FE0000000003FE0000000003FE0000000003FE00000000 +07FC0000000007FC0000000007FC0000000007FC0000000007FC000000000FFC00000000 +0FF8000000000FF80000000007F00000000003C0000000002D4573C231>I<0000007F80 +00000003FFF00000000FFFFC0000003F80FE000000FC003F000001F0001F800003E0000F +C00007C00007E0000F800003E0000F000003E0001F000003F0001E000001F0003E000001 +F0003E000001F0003E000003F0007E000003E0007E000003E0007E000003E0007E000007 +E0007F000007C0007F80000FC0007FC0000F80007FE0001F00003FF0003E00003FFC007C +00001FFE00F800001FFF01F000000FFFC7C0000007FFEF00000003FFFC00000001FFFC00 +0000007FFE000000003FFF00000000FFFFC0000003E7FFE000000F83FFF000001F01FFF8 +00007C007FFC0000F8003FFE0001F0001FFE0003E00007FF0007C00003FF000F800001FF +001F800000FF801F0000007F803F0000003F803E0000003F807E0000001F807C0000001F +807C0000001F807C0000001F80FC0000001F00F80000001F00F80000001F00F80000001E +00FC0000003E007C0000003C007C0000007C007E000000F8003E000001F0003F000003E0 +001F800007C0000FC0000F800007E0003F000003FC03FC000000FFFFF00000003FFFC000 +000007FC0000002C447AC131>I<007801FC03FE03FE07FE07FE07FE03FC03F800F00000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000001E003F807FC0FFC0FFC0FFC0FFC0FF807F003C000F2B77AA1B>58 +D<00000000000C00000000000000001C00000000000000003C00000000000000003E0000 +0000000000007E00000000000000007E0000000000000000FE0000000000000000FE0000 +000000000001FE0000000000000001FF0000000000000003FF0000000000000003FF0000 +000000000006FF0000000000000006FF000000000000000CFF800000000000000CFF8000 +0000000000187F80000000000000187F80000000000000307F80000000000000307F8000 +0000000000607FC0000000000000603FC0000000000000C03FC0000000000000C03FC000 +0000000001803FC0000000000001803FE0000000000003003FE0000000000003001FE000 +0000000006001FE0000000000006001FE000000000000C001FE000000000000C001FF000 +0000000018000FF0000000000018000FF0000000000030000FF0000000000070000FF000 +0000000060000FF80000000000E0000FF80000000000C00007F80000000001C00007F800 +00000001800007F80000000003800007F80000000003000007FC0000000006000003FC00 +00000006000003FC000000000FFFFFFFFC000000000FFFFFFFFC000000001FFFFFFFFE00 +00000018000003FE0000000030000001FE0000000030000001FE0000000060000001FE00 +00000060000001FE00000000C0000001FF00000000C0000000FF0000000180000000FF00 +00000180000000FF0000000300000000FF0000000300000000FF8000000600000000FF80 +000006000000007F8000000C000000007F8000001C000000007F8000001C000000007F80 +00003C000000007FC000007C000000007FC00001FE000000007FC00007FF80000001FFF0 +007FFFE000007FFFFFC0FFFFE000007FFFFFC0FFFFE000007FFFFFC042477DC649>65 +D<001FFFFFFFFFE00000001FFFFFFFFFFC0000001FFFFFFFFFFF800000003FF800007FC0 +0000001FF000001FF00000001FF000000FF80000001FE0000007FC0000001FE0000003FC +0000001FE0000001FE0000001FE0000001FF0000001FE0000000FF0000003FE0000000FF +0000003FC0000000FF0000003FC0000000FF8000003FC0000000FF8000003FC0000000FF +8000003FC0000000FF8000007FC0000000FF0000007F80000000FF0000007F80000001FF +0000007F80000001FE0000007F80000003FE0000007F80000003FC000000FF80000007FC +000000FF0000000FF8000000FF0000000FF0000000FF0000001FE0000000FF0000007FC0 +000000FF000000FF00000001FF000003FE00000001FE00000FF800000001FE0000FFE000 +000001FFFFFFFF8000000001FFFFFFFFF000000001FE000003FC00000003FE000000FF00 +000003FC0000007F80000003FC0000003FC0000003FC0000001FE0000003FC0000000FF0 +000003FC0000000FF0000007FC00000007F8000007F800000007F8000007F800000007FC +000007F800000007FC000007F800000007FC000007F800000003FC00000FF800000003FC +00000FF000000007FC00000FF000000007FC00000FF000000007FC00000FF000000007FC +00000FF000000007F800001FF00000000FF800001FE00000000FF000001FE00000001FF0 +00001FE00000003FE000001FE00000003FE000001FE00000007FC000003FE0000000FF80 +00003FC0000001FF0000003FC0000003FE0000003FC000000FFC0000007FC000003FF000 +0000FFC00001FFE00000FFFFFFFFFFFF800000FFFFFFFFFFFC000000FFFFFFFFFFC00000 +0041447CC345>I<000000001FF80001C000000001FFFF0001C00000000FFFFFC0038000 +00003FF003F00780000001FF8000780F80000003FC00003C0F8000000FF000000E1F8000 +001FC00000073F8000007F80000003FF000000FF00000003FF000001FE00000001FF0000 +03FC00000000FF000007F800000000FF00000FF0000000007F00001FE0000000007E0000 +3FC0000000003E00007F80000000003E0000FF80000000003E0000FF00000000001E0001 +FE00000000001E0003FE00000000001C0003FC00000000001C0007FC00000000001C0007 +F800000000001C000FF800000000001C000FF800000000001C001FF0000000000018001F +F0000000000018003FF0000000000000003FE0000000000000003FE0000000000000003F +E0000000000000007FC0000000000000007FC0000000000000007FC0000000000000007F +C0000000000000007FC000000000000000FFC000000000000000FF8000000000000000FF +8000000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF +8000000000000000FF8000000000000000FF800000000000C000FF800000000000C000FF +800000000000C0007F800000000001C0007F80000000000180007F80000000000180007F +C0000000000380003FC0000000000300003FC0000000000700003FC0000000000600001F +E0000000000E00001FE0000000000C00000FE0000000001C00000FF00000000038000007 +F80000000070000003F800000000F0000003FC00000001E0000001FE00000003C0000000 +FF00000007800000007F8000000F000000003FC000003C000000000FF000007800000000 +07FC0003F00000000001FF801FC000000000007FFFFF0000000000001FFFF80000000000 +0001FFC000000000424876C546>I<001FFFFFFFFFE00000001FFFFFFFFFFE0000003FFF +FFFFFFFF800000003FF80000FFE00000001FF000001FF00000001FF0000007FC0000001F +E0000001FE0000001FE0000000FF0000001FE00000007F8000001FE00000003F8000001F +E00000001FC000003FE00000000FE000003FC00000000FE000003FC000000007F000003F +C000000007F000003FC000000007F800003FC000000003F800007FC000000003F800007F +8000000003FC00007F8000000003FC00007F8000000001FC00007F8000000001FE00007F +8000000001FE0000FF8000000001FE0000FF0000000001FE0000FF0000000001FE0000FF +0000000001FE0000FF0000000001FE0000FF0000000001FE0001FF0000000003FE0001FE +0000000003FE0001FE0000000003FE0001FE0000000003FE0001FE0000000003FE0001FE +0000000003FE0003FE0000000003FC0003FC0000000007FC0003FC0000000007FC0003FC +0000000007FC0003FC0000000007F80003FC0000000007F80007FC000000000FF80007F8 +000000000FF00007F8000000000FF00007F8000000001FF00007F8000000001FE00007F8 +000000001FE0000FF8000000003FC0000FF0000000003FC0000FF0000000007F80000FF0 +000000007F00000FF000000000FF00000FF000000000FE00001FF000000001FC00001FE0 +00000003F800001FE000000007F000001FE00000000FF000001FE00000001FE000001FE0 +0000003FC000003FE00000007F0000003FC0000000FE0000003FC0000003FC0000003FC0 +00000FF00000007FC000003FE0000000FFE00003FF800000FFFFFFFFFFFE000000FFFFFF +FFFFF0000000FFFFFFFFFF0000000047447CC34B>I<001FFFFFFFFFFFFF001FFFFFFFFF +FFFF001FFFFFFFFFFFFF00003FF800000FFF00001FF0000000FF00001FF00000007F0000 +1FE00000001F00001FE00000001F00001FE00000000F00001FE00000000700001FE00000 +000700003FE00000000700003FC00000000700003FC00000000700003FC0000000030000 +3FC00000000300003FC00000000300007FC00000000300007F800000000300007F800006 +000300007F800006000300007F800006000300007F80000600000000FF80000C00000000 +FF00000C00000000FF00000C00000000FF00001C00000000FF00001C00000000FF00003C +00000001FF0000F800000001FE0003F800000001FFFFFFF800000001FFFFFFF800000001 +FFFFFFF800000001FE0007F800000003FE0001F000000003FC0000F000000003FC000070 +00000003FC00007000000003FC00007000000003FC00007000000007FC00006000000007 +F8000060000C0007F8000060000C0007F8000060000C0007F800006000180007F8000000 +0018000FF80000000018000FF00000000030000FF00000000030000FF00000000070000F +F00000000060000FF00000000060001FF000000000E0001FE000000000C0001FE0000000 +01C0001FE000000003C0001FE00000000380001FE00000000780003FE00000000F80003F +C00000001F00003FC00000003F00003FC0000000FF00007FC0000003FE0000FFC000003F +FE00FFFFFFFFFFFFFE00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC0040447CC342>I<001FFF +FFFFFFFFFE001FFFFFFFFFFFFE001FFFFFFFFFFFFE00003FF800001FFE00001FF0000001 +FE00001FF00000007E00001FE00000003E00001FE00000001E00001FE00000001E00001F +E00000000E00001FE00000000E00003FE00000000E00003FC00000000E00003FC0000000 +0600003FC00000000600003FC00000000600003FC00000000600007FC00000000600007F +800000000600007F800000000600007F80000C000600007F80000C000600007F80000C00 +000000FF80001800000000FF00001800000000FF00001800000000FF00003800000000FF +00003800000000FF00007800000001FF00007000000001FE0001F000000001FE0007F000 +000001FFFFFFF000000001FFFFFFF000000001FFFFFFF000000003FE000FE000000003FC +0003E000000003FC0001E000000003FC0000E000000003FC0000E000000003FC0000E000 +000007FC0000C000000007F80000C000000007F80000C000000007F80000C000000007F8 +0000C000000007F80000C00000000FF80000000000000FF00000000000000FF000000000 +00000FF00000000000000FF00000000000000FF00000000000001FF00000000000001FE0 +0000000000001FE00000000000001FE00000000000001FE00000000000001FE000000000 +00003FE00000000000003FC00000000000003FC00000000000003FC00000000000007FC0 +000000000000FFF00000000000FFFFFFF800000000FFFFFFF800000000FFFFFFF8000000 +003F447CC340>I<000000001FF80001C000000001FFFF0001C00000000FFFFFC0038000 +00003FF003F00780000001FF8000780F80000003FC00003C0F8000000FF000000E1F8000 +001FC00000073F8000007F80000003FF000000FF00000003FF000001FE00000001FF0000 +03FC00000000FF000007F800000000FF00000FF0000000007F00001FE0000000007E0000 +3FC0000000003E00007F80000000003E0000FF80000000003E0000FF00000000001E0001 +FE00000000001E0003FE00000000001C0003FC00000000001C0007FC00000000001C0007 +F800000000001C000FF800000000001C000FF800000000001C001FF0000000000018001F +F0000000000018003FF0000000000000003FE0000000000000003FE0000000000000003F +E0000000000000007FC0000000000000007FC0000000000000007FC0000000000000007F +C0000000000000007FC000000000000000FFC000000000000000FF8000000000000000FF +8000000000000000FF8000000000000000FF8000000000000000FF80000001FFFFFF80FF +80000003FFFFFF80FF80000003FFFFFF80FF8000000000FFE000FF80000000007FC000FF +80000000003FC0007F80000000007FC0007F80000000007FC0007F80000000007F80007F +C0000000007F80003FC0000000007F80003FC0000000007F80003FC000000000FF80001F +E000000000FF80001FE000000000FF00000FF000000000FF00000FF000000000FF000007 +F800000001FF000003F800000001FF000003FC00000003FF000001FE00000003FE000000 +FF00000007FE0000007F8000000E7E0000003FC000001C7E0000000FF00000783E000000 +07FC0001F01E00000001FF801FC01C000000007FFFFF000C000000001FFFFC0000000000 +0001FFC000000000424876C54D>I<001FFFFFFC007FFFFFF0001FFFFFF8007FFFFFE000 +1FFFFFF8007FFFFFE000003FFC000000FFF00000001FF00000007FC00000001FF0000000 +7FC00000001FE00000007F800000001FE00000007F800000001FE00000007F800000001F +E00000007F800000001FE0000000FF800000003FE0000000FF800000003FC0000000FF00 +0000003FC0000000FF000000003FC0000000FF000000003FC0000000FF000000003FC000 +0001FF000000007FC0000001FF000000007F80000001FE000000007F80000001FE000000 +007F80000001FE000000007F80000001FE000000007F80000003FE00000000FF80000003 +FE00000000FF00000003FC00000000FF00000003FC00000000FF00000003FC00000000FF +00000003FC00000000FF00000007FC00000001FF00000007FC00000001FE00000007F800 +000001FFFFFFFFFFF800000001FFFFFFFFFFF800000001FFFFFFFFFFF800000001FE0000 +000FF800000003FE0000000FF800000003FC0000000FF000000003FC0000000FF0000000 +03FC0000000FF000000003FC0000000FF000000003FC0000001FF000000007FC0000001F +F000000007F80000001FE000000007F80000001FE000000007F80000001FE000000007F8 +0000001FE000000007F80000003FE00000000FF80000003FE00000000FF00000003FC000 +00000FF00000003FC00000000FF00000003FC00000000FF00000003FC00000000FF00000 +007FC00000001FF00000007FC00000001FE00000007F800000001FE00000007F80000000 +1FE00000007F800000001FE00000007F800000001FE0000000FF800000003FE0000000FF +800000003FC0000000FF000000003FC0000000FF000000003FC0000000FF000000007FC0 +000001FF00000000FFE0000003FF800000FFFFFFE003FFFFFF8000FFFFFFE003FFFFFF80 +00FFFFFFC003FFFFFF00004C447CC349>I<001FFFFFFE001FFFFFFE001FFFFFFE00001F +FE0000000FF80000000FF80000000FF00000000FF00000000FF00000000FF00000000FF0 +0000001FF00000001FE00000001FE00000001FE00000001FE00000001FE00000003FE000 +00003FC00000003FC00000003FC00000003FC00000003FC00000007FC00000007F800000 +007F800000007F800000007F800000007F80000000FF80000000FF00000000FF00000000 +FF00000000FF00000000FF00000001FF00000001FE00000001FE00000001FE00000001FE +00000001FE00000003FE00000003FC00000003FC00000003FC00000003FC00000003FC00 +000007FC00000007F800000007F800000007F800000007F800000007F80000000FF80000 +000FF00000000FF00000000FF00000000FF00000000FF00000001FF00000001FE0000000 +1FE00000001FE00000003FE00000007FF000007FFFFFF000FFFFFFF000FFFFFFF0002744 +7DC323>I<000007FFFFFF000007FFFFFF000007FFFFFF00000003FFC000000000FF8000 +000000FF8000000000FF0000000000FF0000000000FF0000000000FF0000000001FF0000 +000001FF0000000001FE0000000001FE0000000001FE0000000001FE0000000003FE0000 +000003FE0000000003FC0000000003FC0000000003FC0000000003FC0000000007FC0000 +000007FC0000000007F80000000007F80000000007F80000000007F8000000000FF80000 +00000FF8000000000FF0000000000FF0000000000FF0000000000FF0000000001FF00000 +00001FF0000000001FE0000000001FE0000000001FE0000000001FE0000000003FE00000 +00003FE0000000003FC0000000003FC0000000003FC0000000003FC0000000007FC00000 +00007FC0000000007F80000000007F80000000007F80000000007F80001F0000FF80007F +8000FF8000FFC000FF0000FFC000FF0000FFC000FF0000FFC001FE0000FF8001FE0000FF +8003FC0000FF0003FC0000D80007F80000E00007F0000060000FE0000070001FC0000038 +003F8000001C007F0000000F81FC00000003FFF0000000007F80000000304679C332>I< +001FFFFFFC00003FFFF8001FFFFFFC00003FFFF8003FFFFFF800003FFFF800003FFC0000 +000FFF0000001FF000000007F80000001FF000000007E00000001FE000000007C0000000 +1FE00000000F000000001FE00000001E000000001FE000000038000000001FE000000070 +000000003FE0000000E0000000003FC0000001C0000000003FC000000380000000003FC0 +00000E00000000003FC000001C00000000003FC000003800000000007FC0000070000000 +00007F800000E000000000007F8000038000000000007F8000070000000000007F80000E +0000000000007F80001C000000000000FF800038000000000000FF0000E0000000000000 +FF0001C0000000000000FF000380000000000000FF0007C0000000000000FF000FC00000 +00000001FF003FE0000000000001FE007FE0000000000001FE00FFF0000000000001FE01 +DFF0000000000001FE038FF8000000000001FE0E0FF8000000000003FE1C07FC00000000 +0003FC3807FC000000000003FC7003FE000000000003FDE003FE000000000003FF8001FF +000000000003FF0001FF000000000007FE0000FF800000000007FC0000FF800000000007 +F800007FC00000000007F800007FC00000000007F800003FE00000000007F800003FE000 +0000000FF800001FF0000000000FF000001FF0000000000FF000000FF8000000000FF000 +000FF8000000000FF0000007FC000000000FF0000007FC000000001FF0000003FE000000 +001FE0000003FE000000001FE0000001FF000000001FE0000001FF000000001FE0000000 +FF800000001FE0000000FF800000003FE00000007FC00000003FC00000007FC00000003F +C00000007FE00000003FC00000007FF00000007FC00000007FF0000000FFE0000001FFFC +0000FFFFFFE0000FFFFFE000FFFFFFE0001FFFFFE000FFFFFFE0001FFFFFE0004D447CC3 +4C>I<001FFFFFFF0000001FFFFFFF0000001FFFFFFF000000003FFC00000000001FF000 +000000001FF000000000001FE000000000001FE000000000001FE000000000001FE00000 +0000001FE000000000003FE000000000003FC000000000003FC000000000003FC0000000 +00003FC000000000003FC000000000007FC000000000007F8000000000007F8000000000 +007F8000000000007F8000000000007F800000000000FF800000000000FF000000000000 +FF000000000000FF000000000000FF000000000000FF000000000001FF000000000001FE +000000000001FE000000000001FE000000000001FE000000000001FE000000000003FE00 +0000000003FC000000000003FC000000000003FC000000000003FC000000000003FC0000 +00000007FC000000000007F8000000030007F8000000030007F8000000030007F8000000 +060007F800000006000FF800000006000FF00000000E000FF00000000C000FF00000000C +000FF00000001C000FF000000018001FF000000038001FE000000038001FE00000007800 +1FE000000070001FE0000000F0001FE0000001F0003FE0000003E0003FC0000007E0003F +C000000FE0003FC000003FE0007FC00000FFC000FFC0000FFFC0FFFFFFFFFFFFC0FFFFFF +FFFFFF80FFFFFFFFFFFF8038447CC33D>I<001FFFF00000000000FFFFC0001FFFF80000 +000000FFFF80001FFFF80000000001FFFF8000003FF800000000037FC00000001FF80000 +000003FF000000001FF80000000006FF0000000019FC0000000006FE0000000019FC0000 +00000CFE0000000019FC000000000CFE0000000019FC0000000018FE0000000018FE0000 +000019FE0000000038FE0000000031FE0000000030FE0000000031FC0000000030FE0000 +000061FC0000000030FE00000000C1FC00000000307F00000000C1FC00000000307F0000 +000183FC00000000707F0000000183FC00000000607F0000000303F800000000607F0000 +000303F800000000603F8000000603F800000000603F8000000603F800000000603F8000 +000C07F800000000E03F8000000C07F800000000C03F8000001807F000000000C01FC000 +001807F000000000C01FC000003007F000000000C01FC000006007F000000000C01FC000 +00600FF000000001C01FC00000C00FF000000001800FE00000C00FE000000001800FE000 +01800FE000000001800FE00001800FE000000001800FE00003000FE0000000018007F000 +03001FE0000000038007F00006001FE0000000030007F00006001FC0000000030007F000 +0C001FC0000000030007F00018001FC0000000030003F80018001FC0000000030003F800 +30003FC0000000070003F80030003FC0000000060003F80060003F80000000060003F800 +60003F80000000060001FC00C0003F80000000060001FC00C0003F80000000060001FC01 +80007F800000000E0001FC0180007F800000000C0001FC0300007F000000000C0000FE03 +00007F000000000C0000FE0600007F000000000C0000FE0C00007F000000000C0000FE0C +0000FF000000001C0000FE180000FF000000001800007F180000FE000000001800007F30 +0000FE000000001800007F300000FE000000001800007F600000FE000000001800003FE0 +0001FE000000003800003FC00001FE000000003800003FC00001FC000000007800003F80 +0001FC000000007800003F000001FC00000001FC00001F000003FC00000007FF00001E00 +0007FE000000FFFFF8001E0007FFFFFE0000FFFFF8001C0007FFFFFE0000FFFFF0000C00 +07FFFFFC00005A447BC359>I<001FFFF8000001FFFFF0001FFFF8000001FFFFE0001FFF +FC000001FFFFE000001FFC0000001FFC0000000FFE00000007F00000001FFE00000003E0 +00000019FF00000001C000000019FF000000018000000018FF800000018000000018FF80 +00000180000000187FC000000380000000387FC000000380000000303FE0000003000000 +00303FE000000300000000301FF000000300000000301FF000000300000000300FF80000 +0700000000700FF8000007000000006007FC000006000000006007FC0000060000000060 +03FE000006000000006003FE000006000000006001FF00000E00000000E001FF00000E00 +000000C000FF80000C00000000C000FF80000C00000000C0007FC0000C00000000C0007F +C0000C00000000C0003FE0001C00000001C0003FE0001C0000000180001FF00018000000 +0180001FF000180000000180000FF800180000000180000FF8001800000001800007FC00 +3800000003800007FC003800000003000003FE003000000003000003FE00300000000300 +0001FF003000000003000001FF003000000003000000FF807000000007000000FF807000 +0000060000007FC060000000060000007FC060000000060000003FE06000000006000000 +3FE060000000060000001FF0E00000000E0000001FF0E00000000C0000000FF8C0000000 +0C0000000FF8C00000000C00000007FCC00000000C00000007FCC00000000C00000003FF +C00000001C00000003FFC00000001800000001FF800000001800000001FF800000001800 +000000FF800000001800000000FF8000000018000000007F8000000038000000007F8000 +000038000000003F0000000078000000003F0000000078000000001F00000001FC000000 +001F00000007FF000000000F000000FFFFF80000000F000000FFFFF800000006000000FF +FFF0000000060000004C447CC349>I<000000003FF000000000000003FFFF0000000000 +001FC01FE000000000007E0003F00000000001F80000FC0000000007E000007E00000000 +0FC000003F800000003F0000000FC00000007E0000000FE0000000FC00000007F0000001 +F800000003F0000007F000000003F8000007E000000001FC00000FC000000001FC00001F +C000000000FE00003F8000000000FE00007F0000000000FF0000FF00000000007F0000FE +00000000007F0001FE00000000007F8003FC00000000007F8003FC00000000007F8007F8 +00000000003FC007F800000000003FC00FF800000000003FC00FF000000000003FC01FF0 +00000000003FC01FF000000000003FC01FE000000000003FC03FE000000000003FC03FE0 +00000000007FC03FC000000000007FC07FC000000000007FC07FC000000000007FC07FC0 +00000000007FC07FC000000000007FC07FC000000000007FC0FF800000000000FF80FF80 +0000000000FF80FF800000000000FF80FF800000000000FF80FF800000000001FF00FF80 +0000000001FF00FF800000000001FF00FF800000000001FE00FF800000000003FE00FF80 +0000000003FE00FF800000000007FC007F800000000007FC007F800000000007F8007F80 +000000000FF8007F80000000000FF0007FC0000000001FE0003FC0000000001FE0003FC0 +000000003FC0001FC0000000007F80001FE0000000007F80001FE000000000FF00000FE0 +00000001FE000007F000000001FC000007F000000003F8000003F800000007F0000001FC +0000000FE0000000FC0000001FC00000007E0000003F000000003F000000FE000000001F +800001F8000000000FE00007F00000000003F8001FC00000000000FE00FE000000000000 +3FFFF800000000000003FF8000000000424876C54C>I<001FFFFFFFFFC000001FFFFFFF +FFF800001FFFFFFFFFFF0000003FF80001FF8000001FF000003FE000001FF000000FF000 +001FE0000007F800001FE0000003FC00001FE0000003FC00001FE0000001FE00001FE000 +0001FE00003FE0000001FF00003FC0000000FF00003FC0000000FF00003FC0000000FF00 +003FC0000000FF00003FC0000000FF00007FC0000001FF00007F80000001FF00007F8000 +0001FF00007F80000001FF00007F80000001FE00007F80000003FE0000FF80000003FE00 +00FF00000003FC0000FF00000007F80000FF00000007F80000FF0000000FF00000FF0000 +001FE00001FF0000003FC00001FE0000007F000001FE000001FE000001FE000007F80000 +01FE00003FE0000001FFFFFFFF80000003FFFFFFFC00000003FC00000000000003FC0000 +0000000003FC00000000000003FC00000000000003FC00000000000007FC000000000000 +07F800000000000007F800000000000007F800000000000007F800000000000007F80000 +000000000FF80000000000000FF00000000000000FF00000000000000FF0000000000000 +0FF00000000000000FF00000000000001FF00000000000001FE00000000000001FE00000 +000000001FE00000000000001FE00000000000001FE00000000000003FE0000000000000 +3FC00000000000003FC00000000000003FC00000000000007FC0000000000000FFE00000 +000000FFFFFFE000000000FFFFFFE000000000FFFFFFC00000000040447CC342>I<001F +FFFFFFFE000000001FFFFFFFFFE00000001FFFFFFFFFF8000000003FF80007FE00000000 +1FF00000FF800000001FF000003FC00000001FE000001FE00000001FE000000FF0000000 +1FE0000007F80000001FE0000003FC0000001FE0000003FC0000003FE0000003FE000000 +3FC0000001FE0000003FC0000001FE0000003FC0000001FE0000003FC0000001FE000000 +3FC0000001FE0000007FC0000003FE0000007F80000003FE0000007F80000003FE000000 +7F80000003FE0000007F80000007FC0000007F80000007FC000000FF80000007F8000000 +FF0000000FF0000000FF0000000FE0000000FF0000001FC0000000FF0000003F80000000 +FF0000007F00000001FF000001FE00000001FE000003F800000001FE00001FE000000001 +FE0000FF8000000001FFFFFFFC0000000001FFFFFFF00000000003FE0001FC0000000003 +FC00007F0000000003FC00003F8000000003FC00001FC000000003FC00000FE000000003 +FC00000FF000000007FC000007F800000007F8000007F800000007F8000007F800000007 +F8000003F800000007F8000003F800000007F8000007F80000000FF8000007F80000000F +F0000007F80000000FF0000007F80000000FF0000007F80000000FF0000007F80000000F +F0000007F80000001FF000000FF80000001FE000000FF80000001FE000000FF80000001F +E000000FF80000001FE000000FF80000001FE000000FF80038003FE000000FF80030003F +C000000FF80030003FC000000FF80030003FC000000FF80070007FC0000007F8006000FF +E0000007F800E0FFFFFFE00003FC01C0FFFFFFE00001FC0380FFFFFFC00000FE0F000000 +000000003FFE0000000000000007F00045467CC348>82 D<0000003FE00070000001FFFC +0070000007FFFF00E000001FC01FC1E000007F0003E1E00000FC0000F3E00001F800007F +E00003F000003FE00007E000001FC0000FC000001FC0000F8000000FC0001F8000000FC0 +001F00000007C0003F00000007C0003E0000000780007E0000000780007E000000038000 +7E0000000380007E000000038000FE000000038000FE000000030000FE000000030000FF +000000030000FF000000030000FF8000000000007F8000000000007FC000000000007FF0 +00000000007FFC00000000003FFF80000000003FFFF8000000001FFFFF800000000FFFFF +F000000007FFFFFC00000003FFFFFF00000000FFFFFF800000003FFFFFC000000007FFFF +E0000000007FFFF0000000000FFFF00000000000FFF800000000001FF800000000000FFC +000000000007FC000000000003FC000000000003FC000000000001FC000000000001FC00 +0C00000001FC001C00000000FC001800000000FC001800000000FC001800000000FC0018 +00000000FC001800000001FC003800000001F8003800000001F8003C00000001F0003C00 +000003F0003C00000003F0003E00000007E0007E00000007C0007F0000000FC0007F8000 +001F80007FC000003F00007DE000007E000078F00000FC0000F87E0003F80000F01FC00F +E00000E00FFFFF800000E001FFFE000000C0003FF000000034487BC536>I<07FFFFFFFF +FFFFFF07FFFFFFFFFFFFFF07FFFFFFFFFFFFFF0FFE0003FF0003FF0FE00003FE00007F0F +C00003FE00003F0F000003FC00001F1E000003FC00000F1E000003FC00000F1C000003FC +00000718000003FC00000738000007FC00000638000007F800000630000007F800000630 +000007F800000660000007F800000660000007F80000066000000FF80000066000000FF0 +000006C000000FF0000006C000000FF0000006C000000FF00000060000000FF000000000 +00001FF00000000000001FE00000000000001FE00000000000001FE00000000000001FE0 +0000000000001FE00000000000003FE00000000000003FC00000000000003FC000000000 +00003FC00000000000003FC00000000000003FC00000000000007FC00000000000007F80 +0000000000007F800000000000007F800000000000007F800000000000007F8000000000 +0000FF80000000000000FF00000000000000FF00000000000000FF00000000000000FF00 +000000000000FF00000000000001FF00000000000001FE00000000000001FE0000000000 +0001FE00000000000001FE00000000000001FE00000000000003FE00000000000003FC00 +000000000003FC00000000000003FC00000000000003FC00000000000003FC0000000000 +0007FC00000000000007F800000000000007F800000000000007F80000000000000FF800 +00000000003FFE0000000001FFFFFFFFC0000001FFFFFFFF80000001FFFFFFFF80000040 +4475C346>IIII<0007FFFFFC0003FFFFE00007FFFFFC0003FFFFE0000FFFFFFC0007FFFFE000001F +FFC00000FFFC00000007FF0000007FC000000003FF0000003F0000000003FE0000003E00 +00000001FF0000003C0000000001FF000000380000000000FF800000700000000000FF80 +0000E000000000007FC00001C000000000007FC000018000000000003FE0000300000000 +00003FE000060000000000001FF0000C0000000000001FF0001C0000000000000FF80038 +0000000000000FF8003000000000000007FC006000000000000007FC00C0000000000000 +03FE018000000000000003FE038000000000000001FF070000000000000001FF0E000000 +0000000000FF8C0000000000000000FF9800000000000000007FF000000000000000007F +E000000000000000003FE000000000000000003FE000000000000000001FF00000000000 +0000001FF000000000000000000FF800000000000000000FF800000000000000001FFC00 +000000000000003FFC000000000000000073FE000000000000000063FE00000000000000 +00C1FF000000000000000181FF000000000000000380FF800000000000000700FF800000 +000000000E007FC00000000000000C007FC000000000000018007FE00000000000003000 +3FE000000000000060003FF0000000000000E0001FF0000000000001C0001FF000000000 +000180000FF800000000000300000FF8000000000006000007FC00000000000C000007FC +00000000001C000003FE000000000038000003FE000000000070000001FF000000000060 +000001FF0000000000C0000000FF8000000001C0000000FF8000000003800000007FC000 +00000F800000007FE00000001F800000007FE00000007FC0000000FFF0000003FFE00000 +03FFFC00007FFFFC00001FFFFFF000FFFFFC00001FFFFFF000FFFFFC00001FFFFFF0004B +447EC349>II E /FH 47 122 df<00000000007FFF8000000000000000 +1FFFFFF000000000000001FFFFFFFC0000000000000FFFFFFFFE0000000000007FFFFFFF +FF800000000001FFFFE007FFC00000000003FFFE00007FE0000000000FFFF000001FF000 +0000001FFFC000007FF0000000003FFF000000FFF8000000007FFE000001FFF800000000 +FFFC000003FFFC00000001FFF8000007FFFC00000003FFF0000007FFFC00000003FFF000 +0007FFFC00000007FFE0000007FFFC00000007FFE000000FFFFE0000000FFFE0000007FF +FC0000000FFFC0000007FFFC0000000FFFC0000007FFFC0000000FFFC0000007FFFC0000 +000FFFC0000003FFF80000000FFFC0000001FFF00000000FFFC0000000FFE00000000FFF +C00000007FC00000000FFFC000000000000000000FFFC000000000000000000FFFC00000 +0000000000000FFFC000000000000000000FFFC000000000000000000FFFC00000000000 +0000000FFFC000000000000000000FFFC000000000000000000FFFC00000000000000000 +0FFFC000000000000000000FFFC000000000000000000FFFC00003FFFFFE0000FFFFFFFF +FFFFFFFFFE0000FFFFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFF +FFFE0000FFFFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFFFFE0000000FFFE0000001FFFE00 +00000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000F +FFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE000 +0000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FF +FE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000 +000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFF +E0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE00000 +00FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE +0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE000000 +0FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0 +000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000 +FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE00 +00000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000F +FFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE000 +0000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FF +FE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000 +000FFFE0000000FFFE0000000FFFE0000000FFFE00003FFFFFFFF803FFFFFFFF803FFFFF +FFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803 +FFFFFFFF803FFFFFFFF803FFFFFFFF8051657DE45A>12 D<00000000F000000000000001 +F800000000000007F80000000000001FF80000000000003FF8000000000001FFF8000000 +000007FFF800000000007FFFF8000000000FFFFFF8000000FFFFFFFFF8000000FFFFFFFF +F8000000FFFFFFFFF8000000FFFFFFFFF8000000FFFF87FFF8000000FFF007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF +F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 +000007FFF80000007FFFFFFFFFFFFF807FFFFFFFFFFFFF807FFFFFFFFFFFFF807FFFFFFF +FFFFFF807FFFFFFFFFFFFF807FFFFFFFFFFFFF80395E74DD51>49 +D<000001FFF800000000001FFFFFC000000000FFFFFFF800000003FFFFFFFF0000000FFF +FFFFFFC000003FFFFFFFFFE000007FFC01FFFFF80000FFE0003FFFFC0001FF00000FFFFE +0003FE000007FFFF0007F8000003FFFF800FF0000001FFFFC01FE0000000FFFFE03FC000 +00007FFFF03FFC0000007FFFF87FFE0000003FFFF87FFF0000003FFFFC7FFF8000001FFF +FCFFFFC000001FFFFEFFFFC000000FFFFEFFFFE000000FFFFEFFFFE000000FFFFEFFFFE0 +00000FFFFFFFFFE000000FFFFFFFFFE0000007FFFFFFFFE0000007FFFFFFFFE0000007FF +FF7FFFC0000007FFFF7FFFC0000007FFFF3FFF80000007FFFF1FFF00000007FFFF07FC00 +00000FFFFF01F00000000FFFFF00000000000FFFFE00000000000FFFFE00000000000FFF +FE00000000001FFFFC00000000001FFFFC00000000001FFFF800000000003FFFF8000000 +00003FFFF000000000007FFFE000000000007FFFE00000000000FFFFC00000000000FFFF +800000000001FFFF000000000003FFFE000000000003FFFC000000000007FFF800000000 +000FFFF000000000000FFFE000000000001FFF8000000000003FFF0000000000007FFE00 +0000000000FFFC000000000001FFF0000000000001FFE0000000000003FF800000000000 +07FF0000000000000FFE0000000000001FF80000000000003FF00000000000007FE00000 +00000000FFC000003F000001FF8000003F000003FE0000003F000007FC0000003F00000F +F80000007E00001FF00000007E00003FE00000007E00007F800000007E00007F00000000 +7E0000FE00000000FE0001FC00000000FE0003F800000000FE0007F000000001FC000FC0 +00000007FC001FFFFFFFFFFFFC003FFFFFFFFFFFFC007FFFFFFFFFFFFC00FFFFFFFFFFFF +FC01FFFFFFFFFFFFFC03FFFFFFFFFFFFF807FFFFFFFFFFFFF80FFFFFFFFFFFFFF81FFFFF +FFFFFFFFF83FFFFFFFFFFFFFF87FFFFFFFFFFFFFF8FFFFFFFFFFFFFFF8FFFFFFFFFFFFFF +F8FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0405E78 +DD51>I<000000FFFF0000000000000FFFFFF800000000003FFFFFFF0000000001FFFFFF +FFC000000003FFFFFFFFF00000000FFFC01FFFFC0000001FFC0007FFFE0000003FE00001 +FFFF0000007FC00000FFFF800000FF0000007FFFC00001FE0000007FFFE00003FF000000 +3FFFF00003FFC000003FFFF00007FFE000003FFFF80007FFF000001FFFF80007FFF80000 +1FFFFC000FFFFC00001FFFFC000FFFFC00001FFFFC000FFFFC00001FFFFC000FFFFC0000 +1FFFFC000FFFFE00001FFFFC000FFFFC00001FFFFC000FFFFC00001FFFFC000FFFFC0000 +1FFFFC0007FFFC00003FFFFC0007FFF800003FFFF80003FFF000003FFFF80001FFE00000 +3FFFF80000FFC000003FFFF000001F0000007FFFF00000000000007FFFE0000000000000 +7FFFE0000000000000FFFFC0000000000000FFFF80000000000001FFFF00000000000001 +FFFE00000000000003FFFC00000000000007FFF80000000000000FFFF00000000000001F +FFE00000000000007FFF8000000000000FFFFE00000000000FFFFFF800000000000FFFFF +E000000000000FFFFF0000000000000FFFFFF800000000000FFFFFFF000000000000003F +FFE000000000000007FFF800000000000001FFFE00000000000000FFFF00000000000000 +7FFF800000000000003FFFE00000000000003FFFF00000000000001FFFF8000000000000 +1FFFF80000000000000FFFFC0000000000000FFFFE0000000000000FFFFE000000000000 +0FFFFF00000000000007FFFF00000000000007FFFF80000000000007FFFF800000000000 +07FFFF80000000000007FFFFC003FC00000007FFFFC00FFF00000007FFFFC01FFF800000 +07FFFFC03FFFC0000007FFFFC07FFFE0000007FFFFC07FFFE0000007FFFFC0FFFFF00000 +07FFFFC0FFFFF0000007FFFFC0FFFFF0000007FFFFC0FFFFF0000007FFFF80FFFFF00000 +07FFFF80FFFFF0000007FFFF80FFFFF000000FFFFF00FFFFE000000FFFFF007FFFE00000 +0FFFFF007FFFC000000FFFFE007FFFC000001FFFFE003FFF8000001FFFFC003FFE000000 +3FFFF8001FF80000003FFFF0000FF80000007FFFF00007FE000000FFFFE00003FF800001 +FFFF800001FFF00007FFFF000000FFFF803FFFFE0000007FFFFFFFFFFC0000001FFFFFFF +FFF000000007FFFFFFFFC000000001FFFFFFFE00000000001FFFFFF0000000000001FFFE +00000000426079DD51>I<0000000000001F80000000000000003FC0000000000000007F +C000000000000000FFC000000000000000FFC000000000000001FFC000000000000003FF +C000000000000007FFC00000000000000FFFC00000000000000FFFC00000000000001FFF +C00000000000003FFFC00000000000007FFFC00000000000007FFFC0000000000000FFFF +C0000000000001FFFFC0000000000003FFFFC0000000000007FFFFC0000000000007FFFF +C000000000000FFFFFC000000000001FFFFFC000000000003FBFFFC000000000007F3FFF +C000000000007F3FFFC00000000000FE3FFFC00000000001FC3FFFC00000000003F83FFF +C00000000007F03FFFC00000000007F03FFFC0000000000FE03FFFC0000000001FC03FFF +C0000000003F803FFFC0000000003F003FFFC0000000007F003FFFC000000000FE003FFF +C000000001FC003FFFC000000003F8003FFFC000000003F8003FFFC000000007F0003FFF +C00000000FE0003FFFC00000001FC0003FFFC00000003F80003FFFC00000003F80003FFF +C00000007F00003FFFC0000000FE00003FFFC0000001FC00003FFFC0000001F800003FFF +C0000003F800003FFFC0000007F000003FFFC000000FE000003FFFC000001FC000003FFF +C000001F8000003FFFC000003F8000003FFFC000007F0000003FFFC00000FE0000003FFF +C00001FC0000003FFFC00001FC0000003FFFC00003F80000003FFFC00007F00000003FFF +C0000FE00000003FFFC0000FC00000003FFFC0001FC00000003FFFC0003F800000003FFF +C0007F000000003FFFC000FE000000003FFFC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF00000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF +C00000000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF +C00000000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF +C00000000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF +C00000000000007FFFC0000000007FFFFFFFFFFF0000007FFFFFFFFFFF0000007FFFFFFF +FFFF0000007FFFFFFFFFFF0000007FFFFFFFFFFF0000007FFFFFFFFFFF485E7CDD51>I< +00C00000000001C001F8000000000FC001FF000000007FC001FFF0000007FFC001FFFF80 +00FFFFC001FFFFFFFFFFFF8001FFFFFFFFFFFF0001FFFFFFFFFFFE0001FFFFFFFFFFFC00 +01FFFFFFFFFFF80001FFFFFFFFFFF00001FFFFFFFFFFE00001FFFFFFFFFFC00001FFFFFF +FFFF800001FFFFFFFFFF000001FFFFFFFFFC000001FFFFFFFFF8000001FFFFFFFFE00000 +01FFFFFFFF80000001FFFFFFFC00000001FFFFFFE000000001FC3FFC0000000001FC0000 +0000000001FC00000000000001FC00000000000001FC00000000000001FC000000000000 +01FC00000000000001FC00000000000001FC00000000000001FC00000000000001FC0000 +0000000001FC00000000000001FC00000000000001FC00000000000001FC003FFE000000 +01FC03FFFFF0000001FC0FFFFFFE000001FC3FFFFFFF800001FCFFFFFFFFE00001FDFFE0 +0FFFF00001FFFE0003FFF80001FFF80000FFFC0001FFE000007FFF0001FF8000003FFF80 +01FF0000003FFF8001FE0000001FFFC001FC0000001FFFE001FC0000000FFFF000F00000 +000FFFF000000000000FFFF800000000000FFFF800000000000FFFFC000000000007FFFC +000000000007FFFC000000000007FFFE000000000007FFFE000000000007FFFE00000000 +0007FFFE000000000007FFFF000000000007FFFF000000000007FFFF03F000000007FFFF +0FFC00000007FFFF1FFE00000007FFFF3FFF00000007FFFF7FFF80000007FFFF7FFF8000 +0007FFFFFFFFC0000007FFFFFFFFC0000007FFFFFFFFC0000007FFFFFFFFC0000007FFFE +FFFFC0000007FFFEFFFFC0000007FFFEFFFF80000007FFFEFFFF8000000FFFFC7FFF0000 +000FFFFC7FFE0000000FFFFC7FFC0000000FFFF83FF00000000FFFF83F800000001FFFF0 +3FC00000001FFFE01FC00000003FFFE00FE00000003FFFC00FF00000007FFF8007FC0000 +00FFFF0003FE000001FFFE0001FF800007FFFC0000FFE0001FFFF800007FFE00FFFFF000 +003FFFFFFFFFC000000FFFFFFFFF00000007FFFFFFFC00000001FFFFFFF0000000003FFF +FF800000000003FFF0000000406078DD51>I<000000001FFF00000000000003FFFFE000 +000000001FFFFFF80000000000FFFFFFFE0000000003FFFFFFFF0000000007FFFC03FF80 +0000001FFFC0007FC00000003FFF00001FE0000000FFFC00000FF0000001FFF8000007F0 +000003FFF000007FF8000007FFE00000FFF800000FFFC00001FFF800001FFF800003FFFC +00003FFF000003FFFC00007FFF000007FFFC00007FFE000007FFFC0000FFFE000007FFFC +0001FFFC000007FFFC0001FFFC000007FFFC0003FFFC000007FFFC0003FFF8000003FFF8 +0007FFF8000003FFF80007FFF8000001FFF0000FFFF0000000FFE0000FFFF00000007FC0 +001FFFF00000000000001FFFF00000000000001FFFF00000000000003FFFF00000000000 +003FFFF00000000000003FFFF00000000000003FFFE00000000000007FFFE001FFE00000 +007FFFE00FFFFE0000007FFFE03FFFFF8000007FFFE07FFFFFE000007FFFE0FFFFFFF800 +007FFFE1FE03FFFC0000FFFFE3F0007FFE0000FFFFE7E0003FFF0000FFFFEFC0001FFF80 +00FFFFEF80000FFFC000FFFFFF000007FFE000FFFFFE000007FFF000FFFFFE000003FFF8 +00FFFFFC000003FFFC00FFFFFC000003FFFC00FFFFF8000003FFFE00FFFFF8000001FFFE +00FFFFF8000001FFFF00FFFFF8000001FFFF00FFFFF0000001FFFF80FFFFF0000001FFFF +80FFFFF0000001FFFF80FFFFF0000001FFFF80FFFFF0000001FFFF80FFFFE0000001FFFF +C0FFFFE0000001FFFFC0FFFFE0000001FFFFC07FFFE0000001FFFFC07FFFE0000001FFFF +C07FFFE0000001FFFFC07FFFE0000001FFFFC07FFFE0000001FFFFC07FFFE0000001FFFF +C07FFFE0000001FFFFC03FFFE0000001FFFFC03FFFE0000001FFFFC03FFFE0000001FFFF +C03FFFE0000001FFFFC01FFFE0000001FFFFC01FFFF0000001FFFF801FFFF0000001FFFF +800FFFF0000001FFFF800FFFF0000001FFFF800FFFF0000001FFFF0007FFF0000001FFFF +0007FFF0000003FFFE0003FFF0000003FFFE0003FFF8000003FFFC0001FFF8000003FFFC +0001FFFC000003FFF80000FFFC000007FFF000007FFE000007FFF000003FFE00000FFFE0 +00001FFF00001FFFC000000FFFC0003FFF80000007FFE000FFFF00000003FFFC07FFFC00 +000001FFFFFFFFF800000000FFFFFFFFF0000000003FFFFFFFC0000000000FFFFFFF0000 +00000001FFFFF80000000000001FFF80000000426079DD51>I<07E0000000000000000F +E0000000000000000FF0000000000000000FFC000000000000000FFFFC0000000000000F +FFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF81F +FFFFFFFFFFFFFFF81FFFFFFFFFFFFFFFF81FFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFE01F +FFFFFFFFFFFFFFC01FFFFFFFFFFFFFFF801FFFFFFFFFFFFFFF001FFFFFFFFFFFFFFF003F +FFFFFFFFFFFFFE003FFFFFFFFFFFFFFC003FFFFFFFFFFFFFF8003FFFFFFFFFFFFFF0003F +FFFFFFFFFFFFE0003FE0000000003FE0003F80000000007FC0007F0000000000FF80007F +0000000001FF00007F0000000001FE00007E0000000003FC00007E0000000007FC00007E +000000000FF800007E000000001FF000007E000000003FE00000FC000000003FC00000FC +000000007F800000FC00000000FF800000FC00000001FF0000000000000003FE00000000 +00000003FC0000000000000007F8000000000000000FF8000000000000001FF000000000 +0000001FE0000000000000003FE0000000000000007FC000000000000000FFC000000000 +000000FF8000000000000001FF8000000000000001FF0000000000000003FF0000000000 +000007FF0000000000000007FE000000000000000FFE000000000000000FFE0000000000 +00001FFC000000000000001FFC000000000000003FFC000000000000003FFC0000000000 +00007FF8000000000000007FF800000000000000FFF800000000000000FFF80000000000 +0000FFF800000000000001FFF000000000000001FFF000000000000003FFF00000000000 +0003FFF000000000000003FFF000000000000007FFF000000000000007FFF00000000000 +0007FFF000000000000007FFF00000000000000FFFE00000000000000FFFE00000000000 +000FFFE00000000000000FFFE00000000000001FFFE00000000000001FFFE00000000000 +001FFFE00000000000001FFFE00000000000001FFFE00000000000001FFFE00000000000 +003FFFE00000000000003FFFE00000000000003FFFE00000000000003FFFE00000000000 +003FFFE00000000000003FFFE00000000000003FFFE00000000000003FFFE00000000000 +003FFFE00000000000003FFFE00000000000003FFFE00000000000003FFFE00000000000 +003FFFE00000000000001FFFC00000000000001FFFC00000000000000FFF800000000000 +0003FE0000000000000001FC0000000000456377E051>I<0000003FFF80000000000003 +FFFFFC00000000001FFFFFFF80000000007FFFFFFFE000000001FFFFFFFFF800000003FF +F007FFFC0000000FFF00007FFE0000001FFC00001FFF0000003FF000000FFF8000007FE0 +000003FFC00000FFC0000003FFE00000FFC0000001FFF00001FF80000000FFF00001FF80 +000000FFF80003FF000000007FF80003FF000000007FF80007FF000000007FFC0007FF00 +0000003FFC0007FF000000003FFC000FFF000000003FFC000FFF800000003FFC000FFF80 +0000003FFC000FFF800000003FFC000FFFC00000003FFC000FFFE00000003FFC000FFFF0 +0000007FFC000FFFF80000007FF8000FFFFE0000007FF8000FFFFF8000007FF8000FFFFF +C00000FFF00007FFFFF00000FFF00007FFFFFC0001FFE00007FFFFFF0003FFC00003FFFF +FF8003FFC00003FFFFFFE007FF800001FFFFFFF80FFF000001FFFFFFFE1FFE000000FFFF +FFFF7FF8000000FFFFFFFFFFF00000007FFFFFFFFFC00000003FFFFFFFFF800000001FFF +FFFFFE000000000FFFFFFFFF8000000007FFFFFFFFE000000001FFFFFFFFF000000000FF +FFFFFFFC000000003FFFFFFFFE000000007FFFFFFFFF00000001FFFFFFFFFF80000007FF +FFFFFFFFC000000FFFFFFFFFFFE000003FFE3FFFFFFFF000007FFC0FFFFFFFF80000FFF0 +03FFFFFFFC0001FFE000FFFFFFFC0003FFC0007FFFFFFE0007FF80001FFFFFFE000FFF00 +0007FFFFFF000FFF000001FFFFFF001FFE000000FFFFFF803FFE0000003FFFFF803FFC00 +00000FFFFF807FFC00000007FFFFC07FF800000001FFFFC07FF8000000007FFFC07FF800 +0000003FFFC0FFF8000000001FFFC0FFF0000000001FFFC0FFF0000000000FFFC0FFF000 +00000007FFC0FFF00000000007FFC0FFF00000000007FFC0FFF00000000003FFC0FFF000 +00000003FFC0FFF00000000003FF80FFF00000000003FF80FFF80000000003FF807FF800 +00000003FF007FF80000000007FF007FFC0000000007FF003FFC0000000007FE003FFE00 +0000000FFE001FFE000000000FFC001FFF000000001FF8000FFF800000003FF80007FFC0 +0000007FF00003FFF0000000FFE00001FFFC000003FFC00000FFFF00001FFF8000007FFF +F001FFFE0000003FFFFFFFFFFC0000000FFFFFFFFFF000000003FFFFFFFFE000000000FF +FFFFFF00000000000FFFFFF80000000000007FFF00000000426079DD51>I<01FC0007FF +000FFF801FFFC03FFFE07FFFF07FFFF0FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFF +F87FFFF07FFFF03FFFE01FFFC00FFF8007FF0001FC000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000001FC0007FF000FFF801FFFC03FFFE07FFFF07FFF +F0FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF87FFFF07FFFF03FFFE01FFFC00FFF +8007FF0001FC00154074BF2D>58 D<0000000000000FE00000000000000000000000001F +F00000000000000000000000001FF00000000000000000000000003FF800000000000000 +00000000003FF80000000000000000000000003FF80000000000000000000000007FFC00 +00000000000000000000007FFC000000000000000000000000FFFE000000000000000000 +000000FFFE000000000000000000000000FFFE000000000000000000000001FFFF000000 +000000000000000001FFFF000000000000000000000003FFFF8000000000000000000000 +03FFFF800000000000000000000007FFFFC00000000000000000000007FFFFC000000000 +00000000000007FFFFC0000000000000000000000FFFFFE0000000000000000000000FFF +FFE0000000000000000000001FFFFFF0000000000000000000001FFFFFF0000000000000 +000000001FFFFFF0000000000000000000003FFFFFF8000000000000000000003FFFFFF8 +000000000000000000007FBFFFFC000000000000000000007FBFFFFC0000000000000000 +00007F1FFFFC00000000000000000000FF1FFFFE00000000000000000000FE1FFFFE0000 +0000000000000001FE0FFFFF00000000000000000001FE0FFFFF00000000000000000001 +FC07FFFF00000000000000000003FC07FFFF80000000000000000003F807FFFF80000000 +000000000007F803FFFFC0000000000000000007F803FFFFC0000000000000000007F001 +FFFFC000000000000000000FF001FFFFE000000000000000000FE001FFFFE00000000000 +0000001FE000FFFFF000000000000000001FE000FFFFF000000000000000001FC0007FFF +F000000000000000003FC0007FFFF800000000000000003F80007FFFF800000000000000 +007F80003FFFFC00000000000000007F80003FFFFC00000000000000007F00001FFFFC00 +00000000000000FF00001FFFFE0000000000000000FE00001FFFFE0000000000000001FE +00000FFFFF0000000000000001FE00000FFFFF0000000000000001FC000007FFFF000000 +0000000003FC000007FFFF8000000000000003F8000007FFFF8000000000000007F80000 +03FFFFC000000000000007F8000003FFFFC000000000000007F0000001FFFFC000000000 +00000FF0000001FFFFE00000000000000FE0000001FFFFE00000000000001FE0000000FF +FFF00000000000001FE0000000FFFFF00000000000001FC00000007FFFF0000000000000 +3FC00000007FFFF80000000000003F800000007FFFF80000000000007F800000003FFFFC +0000000000007FFFFFFFFFFFFFFC0000000000007FFFFFFFFFFFFFFC000000000000FFFF +FFFFFFFFFFFE000000000000FFFFFFFFFFFFFFFE000000000001FFFFFFFFFFFFFFFF0000 +00000001FFFFFFFFFFFFFFFF000000000001FC0000000007FFFF000000000003FC000000 +0007FFFF800000000003F80000000007FFFF800000000007F80000000003FFFFC0000000 +0007F00000000003FFFFC00000000007F00000000001FFFFC0000000000FF00000000001 +FFFFE0000000000FE00000000000FFFFE0000000001FE00000000000FFFFF0000000001F +C00000000000FFFFF0000000001FC000000000007FFFF0000000003FC000000000007FFF +F8000000003F8000000000003FFFF8000000007F8000000000003FFFFC000000007F0000 +000000003FFFFC000000007F0000000000001FFFFC00000000FF0000000000001FFFFE00 +000000FE0000000000000FFFFE00000001FE0000000000000FFFFF00000001FC00000000 +00000FFFFF00000003FE00000000000007FFFF8000001FFFC0000000000007FFFF8000FF +FFFFFFE0000000FFFFFFFFFFFEFFFFFFFFE0000000FFFFFFFFFFFEFFFFFFFFE0000000FF +FFFFFFFFFEFFFFFFFFE0000000FFFFFFFFFFFEFFFFFFFFE0000000FFFFFFFFFFFEFFFFFF +FFE0000000FFFFFFFFFFFE6F647BE37A>65 DI<000000000001FFFF00000003C000000000007FFFFFF0000007C00000000007FF +FFFFFE00000FC0000000007FFFFFFFFFC0001FC000000001FFFFFFFFFFF0003FC0000000 +0FFFFFFFFFFFFC007FC00000003FFFFFF8007FFE00FFC0000000FFFFFF000007FF81FFC0 +000001FFFFF0000001FFC3FFC0000007FFFFC00000007FE7FFC000000FFFFF000000001F +FFFFC000003FFFFC0000000007FFFFC000007FFFF00000000003FFFFC00000FFFFE00000 +000001FFFFC00001FFFF800000000000FFFFC00003FFFF0000000000007FFFC00007FFFE +0000000000003FFFC0000FFFFC0000000000001FFFC0001FFFF80000000000000FFFC000 +3FFFF800000000000007FFC0003FFFF000000000000007FFC0007FFFE000000000000003 +FFC000FFFFE000000000000003FFC001FFFFC000000000000001FFC001FFFFC000000000 +000001FFC003FFFF8000000000000000FFC003FFFF8000000000000000FFC007FFFF0000 +0000000000007FC007FFFF00000000000000007FC00FFFFF00000000000000007FC00FFF +FE00000000000000003FC01FFFFE00000000000000003FC01FFFFE00000000000000003F +C01FFFFE00000000000000003FC03FFFFC00000000000000001FC03FFFFC000000000000 +00001FC03FFFFC00000000000000001FC03FFFFC00000000000000001FC07FFFFC000000 +000000000000007FFFFC000000000000000000007FFFF8000000000000000000007FFFF8 +000000000000000000007FFFF800000000000000000000FFFFF800000000000000000000 +FFFFF800000000000000000000FFFFF800000000000000000000FFFFF800000000000000 +000000FFFFF800000000000000000000FFFFF800000000000000000000FFFFF800000000 +000000000000FFFFF800000000000000000000FFFFF800000000000000000000FFFFF800 +000000000000000000FFFFF800000000000000000000FFFFF800000000000000000000FF +FFF800000000000000000000FFFFF800000000000000000000FFFFF80000000000000000 +0000FFFFF8000000000000000000007FFFF8000000000000000000007FFFF80000000000 +00000000007FFFF8000000000000000000007FFFFC000000000000000000007FFFFC0000 +00000000000000003FFFFC000000000000000000003FFFFC000000000000000000003FFF +FC00000000000000000FC03FFFFC00000000000000000FC01FFFFE00000000000000000F +C01FFFFE00000000000000000FC01FFFFE00000000000000000FC00FFFFE000000000000 +00000FC00FFFFF00000000000000001FC007FFFF00000000000000001F8007FFFF000000 +00000000001F8003FFFF80000000000000001F8003FFFF80000000000000003F8001FFFF +C0000000000000003F0001FFFFC0000000000000003F0000FFFFE0000000000000007F00 +007FFFE000000000000000FE00003FFFF000000000000000FE00003FFFF8000000000000 +01FC00001FFFF800000000000001FC00000FFFFC00000000000003F8000007FFFE000000 +00000007F0000003FFFF0000000000000FE0000001FFFF8000000000001FE0000000FFFF +E000000000003FC00000007FFFF00000000000FF800000003FFFFC0000000001FF000000 +000FFFFF0000000007FE0000000007FFFFC00000001FF80000000001FFFFF80000007FF0 +0000000000FFFFFF000003FFE000000000003FFFFFF8003FFF8000000000000FFFFFFFFF +FFFE00000000000001FFFFFFFFFFF8000000000000007FFFFFFFFFE00000000000000007 +FFFFFFFF8000000000000000007FFFFFF800000000000000000001FFFF00000000006266 +77E375>IIII73 D77 DI<00000000001FFFE000000000000000000007FFFFFF800000 +0000000000003FFFFFFFF00000000000000001FFFFFFFFFE000000000000000FFFFFFFFF +FFC00000000000003FFFFC00FFFFF0000000000000FFFFC0000FFFFC000000000003FFFE +000001FFFF000000000007FFF80000007FFF80000000001FFFF00000003FFFE000000000 +3FFFC00000000FFFF0000000007FFF8000000007FFF800000000FFFF0000000003FFFC00 +000003FFFE0000000001FFFF00000007FFFC0000000000FFFF80000007FFF80000000000 +7FFF8000000FFFF000000000003FFFC000001FFFF000000000003FFFE000003FFFE00000 +0000001FFFF000007FFFE000000000001FFFF800007FFFC000000000000FFFF80000FFFF +C000000000000FFFFC0001FFFF80000000000007FFFE0001FFFF80000000000007FFFE00 +03FFFF00000000000003FFFF0003FFFF00000000000003FFFF0007FFFF00000000000003 +FFFF8007FFFE00000000000001FFFF800FFFFE00000000000001FFFFC00FFFFE00000000 +000001FFFFC00FFFFE00000000000001FFFFC01FFFFC00000000000000FFFFE01FFFFC00 +000000000000FFFFE01FFFFC00000000000000FFFFE03FFFFC00000000000000FFFFF03F +FFFC00000000000000FFFFF03FFFFC00000000000000FFFFF03FFFF8000000000000007F +FFF07FFFF8000000000000007FFFF87FFFF8000000000000007FFFF87FFFF80000000000 +00007FFFF87FFFF8000000000000007FFFF87FFFF8000000000000007FFFF8FFFFF80000 +00000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFF +F8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFF +FCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000 +007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000 +000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8 +000000000000007FFFFCFFFFF8000000000000007FFFFC7FFFF8000000000000007FFFF8 +7FFFF8000000000000007FFFF87FFFF8000000000000007FFFF87FFFFC00000000000000 +FFFFF87FFFFC00000000000000FFFFF87FFFFC00000000000000FFFFF83FFFFC00000000 +000000FFFFF03FFFFC00000000000000FFFFF03FFFFC00000000000000FFFFF03FFFFC00 +000000000000FFFFF01FFFFE00000000000001FFFFE01FFFFE00000000000001FFFFE01F +FFFE00000000000001FFFFE00FFFFE00000000000001FFFFC00FFFFF00000000000003FF +FFC007FFFF00000000000003FFFF8007FFFF00000000000003FFFF8003FFFF8000000000 +0007FFFF0003FFFF80000000000007FFFF0001FFFFC000000000000FFFFE0001FFFFC000 +000000000FFFFE0000FFFFE000000000001FFFFC0000FFFFE000000000001FFFFC00007F +FFF000000000003FFFF800003FFFF000000000003FFFF000001FFFF800000000007FFFE0 +00001FFFFC0000000000FFFFE000000FFFFC0000000000FFFFC0000007FFFE0000000001 +FFFF80000003FFFF0000000003FFFF00000001FFFF8000000007FFFE00000000FFFFE000 +00001FFFFC000000003FFFF00000003FFFF0000000001FFFFC000000FFFFE0000000000F +FFFF000003FFFFC00000000003FFFFC0000FFFFF000000000000FFFFFC00FFFFFC000000 +0000003FFFFFFFFFFFF00000000000000FFFFFFFFFFFC000000000000003FFFFFFFFFF00 +000000000000007FFFFFFFF8000000000000000007FFFFFF800000000000000000001FFF +E00000000000666677E379>II82 D86 D<000003FFFE000000000000007FFFFF +F0000000000003FFFFFFFE00000000000FFFFFFFFF80000000001FFFFFFFFFE000000000 +3FFE001FFFF0000000007FE00007FFF800000000FFF80001FFFC00000001FFFC0000FFFE +00000001FFFC00007FFF00000003FFFE00003FFF80000003FFFE00003FFFC0000003FFFE +00001FFFE0000003FFFE00001FFFE0000003FFFE00000FFFF0000003FFFE00000FFFF000 +0003FFFE00000FFFF0000001FFFC000007FFF8000001FFFC000007FFF8000000FFF80000 +07FFF80000007FF0000007FFF80000001FC0000007FFF80000000000000007FFF8000000 +0000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF +F80000000000000007FFF80000000000000007FFF8000000000001FFFFFFF80000000000 +7FFFFFFFF80000000007FFFFFFFFF8000000007FFFFFFFFFF800000001FFFFFF07FFF800 +00000FFFFFC007FFF80000003FFFFE0007FFF80000007FFFF00007FFF8000001FFFFC000 +07FFF8000003FFFF000007FFF8000007FFFE000007FFF800000FFFF8000007FFF800001F +FFF8000007FFF800001FFFF0000007FFF800003FFFE0000007FFF800007FFFE0000007FF +F800007FFFC0000007FFF800007FFFC0000007FFF80000FFFF80000007FFF80000FFFF80 +000007FFF80000FFFF80000007FFF80000FFFF80000007FFF80000FFFF8000000FFFF800 +00FFFF8000000FFFF80000FFFF8000001FFFF80000FFFFC000001FFFF800007FFFC00000 +3FFFF800007FFFE000003FFFF800003FFFE000007DFFFC00003FFFF00001F9FFFC00001F +FFF80003F1FFFF80000FFFFE000FE1FFFFFF0007FFFFC07FC0FFFFFF8001FFFFFFFF807F +FFFF80007FFFFFFF003FFFFF80001FFFFFFC000FFFFF800003FFFFF00001FFFF0000001F +FF00000000000049437CC14E>97 D<0007FF80000000000000FFFFFF80000000000000FF +FFFF80000000000000FFFFFF80000000000000FFFFFF80000000000000FFFFFF80000000 +000000FFFFFF8000000000000000FFFF80000000000000007FFF80000000000000003FFF +80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000 +00003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000 +0000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000000 +3FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000 +000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF +80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000 +00003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000 +0000000000003FFF8000FFF8000000003FFF800FFFFF800000003FFF807FFFFFF0000000 +3FFF81FFFFFFFC0000003FFF87FFFFFFFF0000003FFF8FFF00FFFFC000003FFFBFF0001F +FFE000003FFFFFC00007FFF000003FFFFF000003FFF800003FFFFE000000FFFC00003FFF +F8000000FFFE00003FFFF00000007FFF00003FFFE00000003FFF80003FFFC00000003FFF +C0003FFFC00000001FFFC0003FFFC00000001FFFE0003FFFC00000001FFFE0003FFFC000 +00000FFFF0003FFFC00000000FFFF0003FFFC00000000FFFF8003FFFC00000000FFFF800 +3FFFC00000000FFFF8003FFFC000000007FFFC003FFFC000000007FFFC003FFFC0000000 +07FFFC003FFFC000000007FFFC003FFFC000000007FFFE003FFFC000000007FFFE003FFF +C000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FF +FE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000 +000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE00 +3FFFC000000007FFFE003FFFC000000007FFFC003FFFC000000007FFFC003FFFC0000000 +07FFFC003FFFC000000007FFFC003FFFC00000000FFFF8003FFFC00000000FFFF8003FFF +C00000000FFFF8003FFFC00000000FFFF0003FFFC00000000FFFF0003FFFC00000001FFF +E0003FFFC00000001FFFE0003FFFC00000003FFFC0003FFFE00000003FFF80003FFFE000 +00007FFF00003FFFF00000007FFF00003FFFF8000000FFFE00003FFFFC000001FFFC0000 +3FFEFF000007FFF800003FFC7F80000FFFF000003FF83FE0003FFFC000003FF00FFC03FF +FF8000003FE007FFFFFFFE0000003FC001FFFFFFF80000003F8000FFFFFFE00000003F00 +001FFFFF0000000000000003FFE00000004F657BE35A>I<0000000FFFF00000000001FF +FFFF800000000FFFFFFFF00000003FFFFFFFFC000000FFFFFFFFFE000003FFFE001FFF00 +0007FFF80001FF80000FFFE00007FFC0001FFF80000FFFE0007FFF00000FFFE000FFFE00 +001FFFF000FFFE00001FFFF001FFFC00001FFFF003FFF800001FFFF007FFF800001FFFF0 +07FFF000001FFFF00FFFF000001FFFF00FFFF000000FFFE01FFFE000000FFFE01FFFE000 +0007FFC03FFFE0000003FF803FFFE0000000FE003FFFE000000000007FFFC00000000000 +7FFFC000000000007FFFC000000000007FFFC00000000000FFFFC00000000000FFFFC000 +00000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000 +FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC000 +00000000FFFFC00000000000FFFFC00000000000FFFFC000000000007FFFC00000000000 +7FFFC000000000007FFFE000000000007FFFE000000000003FFFE000000000003FFFE000 +000000003FFFF000000000001FFFF000000000FC1FFFF000000000FC0FFFF800000001FC +0FFFF800000001F807FFF800000001F803FFFC00000003F803FFFE00000007F001FFFE00 +000007E000FFFF0000000FE0007FFF8000001FC0003FFFE000007F80001FFFF00000FF00 +0007FFFC0003FE000003FFFFC03FFC000000FFFFFFFFF00000003FFFFFFFE00000000FFF +FFFF8000000001FFFFFC00000000000FFFC000003E437BC148>I<000000000000007FF8 +0000000000000FFFFFF80000000000000FFFFFF80000000000000FFFFFF8000000000000 +0FFFFFF80000000000000FFFFFF80000000000000FFFFFF8000000000000000FFFF80000 +000000000007FFF80000000000000003FFF80000000000000003FFF80000000000000003 +FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 +00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8 +0000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000 +0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000 +000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003 +FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 +00000003FFF80000000000000003FFF8000000000FFF8003FFF800000001FFFFF803FFF8 +0000000FFFFFFE03FFF80000003FFFFFFF83FFF8000000FFFFFFFFE3FFF8000003FFFF80 +7FF3FFF8000007FFF8000FFBFFF800001FFFE00003FFFFF800003FFFC00000FFFFF80000 +7FFF0000007FFFF80000FFFE0000003FFFF80001FFFC0000001FFFF80003FFFC0000000F +FFF80003FFF800000007FFF80007FFF800000007FFF8000FFFF000000007FFF8000FFFF0 +00000007FFF8001FFFE000000007FFF8001FFFE000000007FFF8003FFFE000000007FFF8 +003FFFE000000007FFF8003FFFE000000007FFF8007FFFC000000007FFF8007FFFC00000 +0007FFF8007FFFC000000007FFF8007FFFC000000007FFF800FFFFC000000007FFF800FF +FFC000000007FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC000000007 +FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC0 +00000007FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC000000007FFF8 +00FFFFC000000007FFF800FFFFC000000007FFF8007FFFC000000007FFF8007FFFC00000 +0007FFF8007FFFC000000007FFF8007FFFC000000007FFF8003FFFE000000007FFF8003F +FFE000000007FFF8003FFFE000000007FFF8001FFFE000000007FFF8001FFFE000000007 +FFF8000FFFF000000007FFF8000FFFF000000007FFF80007FFF00000000FFFF80007FFF8 +0000000FFFF80003FFF80000001FFFF80001FFFC0000003FFFF80000FFFE0000007FFFF8 +00007FFE000000FFFFF800003FFF800003FFFFFC00001FFFC00007FFFFFE00000FFFF000 +1FF7FFFFFE0007FFFE01FFE7FFFFFE0001FFFFFFFF87FFFFFE00007FFFFFFE07FFFFFE00 +001FFFFFF807FFFFFE000003FFFFE007FFFFFE0000003FFE0007FFC0004F657BE35A>I< +0000000FFFC0000000000001FFFFFC00000000000FFFFFFF80000000003FFFFFFFE00000 +0000FFFFFFFFF800000003FFFE03FFFC00000007FFF0007FFF0000001FFFC0001FFF8000 +003FFF80000FFFC000007FFF000007FFE00000FFFE000003FFF00001FFFC000001FFF000 +03FFFC000001FFF80003FFF8000000FFF80007FFF8000000FFFC000FFFF0000000FFFC00 +0FFFF00000007FFE001FFFF00000007FFE001FFFE00000007FFE003FFFE00000003FFF00 +3FFFE00000003FFF003FFFE00000003FFF007FFFE00000003FFF007FFFC00000003FFF00 +7FFFC00000001FFF807FFFC00000001FFF80FFFFC00000001FFF80FFFFC00000001FFF80 +FFFFC00000001FFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80 +FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF00FFFFC0000000000000FFFFC0000000000000 +FFFFC0000000000000FFFFC0000000000000FFFFC0000000000000FFFFC0000000000000 +7FFFC00000000000007FFFC00000000000007FFFC00000000000007FFFE0000000000000 +7FFFE00000000000003FFFE00000000000003FFFE00000000000001FFFE0000000000000 +1FFFF0000000000F001FFFF0000000001F800FFFF0000000003F8007FFF8000000003F80 +07FFF8000000007F0003FFFC000000007F0001FFFE00000000FE0000FFFE00000001FE00 +007FFF00000003FC00003FFF80000007F800001FFFE000000FF000000FFFF000003FE000 +0003FFFC0001FFC0000001FFFFC01FFF000000007FFFFFFFFE000000001FFFFFFFF80000 +000007FFFFFFE00000000000FFFFFF00000000000007FFF000000041437CC14A>I<0000 +00003FFC0000000007FFFF800000003FFFFFC0000001FFFFFFF0000007FFFFFFF800000F +FFF03FFC00001FFF807FFC00007FFE00FFFE0000FFFC00FFFE0000FFF801FFFF0001FFF0 +01FFFF0003FFF001FFFF0007FFE001FFFF0007FFE001FFFF000FFFC001FFFF000FFFC001 +FFFF000FFFC000FFFE001FFF80007FFC001FFF80003FF8001FFF80001FF0001FFF800007 +C0001FFF80000000001FFF80000000001FFF80000000001FFF80000000001FFF80000000 +001FFF80000000001FFF80000000001FFF80000000001FFF80000000001FFF8000000000 +1FFF80000000001FFF80000000001FFF80000000001FFF80000000001FFF80000000001F +FF80000000FFFFFFFFFFC000FFFFFFFFFFC000FFFFFFFFFFC000FFFFFFFFFFC000FFFFFF +FFFFC000FFFFFFFFFFC000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0 +000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC000 +0000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC00000 +00001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000 +001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC000000000 +1FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001F +FFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFF +C0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0 +000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC000 +0000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC00000 +00001FFFC0000000001FFFC00000007FFFFFFFFC00007FFFFFFFFC00007FFFFFFFFC0000 +7FFFFFFFFC00007FFFFFFFFC00007FFFFFFFFC000038657CE431>I<0000000000000007 +F8000000007FFE00003FFE0000000FFFFFF001FFFF0000007FFFFFFE03FFFF800001FFFF +FFFF8FFFFF800003FFFFFFFFDFFDFFC0000FFFF00FFFFFC1FFC0001FFF8001FFFF01FFC0 +003FFF0000FFFC03FFC0007FFE00007FFE01FFC000FFFC00003FFF01FFC001FFF800001F +FF81FF8001FFF800001FFF80FF0003FFF800001FFFC03E0003FFF800001FFFC0000007FF +F000000FFFE0000007FFF000000FFFE0000007FFF000000FFFE000000FFFF000000FFFF0 +00000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000 +000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF00000 +0FFFF000000FFFF0000007FFF000000FFFE0000007FFF000000FFFE0000007FFF000000F +FFE0000003FFF800001FFFC0000003FFF800001FFFC0000001FFF800001FFF80000001FF +F800001FFF80000000FFFC00003FFF000000007FFE00007FFE000000003FFF0000FFFC00 +0000001FFF8001FFF8000000001FFFF00FFFF0000000003FFFFFFFFFC0000000003FFFFF +FFFF80000000007C7FFFFFFE0000000000FC0FFFFFF00000000000FC007FFE0000000000 +00FC000000000000000001FC000000000000000001FC000000000000000001FC00000000 +0000000001FC000000000000000001FE000000000000000001FE000000000000000001FF +000000000000000001FF800000000000000001FFF00000000000000001FFFFFFFFFF8000 +000001FFFFFFFFFFFE00000000FFFFFFFFFFFFC0000000FFFFFFFFFFFFF00000007FFFFF +FFFFFFFC0000007FFFFFFFFFFFFF0000003FFFFFFFFFFFFF8000001FFFFFFFFFFFFFC000 +000FFFFFFFFFFFFFE0000007FFFFFFFFFFFFF000003FFFFFFFFFFFFFF80000FFFFFFFFFF +FFFFF80003FFFFFFFFFFFFFFFC0007FFE0000001FFFFFC000FFF000000000FFFFE001FFE +0000000001FFFE003FFC00000000007FFE007FF800000000003FFF007FF800000000001F +FF00FFF800000000001FFF00FFF000000000001FFF00FFF000000000000FFF00FFF00000 +0000000FFF00FFF000000000000FFF00FFF000000000000FFF00FFF000000000000FFF00 +FFF800000000001FFF007FF800000000001FFE007FFC00000000003FFE003FFC00000000 +003FFC003FFE00000000007FFC001FFF0000000000FFF8000FFFC000000003FFF00007FF +E000000007FFE00003FFF80000001FFFC00000FFFF000000FFFF0000007FFFF8001FFFFE +0000001FFFFFFFFFFFF800000007FFFFFFFFFFE000000000FFFFFFFFFF00000000000FFF +FFFFF00000000000003FFFFC000000004A607CC151>I<0007FF8000000000000000FFFF +FF8000000000000000FFFFFF8000000000000000FFFFFF8000000000000000FFFFFF8000 +000000000000FFFFFF8000000000000000FFFFFF800000000000000000FFFF8000000000 +000000007FFF8000000000000000003FFF8000000000000000003FFF8000000000000000 +003FFF8000000000000000003FFF8000000000000000003FFF8000000000000000003FFF +8000000000000000003FFF8000000000000000003FFF8000000000000000003FFF800000 +0000000000003FFF8000000000000000003FFF8000000000000000003FFF800000000000 +0000003FFF8000000000000000003FFF8000000000000000003FFF800000000000000000 +3FFF8000000000000000003FFF8000000000000000003FFF8000000000000000003FFF80 +00000000000000003FFF8000000000000000003FFF8000000000000000003FFF80000000 +00000000003FFF8000000000000000003FFF8000000000000000003FFF80000000000000 +00003FFF8000000000000000003FFF80001FFF00000000003FFF8000FFFFF0000000003F +FF8007FFFFFC000000003FFF801FFFFFFF000000003FFF803FFFFFFF800000003FFF807F +E07FFFC00000003FFF81FE001FFFE00000003FFF83F8000FFFF00000003FFF87F00007FF +F00000003FFF8FC00007FFF80000003FFF8F800003FFF80000003FFF9F000003FFFC0000 +003FFFBE000003FFFC0000003FFFBC000001FFFC0000003FFFFC000001FFFE0000003FFF +F8000001FFFE0000003FFFF8000001FFFE0000003FFFF0000001FFFE0000003FFFF00000 +01FFFE0000003FFFE0000001FFFE0000003FFFE0000001FFFE0000003FFFE0000001FFFE +0000003FFFE0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE000000 +3FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0 +000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001 +FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE00 +00003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003F +FFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC000 +0001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FF +FE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000 +003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFF +C0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC00000 +01FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE +0000003FFFC0000001FFFE0000FFFFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FF +FFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFF +F007FFFFFFFF8051647BE35A>I<000FE00000003FF80000007FFC000001FFFF000001FF +FF000003FFFF800003FFFF800007FFFFC00007FFFFC00007FFFFC00007FFFFC00007FFFF +C00007FFFFC00007FFFFC00003FFFF800003FFFF800001FFFF000001FFFF0000007FFC00 +00003FF80000000FE0000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000007FF80007FFFFF80007FFFFF80007FFFFF80007FFF +FF80007FFFFF80007FFFFF800000FFFF8000007FFF8000003FFF8000003FFF8000003FFF +8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 +00003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000 +003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF800000 +3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F +FF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF +8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 +00003FFF8000003FFF8000003FFF8000003FFF8000FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0 +FFFFFFFFC0FFFFFFFFC0FFFFFFFFC022657BE42C>I<00000001FC0000000007FF000000 +000FFF800000003FFFE00000003FFFE00000007FFFF00000007FFFF0000000FFFFF80000 +00FFFFF8000000FFFFF8000000FFFFF8000000FFFFF8000000FFFFF8000000FFFFF80000 +007FFFF00000007FFFF00000003FFFE00000003FFFE00000000FFF8000000007FF000000 +0001FC000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFF800001FFFFFF80000 +1FFFFFF800001FFFFFF800001FFFFFF800001FFFFFF800001FFFFFF80000000FFFF80000 +0007FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 +0003FFF800000003FFF800000003FFF800000003FFF800000003FFF807F00003FFF81FFC +0003FFF83FFE0003FFF87FFF0003FFF8FFFF8007FFF0FFFF8007FFF0FFFF8007FFF0FFFF +8007FFE0FFFF800FFFE0FFFF800FFFC0FFFF801FFFC0FFFF801FFF807FFF003FFF007FFE +007FFE003FFC00FFFC001FFE03FFF0000FFFFFFFE00007FFFFFF800001FFFFFE0000007F +FFF800000007FF8000002D8288E431>I<0007FF80000000000000FFFFFF800000000000 +00FFFFFF80000000000000FFFFFF80000000000000FFFFFF80000000000000FFFFFF8000 +0000000000FFFFFF8000000000000000FFFF80000000000000007FFF8000000000000000 +3FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000 +000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF +80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000 +00003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000 +0000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000000 +3FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000 +000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF +80000000000000003FFF80000000000000003FFF800003FFFFFF80003FFF800003FFFFFF +80003FFF800003FFFFFF80003FFF800003FFFFFF80003FFF800003FFFFFF80003FFF8000 +03FFFFFF80003FFF8000003FFF8000003FFF8000000FFC0000003FFF8000001FF0000000 +3FFF8000003FE00000003FFF800000FFC00000003FFF800001FF800000003FFF800003FF +000000003FFF800007FC000000003FFF80000FF8000000003FFF80003FF0000000003FFF +80007FE0000000003FFF8000FFC0000000003FFF8001FF00000000003FFF8003FE000000 +00003FFF800FFC00000000003FFF801FF800000000003FFF803FF000000000003FFF807F +C000000000003FFF80FFE000000000003FFF83FFF000000000003FFF87FFF80000000000 +3FFF8FFFF800000000003FFF9FFFFC00000000003FFFBFFFFE00000000003FFFFFFFFE00 +000000003FFFFFFFFF00000000003FFFFFFFFF80000000003FFFFCFFFFC0000000003FFF +F87FFFC0000000003FFFF07FFFE0000000003FFFE03FFFF0000000003FFFC01FFFF80000 +00003FFF801FFFF8000000003FFF800FFFFC000000003FFF8007FFFE000000003FFF8003 +FFFF000000003FFF8003FFFF000000003FFF8001FFFF800000003FFF8000FFFFC0000000 +3FFF80007FFFE00000003FFF80007FFFE00000003FFF80003FFFF00000003FFF80001FFF +F80000003FFF80000FFFFC0000003FFF80000FFFFC0000003FFF800007FFFE0000003FFF +800003FFFF0000003FFF800001FFFF0000003FFF800001FFFF8000003FFF800000FFFFC0 +00003FFF8000007FFFE000003FFF800000FFFFF000FFFFFFFFE00FFFFFFFF0FFFFFFFFE0 +0FFFFFFFF0FFFFFFFFE00FFFFFFFF0FFFFFFFFE00FFFFFFFF0FFFFFFFFE00FFFFFFFF0FF +FFFFFFE00FFFFFFFF04C647BE355>I<0007FF8000FFFFFF8000FFFFFF8000FFFFFF8000 +FFFFFF8000FFFFFF8000FFFFFF800000FFFF8000007FFF8000003FFF8000003FFF800000 +3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F +FF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF +8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 +00003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000 +003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF800000 +3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F +FF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF +8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 +00003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000 +003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF800000 +3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F +FF8000003FFF8000003FFF8000003FFF8000FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFF +FFE0FFFFFFFFE0FFFFFFFFE023647BE32C>I<0007FF80001FFF00000000FFF8000000FF +FFFF8000FFFFF0000007FFFF800000FFFFFF8007FFFFFC00003FFFFFE00000FFFFFF801F +FFFFFF0000FFFFFFF80000FFFFFF803FFFFFFF8001FFFFFFFC0000FFFFFF807FE07FFFC0 +03FF03FFFE0000FFFFFF81FE001FFFE00FF000FFFF000000FFFF83F8000FFFF01FC0007F +FF8000007FFF87F00007FFF03F80003FFF8000003FFF8FC00007FFF87E00003FFFC00000 +3FFF8F800003FFF87C00001FFFC000003FFF9F000003FFFCF800001FFFE000003FFFBE00 +0003FFFDF000001FFFE000003FFFBC000001FFFDE000000FFFE000003FFFFC000001FFFF +E000000FFFF000003FFFF8000001FFFFC000000FFFF000003FFFF8000001FFFFC000000F +FFF000003FFFF0000001FFFF8000000FFFF000003FFFF0000001FFFF8000000FFFF00000 +3FFFE0000001FFFF0000000FFFF000003FFFE0000001FFFF0000000FFFF000003FFFE000 +0001FFFF0000000FFFF000003FFFE0000001FFFF0000000FFFF000003FFFC0000001FFFE +0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F +FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 +3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 +0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE +0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F +FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 +3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 +0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE +0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F +FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 +3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 +0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE +0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F +FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 +3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 +0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000FFFFFFFFF007FFFFFF +FF803FFFFFFFFCFFFFFFFFF007FFFFFFFF803FFFFFFFFCFFFFFFFFF007FFFFFFFF803FFF +FFFFFCFFFFFFFFF007FFFFFFFF803FFFFFFFFCFFFFFFFFF007FFFFFFFF803FFFFFFFFCFF +FFFFFFF007FFFFFFFF803FFFFFFFFC7E417BC087>I<0007FF80001FFF00000000FFFFFF +8000FFFFF0000000FFFFFF8007FFFFFC000000FFFFFF801FFFFFFF000000FFFFFF803FFF +FFFF800000FFFFFF807FE07FFFC00000FFFFFF81FE001FFFE0000000FFFF83F8000FFFF0 +0000007FFF87F00007FFF00000003FFF8FC00007FFF80000003FFF8F800003FFF8000000 +3FFF9F000003FFFC0000003FFFBE000003FFFC0000003FFFBC000001FFFC0000003FFFFC +000001FFFE0000003FFFF8000001FFFE0000003FFFF8000001FFFE0000003FFFF0000001 +FFFE0000003FFFF0000001FFFE0000003FFFE0000001FFFE0000003FFFE0000001FFFE00 +00003FFFE0000001FFFE0000003FFFE0000001FFFE0000003FFFC0000001FFFE0000003F +FFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC000 +0001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FF +FE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000 +003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFF +C0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC00000 +01FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE +0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE000000 +3FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0 +000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001 +FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE00 +00003FFFC0000001FFFE0000003FFFC0000001FFFE0000FFFFFFFFF007FFFFFFFF80FFFF +FFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFFF0 +07FFFFFFFF80FFFFFFFFF007FFFFFFFF8051417BC05A>I<00000007FFE0000000000000 +FFFFFF000000000007FFFFFFE0000000001FFFFFFFF8000000007FFFFFFFFE00000001FF +FE007FFF80000007FFF0000FFFE000000FFFC00003FFF000001FFF800001FFF800003FFF +000000FFFC00007FFE0000007FFE0000FFFC0000003FFF0001FFF80000001FFF8003FFF8 +0000001FFFC003FFF00000000FFFC007FFF00000000FFFE00FFFE000000007FFF00FFFE0 +00000007FFF01FFFE000000007FFF81FFFE000000007FFF81FFFE000000007FFF83FFFC0 +00000003FFFC3FFFC000000003FFFC3FFFC000000003FFFC7FFFC000000003FFFE7FFFC0 +00000003FFFE7FFFC000000003FFFE7FFFC000000003FFFEFFFFC000000003FFFFFFFFC0 +00000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC0 +00000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC0 +00000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC000000003FFFF7FFFC0 +00000003FFFE7FFFC000000003FFFE7FFFC000000003FFFE7FFFC000000003FFFE3FFFE0 +00000007FFFC3FFFE000000007FFFC3FFFE000000007FFFC1FFFE000000007FFF81FFFE0 +00000007FFF80FFFF00000000FFFF00FFFF00000000FFFF007FFF00000000FFFE003FFF8 +0000001FFFC003FFF80000001FFFC001FFFC0000003FFF8000FFFE0000007FFF00007FFF +000000FFFE00003FFF800001FFFC00001FFFC00003FFF8000007FFF0000FFFE0000003FF +FE007FFFC0000000FFFFFFFFFF000000003FFFFFFFFC0000000007FFFFFFE00000000000 +FFFFFF00000000000007FFE000000048437CC151>I<0007FF8000FFF8000000FFFFFF80 +0FFFFF800000FFFFFF807FFFFFF00000FFFFFF81FFFFFFFC0000FFFFFF87FFFFFFFF0000 +FFFFFF8FFF01FFFFC000FFFFFFBFF0003FFFE00000FFFFFFC0000FFFF000007FFFFF0000 +07FFF800003FFFFE000003FFFC00003FFFF8000001FFFE00003FFFF0000000FFFF00003F +FFE0000000FFFF80003FFFC00000007FFFC0003FFFC00000007FFFC0003FFFC00000003F +FFE0003FFFC00000003FFFE0003FFFC00000001FFFF0003FFFC00000001FFFF0003FFFC0 +0000001FFFF8003FFFC00000000FFFF8003FFFC00000000FFFF8003FFFC00000000FFFFC +003FFFC00000000FFFFC003FFFC00000000FFFFC003FFFC000000007FFFC003FFFC00000 +0007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003F +FFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007 +FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC0 +00000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC00000000FFFFC +003FFFC00000000FFFFC003FFFC00000000FFFFC003FFFC00000000FFFFC003FFFC00000 +000FFFF8003FFFC00000001FFFF8003FFFC00000001FFFF8003FFFC00000001FFFF0003F +FFC00000003FFFF0003FFFC00000003FFFE0003FFFC00000007FFFE0003FFFC00000007F +FFC0003FFFE0000000FFFF80003FFFE0000000FFFF00003FFFF0000001FFFF00003FFFF8 +000003FFFE00003FFFFC000007FFFC00003FFFFF00000FFFF800003FFFFF80001FFFF000 +003FFFFFE0007FFFC000003FFFCFFC03FFFF8000003FFFC7FFFFFFFE0000003FFFC1FFFF +FFF80000003FFFC0FFFFFFE00000003FFFC01FFFFF000000003FFFC003FFE0000000003F +FFC0000000000000003FFFC0000000000000003FFFC0000000000000003FFFC000000000 +0000003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000003FFFC0 +000000000000003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000 +003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000003FFFC00000 +00000000003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000003F +FFC0000000000000003FFFC0000000000000003FFFC0000000000000FFFFFFFFF0000000 +0000FFFFFFFFF00000000000FFFFFFFFF00000000000FFFFFFFFF00000000000FFFFFFFF +F00000000000FFFFFFFFF000000000004F5D7BC05A>I<000FFF000FFC00FFFFFF003FFF +80FFFFFF00FFFFE0FFFFFF01FFFFF0FFFFFF03FFFFF8FFFFFF07FC7FFCFFFFFF0FE0FFFE +00FFFF1F80FFFE007FFF3F01FFFF003FFF3E01FFFF003FFF7E01FFFF003FFF7C01FFFF00 +3FFFF801FFFF003FFFF801FFFF003FFFF001FFFF003FFFF000FFFE003FFFF000FFFE003F +FFE0007FFC003FFFE0003FF8003FFFE0000FE0003FFFC0000000003FFFC0000000003FFF +C0000000003FFFC0000000003FFFC0000000003FFF80000000003FFF80000000003FFF80 +000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF8000 +0000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF800000 +00003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000 +003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF8000000000 +3FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003F +FF80000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF +80000000FFFFFFFFF80000FFFFFFFFF80000FFFFFFFFF80000FFFFFFFFF80000FFFFFFFF +F80000FFFFFFFFF8000038417BC042>114 D<00003FFF8007800007FFFFF81F80001FFF +FFFE7F80007FFFFFFFFF8001FFFFFFFFFF8003FFE001FFFF8007FF00001FFF800FFC0000 +07FF801FF0000003FF801FF0000000FF803FE0000000FF807FE00000007F807FC0000000 +3F807FC00000003F80FFC00000003F80FFC00000001F80FFC00000001F80FFE00000001F +80FFF00000001F80FFF80000001F80FFFC0000000000FFFF0000000000FFFFE000000000 +FFFFFF000000007FFFFFF80000007FFFFFFFC000003FFFFFFFFC00003FFFFFFFFF00001F +FFFFFFFFC0000FFFFFFFFFF00007FFFFFFFFF80003FFFFFFFFFC0001FFFFFFFFFE0000FF +FFFFFFFF00003FFFFFFFFF80000FFFFFFFFFC00003FFFFFFFFC000007FFFFFFFE0000003 +FFFFFFF00000001FFFFFF000000000FFFFF0000000001FFFF80000000007FFF87C000000 +01FFF8FC00000000FFF8FC000000007FF8FE000000003FF8FE000000003FF8FE00000000 +1FF8FF000000001FF8FF000000001FF8FF800000001FF0FF800000001FF0FFC00000001F +F0FFC00000003FF0FFE00000003FE0FFF00000007FE0FFF80000007FC0FFFE000000FF80 +FFFF000003FF00FFFFC0000FFE00FFFFFC007FFC00FFDFFFFFFFF800FF0FFFFFFFF000FE +03FFFFFFC000F8007FFFFE0000F0000FFFE0000035437BC140>I<000007E00000000000 +07E0000000000007E0000000000007E0000000000007E0000000000007E000000000000F +E000000000000FE000000000000FE000000000000FE000000000000FE000000000001FE0 +00000000001FE000000000001FE000000000003FE000000000003FE000000000007FE000 +000000007FE00000000000FFE00000000001FFE00000000001FFE00000000003FFE00000 +000007FFE0000000000FFFE0000000001FFFE0000000007FFFE000000001FFFFE0000000 +0FFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FF +FFFFFFFFFE00001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001F +FFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFF +E0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0 +000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE000 +0000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE00000 +00001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000 +001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000FC0001FFFE0000FC000 +1FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001F +FFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFF +E0001FC0000FFFF0001F80000FFFF0001F80000FFFF0003F800007FFF0003F000007FFF8 +007F000003FFFC007E000001FFFE00FC000000FFFF83FC0000007FFFFFF80000003FFFFF +F00000000FFFFFC000000003FFFF80000000003FFC0000325C7DDA3F>I<0007FFC00000 +003FFE0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE +0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE000000 +FFFFC0000007FFFE0000007FFFC0000003FFFE0000003FFFC0000001FFFE0000003FFFC0 +000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001 +FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE00 +00003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003F +FFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC000 +0001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FF +FE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000 +003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFF +C0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC00000 +01FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE +0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE000000 +3FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0 +000001FFFE0000003FFFC0000003FFFE0000003FFFC0000003FFFE0000003FFFC0000003 +FFFE0000003FFFC0000007FFFE0000003FFFC0000007FFFE0000003FFFC000000FFFFE00 +00001FFFC000000FFFFE0000001FFFC000001FFFFE0000001FFFC000003EFFFE0000000F +FFE000007EFFFE0000000FFFE00000FCFFFF00000007FFF00001F8FFFF80000003FFF800 +07F0FFFFFF800001FFFF003FE0FFFFFF800000FFFFFFFFC0FFFFFF8000007FFFFFFF00FF +FFFF8000001FFFFFFE00FFFFFF80000003FFFFF800FFFFFF800000003FFF8000FFF00000 +51427BC05A>III<7FFFFF +FFC0007FFFFFF87FFFFFFFC0007FFFFFF87FFFFFFFC0007FFFFFF87FFFFFFFC0007FFFFF +F87FFFFFFFC0007FFFFFF87FFFFFFFC0007FFFFFF8001FFFF8000007FFF000000FFFF800 +0001FF00000007FFFC000001FE00000003FFFE000003FC00000001FFFF000007F8000000 +01FFFF80000FF000000000FFFF80001FE0000000007FFFC0001FE0000000003FFFE0003F +C0000000001FFFF0007F80000000001FFFF800FF00000000000FFFF801FE000000000007 +FFFC03FC000000000003FFFE07F8000000000001FFFF07F8000000000001FFFF8FF00000 +00000000FFFF9FE00000000000007FFFFFC00000000000003FFFFF800000000000001FFF +FF000000000000001FFFFE000000000000000FFFFC0000000000000007FFFC0000000000 +000003FFFE0000000000000001FFFF0000000000000001FFFF8000000000000000FFFF80 +000000000000007FFFC0000000000000007FFFE000000000000000FFFFF0000000000000 +01FFFFF800000000000003FFFFF800000000000007FFFFFC0000000000000FF3FFFE0000 +000000001FE1FFFF0000000000001FC0FFFF8000000000003FC0FFFF8000000000007F80 +7FFFC00000000000FF003FFFE00000000001FE001FFFF00000000003FC000FFFF8000000 +0007F8000FFFF80000000007F00007FFFC000000000FF00003FFFE000000001FE00001FF +FF000000003FC00000FFFF800000007F800000FFFF80000000FF0000007FFFC0000001FE +0000003FFFE0000001FC0000001FFFF0000007FC0000000FFFF800003FFF0000000FFFF8 +00FFFFFFF00001FFFFFFFFFFFFFFF00001FFFFFFFFFFFFFFF00001FFFFFFFFFFFFFFF000 +01FFFFFFFFFFFFFFF00001FFFFFFFFFFFFFFF00001FFFFFFFF50407EBF55>II +E /FI 24 107 df<7FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFF +FFFFFFE03C04789A4D>0 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B0B +789E1C>I<600000000006F8000000000FFC000000001F7E000000003F3F000000007E1F +80000000FC0FC0000001F807E0000003F003F0000007E001F800000FC000FC00001F8000 +7E00003F00003F00007E00001F8000FC00000FC001F8000007E003F0000003F007E00000 +01F80FC0000000FC1F800000007E3F000000003F7E000000001FFC000000000FF8000000 +0007F00000000007F0000000000FF8000000001FFC000000003F7E000000007E3F000000 +00FC1F80000001F80FC0000003F007E0000007E003F000000FC001F800001F8000FC0000 +3F00007E00007E00003F0000FC00001F8001F800000FC003F0000007E007E0000003F00F +C0000001F81F80000000FC3F000000007E7E000000003FFC000000001FF8000000000F60 +0000000006303072B04D>I<00007000000000F800000000F800000000F800000000F800 +000000F800000000F800000000F800000000F80000000070000078007000F07C007001F0 +FF007007F87F80700FF03FE0703FE00FF0707F8003F870FE0000FE73F800003F77E00000 +0FFF80000003FE00000000F800000003FE0000000FFF8000003F77E00000FE73F80003F8 +70FE000FF0707F803FE0703FE07F80700FF0FF007007F87C007001F078007000F0000070 +00000000F800000000F800000000F800000000F800000000F800000000F800000000F800 +000000F800000000700000252B7AAD32>I<00000000C00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E0000000007FFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0 +7FFFFFFFFFFFFFFF8000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +7FFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC07FFFFFFFFFFFFFFF80 +42427BC14D>6 D<0001FF0000000FFFE000003FFFF800007FFFFC0001FFFFFF0003FFFF +FF8007FFFFFFC00FFFFFFFE01FFFFFFFF01FFFFFFFF03FFFFFFFF87FFFFFFFFC7FFFFFFF +FC7FFFFFFFFCFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE +FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC7FFFFFFFFC7FFFFFFFFC3F +FFFFFFF81FFFFFFFF01FFFFFFFF00FFFFFFFE007FFFFFFC003FFFFFF8001FFFFFF00007F +FFFC00003FFFF800000FFFE0000001FF000027267BAB32>15 D<00000000000000E00000 +0000000003F00000000000000FF00000000000003FE0000000000000FF80000000000003 +FE0000000000000FF80000000000003FE0000000000000FF80000000000003FE00000000 +00000FF80000000000003FE0000000000000FF80000000000003FE0000000000001FF800 +00000000007FE0000000000001FF80000000000007FE0000000000001FF0000000000000 +7FC0000000000001FF00000000000007FC0000000000001FF00000000000007FC0000000 +000001FF00000000000007FC0000000000001FF00000000000007FC0000000000000FF00 +000000000000FF000000000000007FC00000000000001FF000000000000007FC00000000 +000001FF000000000000007FC00000000000001FF000000000000007FC00000000000001 +FF000000000000007FC00000000000001FF000000000000007FC00000000000001FF8000 +00000000007FE00000000000001FF800000000000007FE00000000000000FF8000000000 +00003FE00000000000000FF800000000000003FE00000000000000FF800000000000003F +E00000000000000FF800000000000003FE00000000000000FF800000000000003FE00000 +000000000FF000000000000003F000000000000000E00000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000007FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFF +FFE03C4E78BE4D>20 D<0007F0000000000080001FFE0000000001C0007FFF8000000001 +C000FFFFE000000001C001FFFFF000000001C003FFFFF800000001C007F80FFC00000001 +C00FE001FE00000003C01F80007F00000003801F00001FC0000003803E00000FE0000007 +803C000007F00000070038000003F800000F0078000001FC00001F0070000000FE00003E +00700000003F80007E00F00000001FE001FC00E00000000FFC07F800E000000007FFFFF0 +00E000000003FFFFE000E000000001FFFFC000E0000000007FFF8000E0000000001FFE00 +00400000000003F8000042187BA44D>24 D<000007800000000000000000000007800000 +00000000000000000780000000000000000000000F80000000000000000000000F000000 +00000000000000000F00000000000000000000001F00000000000000000000001E000000 +00000000000000001E00000000000000000000003E00000000000000000000003C000000 +00000000000000007C0000000000000000000000F80000000000000000000000F8000000 +0000000000000001F00000000000000000000003E00000000000000000000007E0000000 +000000000000000FC0000000000000000000001F80000000000000000000003F00000000 +000000000000007E0000000000000000000000FC0000000000000000000003F800000000 +0000000000000FE0000000000000000000003FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF +FFFFFFFFFF80FFFFFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFFFF000FE000000000 +00000000000003F80000000000000000000000FC00000000000000000000007E00000000 +000000000000003F00000000000000000000001F80000000000000000000000FC0000000 +0000000000000007E00000000000000000000003E00000000000000000000001F0000000 +0000000000000000F80000000000000000000000F800000000000000000000007C000000 +00000000000000003C00000000000000000000003E00000000000000000000001E000000 +00000000000000001E00000000000000000000001F00000000000000000000000F000000 +00000000000000000F00000000000000000000000F800000000000000000000007800000 +00000000000000000780000000000000000000000780000000000000000059347BB264> +32 D<0000000000000000F00000000000000000000000F00000000000000000000000F0 +0000000000000000000000F8000000000000000000000078000000000000000000000078 +00000000000000000000007C00000000000000000000003C00000000000000000000003C +00000000000000000000003E00000000000000000000001E00000000000000000000001F +00000000000000000000000F80000000000000000000000F800000000000000000000007 +C00000000000000000000003E00000000000000000000003F00000000000000000000001 +F80000000000000000000000FC00000000000000000000007E0000000000000000000000 +3F00000000000000000000001F80000000000000000000000FE000000000000000000000 +03F8007FFFFFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFF +FFFF807FFFFFFFFFFFFFFFFFFFFE0000000000000000000003F800000000000000000000 +0FE0000000000000000000001F80000000000000000000003F0000000000000000000000 +7E0000000000000000000000FC0000000000000000000001F80000000000000000000003 +F00000000000000000000003E00000000000000000000007C0000000000000000000000F +80000000000000000000000F80000000000000000000001F00000000000000000000001E +00000000000000000000003E00000000000000000000003C00000000000000000000003C +00000000000000000000007C000000000000000000000078000000000000000000000078 +0000000000000000000000F80000000000000000000000F00000000000000000000000F0 +0000000000000000000000F000000059347BB264>I<0000000000000300000000000000 +0000000007800000000000000000000007C00000000000000000000003C0000000000000 +0000000003E00000000000000000000001E00000000000000000000001F0000000000000 +0000000000F800000000000000000000007800000000000000000000007C000000000000 +00000000003E00000000000000000000001F00000000000000000000000F800000000000 +00000000000FC00000000000000000000007E00000000000000000000003F00000007FFF +FFFFFFFFFFFFF8000000FFFFFFFFFFFFFFFFFC000000FFFFFFFFFFFFFFFFFE0000007FFF +FFFFFFFFFFFFFF00000000000000000000000FC00000000000000000000007E000000000 +00000000000003F80000000000000000000000FE00000000000000000000007F80000000 +000000000000001FE00000000000000000000007FC0000000000000000000001FF800000 +0000000000000001FF8000000000000000000007FC000000000000000000001FE0000000 +000000000000007F8000000000000000000000FE0000000000000000000003F800000000 +00000000000007E0000000000000000000000FC000007FFFFFFFFFFFFFFFFF000000FFFF +FFFFFFFFFFFFFE000000FFFFFFFFFFFFFFFFFC0000007FFFFFFFFFFFFFFFF80000000000 +000000000003F00000000000000000000007E0000000000000000000000FC00000000000 +00000000000F80000000000000000000001F00000000000000000000003E000000000000 +00000000007C0000000000000000000000780000000000000000000000F8000000000000 +0000000001F00000000000000000000001E00000000000000000000003E0000000000000 +0000000003C00000000000000000000007C0000000000000000000000780000000000000 +0000000003000000000059387BB464>41 D<0000001C00000001C00000000000003E0000 +0003E00000000000003C00000001E00000000000007C00000001F0000000000000780000 +0000F0000000000000F800000000F8000000000000F00000000078000000000001F00000 +00007C000000000001E0000000003C000000000003E0000000003E000000000007C00000 +00001F00000000000780000000000F00000000000F80000000000F80000000001F000000 +000007C0000000003E000000000003E0000000007E000000000003F000000000FFFFFFFF +FFFFFFF800000001FFFFFFFFFFFFFFFC00000003FFFFFFFFFFFFFFFE00000007FFFFFFFF +FFFFFFFF0000000FC00000000000001F8000001F800000000000000FC000007F00000000 +00000007F00000FC0000000000000001F80003F80000000000000000FE000FE000000000 +000000003F803FC000000000000000001FE0FF00000000000000000007F8FF0000000000 +0000000007F83FC000000000000000001FE00FE000000000000000003F8003F800000000 +00000000FE0000FC0000000000000001F800007F0000000000000007F000001F80000000 +0000000FC000000FC00000000000001F80000007FFFFFFFFFFFFFFFF00000003FFFFFFFF +FFFFFFFE00000001FFFFFFFFFFFFFFFC00000000FFFFFFFFFFFFFFF8000000007E000000 +000003F0000000003E000000000003E0000000001F000000000007C0000000000F800000 +00000F80000000000780000000000F000000000007C0000000001F000000000003E00000 +00003E000000000001E0000000003C000000000001F0000000007C000000000000F00000 +000078000000000000F800000000F80000000000007800000000F00000000000007C0000 +0001F00000000000003C00000001E00000000000003E00000003E00000000000001C0000 +0001C00000005D387DB464>44 D<000000FFFFFF00000007FFFFFF8000003FFFFFFF8000 +00FFFFFFFF000003FF800000000007FC00000000001FE000000000003F8000000000007E +000000000000FC000000000001F8000000000003F0000000000007E0000000000007C000 +000000000F8000000000001F8000000000001F0000000000003E0000000000003E000000 +0000003C0000000000007C0000000000007C00000000000078000000000000F800000000 +0000F8000000000000F0000000000000F0000000000000FFFFFFFFFFFF00FFFFFFFFFFFF +80FFFFFFFFFFFF80FFFFFFFFFFFF00F0000000000000F0000000000000F8000000000000 +F8000000000000780000000000007C0000000000007C0000000000003C0000000000003E +0000000000003E0000000000001F0000000000001F8000000000000F80000000000007C0 +000000000007E0000000000003F0000000000001F8000000000000FC0000000000007E00 +00000000003F8000000000001FE0000000000007FC000000000003FF800000000000FFFF +FFFF0000003FFFFFFF80000007FFFFFF80000000FFFFFF00313A78B542>50 +D<00000000000600000000000F00000000001F00000000001F00000000003E0000000000 +3E00000000007C00000000007C0000000000F80000000000F80000000001F00000000001 +F00000000003E00000000003E00000000007C00000000007C0000000000F80000000000F +80000000001F00000000001F00000000003E00000000003E00000000007C00000000007C +0000000000F80000000000F80000000001F00000000001F00000000003E00000000003E0 +0000000007C00000000007C0000000000F80000000000F80000000001F00000000001F00 +000000003E00000000003E00000000007C00000000007C0000000000F80000000000F800 +00000001F00000000001F00000000003E00000000003E00000000007C00000000007C000 +0000000F80000000000F80000000001F00000000001F00000000003E00000000003E0000 +0000007C00000000007C0000000000F80000000000F80000000001F00000000001F00000 +000003E00000000003E00000000007C00000000007C0000000000F80000000000F800000 +00001F00000000001F00000000003E00000000003E00000000007C00000000007C000000 +0000F80000000000F80000000001F00000000001F00000000003E00000000003E0000000 +0007C00000000007C0000000000F80000000000F80000000001F00000000001F00000000 +003E00000000003E00000000007C00000000007C0000000000F80000000000F800000000 +00F00000000000600000000000305C72C600>54 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0FCFEFEFCF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F06007267BAB00>I<7FFFFFFFFFE0 +FFFFFFFFFFF0FFFFFFFFFFF07FFFFFFFFFF00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F01FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 +0000000000F00000000000F00000000000F00000000000F07FFFFFFFFFF0FFFFFFFFFFF0 +FFFFFFFFFFF07FFFFFFFFFE02C457BC437>57 D<7FFFFFFFFFFFFCFFFFFFFFFFFFFEFFFF +FFFFFFFFFE7FFFFFFFFFFFFE0000000000001E0000000000001E0000000000001E000000 +0000001E0000000000001E0000000000001E0000000000001E0000000000001E00000000 +00001E0000000000001E0000000000001E0000000000001E0000000000001E0000000000 +001E0000000000001E0000000000001E0000000000001E0000000000001E000000000000 +1E0000000000001E0000000000001E0000000000001E0000000000000C371B7BA342>I< +000000380000000000007C0000000000007C000000000000FE000000000000FE00000000 +0001FF000000000001FF000000000001EF000000000003EF800000000003EF8000000000 +07C7C00000000007C7C0000000000F83E0000000000F83E0000000001F01F0000000001F +01F0000000001E00F0000000003E00F8000000003E00F8000000007C007C000000007C00 +7C00000000F8003E00000000F8003E00000001F0001F00000001F0001F00000001E0000F +00000003E0000F80000003E0000F80000007C00007C0000007C00007C000000F800003E0 +00000F800003E000001F000001F000001F000001F000001E000000F000003E000000F800 +003E000000F800007C0000007C00007C0000007C0000F80000003E0000F80000003E0001 +F00000001F0001F00000001F0003E00000000F8003E00000000F8003C0000000078007C0 +00000007C007C000000007C00F8000000003E00F8000000003E01F0000000001F01F0000 +000001F03E0000000000F83E0000000000F83C0000000000787C00000000007C7C000000 +00007CF800000000003EF800000000003EF000000000001E6000000000000C373D7BBA42 +>94 D<6000000000000CF000000000001EF800000000003EF800000000003E7C00000000 +007C7C00000000007C3C0000000000783E0000000000F83E0000000000F81F0000000001 +F01F0000000001F00F8000000003E00F8000000003E007C000000007C007C000000007C0 +03C0000000078003E00000000F8003E00000000F8001F00000001F0001F00000001F0000 +F80000003E0000F80000003E00007C0000007C00007C0000007C00003E000000F800003E +000000F800001E000000F000001F000001F000001F000001F000000F800003E000000F80 +0003E0000007C00007C0000007C00007C0000003E0000F80000003E0000F80000001E000 +0F00000001F0001F00000001F0001F00000000F8003E00000000F8003E000000007C007C +000000007C007C000000003E00F8000000003E00F8000000001E00F0000000001F01F000 +0000001F01F0000000000F83E0000000000F83E00000000007C7C00000000007C7C00000 +000003EF800000000003EF800000000001EF000000000001FF000000000001FF00000000 +0000FE000000000000FE0000000000007C0000000000007C00000000000038000000373D +7BBA42>I<0000000FE0000000FFE0000003FC0000000FE00000003FC00000007F800000 +00FF00000000FE00000001FC00000001FC00000003F800000003F800000003F800000003 +F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 +00000003F800000003F800000003F800000003F800000003F800000003F800000003F800 +000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 +0003F800000003F800000003F800000003F800000003F800000003F800000007F0000000 +07F00000000FE00000001FE00000003FC00000007F80000000FE00000007F8000000FFE0 +000000FFE000000007F800000000FE000000007F800000003FC00000001FE00000000FE0 +00000007F000000007F000000003F800000003F800000003F800000003F800000003F800 +000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 +0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 +03F800000003F800000003F800000003F800000003F800000003F800000003F800000003 +F800000003F800000003F800000003F800000003F800000001FC00000001FC00000000FE +00000000FF000000007F800000003FC00000000FE000000003FC00000000FFE00000000F +E0236479CA32>102 DI<00000C00001E00003E00003E00003C00007C00007C0000 +F80000F80000F00001F00001F00003E00003E00003C00007C00007C0000F80000F80000F +00001F00001F00003E00003E00003C00007C00007C0000780000F80000F80001F00001F0 +0001E00003E00003E00007C00007C0000780000F80000F80001F00001F00001E00003E00 +003E00007C00007C0000780000F80000F80000F80000F800007800007C00007C00003E00 +003E00001E00001F00001F00000F80000F800007800007C00007C00003E00003E00001E0 +0001F00001F00000F80000F800007800007C00007C00003C00003E00003E00001F00001F +00000F00000F80000F800007C00007C00003C00003E00003E00001F00001F00000F00000 +F80000F800007C00007C00003C00003E00003E00001E00000C176476CA27>I<600000F0 +0000F80000F800007800007C00007C00003E00003E00001E00001F00001F00000F80000F +800007800007C00007C00003E00003E00001E00001F00001F00000F80000F80000780000 +7C00007C00003C00003E00003E00001F00001F00000F00000F80000F800007C00007C000 +03C00003E00003E00001F00001F00000F00000F80000F800007C00007C00003C00003E00 +003E00003E00003E00003C00007C00007C0000F80000F80000F00001F00001F00003E000 +03E00003C00007C00007C0000F80000F80000F00001F00001F00003E00003E00003C0000 +7C00007C0000780000F80000F80001F00001F00001E00003E00003E00007C00007C00007 +80000F80000F80001F00001F00001E00003E00003E00007C00007C0000780000F80000F8 +0000F0000060000017647BCA27>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F060046474CA1C>I E /FJ 14 120 df<1F003F807FC0FFE0FFE0FFE0FFE0 +FFE07FC03F801F000B0B6C8A33>46 D<000000007800000000F800000001FC00000001FC +00000003FC00000003FC00000007F800000007F80000000FF00000000FF00000001FE000 +00001FE00000001FC00000003FC00000003FC00000007F800000007F80000000FF000000 +00FF00000001FE00000001FE00000001FC00000003FC00000003FC00000007F800000007 +F80000000FF00000000FF00000001FE00000001FE00000001FC00000003FC00000003FC0 +0000007F800000007F80000000FF00000000FF00000001FE00000001FE00000001FC0000 +0003FC00000003FC00000007F800000007F80000000FF00000000FF00000000FE0000000 +1FE00000001FE00000003FC00000003FC00000007F800000007F80000000FF00000000FF +00000000FE00000001FE00000001FE00000003FC00000003FC00000007F800000007F800 +00000FF00000000FF00000000FE00000001FE00000001FE00000003FC00000003FC00000 +007F800000007F80000000FF00000000FF00000000FE00000000FE000000007C00000000 +7C00000000264D7AC433>I<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B2B6CAA33>58 +D<000007F8000000003FFF00000000FFFF80000003FFFFE000000FFFFFF000001FFFFFF8 +00003FFC0FF800007FE003FC0000FF8001FC0001FF0000FE0003FC00007E0003F8007E7F +0007F801FFBF0007F007FFFF000FE00FFFFF800FC01FFFFF801FC03FFFFF801F803FC3FF +803F807F81FF803F007F00FFC03F00FE007FC07F00FC003FC07E01FC003FC07E01F8001F +C07E01F8001FC0FE01F8001FC0FC03F8001FC0FC03F0000FC0FC03F0000FC0FC03F0000F +C0FC03F0000FC0FC03F0000FC0FC03F0000FC0FC03F0000FC0FC03F0000FC0FC03F0000F +C0FC03F8001FC0FE01F8001F807E01F8001F807E01F8001F807E01FC003F807F00FC003F +003F00FE007F003F007F00FE003F807F81FE001F803FC3FC001FC03FFFFC000FC01FFFF8 +000FE00FFFF00007F007FFE00007F801FF800003F8007E000003FC00000F8001FF00001F +C000FF80003FC0007FE000FFC0003FFC07FF80001FFFFFFF00000FFFFFFE000003FFFFF8 +000000FFFFF00000003FFF8000000007FC00002A3F7CBD33>64 D<001FFC00000000FFFF +80000003FFFFE0000007FFFFF000000FFFFFFC00001FFFFFFE00001FF007FF00001FE001 +FF00001FE000FF80001FE0003F80000FC0003FC0000780001FC0000000001FE000000000 +0FE0000000000FE0000000000FE0000000000FE0000000000FE00000000FFFE0000001FF +FFE000001FFFFFE000007FFFFFE00001FFFFFFE00007FFFF0FE0000FFFC00FE0001FFC00 +0FE0003FF0000FE0007FC0000FE0007F80000FE000FF00000FE000FE00000FE000FE0000 +0FE000FE00000FE000FE00000FE000FE00000FE000FF00001FE0007F00001FE0007F8000 +7FE0003FE000FFF0003FF807FFFFF01FFFFFFFFFF80FFFFFFFFFF807FFFFF3FFF803FFFF +C1FFF800FFFF003FF0001FF00000002D2E7BAC33>97 D<0000007FF800000000FFFC0000 +0001FFFC00000001FFFC00000000FFFC000000007FFC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC000001FF01FC000007FFC1FC00001FFFF1FC0000 +7FFFF9FC0000FFFFFFFC0001FFFFFFFC0003FF81FFFC0007FE003FFC000FF8001FFC000F +F0000FFC001FE00007FC001FC00003FC003FC00003FC003F800001FC007F800001FC007F +000001FC007F000001FC00FF000001FC00FE000001FC00FE000001FC00FE000001FC00FE +000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FF +000001FC007F000001FC007F000003FC007F800003FC003F800003FC003FC00007FC003F +C00007FC001FE0000FFC001FF0001FFC000FF8003FFC0007FC007FFC0003FF81FFFFF003 +FFFFFFFFF800FFFFFDFFFC007FFFF9FFFC003FFFE1FFF8000FFF80FFF00001FE0000002E +3E7DBC33>100 D<3FFC000000007FFE00000000FFFE00000000FFFE000000007FFE0000 +00003FFE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000 +000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000 +000000FE01FF000000FE07FFC00000FE1FFFF00000FE7FFFF80000FEFFFFF80000FFFFFF +FC0000FFFF07FE0000FFF801FE0000FFF000FE0000FFE000FF0000FFC0007F0000FF8000 +7F0000FF80007F0000FF00007F0000FF00007F0000FF00007F0000FE00007F0000FE0000 +7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000 +7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000 +7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000 +7F0000FE00007F0000FE00007F003FFFF80FFFFC7FFFFC1FFFFEFFFFFE3FFFFFFFFFFE3F +FFFF7FFFFC1FFFFE3FFFF80FFFFC303D7FBC33>104 D<0000E000000003F800000003F8 +00000007FC00000007FC00000007FC00000003F800000003F800000000E0000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000003FFFF800007FFFFC00007FFFFC00007FFFFC00007FFFFC00003F +FFFC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001 +FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC +00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00 +000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000 +0001FC00000001FC00000001FC00007FFFFFFFC0FFFFFFFFE0FFFFFFFFF0FFFFFFFFF0FF +FFFFFFE07FFFFFFFC0243E78BD33>I<7FF800000000FFFC00000000FFFC00000000FFFC +00000000FFFC000000007FFC0000000000FC0000000000FC0000000000FC0000000000FC +0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC +0000000000FC0000000000FC0000000000FC01FFFFC000FC03FFFFE000FC07FFFFF000FC +07FFFFF000FC03FFFFE000FC01FFFFC000FC000FF00000FC001FE00000FC003FC00000FC +007F800000FC00FF000000FC01FE000000FC03FC000000FC07F8000000FC0FF0000000FC +1FE0000000FC3FC0000000FC7F80000000FCFFC0000000FDFFE0000000FFFFE0000000FF +FFF0000000FFF3F8000000FFE3FC000000FFC1FC000000FF80FE000000FF007F000000FE +007F000000FC003F800000FC001FC00000FC001FE00000FC000FE00000FC0007F00000FC +0003F80000FC0003FC0000FC0001FC0000FC0000FE007FFFF80FFFF0FFFFFC1FFFF8FFFF +FC1FFFFCFFFFFC1FFFFCFFFFFC1FFFF87FFFF80FFFF02E3D7EBC33>107 +D<000001FE00003FFC0FFFC0007FFE1FFFF000FFFE7FFFF800FFFEFFFFFE007FFFFFFFFF +003FFFFE07FF0000FFF800FF8000FFE0007FC000FFC0003FE000FF80001FE000FF80000F +F000FF00000FF000FF000007F000FE000007F800FE000003F800FE000003F800FE000003 +FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001 +FC00FE000001FC00FE000001FC00FE000001FC00FE000003FC00FE000003F800FE000003 +F800FF000007F800FF000007F000FF80000FF000FF80000FE000FFC0001FE000FFC0003F +C000FFE0007FC000FFF801FF8000FFFE07FF0000FFFFFFFE0000FEFFFFFC0000FE7FFFF8 +0000FE3FFFE00000FE0FFF800000FE03FE000000FE0000000000FE0000000000FE000000 +0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000 +0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000 +003FFFF80000007FFFFC000000FFFFFE000000FFFFFE0000007FFFFC0000003FFFF80000 +002E427FAB33>112 D<00000003FE007FFF801FFF80FFFFC07FFFE0FFFFC1FFFFE0FFFF +C3FFFFF0FFFFC7FFFFF07FFFCFFE0FF0001FDFF00FF0001FFFC007E0001FFF8003C0001F +FF000000001FFE000000001FFC000000001FF8000000001FF8000000001FF0000000001F +F0000000001FE0000000001FE0000000001FE0000000001FC0000000001FC0000000001F +C0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001F +C0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001F +C0000000001FC0000000001FC0000000001FC00000007FFFFFFE0000FFFFFFFF0000FFFF +FFFF0000FFFFFFFF0000FFFFFFFF00007FFFFFFE00002C2C7DAB33>114 +D<0003C00000000007E0000000000FE0000000000FE0000000000FE0000000000FE00000 +00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 +003FFFFFFFFC007FFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE007FFFFFFFFC +00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 +00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 +00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 +00000FE0000000000FE0000000000FE0000000000FE0001F00000FE0003F80000FE0003F +80000FE0003F80000FE0003F80000FE0003F80000FE0007F80000FF0007F000007F000FF +000007F801FF000007FE07FE000003FFFFFC000001FFFFF8000000FFFFF00000007FFFE0 +0000001FFF8000000007FC000029387EB633>116 D<3FFC001FFE007FFE003FFF00FFFE +007FFF00FFFE007FFF007FFE003FFF003FFE001FFF0000FE00007F0000FE00007F0000FE +00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE +00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE +00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE +00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000FF0000FE +0000FF0000FE0001FF0000FE0001FF0000FF0003FF00007F800FFF00007FE03FFFFC003F +FFFFFFFE003FFFFFFFFF001FFFFF7FFF000FFFFE7FFE0003FFF83FFC0000FFC00000302C +7FAA33>I<7FFF8007FFF8FFFFC00FFFFCFFFFE01FFFFCFFFFE01FFFFCFFFFC00FFFFC7F +FF8007FFF80FC000000FC00FE000001FC007E000001F8007E000001F8007E000001F8007 +E000001F8007E000001F8007F000003F8003F000003F0003F000003F0003F000003F0003 +F00FC03F0003F01FE03F0003F01FE03F0001F83FF07E0001F83FF07E0001F83FF07E0001 +F87FF87E0001F87CF87E0001F87CF87E0000F87CF87C0000FCFCFCFC0000FCFCFCFC0000 +FCFCFCFC0000FCF87CFC0000FCF87CFC00007CF87CF800007DF87EF800007DF03EF80000 +7DF03EF800007FF03FF800007FF03FF800003FE01FF000003FE01FF000003FE01FF00000 +3FC00FF000000F8007C0002E2B7EAA33>119 D E /FK 85 125 df<0000001FFC000000 +00000001FFFFC0000000000007F007F000000000001F8000FC00000000007E00003F0000 +000001FC00001FC000000003F0000007E000000007E0000003F00000000FC0000001F800 +00001F80000000FC0000003F000000007E0000007F000000007F000000FE000000003F80 +0001FC000000001FC00003FC000000001FE00003F8000000000FE00007F8000000000FF0 +0007F00000000007F0000FF00000000007F8000FF00000000007F8001FE00000000003FC +001FE00000000003FC003FE00000000003FE003FC00000000001FE003FC00000000001FE +007FC00000000001FF007FC00000000001FF007FC00000000001FF007F800000000000FF +007F8180000000C0FF00FF8180000000C0FF80FF8180000000C0FF80FF81FFFFFFFFC0FF +80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF +80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF80FF8180000000C0FF80FF8180000000C0FF +80FF8180000000C0FF80FF800000000000FF807F800000000000FF007FC00000000001FF +007FC00000000001FF007FC00000000001FF003FC00000000001FE003FC00000000001FE +003FE00000000003FE001FE00000000003FC001FE00000000003FC000FE00000000003F8 +000FF00000000007F80007F00000000007F00007F8000000000FF00003F8000000000FE0 +0003FC000000001FE00001FC000000001FC00000FE000000003F8000007F000000007F00 +00007F000000007F0000003F80000000FE0000001FC0000001FC00000007E0000003F000 +000003F0000007E000000001FC00001FC0000000007E00003F00000000001F8000FC0000 +00000007F007F0000000000001FFFFC00000000000001FFC0000000041487BC54C>2 +D<000000FFC001FC0000000FFFF80FFF0000003F803E3F03C00000FC00077E07E00003F8 +000FFC0FF00007F0003FF81FF0000FE0007FF01FF0001FC0007FF01FF0003F80007FE01F +F0007F00007FE01FF0007F00007FE00FE000FF00003FC0038000FE00001FC0000000FE00 +001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 +0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 +001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 +00FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF00000FE00001FC0000000FE00 +001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 +0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 +001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 +0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 +001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 +0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 +001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 +0000FE00001FC0000000FE00001FC0000000FE00001FC0000001FF00003FF000007FFFFC +0FFFFFE0007FFFFC0FFFFFE0007FFFFC0FFFFFE0003C467EC539>11 +D<000001FF000000000FFFE00000007F80F8000001FC001C000003F8000E000007E0000F +00000FC0007F00001FC000FF80003F8000FF80007F0000FF80007F0000FF8000FF0000FF +8000FE00007F0000FE00003E0000FE0000000000FE0000000000FE0000000000FE000000 +0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000 +0000FE0000000000FE0000000000FE00003F80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF +8000FE0000FF8000FE00007F8000FE00003F8000FE00003F8000FE00003F8000FE00003F +8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F +8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F +8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F +8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F +8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F +8001FF00007FC07FFFFC1FFFFF7FFFFC1FFFFF7FFFFC1FFFFF30467EC536>I<000001FF +C00000000FFFFB8000007F803F800001FC003F800003F800FF800007E000FF80001FC000 +FF80001FC000FF80003F8000FF80007F0000FF80007F00007F8000FF00003F8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 +3F8000FE00003F8000FE00003F80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 +3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8001FF0000 +7FC07FFFFC1FFFFF7FFFFC1FFFFF7FFFFC1FFFFF30467EC536>I<000000FF80003FE000 +0000000FFFF001FFFC000000003F807C0FF01F00000000FC000E3F800380000003F80007 +7F0001C0000007F0000FFC0001E000000FE0003FF8000FE000001FC0007FF8001FF00000 +3F80007FF0001FF000007F00007FE0001FF000007F00007FE0001FF00000FF00007FE000 +1FF00000FE00007FC0000FE00000FE00001FC00007C00000FE00001FC00000000000FE00 +001FC00000000000FE00001FC00000000000FE00001FC00000000000FE00001FC0000000 +0000FE00001FC00000000000FE00001FC00000000000FE00001FC00000000000FE00001F +C00000000000FE00001FC00000000000FE00001FC00000000000FE00001FC00000000000 +FE00001FC00007F000FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFF +FFF00000FE00001FC0001FF00000FE00001FC0000FF00000FE00001FC00007F00000FE00 +001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F0 +0000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001F +C00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000 +FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC000 +07F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00 +001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F0 +0000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001F +C00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000 +FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC000 +07F00001FF00003FE0000FF8007FFFFC0FFFFF83FFFFE07FFFFC0FFFFF83FFFFE07FFFFC +0FFFFF83FFFFE04B467EC551>I<000000000600000000000600000000000C0000000000 +1C0000000000180000000000380000000000300000000000600000007F8060000003FFF0 +C000000FC0FCC000003E001F8000007C000F800000F00003C00001E00007E00003E00007 +F00007C0000CF8000F80000C7C000F8000187C001F8000187E003F0000303F003F000070 +3F003F0000603F007F0000E03F807E0000C01F807E0001801F807E0001801F80FE000300 +1FC0FE0003001FC0FE0006001FC0FE000E001FC0FE000C001FC0FE001C001FC0FE001800 +1FC0FE0030001FC0FE0030001FC0FE0060001FC07E0060001F807E00C0001F807F01C000 +3F803F0180003F003F0380003F001F0300003E001F8600007E000F8600007C000FCC0000 +FC0007CC0000F80003F80001F00001F80003E00000F80007C000007E001F0000007F807E +000000C7FFF8000000C07F80000001800000000001800000000003000000000007000000 +00000600000000000E00000000000C00000000001800000000001800000000002A3F7DB4 +31>28 D<1E007F80FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC07F807F807F807F807F80 +7F807F807F807F807F807F807F803F003F003F003F003F003F003F003F003F003F003F00 +1E001E001E001E001E001E001E001E001E001E001E001E000C000C000C000C000C000000 +0000000000000000000000000000000000001E007F807F80FFC0FFC0FFC0FFC07F807F80 +1E000A4778C61B>33 D<1E0003C07F800FF0FF801FF0FFC01FF8FFC01FF8FFE01FFCFFE0 +1FFCFFE01FFC7FE00FFC1E6003CC0060000C0060000C0060000C0060000C00E0001C00C0 +001800C0001800C0001801C00038018000300380007003000060070000E0060000C00E00 +01C01C0003803800070070000E0060000C001E1D7DC431>I<1E007F80FF80FFC0FFC0FF +E0FFE0FFE07FE01E60006000600060006000E000C000C000C001C0018003800300070006 +000E001C003800700060000B1D78C41B>39 D<00000C00001C0000380000700000E00001 +C00003C0000780000F00000F00001E00003C00003C0000780000F80000F00001F00001E0 +0003E00003E00007C00007C00007C0000F80000F80000F80001F00001F00001F00003F00 +003F00003E00003E00007E00007E00007E00007E00007C00007C00007C0000FC0000FC00 +00FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC00 +00FC0000FC0000FC0000FC0000FC0000FC00007C00007C00007C00007E00007E00007E00 +007E00003E00003E00003F00003F00001F00001F00001F00000F80000F80000F800007C0 +0007C00007C00003E00003E00001E00001F00000F00000F800007800003C00003C00001E +00000F00000F000007800003C00001C00000E000007000003800001C00000C166476CA26 +>II<0000F000000000F000000000F80000 +0000F000000000F000000000F000000000F000000000F000000000F000000000F0000078 +00F001E0FC00F003F0FF00F00FF07F80F01FE03FC0F03FC00FF060FF0003F861FC0000FC +63F000003F6FC000000FFF00000003FC00000000F000000003FC0000000FFF0000003F6F +C00000FC63F00003F861FC000FF060FF003FC0F03FC07F80F01FE0FF00F00FF0FC00F003 +F07800F001E00000F000000000F000000000F000000000F000000000F000000000F00000 +0000F000000000F800000000F000000000F00000242B7ACA31>I<00000000C000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E0000000007FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80 +7FFFFFFFFFFFFFFF0000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000001E00000000000000001E000000000 +00000001E00000000000000001E00000000000000000C00000000041407BB84C>I<1E00 +7F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60006000600060006000E000C000C000C001C0 +018003800300070006000E001C003800700060000B1D78891B>II<1E007F807F80FFC0FFC0FFC0FFC0 +7F807F801E000A0A78891B>I<0000FF00000007FFE000001F81F800003E007C0000FC00 +3F0001F8001F8001F0000F8003E00007C007C00003E007C00003E00FC00003F00F800001 +F01F800001F81F800001F83F800001FC3F800001FC3F800001FC3F000000FC7F000000FE +7F000000FE7F000000FE7F000000FE7F000000FEFF000000FFFF000000FFFF000000FFFF +000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF00 +0000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF0000 +00FFFF000000FFFF000000FFFF000000FFFF000000FF7F000000FE7F000000FE7F000000 +FE7F000000FE7F000000FE7F800001FE3F800001FC3F800001FC3F800001FC1F800001F8 +1F800001F80FC00003F00FC00003F00FC00003F007E00007E003E00007C003F0000FC001 +F8001F8000FC003F00003E007C00001F81F8000007FFE0000000FF000028447CC131>48 +D<000030000000F0000001F0000003F000001FF00000FFF000FFFFF000FFE7F000FF07F0 +000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 +000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 +000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 +000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 +000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 +000007F0000007F0000007F0000007F0000007F0000007F0000007F000000FF800001FFC +007FFFFFFF7FFFFFFF7FFFFFFF204278C131>I<0003FE0000001FFFC000007FFFF00001 +F80FFC0003C001FE00078000FF000E00007F801C00003FC01C00001FE03800001FF03000 +000FF07000000FF860000007F86C000007F8FF000007FCFF800007FCFFC00007FCFFC000 +03FCFFC00003FCFFC00003FCFFC00003FC7F800007FC3F000007FC00000007FC00000007 +F800000007F80000000FF80000000FF00000001FF00000001FE00000001FE00000003FC0 +0000007F800000007F00000000FF00000000FE00000001FC00000003F800000007F00000 +0007E00000000FC00000001F800000003F000000007C00000000F800000000F000000001 +E000000003C000000007800000000F00000C001E00000C003C00000C0038000018007000 +001800E000001801C0000018038000003807000000300E000000701FFFFFFFF01FFFFFFF +F03FFFFFFFF07FFFFFFFF0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE026427BC131>I<0001FF +0000000FFFE000003FFFFC0000FE01FE0001F0007F8003C0003FC00700001FE00E00001F +E00E00000FF00FE0000FF01FF0000FF81FF0000FF81FF00007F81FF80007F81FF00007F8 +1FF00007F80FE0000FF803C0000FF80000000FF00000000FF00000000FF00000001FE000 +00001FE00000003FC00000003F800000007F00000000FE00000001FC00000003F0000000 +1FC000000FFF0000000FFFF000000001FC000000007F000000003F800000001FC0000000 +0FE00000000FF000000007F800000007FC00000003FC00000003FE00000003FE00000001 +FE00000001FF00000001FF00000001FF1E000001FF7F800001FFFFC00001FFFFC00001FF +FFC00001FFFFC00001FFFFC00001FEFF800003FEFF800003FE7E000003FC70000007FC30 +000007F83800000FF81C00000FF00E00001FE00780003FC003E0007F8001FE01FE00007F +FFF800000FFFE0000001FF000028447CC131>I<00000003800000000003800000000007 +80000000000F80000000000F80000000001F80000000003F80000000003F80000000007F +8000000000FF8000000000FF8000000001FF8000000003BF80000000033F80000000073F +80000000063F800000000C3F800000001C3F80000000183F80000000303F80000000703F +80000000603F80000000C03F80000001C03F80000001803F80000003003F80000007003F +80000006003F8000000C003F8000001C003F80000018003F80000030003F80000070003F +80000060003F800000E0003F800001C0003F80000180003F80000380003F80000300003F +80000600003F80000E00003F80000C00003F80001800003F80003800003F80003000003F +80006000003F8000E000003F8000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC00000003F +80000000003F80000000003F80000000003F80000000003F80000000003F80000000003F +80000000003F80000000003F80000000003F80000000003F80000000003F80000000003F +8000000000FFE00000007FFFFFC000007FFFFFC000007FFFFFC02A437DC231>I<060000 +00C007C00007C007FC007F8007FFFFFF0007FFFFFE0007FFFFFC0007FFFFF80007FFFFE0 +0007FFFF8000063FFC000006000000000600000000060000000006000000000600000000 +060000000006000000000600000000060000000006000000000600000000060000000006 +0000000006000000000600FF00000607FFC000061F01F000063800FC0006F0007E0007C0 +003F000780001F800780001FC00700000FC00600000FE000000007F000000007F0000000 +07F000000007F800000003F800000003F800000003FC00000003FC00000003FC00000003 +FC00000003FC3E000003FC7F000003FCFF800003FCFF800003FCFF800003FCFF800003FC +FF800003F8FF000007F8FE000007F860000007F060000007F07000000FF03000000FE038 +00001FC01C00001FC01E00003F800F00007F00078000FE0003C001FC0001F807F000007F +FFE000001FFF00000007F8000026447BC131>I<000007FC0000003FFF000000FFFFC000 +03FC03E00007E000F0001FC00038003F000058007E0001FC00FE0003FC00FC0007FC01F8 +0007FC03F00007FC03F00007FC07E00003F80FE00001F00FE00000001FC00000001FC000 +00001FC00000003F800000003F800000003F800000007F800000007F800000007F007F80 +007F01FFF0007F0780FC00FF0E003E00FF1C001F80FF38000FC0FF700007E0FF600007E0 +FFE00003F0FFC00003F8FFC00001F8FFC00001FCFF800001FCFF800000FEFF800000FEFF +800000FEFF000000FFFF000000FFFF000000FFFF000000FF7F000000FF7F000000FF7F00 +0000FF7F000000FF7F000000FF7F800000FF3F800000FF3F800000FF3F800000FE1F8000 +00FE1F800001FE1FC00001FC0FC00001FC0FC00003F807E00003F807E00007F003F00007 +E001F8000FC000FC001F80007E003F00003F80FE00000FFFF8000003FFE0000000FF8000 +28447CC131>I<1C00000000001C00000000001F80000000001FFFFFFFFFC01FFFFFFFFF +C01FFFFFFFFFC03FFFFFFFFF803FFFFFFFFF803FFFFFFFFF003FFFFFFFFE00380000000C +00300000001C0070000000380060000000300060000000700060000000E00060000000C0 +00C0000001C000C00000038000C000000700000000000600000000000E00000000001C00 +00000000180000000000380000000000700000000000600000000000E00000000001C000 +00000001C0000000000380000000000780000000000700000000000F00000000000F0000 +0000001F00000000001E00000000003E00000000003E00000000007E00000000007C0000 +0000007C0000000000FC0000000000FC0000000001FC0000000001FC0000000001FC0000 +000003F80000000003F80000000003F80000000003F80000000007F80000000007F80000 +000007F80000000007F80000000007F80000000007F8000000000FF8000000000FF80000 +00000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000 +00000FF8000000000FF80000000007F00000000001C00000002A457BC231>I<0000FF00 +000007FFE000001FFFF800007F00FE0000FC003F0001F0001F8003E0000FC003C00007E0 +07C00003F00F800001F00F800001F00F000001F81F000000F81F000000F81F000000F81F +000000F81F800000F81F800000F81FC00001F81FC00001F01FE00001F00FF00003E00FFC +0003E007FE0007C007FF800F8003FFC01F0001FFF03E0001FFF87800007FFEF000003FFF +C000001FFFC0000007FFE0000003FFF8000007FFFC00001E7FFF00007C1FFF8000F80FFF +C001E003FFE003C001FFF007C0007FF80F80003FFC1F00000FFC3E000007FE3E000001FE +7C000000FE7C000000FF7C0000007FF80000003FF80000003FF80000001FF80000001FF8 +0000001FF80000001FF80000001FFC0000001E7C0000003E7C0000003E7E0000003C3E00 +00007C1F000000F81F800001F00FC00003E007E00007C003F8001F8000FF00FF00003FFF +FC00000FFFF0000001FF800028447CC131>I<0000FF00000007FFE000001FFFF800007F +80FC0000FC007E0001F8003F0003F0001F8007E0000FC00FE00007E01FC00007E01FC000 +03F03F800003F03F800003F87F800001F87F000001FC7F000001FCFF000001FCFF000001 +FCFF000001FEFF000000FEFF000000FEFF000000FEFF000000FEFF000000FEFF000000FF +FF000000FFFF000000FFFF000000FF7F000001FF7F000001FF7F000001FF3F800001FF3F +800003FF1F800003FF1FC00003FF0FC00007FF07E00006FF07E0000EFF03F0001CFF01F8 +0038FF007C0070FF003F01E0FF000FFF80FE0001FE00FE00000000FE00000001FE000000 +01FC00000001FC00000001FC00000001FC00000003F800000003F800000003F00F800007 +F01FC00007E03FE0000FE03FE0000FC03FE0001F803FE0001F803FC0003F003F80007E00 +1E0000FC001C0001F8000F0003F00007E01FE00003FFFF800000FFFE0000001FF0000028 +447CC131>I<1E007F807F80FFC0FFC0FFC0FFC07F807F801E0000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +1E007F807F80FFC0FFC0FFC0FFC07F807F801E000A2B78AA1B>I<1E007F807F80FFC0FF +C0FFC0FFC07F807F801E0000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000001E007F00FF80FF80FFC0FFC0FFC0FF +C07FC01EC000C000C000C000C000C001C001800180018003800300070006000E000C001C +003800700060000A3E78AA1B>I<7FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FFFFFFFF +FFFFFFFF807FFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000007FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FFFFFFFF +FFFFFFFF807FFFFFFFFFFFFFFF0041187BA44C>61 D<000FFC0000007FFFC00001F007F0 +00078001FC000E0000FE001C00007F003800003F807000003FC06000001FC0FE00001FE0 +FF00001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE07F00001FE01C +00003FC00000003FC00000007F800000007F80000000FF00000001FE00000003F8000000 +07F000000007E00000000FC00000001F800000001F000000003E000000003C0000000078 +0000000078000000007000000000F000000000E000000000E000000000C000000001C000 +000001C000000001C0000000018000000001800000000180000000018000000001800000 +000180000000018000000001800000000180000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000003 +C00000000FF00000000FF00000001FF80000001FF80000001FF80000001FF80000000FF0 +0000000FF000000003C0000023467BC52E>63 D<00000000C00000000000000001E00000 +000000000001E00000000000000001E00000000000000003F00000000000000003F00000 +000000000003F00000000000000007F80000000000000007F80000000000000007F80000 +00000000000FFC000000000000000FFC000000000000000FFC0000000000000019FE0000 +000000000019FE0000000000000019FE0000000000000030FF0000000000000030FF0000 +000000000070FF80000000000000607F80000000000000607F80000000000000E07FC000 +0000000000C03FC0000000000000C03FC0000000000001C03FE0000000000001801FE000 +0000000001801FE0000000000003001FF0000000000003000FF0000000000003000FF000 +0000000006000FF80000000000060007F80000000000060007F800000000000C0003FC00 +000000000C0003FC00000000000C0003FC0000000000180001FE0000000000180001FE00 +00000000180001FE0000000000300000FF0000000000300000FF0000000000700000FF80 +000000006000007F80000000006000007F8000000000E000007FC000000000FFFFFFFFC0 +00000000FFFFFFFFC000000001FFFFFFFFE0000000018000001FE0000000018000001FE0 +000000030000001FF0000000030000000FF0000000030000000FF0000000060000000FF8 +0000000600000007F80000000600000007F80000000C00000003FC0000000C00000003FC +0000000C00000003FC0000001800000001FE0000001800000001FE0000001800000001FE +0000003000000000FF0000003000000000FF0000007800000000FF800000F800000000FF +800001FC00000000FFC0000FFF00000003FFE000FFFFE000007FFFFFC0FFFFE000007FFF +FFC0FFFFE000007FFFFFC042477DC649>65 DI<0000000FFE00 +0060000000FFFFC000E0000003FFFFF000E000000FFC01FC01E000003FC0003E01E00000 +FF00000F83E00003FC000003C7E00007F8000001E7E0000FF0000000FFE0001FE0000000 +7FE0003FC00000003FE0007F800000001FE000FF000000000FE001FE000000000FE001FC +0000000007E003FC0000000007E007F80000000003E007F80000000003E00FF000000000 +01E00FF00000000001E01FE00000000000E01FE00000000000E03FE00000000000E03FE0 +0000000000E03FC00000000000607FC00000000000607FC00000000000607FC000000000 +00607FC0000000000000FF80000000000000FF80000000000000FF80000000000000FF80 +000000000000FF80000000000000FF80000000000000FF80000000000000FF8000000000 +0000FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF80 +000000000000FF800000000000007FC00000000000007FC00000000000007FC000000000 +00607FC00000000000603FC00000000000603FE00000000000603FE00000000000601FE0 +0000000000E01FF00000000000E00FF00000000000C00FF00000000000C007F800000000 +01C007F800000000018003FC00000000038001FC00000000038001FE00000000070000FF +000000000600007F800000000E00003FC00000001C00001FE00000003800000FF0000000 +78000007F8000000F0000003FC000001E0000000FF000007800000003FC0001F00000000 +0FFC00FC0000000003FFFFF00000000000FFFFC000000000000FFE0000003B487BC546> +IIII<0000 +000FFE00006000000000FFFFC000E000000003FFFFF000E00000000FFC01FC01E0000000 +3FC0003E01E0000000FF00000F83E0000003FC000003C7E0000007F8000001E7E000000F +F0000000FFE000001FE00000007FE000003FC00000003FE000007F800000001FE00000FF +000000000FE00001FE000000000FE00001FC0000000007E00003FC0000000007E00007F8 +0000000003E00007F80000000003E0000FF00000000001E0000FF00000000001E0001FE0 +0000000000E0001FE00000000000E0003FE00000000000E0003FE00000000000E0003FC0 +000000000060007FC0000000000060007FC0000000000060007FC0000000000060007FC0 +00000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF80 +00000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF80 +00000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF80 +00000000000000FF8000000000000000FF80000001FFFFFFC07FC0000001FFFFFFC07FC0 +000001FFFFFFC07FC0000000007FF0007FC0000000003FE0003FC0000000001FE0003FE0 +000000001FE0003FE0000000001FE0001FE0000000001FE0001FF0000000001FE0000FF0 +000000001FE0000FF0000000001FE00007F8000000001FE00007F8000000001FE00003FC +000000001FE00001FE000000001FE00001FE000000001FE00000FF000000001FE000007F +800000001FE000003FC00000003FE000001FE00000003FE000000FF00000007FE0000007 +F8000000E7E0000003FE000001C7E0000000FF00000383E00000003FE0000F01E0000000 +0FFC00FE00E000000003FFFFF8006000000000FFFFE00000000000000FFE000000004248 +7BC54D>III<000FFFFFFE000FFFFFFE000FFFFFFE000003FF80000001FF00000000FF +00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00 +000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000 +0000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000 +00FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000 +FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF +00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00 +000000FF00000000FF00000000FF003F0000FF007F8000FF00FFC000FF00FFC000FF00FF +C000FF00FFC000FF00FFC001FE00FF8001FE00FF0001FE006C0003FC00700003F8003800 +07F8001C0007F0000E000FE00007001F800003E07F000000FFFC0000001FE0000027467B +C332>IIIII<0000001FFC00000000000001FFFFC0000000000007F007F000000000001F8000 +FC00000000007E00003F0000000001F800000FC000000003F0000007E000000007E00000 +03F00000000FC0000001F80000001F80000000FC0000003F000000007E0000007E000000 +003F000000FE000000003F800001FC000000001FC00003F8000000000FE00003F8000000 +000FE00007F00000000007F00007F00000000007F0000FF00000000007F8000FE0000000 +0003F8001FE00000000003FC001FE00000000003FC003FC00000000001FE003FC0000000 +0001FE003FC00000000001FE007FC00000000001FF007FC00000000001FF007F80000000 +0000FF007F800000000000FF007F800000000000FF00FF800000000000FF80FF80000000 +0000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF80000000 +0000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF80000000 +0000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF807FC0000000 +0001FF007FC00000000001FF007FC00000000001FF007FC00000000001FF003FC0000000 +0001FE003FE00000000003FE003FE00000000003FE001FE00000000003FC001FE0000000 +0003FC000FF00000000007F8000FF00000000007F80007F8000000000FF00007F8000000 +000FF00003F8000000000FE00003FC000000001FE00001FE000000003FC00000FE000000 +003F8000007F000000007F0000007F80000000FF0000003F80000000FE0000001FC00000 +01FC00000007E0000003F000000003F0000007E000000001FC00001FC0000000007E0000 +3F00000000001F8000FC000000000007F007F0000000000001FFFFC00000000000001FFC +0000000041487BC54C>II<0000001FFC0000000000 +0001FFFFC0000000000007F007F000000000001F8000FC00000000007E00003F00000000 +01FC00001FC000000003F0000007E000000007E0000003F00000000FC0000001F8000000 +1F80000000FC0000003F000000007E0000007F000000007F000000FE000000003F800001 +FC000000001FC00003FC000000001FE00003F8000000000FE00007F8000000000FF00007 +F00000000007F0000FF00000000007F8000FF00000000007F8001FE00000000003FC001F +E00000000003FC003FE00000000003FE003FC00000000001FE003FC00000000001FE007F +C00000000001FF007FC00000000001FF007FC00000000001FF007F800000000000FF007F +800000000000FF00FF800000000000FF80FF800000000000FF80FF800000000000FF80FF +800000000000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF +800000000000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF +800000000000FF80FF800000000000FF807F800000000000FF007FC00000000001FF007F +C00000000001FF007FC00000000001FF003FC00000000001FE003FC00000000001FE003F +E00000000003FE001FE00000000003FC001FE00000000003FC000FE00000000003F8000F +F00000000007F80007F00000000007F00007F80003F0000FF00003F8000FFC000FE00003 +FC001C0E001FE00001FC003807001FC00000FE003003803F8000007F007001807F000000 +7F006000C07F0000003F806000C0FE0000001FC06000E1FC00000007E0600063F0000000 +03F0600077E000000001FC70007FC0000000007E30007F00000000001FB800FC00000000 +0007FC07F80000C0000001FFFFFC0000C00000001FFC3C0000C000000000003C0000C000 +000000003E0001C000000000001E0001C000000000001F0003C000000000001F00038000 +000000001F80078000000000001FC00F8000000000000FF03F8000000000000FFFFF0000 +000000000FFFFF00000000000007FFFF00000000000007FFFE00000000000003FFFC0000 +0000000003FFFC00000000000001FFF8000000000000007FE0000000000000001F800042 +597BC54C>II<0001FF0003 +00000FFFE00700003FFFF8070000FE00FE0F0001F8001F0F0007E000079F0007C00003DF +000F800001FF001F000000FF003F0000007F003E0000003F007E0000003F007E0000001F +007C0000001F00FC0000000F00FC0000000F00FC0000000700FC0000000700FC00000007 +00FE0000000700FE0000000300FE0000000300FF0000000300FF00000003007F80000000 +007FC0000000007FE0000000003FF8000000003FFE000000001FFFE00000000FFFFE0000 +0007FFFFE0000003FFFFFC000001FFFFFF000000FFFFFFC000003FFFFFF000000FFFFFF8 +000001FFFFFC0000001FFFFE00000001FFFE000000001FFF0000000003FF8000000001FF +8000000000FFC0000000007FC0000000003FC0000000001FC0000000001FE0C00000000F +E0C00000000FE0C00000000FE0C000000007E0C000000007E0C000000007E0E000000007 +E0E000000007E0E000000007E0F000000007C0F00000000FC0F80000000FC0F80000000F +80FC0000001F80FE0000001F00FF0000003F00FF8000007E00FBC00000FC00F9F00001F8 +00F07C0003F000F03FC00FE000E00FFFFF8000E001FFFE0000C0003FF000002B487BC536 +>I<3FFFFFFFFFFFFFF83FFFFFFFFFFFFFF83FFFFFFFFFFFFFF83FF0001FF8001FF83F80 +000FF00003F83E00000FF00000F87C00000FF000007C7800000FF000003C7800000FF000 +003C7000000FF000001C7000000FF000001C7000000FF000001C6000000FF000000C6000 +000FF000000C6000000FF000000C6000000FF000000C6000000FF000000CC000000FF000 +0006C000000FF0000006C000000FF0000006C000000FF0000006C000000FF00000060000 +000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 +00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 +000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 +00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 +000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 +00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 +000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 +00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 +000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 +00000000001FF80000000000007FFE0000000001FFFFFFFF80000001FFFFFFFF80000001 +FFFFFFFF80003F447DC346>IIII89 D91 D<00C0001801C0003803800070070000E00E0001C00C000180 +1C00038018000300380007003000060070000E0060000C0060000C0060000C00E0001C00 +C0001800C0001800C0001800C0001800CF0019E0FFC01FF8FFE01FFCFFE01FFCFFE01FFC +7FE00FFC7FE00FFC3FE007FC3FC007F80F0001E01E1D71C431>II<0007FC000000003FFF80000000F80FE00000 +03C003F00000070001F800000E0000FC00000FC0007E00001FE0007F00001FF0003F8000 +1FF0003F80001FF0003F80001FF0001FC0001FF0001FC0000FE0001FC0000380001FC000 +0000001FC0000000001FC0000000001FC0000000001FC00000000FFFC0000001FFFFC000 +000FFE1FC000003FC01FC00000FF001FC00003FC001FC00007F8001FC0000FF0001FC000 +1FE0001FC0003FC0001FC0007FC0001FC0007F80001FC0007F80001FC060FF00001FC060 +FF00001FC060FF00001FC060FF00003FC060FF00003FC060FF00003FC060FF80007FC060 +7F8000EFC0607FC000C7E0C03FC001C7E0C01FE00783F1C007F81E03FF8001FFFC01FF00 +001FE0007C002B2E7CAC31>97 D<01FC00000000FFFC00000000FFFC00000000FFFC0000 +000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC03FC000001FC0FFF800001FC3C07 +E00001FC7001F80001FDE0007E0001FD80003F0001FF80001F8001FF00001FC001FE0000 +0FE001FC000007E001FC000007F001FC000007F001FC000003F801FC000003F801FC0000 +03FC01FC000003FC01FC000001FC01FC000001FE01FC000001FE01FC000001FE01FC0000 +01FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC0000 +01FE01FC000001FE01FC000001FC01FC000003FC01FC000003FC01FC000003F801FC0000 +03F801FC000007F001FC000007F001FE00000FE001FE00000FC001FF00001FC001FB0000 +3F8001F380007E0001E1C000FC0001E0F001F80001C03C07E00001801FFF8000000003FC +00002F467DC436>I<00007F80000003FFF000000FC07C00003F000F0000FC00038001F8 +0001C003F8000FC007F0001FE007E0003FE00FE0003FE01FC0003FE01FC0003FE03F8000 +3FE03F80001FC07F800007007F800000007F800000007F00000000FF00000000FF000000 +00FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000 +FF00000000FF000000007F000000007F800000007F800000003F800000003F800000303F +C00000301FC00000700FE00000600FE00000E007F00000C003F80001C001F800038000FC +000700003F001E00001FC078000007FFF0000000FF8000242E7DAC2B>I<000000007F00 +0000003FFF000000003FFF000000003FFF0000000001FF0000000000FF00000000007F00 +000000007F00000000007F00000000007F00000000007F00000000007F00000000007F00 +000000007F00000000007F00000000007F00000000007F00000000007F00000000007F00 +000000007F00000000007F00000000007F00000000007F00000000007F00000000007F00 +00007F807F000003FFF07F00000FC07C7F00003F000E7F00007E00077F0000FC0003FF00 +03F80001FF0007F00000FF0007E00000FF000FE000007F001FC000007F001FC000007F00 +3F8000007F003F8000007F007F8000007F007F8000007F007F0000007F00FF0000007F00 +FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00 +FF0000007F00FF0000007F00FF0000007F00FF0000007F007F0000007F007F8000007F00 +7F8000007F003F8000007F003F8000007F001FC000007F001FC000007F000FC00000FF00 +0FE00000FF0007F00001FF0003F00003FF0001F800077F8000FC000E7FC0003F001C7FFE +000FC0F87FFE0003FFE07FFE00007F007F002F467DC436>I<0001FE00000007FFC00000 +1F03F000007E00FC0000FC007E0001F8003F0003F0003F0007E0001F800FE0001FC00FC0 +000FC01FC0000FC03F80000FE03F800007E03F800007E07F800007F07F000007F07F0000 +07F0FF000007F0FF000007F0FF000007F0FFFFFFFFF0FFFFFFFFF0FF00000000FF000000 +00FF00000000FF00000000FF00000000FF000000007F000000007F000000007F80000000 +7F800000003F800000003F800000301FC00000301FC00000700FC00000600FE00000E007 +F00000C003F00001C001F800038000FC000700003E001E00001F80F8000003FFE0000000 +FF0000242E7DAC2B>I<00000FE00000007FF8000001F81E000003F03F00000FE07F8000 +1FC0FF80001F80FF80003F80FF80007F00FF80007F00FF80007F007F0000FE001C0000FE +00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00 +000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000 +00FFFFFF8000FFFFFF8000FFFFFF800000FE00000000FE00000000FE00000000FE000000 +00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000 +FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE +00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00 +000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000 +0000FE00000000FE00000000FE00000001FF8000007FFFFF00007FFFFF00007FFFFF0000 +21467EC51E>I<000000000F800001FC007FE0000FFF81F0F0003F07E381F000FC01FF03 +F001F800FE01F003F0007E01E007F0007F000007E0003F00000FE0003F80000FC0001F80 +001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0 +001FC0001FC0001FC0001FC0001FC0001FC0000FC0001F80000FE0003F800007E0003F00 +0007F0007F000003F0007E000001F800FC000001FC01F8000003BF07E00000030FFF8000 +000701FC0000000700000000000700000000000F00000000000F00000000000F00000000 +000F800000000007C00000000007E00000000007FFFFF8000003FFFFFF000003FFFFFFE0 +0001FFFFFFF800007FFFFFFC0001FFFFFFFE0007C0000FFF000F800000FF003F0000003F +803E0000001F807C0000000FC07C0000000FC0F800000007C0F800000007C0F800000007 +C0F800000007C0F800000007C0FC0000000FC07C0000000F807E0000001F803E0000001F +001F0000003E000F8000007C0007E00001F80001F80007E000007F003F8000001FFFFE00 +000001FFE000002C427DAC31>I<01FC00000000FFFC00000000FFFC00000000FFFC0000 +000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC01FE000001FC07FFC00001FC1E07 +F00001FC3801F80001FC7001FC0001FCE000FC0001FDC000FE0001FD8000FE0001FF8000 +7F0001FF00007F0001FF00007F0001FE00007F0001FE00007F0001FE00007F0001FC0000 +7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 +7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 +7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 +7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 +7F0001FC00007F0003FE0000FF80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F457DC4 +36>I<01E00007F80007F8000FFC000FFC000FFC000FFC0007F80007F80001E000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0003FE00FFFFF8FFFFF8FFFFF815437DC21C>I<00003C0000 +00FF000000FF000001FF800001FF800001FF800001FF800000FF000000FF0000003C0000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000007F80003FFF80003FFF80003FFF800000FF8000 +007F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 +003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 +003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 +003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 +003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 +003F8000003F803E003F807F003F80FF807F00FF807F00FF807E00FF807E00FF80FC007F +00F8003C01F0001E03E00007FF800001FE0000195785C21E>I<01FC00000000FFFC0000 +0000FFFC00000000FFFC0000000007FC0000000003FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 +000001FC001FFFE001FC001FFFE001FC001FFFE001FC000FFF0001FC0007F80001FC0007 +E00001FC0007C00001FC0007800001FC000E000001FC001C000001FC0038000001FC0070 +000001FC00E0000001FC01C0000001FC0380000001FC0700000001FC0F00000001FC3F80 +000001FC7FC0000001FCFFC0000001FDCFE0000001FF8FF0000001FF07F0000001FE03F8 +000001FC03FC000001FC01FC000001FC00FE000001FC00FF000001FC007F000001FC003F +800001FC003FC00001FC001FC00001FC000FE00001FC000FF00001FC0007F00001FC0007 +F80001FC0003FC0001FC0003FE0001FC0003FF0003FE0007FF80FFFFF81FFFF8FFFFF81F +FFF8FFFFF81FFFF82D457DC433>I<01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 +01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0003FE00FFFFF8 +FFFFF8FFFFF815457DC41C>I<01FC00FF00001FE00000FFFC07FFE000FFFC0000FFFC0F +03F801E07F0000FFFC3C01FC07803F800007FC7000FE0E001FC00003FCE0007E1C000FC0 +0001FDC0007F38000FE00001FD80007F30000FE00001FF80003FF00007F00001FF00003F +E00007F00001FF00003FE00007F00001FE00003FC00007F00001FE00003FC00007F00001 +FE00003FC00007F00001FC00003F800007F00001FC00003F800007F00001FC00003F8000 +07F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00 +003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F0 +0001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F +800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001 +FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F8000 +07F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00 +003F800007F00001FC00003F800007F00003FE00007FC0000FF800FFFFF81FFFFF03FFFF +E0FFFFF81FFFFF03FFFFE0FFFFF81FFFFF03FFFFE04B2C7DAB52>I<01FC01FE0000FFFC +07FFC000FFFC1E07F000FFFC3801F80007FC7001FC0003FCE000FC0001FDC000FE0001FD +8000FE0001FF80007F0001FF00007F0001FF00007F0001FE00007F0001FE00007F0001FE +00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC +00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC +00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC +00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC +00007F0001FC00007F0001FC00007F0003FE0000FF80FFFFF83FFFFEFFFFF83FFFFEFFFF +F83FFFFE2F2C7DAB36>I<00007F8000000003FFF00000000FC0FC0000003E001F000000 +7C000F800000F80007C00001F00003E00003E00001F00007C00000F8000FC00000FC000F +C00000FC001F8000007E003F8000007F003F8000007F003F0000003F007F0000003F807F +0000003F807F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF +0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF +0000003FC07F0000003F807F0000003F807F8000007F803F8000007F003F8000007F001F +8000007E001FC00000FE000FC00000FC000FE00001FC0007E00001F80003F00003F00001 +F80007E00000FC000FC000003E001F0000001FC0FE00000007FFF8000000007F8000002A +2E7DAC31>I<01FC03FC0000FFFC0FFF8000FFFC3C07E000FFFC7001F80007FDE000FE00 +01FD80007F0001FF80003F8001FF00001FC001FE00001FE001FC00000FE001FC00000FF0 +01FC000007F001FC000007F801FC000003F801FC000003FC01FC000003FC01FC000003FC +01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE +01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000003FC +01FC000003FC01FC000003FC01FC000007F801FC000007F801FC000007F001FC00000FF0 +01FE00000FE001FE00001FC001FF00003FC001FF00003F8001FF80007E0001FDC000FC00 +01FCF003F80001FC3C0FE00001FC1FFF800001FC03FC000001FC0000000001FC00000000 +01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000 +01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000 +03FE00000000FFFFF8000000FFFFF8000000FFFFF80000002F3F7DAB36>I<00007F8003 +000003FFE00700000FE0780700003F801C0F00007E000E0F0000FC00071F0003F800039F +0007F80001BF0007F00001FF000FE00000FF001FE00000FF001FC00000FF003FC000007F +003FC000007F007F8000007F007F8000007F007F8000007F00FF0000007F00FF0000007F +00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F +00FF0000007F00FF0000007F00FF0000007F007F8000007F007F8000007F007F8000007F +003F8000007F003FC000007F001FC000007F001FE00000FF000FE00000FF000FF00001FF +0007F00001FF0003F80003FF0001FC00077F0000FE000E7F00003F001C7F00000FC0F87F +000003FFE07F0000007F007F00000000007F00000000007F00000000007F00000000007F +00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F +00000000007F00000000007F00000000007F00000000007F0000000000FF800000003FFF +FE0000003FFFFE0000003FFFFE2F3F7DAB33>I<03F803F0FFF81FFCFFF83C3EFFF8707F +07F8E0FF03F9C0FF01F980FF01FB80FF01FB007E01FB003C01FF000001FE000001FE0000 +01FE000001FE000001FC000001FC000001FC000001FC000001FC000001FC000001FC0000 +01FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0000 +01FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0000 +03FF0000FFFFFE00FFFFFE00FFFFFE00202C7DAB26>I<003FE01801FFFC3807E01F780F +0003F81E0001F83C0000F87C00007878000078F8000038F8000038F8000018F8000018FC +000018FC000018FE000018FF8000007FC000007FFC00003FFFE0001FFFFC000FFFFF0007 +FFFFC003FFFFE000FFFFF0001FFFF80000FFF800000FFC000003FCC00001FEC00000FEC0 +00007EE000007EE000003EE000003EF000003EF000003EF000003EF800003CFC00007CFC +000078FE0000F8FF0001F0F38003E0F1F00F80E07FFE00C00FF0001F2E7DAC26>I<0006 +000000060000000600000006000000060000000E0000000E0000000E0000000E0000001E +0000001E0000001E0000003E0000007E0000007E000000FE000001FE000007FE00001FFF +FFF0FFFFFFF0FFFFFFF000FE000000FE000000FE000000FE000000FE000000FE000000FE +000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE +000000FE000000FE000000FE000000FE000000FE000000FE000000FE000C00FE000C00FE +000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C007E001C007F +0018007F0018003F0038001F8030001FC0700007E0E00001FFC000007F001E3E7EBC26> +I<01FC00007F00FFFC003FFF00FFFC003FFF00FFFC003FFF0007FC0001FF0003FC0000FF +0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F +0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F +0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F +0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F +0001FC00007F0001FC00007F0001FC0000FF0001FC0000FF0001FC0000FF0001FC0001FF +0001FC0001FF0000FC0001FF0000FE0003FF00007E00077F80007F000E7FC0003F001C7F +FE000FC0787FFE0003FFF07FFE00007F807F002F2D7DAB36>IIIII<3FFFFFFFE03FFFFFFFE03FC0003FE03F0000 +3FC03C00007F80380000FF00380000FF00300001FE00700003FC00700003FC00700007F8 +0060000FF00060000FF00060001FE00060003FC00060003FC00000007F80000000FF0000 +0001FF00000001FE00000003FC00000007FC00000007F80000000FF00000001FF0000000 +1FE00060003FC00060007F800060007F80006000FF0000C001FE0000C001FE0000C003FC +0000C007F80000C007F80001C00FF00001C01FE00003C01FE00003C03FC00007807F8000 +1F80FF8000FF80FFFFFFFF80FFFFFFFF80232B7DAA2B>III E /FL 17 121 df<0F003FC07FE0FFF0FFF0FFF0FFF0FFF0FFF07FE03FC00F00 +0C0C768B21>46 D<00001FF800000000FFFF00000003FFFFC000000FF81FF000001FC003 +F800003F8001FC00007E00007E0000FC00003F0001FC00003F8001F800001F8003F00000 +0FC007F000000FE007E0000007E00FE0000007F00FE0000007F00FE0000007F01FC00000 +03F81FC0000003F83FC0000003FC3FC0000003FC3FC0000003FC3FC0000003FC7F800000 +01FE7F80000001FE7F80000001FE7F80000001FE7F80000001FE7F80000001FE7F800000 +01FEFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF800000 +01FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF800000 +01FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF800000 +01FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FF7F800000 +01FE7F80000001FE7F80000001FE7F80000001FE7F80000001FE7FC0000003FE7FC00000 +03FE3FC0000003FC3FC0000003FC3FC0000003FC3FC0000003FC1FC0000003F81FC00000 +03F81FE0000007F80FE0000007F00FE0000007F007F000000FE007F000000FE003F80000 +1FC003F800001FC001FC00003F8000FE00007F00007F0000FE00003F8001FC00001FC003 +F800000FF81FF0000003FFFFC0000000FFFF000000001FF8000030517BCE3B>48 +D<000007000000000F000000001F000000007F00000000FF00000007FF0000003FFF0000 +0FFFFF0000FFFFFF0000FFF9FF0000FFC1FF0000F001FF00000001FF00000001FF000000 +01FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001 +FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF +00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00 +000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF0000 +0001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF000000 +01FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001 +FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF +00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00 +000001FF00000003FF8000000FFFE000FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE +274F75CE3B>I<7FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFF +FCFFFFFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFF8000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000007FFFFFFFFF +FFFFFFFFF8FFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFC7F +FFFFFFFFFFFFFFFFF84E1D7AAB5B>61 D<000000000380000000000000000007C0000000 +000000000007C0000000000000000007C000000000000000000FE000000000000000000F +E000000000000000000FE000000000000000001FF000000000000000001FF00000000000 +0000001FF000000000000000003FF800000000000000003FF800000000000000003FF800 +000000000000007FFC00000000000000007FFC0000000000000000FFFE00000000000000 +00E7FE0000000000000000E7FE0000000000000001E7FF0000000000000001C3FF000000 +0000000001C3FF0000000000000003C3FF800000000000000381FF800000000000000381 +FF800000000000000701FFC00000000000000700FFC00000000000000700FFC000000000 +00000E00FFE00000000000000E007FE00000000000000E007FE00000000000001C007FF0 +0000000000001C003FF00000000000001C003FF000000000000038001FF8000000000000 +38001FF800000000000078001FFC00000000000070000FFC00000000000070000FFC0000 +00000000F0000FFE000000000000E00007FE000000000000E00007FE000000000001E000 +07FF000000000001C00003FF000000000001C00003FF000000000003800003FF80000000 +0003800001FF800000000003800001FF800000000007000001FFC00000000007000000FF +C00000000007000000FFC0000000000E000000FFE0000000000E0000007FE0000000000E +0000007FE0000000001C0000003FF0000000001FFFFFFFFFF0000000003FFFFFFFFFF800 +0000003FFFFFFFFFF8000000003FFFFFFFFFF800000000780000001FFC00000000700000 +000FFC00000000700000000FFC00000000F00000000FFE00000000E000000007FE000000 +00E000000007FE00000001C000000007FF00000001C000000003FF00000001C000000003 +FF000000038000000003FF800000038000000001FF800000038000000001FF8000000700 +00000000FFC00000070000000000FFC000000F0000000000FFE000000E00000000007FE0 +00000E00000000007FE000001E00000000007FF000001E00000000003FF000003E000000 +00003FF000007F00000000003FF80001FF80000000007FFC000FFFE000000001FFFE00FF +FFFE0000007FFFFFFEFFFFFE0000007FFFFFFEFFFFFE0000007FFFFFFEFFFFFE0000007F +FFFFFE4F557CD458>65 D72 D82 +D<0000000000FF000000000001FFFF000000000001FFFF000000000001FFFF0000000000 +01FFFF00000000000007FF00000000000001FF00000000000000FF00000000000000FF00 +000000000000FF00000000000000FF00000000000000FF00000000000000FF0000000000 +0000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00 +000000000000FF00000000000000FF00000000000000FF00000000000000FF0000000000 +0000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00 +000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000F +F800FF000000007FFF00FF00000001FFFFE0FF00000007FC03F0FF0000001FE0007CFF00 +00003FC0003EFF0000007F00000FFF000000FE000007FF000001FC000003FF000003F800 +0003FF000007F8000001FF00000FF0000000FF00000FF0000000FF00001FE0000000FF00 +001FE0000000FF00003FC0000000FF00003FC0000000FF00007FC0000000FF00007FC000 +0000FF00007FC0000000FF00007F80000000FF0000FF80000000FF0000FF80000000FF00 +00FF80000000FF0000FF80000000FF0000FF80000000FF0000FF80000000FF0000FF8000 +0000FF0000FF80000000FF0000FF80000000FF0000FF80000000FF0000FF80000000FF00 +007F80000000FF00007F80000000FF00007FC0000000FF00007FC0000000FF00003FC000 +0000FF00003FC0000000FF00003FE0000000FF00001FE0000000FF00001FE0000000FF00 +000FF0000001FF000007F0000003FF000007F8000003FF000003FC000007FF000001FE00 +000FFF000000FF00001EFF8000007F80007CFFE000001FC000F8FFFF80000FF807E0FFFF +800003FFFF80FFFF800000FFFE00FFFF8000001FF000FF000039547CD241>100 +D<00000FF800000000FFFF00000003FFFFC000000FF80FF000001FC003FC00007F8001FE +0000FF0000FF0001FE00007F8003FC00003F8003F800001FC007F000001FC00FF000000F +E00FE000000FE01FE000000FF01FE0000007F03FC0000007F03FC0000007F07FC0000007 +F87FC0000007F87F80000007F87F80000003F8FF80000003F8FFFFFFFFFFF8FFFFFFFFFF +F8FFFFFFFFFFF8FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 +00FF8000000000FF8000000000FF80000000007F80000000007FC0000000007FC0000000 +003FC0000000003FC0000000003FE0000000381FE0000000381FE0000000780FF0000000 +7007F0000000F007F8000000E003FC000001E001FE000003C000FF00000380007F80000F +80003FC0001F00000FF0003C000007FE01F8000001FFFFE00000007FFF8000000007FC00 +002D367DB434>I<0000007F00000003FFE000000FFFF000003FC0F800007F01FC0001FE +03FE0003FC07FE0003F807FE0007F807FE000FF007FE000FF007FE001FE003FC001FE001 +F8001FE00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000 +003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000000 +3FC00000003FC00000003FC00000003FC00000003FC00000003FC00000FFFFFFFE00FFFF +FFFE00FFFFFFFE00FFFFFFFE00003FC00000003FC00000003FC00000003FC00000003FC0 +0000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000 +00003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000 +003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000000 +3FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003F +C00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0 +0000003FE0000000FFF000007FFFFFF8007FFFFFF8007FFFFFF8007FFFFFF80027547DD3 +24>I<0078000001FE000003FF000007FF800007FF800007FF800007FF800007FF800007 +FF800003FF000001FE000000780000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000007F8000FFFF8000FFFF8000FFFF8000FFFF800003FF800000FF800000 +7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 +7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 +7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 +7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 +7F8000007F8000007F8000007F800001FFE000FFFFFF80FFFFFF80FFFFFF80FFFFFF8019 +507CCF21>105 D<00FF8000000000FFFF8000000000FFFF8000000000FFFF8000000000 +FFFF800000000003FF800000000000FF8000000000007F8000000000007F800000000000 +7F8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F +8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80 +00000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000 +000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000 +0000007F8000000000007F8000000000007F8000FFFFF8007F8000FFFFF8007F8000FFFF +F8007F8000FFFFF8007F80003FFF80007F80001FFC00007F80001FF000007F80001FC000 +007F80001F0000007F80003E0000007F80007C0000007F8000F80000007F8001F0000000 +7F8003E00000007F8007800000007F800F000000007F801E000000007F803C000000007F +80FC000000007F81FC000000007F83FE000000007F87FF000000007F8FFF000000007F9E +FF800000007FBC7FC00000007FF83FC00000007FF03FE00000007FE01FF00000007FC00F +F00000007F800FF80000007F0007FC0000007F0003FE0000007F0003FE0000007F0001FF +0000007F0000FF8000007F00007F8000007F00007FC000007F00003FE000007F00001FE0 +00007F00001FF000007F00000FF800007F000007F800007F000007FC00007F000003FE00 +007F000003FF00007F000003FF8001FFC00007FFE0FFFFFF803FFFFFFFFFFF803FFFFFFF +FFFF803FFFFFFFFFFF803FFFFF38537DD23E>107 D<00FF0007FC000000FFFF003FFF80 +0000FFFF00FFFFE00000FFFF01F00FF80000FFFF03C007FC000003FF070003FE000000FF +0E0001FE0000007F1C0000FF0000007F380000FF0000007F300000FF0000007F7000007F +8000007F6000007F8000007FE000007F8000007FC000007F8000007FC000007F8000007F +C000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F +8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F +8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F +8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F +8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F +8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F +8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F +800001FFE00001FFE000FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFF +FFC0FFFFFFC03A347CB341>110 D<00000FFC00000000007FFF8000000001FFFFE00000 +0007F807F80000001FE001FE0000003F80007F0000007E00001F800000FC00000FC00001 +F8000007E00003F8000007F00007F0000003F80007F0000003F8000FE0000001FC000FE0 +000001FC001FC0000000FE001FC0000000FE003FC0000000FF003FC0000000FF007F8000 +00007F807F800000007F807F800000007F807F800000007F80FF800000007FC0FF800000 +007FC0FF800000007FC0FF800000007FC0FF800000007FC0FF800000007FC0FF80000000 +7FC0FF800000007FC0FF800000007FC0FF800000007FC0FF800000007FC07F800000007F +807F800000007F807FC0000000FF807FC0000000FF803FC0000000FF003FC0000000FF00 +1FC0000000FE001FE0000001FE000FE0000001FC000FF0000003FC0007F0000003F80003 +F8000007F00001FC00000FE00001FC00000FE000007F00003F8000003F80007F0000001F +E001FE00000007F807F800000003FFFFF0000000007FFF80000000000FFC00000032367C +B43B>I<00FF001F80FFFF007FF0FFFF01FFF8FFFF03E1FCFFFF0783FE03FF0F07FE00FF +1E07FE007F1C07FE007F3807FE007F3007FE007F7003FC007F6000F0007F600000007FE0 +0000007FC00000007FC00000007FC00000007FC00000007F800000007F800000007F8000 +00007F800000007F800000007F800000007F800000007F800000007F800000007F800000 +007F800000007F800000007F800000007F800000007F800000007F800000007F80000000 +7F800000007F800000007F800000007F800000007F800000007F800000007F800000007F +800000007F800000007F800000007F800000007FC0000001FFE00000FFFFFFF000FFFFFF +F000FFFFFFF000FFFFFFF00027347DB32E>114 D<0007FE00C0007FFF81C001FFFFE3C0 +07F803FFC00FC0007FC01F80003FC03F00001FC03E00000FC07E000007C07C000007C0FC +000003C0FC000003C0FC000003C0FC000001C0FE000001C0FE000001C0FF000001C0FF80 +0001C07FC00000007FF00000007FFF0000003FFFF800001FFFFF80000FFFFFE00007FFFF +F80003FFFFFE0000FFFFFF00003FFFFF800007FFFFC000003FFFE0000003FFE00000007F +F00000001FF0E000000FF0E0000007F8E0000007F8F0000003F8F0000003F8F0000001F8 +F8000001F8F8000001F8F8000001F8FC000001F0FC000001F0FE000003F0FF000003E0FF +000007E0FF80000FC0FFC0001F80FDF0003F00F8FC01FE00F07FFFF800E01FFFE000C003 +FF000025367CB42E>I<7FFFFF800FFFFF807FFFFF800FFFFF807FFFFF800FFFFF807FFF +FF800FFFFF8000FFFC0003FFF000003FF80001FF8000001FF80001FE0000000FF80001F8 +00000007F80001F000000003FC0001E000000003FE0003C000000001FF00038000000000 +FF000780000000007F800F00000000007FC01E00000000003FE03C00000000001FE03800 +000000000FF07800000000000FF8F0000000000007FDE0000000000003FDC00000000000 +01FFC0000000000001FF80000000000000FF800000000000007F800000000000003FC000 +00000000003FE00000000000007FF0000000000000FFF0000000000000E7F80000000000 +01E7FC000000000003C3FE00000000000781FE00000000000F00FF00000000000E00FF80 +000000001E007FC0000000003C003FC00000000078001FE000000000F0001FF000000000 +F0000FF800000001E00007F800000003C00003FC00000007C00003FE0000000FC00001FF +0000003FC00001FF800000FFC00001FFC00007FFE00007FFF000FFFFF8001FFFFFE0FFFF +F8001FFFFFE0FFFFF8001FFFFFE0FFFFF8001FFFFFE03B337FB23E>120 +D E /FM 18 122 df[<0000000000000000F000000000000000000000000000000001F8 +00000000000000000000000000000003FC00000000000000000000000000000003FC0000 +0000000000000000000000000003FC00000000000000000000000000000007FE00000000 +000000000000000000000007FE00000000000000000000000000000007FE000000000000 +0000000000000000000FFF0000000000000000000000000000000FFF0000000000000000 +000000000000000FFF0000000000000000000000000000001FFF80000000000000000000 +00000000001FFF8000000000000000000000000000001FFF800000000000000000000000 +0000003FFFC000000000000000000000000000003FFFC000000000000000000000000000 +003FFFC000000000000000000000000000007FFFE000000000000000000000000000007F +FFE000000000000000000000000000007FFFE00000000000000000000000000000FFFFF0 +0000000000000000000000000000FBFFF00000000000000000000000000001FBFFF80000 +000000000000000000000001F3FFF80000000000000000000000000001F1FFF800000000 +00000000000000000003F1FFFC0000000000000000000000000003E1FFFC000000000000 +0000000000000003E0FFFC0000000000000000000000000007E0FFFE0000000000000000 +000000000007C0FFFE0000000000000000000000000007C07FFE00000000000000000000 +0000000FC07FFF000000000000000000000000000F803FFF000000000000000000000000 +000F803FFF000000000000000000000000001F803FFF800000000000000000000000001F +001FFF800000000000000000000000001F001FFF800000000000000000000000003F001F +FFC00000000000000000000000003E000FFFC00000000000000000000000003E000FFFC0 +0000000000000000000000007E000FFFE00000000000000000000000007C0007FFE00000 +000000000000000000007C0007FFE0000000000000000000000000F80007FFF000000000 +0000000000000000F80003FFF0000000000000000000000001F80003FFF8000000000000 +000000000001F00003FFF8000000000000000000000001F00001FFF80000000000000000 +00000003F00001FFFC000000000000000000000003E00001FFFC00000000000000000000 +0003E00000FFFC000000000000000000000007E00000FFFE000000000000000000000007 +C000007FFE000000000000000000000007C000007FFE00000000000000000000000FC000 +007FFF00000000000000000000000F8000003FFF00000000000000000000000F8000003F +FF00000000000000000000001F8000003FFF80000000000000000000001F0000001FFF80 +000000000000000000001F0000001FFF80000000000000000000003F0000001FFFC00000 +00000000000000003E0000000FFFC0000000000000000000003E0000000FFFC000000000 +0000000000007C0000000FFFE0000000000000000000007C00000007FFE0000000000000 +00000000FC00000007FFF000000000000000000000F800000007FFF00000000000000000 +0000F800000003FFF000000000000000000001F800000003FFF800000000000000000001 +F000000003FFF800000000000000000001F000000001FFF800000000000000000003F000 +000001FFFC00000000000000000003E000000001FFFC00000000000000000003E0000000 +00FFFC00000000000000000007E000000000FFFE00000000000000000007C0000000007F +FE00000000000000000007C0000000007FFE0000000000000000000FC0000000007FFF00 +00000000000000000F80000000003FFF0000000000000000000F80000000003FFF000000 +0000000000001F80000000003FFF8000000000000000001F00000000001FFF8000000000 +000000001F00000000001FFF8000000000000000003E00000000001FFFC0000000000000 +00003E00000000000FFFC000000000000000007E00000000000FFFE00000000000000000 +7C00000000000FFFE000000000000000007C000000000007FFE00000000000000000FC00 +0000000007FFF00000000000000000F8000000000007FFF00000000000000000F8000000 +000003FFF00000000000000001FFFFFFFFFFFFFFFFF80000000000000001FFFFFFFFFFFF +FFFFF80000000000000001FFFFFFFFFFFFFFFFF80000000000000003FFFFFFFFFFFFFFFF +FC0000000000000003FFFFFFFFFFFFFFFFFC0000000000000003FFFFFFFFFFFFFFFFFC00 +00000000000007E0000000000000FFFE0000000000000007C00000000000007FFE000000 +0000000007C00000000000007FFE000000000000000FC00000000000007FFF0000000000 +00000F800000000000003FFF000000000000000F800000000000003FFF00000000000000 +1F800000000000003FFF800000000000001F000000000000001FFF800000000000001F00 +0000000000001FFF800000000000003E000000000000001FFFC00000000000003E000000 +000000000FFFC00000000000007E000000000000000FFFE00000000000007C0000000000 +00000FFFE00000000000007C0000000000000007FFE0000000000000FC00000000000000 +07FFF0000000000000F80000000000000007FFF0000000000000F80000000000000003FF +F0000000000001F80000000000000003FFF8000000000001F00000000000000003FFF800 +0000000001F00000000000000001FFF8000000000003F00000000000000001FFFC000000 +000003E00000000000000000FFFC000000000003E00000000000000000FFFC0000000000 +07E00000000000000000FFFE000000000007C000000000000000007FFE000000000007C0 +00000000000000007FFE00000000000FC000000000000000007FFF00000000000F800000 +0000000000003FFF00000000000F8000000000000000003FFF00000000001F0000000000 +000000003FFF80000000001F0000000000000000001FFF80000000003F00000000000000 +00001FFFC0000000003F0000000000000000001FFFC0000000007F000000000000000000 +0FFFC0000000007F0000000000000000000FFFE000000000FF0000000000000000000FFF +E000000000FF00000000000000000007FFE000000001FF00000000000000000007FFF000 +000003FF80000000000000000007FFF00000000FFFC000000000000000000FFFF8000000 +1FFFE000000000000000000FFFFC0000007FFFF000000000000000003FFFFE000007FFFF +FE0000000000000001FFFFFFC000FFFFFFFFC0000000000000FFFFFFFFFFF0FFFFFFFFC0 +000000000000FFFFFFFFFFF0FFFFFFFFC0000000000000FFFFFFFFFFF0FFFFFFFFC00000 +00000000FFFFFFFFFFF0FFFFFFFFC0000000000000FFFFFFFFFFF0FFFFFFFFC000000000 +0000FFFFFFFFFFF0>132 146 123 273 143 65 D[113 141 117 268 135 I[124 141 117 268 146 68 D[48 141 118 268 68 73 D<0000000FFF000000000000000000FF +FFF00000000000000003FFFFFE000000000000000FFFFFFF800000000000003FF003FFE0 +000000000000FF80007FF8000000000001FC00001FFC000000000003F0000007FE000000 +000007E0000003FF80000000000FC0000001FFC0000000001F00000000FFE0000000003E +000000007FF0000000007E000000003FF0000000007C000000003FF800000000F8000000 +001FFC00000000F8000000001FFC00000001F0000000000FFE00000001FF000000000FFE +00000001FFC000000007FF00000001FFE000000007FF00000003FFF000000003FF800000 +03FFF800000003FF80000003FFF800000003FF80000003FFF800000003FF80000003FFF8 +00000001FFC0000003FFF800000001FFC0000003FFF800000001FFC0000003FFF8000000 +01FFC0000001FFF000000001FFC0000001FFF000000001FFC00000007FC000000001FFC0 +0000003F8000000001FFC0000000000000000001FFC0000000000000000001FFC0000000 +000000000001FFC0000000000000000001FFC0000000000000000001FFC0000000000000 +000001FFC0000000000000000001FFC0000000000000000001FFC0000000000000003FFF +FFC00000000000000FFFFFFFC0000000000001FFFFFFFFC000000000001FFFFF01FFC000 +000000007FFF8001FFC00000000003FFF80001FFC0000000000FFFC00001FFC000000000 +3FFE000001FFC000000000FFF8000001FFC000000003FFE0000001FFC000000007FFC000 +0001FFC00000001FFF00000001FFC00000003FFE00000001FFC00000007FFC00000001FF +C0000000FFF800000001FFC0000001FFF000000001FFC0000003FFE000000001FFC00000 +07FFC000000001FFC0000007FFC000000001FFC000000FFF8000000001FFC000001FFF00 +00000001FFC000001FFF0000000001FFC000003FFE0000000001FFC0003C3FFE00000000 +01FFC0003C7FFE0000000001FFC0003C7FFC0000000001FFC0003C7FFC0000000001FFC0 +003C7FFC0000000001FFC0003CFFF80000000001FFC0003CFFF80000000003FFC0003CFF +F80000000003FFC0003CFFF80000000003FFC0003CFFF80000000003FFC0003CFFF80000 +000007FFC0003CFFF80000000007FFC0003CFFF80000000007FFC0003CFFF8000000000F +FFC0003CFFFC000000000EFFC0003C7FFC000000001EFFC0003C7FFC000000003CFFC000 +3C7FFE000000003C7FE000783FFE00000000787FE000781FFF00000000F07FE000781FFF +80000001E03FF000F00FFFC0000003C03FF000F007FFE0000007C01FF801E003FFF00000 +1F001FFC03E001FFF800003E000FFF9FC0007FFE0001FC0007FFFF80001FFFE00FF00003 +FFFF000007FFFFFFE00001FFFE000001FFFFFF800000FFF80000003FFFFC0000001FC000 +000001FFC0000000000000565E78DB5F>97 D<000000001FFE0000000000000001FFFFE0 +0000000000000FFFFFFC0000000000003FFFFFFF000000000000FFF001FFC00000000003 +FF80001FF0000000000FFE000003F8000000001FF8000000FE000000003FF00000007F00 +000000FFE00000001F80000001FFC00000000FC0000003FF8000000007E0000007FF0000 +000003E000000FFE0000000001F000001FFC0000000000F800001FFC0000000000F80000 +3FF800000000007C00007FF00000000007FC0000FFF0000000001FFC0000FFE000000000 +3FFC0001FFE0000000007FFE0003FFC000000000FFFE0003FFC000000000FFFE0007FFC0 +00000000FFFE0007FF8000000000FFFE000FFF8000000000FFFE000FFF8000000000FFFE +000FFF0000000000FFFE001FFF00000000007FFC001FFF00000000007FFC001FFF000000 +00001FF0003FFE00000000000FE0003FFE00000000000000003FFE00000000000000007F +FE00000000000000007FFE00000000000000007FFE00000000000000007FFC0000000000 +0000007FFC00000000000000007FFC0000000000000000FFFC0000000000000000FFFC00 +00000000000000FFFC0000000000000000FFFC0000000000000000FFFC00000000000000 +00FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FFFC000000 +0000000000FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FF +FC0000000000000000FFFC0000000000000000FFFC00000000000000007FFC0000000000 +0000007FFE00000000000000007FFE00000000000000007FFE00000000000000007FFE00 +000000000000003FFE00000000000000003FFE00000000000000003FFF00000000000000 +003FFF00000000000000001FFF00000000000000001FFF00000000000000001FFF800000 +00000000000FFF80000000000007800FFF800000000000078007FFC000000000000F8007 +FFC000000000000F0003FFC000000000000F0003FFE000000000001F0001FFE000000000 +001E0001FFF000000000001E0000FFF800000000003E00007FF800000000007C00007FFC +00000000007800003FFE0000000000F800001FFE0000000000F000000FFF0000000001F0 +000007FF8000000003E0000003FFC000000007C0000001FFE00000000F80000000FFF000 +00001F000000007FF80000003E000000001FFE000000FC000000000FFF800001F8000000 +0003FFE0000FE00000000000FFFC007FC000000000003FFFFFFF0000000000000FFFFFFC +00000000000001FFFFE0000000000000001FFE00000000495E7ADB54>99 +D[<0000000000000000007E0000000000000000000FFFFE000000000000000003FFFFFE +000000000000000003FFFFFE000000000000000003FFFFFE000000000000000003FFFFFE +000000000000000003FFFFFE000000000000000003FFFFFE00000000000000000003FFFE +000000000000000000007FFE000000000000000000003FFE000000000000000000001FFE +000000000000000000001FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE +000000000000000000000FFE0000000000000FFE00000FFE000000000001FFFFE0000FFE +00000000000FFFFFFC000FFE00000000003FFFFFFF000FFE0000000000FFFC00FFC00FFE +0000000003FFE0000FE00FFE000000000FFF000003F80FFE000000001FFC000000FC0FFE +000000003FF80000003E0FFE00000000FFE00000001F0FFE00000001FFC00000000F8FFE +00000003FF8000000007CFFE00000007FF0000000003EFFE0000000FFE0000000001FFFE +0000001FFC0000000000FFFE0000003FFC0000000000FFFE0000003FF800000000007FFE +0000007FF000000000003FFE000000FFF000000000003FFE000000FFE000000000001FFE +000001FFE000000000001FFE000003FFC000000000000FFE000003FFC000000000000FFE +000007FF8000000000000FFE000007FF8000000000000FFE00000FFF8000000000000FFE +00000FFF0000000000000FFE00001FFF0000000000000FFE00001FFF0000000000000FFE +00001FFF0000000000000FFE00003FFE0000000000000FFE00003FFE0000000000000FFE +00003FFE0000000000000FFE00003FFE0000000000000FFE00007FFE0000000000000FFE +00007FFE0000000000000FFE00007FFC0000000000000FFE00007FFC0000000000000FFE +00007FFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE +0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE +0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE +0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE +0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE +0000FFFC0000000000000FFE00007FFC0000000000000FFE00007FFC0000000000000FFE +00007FFC0000000000000FFE00007FFE0000000000000FFE00007FFE0000000000000FFE +00007FFE0000000000000FFE00003FFE0000000000000FFE00003FFE0000000000000FFE +00003FFE0000000000000FFE00001FFE0000000000000FFE00001FFF0000000000000FFE +00001FFF0000000000000FFE00000FFF0000000000000FFE00000FFF0000000000000FFE +000007FF8000000000000FFE000007FF8000000000000FFE000007FF8000000000001FFE +000003FFC000000000001FFE000001FFC000000000003FFE000001FFE000000000003FFE +000000FFE000000000007FFE000000FFF000000000007FFE0000007FF00000000000FFFE +0000003FF80000000001FFFE0000001FFC0000000001EFFE0000000FFE0000000003EFFE +0000000FFE0000000007CFFF00000007FF000000000F8FFF00000003FF800000001F0FFF +80000001FFC00000007E0FFFC00000007FF0000000FC0FFFF80000003FF8000001F80FFF +FFF800001FFE000007E00FFFFFF8000007FF80003FC00FFFFFF8000001FFF003FF000FFF +FFF80000007FFFFFFC000FFFFFF80000001FFFFFF0000FFFFFF800000003FFFF80000FFF +FE00000000003FF800000FC00000>93 145 122 270 106 I<000000007FFC0000000000 +000007FFFFC00000000000003FFFFFF8000000000000FFFFFFFE000000000003FFE01FFF +800000000007FF0003FFE0000000001FFC0000FFF0000000003FF000003FF8000000007F +E000001FFC00000000FFC0000007FE00000001FF80000007FF00000003FF00000003FF80 +000007FE00000001FFC000000FFC00000000FFE000001FF800000000FFE000003FF80000 +00007FF000007FF0000000007FF000007FF0000000003FF80000FFE0000000003FFC0001 +FFE0000000001FFC0001FFC0000000001FFC0003FFC0000000001FFE0003FF8000000000 +0FFE0007FF80000000000FFE0007FF80000000000FFF000FFF00000000000FFF000FFF00 +0000000007FF001FFF000000000007FF801FFF000000000007FF801FFE000000000007FF +803FFE000000000007FF803FFE000000000007FF803FFE000000000007FF803FFE000000 +000003FFC07FFE000000000003FFC07FFE000000000003FFC07FFC000000000003FFC07F +FC000000000003FFC07FFC000000000003FFC0FFFC000000000003FFC0FFFFFFFFFFFFFF +FFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFC00 +00000000000000FFFC0000000000000000FFFC0000000000000000FFFC00000000000000 +00FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FFFC000000 +0000000000FFFC0000000000000000FFFC0000000000000000FFFC00000000000000007F +FC00000000000000007FFC00000000000000007FFE00000000000000007FFE0000000000 +0000007FFE00000000000000003FFE00000000000000003FFE00000000000000003FFE00 +000000000000001FFF00000000000000001FFF00000000000000001FFF00000000000000 +000FFF00000000000003C00FFF80000000000003C007FF80000000000003C007FF800000 +00000007C003FFC00000000000078003FFC00000000000078001FFC000000000000F8001 +FFE000000000000F0000FFE000000000001F00007FF000000000001E00007FF800000000 +003E00003FF800000000007C00001FFC00000000007800000FFE0000000000F8000007FE +0000000001F0000003FF0000000003E0000001FF8000000007C0000000FFC00000000F80 +0000007FF00000001F000000003FF80000007E000000001FFE000000FC0000000007FF80 +0003F80000000003FFE0001FF00000000000FFFE00FFC000000000003FFFFFFF00000000 +00000FFFFFFC00000000000001FFFFF0000000000000001FFF000000004A5E7BDB54>I< +0000000000000000003FC000000000FFE0000003FFF00000000FFFFE00001FFFFC000000 +3FFFFF80007FFFFE000000FFFFFFE000FFC0FE000003FF803FF803FC01FF00000FFE000F +FE07E001FF00001FF80003FF1F8003FF00007FF00001FFFF0001FF0000FFC000007FFC00 +01FF0001FFC000007FF80001FE0003FF8000003FF80000FC0003FF0000001FF800000000 +07FE0000000FFC000000000FFE0000000FFE000000001FFC00000007FF000000001FFC00 +000007FF000000003FFC00000007FF800000003FF800000003FF800000007FF800000003 +FFC00000007FF800000003FFC00000007FF800000003FFC0000000FFF800000003FFE000 +0000FFF000000001FFE0000000FFF000000001FFE0000000FFF000000001FFE0000001FF +F000000001FFF0000001FFF000000001FFF0000001FFF000000001FFF0000001FFF00000 +0001FFF0000001FFF000000001FFF0000001FFF000000001FFF0000001FFF000000001FF +F0000001FFF000000001FFF0000001FFF000000001FFF0000001FFF000000001FFF00000 +01FFF000000001FFF0000000FFF000000001FFE0000000FFF000000001FFE0000000FFF0 +00000001FFE0000000FFF800000003FFE00000007FF800000003FFC00000007FF8000000 +03FFC00000007FF800000003FFC00000003FF800000003FF800000003FFC00000007FF80 +0000001FFC00000007FF000000001FFC00000007FF000000000FFE0000000FFE00000000 +07FE0000000FFC0000000003FF0000001FF80000000003FF8000003FF80000000001FFC0 +00007FF00000000000FFC000007FE00000000001FFF00001FFC00000000003DFF80003FF +000000000003CFFE000FFE00000000000783FF803FF800000000000700FFFFFFE0000000 +00000F003FFFFF8000000000000F000FFFFE0000000000001E0000FFE00000000000001E +000000000000000000001E000000000000000000001E000000000000000000003E000000 +000000000000003E000000000000000000003E000000000000000000003E000000000000 +000000003E000000000000000000003E000000000000000000003F000000000000000000 +003F000000000000000000003F800000000000000000001F800000000000000000001FC0 +0000000000000000001FE00000000000000000001FF00000000000000000000FF8000000 +0000000000000FFE00000000000000000007FFFFFFFFFE000000000007FFFFFFFFFFFC00 +00000003FFFFFFFFFFFFC000000001FFFFFFFFFFFFF800000000FFFFFFFFFFFFFE000000 +007FFFFFFFFFFFFF800000001FFFFFFFFFFFFFE0000000FFFFFFFFFFFFFFF0000003FFFF +FFFFFFFFFFFC00000FFE00000001FFFFFE00003FF00000000007FFFF00007FC000000000 +007FFF8000FF0000000000001FFF8001FE00000000000007FFC003FC00000000000001FF +E007F800000000000000FFE00FF0000000000000007FF01FF0000000000000003FF01FE0 +000000000000001FF03FC0000000000000001FF83FC0000000000000000FF87F80000000 +000000000FF87F800000000000000007F87F800000000000000007FCFF80000000000000 +0007FCFF000000000000000003FCFF000000000000000003FCFF000000000000000003FC +FF000000000000000003FCFF000000000000000003FCFF000000000000000003FCFF0000 +00000000000003FCFF800000000000000007FC7F800000000000000007F87F8000000000 +00000007F87FC0000000000000000FF83FC0000000000000000FF03FE000000000000000 +1FF01FF0000000000000003FE00FF8000000000000007FC00FF8000000000000007FC007 +FC00000000000000FF8003FF00000000000003FF0001FF80000000000007FE00007FC000 +000000000FF800003FF000000000003FF000001FFC0000000000FFE0000007FF00000000 +03FF80000001FFE00000001FFE000000007FFC000000FFF8000000001FFFE0001FFFE000 +00000003FFFFFFFFFF0000000000007FFFFFFFF80000000000000FFFFFFFC00000000000 +00003FFFF00000000058877CDB5F>103 D[<0007F00000000FF80000001FFC0000003FFE +0000007FFF000000FFFF800000FFFF800000FFFF800000FFFF800000FFFF800000FFFF80 +0000FFFF8000007FFF0000003FFE0000001FFC0000000FF800000007F000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001F80 +0001FFFF80007FFFFF80007FFFFF80007FFFFF80007FFFFF80007FFFFF80007FFFFF8000 +007FFF8000001FFF8000000FFF80000007FF80000007FF80000003FF80000003FF800000 +03FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003 +FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF +80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80 +000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF8000 +0003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF800000 +03FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003 +FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF +80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80 +000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF8000 +0003FF80000003FF80000007FFC000000FFFE000003FFFF800FFFFFFFFF8FFFFFFFFF8FF +FFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8>37 137 121 264 +52 105 D<00003F000001FFE00000000007FF800000000003FFFF00001FFFFE00000000 +7FFFF800000000FFFFFF00007FFFFFC0000001FFFFFF00000000FFFFFF0001FFFFFFF000 +0007FFFFFFC0000000FFFFFF0007FC01FFFC00001FF007FFF0000000FFFFFF000FC0003F +FE00003F0000FFF8000000FFFFFF001F00000FFF00007C00003FFC000000FFFFFF007E00 +0003FF8001F800000FFE00000000FFFF00F8000001FFC003E0000007FF000000001FFF01 +F0000001FFE007C0000007FF800000000FFF01E0000000FFE00780000003FF8000000007 +FF03C00000007FF00F00000001FFC000000007FF07800000007FF01E00000001FFC00000 +0003FF0F000000003FF83C00000000FFE000000003FF0F000000003FF83C00000000FFE0 +00000003FF1E000000003FF87800000000FFE000000003FF1C000000001FFC7000000000 +7FF000000003FF3C000000001FFCF0000000007FF000000003FF38000000001FFCE00000 +00007FF000000003FF78000000001FFDE0000000007FF000000003FF70000000000FFFC0 +000000003FF800000003FFF0000000000FFFC0000000003FF800000003FFE0000000000F +FF80000000003FF800000003FFE0000000000FFF80000000003FF800000003FFE0000000 +000FFF80000000003FF800000003FFE0000000000FFF80000000003FF800000003FFC000 +0000000FFF00000000003FF800000003FFC0000000000FFF00000000003FF800000003FF +C0000000000FFF00000000003FF800000003FFC0000000000FFF00000000003FF8000000 +03FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800 +000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003F +F800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000 +003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE0000 +0000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE +00000000003FF800000003FF80000000000FFE00000000003FF800000003FF8000000000 +0FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF800000 +00000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF80 +000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003 +FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF80000 +0003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF8 +00000003FF80000000000FFE00000000003FF800000003FF80000000000FFE0000000000 +3FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE000000 +00003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00 +000000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000F +FE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000 +000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF8000 +0000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF +80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF8000000 +03FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800 +000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003F +F800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000 +003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE0000 +0000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE +00000000003FF800000003FF80000000000FFE00000000003FF800000003FF8000000000 +0FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF800000 +00000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF80 +000000000FFE00000000003FF800000007FFC0000000001FFF00000000007FFC0000000F +FFE0000000003FFF8000000000FFFE0000003FFFF800000000FFFFE000000003FFFF8000 +FFFFFFFFFE0003FFFFFFFFF8000FFFFFFFFFE0FFFFFFFFFE0003FFFFFFFFF8000FFFFFFF +FFE0FFFFFFFFFE0003FFFFFFFFF8000FFFFFFFFFE0FFFFFFFFFE0003FFFFFFFFF8000FFF +FFFFFFE0FFFFFFFFFE0003FFFFFFFFF8000FFFFFFFFFE0FFFFFFFFFE0003FFFFFFFFF800 +0FFFFFFFFFE0935B79DAA0>109 D<00003F000001FFE00000000003FFFF00001FFFFE00 +000000FFFFFF00007FFFFFC0000000FFFFFF0001FFFFFFF0000000FFFFFF0007FC01FFFC +000000FFFFFF000FC0003FFE000000FFFFFF001F00000FFF000000FFFFFF007E000003FF +80000000FFFF00F8000001FFC00000001FFF01F0000001FFE00000000FFF01E0000000FF +E000000007FF03C00000007FF000000007FF07800000007FF000000003FF0F000000003F +F800000003FF0F000000003FF800000003FF1E000000003FF800000003FF1C000000001F +FC00000003FF3C000000001FFC00000003FF38000000001FFC00000003FF78000000001F +FC00000003FF70000000000FFE00000003FFF0000000000FFE00000003FFE0000000000F +FE00000003FFE0000000000FFE00000003FFE0000000000FFE00000003FFE0000000000F +FE00000003FFC0000000000FFE00000003FFC0000000000FFE00000003FFC0000000000F +FE00000003FFC0000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F +FE00000003FF80000000000FFE00000003FF80000000000FFE00000007FFC0000000001F +FF0000000FFFE0000000003FFF8000003FFFF800000000FFFFE000FFFFFFFFFE0003FFFF +FFFFF8FFFFFFFFFE0003FFFFFFFFF8FFFFFFFFFE0003FFFFFFFFF8FFFFFFFFFE0003FFFF +FFFFF8FFFFFFFFFE0003FFFFFFFFF8FFFFFFFFFE0003FFFFFFFFF85D5B79DA6A>I<0000 +00000FFF000000000000000000FFFFF00000000000000007FFFFFE000000000000003FFF +FFFFC0000000000000FFF801FFF0000000000003FFC0003FFC000000000007FE000007FE +00000000001FF8000001FF80000000003FF0000000FFC0000000007FC00000003FE00000 +0000FF800000001FF000000001FF000000000FF800000003FE0000000007FC00000007FC +0000000003FE0000000FFC0000000003FF0000001FF80000000001FF8000003FF0000000 +0000FFC000003FF00000000000FFC000007FE000000000007FE00000FFC000000000003F +F00000FFC000000000003FF00001FFC000000000003FF80003FF8000000000001FFC0003 +FF8000000000001FFC0007FF0000000000000FFE0007FF0000000000000FFE000FFF0000 +000000000FFF000FFF0000000000000FFF000FFE00000000000007FF001FFE0000000000 +0007FF801FFE00000000000007FF803FFE00000000000007FFC03FFE00000000000007FF +C03FFE00000000000007FFC03FFC00000000000003FFC07FFC00000000000003FFE07FFC +00000000000003FFE07FFC00000000000003FFE07FFC00000000000003FFE07FFC000000 +00000003FFE0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC000000000000 +03FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0 +FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00 +000000000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00000000 +000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF07FFC00000000000003 +FFE07FFC00000000000003FFE07FFC00000000000003FFE07FFE00000000000007FFE07F +FE00000000000007FFE03FFE00000000000007FFC03FFE00000000000007FFC03FFE0000 +0000000007FFC03FFE00000000000007FFC01FFE00000000000007FF801FFF0000000000 +000FFF800FFF0000000000000FFF000FFF0000000000000FFF000FFF0000000000000FFF +0007FF8000000000001FFE0007FF8000000000001FFE0003FF8000000000001FFC0003FF +C000000000003FFC0001FFC000000000003FF80000FFE000000000007FF00000FFE00000 +0000007FF000007FF00000000000FFE000003FF00000000000FFC000001FF80000000001 +FF8000001FFC0000000003FF8000000FFE0000000007FF00000007FF000000000FFE0000 +0003FF000000000FFC00000001FFC00000003FF800000000FFE00000007FF0000000003F +F0000000FFC0000000001FFC000003FF800000000007FE000007FE000000000003FFC000 +3FFC000000000000FFF801FFF00000000000003FFFFFFFC00000000000000FFFFFFF0000 +000000000001FFFFF800000000000000000FFF0000000000545E7BDB5F>I<00003F0000 +0FF00003FFFF00007FFE00FFFFFF0001FFFF80FFFFFF0007FFFFE0FFFFFF001FF00FF0FF +FFFF003F803FF0FFFFFF007E007FF8FFFFFF00FC007FF800FFFF01F000FFFC001FFF01E0 +00FFFC000FFF03E000FFFC0007FF07C000FFFC0007FF078000FFFC0003FF0F0000FFFC00 +03FF0F00007FF80003FF1E00007FF80003FF1E00001FE00003FF3C000007800003FF3C00 +0000000003FF78000000000003FF78000000000003FF70000000000003FFF00000000000 +03FFF0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000 +0000000003FFC0000000000003FFC0000000000003FFC0000000000003FFC00000000000 +03FFC0000000000003FFC0000000000003FF80000000000003FF80000000000003FF8000 +0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 +03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 +0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 +03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 +0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 +03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 +0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 +03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 +0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 +03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FFC000 +0000000007FFC000000000000FFFE000000000003FFFFC00000000FFFFFFFFFFC00000FF +FFFFFFFFC00000FFFFFFFFFFC00000FFFFFFFFFFC00000FFFFFFFFFFC00000FFFFFFFFFF +C000003E5B7ADA49>114 D<000000FFF80001C000001FFFFF8003C00000FFFFFFE003C0 +0007FFFFFFF807C0001FFF0007FE0FC0003FF00000FF1FC000FF8000003F9FC001FE0000 +000FFFC003FC00000007FFC007F800000003FFC00FF000000001FFC00FE000000000FFC0 +1FC0000000007FC03FC0000000007FC03F80000000003FC03F80000000001FC07F800000 +00001FC07F00000000000FC07F00000000000FC0FF00000000000FC0FF000000000007C0 +FF000000000007C0FF000000000007C0FF000000000007C0FF800000000007C0FF800000 +000003C0FFC00000000003C0FFC00000000003C0FFE00000000003C07FF00000000003C0 +7FF80000000003C07FFC0000000003C03FFE0000000000003FFF0000000000001FFFC000 +000000001FFFF800000000000FFFFF000000000007FFFFF80000000007FFFFFFC0000000 +03FFFFFFFE00000000FFFFFFFFC00000007FFFFFFFF80000003FFFFFFFFE0000000FFFFF +FFFF80000007FFFFFFFFE0000001FFFFFFFFF00000003FFFFFFFF800000007FFFFFFFE00 +0000007FFFFFFF0000000003FFFFFF80000000003FFFFF800000000001FFFFC000000000 +003FFFE000000000000FFFF0000000000003FFF0F00000000001FFF8F00000000000FFF8 +F000000000007FF8F800000000003FFCF800000000001FFCF800000000000FFCF8000000 +00000FFEF8000000000007FEFC000000000007FEFC000000000003FEFC000000000003FE +FC000000000003FEFE000000000001FEFE000000000001FEFE000000000001FEFF000000 +000001FEFF000000000001FEFF000000000001FEFF800000000001FCFF800000000001FC +FFC00000000003FCFFC00000000003FCFFE00000000003F8FFE00000000007F8FFF00000 +000007F0FFF8000000000FF0FFF8000000000FE0FFFC000000001FE0FFBE000000003FC0 +FF1F000000007F80FF1F80000000FF00FE0FE0000001FE00FE07F0000007FC00FC01FC00 +003FF000F800FFC003FFE000F8003FFFFFFF8000F0000FFFFFFE0000F00003FFFFF00000 +E000003FFE0000003F5E7BDB4A>I<000000F000000000000000F000000000000000F000 +000000000000F000000000000000F000000000000000F000000000000000F00000000000 +0000F000000000000000F000000000000001F000000000000001F000000000000001F000 +000000000001F000000000000001F000000000000001F000000000000003F00000000000 +0003F000000000000003F000000000000003F000000000000007F000000000000007F000 +000000000007F000000000000007F00000000000000FF00000000000000FF00000000000 +001FF00000000000001FF00000000000003FF00000000000003FF00000000000007FF000 +00000000007FF0000000000000FFF0000000000001FFF0000000000003FFF00000000000 +07FFF000000000000FFFF000000000001FFFF000000000007FFFF00000000000FFFFFFFF +FFFF000FFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF +FFFFFFFFFFFF0000007FF00000000000007FF00000000000007FF00000000000007FF000 +00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 +007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 +00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 +007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 +00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 +007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 +00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 +007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 +00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 +007FF00000000000007FF00000000000007FF0000001E000007FF0000001E000007FF000 +0001E000007FF0000001E000007FF0000001E000007FF0000001E000007FF0000001E000 +007FF0000001E000007FF0000001E000007FF0000001E000007FF0000001E000007FF000 +0001E000007FF0000001E000007FF0000001E000007FF0000001E000007FF0000001E000 +007FF0000001E000007FF0000001E000007FF0000003E000003FF8000003C000003FF800 +0003C000003FF8000003C000003FF8000003C000003FF8000007C000001FFC0000078000 +001FFC0000078000000FFC00000F0000000FFE00000F00000007FE00001F00000007FF00 +001E00000003FF80003C00000001FFC0007C00000000FFE000F8000000007FF001F00000 +00003FFC07E0000000001FFFFFC00000000007FFFF800000000000FFFE0000000000001F +F000003B817DFE49>I<00001F8000000000007E000003FFFF800000000FFFFE0000FFFF +FF80000003FFFFFE0000FFFFFF80000003FFFFFE0000FFFFFF80000003FFFFFE0000FFFF +FF80000003FFFFFE0000FFFFFF80000003FFFFFE0000FFFFFF80000003FFFFFE000000FF +FF8000000003FFFE0000001FFF80000000007FFE0000000FFF80000000003FFE00000007 +FF80000000001FFE00000007FF80000000001FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 +FF80000000000FFE00000003FF80000000000FFE00000003FF80000000001FFE00000003 +FF80000000001FFE00000003FF80000000001FFE00000003FF80000000001FFE00000003 +FF80000000003FFE00000003FF80000000003FFE00000003FF80000000003FFE00000003 +FF80000000007FFE00000003FF80000000007FFE00000001FF80000000007FFE00000001 +FF8000000000FFFE00000001FF8000000000EFFE00000001FFC000000001EFFE00000001 +FFC000000001CFFE00000000FFC000000003CFFE00000000FFC0000000078FFE00000000 +7FE0000000078FFF000000007FE00000000F0FFF000000003FF00000001E0FFF80000000 +3FF00000003C0FFFC00000001FF8000000780FFFF80000000FFC000001F00FFFFFF80000 +07FE000003E00FFFFFF8000003FF80000FC00FFFFFF8000000FFF800FF800FFFFFF80000 +007FFFFFFE000FFFFFF80000001FFFFFF8000FFFFFF800000003FFFFE0000FFFFE000000 +00001FFE00000FC000005D5D79DA6A>I121 D E end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: Letter + +%%EndSetup +%%Page: 1 1 +1 0 bop 1093 895 a FM(An)62 b(In)-5 b(tro)5 b(duction)59 +b(to)798 1144 y(Binary)i(Decision)g(Diagrams)1326 1483 +y FL(Henrik)38 b(Reif)h(Andersen)1341 3741 y @beginspecial +36 @llx 36 @lly 201 @urx 289 @ury 1984 @rhi @setspecial +%%BeginDocument: r.ps +save +/DotDict 200 dict def +DotDict begin + +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (() show i str cvs show (,) show j str cvs show ()) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +/arrowhead { + /arrowwidth exch def + /arrowlength exch def + gsave + 3 1 roll + translate + rotate + newpath + arrowlength arrowwidth 2 div moveto + 0 0 lineto + arrowlength arrowwidth -2 div lineto + closepath fill + stroke + grestore +} def + +% draw aligned label in bounding box aligned to current point +% alignfactor tells what fraction to place on the left. +% -.5 is centered. +/alignedtext { % text labelwidth fontsz alignfactor + /alignfactor exch def + /fontsz exch def + /width exch def + /text exch def + gsave + % even if node or edge is dashed, don't paint text with dashes + [] 0 setdash + currentpoint newpath moveto + text stringwidth pop + alignfactor mul fontsz -.3 mul rmoveto + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +14 default-font-family set_font +% /arrowlength 10 def +% /arrowwidth 5 def +gsave +35 35 166 254 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% 0 +gsave 10 dict begin +newpath 126 36 moveto +72 36 lineto +72 0 lineto +126 0 lineto +closepath +stroke +gsave 10 dict begin +99 19 moveto (0) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 1 +gsave 10 dict begin +newpath 54 36 moveto +0 36 lineto +0 0 lineto +54 0 lineto +closepath +stroke +gsave 10 dict begin +27 19 moveto (1) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 12 +gsave 10 dict begin +71 234 27 18 ellipse_path +stroke +gsave 10 dict begin +71 235 moveto (x) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 6 +gsave 10 dict begin +27 90 27 18 ellipse_path +stroke +gsave 10 dict begin +27 91 moveto (y) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 12 -> 6 +gsave 10 dict begin +dotted +newpath 66 216 moveto +58 191 43 143 34 114 curveto +stroke +32 108 71.57 10.00 5.00 arrowhead +end grestore + +% 11 +gsave 10 dict begin +99 162 27 18 ellipse_path +stroke +gsave 10 dict begin +99 163 moveto (y) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 12 -> 11 +newpath 78 217 moveto +81 208 85 197 89 187 curveto +stroke +92 179 110.56 10.00 5.00 arrowhead + +% 6 -> 0 +gsave 10 dict begin +dotted +newpath 42 75 moveto +52 65 66 51 77 40 curveto +stroke +81 36 135.00 10.00 5.00 arrowhead +end grestore + +% 6 -> 1 +newpath 27 72 moveto +27 64 27 54 27 45 curveto +stroke +27 36 90.00 10.00 5.00 arrowhead + +% 11 -> 0 +gsave 10 dict begin +dotted +newpath 111 146 moveto +122 131 136 112 138 108 curveto +142 96 142 83 138 72 curveto +136 68 126 54 117 42 curveto +stroke +113 36 56.31 10.00 5.00 arrowhead +end grestore + +% 4 +gsave 10 dict begin +99 90 27 18 ellipse_path +stroke +gsave 10 dict begin +99 91 moveto (z) 6 14.00 -0.50 alignedtext +end grestore +end grestore + +% 11 -> 4 +newpath 99 144 moveto +99 136 99 126 99 117 curveto +stroke +99 108 90.00 10.00 5.00 arrowhead + +% 4 -> 0 +gsave 10 dict begin +dotted +newpath 99 72 moveto +99 64 99 54 99 45 curveto +stroke +99 36 90.00 10.00 5.00 arrowhead +end grestore + +% 4 -> 1 +newpath 84 75 moveto +75 66 62 53 51 42 curveto +stroke +45 36 45.00 10.00 5.00 arrowhead +endpage +grestore +end +restore +%%EndDocument + @endspecial 473 4431 a FK(Lecture)34 b(notes)f(for)f(49285)g(Adv)-5 +b(anced)34 b(Algorithms)c(E97,)i(Octob)s(er)h(1997.)1274 +4551 y(\(Minor)f(revisions,)h(Apr.)f(1998\))551 4672 +y(E-mail:)41 b FJ(hra@it.dtu.dk)p FK(.)47 b(W)-8 b(eb:)44 +b FJ(http://www.it.dtu.dk/)p FI(\030)p FJ(hra)317 4898 +y FK(Departmen)m(t)32 b(of)g(Information)e(T)-8 b(ec)m(hnology)g(,)34 +b(T)-8 b(ec)m(hnical)32 b(Univ)m(ersit)m(y)h(of)g(Denmark)981 +5018 y(Building)d(344,)i(DK-2800)e(Lyngb)m(y)-8 b(,)34 +b(Denmark.)p eop +%%Page: 1 2 +1 1 bop 3721 -460 a FK(1)p eop +%%Page: 2 3 +2 2 bop 3721 -460 a FK(2)-9 -171 y FH(Preface)-9 48 y +FK(This)38 b(note)g(is)g(a)g(short)g(in)m(tro)s(duction)f(to)h(Binary)g +(Decision)e(Diagrams.)58 b(It)39 b(pro)m(vides)f(some)g(bac)m(k-)-9 +168 y(ground)50 b(kno)m(wledge)h(and)g(describ)s(es)g(the)g(core)g +(algorithms.)94 b(More)51 b(details)e(can)i(b)s(e)f(found)h(in)-9 +289 y(Bry)m(an)m(t's)37 b(original)32 b(pap)s(er)k(on)f(Reduced)i +(Ordered)f(Binary)g(Decision)e(Diagrams)f([Bry86])j(and)g(the)-9 +409 y(surv)m(ey)26 b(pap)s(er)e([Bry92].)41 b(A)24 b(recen)m(t)h +(extension)g(called)e(Bo)s(olean)g(Expression)i(Diagrams)d(is)h +(describ)s(ed)-9 530 y(in)31 b([AH97].)137 650 y(This)42 +b(note)g(is)g(a)g(revision)f(of)h(an)g(earlier)e(v)m(ersion)j(from)d +(fall)g(1996)h(\(based)i(on)f(v)m(ersions)h(from)-9 770 +y(1995)33 b(and)i(1994\).)49 b(The)36 b(ma)5 b(jor)34 +b(di\013erences)i(are)f(as)g(follo)m(ws:)46 b(Firstly)-8 +b(,)34 b(R)m(OBDDs)h(are)f(no)m(w)i(view)m(ed)-9 891 +y(as)31 b(no)s(des)h(of)f(one)h(global)d(graph)i(with)g(one)h(\014xed)h +(ordering)d(to)i(re\015ect)g(state-of-the-art)e(of)h(e\016cien)m(t)-9 +1011 y(BDD)37 b(pac)m(k)-5 b(ages.)62 b(The)39 b(algorithms)c(ha)m(v)m +(e)40 b(b)s(een)f(c)m(hanged)g(\(and)g(simpli\014ed\))d(to)i(re\015ect) +h(this)f(fact.)-9 1131 y(Secondly)-8 b(,)25 b(a)d(pro)s(of)g(of)h(the)g +(canonicit)m(y)f(lemma)f(has)i(b)s(een)h(added.)40 b(Thirdly)-8 +b(,)25 b(the)e(sections)g(presen)m(ting)-9 1252 y(the)30 +b(algorithms)d(ha)m(v)m(e)32 b(b)s(een)f(completely)d(restructured.)45 +b(Finally)-8 b(,)28 b(the)i(pro)5 b(ject)31 b(prop)s(osal)e(has)h(b)s +(een)-9 1372 y(revised.)-9 1705 y FH(Ac)l(kno)l(wledgemen)l(ts)-9 +1924 y FK(Thanks)k(to)f(the)g(studen)m(ts)i(on)e(the)h(courses)g(of)f +(fall)e(1994,)h(1995,)g(and)h(1996)f(for)h(helping)f(me)g(debug)-9 +2044 y(and)41 b(impro)m(v)m(e)h(the)g(notes.)72 b(Thanks)44 +b(are)d(also)g(due)i(to)e(Hans)i(Risc)m(hel,)h(Morten)e(Ulrik)e +(S\034rensen,)-9 2165 y(Niels)26 b(Maretti,)i(J\034rgen)f(Staunstrup,)j +(Kim)25 b(Sk)-5 b(ak)28 b(Larsen,)h(Henrik)e(Hulgaard,)g(and)h(v)-5 +b(arious)26 b(p)s(eople)-9 2285 y(on)32 b(the)h(In)m(ternet)h(who)f +(found)g(t)m(yp)s(os)g(and)g(suggested)h(impro)m(v)m(emen)m(ts.)p +eop +%%Page: 3 4 +3 3 bop 3721 -460 a FK(3)p eop +%%Page: 4 5 +4 4 bop -9 -460 a FG(CONTENTS)3178 b FK(4)-9 -171 y FH(Con)l(ten)l(ts) +-9 48 y FF(1)90 b(Bo)s(olean)37 b(Expressions)2572 b(6)-9 +266 y(2)90 b(Normal)36 b(F)-9 b(orms)2870 b(7)-9 484 +y(3)90 b(Binary)37 b(Decision)f(Diagrams)2292 b(8)-9 +702 y(4)90 b(Constructing)36 b(and)j(Manipulating)d(R)m(OBDDs)1474 +b(15)137 822 y FK(4.1)99 b FE(Mk)31 b FK(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 +b(15)137 943 y(4.2)99 b FE(Build)66 b FK(.)50 b(.)f(.)h(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) +h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 +b(17)137 1063 y(4.3)99 b FE(Appl)-7 b(y)49 b FK(.)h(.)f(.)h(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 +b(19)137 1183 y(4.4)99 b FE(Restrict)51 b FK(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(20)137 +1304 y(4.5)99 b FE(Sa)-7 b(tCount)p FK(,)34 b FE(AnySa)-7 +b(t)p FK(,)33 b FE(AllSa)-7 b(t)72 b FK(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 +b(22)137 1424 y(4.6)99 b FE(Simplify)84 b FK(.)50 b(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(25)137 +1544 y(4.7)99 b(Existen)m(tial)32 b(Quan)m(ti\014cation)f(and)i +(Substitution)j(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)f(.)h(.)g(.)93 b(25)-9 1762 y FF(5)d(Implemen)m(ting)35 +b(the)i(R)m(OBDD)f(op)s(erations)1650 b(27)-9 1980 y(6)90 +b(Examples)37 b(of)g(problem)g(solving)f(with)g(R)m(OBDDs)1354 +b(27)137 2101 y FK(6.1)99 b(The)34 b(8)e(Queens)i(problem)67 +b(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(27)137 +2221 y(6.2)99 b(Correctness)35 b(of)d(Com)m(binational)e(Circuits)97 +b(.)50 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +f(.)h(.)g(.)93 b(29)137 2341 y(6.3)99 b(Equiv)-5 b(alence)33 +b(of)f(Com)m(binational)e(Circuits)86 b(.)50 b(.)g(.)g(.)g(.)g(.)f(.)h +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 +b(29)-9 2559 y FF(7)d(V)-9 b(eri\014cation)35 b(with)h(R)m(OBDDs)2205 +b(31)137 2680 y FK(7.1)99 b(Knigh)m(ts)33 b(tour)e(.)50 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 +b(33)-9 2898 y FF(8)d(Pro)6 b(ject:)49 b(An)37 b(R)m(OBDD)g(P)m(ac)m(k) +-6 b(age)2050 b(35)137 3116 y(References)2997 b(36)p +eop +%%Page: 5 6 +5 5 bop -9 -460 a FG(CONTENTS)3178 b FK(5)p eop +%%Page: 6 7 +6 6 bop -9 -460 a FG(1)97 b(BOOLEAN)33 b(EXPRESSIONS)2368 +b FK(6)-9 -171 y FH(1)161 b(Bo)t(olean)54 b(Expressions)-9 +48 y FK(The)36 b(classical)e(calculus)h(for)h(dealing)e(with)h +FD(truth)k(values)k FK(consists)36 b(of)g FD(Bo)-5 b(ole)g(an)36 +b(variables)43 b FC(x;)17 b(y)t(;)g(:::)p FK(,)-9 168 +y(the)33 b(constan)m(ts)h FD(true)40 b FK(1)32 b(and)h +FD(false)39 b FK(0,)33 b(the)g(op)s(erators)f(of)g FD(c)-5 +b(onjunction)40 b FI(^)p FK(,)33 b FD(disjunction)39 +b FI(_)p FK(,)33 b FD(ne)-5 b(gation)-9 289 y FI(:)p +FK(,)44 b FD(implic)-5 b(ation)47 b FI(\))p FK(,)c(and)f +FD(bi-implic)-5 b(ation)47 b FI(,)41 b FK(whic)m(h)h(together)f(form)f +(the)i(Bo)s(olean)e(expressions.)-9 409 y(Sometimes)28 +b(the)i(v)-5 b(ariables)29 b(are)h(called)f FD(pr)-5 +b(op)g(ositional)31 b(variables)37 b FK(or)29 b FD(pr)-5 +b(op)g(ositional)31 b(letters)39 b FK(and)30 b(the)-9 +530 y(Bo)s(olean)h(expressions)j(are)f(then)g(kno)m(wn)h(as)f +FD(Pr)-5 b(op)g(ositional)34 b(L)-5 b(o)g(gic)p FK(.)137 +650 y(F)d(ormally)g(,)29 b(Bo)s(olean)j(expressions)i(are)f(generated)g +(from)e(the)i(follo)m(wing)d(grammar:)899 838 y FC(t)61 +b FK(::=)f FC(x)28 b FI(j)g FK(0)f FI(j)g FK(1)h FI(j)f(:)p +FC(t)i FI(j)e FC(t)22 b FI(^)h FC(t)28 b FI(j)f FC(t)22 +b FI(_)h FC(t)28 b FI(j)f FC(t)h FI(\))f FC(t)h FI(j)g +FC(t)g FI(,)f FC(t;)-9 1026 y FK(where)c FC(x)f FK(ranges)g(o)m(v)m(er) +h(a)f(set)h(of)e(Bo)s(olean)g(v)-5 b(ariables.)38 b(This)22 +b(is)g(called)f(the)h FD(abstr)-5 b(act)25 b(syntax)34 +b FK(of)21 b(Bo)s(olean)-9 1146 y(expressions.)44 b(The)31 +b(concrete)h(syn)m(tax)g(includes)e(paren)m(theses)j(to)d(solv)m(e)g +(am)m(biguities.)40 b(Moreo)m(v)m(er,)33 b(as)-9 1266 +y(a)39 b(common)g(con)m(v)m(en)m(tion)i(it)e(is)g(assumed)h(that)g(the) +g(op)s(erators)g(bind)g(according)f(to)g(their)h(relativ)m(e)-9 +1387 y(priorit)m(y)-8 b(.)42 b(The)33 b(priorities)e(are,)h(with)g(the) +h(highest)g(\014rst:)44 b FI(:)p FK(,)33 b FI(^)p FK(,)g +FI(_)p FK(,)g FI(,)p FK(,)f FI(\))p FK(.)43 b(Hence,)34 +b(for)e(example)857 1575 y FI(:)p FC(x)978 1590 y FB(1)1040 +1575 y FI(^)23 b FC(x)1184 1590 y FB(2)1246 1575 y FI(_)f +FC(x)1389 1590 y FB(3)1457 1575 y FI(\))27 b FC(x)1639 +1590 y FB(4)1707 1575 y FK(=)g(\(\(\()p FI(:)p FC(x)2045 +1590 y FB(1)2085 1575 y FK(\))22 b FI(^)h FC(x)2289 1590 +y FB(2)2329 1575 y FK(\))f FI(_)g FC(x)2532 1590 y FB(3)2572 +1575 y FK(\))28 b FI(\))f FC(x)2820 1590 y FB(4)2877 +1575 y FC(:)-9 1763 y FK(A)d(Bo)s(olean)g(expression)i(with)e(v)-5 +b(ariables)24 b FC(x)1584 1778 y FB(1)1624 1763 y FC(;)17 +b(:)g(:)g(:)f(;)h(x)1898 1778 y FA(n)1969 1763 y FK(denotes)26 +b(for)f(eac)m(h)g(assignmen)m(t)g(of)f(truth)h(v)-5 b(alues)-9 +1883 y(to)36 b(the)h(v)-5 b(ariables)35 b(itself)h(a)g(truth)h(v)-5 +b(alue)36 b(according)g(to)g(the)h(standard)g(truth)g(tables,)g(see)h +(\014gure)f(1.)-9 2003 y FD(T)-7 b(ruth)43 b(assignments)48 +b FK(are)42 b(written)f(as)h(sequences)j(of)d(assignmen)m(ts)g(of)f(v) +-5 b(alues)41 b(to)h(v)-5 b(ariables,)43 b(e.g.,)-9 2124 +y([0)p FC(=x)171 2139 y FB(1)210 2124 y FC(;)17 b FK(1)p +FC(=x)407 2139 y FB(2)446 2124 y FC(;)g FK(0)p FC(=x)643 +2139 y FB(3)682 2124 y FC(;)g FK(1)p FC(=x)879 2139 y +FB(4)918 2124 y FK(])31 b(whic)m(h)g(assigns)g(0)f(to)g +FC(x)1829 2139 y FB(1)1900 2124 y FK(and)g FC(x)2142 +2139 y FB(3)2182 2124 y FK(,)h(1)g(to)f FC(x)2492 2139 +y FB(2)2562 2124 y FK(and)h FC(x)2805 2139 y FB(4)2845 +2124 y FK(.)43 b(With)30 b(this)g(particular)-9 2244 +y(truth)g(assignmen)m(t)g(the)g(ab)s(o)m(v)m(e)h(expression)g(has)g(v) +-5 b(alue)29 b(1,)i(whereas)g([0)p FC(=x)2723 2259 y +FB(1)2763 2244 y FC(;)17 b FK(1)p FC(=x)2960 2259 y FB(2)2999 +2244 y FC(;)g FK(0)p FC(=x)3196 2259 y FB(3)3235 2244 +y FC(;)g FK(0)p FC(=x)3432 2259 y FB(4)3471 2244 y FK(])30 +b(yields)-9 2364 y(0.)p 685 2557 282 4 v 683 2677 4 121 +v 815 2677 V 859 2641 a FI(:)p 965 2677 V 685 2681 282 +4 v 683 2801 4 121 v 727 2765 a FK(0)p 815 2801 V 91 +w(1)p 965 2801 V 683 2921 V 727 2885 a(1)p 815 2921 V +91 w(0)p 965 2921 V 685 2925 282 4 v 1064 2557 414 4 +v 1062 2677 4 121 v 1106 2641 a FI(^)p 1212 2677 V 83 +w FK(0)83 b(1)p 1475 2677 V 1064 2681 414 4 v 1062 2801 +4 121 v 1114 2765 a(0)p 1212 2801 V 92 w(0)g(0)p 1475 +2801 V 1062 2921 V 1114 2885 a(1)p 1212 2921 V 92 w(0)g(1)p +1475 2921 V 1064 2925 414 4 v 1575 2557 V 1573 2677 4 +121 v 1616 2641 a FI(_)p 1722 2677 V 84 w FK(0)f(1)p +1986 2677 V 1575 2681 414 4 v 1573 2801 4 121 v 1625 +2765 a(0)p 1722 2801 V 92 w(0)g(1)p 1986 2801 V 1573 +2921 V 1625 2885 a(1)p 1722 2921 V 92 w(1)g(1)p 1986 +2921 V 1575 2925 414 4 v 2085 2557 447 4 v 2083 2677 +4 121 v 2127 2641 a FI(\))p 2266 2677 V 82 w FK(0)h(1)p +2530 2677 V 2085 2681 447 4 v 2083 2801 4 121 v 2152 +2765 a(0)p 2266 2801 V 108 w(1)g(1)p 2530 2801 V 2083 +2921 V 2152 2885 a(1)p 2266 2921 V 108 w(0)g(1)p 2530 +2921 V 2085 2925 447 4 v 2629 2557 V 2627 2677 4 121 +v 2671 2641 a FI(,)p 2810 2677 V 82 w FK(0)g(1)p 3074 +2677 V 2629 2681 447 4 v 2627 2801 4 121 v 2696 2765 +a(0)p 2810 2801 V 108 w(1)g(0)p 3074 2801 V 2627 2921 +V 2696 2885 a(1)p 2810 2921 V 108 w(0)g(1)p 3074 2921 +V 2629 2925 447 4 v 1389 3085 a(Figure)31 b(1:)44 b(T)-8 +b(ruth)33 b(tables.)137 3406 y(The)46 b(set)g(of)e(truth)i(v)-5 +b(alues)45 b(is)f(often)h(denoted)h Fz(B)71 b FK(=)49 +b FI(f)p FK(0)p FC(;)17 b FK(1)p FI(g)p FK(.)80 b(If)45 +b(w)m(e)h(\014x)g(an)f(ordering)f(of)h(the)-9 3526 y(v)-5 +b(ariables)39 b(of)i(a)f(Bo)s(olean)g(expression)i FC(t)f +FK(w)m(e)h(can)f(view)g FC(t)g FK(as)g(de\014ning)g(a)g(function)f +(from)g Fz(B)3488 3484 y FA(n)3576 3526 y FK(to)h Fz(B)-9 +3647 y FK(where)e FC(n)f FK(is)g(the)g(n)m(um)m(b)s(er)g(of)g(v)-5 +b(ariables.)59 b(Notice,)39 b(that)f(the)g(particular)e(ordering)h(c)m +(hosen)j(for)e(the)-9 3767 y(v)-5 b(ariables)38 b(is)h(essen)m(tial)h +(for)f(what)g(function)h(is)f(de\014ned.)66 b(Consider)40 +b(for)f(example)g(the)h(expression)-9 3887 y FC(x)28 +b FI(\))g FC(y)t FK(.)44 b(If)33 b(w)m(e)h(c)m(ho)s(ose)g(the)g +(ordering)e FC(x)d(<)f(y)36 b FK(then)e(this)f(is)f(the)h(function)g +FC(f)11 b FK(\()p FC(x;)17 b(y)t FK(\))27 b(=)i FC(x)f +FI(\))g FC(y)t FK(,)33 b(true)g(if)-9 4008 y(the)h(\014rst)h(argumen)m +(t)f(implies)e(the)j(second,)h(but)f(if)e(w)m(e)i(c)m(ho)s(ose)h(the)f +(ordering)e FC(y)h(<)d(x)j FK(then)h(it)f(is)g(the)-9 +4128 y(function)i FC(f)11 b FK(\()p FC(y)t(;)17 b(x)p +FK(\))33 b(=)h FC(x)h FI(\))f FC(y)t FK(,)j(true)g(if)f(the)h(second)g +(argumen)m(t)g(implies)d(the)j(\014rst.)56 b(When)37 +b(w)m(e)h(later)-9 4249 y(consider)f(compact)f(represen)m(tations)i(of) +e(Bo)s(olean)g(expressions,)j(suc)m(h)f(v)-5 b(ariable)35 +b(orderings)i(pla)m(y)f(a)-9 4369 y(crucial)31 b(role.)137 +4489 y(Tw)m(o)41 b(Bo)s(olean)f(expressions)i FC(t)f +FK(and)g FC(t)1573 4453 y Fy(0)1637 4489 y FK(are)g(said)f(to)g(b)s(e)h +(equal)f(if)g(they)h(yield)f(the)h(same)g(truth)-9 4610 +y(v)-5 b(alue)36 b(for)h(all)d(truth)k(assignmen)m(ts.)57 +b(A)37 b(Bo)s(olean)f(expression)i(is)f(a)f FD(tautolo)-5 +b(gy)47 b FK(if)35 b(it)h(yields)h(true)h(for)-9 4730 +y(all)30 b(truth)j(assignmen)m(ts;)g(it)e(is)h FD(satis\014able)39 +b FK(if)32 b(it)f(yields)h(true)h(for)f(at)h(least)f(one)h(truth)f +(assignmen)m(t.)-9 4922 y FF(Exercise)k(1.1)49 b FK(Sho)m(w)d(ho)m(w)g +(all)d(op)s(erators)i(can)g(b)s(e)g(enco)s(ded)i(using)d(only)h +FI(:)h FK(and)f FI(_)p FK(.)81 b(Use)46 b(this)-9 5042 +y(to)38 b(argue)g(that)g(an)m(y)h(Bo)s(olean)e(expression)j(can)f(b)s +(e)f(written)h(using)f(only)g FI(_)p FK(,)i FI(^)p FK(,)g(v)-5 +b(ariables,)39 b(and)g FI(:)-9 5162 y FK(applied)31 b(to)h(v)-5 +b(ariables.)p eop +%%Page: 7 8 +7 7 bop -9 -460 a FG(2)97 b(NORMAL)33 b(F)m(ORMS)2755 +b FK(7)-9 -171 y FF(Exercise)36 b(1.2)49 b FK(Argue)42 +b(that)f FC(t)h FK(and)g FC(t)1456 -207 y Fy(0)1521 -171 +y FK(are)g(equal)f(if)f(and)i(only)f(if)g FC(t)i FI(,)g +FC(t)2834 -207 y Fy(0)2899 -171 y FK(is)e(a)h(tautology)-8 +b(.)69 b(Is)42 b(it)-9 -51 y(p)s(ossible)31 b(to)i(sa)m(y)g(whether)h +FC(t)f FK(is)f(satis\014able)g(from)f(the)i(fact)g(that)f +FI(:)p FC(t)h FK(is)f(a)h(tautology?)-9 282 y FH(2)161 +b(Normal)54 b(F)-13 b(orms)-9 501 y FK(A)29 b(Bo)s(olean)f(expression)j +(is)e(in)g FD(Disjunctive)i(Normal)g(F)-7 b(orm)31 b(\(DNF\))i +FK(if)28 b(it)g(consists)j(of)e(a)g(disjunction)-9 622 +y(of)j(conjunctions)h(of)f(v)-5 b(ariables)31 b(and)i(negations)f(of)g +(v)-5 b(ariables,)31 b(i.e.,)h(if)g(it)f(is)h(of)h(the)g(form)932 +842 y(\()p FC(t)1005 800 y FB(1)1005 866 y(1)1067 842 +y FI(^)23 b FC(t)1191 800 y FB(1)1191 866 y(2)1253 842 +y FI(^)f(\001)17 b(\001)g(\001)k(^)h FC(t)1603 800 y +FB(1)1603 866 y FA(k)1640 875 y Fx(1)1679 842 y FK(\))g +FI(_)g(\001)17 b(\001)g(\001)k(_)h FK(\()p FC(t)2127 +800 y FA(l)2127 866 y FB(1)2189 842 y FI(^)h FC(t)2313 +800 y FA(l)2313 866 y FB(2)2374 842 y FI(^)g(\001)17 +b(\001)g(\001)j(^)j FC(t)2725 800 y FA(l)2725 866 y(k)2762 +878 y Fw(l)2790 842 y FK(\))817 b(\(1\))-9 1077 y(where)33 +b(eac)m(h)h FC(t)527 1030 y FA(j)527 1102 y(i)596 1077 +y FK(is)e(either)h(a)f(v)-5 b(ariable)31 b FC(x)1473 +1030 y FA(j)1473 1102 y(i)1542 1077 y FK(or)h(a)h(negation)e(of)h(a)h +(v)-5 b(ariable)31 b FI(:)p FC(x)2818 1030 y FA(j)2818 +1102 y(i)2855 1077 y FK(.)43 b(An)33 b(example)f(is)1465 +1297 y(\()p FC(x)23 b FI(^)f(:)p FC(y)t FK(\))g FI(_)h +FK(\()p FI(:)p FC(x)g FI(^)f FC(y)t FK(\))-9 1517 y(whic)m(h)31 +b(is)g(a)h(w)m(ell-kno)m(wn)f(function)g(of)g FC(x)h +FK(and)f FC(y)k FK(\(whic)m(h)d(one?\).)43 b(A)32 b(more)e(succinct)j +(presen)m(tation)e(of)-9 1637 y(\(1\))h(is)g(to)g(write)g(it)g(using)g +(indexed)i(v)m(ersions)f(of)f FI(^)h FK(and)g FI(_)p +FK(:)1642 1850 y FA(l)1598 1880 y Fv(_)1592 2090 y FA(j)t +FB(=1)1731 1774 y Fv(0)1731 1954 y(@)1841 1839 y FA(k)1878 +1849 y Fw(j)1820 1880 y Fv(^)1818 2090 y FA(i)p FB(=1)1949 +1974 y FC(t)1984 1927 y FA(j)1984 2000 y(i)2021 1774 +y Fv(1)2021 1954 y(A)2141 1974 y FC(:)-9 2311 y FK(Similarly)-8 +b(,)28 b(a)k FD(Conjunctive)i(Normal)h(F)-7 b(orm)34 +b(\(CNF\))h FK(is)d(an)h(expression)h(that)e(can)h(b)s(e)g(written)f +(as)1673 2524 y FA(l)1628 2554 y Fv(^)1622 2764 y FA(j)t +FB(=1)1761 2448 y Fv(0)1761 2628 y(@)1871 2513 y FA(k)1908 +2523 y Fw(j)1850 2554 y Fv(_)1849 2764 y FA(i)p FB(=1)1979 +2649 y FC(t)2014 2601 y FA(j)2014 2674 y(i)2051 2448 +y Fv(1)2051 2628 y(A)-9 3002 y FK(where)40 b(eac)m(h)h +FC(t)541 2955 y FA(j)541 3028 y(i)617 3002 y FK(is)e(either)g(a)h(v)-5 +b(ariable)38 b(or)h(a)g(negated)h(v)-5 b(ariable.)63 +b(It)39 b(is)g(not)h(di\016cult)f(to)g(pro)m(v)m(e)i(the)-9 +3122 y(follo)m(wing)29 b(prop)s(osition:)-9 3326 y FF(Prop)s(osition)35 +b(1)49 b FD(A)n(ny)32 b(Bo)-5 b(ole)g(an)30 b(expr)-5 +b(ession)31 b(is)g(e)-5 b(qual)32 b(to)g(an)f(expr)-5 +b(ession)31 b(in)h(CNF)f(and)g(an)h(expr)-5 b(es-)-9 +3446 y(sion)34 b(in)g(DNF.)-9 3650 y FK(In)40 b(general,)h(it)e(is)h +(hard)g(to)g(determine)f(whether)j(a)d(Bo)s(olean)g(expression)j(is)d +(satis\014able.)65 b(This)41 b(is)-9 3770 y(made)32 b(precise)h(b)m(y)g +(a)g(famous)f(theorem)g(due)h(to)f(Co)s(ok)h([Co)s(o71]:)-9 +3973 y FF(Theorem)k(1)g(\(Co)s(ok\))48 b FD(Satis\014ability)35 +b(of)f(Bo)-5 b(ole)g(an)34 b(expr)-5 b(essions)33 b(is)i(NP-c)-5 +b(omplete.)-9 4177 y FK(\(F)d(or)29 b(readers)i(unfamiliar)c(with)j +(the)g(notion)g(of)g(NP-completeness)h(the)f(follo)m(wing)e(short)j +(summary)-9 4297 y(of)41 b(the)h(pragmatic)e(consequences)46 +b(su\016ces.)73 b(Problems)41 b(that)h(are)g(NP-complete)f(can)h(b)s(e) +g(solv)m(ed)-9 4418 y(b)m(y)c(algorithms)d(that)j(run)g(in)e(exp)s +(onen)m(tial)i(time.)57 b(No)38 b(p)s(olynomial)c(time)i(algorithms)f +(are)j(kno)m(wn)-9 4538 y(to)44 b(exist)h(for)f(an)m(y)h(of)f(the)h +(NP-complete)f(problems)f(and)i(it)e(is)i(v)m(ery)h(unlik)m(ely)d(that) +i(p)s(olynomial)-9 4658 y(time)40 b(algorithms)e(should)j(indeed)h +(exist)g(although)e(nob)s(o)s(dy)h(has)h(y)m(et)g(b)s(een)g(able)f(to)g +(pro)m(v)m(e)i(their)-9 4779 y(non-existence.\))137 4899 +y(Co)s(ok's)35 b(theorem)g(ev)m(en)h(holds)e(when)i(restricted)f(to)f +(expressions)j(in)d(CNF.)g(F)-8 b(or)34 b(DNFs)h(satis\014-)-9 +5019 y(abilit)m(y)30 b(is)j(decidable)f(in)g(p)s(olynomial)e(time)h +(but)i(for)g(DNFs)f(the)i(tautology)d(c)m(hec)m(k)36 +b(is)c(hard)h(\(co-NP)-9 5140 y(complete\).)52 b(Although)34 +b(satis\014abilit)m(y)g(is)h(easy)i(for)e(DNFs)g(and)h(tautology)f(c)m +(hec)m(k)i(easy)g(for)e(CNFs,)p eop +%%Page: 8 9 +8 8 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) +2102 b FK(8)-9 -171 y(this)30 b(do)s(es)h(not)g(help)g(us)g(since)h +(the)f(con)m(v)m(ersion)h(b)s(et)m(w)m(een)h(CNFs)e(and)g(DNFs)g(is)f +(exp)s(onen)m(tial)h(as)g(the)-9 -51 y(follo)m(wing)e(example)j(sho)m +(ws.)137 70 y(Consider)h(the)g(follo)m(wing)d(CNF)j(o)m(v)m(er)g(the)g +(v)-5 b(ariables)31 b FC(x)2199 34 y FB(1)2199 94 y(0)2239 +70 y FC(;)17 b(:)g(:)g(:)f(x)2469 34 y FA(n)2469 94 y +FB(0)2517 70 y FC(;)h(x)2616 34 y FB(1)2616 94 y(1)2655 +70 y FC(;)g(:)g(:)g(:)f(;)h(x)2929 34 y FA(n)2929 94 +y FB(1)2976 70 y FK(:)1062 269 y(\()p FC(x)1155 228 y +FB(1)1155 293 y(0)1217 269 y FI(_)23 b FC(x)1361 228 +y FB(1)1361 293 y(1)1401 269 y FK(\))f FI(^)g FK(\()p +FC(x)1642 228 y FB(2)1642 293 y(0)1704 269 y FI(_)h FC(x)1848 +228 y FB(2)1848 293 y(1)1888 269 y FK(\))f FI(^)g(\001)17 +b(\001)g(\001)k(^)h FK(\()p FC(x)2356 228 y FA(n)2356 +293 y FB(0)2426 269 y FI(_)g FC(x)2569 228 y FA(n)2569 +293 y FB(1)2617 269 y FK(\))17 b FC(:)-9 468 y FK(The)25 +b(corresp)s(onding)g(DNF)f(is)g(a)g(disjunction)g(whic)m(h)h(has)h(a)e +(disjunct)h(for)f(eac)m(h)i(of)e(the)h FC(n)p FK(-digit)d(binary)-9 +588 y(n)m(um)m(b)s(ers)31 b(from)f(000)17 b FC(:)g(:)g(:)e +FK(000)30 b(to)h(111)17 b FC(:)g(:)g(:)e FK(111)30 b(|)g(the)h +FC(i)p FK('th)h(digit)c(represen)m(ting)k(a)f(c)m(hoice)g(of)g(either)f +FC(x)3730 552 y FA(i)3730 613 y FB(0)-9 709 y FK(\(for)i(0\))g(or)g +FC(x)471 673 y FA(i)471 733 y FB(1)543 709 y FK(\(for)g(1\):)1246 +826 y(\()p FC(x)1339 790 y FB(1)1339 851 y(0)1401 826 +y FI(^)22 b FC(x)1544 790 y FB(2)1544 851 y(0)1606 826 +y FI(^)h(\001)17 b(\001)g(\001)j(^)j FC(x)1977 785 y +FA(n)p Fy(\000)p FB(1)1977 851 y(0)2137 826 y FI(^)f +FC(x)2280 790 y FA(n)2280 851 y FB(0)2327 826 y FK(\))105 +b FI(_)1246 947 y FK(\()p FC(x)1339 910 y FB(1)1339 971 +y(0)1401 947 y FI(^)22 b FC(x)1544 910 y FB(2)1544 971 +y(0)1606 947 y FI(^)h(\001)17 b(\001)g(\001)j(^)j FC(x)1977 +905 y FA(n)p Fy(\000)p FB(1)1977 971 y(0)2137 947 y FI(^)f +FC(x)2280 910 y FA(n)2280 971 y FB(1)2327 947 y FK(\))105 +b FI(_)1792 1042 y FK(.)1792 1075 y(.)1792 1109 y(.)1246 +1229 y(\()p FC(x)1339 1193 y FB(1)1339 1254 y(1)1401 +1229 y FI(^)22 b FC(x)1544 1193 y FB(2)1544 1254 y(1)1606 +1229 y FI(^)h(\001)17 b(\001)g(\001)j(^)j FC(x)1977 1188 +y FA(n)p Fy(\000)p FB(1)1977 1253 y(1)2137 1229 y FI(^)f +FC(x)2280 1193 y FA(n)2280 1254 y FB(0)2327 1229 y FK(\))105 +b FI(_)1224 1349 y FK(\()p FC(x)1317 1313 y FB(1)1317 +1374 y(1)1379 1349 y FI(^)22 b FC(x)1522 1313 y FB(2)1522 +1374 y(1)1584 1349 y FI(^)h(\001)17 b(\001)g(\001)j(^)j +FC(x)1955 1308 y FA(n)p Fy(\000)p FB(1)1955 1374 y(1)2115 +1349 y FI(^)f FC(x)2258 1313 y FA(n)2258 1374 y FB(1)2306 +1349 y FK(\))17 b FC(:)-9 1508 y FK(Whereas)30 b(the)h(original)26 +b(expression)31 b(has)f(size)g(prop)s(ortional)d(to)i +FC(n)h FK(the)g(DNF)f(has)h(size)g(prop)s(ortional)-9 +1628 y(to)i FC(n)p FK(2)217 1592 y FA(n)264 1628 y FK(.)137 +1749 y(The)40 b(next)h(section)e(in)m(tro)s(duces)h(a)g(normal)d(form)i +(that)g(has)h(more)f(desirable)g(prop)s(erties)g(than)-9 +1869 y(DNFs)32 b(and)h(CNFs.)44 b(In)33 b(particular,)e(there)i(are)g +(e\016cien)m(t)g(algorithms)d(for)j(determining)e(the)i(satis\014-)-9 +1989 y(abilit)m(y)d(and)j(tautology)e(questions.)-9 2194 +y FF(Exercise)36 b(2.1)49 b FK(Describ)s(e)36 b(a)g(p)s(olynomial)d +(time)j(algorithm)d(for)j(determining)f(whether)j(a)e(DNF)g(is)-9 +2314 y(satis\014able.)-9 2519 y FF(Exercise)g(2.2)49 +b FK(Describ)s(e)37 b(a)f(p)s(olynomial)e(time)h(algorithm)f(for)i +(determining)g(whether)i(a)e(CNF)i(is)-9 2639 y(a)32 +b(tautology)-8 b(.)-9 2844 y FF(Exercise)36 b(2.3)49 +b FK(Giv)m(e)32 b(a)g(pro)s(of)g(of)g(prop)s(osition)f(1.)-9 +3048 y FF(Exercise)36 b(2.4)49 b FK(Explain)28 b(ho)m(w)i(Co)s(ok's)f +(theorem)g(implies)e(that)i(c)m(hec)m(king)h(in-equiv)-5 +b(alence)28 b(b)s(et)m(w)m(een)-9 3168 y(Bo)s(olean)j(expressions)j(is) +e(NP-hard.)-9 3373 y FF(Exercise)k(2.5)49 b FK(Explain)33 +b(ho)m(w)i(the)f(question)h(of)f(tautology)e(and)j(satis\014abilit)m(y) +d(can)i(b)s(e)g(decided)h(if)-9 3493 y(w)m(e)e(are)g(giv)m(en)f(an)h +(algorithm)c(for)j(c)m(hec)m(king)i(equiv)-5 b(alence)33 +b(b)s(et)m(w)m(een)i(Bo)s(olean)c(expressions.)-9 3823 +y FH(3)161 b(Binary)54 b(Decision)g(Diagrams)-9 4042 +y FK(Let)32 b FC(x)c FI(!)g FC(y)424 4057 y FB(0)463 +4042 y FC(;)17 b(y)555 4057 y FB(1)626 4042 y FK(b)s(e)33 +b(the)g FD(if-then-else)38 b FK(op)s(erator)32 b(de\014ned)i(b)m(y)1151 +4241 y FC(x)28 b FI(!)f FC(y)1409 4256 y FB(0)1448 4241 +y FC(;)17 b(y)1540 4256 y FB(1)1639 4241 y FK(=)60 b(\()p +FC(x)22 b FI(^)h FC(y)2027 4256 y FB(0)2066 4241 y FK(\))f +FI(_)h FK(\()p FI(:)p FC(x)g FI(^)f FC(y)2533 4256 y +FB(1)2572 4241 y FK(\))-9 4440 y(hence,)41 b FC(t)c FI(!)g +FC(t)540 4455 y FB(0)580 4440 y FC(;)17 b(t)659 4455 +y FB(1)736 4440 y FK(is)38 b(true)h(if)e FC(t)h FK(and)g +FC(t)1450 4455 y FB(0)1528 4440 y FK(are)g(true)h(or)f(if)f +FC(t)h FK(is)g(false)g(and)g FC(t)2761 4455 y FB(1)2839 +4440 y FK(is)f(true.)61 b(W)-8 b(e)39 b(call)d FC(t)j +FK(the)-9 4560 y FD(test)34 b(expr)-5 b(ession)p FK(.)41 +b(All)30 b(op)s(erators)h(can)h(easily)f(b)s(e)g(expressed)k(using)c +(only)g(the)g(if-then-else)g(op)s(erator)-9 4681 y(and)37 +b(the)g(constan)m(ts)i(0)d(and)i(1.)56 b(Moreo)m(v)m(er,)40 +b(this)d(can)g(b)s(e)h(done)f(in)f(suc)m(h)j(a)e(w)m(a)m(y)h(that)f +(all)e(tests)j(are)-9 4801 y(p)s(erformed)c(only)h(on)g(\(un-negated\)) +g(v)-5 b(ariables)34 b(and)h(v)-5 b(ariables)34 b(o)s(ccur)i(in)e(no)h +(other)g(places.)52 b(Hence)-9 4922 y(the)40 b(op)s(erator)g(giv)m(es)h +(rise)f(to)g(a)h(new)g(kind)f(of)g(normal)f(form.)66 +b(F)-8 b(or)39 b(example,)j FI(:)p FC(x)f FK(is)f(\()p +FC(x)i FI(!)f FK(0)p FC(;)17 b FK(1\))f(,)-9 5042 y FC(x)28 +b FI(,)f FC(y)34 b FK(is)d FC(x)d FI(!)f FK(\()p FC(y)k +FI(!)c FK(1)p FC(;)17 b FK(0\))p FC(;)g FK(\()p FC(y)30 +b FI(!)d FK(0)p FC(;)17 b FK(1\).)42 b(Since)32 b(v)-5 +b(ariables)30 b(m)m(ust)h(only)g(o)s(ccur)g(in)f(tests)j(the)e(Bo)s +(olean)-9 5162 y(expression)i FC(x)g FK(is)f(represen)m(ted)k(as)c +FC(x)c FI(!)g FK(1)p FC(;)17 b FK(0)f(.)p eop +%%Page: 9 10 +9 9 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) +2102 b FK(9)p 215 -267 3364 4 v 215 117 4 385 v 243 -168 +a(An)49 b FD(If-then-else)f(Normal)i(F)-7 b(orm)48 b(\(INF\))k +FK(is)c(a)h(Bo)s(olean)e(expression)j(built)d(en)m(tirely)243 +-47 y(from)28 b(the)h(if-then-else)f(op)s(erator)h(and)g(the)h(constan) +m(ts)g(0)f(and)g(1)g(suc)m(h)i(that)e(all)e(tests)j(are)243 +73 y(p)s(erformed)i(only)g(on)h(v)-5 b(ariables.)p 3575 +117 V 215 120 3364 4 v 137 312 a(If)28 b(w)m(e)i(b)m(y)g +FC(t)p FK([0)p FC(=x)p FK(])f(denote)g(the)g(Bo)s(olean)f(expression)i +(obtained)e(b)m(y)h(replacing)f FC(x)h FK(with)f(0)h(in)f +FC(t)g FK(then)-9 432 y(it)j(is)h(not)h(hard)f(to)g(see)i(that)f(the)g +(follo)m(wing)c(equiv)-5 b(alence)33 b(holds:)1373 652 +y FC(t)61 b FK(=)f FC(x)28 b FI(!)f FC(t)p FK([1)p FC(=x)p +FK(])q FC(;)17 b(t)p FK([0)p FC(=x)p FK(])f FC(:)1258 +b FK(\(2\))-9 872 y(This)30 b(is)f(kno)m(wn)i(as)f(the)g +FD(Shannon)h(exp)-5 b(ansion)36 b FK(of)30 b FC(t)g FK(with)f(resp)s +(ect)i(to)f FC(x)p FK(.)43 b(This)30 b(simple)e(equation)i(has)-9 +992 y(a)37 b(lot)g(of)g(useful)h(applications.)57 b(The)38 +b(\014rst)h(is)e(to)g(generate)i(an)e(INF)h(from)e(an)m(y)j(expression) +g FC(t)p FK(.)59 b(If)38 b FC(t)-9 1113 y FK(con)m(tains)31 +b(no)g(v)-5 b(ariables)29 b(it)h(is)h(either)g(equiv)-5 +b(alen)m(t)31 b(to)f(0)h(or)g(1)f(whic)m(h)i(is)f(an)f(INF.)i +(Otherwise)f(w)m(e)h(form)-9 1233 y(the)h(Shannon)g(expansion)g(of)g +FC(t)g FK(with)f(resp)s(ect)i(to)f(one)g(of)f(the)i(v)-5 +b(ariables)31 b FC(x)i FK(in)g FC(t)p FK(.)44 b(Th)m(us)34 +b(since)g FC(t)p FK([0)p FC(=x)p FK(])-9 1354 y(and)e +FC(t)p FK([1)p FC(=x)p FK(])g(b)s(oth)f(con)m(tain)h(one)g(less)g(v)-5 +b(ariable)30 b(than)i FC(t)p FK(,)h(w)m(e)g(can)f(recursiv)m(ely)h +(\014nd)f(INFs)g(for)g(b)s(oth)f(of)-9 1474 y(these;)i(call)e(them)i +FC(t)731 1489 y FB(0)803 1474 y FK(and)f FC(t)1027 1489 +y FB(1)1067 1474 y FK(.)44 b(An)32 b(INF)h(for)f FC(t)h +FK(is)f(no)m(w)h(simply)1665 1694 y FC(x)28 b FI(!)f +FC(t)1910 1709 y FB(1)1950 1694 y FC(;)17 b(t)2029 1709 +y FB(0)2068 1694 y FC(:)-9 1914 y FK(W)-8 b(e)33 b(ha)m(v)m(e)g(pro)m +(v)m(ed:)-9 2117 y FF(Prop)s(osition)i(2)49 b FD(A)n(ny)35 +b(Bo)-5 b(ole)g(an)33 b(expr)-5 b(ession)34 b(is)g(e)-5 +b(quivalent)35 b(to)g(an)f(expr)-5 b(ession)34 b(in)g(INF.)-9 +2346 y FF(Example)i(1)49 b FK(Consider)37 b(the)f(Bo)s(olean)f +(expression)j FC(t)c FK(=)g(\()p FC(x)2265 2361 y FB(1)2339 +2346 y FI(,)f FC(y)2520 2361 y FB(1)2559 2346 y FK(\))25 +b FI(^)g FK(\()p FC(x)2806 2361 y FB(2)2880 2346 y FI(,)33 +b FC(y)3061 2361 y FB(2)3100 2346 y FK(\).)55 b(If)36 +b(w)m(e)h(\014nd)g(an)-9 2466 y(INF)k(of)g FC(t)h FK(b)m(y)g(selecting) +f(in)g(order)h(the)g(v)-5 b(ariables)40 b FC(x)1982 2481 +y FB(1)2022 2466 y FC(;)17 b(y)2114 2481 y FB(1)2153 +2466 y FC(;)g(x)2252 2481 y FB(2)2291 2466 y FC(;)g(y)2383 +2481 y FB(2)2463 2466 y FK(on)42 b(whic)m(h)g(to)f(p)s(erform)g +(Shannon)-9 2586 y(expansions,)33 b(w)m(e)h(get)e(the)h(expressions) +1505 2806 y FC(t)83 b FK(=)g FC(x)1837 2821 y FB(1)1904 +2806 y FI(!)28 b FC(t)2067 2821 y FB(1)2106 2806 y FC(;)17 +b(t)2185 2821 y FB(0)1465 2952 y FC(t)1500 2967 y FB(0)1623 +2952 y FK(=)83 b FC(y)1830 2967 y FB(1)1897 2952 y FI(!)27 +b FK(0)p FC(;)17 b(t)2152 2967 y FB(00)1465 3097 y FC(t)1500 +3112 y FB(1)1623 3097 y FK(=)83 b FC(y)1830 3112 y FB(1)1897 +3097 y FI(!)27 b FC(t)2059 3112 y FB(11)2134 3097 y FC(;)17 +b FK(0)1430 3242 y FC(t)1465 3257 y FB(00)1623 3242 y +FK(=)83 b FC(x)1837 3257 y FB(2)1904 3242 y FI(!)28 b +FC(t)2067 3257 y FB(001)2177 3242 y FC(;)17 b(t)2256 +3257 y FB(000)1430 3388 y FC(t)1465 3403 y FB(11)1623 +3388 y FK(=)83 b FC(x)1837 3403 y FB(2)1904 3388 y FI(!)28 +b FC(t)2067 3403 y FB(111)2177 3388 y FC(;)17 b(t)2256 +3403 y FB(110)1395 3533 y FC(t)1430 3548 y FB(000)1623 +3533 y FK(=)83 b FC(y)1830 3548 y FB(2)1897 3533 y FI(!)27 +b FK(0)p FC(;)17 b FK(1)1395 3678 y FC(t)1430 3693 y +FB(001)1623 3678 y FK(=)83 b FC(y)1830 3693 y FB(2)1897 +3678 y FI(!)27 b FK(1)p FC(;)17 b FK(0)1395 3823 y FC(t)1430 +3838 y FB(110)1623 3823 y FK(=)83 b FC(y)1830 3838 y +FB(2)1897 3823 y FI(!)27 b FK(0)p FC(;)17 b FK(1)1395 +3969 y FC(t)1430 3984 y FB(111)1623 3969 y FK(=)83 b +FC(y)1830 3984 y FB(2)1897 3969 y FI(!)27 b FK(1)p FC(;)17 +b FK(0)-9 4189 y(Figure)31 b(2)h(sho)m(ws)j(the)e(expression)g(as)g(a)f +(tree.)45 b(Suc)m(h)33 b(a)g(tree)g(is)f(also)f(called)h(a)g +FD(de)-5 b(cision)34 b(tr)-5 b(e)g(e.)43 b Fu(\003)-9 +4417 y FK(A)31 b(lot)e(of)i(the)g(expressions)i(are)e(easily)g(seen)h +(to)f(b)s(e)g(iden)m(tical,)f(so)h(it)f(is)g(tempting)g(to)h(iden)m +(tify)f(them.)-9 4537 y(F)-8 b(or)40 b(example,)i(instead)f(of)g +FC(t)1093 4552 y FB(110)1244 4537 y FK(w)m(e)h(can)g(use)g +FC(t)1796 4552 y FB(000)1947 4537 y FK(and)f(instead)g(of)f +FC(t)2644 4552 y FB(111)2796 4537 y FK(w)m(e)i(can)f(use)h +FC(t)3347 4552 y FB(001)3457 4537 y FK(.)69 b(If)41 b(w)m(e)-9 +4658 y(substitute)e FC(t)488 4673 y FB(000)637 4658 y +FK(for)g FC(t)828 4673 y FB(110)977 4658 y FK(in)f(the)h(righ)m(t-hand) +f(side)h(of)g FC(t)2112 4673 y FB(11)2226 4658 y FK(and)g(also)f +FC(t)2659 4673 y FB(001)2808 4658 y FK(for)g FC(t)2998 +4673 y FB(111)3108 4658 y FK(,)j(w)m(e)f(in)e(fact)h(see)-9 +4778 y(that)32 b FC(t)237 4793 y FB(00)344 4778 y FK(and)h +FC(t)569 4793 y FB(11)677 4778 y FK(are)f(iden)m(tical,)f(and)i(in)f +FC(t)1598 4793 y FB(1)1670 4778 y FK(w)m(e)h(can)g(replace)g +FC(t)2358 4793 y FB(11)2465 4778 y FK(with)f FC(t)2722 +4793 y FB(00)2797 4778 y FK(.)137 4899 y(If)42 b(w)m(e)i(in)d(fact)i +(iden)m(tify)e FD(al)5 b(l)53 b FK(equal)42 b(sub)s(expressions)j(w)m +(e)e(end)g(up)g(with)f(what)h(is)f(kno)m(wn)i(as)e(a)-9 +5019 y FD(binary)i(de)-5 b(cision)44 b(diagr)-5 b(am)49 +b FK(\(a)43 b FD(BDD)p FK(\).)f(It)i(is)f(no)g(longer)g(a)g(tree)h(of)e +(Bo)s(olean)h(expressions)i(but)e(a)-9 5139 y(directed)32 +b(acyclic)h(graph)f(\(D)m(A)m(G\).)p eop +%%Page: 10 11 +10 10 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) +2054 b FK(10)637 1843 y @beginspecial 0 @llx 0 @lly 296 +@urx 243 @ury 2960 @rwi @setspecial +%%BeginDocument: inf-ex.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-80.0 271.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 416 m 0 0 l 561 0 l 561 416 l cp clip + 0.72000 0.72000 sc +0.500 slw +% Ellipse +n 319 59 20 20 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 134 374 m 134 354 l 114 354 l 114 374 l cp gs col-1 s gr +% Polyline +n 174 374 m 174 354 l 154 354 l 154 374 l cp gs col-1 s gr +% Polyline +n 154 319 m 164 354 l gs col-1 s gr +% Polyline + [4] 0 sd +n 134 319 m 124 354 l gs col-1 s gr [] 0 sd +% Polyline +n 214 374 m 214 354 l 194 354 l 194 374 l cp gs col-1 s gr +% Polyline +n 254 374 m 254 354 l 234 354 l 234 374 l cp gs col-1 s gr +% Polyline +n 234 319 m 244 354 l gs col-1 s gr +% Polyline + [4] 0 sd +n 214 319 m 204 354 l gs col-1 s gr [] 0 sd +% Polyline +n 299 374 m 299 354 l 279 354 l 279 374 l cp gs col-1 s gr +% Ellipse +n 144 299 20 20 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 184 219 20 20 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 264 139 20 20 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 224 299 20 20 0 360 DrawEllipse gs col-1 s gr + +% Polyline + [4] 0 sd +n 249 154 m 199 204 l gs col-1 s gr [] 0 sd +% Polyline + [4] 0 sd +n 169 234 m 149 279 l gs col-1 s gr [] 0 sd +% Polyline +n 280 148 m 289 354 l gs col-1 s gr +% Polyline +n 199 234 m 224 279 l gs col-1 s gr +% Polyline +n 479 374 m 479 354 l 459 354 l 459 374 l cp gs col-1 s gr +% Polyline +n 519 374 m 519 354 l 499 354 l 499 374 l cp gs col-1 s gr +% Polyline +n 499 319 m 509 354 l gs col-1 s gr +% Polyline + [4] 0 sd +n 479 319 m 469 354 l gs col-1 s gr [] 0 sd +% Polyline +n 399 374 m 399 354 l 379 354 l 379 374 l cp gs col-1 s gr +% Polyline +n 439 374 m 439 354 l 419 354 l 419 374 l cp gs col-1 s gr +% Polyline +n 419 319 m 429 354 l gs col-1 s gr +% Polyline + [4] 0 sd +n 399 319 m 389 354 l gs col-1 s gr [] 0 sd +% Polyline +n 359 374 m 359 354 l 339 354 l 339 374 l cp gs col-1 s gr +% Ellipse +n 369 139 20 20 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 449 219 20 20 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 409 299 20 20 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 489 299 20 20 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 384 149 m 434 204 l gs col-1 s gr +% Polyline +n 459 234 m 484 279 l gs col-1 s gr +% Polyline + [4] 0 sd +n 435 234 m 415 279 l gs col-1 s gr [] 0 sd +% Polyline + [4] 0 sd +n 354 154 m 349 354 l gs col-1 s gr [] 0 sd +% Polyline +n 334 69 m 369 119 l gs col-1 s gr +% Polyline + [4] 0 sd +n 304 69 m 264 119 l gs col-1 s gr [] 0 sd +$F2psEnd +rs +%%EndDocument + @endspecial 1837 -29 a Ft(x)1884 -17 y Fs(1)688 1801 +y Fr(1)198 b(0)g(0)g(1)228 b(0)1510 451 y Ft(y)1551 463 +y Fs(1)1027 931 y Ft(x)1074 943 y Fs(2)790 1411 y Ft(y)831 +1423 y Fs(2)1270 1411 y Ft(y)1311 1423 y Fs(2)2758 1801 +y Fr(0)198 b(1)-762 b(1)198 b(0)-522 b(0)2140 451 y Ft(y)2181 +463 y Fs(1)2617 931 y Ft(x)2664 943 y Fs(2)2380 1411 +y Ft(y)2421 1423 y Fs(2)2860 1411 y Ft(y)2901 1423 y +Fs(2)-9 2046 y FK(Figure)34 b(2:)50 b(A)36 b(decision)f(tree)i(for)e +(\()p FC(x)1352 2061 y FB(1)1425 2046 y FI(,)e FC(y)1606 +2061 y FB(1)1645 2046 y FK(\))24 b FI(^)h FK(\()p FC(x)1891 +2061 y FB(2)1964 2046 y FI(,)33 b FC(y)2145 2061 y FB(2)2184 +2046 y FK(\).)53 b(Dashed)36 b(lines)f(denote)i(lo)m(w-branc)m(hes,)-9 +2166 y(solid)31 b(lines)g(high-branc)m(hes.)137 2535 +y(Applying)h(this)g(idea)g(of)g(sharing,)g FC(t)h FK(can)f(no)m(w)i(b)s +(e)e(written)h(as:)1505 2755 y FC(t)83 b FK(=)g FC(x)1837 +2770 y FB(1)1904 2755 y FI(!)28 b FC(t)2067 2770 y FB(1)2106 +2755 y FC(;)17 b(t)2185 2770 y FB(0)1465 2900 y FC(t)1500 +2915 y FB(0)1623 2900 y FK(=)83 b FC(y)1830 2915 y FB(1)1897 +2900 y FI(!)27 b FK(0)p FC(;)17 b(t)2152 2915 y FB(00)1465 +3045 y FC(t)1500 3060 y FB(1)1623 3045 y FK(=)83 b FC(y)1830 +3060 y FB(1)1897 3045 y FI(!)27 b FC(t)2059 3060 y FB(00)2134 +3045 y FC(;)17 b FK(0)1430 3190 y FC(t)1465 3205 y FB(00)1623 +3190 y FK(=)83 b FC(x)1837 3205 y FB(2)1904 3190 y FI(!)28 +b FC(t)2067 3205 y FB(001)2177 3190 y FC(;)17 b(t)2256 +3205 y FB(000)1395 3336 y FC(t)1430 3351 y FB(000)1623 +3336 y FK(=)83 b FC(y)1830 3351 y FB(2)1897 3336 y FI(!)27 +b FK(0)p FC(;)17 b FK(1)1395 3481 y FC(t)1430 3496 y +FB(001)1623 3481 y FK(=)83 b FC(y)1830 3496 y FB(2)1897 +3481 y FI(!)27 b FK(1)p FC(;)17 b FK(0)-9 3701 y(Eac)m(h)31 +b(sub)s(expression)i(can)e(b)s(e)g(view)m(ed)h(as)e(the)i(no)s(de)e(of) +h(a)f(graph.)43 b(Suc)m(h)32 b(a)e(no)s(de)h(is)f(either)h +FD(terminal)-9 3821 y FK(in)26 b(the)h(case)h(of)f(the)h(constan)m(ts)g +(0)f(and)g(1,)h(or)f FD(non-terminal)p FK(.)40 b(A)27 +b(non-terminal)e(no)s(de)i(has)g(a)g(lo)m(w-edge)-9 3942 +y(corresp)s(onding)i(to)g(the)g(else-part)g(and)h(a)f(high-edge)f +(corresp)s(onding)h(to)g(the)h(then-part.)43 b(See)30 +b(\014gure)-9 4062 y(3.)67 b(Notice,)42 b(that)f(the)g(n)m(um)m(b)s(er) +g(of)f(no)s(des)h(has)g(decreased)h(from)e(9)g(in)g(the)h(decision)f +(tree)h(to)f(6)h(in)-9 4182 y(the)i(BDD.)f(It)g(is)h(not)f(hard)h(to)g +(imagine)d(that)i(if)g(eac)m(h)i(of)e(the)h(terminal)e(no)s(des)i(w)m +(ere)h(other)f(big)-9 4303 y(decision)30 b(trees)j(the)e(sa)m(vings)h +(w)m(ould)f(b)s(e)h(dramatic.)41 b(Since)32 b(w)m(e)g(ha)m(v)m(e)h(c)m +(hosen)g(to)e(consisten)m(tly)h(select)-9 4423 y(v)-5 +b(ariables)31 b(in)g(the)i(same)f(order)g(in)g(the)h(recursiv)m(e)g +(calls)e(during)h(the)h(construction)f(of)g(the)h(INF)f(of)g +FC(t)p FK(,)-9 4544 y(the)h(v)-5 b(ariables)33 b(o)s(ccur)g(in)g(the)h +(same)f(orderings)g(on)g(all)f(paths)i(from)e(the)i(ro)s(ot)e(of)h(the) +h(BDD.)f(In)g(this)-9 4664 y(situation)c(the)j(binary)f(decision)g +(diagram)e(is)i(said)f(to)h(b)s(e)h FD(or)-5 b(der)g(e)g(d)30 +b FK(\(an)h FD(OBDD)p FK(\).)f(Figure)g(3)h(sho)m(ws)i(a)-9 +4784 y(BDD)e(that)i(is)f(also)f(an)i(OBDD.)137 4905 y(Figure)45 +b(4)h(sho)m(ws)h(four)f(OBDDs.)83 b(Some)46 b(of)f(the)i(tests)g +(\(e.g.,)i(on)d FC(x)2792 4920 y FB(2)2878 4905 y FK(in)f +FC(b)p FK(\))i(are)f(redundan)m(t,)-9 5025 y(since)35 +b(b)s(oth)g(the)h(lo)m(w-)e(and)h(high-branc)m(h)g(lead)g(to)g(the)g +(same)g(no)s(de.)52 b(Suc)m(h)36 b(unnecessary)i(tests)f(can)-9 +5146 y(b)s(e)k(remo)m(v)m(ed:)61 b(an)m(y)42 b(reference)h(to)e(the)g +(redundan)m(t)i(no)s(de)e(is)g(simply)e(replaced)j(b)m(y)g(a)f +(reference)h(to)p eop +%%Page: 11 12 +11 11 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) +2054 b FK(11)1377 1686 y @beginspecial 0 @llx 0 @lly +118 @urx 197 @ury 1180 @rwi @setspecial +%%BeginDocument: bdd-ex.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-152.0 234.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 3742 m 0 0 l 4314 0 l 4314 3742 l cp clip + 0.06299 0.06299 sc +7.500 slw +% Ellipse +n 4005 1500 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3195 2940 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3915 2940 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3075 1500 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3555 780 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3540 2220 180 180 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 3690 870 m 4005 1320 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3420 870 m 3075 1320 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3195 1650 m 3450 2040 l gs col-1 s gr [] 0 sd +% Polyline +n 3990 1680 m 3630 2055 l gs col-1 s gr +% Polyline +n 3690 2355 m 3915 2760 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3420 2355 m 3240 2760 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3285 3120 m 3555 3435 l gs col-1 s gr [] 0 sd +% Polyline +n 3825 3120 m 3555 3435 l gs col-1 s gr +% Polyline +n 2970 1650 m 2610 3435 l gs col-1 s gr +% Polyline +n 3090 3090 m 2610 3435 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3780 3075 m 2610 3420 l gs col-1 s gr [] 0 sd +% Polyline +n 2790 3690 m 2790 3435 l 2430 3435 l 2430 3690 l cp gs col-1 s gr +% Polyline +n 3735 3690 m 3735 3435 l 3375 3435 l 3375 3690 l cp gs col-1 s gr +% Interp Spline +gs [60] 0 sd +n 3900 1635 m + 3445.5 1885.9 3258.0 2013.4 3150 2145 curveto + 2985.2 2345.9 2850.2 2664.7 2610 3420 curveto + gs col-1 s gr + gr + [] 0 sd +$F2psEnd +rs +%%EndDocument + @endspecial 1733 1310 a Fq(y)1790 1328 y Fr(2)2111 1310 +y Fq(y)2168 1328 y Fr(2)1670 554 y Fq(y)1727 572 y Fr(1)2159 +554 y Fq(y)2216 572 y Fr(1)1910 932 y Fq(x)1977 950 y +Fr(2)1918 176 y Fq(x)1985 194 y Fr(1)1453 1646 y FL(0)1945 +1640 y(1)-9 1889 y FK(Figure)31 b(3:)44 b(A)33 b(BDD)f(for)g(\()p +FC(x)1017 1904 y FB(1)1085 1889 y FI(,)27 b FC(y)1260 +1904 y FB(1)1299 1889 y FK(\))22 b FI(^)h FK(\()p FC(x)1541 +1904 y FB(2)1609 1889 y FI(,)28 b FC(y)1785 1904 y FB(2)1824 +1889 y FK(\))k(with)h(ordering)f FC(x)2557 1904 y FB(1)2624 +1889 y FC(<)c(y)2776 1904 y FB(1)2843 1889 y FC(<)g(x)3002 +1904 y FB(2)3070 1889 y FC(<)g(y)3222 1904 y FB(2)3261 +1889 y FK(.)44 b(Lo)m(w-edges)-9 2010 y(are)32 b(dra)m(wn)h(as)g +(dotted)g(lines)f(and)h(high-edges)f(as)h(solid)e(lines.)440 +4402 y @beginspecial 0 @llx 0 @lly 343 @urx 198 @ury +3430 @rwi @setspecial +%%BeginDocument: three-obdds.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-147.0 263.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 4678 m 0 0 l 8672 0 l 8672 4678 l cp clip + 0.05669 0.05669 sc +% Polyline +7.500 slw +n 4320 3915 m 4320 3540 l 3930 3540 l 3930 3915 l cp gs col-1 s gr +% Polyline +n 3015 2880 m 3015 2480 l 2615 2480 l 2615 2880 l cp gs col-1 s gr +% Polyline +n 7718 4320 m 7718 3960 l 7358 3960 l 7358 4320 l cp gs col-1 s gr +% Polyline +n 8325 4320 m 8325 3960 l 7965 3960 l 7965 4320 l cp gs col-1 s gr +% Ellipse +n 4620 1875 240 240 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4155 2820 240 240 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 7845 2340 240 240 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 7845 3300 240 240 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 8325 1395 240 240 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 6300 1875 240 240 0 360 DrawEllipse gs col-1 s gr + +% Polyline + [60] 0 sd +n 4440 2040 m 4215 2580 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 8190 1560 m 7950 2100 l gs col-1 s gr [] 0 sd +% Polyline +n 7965 3540 m 8085 3945 l gs col-1 s gr +% Polyline + [60] 0 sd +n 7725 3540 m 7605 3945 l gs col-1 s gr [] 0 sd +% Polyline +n 5985 3915 m 5985 3540 l 5580 3540 l 5580 3915 l cp gs col-1 s gr +% Interp Spline +gs n 6420 2040 m + 6484.4 2346.4 6499.3 2480.2 6480 2580 curveto + 6427.6 2793.8 6278.3 3031.6 5880 3540 curveto + gs col-1 s gr + gr + +% Interp Spline +gs [60] 0 sd +n 6180 2100 m + 5904.9 2457.4 5800.5 2620.9 5760 2760 curveto + 5719.1 2899.3 5719.1 3092.5 5760 3540 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs n 4740 2040 m + 4812.9 2346.4 4827.9 2480.2 4800 2580 curveto + 4756.1 2793.8 4606.9 3031.6 4215 3540 curveto + gs col-1 s gr + gr + +% Interp Spline +gs n 4215 3060 m + 4252.4 3191.0 4267.4 3250.5 4260 3300 curveto + 4267.4 3340.3 4252.4 3399.7 4215 3540 curveto + gs col-1 s gr + gr + +% Interp Spline +gs [60] 0 sd +n 4095 3060 m + 4043.5 3191.0 4028.6 3250.5 4035 3300 curveto + 4028.6 3340.3 4043.5 3399.7 4095 3540 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs n 7905 2580 m + 7953.4 2715.4 7968.4 2774.8 7965 2820 curveto + 7968.4 2864.6 7953.4 2924.1 7905 3060 curveto + gs col-1 s gr + gr + +% Interp Spline +gs [60] 0 sd +n 7785 2580 m + 7744.5 2715.4 7729.6 2774.8 7725 2820 curveto + 7729.6 2864.6 7744.5 2924.1 7785 3060 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs n 8445 1575 m + 8555.6 2145.8 8585.4 2398.5 8565 2580 curveto + 8536.7 2842.9 8417.3 3184.8 8085 3945 curveto + gs col-1 s gr + gr + +$F2psEnd +rs +%%EndDocument + @endspecial 1136 4013 a FL(1)511 3524 y(1)2742 4209 +y(0)228 b(1)1913 4013 y(1)2130 3125 y Fq(x)2197 3143 +y Fr(1)3087 2898 y Fq(x)3154 2916 y Fr(1)2860 3345 y +Fq(x)2927 3363 y Fr(2)2860 3798 y Fq(x)2927 3816 y Fr(3)1337 +3125 y Fq(x)1404 3143 y Fr(1)1117 3571 y Fq(x)1184 3589 +y Fr(2)2886 4386 y Fp(d)-1013 b(c)-841 b(b)-687 b(a)-9 +4605 y FK(Figure)27 b(4:)41 b(F)-8 b(our)28 b(OBDDs:)41 +b(a\))28 b(An)h(OBDD)e(for)h(1.)42 b(b\))28 b(Another)h(OBDD)f(for)f(1) +i(with)f(t)m(w)m(o)h(redundan)m(t)-9 4726 y(tests.)56 +b(c\))36 b(Same)g(as)h FC(b)g FK(with)f(one)g(of)g(the)h(redundan)m(t)h +(tests)f(remo)m(v)m(ed.)56 b(d\))37 b(An)f(OBDD)g(for)f +FC(x)3519 4741 y FB(1)3584 4726 y FI(_)25 b FC(x)3730 +4741 y FB(3)-9 4846 y FK(with)32 b(one)h(redundan)m(t)g(test.)p +eop +%%Page: 12 13 +12 12 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) +2054 b FK(12)584 234 y @beginspecial 0 @llx 0 @lly 109 +@urx 62 @ury 1090 @rwi @setspecial +%%BeginDocument: ordering.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-47.0 95.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 1533 m 0 0 l 2511 0 l 2511 1533 l cp clip + 0.06299 0.06299 sc +7.500 slw +% Ellipse +n 1350 675 135 135 0 360 DrawEllipse gs col0 s gr + +% Ellipse +n 905 1345 135 135 0 360 DrawEllipse gs col0 s gr + +% Ellipse +n 1800 1350 135 135 0 360 DrawEllipse gs col0 s gr + +% Polyline + [60] 0 sd +n 1305 810 m 945 1215 l gs col0 s gr [] 0 sd +% Polyline +n 1395 810 m 1800 1215 l gs col0 s gr +$F2psEnd +rs +%%EndDocument + @endspecial 870 -172 a + gsave 0 0 0 setrgbcolor + 870 -172 a Ft(x)917 -172 y + grestore + 917 +-172 a 635 182 a + gsave 0 0 0 setrgbcolor + 635 182 a Ft(y)679 182 y + grestore + 679 182 a 1108 +182 a + gsave 0 0 0 setrgbcolor + 1108 182 a Ft(z)1151 182 y + grestore + 1151 182 a 1248 -77 +a + gsave 0 0 0 setrgbcolor + 1248 -77 a Ft(x)23 b(<)g(y)1450 -77 y + grestore + 1450 -77 a 1248 +9 a + gsave 0 0 0 setrgbcolor + 1248 9 a Ft(x)g(<)g(z)1449 9 y + grestore + 1449 9 a 1898 234 +a @beginspecial 0 @llx 0 @lly 81 @urx 51 @ury 810 @rwi +@setspecial +%%BeginDocument: isomorphic-node.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-76.0 78.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 1267 m 0 0 l 2527 0 l 2527 1267 l cp clip + 0.06299 0.06299 sc +7.500 slw +% Ellipse +n 1350 675 135 135 0 360 DrawEllipse gs col0 s gr + +% Ellipse +n 2250 675 135 135 0 360 DrawEllipse gs col0 s gr + +% Polyline +n 1395 810 m 2250 1215 l gs col0 s gr +% Polyline +n 2250 810 m 2250 1215 l gs col0 s gr +% Polyline + [60] 0 sd +n 2160 765 m 1350 1215 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 1350 810 m 1350 1215 l gs col0 s gr [] 0 sd +% Polyline +n 2025 450 m 2475 900 l gs col0 s gr +% Polyline +n 2025 900 m 2475 495 l gs col0 s gr +$F2psEnd +rs +%%EndDocument + @endspecial 1949 -32 a + gsave 0 0 0 setrgbcolor + 1949 -32 a Ft(x)1996 -32 y + grestore + 1996 +-32 a 2422 -32 a + gsave 0 0 0 setrgbcolor + 2422 -32 a Ft(x)2469 -32 y + grestore + 2469 -32 +a 2895 234 a @beginspecial 0 @llx 0 @lly 31 @urx 51 @ury +310 @rwi @setspecial +%%BeginDocument: redundant-test.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-126.0 78.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 1263 m 0 0 l 2527 0 l 2527 1263 l cp clip + 0.06299 0.06299 sc +% Arc +7.500 slw +gs n 2149.2 998.8 238.5 -52.3 65.0 arc +gs col0 s gr + gr + +% Arc +gs [60] 0 sd +n 2350.8 998.8 238.5 -127.7 115.0 arcn +gs col0 s gr + gr + [] 0 sd +% Ellipse +n 2250 675 135 135 0 360 DrawEllipse gs col0 s gr + +% Polyline +n 2025 450 m 2475 900 l gs col0 s gr +% Polyline +n 2025 900 m 2475 495 l gs col0 s gr +$F2psEnd +rs +%%EndDocument + @endspecial 2996 -30 a + gsave 0 0 0 setrgbcolor + 2996 -30 a Ft(x)3043 -30 y + grestore + 3043 +-30 a -9 437 a FK(Figure)39 b(5:)58 b(The)42 b(ordering)d(and)i +(reducedness)i(conditions)c(of)h(R)m(OBDDs.)66 b(Left:)59 +b(V)-8 b(ariables)39 b(m)m(ust)-9 558 y(b)s(e)c FD(or)-5 +b(der)g(e)g(d)p FK(.)51 b(Middle:)e(No)s(des)36 b(m)m(ust)f(b)s(e)h +FD(unique)p FK(.)51 b(Righ)m(t:)d(Only)35 b FD(non-r)-5 +b(e)g(dundant)37 b(tests)44 b FK(should)35 b(b)s(e)-9 +678 y(presen)m(t.)-9 1071 y(its)e(subno)s(de.)50 b(If)34 +b(all)e(iden)m(tical)g(no)s(des)j(are)f(shared)h(and)g(all)d(redundan)m +(t)j(tests)g(are)g(eliminated,)d(the)-9 1191 y(OBDD)24 +b(is)h(said)f(to)h(b)s(e)h FD(r)-5 b(e)g(duc)g(e)g(d)25 +b FK(\(an)g FD(R)n(OBDD)p FK(\).)e(R)m(OBDDs)i(ha)m(v)m(e)i(some)e(v)m +(ery)i(con)m(v)m(enien)m(t)g(prop)s(erties)-9 1312 y(cen)m(tered)e +(around)e(the)g FD(c)-5 b(anonicity)26 b(lemma)j FK(b)s(elo)m(w.)40 +b(\(Often)23 b(when)h(p)s(eople)f(sp)s(eak)h(ab)s(out)f(BDDs)f(they)-9 +1432 y(really)31 b(mean)h FD(R)n(O)p FK(BDDs.\))42 b(T)-8 +b(o)33 b(summarize:)p 215 1552 3397 4 v 215 3955 4 2404 +v 276 1651 a(A)f FD(Binary)j(De)-5 b(cision)33 b(Diagr)-5 +b(am)34 b(\(BDD\))g FK(is)e(a)h(ro)s(oted,)f(directed)h(acyclic)f +(graph)g(with)421 1855 y FI(\017)48 b FK(one)33 b(or)f(t)m(w)m(o)i +(terminal)c(no)s(des)j(of)f(out-degree)h(zero)g(lab)s(eled)e(0)i(or)f +(1,)g(and)421 1975 y FI(\017)48 b FK(a)30 b(set)h(of)e(v)-5 +b(ariable)29 b(no)s(des)h FC(u)g FK(of)f(out-degree)i(t)m(w)m(o.)43 +b(The)31 b(t)m(w)m(o)g(outgoing)d(edges)519 2095 y(are)37 +b(giv)m(en)g(b)m(y)g(t)m(w)m(o)h(functions)e FD(low)11 +b FK(\()p FC(u)p FK(\))36 b(and)g FD(high)7 b FK(\()p +FC(u)p FK(\).)55 b(\(In)37 b(pictures,)h(these)519 2216 +y(are)29 b(sho)m(wn)h(as)f(dotted)g(and)g(solid)e(lines,)i(resp)s +(ectiv)m(ely)-8 b(.\))43 b(A)29 b(v)-5 b(ariable)27 b +FD(var)10 b FK(\()p FC(u)p FK(\))519 2336 y(is)33 b(asso)s(ciated)f +(with)g(eac)m(h)i(v)-5 b(ariable)30 b(no)s(de.)276 2540 +y(A)40 b(BDD)f(is)g FD(Or)-5 b(der)g(e)g(d)50 b FK(\(OBDD\))39 +b(if)g(on)h(all)d(paths)k(through)f(the)h(graph)e(the)i(v)-5 +b(ariables)276 2660 y(resp)s(ect)45 b(a)e(giv)m(en)i(linear)d(order)i +FC(x)1583 2675 y FB(1)1670 2660 y FC(<)j(x)1848 2675 +y FB(2)1935 2660 y FC(<)g FI(\001)17 b(\001)g(\001)45 +b FC(<)i(x)2399 2675 y FA(n)2446 2660 y FK(.)78 b(An)44 +b(\(O\)BDD)f(is)g FD(R)-5 b(e)g(duc)g(e)g(d)276 2780 +y FK(\(R\(O\)BDD\))31 b(if)421 2984 y FI(\017)48 b FK(\()p +FF(uniqueness)p FK(\))29 b(no)f(t)m(w)m(o)h(distinct)f(no)s(des)h +FC(u)e FK(and)h FC(v)k FK(ha)m(v)m(e)e(the)e(same)g(v)-5 +b(ariable)519 3104 y(name)33 b(and)f(lo)m(w-)g(and)h(high-successor,)g +(i.e.,)533 3324 y FD(var)11 b FK(\()p FC(u)p FK(\))27 +b(=)g FD(var)11 b FK(\()p FC(v)t FK(\))p FC(;)17 b FD(low)9 +b FK(\()p FC(u)p FK(\))27 b(=)h FD(low)10 b FK(\()p FC(v)t +FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)p FK(\))27 +b(=)h FD(high)7 b FK(\()p FC(v)t FK(\))32 b(implies)e +FC(u)d FK(=)h FC(v)t(;)519 3544 y FK(and)421 3665 y FI(\017)48 +b FK(\()p FF(non-redundan)m(t)42 b(tests)p FK(\))34 b(no)g(v)-5 +b(ariable)33 b(no)s(de)h FC(u)g FK(has)h(iden)m(tical)e(lo)m(w-)g(and) +519 3785 y(high-successor,)h(i.e.,)1569 3905 y FD(low)10 +b FK(\()p FC(u)p FK(\))27 b FI(6)p FK(=)g FD(high)7 b +FK(\()p FC(u)p FK(\))17 b FC(:)p 3608 3955 V 215 3958 +3397 4 v -9 4119 a FK(The)33 b(ordering)f(and)h(reducedness)i +(conditions)d(are)g(sho)m(wn)i(in)e(\014gure)h(5.)137 +4239 y(R)m(OBDDs)g(ha)m(v)m(e)i(some)e(in)m(teresting)g(prop)s(erties.) +46 b(They)35 b(pro)m(vide)f(compact)f(represen)m(tations)h(of)-9 +4360 y(Bo)s(olean)d(expressions,)j(and)f(there)h(are)e(e\016cien)m(t)i +(algorithms)c(for)i(p)s(erforming)e(all)h(kinds)i(of)f(logical)-9 +4480 y(op)s(erations)42 b(on)h(R)m(OBDDs.)75 b(They)45 +b(are)e(all)e(based)k(on)e(the)h(crucial)e(fact)h(that)g(for)g(an)m(y)h +(function)-9 4601 y FC(f)c FK(:)29 b Fz(B)202 4558 y +FA(n)278 4601 y FI(!)h Fz(B)55 b FK(there)34 b(is)f FD(exactly)j(one)f +(R)n(OBDD)f(r)-5 b(epr)g(esenting)35 b(it)p FK(.)47 b(This)34 +b(means,)g(in)f(particular,)f(that)-9 4721 y(there)38 +b(is)f FD(exactly)i(one)45 b FK(R)m(OBDD)36 b(for)h(the)h(constan)m(t)h +(true)f(\(and)g(constan)m(t)g(false\))f(function)g(on)h +Fz(B)3696 4679 y FA(n)3743 4721 y FK(:)-9 4841 y(the)32 +b(terminal)e(no)s(de)i(1)f(\(and)h(0)g(in)f(case)i(of)f(false\).)43 +b(Hence,)33 b(it)e(is)h(p)s(ossible)f(to)g FD(test)k(in)f(c)-5 +b(onstant)34 b(time)-9 4962 y(whether)f(an)h(R)n(OBDD)f(is)h(c)-5 +b(onstantly)34 b(true)h(or)g(false)p FK(.)42 b(\(Recall)30 +b(that)i(for)g(Bo)s(olean)f(expressions)i(this)-9 5082 +y(problem)e(is)h(NP-complete.\))p eop +%%Page: 13 14 +13 13 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) +2054 b FK(13)137 -171 y(T)-8 b(o)22 b(mak)m(e)g(this)g(claim)d(more)j +(precise)h(w)m(e)g(m)m(ust)f(sa)m(y)h(what)f(w)m(e)h(mean)f(for)f(an)h +(R)m(OBDD)f(to)h(represen)m(t)-9 -51 y(a)27 b(function.)41 +b(First,)27 b(it)g(is)f(quite)i(easy)g(to)f(see)i(ho)m(w)e(the)h(no)s +(des)g FC(u)f FK(of)g(an)g(R)m(OBDD)f(inductiv)m(ely)h(de\014nes)-9 +70 y(Bo)s(olean)40 b(expressions)k FC(t)928 34 y FA(u)973 +70 y FK(:)62 b(A)42 b(terminal)d(no)s(de)j(is)g(a)f(Bo)s(olean)g +(constan)m(t.)72 b(A)42 b(non-terminal)d(no)s(de)-9 190 +y(mark)m(ed)29 b(with)f FC(x)i FK(is)e(an)h(if-then-else)f(expression)i +(where)g(the)f(condition)f(is)g FC(x)h FK(and)g(the)h(t)m(w)m(o)f +(branc)m(hes)-9 310 y(are)j(the)h(Bo)s(olean)e(expressions)k(giv)m(en)d +(b)m(y)i(the)f(lo)m(w-)f(or)g(high-son,)g(resp)s(ectiv)m(ely:)683 +522 y FC(t)718 486 y FB(0)841 522 y FK(=)83 b(0)683 642 +y FC(t)718 606 y FB(1)841 642 y FK(=)g(1)678 765 y FC(t)713 +728 y FA(u)841 765 y FK(=)g FD(var)10 b FK(\()p FC(u)p +FK(\))27 b FI(!)h FC(t)1468 728 y Fo(high)6 b FB(\()p +FA(u)p FB(\))1701 765 y FC(;)17 b(t)1780 728 y Fo(low)8 +b FB(\()p FA(u)p FB(\))1989 765 y FC(;)114 b FK(if)31 +b FC(u)h FK(is)h(a)f(v)-5 b(ariable)31 b(no)s(de.)-9 +978 y(Moreo)m(v)m(er,)43 b(if)c FC(x)607 993 y FB(1)687 +978 y FC(<)i(x)859 993 y FB(2)939 978 y FC(<)f FI(\001)17 +b(\001)g(\001)39 b FC(<)h(x)1383 993 y FA(n)1470 978 +y FK(is)g(the)g(v)-5 b(ariable)39 b(ordering)g(of)h(the)g(R)m(OBDD,)f +(w)m(e)i(asso)s(ciate)-9 1098 y(with)e(eac)m(h)i(no)s(de)g +FC(u)e FK(the)i(function)f FC(f)1411 1062 y FA(u)1496 +1098 y FK(that)g(maps)g(\()p FC(b)2057 1113 y FB(1)2096 +1098 y FC(;)17 b(b)2181 1113 y FB(2)2221 1098 y FC(;)g(:)g(:)g(:)f(;)h +(b)2481 1113 y FA(n)2528 1098 y FK(\))40 b FI(2)i Fz(B)2780 +1056 y FA(n)2867 1098 y FK(to)e(the)h(truth)f(v)-5 b(alue)39 +b(of)-9 1219 y FC(t)26 1182 y FA(u)71 1219 y FK([)p FC(b)139 +1234 y FB(1)179 1219 y FC(=x)283 1234 y FB(1)322 1219 +y FC(;)17 b(b)407 1234 y FB(2)447 1219 y FC(=x)551 1234 +y FB(2)591 1219 y FC(;)g(:)g(:)g(:)f(;)h(b)851 1234 y +FA(n)898 1219 y FC(=x)1002 1234 y FA(n)1049 1219 y FK(].)43 +b(W)-8 b(e)33 b(can)g(no)m(w)g(state)g(the)g(k)m(ey)i(lemma:)-9 +1422 y FF(Lemma)i(1)g(\(Canonicit)m(y)f(lemma\))-9 1542 +y FD(F)-7 b(or)35 b(any)g(function)h FC(f)i FK(:)28 b +Fz(B)954 1500 y FA(n)1028 1542 y FI(!)f Fz(B)58 b FD(ther)-5 +b(e)36 b(is)f(exactly)h(one)g(R)n(OBDD)e FC(u)h FD(with)h(variable)f +(or)-5 b(dering)35 b FC(x)3625 1557 y FB(1)3694 1542 +y FC(<)-9 1663 y(x)46 1678 y FB(2)113 1663 y FC(<)28 +b FI(\001)17 b(\001)g(\001)26 b FC(<)h(x)519 1678 y FA(n)601 +1663 y FD(such)35 b(that)g FC(f)1081 1627 y FA(u)1154 +1663 y FK(=)27 b FC(f)11 b FK(\()p FC(x)1409 1678 y FB(1)1449 +1663 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1723 1678 y FA(n)1770 +1663 y FK(\))p FD(.)-9 1866 y FF(Pro)s(of:)58 b FK(The)41 +b(pro)s(of)f(is)f(b)m(y)j(induction)d(on)h(the)h(n)m(um)m(b)s(er)f(of)g +(argumen)m(ts)g(of)g FC(f)11 b FK(.)66 b(F)-8 b(or)40 +b FC(n)h FK(=)f(0)g(there)-9 1986 y(are)34 b(only)h(t)m(w)m(o)g(Bo)s +(olean)f(functions,)i(the)f(constan)m(tly)g(false)g(and)g(constan)m +(tly)g(true)g(functions.)51 b(An)m(y)-9 2107 y(R)m(OBDD)36 +b(con)m(taining)g(at)i(least)f(one)h(non-terminal)d(no)s(de)j(is)f +(non-constan)m(t.)59 b(\(Wh)m(y?\))h(Therefore)-9 2227 +y(there)33 b(is)f(exactly)h(one)g(R)m(OBDD)e(for)h(eac)m(h)i(of)e +(these:)45 b(the)33 b(terminals)d(0)j(and)f(1.)137 2348 +y(Assume)42 b(no)m(w)f(that)g(w)m(e)h(ha)m(v)m(e)g(pro)m(v)m(en)h(the)e +(lemma)e(for)h(all)f(functions)i(of)g FC(n)g FK(argumen)m(ts.)69 +b(W)-8 b(e)-9 2468 y(pro)s(ceed)29 b(to)g(sho)m(w)h(it)e(for)h(all)e +(functions)i(of)g FC(n)15 b FK(+)g(1)28 b(argumen)m(ts.)43 +b(Let)29 b FC(f)39 b FK(:)27 b Fz(B)2730 2426 y FA(n)p +FB(+1)2895 2468 y FI(!)g Fz(B)50 b FK(b)s(e)30 b(an)m(y)f(Bo)s(olean)-9 +2588 y(function)h(of)g FC(n)18 b FK(+)f(1)31 b(argumen)m(ts.)43 +b(De\014ne)31 b(the)g(t)m(w)m(o)g(functions)f FC(f)2355 +2603 y FB(0)2425 2588 y FK(and)h FC(f)2661 2603 y FB(1)2731 +2588 y FK(of)f FC(n)g FK(argumen)m(ts)h(b)m(y)g(\014xing)-9 +2709 y(the)i(\014rst)g(argumen)m(t)f(of)g FC(f)43 b FK(to)32 +b(0)h(resp)s(ectiv)m(ely)g(1:)901 2929 y FC(f)949 2944 +y FA(b)983 2929 y FK(\()p FC(x)1076 2944 y FB(2)1116 +2929 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1390 2944 y FA(n)p +FB(+1)1527 2929 y FK(\))27 b(=)h FC(f)11 b FK(\()p FC(b;)17 +b(x)1933 2944 y FB(2)1973 2929 y FC(;)g(:)g(:)g(:)f(;)h(x)2247 +2944 y FA(n)p FB(+1)2384 2929 y FK(\))32 b(for)g FC(b)c +FI(2)h Fz(B)21 b FK(.)-9 3149 y(\(Sometimes)31 b FC(f)565 +3164 y FB(0)636 3149 y FK(and)i FC(f)874 3164 y FB(1)946 +3149 y FK(are)f(called)f(the)i FD(ne)-5 b(gative)39 b +FK(and)32 b FD(p)-5 b(ositive)34 b(c)-5 b(o-factors)40 +b FK(of)32 b FC(f)43 b FK(with)32 b(resp)s(ect)h(to)-9 +3269 y FC(x)46 3284 y FB(1)85 3269 y FK(.\))44 b(These)34 +b(functions)f(satisfy)f(the)h(follo)m(wing)d(equation:)759 +3489 y FC(f)11 b FK(\()p FC(x)911 3504 y FB(1)951 3489 +y FC(;)17 b(:)g(:)g(:)f(;)h(x)1225 3504 y FA(n)1272 3489 +y FK(\))60 b(=)g FC(x)1561 3504 y FB(1)1628 3489 y FI(!)28 +b FC(f)1804 3504 y FB(1)1843 3489 y FK(\()p FC(x)1936 +3504 y FB(2)1976 3489 y FC(;)17 b(:)g(:)g(:)f(;)h(x)2250 +3504 y FA(n)2297 3489 y FK(\))p FC(;)g(f)2427 3504 y +FB(0)2466 3489 y FK(\()p FC(x)2559 3504 y FB(2)2599 3489 +y FC(;)g(:)g(:)g(:)f(;)h(x)2873 3504 y FA(n)2920 3489 +y FK(\))g FC(:)643 b FK(\(3\))-9 3709 y(Since)42 b FC(f)303 +3724 y FB(0)385 3709 y FK(and)g FC(f)632 3724 y FB(1)714 +3709 y FK(tak)m(e)h(only)f FC(n)h FK(argumen)m(ts)f(w)m(e)i(assume)e(b) +m(y)i(induction)d(that)h(there)h(are)g(unique)-9 3830 +y(R)m(OBDD)31 b(no)s(des)i FC(u)716 3845 y FB(0)788 3830 +y FK(and)f FC(u)1033 3845 y FB(1)1105 3830 y FK(with)g +FC(f)1386 3793 y FA(u)1427 3802 y Fx(0)1493 3830 y FK(=)c +FC(f)1645 3845 y FB(0)1717 3830 y FK(and)k FC(f)1965 +3793 y FA(u)2006 3802 y Fx(1)2072 3830 y FK(=)c FC(f)2224 +3845 y FB(1)2263 3830 y FK(.)137 3950 y(There)j(are)f(t)m(w)m(o)g +(cases)h(to)e(consider.)43 b(If)30 b FC(u)1683 3965 y +FB(0)1749 3950 y FK(=)e FC(u)1909 3965 y FB(1)1978 3950 +y FK(then)i FC(f)2256 3914 y FA(u)2297 3923 y Fx(0)2363 +3950 y FK(=)d FC(f)2525 3914 y FA(u)2566 3923 y Fx(1)2634 +3950 y FK(and)j FC(f)2869 3965 y FB(0)2936 3950 y FK(=)e +FC(f)3099 3914 y FA(u)3140 3923 y Fx(0)3206 3950 y FK(=)f +FC(f)3368 3914 y FA(u)3409 3923 y Fx(1)3475 3950 y FK(=)h +FC(f)3627 3965 y FB(1)3694 3950 y FK(=)-9 4070 y FC(f)11 +b FK(.)63 b(Hence)41 b FC(u)493 4085 y FB(0)571 4070 +y FK(=)e FC(u)742 4085 y FB(1)820 4070 y FK(is)g(an)g(R)m(OBDD)g(for)g +FC(f)11 b FK(.)63 b(It)39 b(is)g(also)g(the)h(only)e(R)m(OBDD)h(for)g +FC(f)50 b FK(since)39 b(due)h(to)-9 4191 y(the)35 b(ordering,)g(if)e +FC(x)722 4206 y FB(1)797 4191 y FK(is)i(at)f(all)f(presen)m(t)k(in)d +(the)h(R)m(OBDD)f(ro)s(oted)h(at)f FC(u)p FK(,)h FC(x)2786 +4206 y FB(1)2861 4191 y FK(w)m(ould)g(need)h(to)e(b)s(e)i(the)-9 +4311 y(ro)s(ot)c(no)s(de.)47 b(Ho)m(w)m(ev)m(er,)37 b(if)32 +b FC(f)40 b FK(=)30 b FC(f)1242 4275 y FA(u)1320 4311 +y FK(then)35 b FC(f)1592 4326 y FB(0)1661 4311 y FK(=)29 +b FC(f)1825 4275 y FA(u)1870 4311 y FK([0)p FC(=x)2050 +4326 y FB(1)2089 4311 y FK(])h(=)f FC(f)2310 4275 y Fo(low)8 +b FB(\()p FA(u)p FB(\))2553 4311 y FK(and)34 b FC(f)2792 +4326 y FB(1)2861 4311 y FK(=)29 b FC(f)3025 4275 y FA(u)3070 +4311 y FK([1)p FC(=x)3250 4326 y FB(1)3289 4311 y FK(])h(=)f +FC(f)3510 4275 y Fo(high)6 b FB(\()p FA(u)p FB(\))3743 +4311 y FK(.)-9 4431 y(Since)31 b FC(f)292 4446 y FB(0)360 +4431 y FK(=)c FC(f)522 4395 y FA(u)563 4404 y Fx(0)629 +4431 y FK(=)h FC(f)792 4395 y FA(u)833 4404 y Fx(1)899 +4431 y FK(=)f FC(f)1050 4446 y FB(1)1121 4431 y FK(b)m(y)33 +b(assumption,)e(the)h(lo)m(w-)f(and)h(high-son)e(of)i +FC(u)f FK(w)m(ould)g(b)s(e)h(the)g(same,)-9 4552 y(making)f(the)i(R)m +(OBDD)e(violate)g(the)i(reducedness)j(condition)31 b(of)h(non-redundan) +m(t)i(tests.)137 4672 y(If)g FC(u)292 4687 y FB(0)362 +4672 y FI(6)p FK(=)d FC(u)525 4687 y FB(1)599 4672 y +FK(then)k FC(f)882 4636 y FA(u)923 4645 y Fx(0)993 4672 +y FI(6)p FK(=)c FC(f)1159 4636 y FA(u)1200 4645 y Fx(1)1272 +4672 y FK(b)m(y)36 b(the)f(induction)f(h)m(yp)s(othesis)h(\(using)f +(the)h(names)g FC(x)3319 4687 y FB(2)3359 4672 y FC(;)17 +b(:)g(:)g(:)f(;)h(x)3633 4687 y FA(n)p FB(+1)-9 4793 +y FK(in)38 b(place)g(of)h FC(x)539 4808 y FB(1)579 4793 +y FC(;)17 b(:)g(:)g(:)e(;)i(x)852 4808 y FA(n)900 4793 +y FK(\).)62 b(W)-8 b(e)39 b(tak)m(e)h FC(u)e FK(to)h(b)s(e)g(the)g(no)s +(de)g(with)g FD(var)10 b FK(\()p FC(u)p FK(\))38 b(=)h +FC(x)2909 4808 y FB(1)2948 4793 y FK(,)i FD(low)10 b +FK(\()p FC(u)p FK(\))38 b(=)g FC(u)3506 4808 y FB(0)3545 +4793 y FK(,)j(and)-9 4913 y FD(high)6 b FK(\()p FC(u)p +FK(\))52 b(=)h FC(u)541 4928 y FB(1)580 4913 y FK(,)e(i.e.,)g +FC(f)920 4877 y FA(u)1017 4913 y FK(=)i FC(x)1201 4928 +y FB(1)1293 4913 y FI(!)f FC(f)1504 4877 y FA(u)1545 +4886 y Fx(1)1584 4913 y FC(;)17 b(f)1687 4877 y FA(u)1728 +4886 y Fx(0)1813 4913 y FK(whic)m(h)48 b(is)e(reduced.)90 +b(By)47 b(assumption)g FC(f)3422 4877 y FA(u)3463 4886 +y Fx(1)3554 4913 y FK(=)53 b FC(f)3731 4928 y FB(1)-9 +5033 y FK(and)42 b FC(f)249 4997 y FA(u)290 5006 y Fx(0)374 +5033 y FK(=)i FC(f)542 5048 y FB(0)624 5033 y FK(therefore)g(using)e +(\(3\))g(w)m(e)i(get)f FC(f)1862 4997 y FA(u)1951 5033 +y FK(=)i FC(f)11 b FK(.)74 b(Supp)s(ose)43 b(that)g FC(v)j +FK(is)c(some)h(other)g(no)s(de)-9 5154 y(with)d FC(f)280 +5118 y FA(v)361 5154 y FK(=)h FC(f)11 b FK(.)67 b(Clearly)-8 +b(,)41 b FC(f)1057 5118 y FA(v)1138 5154 y FK(m)m(ust)g(dep)s(end)h(on) +e FC(x)1933 5169 y FB(1)1973 5154 y FK(,)i(i.e.,)g FC(f)2295 +5118 y FA(v)2336 5154 y FK([0)p FC(=x)2516 5169 y FB(1)2555 +5154 y FK(])g FI(6)p FK(=)e FC(f)2799 5118 y FA(v)2840 +5154 y FK([1)p FC(=x)3020 5169 y FB(1)3060 5154 y FK(])g(\(otherwise)h +(also)p eop +%%Page: 14 15 +14 14 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) +2054 b FK(14)-9 -171 y FC(f)39 -156 y FB(0)119 -171 y +FK(=)40 b FC(f)294 -207 y FA(v)335 -171 y FK([0)p FC(=x)515 +-156 y FB(1)554 -171 y FK(])h(=)g FC(f)798 -207 y FA(v)838 +-171 y FK([1)p FC(=x)1018 -156 y FB(1)1058 -171 y FK(])g(=)f +FC(f)1290 -156 y FB(1)1330 -171 y FK(,)i(a)e(con)m(tradiction\).)65 +b(Due)40 b(to)g(the)h(ordering)e(this)h(means)g(that)-9 +-51 y FD(var)10 b FK(\()p FC(v)t FK(\))41 b(=)h FC(x)478 +-36 y FB(1)559 -51 y FK(=)f FD(var)11 b FK(\()p FC(u)p +FK(\).)67 b(Moreo)m(v)m(er,)45 b(from)39 b FC(f)1812 +-87 y FA(v)1894 -51 y FK(=)j FC(f)51 b FK(it)40 b(follo)m(ws)f(that)i +FC(f)2824 -87 y Fo(low)8 b FB(\()p FA(v)r FB(\))3070 +-51 y FK(=)41 b FC(f)3235 -36 y FB(0)3316 -51 y FK(=)h +FC(f)3493 -87 y FA(u)3534 -78 y Fx(0)3613 -51 y FK(and)-9 +70 y FC(f)50 34 y Fo(high)5 b FB(\()p FA(v)r FB(\))306 +70 y FK(=)27 b FC(f)457 85 y FB(1)524 70 y FK(=)h FC(f)687 +34 y FA(u)728 43 y Fx(1)766 70 y FK(,)k(whic)m(h)g(b)m(y)g(the)f +(induction)f(h)m(yp)s(othesis)j(implies)28 b(that)j FD(low)10 +b FK(\()p FC(v)t FK(\))28 b(=)f FC(u)3318 85 y FB(0)3385 +70 y FK(=)g FD(low)11 b FK(\()p FC(u)p FK(\))-9 190 y(and)30 +b FD(high)7 b FK(\()p FC(v)t FK(\))27 b(=)h FC(u)674 +205 y FB(1)740 190 y FK(=)g FD(high)7 b FK(\()p FC(u)p +FK(\).)42 b(F)-8 b(rom)29 b(the)i(reducedness)j(prop)s(ert)m(y)d(of)f +(uniqueness)i(it)e(follo)m(ws)f(that)-9 310 y FC(u)e +FK(=)g FC(v)t FK(.)43 b Fu(\003)-9 450 y FK(An)c(immediate)d +(consequence)42 b(is)c(the)i(follo)m(wing.)59 b(Since)39 +b(the)h(terminal)c(1)j(is)f(an)h(R)m(OBDD)f(for)g(all)-9 +571 y(v)-5 b(ariable)38 b(orderings)j(it)f(is)g(the)h(only)f(R)m(OBDD)g +(that)g(is)h(constan)m(tly)g(true.)68 b(So)41 b(in)f(order)g(to)h(c)m +(hec)m(k)-9 691 y(whether)g(an)f(R)m(OBDD)f(is)g(constan)m(tly)i(true)f +(it)f(su\016ces)j(to)d(c)m(hec)m(k)k(whether)e(it)e(is)g(the)i +(terminal)c(1)-9 812 y(whic)m(h)42 b(is)g(de\014nitely)f(a)h(constan)m +(t)h(time)e(op)s(eration.)70 b(Similarly)-8 b(,)40 b(R)m(OBDDs)i(that)g +(are)g(constan)m(tly)-9 932 y(false)h(m)m(ust)g(b)s(e)h(iden)m(tical)e +(to)h(the)h(terminal)d(0.)77 b(In)43 b(fact,)k(to)c(determine)g +(whether)i(t)m(w)m(o)f(Bo)s(olean)-9 1052 y(functions)38 +b(are)f(the)i(same,)g(it)e(su\016ces)j(to)e(construct)h(their)e(R)m +(OBDDs)h(\(in)f(the)h(same)g(graph\))g(and)-9 1173 y(c)m(hec)m(k)c +(whether)g(the)f(resulting)f(no)s(des)h(are)g(the)g(same!)137 +1293 y(The)c(ordering)e(of)h(v)-5 b(ariables)27 b(c)m(hosen)j(when)f +(constructing)g(an)f(R)m(OBDD)f(has)h(a)g(great)g(impact)f(on)-9 +1413 y(the)37 b(size)f(of)g(the)h(R)m(OBDD.)f(If)g(w)m(e)i(consider)f +(again)e(the)i(expression)h(\()p FC(x)2701 1428 y FB(1)2775 +1413 y FI(,)c FC(y)2957 1428 y FB(1)2996 1413 y FK(\))25 +b FI(^)g FK(\()p FC(x)3243 1428 y FB(2)3317 1413 y FI(,)34 +b FC(y)3499 1428 y FB(2)3538 1413 y FK(\))j(and)-9 1534 +y(construct)j(an)f(R)m(OBDD)f(using)h(the)g(ordering)g +FC(x)1853 1549 y FB(1)1931 1534 y FC(<)g(x)2101 1549 +y FB(2)2180 1534 y FC(<)f(y)2342 1549 y FB(1)2420 1534 +y FC(<)h(y)2583 1549 y FB(2)2661 1534 y FK(the)h(R)m(OBDD)e(consists)i +(of)e(9)-9 1654 y(no)s(des)33 b(\(\014gure)g(6\))f(and)h(not)f(6)g(no)s +(des)i(as)e(for)g(the)h(ordering)f FC(x)2288 1669 y FB(1)2356 +1654 y FC(<)27 b(y)2507 1669 y FB(1)2574 1654 y FC(<)g(x)2732 +1669 y FB(2)2800 1654 y FC(<)h(y)2952 1669 y FB(2)3023 +1654 y FK(\(\014gure)33 b(3\).)855 4139 y @beginspecial +0 @llx 0 @lly 243 @urx 273 @ury 2430 @rwi @setspecial +%%BeginDocument: degen-robdd.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-90.0 299.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 6802 m 0 0 l 7586 0 l 7586 6802 l cp clip + 0.04409 0.04409 sc +% Polyline +7.500 slw +n 5625 6750 m 5625 6300 l 5175 6300 l 5175 6750 l cp gs col-1 s gr +% Ellipse +n 6300 4500 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3300 4500 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 2400 3300 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3525 2100 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4200 3300 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 5400 3300 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 7200 3300 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 6075 2100 300 300 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4800 900 300 300 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 5025 1050 m 5925 1800 l gs col-1 s gr +% Polyline + [60] 0 sd +n 4575 1050 m 3675 1800 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 5925 2400 m 4275 3000 l gs col-1 s gr [] 0 sd +% Polyline +n 6150 2400 m 7200 3000 l gs col-1 s gr +% Polyline +n 7050 3600 m 6450 4200 l gs col-1 s gr +% Polyline +n 4050 3600 m 3375 4200 l gs col-1 s gr +% Polyline + [60] 0 sd +n 2550 3525 m 3225 4200 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 5550 3525 m 6225 4200 l gs col-1 s gr [] 0 sd +% Polyline +n 5325 3600 m 5325 6300 l gs col-1 s gr +% Polyline +n 3675 2400 m 5325 3000 l gs col-1 s gr +% Polyline +n 6225 4800 m 4275 6300 l gs col-1 s gr +% Polyline + [60] 0 sd +n 6375 4800 m 5325 6225 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3300 2325 m 2550 3075 l gs col-1 s gr [] 0 sd +% Polyline +n 3375 4800 m 5325 6300 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3225 4800 m 4275 6300 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4275 3600 m 5325 6225 l gs col-1 s gr [] 0 sd +% Polyline +n 4425 6750 m 4425 6300 l 3915 6300 l 3915 6750 l cp gs col-1 s gr +% Interp Spline +gs n 2325 3600 m + 2397.1 4473.3 2490.8 4848.3 2700 5100 curveto + 3090.5 5569.8 3746.8 5869.8 5325 6300 curveto + gs col-1 s gr + gr + +% Interp Spline +gs [60] 0 sd +n 7275 3600 m + 7158.8 4474.3 7065.1 4849.3 6900 5100 curveto + 6688.6 5421.0 6294.9 5721.0 5325 6300 curveto + gs col-1 s gr + gr + [] 0 sd +$F2psEnd +rs +%%EndDocument + @endspecial 2060 4093 a(0)-506 b FL(1)1262 3335 y Fq(y)1319 +3353 y Fr(2)2364 3335 y Fq(y)2421 3353 y Fr(2)931 2894 +y Fq(y)988 2912 y Fr(1)1592 2894 y Fq(y)1649 2912 y Fr(1)2033 +2894 y Fq(y)2090 2912 y Fr(1)2695 2894 y Fq(y)2752 2912 +y Fr(1)2277 2453 y Fq(x)2344 2471 y Fr(2)1340 2453 y +Fq(x)1407 2471 y Fr(2)1808 2012 y Fq(x)1875 2030 y Fr(1)-9 +4342 y FK(Figure)22 b(6:)38 b(The)24 b(R)m(OBDD)e(for)h(\()p +FC(x)1213 4357 y FB(1)1281 4342 y FI(,)k FC(y)1456 4357 +y FB(1)1495 4342 y FK(\))s FI(^)s FK(\()p FC(x)1698 4357 +y FB(2)1766 4342 y FI(,)g FC(y)1941 4357 y FB(2)1980 +4342 y FK(\))c(with)g(v)-5 b(ariable)21 b(ordering)i +FC(x)3041 4357 y FB(1)3108 4342 y FC(<)28 b(x)3267 4357 +y FB(2)3334 4342 y FC(<)g(y)3486 4357 y FB(1)3552 4342 +y FC(<)g(y)3704 4357 y FB(2)3743 4342 y FK(.)-9 4724 +y FF(Exercise)36 b(3.1)49 b FK(Sho)m(w)37 b(ho)m(w)h(to)e(express)j +(all)34 b(op)s(erators)j(from)e(the)i(if-then-else)f(op)s(erator)g(and) +h(the)-9 4844 y(constan)m(ts)c(0)g(and)f(1.)-9 5042 y +FF(Exercise)k(3.2)49 b FK(Dra)m(w)34 b(the)g(R)m(OBDDs)g(for)f(\()p +FC(x)1737 5057 y FB(1)1807 5042 y FI(,)d FC(y)1985 5057 +y FB(1)2024 5042 y FK(\))23 b FI(^)g FK(\()p FC(x)2267 +5057 y FB(2)2337 5042 y FI(,)30 b FC(y)2515 5057 y FB(2)2554 +5042 y FK(\))23 b FI(^)g FK(\()p FC(x)2797 5057 y FB(3)2867 +5042 y FI(,)30 b FC(y)3045 5057 y FB(3)3084 5042 y FK(\))k(with)f +(orderings)-9 5162 y FC(x)46 5177 y FB(1)113 5162 y FC(<)28 +b(x)272 5177 y FB(2)339 5162 y FC(<)g(x)498 5177 y FB(3)565 +5162 y FC(<)g(y)717 5177 y FB(1)783 5162 y FC(<)g(y)935 +5177 y FB(2)1002 5162 y FC(<)f(y)1153 5177 y FB(3)1225 +5162 y FK(and)32 b FC(x)1469 5177 y FB(1)1537 5162 y +FC(<)c(y)1689 5177 y FB(1)1755 5162 y FC(<)g(x)1914 5177 +y FB(2)1981 5162 y FC(<)g(y)2133 5177 y FB(2)2200 5162 +y FC(<)f(x)2358 5177 y FB(3)2426 5162 y FC(<)g(y)2577 +5177 y FB(3)2616 5162 y FK(.)p eop +%%Page: 15 16 +15 15 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(15)-9 -171 y FF(Exercise)36 +b(3.3)49 b FK(Dra)m(w)37 b(the)g(R)m(OBDDs)g(for)g(\()p +FC(x)1750 -156 y FB(1)1825 -171 y FI(,)e FC(y)2008 -156 +y FB(1)2047 -171 y FK(\))25 b FI(_)h FK(\()p FC(x)2295 +-156 y FB(2)2370 -171 y FI(,)35 b FC(y)2553 -156 y FB(2)2592 +-171 y FK(\))i(with)g(orderings)g FC(x)3377 -156 y FB(1)3452 +-171 y FC(<)f(x)3619 -156 y FB(2)3694 -171 y FC(<)-9 +-51 y(y)39 -36 y FB(1)105 -51 y FC(<)28 b(y)257 -36 y +FB(2)323 -51 y FK(and)g FC(x)563 -36 y FB(1)630 -51 y +FC(<)g(y)782 -36 y FB(1)849 -51 y FC(<)f(x)1007 -36 y +FB(2)1075 -51 y FC(<)g(y)1226 -36 y FB(2)1265 -51 y FK(.)42 +b(Ho)m(w)28 b(do)s(es)g(it)f(compare)g(with)g(the)h(example)f(in)g +(\014gures)h(3)g(and)f(6?)-9 70 y(Based)f(on)f(the)h(examples)f(y)m(ou) +h(ha)m(v)m(e)h(seen)g(so)f(far,)g(what)g(v)-5 b(ariable)23 +b(ordering)i(w)m(ould)g(y)m(ou)h(recommend)-9 190 y(for)i(constructing) +i(a)f(small)e(R)m(OBDD)h(for)h(\()p FC(x)1653 205 y FB(1)1721 +190 y FI(,)e FC(y)1896 205 y FB(1)1935 190 y FK(\))16 +b FI(^)g FK(\()p FC(x)2164 205 y FB(2)2231 190 y FI(,)27 +b FC(y)2406 205 y FB(2)2445 190 y FK(\))16 b FI(^)g FK(\()p +FC(x)2674 205 y FB(3)2741 190 y FI(,)28 b FC(y)2917 205 +y FB(3)2956 190 y FK(\))16 b FI(^)g(\001)h(\001)g(\001)c(^)j +FK(\()p FC(x)3398 205 y FA(k)3469 190 y FI(,)27 b FC(y)3644 +205 y FA(k)3686 190 y FK(\)?)-9 418 y FF(Exercise)36 +b(3.4)49 b FK(Giv)m(e)30 b(an)h(example)f(of)g(a)g(sequence)k(of)c(R)m +(OBDDs)g FC(u)2554 433 y FA(n)2600 418 y FC(;)17 b FK(0)28 +b FI(\024)g FC(n)i FK(whic)m(h)i(induces)f(exp)s(o-)-9 +539 y(nen)m(tially)e(bigger)g(decision)h(trees.)44 b(I.e.,)32 +b(if)d FC(u)1652 554 y FA(n)1729 539 y FK(has)i(size)g(\002\()p +FC(n)p FK(\))f(then)h(the)g(decision)f(tree)h(should)g(ha)m(v)m(e)-9 +659 y(size)h(\002\(2)338 623 y FA(n)385 659 y FK(\).)-9 +887 y FF(Exercise)k(3.5)49 b FK(Construct)34 b(an)e(R)m(OBDD)g(of)g +(maxim)m(um)e(size)j(o)m(v)m(er)g(six)g(v)-5 b(ariables.)-9 +1220 y FH(4)161 b(Constructing)51 b(and)j(Manipulating)h(R)l(OBDDs)-9 +1439 y FK(In)40 b(the)h(previous)g(section)f(w)m(e)h(sa)m(w)g(ho)m(w)g +(to)f(construct)i(an)e(OBDD)f(from)g(a)h(Bo)s(olean)f(expression)-9 +1560 y(b)m(y)33 b(a)g(simple)e(recursiv)m(e)j(pro)s(cedure.)45 +b(The)34 b(question)f(arises)g(no)m(w)g(ho)m(w)h(do)e(w)m(e)i +(construct)g(a)e FD(r)-5 b(e)g(duc)g(e)g(d)-9 1680 y +FK(OBDD?)37 b(One)h(w)m(a)m(y)i(is)d(to)h(\014rst)h(construct)g(an)f +(OBDD)f(and)i(then)g(pro)s(ceed)g(b)m(y)g(reducing)f(it.)59 +b(An-)-9 1800 y(other)44 b(more)f(app)s(ealing)f(approac)m(h,)47 +b(whic)m(h)d(w)m(e)h(follo)m(w)d(here,)48 b(is)43 b(to)h(reduce)h(the)f +(OBDD)f(during)-9 1921 y(construction.)137 2041 y(T)-8 +b(o)23 b(describ)s(e)g(ho)m(w)h(this)f(is)f(done)i(w)m(e)g(will)c(need) +k(an)f(explicit)f(represen)m(tation)h(of)g(R)m(OBDDs.)39 +b(No)s(des)-9 2162 y(will)20 b(b)s(e)k(represen)m(ted)h(as)f(n)m(um)m +(b)s(ers)g(0)p FC(;)17 b FK(1)p FC(;)g FK(2)p FC(;)g(:)g(:)g(:)k +FK(with)i(0)f(and)i(1)f(reserv)m(ed)i(for)e(the)g(terminal)e(no)s(des.) +41 b(The)-9 2282 y(v)-5 b(ariables)34 b(in)h(the)g(ordering)g +FC(x)1128 2297 y FB(1)1201 2282 y FC(<)d(x)1364 2297 +y FB(2)1437 2282 y FC(<)g FI(\001)17 b(\001)g(\001)31 +b FC(<)i(x)1858 2297 y FA(n)1941 2282 y FK(are)i(represen)m(ted)j(b)m +(y)f(their)e(indices)g(1)p FC(;)17 b FK(2)p FC(;)g(:)g(:)g(:)e(;)i(n)p +FK(.)-9 2402 y(The)45 b(R)m(OBDD)f(is)g(stored)h(in)f(a)g(table)g +FC(T)62 b FK(:)48 b FC(u)f FI(7!)h FK(\()p FC(i;)17 b(l)r(;)g(h)p +FK(\))45 b(whic)m(h)g(maps)f(a)g(no)s(de)h FC(u)f FK(to)g(its)g(three) +-9 2523 y(attributes)32 b FD(var)11 b FK(\()p FC(u)p +FK(\))28 b(=)g FC(i)p FK(,)33 b FD(low)11 b FK(\()p FC(u)p +FK(\))27 b(=)i FC(l)r FK(,)k(and)g FD(high)7 b FK(\()p +FC(u)p FK(\))28 b(=)g FC(h)p FK(.)45 b(Figure)32 b(7)h(sho)m(ws)h(the)g +(represen)m(tation)f(of)-9 2643 y(the)g(R)m(OBDD)e(from)g(\014gure)i(3) +g(\(with)f(the)h(v)-5 b(ariable)31 b(names)h(c)m(hanged)i(to)e +FC(x)2780 2658 y FB(1)2848 2643 y FC(<)27 b(x)3006 2658 +y FB(2)3074 2643 y FC(<)g(x)3232 2658 y FB(3)3300 2643 +y FC(<)g(x)3458 2658 y FB(4)3498 2643 y FK(\).)-9 2932 +y Fn(4.1)135 b(Mk)-9 3117 y FK(In)32 b(order)h(to)f(ensure)j(that)d +(the)h(OBDD)e(b)s(eing)h(constructed)j(is)d(reduced,)i(it)d(is)i +(necessary)i(to)d(deter-)-9 3237 y(mine)e(from)g(a)h(triple)f(\()p +FC(i;)17 b(l)r(;)g(h)p FK(\))32 b(whether)h(there)f(exists)g(a)f(no)s +(de)h FC(u)f FK(with)g FD(var)11 b FK(\()p FC(u)p FK(\))27 +b(=)g FC(i;)17 b FD(low)10 b FK(\()p FC(u)p FK(\))27 +b(=)h FC(l)r FK(,)k(and)-9 3357 y FD(high)6 b FK(\()p +FC(u)p FK(\))27 b(=)h FC(h)p FK(.)42 b(F)-8 b(or)26 b(this)g(purp)s +(ose)i(w)m(e)g(assume)f(the)g(presence)i(of)e(a)f(table)g +FC(H)36 b FK(:)27 b(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))28 +b FI(7!)f FC(u)g FK(mapping)-9 3478 y(triples)e(\()p +FC(i;)17 b(l)r(;)g(h)p FK(\))27 b(of)g(v)-5 b(ariable)25 +b(indices)h FC(i)p FK(,)j(and)e(no)s(des)g FC(l)r(;)17 +b(h)27 b FK(to)g(no)s(des)g FC(u)p FK(.)41 b(The)28 b(table)e +FC(H)34 b FK(is)27 b(the)g(\\in)m(v)m(erse")-9 3598 y(of)h(the)i(table) +e FC(T)14 b FK(,)30 b(i.e.,)f(for)g(v)-5 b(ariable)27 +b(no)s(des)j FC(u)p FK(,)f FC(T)14 b FK(\()p FC(u)p FK(\))27 +b(=)g(\()p FC(i;)17 b(l)r(;)g(h)p FK(\),)30 b(if)e(and)h(only)g(if,)g +FC(H)8 b FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))27 b(=)g +FC(u)p FK(.)42 b(The)-9 3719 y(op)s(erations)31 b(needed)j(on)f(the)g +(t)m(w)m(o)g(tables)g(are:)307 3930 y FC(T)42 b FK(:)27 +b FC(u)h FI(7!)f FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))488 +4051 y FD(init)p FK(\()p FC(T)d FK(\))749 b(initialize)29 +b FC(T)46 b FK(to)32 b(con)m(tain)g(only)g(0)g(and)h(1)488 +4171 y FC(u)27 b FI( )g FD(add)p FK(\()p FC(T)8 b(;)17 +b(i;)g(l)r(;)g(h)p FK(\))290 b(allo)s(cate)30 b(a)j(new)g(no)s(de)g +FC(u)f FK(with)g(attributes)g(\()p FC(i;)17 b(l)r(;)g(h)p +FK(\))488 4291 y FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)17 +b FD(low)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b FD(high)5 +b FK(\()p FC(u)p FK(\))83 b(lo)s(okup)32 b(the)h(attributes)f(of)g +FC(u)g FK(in)g FC(T)307 4532 y(H)j FK(:)28 b(\()p FC(i;)17 +b(l)r(;)g(h)p FK(\))28 b FI(7!)f FC(u)488 4652 y FD(init)p +FK(\()p FC(H)8 b FK(\))731 b(initialize)29 b FC(H)40 +b FK(to)32 b(b)s(e)h(empt)m(y)488 4773 y FC(b)28 b FI( )f +FD(memb)-5 b(er)o FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p +FK(\))106 b(c)m(hec)m(k)35 b(if)c(\()p FC(i;)17 b(l)r(;)g(h)p +FK(\))33 b(is)f(in)g FC(H)488 4893 y(u)27 b FI( )g FD(lo)-5 +b(okup)p FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p FK(\))155 +b(\014nd)33 b FC(H)8 b FK(\()p FC(i;)17 b(l)r(;)g(h)p +FK(\))488 5014 y FD(insert)p FK(\()p FC(H)r(;)g(i;)g(l)r(;)g(h;)g(u)p +FK(\))289 b(mak)m(e)33 b(\()p FC(i;)17 b(l)r(;)g(h)p +FK(\))32 b(map)g(to)g FC(u)g FK(in)g FC(H)p eop +%%Page: 16 17 +16 16 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(16)712 1831 y @beginspecial +0 @llx 0 @lly 112 @urx 198 @ury 1120 @rwi @setspecial +%%BeginDocument: bdd-repr.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-145.0 223.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 3742 m 0 0 l 4314 0 l 4314 3742 l cp clip + 0.06000 0.06000 sc +7.500 slw +% Ellipse +n 4005 1500 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3195 2940 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3915 2940 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3075 1500 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3555 780 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3540 2220 180 180 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 3690 870 m 4005 1320 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3420 870 m 3075 1320 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3195 1650 m 3450 2040 l gs col-1 s gr [] 0 sd +% Polyline +n 3990 1680 m 3630 2055 l gs col-1 s gr +% Polyline +n 3690 2355 m 3915 2760 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3420 2355 m 3240 2760 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3285 3120 m 3555 3435 l gs col-1 s gr [] 0 sd +% Polyline +n 3825 3120 m 3555 3435 l gs col-1 s gr +% Polyline +n 2970 1650 m 2610 3435 l gs col-1 s gr +% Polyline +n 3090 3090 m 2610 3435 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3780 3075 m 2610 3420 l gs col-1 s gr [] 0 sd +% Polyline +n 2790 3690 m 2790 3435 l 2430 3435 l 2430 3690 l cp gs col-1 s gr +% Polyline +n 3735 3690 m 3735 3435 l 3375 3435 l 3375 3690 l cp gs col-1 s gr +% Interp Spline +gs [60] 0 sd +n 3900 1635 m + 3445.5 1885.9 3258.0 2013.4 3150 2145 curveto + 2985.2 2345.9 2850.2 2664.7 2610 3420 curveto + gs col-1 s gr + gr + [] 0 sd +/Times-Roman ff 180.00 scf sf +3150 2700 m +gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col-1 sh gr +/Times-Roman ff 180.00 scf sf +4050 2700 m +gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col-1 sh gr +/Times-Roman ff 180.00 scf sf +3525 2025 m +gs 1 -1 sc (4) dup sw pop 2 div neg 0 rm col-1 sh gr +/Times-Roman ff 180.00 scf sf +3000 1275 m +gs 1 -1 sc (5) dup sw pop 2 div neg 0 rm col-1 sh gr +/Times-Roman ff 180.00 scf sf +4125 1275 m +gs 1 -1 sc (6) dup sw pop 2 div neg 0 rm col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 525 m +gs 1 -1 sc (7) dup sw pop 2 div neg 0 rm col-1 sh gr +$F2psEnd +rs +%%EndDocument + @endspecial 1053 1473 a FC(x)1108 1488 y FB(4)1413 1473 +y FC(x)1468 1488 y FB(4)993 753 y FC(x)1048 768 y FB(2)1226 +1113 y FC(x)1281 1128 y FB(3)1233 393 y FC(x)1288 408 +y FB(1)788 1793 y FK(0)1256 1788 y(1)1458 753 y FC(x)1513 +768 y FB(2)2297 357 y FC(T)41 b FK(:)28 b FC(u)f FI(7!)h +FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))p 2193 396 856 4 +v 2191 516 4 121 v 2235 480 a FC(u)p 2330 516 V 82 w +FD(var)p 2549 516 V 83 w(low)p 2782 516 V 93 w(high)p +3047 516 V 2193 520 856 4 v 2193 536 V 2191 657 4 121 +v 2238 621 a FK(0)p 2330 657 V 130 w(5)p 2549 657 V 2782 +657 V 3047 657 V 2191 777 V 2238 741 a(1)p 2330 777 V +130 w(5)p 2549 777 V 2782 777 V 3047 777 V 2193 780 856 +4 v 2191 901 4 121 v 2238 865 a(2)p 2330 901 V 130 w(4)p +2549 901 V 177 w(1)p 2782 901 V 200 w(0)p 3047 901 V +2191 1021 V 2238 985 a(3)p 2330 1021 V 130 w(4)p 2549 +1021 V 177 w(0)p 2782 1021 V 200 w(1)p 3047 1021 V 2191 +1142 V 2238 1105 a(4)p 2330 1142 V 130 w(3)p 2549 1142 +V 177 w(2)p 2782 1142 V 200 w(3)p 3047 1142 V 2191 1262 +V 2238 1226 a(5)p 2330 1262 V 130 w(2)p 2549 1262 V 177 +w(4)p 2782 1262 V 200 w(0)p 3047 1262 V 2191 1382 V 2238 +1346 a(6)p 2330 1382 V 130 w(2)p 2549 1382 V 177 w(0)p +2782 1382 V 200 w(4)p 3047 1382 V 2191 1503 V 2238 1467 +a(7)p 2330 1503 V 130 w(1)p 2549 1503 V 177 w(5)p 2782 +1503 V 200 w(6)p 3047 1503 V 2193 1506 856 4 v -9 2034 +a(Figure)41 b(7:)64 b(Represen)m(ting)43 b(an)g(R)m(OBDD)f(with)g +(ordering)g FC(x)2276 2049 y FB(1)2361 2034 y FC(<)j(x)2537 +2049 y FB(2)2621 2034 y FC(<)g(x)2797 2049 y FB(3)2882 +2034 y FC(<)g(x)3058 2049 y FB(4)3098 2034 y FK(.)73 +b(The)44 b(n)m(um)m(b)s(ers)-9 2155 y(inside)c(the)i(v)m(ertices)g(are) +f(the)h(iden)m(tities)e(used)i(in)f(the)g(represen)m(tation.)70 +b(The)42 b(n)m(um)m(b)s(ers)g(0)f(and)g(1)-9 2275 y(are)33 +b(reserv)m(ed)i(for)e(the)h(terminal)c(no)s(des.)46 b(The)34 +b(n)m(um)m(b)s(ers)h(to)d(the)i(righ)m(t)e(of)h(the)h(R)m(OBDD)e(sho)m +(ws)j(the)-9 2396 y(index)g(of)f(the)h(v)-5 b(ariables)33 +b(in)h(the)i(ordering.)49 b(The)36 b(constan)m(ts)g(are)e(assigned)h +(an)g(index)g(whic)m(h)g(is)g(the)-9 2516 y(n)m(um)m(b)s(er)25 +b(of)f(v)-5 b(ariables)24 b(in)g(the)h(ordering)g(plus)f(one)i(\(here)f +(4)7 b(+)g(1)26 b(=)i(5\).)41 b(This)25 b(mak)m(es)g(some)g(subsequen)m +(t)-9 2636 y(algorithms)k(easier)j(to)g(presen)m(t.)45 +b(The)34 b(lo)m(w-)d(and)h(high-\014elds)g(are)g(un)m(used)i(for)e(the) +g(terminal)e(no)s(des.)234 3761 y FE(Mk)p FK([)p FC(T)8 +b(;)17 b(H)8 b FK(]\()p FC(i;)17 b(l)r(;)g(h)p FK(\))234 +3881 y(1:)144 b FF(if)32 b FC(l)e FK(=)d FC(h)33 b FF(then)k(return)c +FC(l)234 4002 y FK(2:)144 b FF(else)37 b(if)32 b FD(memb)-5 +b(er)o FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p FK(\))32 +b FF(then)234 4122 y FK(3:)363 b FF(return)33 b FD(lo)-5 +b(okup)o FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p FK(\))234 +4242 y(4:)144 b FF(else)41 b FC(u)27 b FI( )h FD(add)o +FK(\()p FC(T)8 b(;)17 b(i;)g(l)r(;)g(h)p FK(\))234 4363 +y(5:)363 b FD(insert)p FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h;)g(u)p +FK(\))234 4483 y(6:)363 b FF(return)33 b FC(u)1025 4687 +y FK(Figure)f(8:)43 b(The)34 b(function)e FE(mk)p FK([)p +FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(i;)17 b(l)r(;)g(h)p +FK(\).)p eop +%%Page: 17 18 +17 17 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(17)234 -67 y FE(Build)p +FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(t)p FK(\))234 +53 y(1:)144 b FF(function)32 b FE(build)p FK('\()p FC(t;)17 +b(i)p FK(\))33 b(=)234 173 y(2:)363 b FF(if)32 b FC(i)c(>)g(n)k +FF(then)234 294 y FK(3:)583 b FF(if)31 b FC(t)i FK(is)f(false)g +FF(then)h(return)f FK(0)h FF(else)f(return)g FK(1)234 +414 y(4:)363 b FF(else)32 b FC(v)930 429 y FB(0)998 414 +y FI( )27 b FE(build)p FK('\()p FC(t)p FK([0)p FC(=x)1667 +429 y FA(i)1696 414 y FK(])p FC(;)17 b(i)22 b FK(+)g(1\))234 +535 y(5:)583 b FC(v)940 550 y FB(1)1007 535 y FI( )27 +b FE(build)p FK('\()p FC(t)p FK([1)p FC(=x)1676 550 y +FA(i)1705 535 y FK(])p FC(;)17 b(i)22 b FK(+)g(1\))234 +655 y(6:)583 b FF(return)32 b FE(mk)q FK(\()p FC(i;)17 +b(v)1536 670 y FB(0)1575 655 y FC(;)g(v)1666 670 y FB(1)1705 +655 y FK(\))234 775 y(7:)144 b FF(end)33 b FE(build)p +FK(')234 896 y(8:)234 1016 y(9:)144 b FF(return)32 b +FE(build)p FK('\()p FC(t;)17 b FK(1\))234 1220 y(Figure)44 +b(9:)67 b(Algorithm)42 b(for)i(building)f(an)h(R)m(OBDD)g(from)f(a)i +(Bo)s(olean)e(expression)j FC(t)234 1340 y FK(using)37 +b(the)g(ordering)f FC(x)1110 1355 y FB(1)1185 1340 y +FC(<)f(x)1351 1355 y FB(2)1425 1340 y FC(<)g FI(\001)17 +b(\001)g(\001)33 b FC(<)i(x)1853 1355 y FA(n)1901 1340 +y FK(.)56 b(In)37 b(a)f(call)f FE(build)p FK('\()p FC(t;)17 +b(i)p FK(\),)39 b FC(i)e FK(is)f(the)i(lo)m(w)m(est)234 +1460 y(index)f(that)g(an)m(y)g(v)-5 b(ariable)35 b(of)h +FC(t)g FK(can)h(ha)m(v)m(e.)57 b(Th)m(us)38 b(when)g(the)f(test)g +FC(i)e(>)f(n)j FK(succeeds,)j FC(t)234 1581 y FK(con)m(tains)33 +b(no)g(v)-5 b(ariables)31 b(and)h(m)m(ust)h(b)s(e)g(either)f(constan)m +(tly)h(false)f(or)h(true.)-9 1949 y(W)-8 b(e)22 b(shall)f(assume)i +(that)f(all)f(these)i(op)s(erations)f(can)h(b)s(e)f(p)s(erformed)g(in)g +FD(c)-5 b(onstant)25 b(time)p FK(,)f FC(O)s FK(\(1\).)39 +b(Section)-9 2069 y(5)32 b(will)e(sho)m(w)k(ho)m(w)f(suc)m(h)h(a)e(lo)m +(w)g(complexit)m(y)g(can)h(b)s(e)g(ac)m(hiev)m(ed.)137 +2190 y(The)48 b(function)f FE(mk)q FK([)p FC(T)8 b(;)17 +b(H)8 b FK(]\()p FC(i;)17 b(l)r(;)g(h)p FK(\))47 b(\(see)h(\014gure)g +(8\))f(searc)m(hes)j(the)d(table)g FC(H)55 b FK(for)47 +b(a)g(no)s(de)g(with)-9 2310 y(v)-5 b(ariable)36 b(index)i +FC(i)g FK(and)f(lo)m(w-,)i(high-branc)m(hes)f FC(l)r(;)17 +b(h)38 b FK(and)g(returns)g(a)g(matc)m(hing)f(no)s(de)g(if)g(one)h +(exists.)-9 2430 y(Otherwise)e(it)f(creates)i(a)f(new)h(no)s(de)f +FC(u)p FK(,)h(inserts)f(it)f(in)m(to)h FC(H)43 b FK(and)36 +b(returns)h(the)g(iden)m(tit)m(y)f(of)f(it.)53 b(The)-9 +2551 y(running)31 b(time)f(of)38 b FE(mk)32 b FK(is)f +FC(O)s FK(\(1\))f(due)i(to)f(the)h(assumptions)f(on)h(the)g(basic)f(op) +s(erations)f(on)i FC(T)45 b FK(and)31 b FC(H)8 b FK(.)-9 +2671 y(The)32 b(OBDD)e(is)h(ensured)i(to)e(b)s(e)g(reduced)i(if)d(no)s +(des)i(are)f(only)g(created)h(through)f(the)h(use)g(of)38 +b FE(mk)p FK(.)44 b(In)-9 2791 y(describing)31 b FE(mk)g +FK(and)f(subsequen)m(t)k(algorithms,)28 b(w)m(e)j(mak)m(e)g(use)g(of)f +(the)h(notation)e([)p FC(T)8 b(;)17 b(H)8 b FK(])30 b(to)g(indicate)-9 +2912 y(that)g FE(mk)g FK(dep)s(ends)i(on)e(the)h(global)d(data)i +(structures)i FC(T)44 b FK(and)30 b FC(H)8 b FK(,)30 +b(but)h(w)m(e)g(lea)m(v)m(e)g(out)f(the)h(argumen)m(ts)-9 +3032 y(when)i(in)m(v)m(oking)f(it)g(as)h(part)f(of)g(other)h +(algorithms.)-9 3321 y Fn(4.2)135 b(Build)-9 3506 y FK(The)42 +b(construction)h(of)e(an)h(R)m(OBDD)f(from)f(a)i(giv)m(en)g(Bo)s(olean) +f(expression)i FC(t)f FK(pro)s(ceeds)h(as)f(in)g(the)-9 +3626 y(construction)23 b(of)h(an)f(if-then-else)g(normal)f(form)g +(\(INF\))i(in)f(section)h(2.)40 b(An)24 b(ordering)f(of)g(the)h(v)-5 +b(ariables)-9 3747 y FC(x)46 3762 y FB(1)113 3747 y FC(<)28 +b FI(\001)17 b(\001)g(\001)26 b FC(<)h(x)519 3762 y FA(n)591 +3747 y FK(is)d(\014xed.)42 b(Using)24 b(the)h(Shannon)g(expansion)g +FC(t)j FK(=)g FC(x)2438 3762 y FB(1)2505 3747 y FI(!)f +FC(t)p FK([1)p FC(=x)2847 3762 y FB(1)2887 3747 y FK(])p +FC(;)17 b(t)p FK([0)p FC(=x)3173 3762 y FB(1)3213 3747 +y FK(],)26 b(a)e(no)s(de)h(for)f FC(t)-9 3867 y FK(is)e(constructed)j +(b)m(y)g(a)e(call)e(to)i FE(mk)p FK(,)j(after)d(the)h(no)s(des)g(for)f +FC(t)p FK([0)p FC(=x)2264 3882 y FB(1)2304 3867 y FK(])g(and)g +FC(t)p FK([1)p FC(=x)2749 3882 y FB(1)2789 3867 y FK(])h(ha)m(v)m(e)g +(b)s(een)g(constructed)-9 3987 y(b)m(y)44 b(recursion.)77 +b(The)44 b(algorithm)c(is)j(sho)m(wn)i(in)e(\014gure)h(9.)76 +b(The)44 b(call)e FE(build)p FK('\()p FC(t;)17 b(i)p +FK(\))44 b(constructs)h(an)-9 4108 y(R)m(OBDD)28 b(for)h(a)g(Bo)s +(olean)f(expression)j FC(t)f FK(with)f(v)-5 b(ariables)28 +b(in)h FI(f)p FC(x)2347 4123 y FA(i)2375 4108 y FC(;)17 +b(x)2474 4123 y FA(i)p FB(+1)2593 4108 y FC(;)g(:)g(:)g(:)f(;)h(x)2867 +4123 y FA(n)2914 4108 y FI(g)p FK(.)42 b(It)29 b(do)s(es)h(so)g(b)m(y)h +(\014rst)-9 4228 y(recursiv)m(ely)37 b(constructing)f(R)m(OBDDs)g +FC(v)1527 4243 y FB(0)1603 4228 y FK(and)g FC(v)1843 +4243 y FB(1)1919 4228 y FK(for)f FC(t)p FK([0)p FC(=x)2286 +4243 y FA(i)2315 4228 y FK(])h(and)g FC(t)p FK([1)p FC(=x)2786 +4243 y FA(i)2815 4228 y FK(])g(in)f(lines)h(4)g(and)g(5,)h(and)-9 +4348 y(then)28 b(pro)s(ceeding)g(to)g(\014nd)g(the)g(iden)m(tit)m(y)g +(of)g(the)g(no)s(de)g(for)f FC(t)i FK(in)e(line)f(6.)42 +b(Notice)28 b(that)f(if)g FC(v)3273 4363 y FB(0)3340 +4348 y FK(and)i FC(v)3573 4363 y FB(1)3640 4348 y FK(are)-9 +4469 y(iden)m(tical,)g(or)g(if)g(there)i(already)f(is)f(a)h(no)s(de)g +(with)g(the)g(same)g FC(i)p FK(,)h FC(v)2373 4484 y FB(0)2443 +4469 y FK(and)f FC(v)2677 4484 y FB(1)2717 4469 y FK(,)g(no)g(new)h(no) +s(de)f(is)g(created.)137 4589 y(An)c(example)g(of)f(using)i +FE(build)f FK(to)g(compute)g(an)g(R)m(OBDD)f(is)g(sho)m(wn)i(in)e +(\014gure)i(10.)41 b(The)26 b(running)-9 4710 y(time)31 +b(of)38 b FE(build)33 b FK(is)f(bad.)44 b(It)32 b(is)g(easy)i(to)e(see) +h(that)f(for)g(a)g(v)-5 b(ariable)31 b(ordering)h(with)g +FC(n)g FK(v)-5 b(ariables)31 b(there)-9 4830 y(will)f(alw)m(a)m(ys)j(b) +s(e)g(generated)g(on)g(the)g(order)f(of)g(2)1782 4794 +y FA(n)1862 4830 y FK(calls)f(.)p eop +%%Page: 18 19 +18 18 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(18)7 1588 y @beginspecial +0 @llx 0 @lly 451 @urx 169 @ury 4510 @rwi @setspecial +%%BeginDocument: build-ex-calls.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-17.0 199.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 3199 m 0 0 l 7455 0 l 7455 3199 l cp clip + 0.06299 0.06299 sc +% Polyline +7.500 slw +gs clippath +2384 1203 m 2243 1194 l 2368 1130 l 2197 1167 l 2213 1240 l cp +clip +n 3810 855 m 2220 1200 l gs col-1 s gr gr + +% arrowhead +n 2384 1203 m 2243 1194 l 2368 1130 l col-1 s +% Polyline +gs clippath +5252 1130 m 5376 1194 l 5236 1203 l 5407 1240 l 5423 1167 l cp +clip +n 3810 855 m 5400 1200 l gs col-1 s gr gr + +% arrowhead +n 5252 1130 m 5376 1194 l 5236 1203 l col-1 s +% Polyline +gs clippath +1497 1715 m 1357 1730 l 1468 1645 l 1307 1711 l 1335 1780 l cp +clip +n 2220 1380 m 1335 1740 l gs col-1 s gr gr + +% arrowhead +n 1497 1715 m 1357 1730 l 1468 1645 l col-1 s +% Polyline +gs clippath +2957 1644 m 3067 1730 l 2928 1714 l 3090 1780 l 3118 1711 l cp +clip +n 2220 1380 m 3090 1740 l gs col-1 s gr gr + +% arrowhead +n 2957 1644 m 3067 1730 l 2928 1714 l col-1 s +% Polyline +gs clippath +4854 1701 m 4716 1728 l 4820 1634 l 4665 1713 l 4699 1780 l cp +clip +n 5400 1380 m 4695 1740 l gs col-1 s gr gr + +% arrowhead +n 4854 1701 m 4716 1728 l 4820 1634 l col-1 s +% Polyline +gs clippath +6311 1653 m 6427 1732 l 6287 1724 l 6452 1780 l 6476 1709 l cp +clip +n 5400 1380 m 6450 1740 l gs col-1 s gr gr + +% arrowhead +n 6311 1653 m 6427 1732 l 6287 1724 l col-1 s +% Polyline +gs clippath +949 2211 m 815 2251 l 909 2148 l 762 2241 l 803 2305 l cp +clip +n 1335 1920 m 795 2265 l gs col-1 s gr gr + +% arrowhead +n 949 2211 m 815 2251 l 909 2148 l col-1 s +% Polyline +gs clippath +1736 2400 m 1785 2530 l 1675 2444 l 1779 2584 l 1839 2540 l cp +clip +n 1335 1920 m 1800 2550 l gs col-1 s gr gr + +% arrowhead +n 1736 2400 m 1785 2530 l 1675 2444 l col-1 s +% Polyline +gs clippath +3529 2403 m 3584 2531 l 3471 2450 l 3580 2585 l 3639 2538 l cp +clip +n 3090 1920 m 3600 2550 l gs col-1 s gr gr + +% arrowhead +n 3529 2403 m 3584 2531 l 3471 2450 l col-1 s +% Polyline +gs clippath +2719 2209 m 2585 2251 l 2678 2146 l 2532 2242 l 2573 2305 l cp +clip +n 3090 1920 m 2565 2265 l gs col-1 s gr gr + +% arrowhead +n 2719 2209 m 2585 2251 l 2678 2146 l col-1 s +% Polyline +gs clippath +4309 2211 m 4175 2251 l 4269 2148 l 4122 2241 l 4163 2305 l cp +clip +n 4695 1920 m 4155 2265 l gs col-1 s gr gr + +% arrowhead +n 4309 2211 m 4175 2251 l 4269 2148 l col-1 s +% Polyline +gs clippath +5108 2401 m 5160 2530 l 5049 2446 l 5154 2585 l 5214 2539 l cp +clip +n 4695 1920 m 5175 2550 l gs col-1 s gr gr + +% arrowhead +n 5108 2401 m 5160 2530 l 5049 2446 l col-1 s +% Polyline +gs clippath +6829 2328 m 6884 2456 l 6771 2375 l 6880 2510 l 6939 2463 l cp +clip +n 6450 1920 m 6900 2475 l gs col-1 s gr gr + +% arrowhead +n 6829 2328 m 6884 2456 l 6771 2375 l col-1 s +% Polyline +gs clippath +6079 2209 m 5945 2251 l 6038 2146 l 5892 2242 l 5933 2305 l cp +clip +n 6450 1920 m 5925 2265 l gs col-1 s gr gr + +% arrowhead +n 6079 2209 m 5945 2251 l 6038 2146 l col-1 s +$F2psEnd +rs +%%EndDocument + @endspecial 766 631 a Fs(\(\(0)19 b Fm(,)g Fl(x)993 +639 y Fk(2)1025 631 y Fs(\))c Fm(_)g Fl(x)1164 639 y +Fk(3)1196 631 y Fl(;)c Fs(2\))1495 355 y Fj(build)p Fi(')p +Fs(\(\()p Fl(x)1760 363 y Fk(1)1810 355 y Fm(,)20 b Fl(x)1934 +363 y Fk(2)1966 355 y Fs(\))15 b Fm(_)f Fl(x)2104 363 +y Fk(3)2137 355 y Fl(;)d Fs(1\))2436 631 y(\(\(1)18 b +Fm(,)i Fl(x)2663 639 y Fk(2)2695 631 y Fs(\))15 b Fm(_)f +Fl(x)2833 639 y Fk(3)2866 631 y Fl(;)d Fs(2\))3005 914 +y(\(\(1)19 b Fm(,)g Fs(1\))c Fm(_)g Fl(x)3366 922 y Fk(3)3398 +914 y Fl(;)c Fs(3\))-1404 b(\(\(1)19 b Fm(,)g Fs(0\))c +Fm(_)g Fl(x)2445 922 y Fk(3)2477 914 y Fl(;)c Fs(3\))1803 +1190 y(\(\(1)19 b Fm(,)g Fs(0\))c Fm(_)g Fs(0)p Fl(;)c +Fs(4\))499 b(\(\(1)19 b Fm(,)g Fs(1\))c Fm(_)g Fs(0)p +Fl(;)c Fs(4\))2354 1347 y(\(\(1)19 b Fm(,)g Fs(0\))d +Fm(_)e Fs(1)p Fl(;)e Fs(4\))459 b(\(\(1)19 b Fm(,)g Fs(1\))c +Fm(_)g Fs(1)p Fl(;)c Fs(4\))1241 914 y(\(\(0)19 b Fm(,)g +Fs(1\))c Fm(_)g Fl(x)1602 922 y Fk(3)1634 914 y Fl(;)c +Fs(3\))984 1190 y(\(\(0)19 b Fm(,)g Fs(1\))c Fm(_)g Fs(0)p +Fl(;)c Fs(4\))320 914 y(\(\(0)19 b Fm(,)g Fs(0\))c Fm(_)g +Fl(x)681 922 y Fk(3)713 914 y Fl(;)c Fs(3\))583 1347 +y(\(\(0)19 b Fm(,)g Fs(0\))c Fm(_)g Fs(1)p Fl(;)c Fs(4\))55 +1190 y(\(\(0)19 b Fm(,)g Fs(0\))c Fm(_)g Fs(0)p Fl(;)c +Fs(4\))1528 1347 y(\(\(0)18 b Fm(,)i Fs(1\))15 b Fm(_)g +Fs(1)p Fl(;)c Fs(4\))458 828 y Fh(b)991 b(c)923 521 y(d)2229 +828 y(e)2719 521 y(f)1836 261 y(g)3286 828 y(e)1836 1575 +y(a)496 4030 y @beginspecial 0 @llx 0 @lly 330 @urx 271 +@ury 3300 @rwi @setspecial +%%BeginDocument: build-ex.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-29.0 314.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 5020 m 0 0 l 5739 0 l 5739 5020 l cp clip + 0.06299 0.06299 sc +% Polyline +7.500 slw +n 2295 2430 m 2295 2130 l 1980 2130 l 1980 2430 l cp gs col-1 s gr +% Polyline +n 1395 2430 m 1395 2130 l 1080 2130 l 1080 2430 l cp gs col-1 s gr +% Polyline +n 4095 2430 m 4095 2130 l 3780 2130 l 3780 2430 l cp gs col-1 s gr +% Polyline +n 4770 2430 m 4770 2130 l 4455 2130 l 4455 2430 l cp gs col-1 s gr +% Polyline +n 1125 4725 m 1125 4425 l 810 4425 l 810 4725 l cp gs col-1 s gr +% Polyline +n 2835 4725 m 2835 4425 l 2520 4425 l 2520 4725 l cp gs col-1 s gr +% Polyline +n 4635 4725 m 4635 4425 l 4320 4425 l 4320 4725 l cp gs col-1 s gr +% Polyline +n 5400 4725 m 5400 4425 l 5085 4425 l 5085 4725 l cp gs col-1 s gr +% Polyline +n 3600 4725 m 3600 4425 l 3285 4425 l 3285 4725 l cp gs col-1 s gr +% Polyline +n 1845 4725 m 1845 4425 l 1530 4425 l 1530 4725 l cp gs col-1 s gr +% Ellipse +n 2490 1725 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 1320 4020 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3030 4020 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4860 4020 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4275 1725 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 735 3480 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 2460 3480 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4275 3480 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4860 2940 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3600 3480 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 5430 3480 135 135 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 3705 1185 135 135 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 2490 1320 m 2490 1590 l gs col-1 s gr +% Polyline + [60] 0 sd +n 2550 1830 m 2820 2130 l gs col-1 s gr [] 0 sd +% Polyline +n 2385 1830 m 2145 2130 l gs col-1 s gr +% Polyline + [60] 0 sd +n 2145 1320 m 2145 2130 l gs col-1 s gr [] 0 sd +% Polyline +n 795 3615 m 1245 3885 l gs col-1 s gr +% Polyline + [60] 0 sd +n 1380 4125 m 1650 4425 l gs col-1 s gr [] 0 sd +% Polyline +n 1200 4125 m 975 4425 l gs col-1 s gr +% Polyline +n 1920 3615 m 1650 4050 l 975 4425 l gs col-1 s gr +% Polyline + [60] 0 sd +n 705 3615 m 975 4425 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 1200 3000 m 795 3345 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 1545 3615 m 1335 3885 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3540 3615 m 3060 3885 l gs col-1 s gr [] 0 sd +% Polyline +n 2520 3615 m 2955 3885 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3105 4125 m 3375 4425 l gs col-1 s gr [] 0 sd +% Polyline +n 2925 4125 m 2685 4425 l gs col-1 s gr +% Polyline +n 3645 3615 m 3525 3975 l 2700 4425 l gs col-1 s gr +% Polyline + [60] 0 sd +n 2415 3615 m 2685 4425 l gs col-1 s gr [] 0 sd +% Polyline +n 3135 3000 m 3540 3345 l gs col-1 s gr +% Polyline + [60] 0 sd +n 2925 3000 m 2520 3345 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 5355 3615 m 4875 3885 l gs col-1 s gr [] 0 sd +% Polyline +n 4350 3615 m 4785 3885 l gs col-1 s gr +% Polyline + [60] 0 sd +n 4920 4125 m 5190 4425 l gs col-1 s gr [] 0 sd +% Polyline +n 4740 4125 m 4515 4425 l gs col-1 s gr +% Polyline +n 5460 3615 m 5325 3975 l 4500 4425 l gs col-1 s gr +% Polyline + [60] 0 sd +n 4245 3615 m 4515 4425 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4125 705 m 3735 1050 l gs col-1 s gr [] 0 sd +% Polyline +n 3780 1320 m 4215 1590 l gs col-1 s gr +% Polyline + [60] 0 sd +n 4350 1830 m 4605 2130 l gs col-1 s gr [] 0 sd +% Polyline +n 4185 1830 m 3945 2130 l gs col-1 s gr +% Polyline + [60] 0 sd +n 3675 1320 m 3945 2130 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 1260 1305 m 1260 2115 l gs col-1 s gr [] 0 sd +% Polyline +n 4950 3000 m 5355 3345 l gs col-1 s gr +% Polyline + [60] 0 sd +n 4740 3000 m 4350 3345 l gs col-1 s gr [] 0 sd +% Polyline +n 2970 2430 m 2970 2130 l 2655 2130 l 2655 2430 l cp gs col-1 s gr +$F2psEnd +rs +%%EndDocument + @endspecial 1336 2656 a FL(1)-532 b(1)1359 b(1)295 b(0)721 +3861 y(1)839 b(1)886 b(1)343 b(0)-1004 b(0)-981 b(0)873 +2801 y Fh(b)589 b(c)868 b(d)1690 2656 y FL(0)889 4006 +y Fh(e)883 b(f)891 b(g)1503 2345 y Fq(x)1570 2363 y Fr(3)2141 +2053 y Fq(x)2208 2071 y Fr(2)2440 2345 y Fq(x)2507 2363 +y Fr(3)582 3266 y Fq(x)649 3284 y Fr(2)889 3550 y Fq(x)956 +3568 y Fr(3)1487 3266 y Fq(x)1554 3284 y Fr(2)1787 3550 +y Fq(x)1854 3568 y Fr(3)2086 3266 y Fq(x)2153 3284 y +Fr(2)2440 3266 y Fq(x)2507 3284 y Fr(2)2747 2983 y Fq(x)2814 +3001 y Fr(1)3046 3266 y Fq(x)3113 3284 y Fr(2)2747 3550 +y Fq(x)2814 3568 y Fr(3)-9 4233 y FK(Figure)30 b(10:)42 +b(Using)31 b FE(build)g FK(on)g(the)h(expression)g(\()p +FC(x)1892 4248 y FB(1)1959 4233 y FI(,)c FC(x)2142 4248 +y FB(2)2182 4233 y FK(\))19 b FI(_)g FC(x)2379 4248 y +FB(3)2419 4233 y FK(.)43 b(\(a\))31 b(The)h(tree)f(of)g(calls)f(to)h +FE(build)p FK(.)-9 4354 y(\(b\))25 b(The)i(R)m(OBDD)d(after)h(the)h +(call)e FE(build)p FK('\(\(0)k FI(,)f FK(0\))8 b FI(_)g +FC(x)2077 4369 y FB(3)2117 4354 y FC(;)17 b FK(3\).)40 +b(\(c\))26 b(After)f(the)h(call)e FE(build)p FK('\(\(0)k +FI(,)f FK(1\))8 b FI(_)-9 4474 y FC(x)46 4489 y FB(3)85 +4474 y FC(;)17 b FK(3\).)40 b(\(d\))22 b(After)h(the)f(call)f +FE(build)p FK('\(\(0)28 b FI(,)f FC(x)1630 4489 y FB(2)1670 +4474 y FK(\))q FI(_)q FC(x)1831 4489 y FB(3)1872 4474 +y FC(;)17 b FK(2\).)39 b(\(e\))23 b(After)f(the)h(calls)e +FE(build)p FK('\(\(1)28 b FI(,)f FK(0\))q FI(_)q FC(x)3599 +4489 y FB(3)3640 4474 y FC(;)17 b FK(3\))-9 4594 y(and)38 +b FE(build)p FK('\(\(1)g FI(,)f FK(1\))26 b FI(_)g FC(x)1035 +4609 y FB(3)1075 4594 y FC(;)17 b FK(3\).)60 b(\(f)7 +b(\))38 b(After)h(the)g(call)d FE(build)p FK('\(\(1)i +FI(,)f FC(x)2707 4609 y FB(2)2747 4594 y FK(\))26 b FI(_)g +FC(x)2958 4609 y FB(3)2998 4594 y FC(;)17 b FK(2\).)61 +b(\(g\))37 b(The)j(\014nal)-9 4715 y(result.)p eop +%%Page: 19 20 +19 19 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(19)-9 -171 y Fn(4.3)135 +b(Apply)234 213 y FE(Appl)-7 b(y)p FK([)p FC(T)8 b(;)17 +b(H)8 b FK(]\()p FC(op;)17 b(u)1018 228 y FB(1)1056 213 +y FC(;)g(u)1156 228 y FB(2)1195 213 y FK(\))234 333 y(1:)71 +b FD(init)p FK(\()p FC(G)p FK(\))234 454 y(2:)234 574 +y(3:)g FF(function)32 b FE(app)o FK(\()p FC(u)1081 589 +y FB(1)1120 574 y FC(;)17 b(u)1220 589 y FB(2)1259 574 +y FK(\))27 b(=)234 694 y(4:)144 b FF(if)42 b FC(G)p FK(\()p +FC(u)733 709 y FB(1)772 694 y FC(;)17 b(u)872 709 y FB(2)910 +694 y FK(\))28 b FI(6)p FK(=)g FD(empty)k FF(then)h(return)f +FC(G)p FK(\()p FC(u)2132 709 y FB(1)2171 694 y FC(;)17 +b(u)2271 709 y FB(2)2310 694 y FK(\))234 815 y(5:)144 +b FF(else)32 b(if)42 b FC(u)828 830 y FB(1)895 815 y +FI(2)28 b(f)p FK(0)p FC(;)17 b FK(1)p FI(g)31 b FF(and)j +FC(u)1530 830 y FB(2)1596 815 y FI(2)28 b(f)p FK(0)p +FC(;)17 b FK(1)p FI(g)32 b FF(then)h FD(u)28 b FI( )f +FC(op)p FK(\()p FC(u)2613 830 y FB(1)2652 815 y FC(;)17 +b(u)2752 830 y FB(2)2790 815 y FK(\))234 935 y(6:)144 +b FF(else)32 b(if)42 b FD(var)p FK(\()p FC(u)1002 950 +y FB(1)1041 935 y FK(\))27 b(=)h FD(var)p FK(\()p FC(u)1440 +950 y FB(2)1478 935 y FK(\))33 b FF(then)234 1055 y FK(7:)363 +b FD(u)28 b FI( )f FE(mk)q FK(\()p FD(var)p FK(\()p FC(u)1286 +1070 y FB(1)1325 1055 y FK(\))p FC(;)17 b FE(app)o FK(\()p +FD(low)10 b FK(\()p FC(u)1861 1070 y FB(1)1900 1055 y +FK(\))p FC(;)17 b FD(low)9 b FK(\()p FC(u)2225 1070 y +FB(2)2264 1055 y FK(\)\))p FC(;)17 b FE(app)o FK(\()p +FD(high)7 b FK(\()p FC(u)2870 1070 y FB(1)2909 1055 y +FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)3266 1070 +y FB(2)3305 1055 y FK(\)\)\))234 1176 y(8)171 b FF(else)32 +b(if)42 b FD(var)p FK(\()p FC(u)1002 1191 y FB(1)1041 +1176 y FK(\))27 b FC(<)h FD(var)p FK(\()p FC(u)1440 1191 +y FB(2)1478 1176 y FK(\))33 b FF(then)234 1296 y FK(9)390 +b FD(u)28 b FI( )f FE(mk)q FK(\()p FD(var)p FK(\()p FC(u)1286 +1311 y FB(1)1325 1296 y FK(\))p FC(;)17 b FE(app)o FK(\()p +FD(low)10 b FK(\()p FC(u)1861 1311 y FB(1)1900 1296 y +FK(\))p FC(;)17 b(u)2038 1311 y FB(2)2076 1296 y FK(\))p +FC(;)g FE(app)o FK(\()p FD(high)7 b FK(\()p FC(u)2644 +1311 y FB(1)2683 1296 y FK(\))p FC(;)17 b(u)2821 1311 +y FB(2)2859 1296 y FK(\)\))234 1417 y(10:)95 b FF(else)32 +b FK(\()p FI(\003)g FD(var)p FK(\()p FC(u)1014 1432 y +FB(1)1053 1417 y FK(\))27 b FC(>)h FD(var)p FK(\()p FC(u)1452 +1432 y FB(2)1491 1417 y FK(\))k FI(\003)p FK(\))234 1537 +y(11:)314 b FD(u)28 b FI( )f FE(mk)q FK(\()p FD(var)p +FK(\()p FC(u)1286 1552 y FB(2)1325 1537 y FK(\))p FC(;)17 +b FE(app)o FK(\()p FC(u)1673 1552 y FB(1)1712 1537 y +FC(;)g FD(low)9 b FK(\()p FC(u)1999 1552 y FB(2)2038 +1537 y FK(\)\))p FC(;)17 b FE(app)o FK(\()p FC(u)2424 +1552 y FB(1)2463 1537 y FC(;)g FD(high)7 b FK(\()p FC(u)2783 +1552 y FB(2)2821 1537 y FK(\)\)\))234 1657 y(12:)95 b +FC(G)p FK(\()p FC(u)625 1672 y FB(1)664 1657 y FC(;)17 +b(u)764 1672 y FB(2)802 1657 y FK(\))28 b FI( )f FD(u)234 +1778 y FK(13:)95 b FF(return)32 b FD(u)234 1898 y FK(14:)22 +b FF(end)33 b FE(app)234 2019 y FK(15:)234 2139 y(16:)22 +b FF(return)32 b FE(app)o FK(\()p FC(u)990 2154 y FB(1)1029 +2139 y FC(;)17 b(u)1129 2154 y FB(2)1168 2139 y FK(\))817 +2463 y(Figure)32 b(11:)43 b(The)33 b(algorithm)d FE(appl)-7 +b(y)p FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(op;)17 +b(u)2702 2478 y FB(1)2740 2463 y FC(;)g(u)2840 2478 y +FB(2)2878 2463 y FK(\).)137 2761 y(All)33 b(the)j(binary)f(Bo)s(olean)f +(op)s(erators)h(on)g(R)m(OBDDs)g(are)g(implemen)m(ted)f(b)m(y)i(the)g +(same)f(general)-9 2881 y(algorithm)23 b FE(appl)-7 b(y)p +FK(\()p FC(op;)17 b(u)941 2896 y FB(1)980 2881 y FC(;)g(u)1080 +2896 y FB(2)1118 2881 y FK(\))27 b(that)g(for)g(t)m(w)m(o)h(R)m(OBDDs)e +(computes)i(the)f(R)m(OBDD)f(for)h(the)g(Bo)s(olean)-9 +3001 y(expression)33 b FC(t)495 2965 y FA(u)536 2974 +y Fx(1)606 3001 y FC(op)f(t)769 2965 y FA(u)810 2974 +y Fx(2)848 3001 y FK(.)44 b(The)32 b(construction)g(of)g +FE(appl)-7 b(y)31 b FK(is)g(based)i(on)f(the)g(Shannon)g(expansion)g +(\(2\):)1373 3180 y FC(t)61 b FK(=)f FC(x)28 b FI(!)f +FC(t)p FK([1)p FC(=x)p FK(])q FC(;)17 b(t)p FK([0)p FC(=x)p +FK(])f FC(:)-9 3360 y FK(Observ)m(e)34 b(that)e(for)g(all)f(Bo)s(olean) +g(op)s(erators)i FD(op)f FK(the)h(follo)m(wing)d(holds:)777 +3539 y(\()p FC(x)e FI(!)f FC(t)1060 3554 y FB(1)1100 +3539 y FC(;)17 b(t)1179 3554 y FB(2)1218 3539 y FK(\))33 +b FC(op)f FK(\()p FC(x)c FI(!)f FC(t)1700 3498 y Fy(0)1700 +3563 y FB(1)1740 3539 y FC(;)17 b(t)1819 3498 y Fy(0)1819 +3563 y FB(2)1858 3539 y FK(\))61 b(=)f FC(x)28 b FI(!)f +FC(t)2338 3554 y FB(1)2410 3539 y FC(op)33 b(t)2574 3498 +y Fy(0)2574 3563 y FB(1)2613 3539 y FC(;)h(t)2709 3554 +y FB(2)2781 3539 y FC(op)e(t)2944 3498 y Fy(0)2944 3563 +y FB(2)3645 3539 y FK(\(4\))-9 3718 y(If)23 b(w)m(e)h(start)f(from)f +(the)i(ro)s(ot)e(of)h(the)h(t)m(w)m(o)g(R)m(OBDDs)e(w)m(e)j(can)e +(construct)i(the)e(R)m(OBDD)f(of)h(the)h(result)f(b)m(y)-9 +3838 y(recursiv)m(ely)30 b(constructing)g(the)g(lo)m(w-)f(and)h(the)g +(high-branc)m(hes)g(and)g(then)g(form)f(the)h(new)g(ro)s(ot)f(from)-9 +3959 y(these.)55 b(Again,)36 b(to)g(ensure)i(that)e(the)h(result)f(is)g +(reduced,)i(w)m(e)g(create)f(the)f(no)s(de)h(through)f(a)g(call)e(to)-9 +4079 y FE(mk)p FK(.)45 b(Moreo)m(v)m(er,)35 b(to)d(a)m(v)m(oid)h(an)g +(exp)s(onen)m(tial)g(blo)m(w-up)f(of)h(recursiv)m(e)h(calls,)e +FD(dynamic)j(pr)-5 b(o)g(gr)g(amming)-9 4199 y FK(is)32 +b(used.)44 b(The)34 b(algorithm)29 b(is)j(sho)m(wn)i(in)e(\014gure)h +(11.)137 4320 y(Dynamic)e(programming)f(is)i(implemen)m(ted)f(using)h +(a)h(table)e(of)i(results)g FC(G)p FK(.)43 b(Eac)m(h)33 +b(en)m(try)h(\()p FC(i;)17 b(j)6 b FK(\))33 b(is)-9 4440 +y(either)j FD(empty)h FK(or)f(con)m(tains)h(the)g(earlier)e(computed)i +(result)g(of)f FE(app)p FK(\()p FC(i;)17 b(j)6 b FK(\).)55 +b(The)38 b(algorithm)c(distin-)-9 4560 y(guishes)k(b)s(et)m(w)m(een)i +(four)d(di\013eren)m(t)h(cases,)j(the)d(\014rst)g(of)f(them)h(handles)g +(the)g(situation)e(where)j(b)s(oth)-9 4681 y(argumen)m(ts)e(are)g +(terminal)d(no)s(des,)39 b(the)e(remaining)e(three)j(handle)e(the)i +(situations)e(where)i(at)e(least)-9 4801 y(one)c(argumen)m(t)h(is)f(a)g +(v)-5 b(ariable)31 b(no)s(de.)137 4922 y(If)i(b)s(oth)g +FC(u)522 4937 y FB(1)594 4922 y FK(and)h FC(u)841 4937 +y FB(2)913 4922 y FK(are)f(terminal,)e(a)i(new)i FD(terminal)g(no)-5 +b(de)40 b FK(is)32 b(computed)i(ha)m(ving)f(the)h(v)-5 +b(alue)32 b(of)-9 5042 y FD(op)c FK(applied)f(to)h(the)h(t)m(w)m(o)g +(truth)g(v)-5 b(alues.)42 b(\(Recall,)27 b(that)i(terminal)d(no)s(de)i +(0)g(is)g(represen)m(ted)j(b)m(y)f(a)e(no)s(de)-9 5162 +y(with)k(iden)m(tit)m(y)g(0)g(and)h(similarly)c(for)j(1.\))p +eop +%%Page: 20 21 +20 20 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(20)137 -171 y(If)40 b(at)g(least)h(one) +f(of)g FC(u)967 -156 y FB(1)1047 -171 y FK(and)g FC(u)1300 +-156 y FB(2)1380 -171 y FK(are)g(non-terminal,)g(w)m(e)i(pro)s(ceed)f +(according)f(to)g(the)h(v)-5 b(ariable)-9 -51 y(index.)91 +b(If)48 b(the)h(no)s(des)g(ha)m(v)m(e)g(the)g(same)f(index,)53 +b(the)c(t)m(w)m(o)g(lo)m(w-branc)m(hes)g(are)g(paired)e(and)i +FE(app)-9 70 y FK(recursiv)m(ely)30 b(computed)f(on)g(them.)42 +b(Similarly)25 b(for)k(the)g(high-branc)m(hes.)43 b(This)29 +b(corresp)s(onds)i(exactly)-9 190 y(to)25 b(the)i(case)g(sho)m(wn)h(in) +d(equation)h(\(4\).)41 b(If)26 b(they)h(ha)m(v)m(e)h(di\013eren)m(t)e +(indices,)h(w)m(e)g(pro)s(ceed)g(b)m(y)g(pairing)e(the)-9 +310 y(no)s(de)36 b(with)g(lo)m(w)m(est)i(index)e(with)g(the)h(lo)m(w-)f +(and)h(high-branc)m(hes)g(of)f(the)h(other.)55 b(This)37 +b(corresp)s(onds)-9 431 y(to)32 b(the)h(equation)980 +551 y(\()p FC(x)1073 566 y FA(i)1130 551 y FI(!)27 b +FC(t)1292 566 y FB(1)1331 551 y FC(;)17 b(t)1410 566 +y FB(2)1450 551 y FK(\))32 b FD(op)g FC(t)93 b FK(=)g +FC(x)2004 566 y FA(i)2060 551 y FI(!)28 b FC(t)2223 566 +y FB(1)2295 551 y FD(op)k FC(t;)17 b(t)2541 566 y FB(2)2613 +551 y FD(op)32 b FC(t)865 b FK(\(5\))-9 716 y(whic)m(h)41 +b(holds)f(for)g(all)f FC(t)p FK(.)67 b(Since)41 b(w)m(e)h(ha)m(v)m(e)g +(tak)m(en)f(the)g(index)g(of)f(the)i(terminals)c(to)i(b)s(e)h(one)g +(larger)-9 836 y(than)30 b(the)h(index)g(of)g(the)g(non-terminals,)e +(the)i(last)f(t)m(w)m(o)h(cases,)i FD(var)10 b FK(\()p +FC(u)2605 851 y FB(1)2644 836 y FK(\))28 b FC(<)f FD(var)11 +b FK(\()p FC(u)3054 851 y FB(2)3093 836 y FK(\))30 b(and)h +FD(var)11 b FK(\()p FC(u)3590 851 y FB(1)3629 836 y FK(\))27 +b FC(>)-9 956 y FD(var)10 b FK(\()p FC(u)231 971 y FB(2)270 +956 y FK(\),)32 b(tak)m(e)i(accoun)m(t)f(of)f(the)h(situations)f(where) +i(one)e(of)h(the)g(no)s(des)g(is)f(a)g(terminal.)137 +1077 y(Figure)c(12)g(sho)m(ws)j(an)e(example)f(of)h(applying)e(the)j +(algorithm)c(on)i(t)m(w)m(o)i(small)d(R)m(OBDDs.)41 b(Notice)-9 +1197 y(ho)m(w)33 b(pairs)f(of)g(no)s(des)h(from)e(the)i(t)m(w)m(o)h(R)m +(OBDDs)e(are)g(com)m(bined)h(and)f(computed.)137 1318 +y(T)-8 b(o)35 b(analyze)g(the)h(complexit)m(y)e(of)41 +b FE(appl)-7 b(y)37 b FK(w)m(e)f(let)f FI(j)p FC(u)p +FI(j)f FK(denote)i(the)f(n)m(um)m(b)s(er)h(of)e(no)s(des)i(that)f(can) +-9 1438 y(b)s(e)41 b(reac)m(hed)h(from)d FC(u)h FK(in)g(the)i(R)m +(OBDD.)e(Assume)h(that)g FC(G)f FK(can)h(b)s(e)g(implemen)m(ted)f(with) +g(constan)m(t)-9 1558 y(lo)s(okup)f(and)h(insertion)f(times.)64 +b(\(See)41 b(section)f(5)f(for)h(details)f(on)g(ho)m(w)i(to)e(ac)m +(hiev)m(e)i(this.\))65 b(Due)40 b(to)-9 1679 y(the)29 +b(dynamic)f(programming)e(at)j(most)g FI(j)p FC(u)1578 +1694 y FB(1)1616 1679 y FI(j)17 b(j)p FC(u)1745 1694 +y FB(2)1783 1679 y FI(j)29 b FK(calls)f(to)g FE(Appl)-7 +b(y)31 b FK(are)e(generated.)43 b(Eac)m(h)30 b(call)e(tak)m(es)-9 +1799 y(constan)m(t)33 b(time.)42 b(The)34 b(total)d(running)h(time)f +(is)h(therefore)h FC(O)s FK(\()p FI(j)p FC(u)2370 1814 +y FB(1)2408 1799 y FI(j)17 b(j)p FC(u)2537 1814 y FB(2)2575 +1799 y FI(j)p FK(\).)-9 2084 y Fn(4.4)135 b(Restrict)-9 +2269 y FK(The)34 b(next)g(op)s(eration)f(w)m(e)h(consider)g(is)f(the)h +FD(r)-5 b(estriction)41 b FK(of)33 b(a)g(R)m(OBDD)f FC(u)p +FK(.)46 b(That)34 b(is,)f(giv)m(en)h(a)f(truth)-9 2390 +y(assignmen)m(t,)d(for)g(example)g([0)p FC(=x)1225 2405 +y FB(3)1264 2390 y FC(;)17 b FK(1)p FC(=x)1461 2405 y +FB(5)1501 2390 y FC(;)g FK(1)p FC(=x)1698 2405 y FB(6)1737 +2390 y FK(],)31 b(w)m(e)g(w)m(an)m(t)g(to)f(compute)h(the)g(R)m(OBDD)e +(for)h FC(t)3451 2353 y FA(u)3526 2390 y FK(under)-9 +2510 y(this)e(restriction,)g(i.e.,)i(\014nd)f(the)g(R)m(OBDD)e(for)h +FC(t)1775 2474 y FA(u)1821 2510 y FK([0)p FC(=x)2001 +2525 y FB(3)2040 2510 y FC(;)17 b FK(1)p FC(=x)2237 2525 +y FB(5)2276 2510 y FC(;)g FK(1)p FC(=x)2473 2525 y FB(6)2512 +2510 y FK(].)43 b(As)29 b(an)f(example)h(consider)g(the)-9 +2630 y(R)m(OBDD)j(of)g(\014gure)i(10\(g\))e(\(rep)s(eated)i(b)s(elo)m +(w)f(to)g(the)h(left\))e(represen)m(ting)i(the)g(Bo)s(olean)e +(expression)-9 2751 y(\()p FC(x)84 2766 y FB(1)173 2751 +y FI(,)49 b FC(x)377 2766 y FB(2)417 2751 y FK(\))31 +b FI(_)g FC(x)638 2766 y FB(3)678 2751 y FK(.)82 b(Restricting)44 +b(it)h(with)g(resp)s(ect)h(to)f(the)h(truth)g(assignmen)m(t)f([0)p +FC(=x)3268 2766 y FB(2)3308 2751 y FK(])g(yields)g(an)-9 +2871 y(R)m(OBDD)38 b(for)h(\()p FI(:)p FC(x)708 2886 +y FB(1)776 2871 y FI(_)27 b FC(x)924 2886 y FB(3)964 +2871 y FK(\).)65 b(It)39 b(is)h(constructed)h(b)m(y)g(replacing)d(eac)m +(h)j(o)s(ccurrence)g(of)e(a)h(no)s(de)f(with)-9 2991 +y(lab)s(el)30 b FC(x)281 3006 y FB(2)354 2991 y FK(b)m(y)j(its)f(left)g +(branc)m(h)h(yielding)e(the)i(R)m(OBDD)f(at)g(the)h(righ)m(t:)1102 +4136 y @beginspecial 36 @llx 36 @lly 181 @urx 289 @ury +725 @rwi @setspecial +%%BeginDocument: restrict1.ps +save +/DotDict 200 dict def +DotDict begin + +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (() show i str cvs show (,) show j str cvs show ()) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +/arrowhead { + /arrowwidth exch def + /arrowlength exch def + gsave + 3 1 roll + translate + rotate + newpath + arrowlength arrowwidth 2 div moveto + 0 0 lineto + arrowlength arrowwidth -2 div lineto + closepath fill + stroke + grestore +} def + +% draw aligned label in bounding box aligned to current point +% alignfactor tells what fraction to place on the left. +% -.5 is centered. +/alignedtext { % text labelwidth fontsz alignfactor + /alignfactor exch def + /fontsz exch def + /width exch def + /text exch def + gsave + % even if node or edge is dashed, don't paint text with dashes + [] 0 setdash + currentpoint newpath moveto + text stringwidth pop + alignfactor mul fontsz -.3 mul rmoveto + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +14 default-font-family set_font +% /arrowlength 10 def +% /arrowwidth 5 def +gsave +35 35 146 254 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% 0 +gsave 10 dict begin +newpath 144 36 moveto +90 36 lineto +90 0 lineto +144 0 lineto +closepath +stroke +gsave 10 dict begin +117 19 moveto (0) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 1 +gsave 10 dict begin +newpath 72 36 moveto +18 36 lineto +18 0 lineto +72 0 lineto +closepath +stroke +gsave 10 dict begin +45 19 moveto (1) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 14 +gsave 10 dict begin +32 234 27 18 ellipse_path +stroke +gsave 10 dict begin +32 235 moveto (x1) 14 14.00 -0.50 alignedtext +end grestore +end grestore + +% 12 +gsave 10 dict begin +27 162 27 18 ellipse_path +stroke +gsave 10 dict begin +27 163 moveto (x2) 14 14.00 -0.50 alignedtext +end grestore +end grestore + +% 14 -> 12 +gsave 10 dict begin +dotted +newpath 31 216 moveto +30 208 29 198 29 189 curveto +stroke +28 180 83.66 10.00 5.00 arrowhead +end grestore + +% 13 +gsave 10 dict begin +99 162 27 18 ellipse_path +stroke +gsave 10 dict begin +99 163 moveto (x2) 14 14.00 -0.50 alignedtext +end grestore +end grestore + +% 14 -> 13 +newpath 47 218 moveto +56 208 68 194 78 183 curveto +stroke +84 177 135.00 10.00 5.00 arrowhead + +% 12 -> 1 +gsave 10 dict begin +dotted +newpath 27 144 moveto +27 123 27 91 29 72 curveto +31 64 33 55 36 45 curveto +stroke +39 36 108.43 10.00 5.00 arrowhead +end grestore + +% 5 +gsave 10 dict begin +68 90 27 18 ellipse_path +stroke +gsave 10 dict begin +68 91 moveto (x3) 14 14.00 -0.50 alignedtext +end grestore +end grestore + +% 12 -> 5 +newpath 37 145 moveto +42 136 48 125 54 115 curveto +stroke +58 107 116.57 10.00 5.00 arrowhead + +% 13 -> 1 +newpath 105 144 moveto +111 123 118 88 107 72 curveto +100 61 87 50 75 40 curveto +stroke +70 36 38.66 10.00 5.00 arrowhead + +% 13 -> 5 +gsave 10 dict begin +dotted +newpath 91 145 moveto +87 136 83 125 78 115 curveto +stroke +75 107 69.44 10.00 5.00 arrowhead +end grestore + +% 5 -> 0 +gsave 10 dict begin +dotted +newpath 79 73 moveto +85 64 93 53 100 43 curveto +stroke +105 36 125.54 10.00 5.00 arrowhead +end grestore + +% 5 -> 1 +newpath 62 72 moveto +60 64 56 54 53 44 curveto +stroke +51 36 75.96 10.00 5.00 arrowhead +endpage +grestore +end +restore +%%EndDocument + @endspecial 1027 w @beginspecial 36 @llx 36 @lly 163 +@urx 217 @ury 635 @rwi @setspecial +%%BeginDocument: restrict2.ps +save +/DotDict 200 dict def +DotDict begin + +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (() show i str cvs show (,) show j str cvs show ()) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +/arrowhead { + /arrowwidth exch def + /arrowlength exch def + gsave + 3 1 roll + translate + rotate + newpath + arrowlength arrowwidth 2 div moveto + 0 0 lineto + arrowlength arrowwidth -2 div lineto + closepath fill + stroke + grestore +} def + +% draw aligned label in bounding box aligned to current point +% alignfactor tells what fraction to place on the left. +% -.5 is centered. +/alignedtext { % text labelwidth fontsz alignfactor + /alignfactor exch def + /fontsz exch def + /width exch def + /text exch def + gsave + % even if node or edge is dashed, don't paint text with dashes + [] 0 setdash + currentpoint newpath moveto + text stringwidth pop + alignfactor mul fontsz -.3 mul rmoveto + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +14 default-font-family set_font +% /arrowlength 10 def +% /arrowwidth 5 def +gsave +35 35 128 182 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% 0 +gsave 10 dict begin +newpath 126 36 moveto +72 36 lineto +72 0 lineto +126 0 lineto +closepath +stroke +gsave 10 dict begin +99 19 moveto (0) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 1 +gsave 10 dict begin +newpath 54 36 moveto +0 36 lineto +0 0 lineto +54 0 lineto +closepath +stroke +gsave 10 dict begin +27 19 moveto (1) 7 14.00 -0.50 alignedtext +end grestore +end grestore + +% 18 +gsave 10 dict begin +41 162 27 18 ellipse_path +stroke +gsave 10 dict begin +41 163 moveto (x1) 14 14.00 -0.50 alignedtext +end grestore +end grestore + +% 18 -> 1 +gsave 10 dict begin +dotted +newpath 39 144 moveto +36 118 32 71 29 42 curveto +stroke +29 36 90.00 10.00 5.00 arrowhead +end grestore + +% 5 +gsave 10 dict begin +82 90 27 18 ellipse_path +stroke +gsave 10 dict begin +82 91 moveto (x3) 14 14.00 -0.50 alignedtext +end grestore +end grestore + +% 18 -> 5 +newpath 51 145 moveto +56 136 62 125 68 115 curveto +stroke +72 107 116.57 10.00 5.00 arrowhead + +% 5 -> 0 +gsave 10 dict begin +dotted +newpath 86 72 moveto +88 64 91 54 93 44 curveto +stroke +95 36 104.04 10.00 5.00 arrowhead +end grestore + +% 5 -> 1 +newpath 70 74 moveto +63 64 54 53 46 43 curveto +stroke +41 36 54.46 10.00 5.00 arrowhead +endpage +grestore +end +restore +%%EndDocument + @endspecial -9 4320 a(The)k(algorithm)c(again)i(uses)j +FE(mk)f FK(to)f(ensure)i(that)f(the)g(resulting)e(OBDD)g(is)h(reduced.) +57 b(Figure)36 b(13)-9 4440 y(sho)m(ws)27 b(the)f(algorithm)c(in)j(the) +i(case)f(where)h(only)e(singleton)g(truth)h(assignmen)m(ts)g(\([)p +FC(b=x)3210 4455 y FA(j)3247 4440 y FK(],)h FC(b)h FI(2)g(f)p +FK(0)p FC(;)17 b FK(1)p FI(g)p FK(\))-9 4560 y(are)47 +b(allo)m(w)m(ed.)86 b(In)m(tuitiv)m(ely)-8 b(,)51 b(in)46 +b(computing)g FE(restrict)o FK(\()p FC(u;)17 b(j;)g(b)p +FK(\))47 b(w)m(e)h(searc)m(h)h(for)d(all)g(no)s(des)h(with)-9 +4681 y FD(var)52 b FK(=)41 b FC(j)47 b FK(and)41 b(replace)f(them)h(b)m +(y)h(their)e(lo)m(w-)g(or)g(high-son)g(dep)s(ending)h(on)g +FC(b)p FK(.)68 b(Since)41 b(this)f(migh)m(t)-9 4801 y(force)33 +b(no)s(des)g(ab)s(o)m(v)m(e)h(the)g(p)s(oin)m(t)e(of)g(replacemen)h(to) +g(b)s(ecome)g(equal,)g(it)f(is)g(follo)m(w)m(ed)g(b)m(y)i(a)f +(reduction)-9 4922 y(\(through)g(the)i(calls)d(to)i FE(mk)p +FK(\).)48 b(Due)34 b(to)g(the)g(t)m(w)m(o)h(recursiv)m(e)g(calls)e(in)g +(line)g(3,)h(the)g(algorithm)d(has)j(an)-9 5042 y(exp)s(onen)m(tial)d +(running)g(time,)g(see)i(exercise)h(4.7)d(for)g(an)h(impro)m(v)m(emen)m +(t)g(that)g(reduces)h(this)f(to)g(linear)-9 5162 y(time.)p +eop +%%Page: 21 22 +21 21 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(21)-9 3460 y @beginspecial +0 @llx 0 @lly 471 @urx 342 @ury 4710 @rwi @setspecial +%%BeginDocument: apply-ex.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-11.0 348.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 8527 m 0 0 l 11790 0 l 11790 8527 l cp clip + 0.04094 0.04094 sc +7.500 slw +% Ellipse +n 5325 3630 180 180 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 4564 4434 m 4564 4182 l 4275 4182 l 4275 4434 l cp gs col-1 s gr +% Polyline +n 1324 4479 m 1324 4227 l 1035 4227 l 1035 4479 l cp gs col-1 s gr +% Polyline +n 2089 4479 m 2089 4227 l 1800 4227 l 1800 4479 l cp gs col-1 s gr +% Polyline +n 5509 4434 m 5509 4182 l 5220 4182 l 5220 4434 l cp gs col-1 s gr +% Polyline +n 9874 4344 m 9874 4092 l 9585 4092 l 9585 4344 l cp gs col-1 s gr +% Polyline +n 10594 4344 m 10594 4092 l 10305 4092 l 10305 4344 l cp gs col-1 s gr +% Ellipse +n 900 7800 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 2400 7800 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 1650 7200 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 2850 6600 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4050 7200 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4800 7800 300 150 0 360 DrawEllipse gs col-1 s gr + + [60] 0 sd +% Ellipse +n 5400 7200 300 150 0 360 DrawEllipse gs col-1 s gr + [] 0 sd +% Ellipse +n 5850 6600 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4350 6000 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 9525 6600 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 8475 6000 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 7350 6600 300 150 0 360 DrawEllipse gs col-1 s gr + + [60] 0 sd +% Ellipse +n 7800 7200 300 150 0 360 DrawEllipse gs col-1 s gr + [] 0 sd +% Ellipse +n 6525 5400 300 150 0 360 DrawEllipse gs col-1 s gr + + [60] 0 sd +% Ellipse +n 10650 7800 300 150 0 360 DrawEllipse gs col-1 s gr + [] 0 sd +% Ellipse +n 10215 7200 300 150 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 8670 7200 300 150 0 360 DrawEllipse gs col-1 s gr + + [60] 0 sd +% Ellipse +n 8265 7800 300 150 0 360 DrawEllipse gs col-1 s gr + [] 0 sd + [60] 0 sd +% Ellipse +n 9795 7815 300 150 0 360 DrawEllipse gs col-1 s gr + [] 0 sd +% Ellipse +n 1140 2940 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 2070 2940 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 1605 3660 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 1155 1500 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 2085 1500 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 1635 780 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 1605 2190 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4935 825 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 4455 2220 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 5385 2220 180 180 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 10110 765 165 165 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 9600 1440 165 165 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 10605 1440 165 165 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 9600 2100 165 165 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 10605 2100 165 165 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 9600 2760 165 165 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 10605 2760 165 165 0 360 DrawEllipse gs col-1 s gr + +% Ellipse +n 10110 3435 165 165 0 360 DrawEllipse gs col-1 s gr + +% Polyline +n 975 7950 m 1275 8250 l gs col-1 s gr +% Polyline +n 1725 7350 m 2400 7650 l gs col-1 s gr +% Polyline +n 2475 7950 m 2775 8250 l gs col-1 s gr +% Polyline +n 2925 6750 m 4050 7050 l gs col-1 s gr +% Polyline +n 4125 7350 m 4800 7650 l gs col-1 s gr +% Polyline +n 4875 7950 m 5175 8250 l gs col-1 s gr +% Polyline +n 4425 6150 m 5850 6450 l gs col-1 s gr +% Polyline + [60] 0 sd +n 825 7950 m 525 8250 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 1575 7350 m 900 7650 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 2250 7950 m 2025 8250 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 2700 6750 m 1650 7050 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3900 7350 m 3525 7725 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4725 7950 m 4425 8250 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4275 6150 m 2850 6450 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 5775 6750 m 5400 7050 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 6375 5550 m 4350 5850 l gs col-1 s gr [] 0 sd +% Polyline +n 6600 5550 m 8475 5850 l gs col-1 s gr +% Polyline + [60] 0 sd +n 6450 7125 m 6450 7350 l 6000 7350 l 6000 7125 l cp gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 5400 8250 m 5400 8475 l 4950 8475 l 4950 8250 l cp gs col-1 s gr [] 0 sd +% Polyline +n 4650 8250 m 4650 8475 l 4200 8475 l 4200 8250 l cp gs col-1 s gr +% Polyline + [60] 0 sd +n 3750 7725 m 3750 7950 l 3300 7950 l 3300 7725 l cp gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 3000 8250 m 3000 8475 l 2550 8475 l 2550 8250 l cp gs col-1 s gr [] 0 sd +% Polyline +n 2250 8250 m 2250 8475 l 1800 8475 l 1800 8250 l cp gs col-1 s gr +% Polyline +n 1500 8250 m 1500 8475 l 1050 8475 l 1050 8250 l cp gs col-1 s gr +% Polyline +n 750 8250 m 750 8475 l 300 8475 l 300 8250 l cp gs col-1 s gr +% Polyline +n 5925 6750 m 6225 7125 l gs col-1 s gr +% Polyline +n 8550 6150 m 9525 6450 l gs col-1 s gr +% Polyline + [60] 0 sd +n 8400 6150 m 7350 6450 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 7200 7125 m 7200 7350 l 6750 7350 l 6750 7125 l cp gs col-1 s gr [] 0 sd +% Polyline +n 7425 6750 m 7800 7050 l gs col-1 s gr +% Polyline + [60] 0 sd +n 7275 6750 m 6975 7125 l gs col-1 s gr [] 0 sd +% Polyline +n 9600 6750 m 10200 7050 l gs col-1 s gr +% Polyline +n 10275 7350 m 10650 7650 l gs col-1 s gr +% Polyline + [60] 0 sd +n 9450 6750 m 8700 7050 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 10125 7350 m 9780 7665 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 8625 7350 m 8250 7650 l gs col-1 s gr [] 0 sd +% Polyline +n 8775 7350 m 9105 7725 l gs col-1 s gr +% Polyline + [60] 0 sd +n 9315 7725 m 9315 7950 l 8865 7950 l 8865 7725 l cp gs col-1 s gr [] 0 sd +% Polyline +n 1755 2310 m 2070 2760 l gs col-1 s gr +% Polyline + [60] 0 sd +n 1485 2310 m 1140 2760 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 1260 3090 m 1515 3480 l gs col-1 s gr [] 0 sd +% Polyline +n 2055 3120 m 1695 3495 l gs col-1 s gr +% Polyline +n 1770 870 m 2085 1320 l gs col-1 s gr +% Polyline + [60] 0 sd +n 1500 870 m 1155 1320 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 1275 1650 m 1530 2040 l gs col-1 s gr [] 0 sd +% Polyline +n 2070 1680 m 1710 2055 l gs col-1 s gr +% Polyline + [60] 0 sd +n 1695 3810 m 1950 4200 l gs col-1 s gr [] 0 sd +% Polyline +n 1500 3825 m 1215 4185 l gs col-1 s gr +% Polyline +n 1140 3120 m 1215 4200 l gs col-1 s gr +% Polyline +n 4380 2400 m 4440 4170 l gs col-1 s gr +% Polyline +n 5220 3780 m 4440 4170 l gs col-1 s gr +% Polyline + [60] 0 sd +n 5385 3810 m 5385 4170 l gs col-1 s gr [] 0 sd +% Polyline +n 5070 915 m 5385 2040 l gs col-1 s gr +% Polyline + [60] 0 sd +n 4800 915 m 4455 2040 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4530 2400 m 5310 3450 l gs col-1 s gr [] 0 sd +% Polyline +n 5400 2400 m 5310 3450 l gs col-1 s gr +% Polyline + [60] 0 sd +n 5325 2400 m 4440 4170 l gs col-1 s gr [] 0 sd +% Polyline +n 10185 930 m 10605 1260 l gs col-1 s gr +% Polyline +n 10605 1605 m 10605 1935 l gs col-1 s gr +% Polyline +n 10605 2265 m 10605 2595 l gs col-1 s gr +% Polyline +n 10515 2940 m 10110 3270 l gs col-1 s gr +% Polyline +n 10185 3600 m 10440 4095 l gs col-1 s gr +% Polyline + [60] 0 sd +n 10020 930 m 9600 1260 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 9600 1605 m 9600 1935 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 9600 2265 m 9600 2595 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 9690 2940 m 10020 3270 l gs col-1 s gr [] 0 sd +% Polyline + [60] 0 sd +n 10020 3600 m 9765 4095 l gs col-1 s gr [] 0 sd +% Interp Spline +gs n 1050 1650 m + 806.8 2403.2 731.8 2740.7 750 3000 curveto + 766.9 3240.3 879.4 3540.3 1200 4200 curveto + gs col-1 s gr + gr + +% Interp Spline +gs [60] 0 sd +n 2160 1665 m + 2196.2 1945.9 2200.0 2069.7 2175 2160 curveto + 2068.4 2545.6 1454.0 3139.2 1320 3495 curveto + 1275.7 3612.5 1249.5 3785.0 1215 4185 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs [60] 0 sd +n 2145 3120 m + 2110.3 3512.7 2069.1 3681.5 1980 3795 curveto + 1871.6 3933.1 1684.1 4030.6 1230 4185 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs [60] 0 sd +n 10770 1515 m + 11081.9 1705.5 11206.4 1809.7 11265 1935 curveto + 11421.6 2271.1 11401.1 2934.5 11265 3270 curveto + 11173.2 3486.9 10965.8 3695.2 10440 4095 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs [60] 0 sd +n 10770 2190 m + 11032.0 2385.7 11135.7 2489.9 11175 2595 curveto + 11241.0 2745.3 11231.8 3040.6 11175 3180 curveto + 11103.9 3400.7 10917.2 3629.9 10440 4095 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs [60] 0 sd +n 10770 2760 m + 10990.1 2910.0 11073.0 2993.3 11100 3105 curveto + 11116.8 3179.5 11044.3 3295.2 11010 3345 curveto + 10936.3 3498.1 10791.1 3685.6 10440 4095 curveto + gs col-1 s gr + gr + [] 0 sd +% Interp Spline +gs n 9435 1515 m + 9120.8 1700.7 8996.3 1804.9 8940 1935 curveto + 8779.9 2306.8 8795.8 2993.7 9030 3345 curveto + 9217.1 3651.8 9569.7 3839.3 10440 4095 curveto + gs col-1 s gr + gr + +% Interp Spline +gs n 9435 2190 m + 9168.1 2377.2 9064.4 2481.4 9030 2595 curveto + 8962.3 2780.3 9005.7 3107.5 9105 3270 curveto + 9284.5 3546.1 9616.4 3754.4 10440 4095 curveto + gs col-1 s gr + gr + +% Interp Spline +gs n 9435 2850 m + 9306.5 3013.7 9265.1 3097.1 9270 3180 curveto + 9284.4 3312.0 9451.8 3448.7 9525 3510 curveto + 9649.8 3641.2 9857.2 3787.0 10350 4095 curveto + gs col-1 s gr + gr + +$F2psEnd +rs +%%EndDocument + @endspecial 1007 871 a FA(x)1047 880 y Fx(1)1007 1102 +y FA(x)1047 1111 y Fx(2)1007 1358 y FA(x)1047 1367 y +Fx(3)1007 1613 y FA(x)1047 1622 y Fx(4)1007 1844 y FA(x)1047 +1853 y Fx(5)1691 1839 y Fo(2)1386 2056 y(0)281 2071 y(0)225 +b(1)1709 2056 y(1)3198 2025 y(1)210 b(0)3785 2432 y FA(x)3825 +2441 y Fx(1)3785 2637 y FA(x)3825 2646 y Fx(2)3785 2842 +y FA(x)3825 2851 y Fx(3)3785 3046 y FA(x)3825 3055 y +Fx(4)3785 3251 y FA(x)3825 3260 y Fx(5)26 3430 y Fi(1,1)165 +b(0,0)f(0,1)h(0,0)1049 3251 y(0,0)1356 3430 y(1,0)g(0,0)1970 +3046 y(0,0)152 3251 y Fo(2,2)418 b(0,2)408 3046 y(3,2)817 +2842 y(5,3)1227 3046 y(4,0)1482 3251 y(2,0)1329 2637 +y(6,3)1841 2842 y(0,3)1687 3046 y(0,2)3094 2842 y(5,4)2736 +2637 y(7,4)2352 2842 y(0,4)2506 3046 y(0,2)-374 b Fi(0,1)2071 +2432 y Fo(8,5)3325 3046 y(4,2)3478 3251 y(2,2)2808 3046 +y(3,0)2665 3251 y(2,0)194 b Fi(0,1)148 b Fo(0,2)422 1844 +y(2)263 1598 y(3)585 1603 y(4)427 1342 y(5)268 1107 y(6)591 +1102 y(7)432 861 y(8)1716 1347 y(4)1558 877 y(5)1394 +1352 y(3)3322 1762 y Fg(2)3148 1537 y(3)304 b(4)3148 +1312 y(5)g(6)3148 1081 y(7)g(8)3322 856 y(9)996 718 y +Ff(^)1205 b Fe(=)-9 3784 y FK(Figure)34 b(12:)48 b(An)36 +b(example)e(of)h(applying)f(the)i(algorithm)c FE(appl)-7 +b(y)35 b FK(for)g(computing)f(the)h(conjunction)-9 3904 +y(of)g(the)h(t)m(w)m(o)g(R)m(OBDDs)g(sho)m(wn)h(at)e(the)h(top)g(left.) +52 b(The)36 b(result)g(is)f(sho)m(wn)i(to)f(the)g(righ)m(t.)52 +b(Belo)m(w)36 b(the)-9 4024 y(tree)e(of)g(argumen)m(ts)g(to)g(the)h +(recursiv)m(e)g(calls)e(of)41 b FE(app)p FK(.)48 b(Dashed)34 +b(no)s(des)h(indicate)e(that)h(the)h(v)-5 b(alue)33 b(of)-9 +4145 y(the)c(no)s(de)h(has)g(previously)f(b)s(een)h(computed)g(and)f +(is)g(not)g(recomputed)h(due)g(to)f(the)h(use)g(of)f(dynamic)-9 +4265 y(programming.)39 b(The)31 b(solid)d(ellipses)h(sho)m(w)h(calls)f +(that)g(\014nishes)i(b)m(y)f(a)g(call)e(to)h FE(mk)h +FK(with)g(the)g(v)-5 b(ariable)-9 4385 y(index)32 b(indicated)g(b)m(y)i +(the)f(v)-5 b(ariables)31 b(to)h(the)h(righ)m(t)f(of)g(the)h(tree.)p +eop +%%Page: 22 23 +22 22 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(22)234 -67 y FE(Restrict)p +FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(u;)17 b(j;)g(b)p +FK(\))31 b(=)234 53 y(1:)71 b FF(function)32 b FD(r)-5 +b(es)p FK(\()p FC(u)p FK(\))32 b(=)234 173 y(2:)217 b +FF(if)42 b FD(var)11 b FK(\()p FC(u)p FK(\))27 b FC(>)g(j)39 +b FF(then)32 b(return)h FC(u)234 294 y FK(3:)217 b FF(else)32 +b(if)42 b FD(var)11 b FK(\()p FC(u)p FK(\))27 b FC(<)g(j)39 +b FF(then)33 b(return)f FE(mk)q FK(\()p FD(var)10 b FK(\()p +FC(u)p FK(\))p FC(;)17 b FD(r)-5 b(es)o FK(\()p FD(low)10 +b FK(\()p FC(u)p FK(\)\))p FC(;)17 b FD(r)-5 b(es)o FK(\()p +FD(high)7 b FK(\()p FC(u)p FK(\)\)\))234 414 y(4:)217 +b FF(else)32 b FK(\(*)g FD(var)11 b FK(\()p FC(u)p FK(\))27 +b(=)g FC(j)39 b FK(*\))32 b FF(if)42 b FC(b)28 b FK(=)g(0)k +FF(then)h(return)f FD(r)-5 b(es)p FK(\()p FD(low)10 b +FK(\()p FC(u)p FK(\)\))234 535 y(5:)217 b FF(else)32 +b FK(\(*)g FD(var)11 b FK(\()p FC(u)p FK(\))27 b(=)g +FC(j;)17 b(b)29 b FK(=)e(1)33 b(*\))f FF(return)g FD(r)-5 +b(es)p FK(\()p FD(high)7 b FK(\()p FC(u)p FK(\)\))234 +655 y(6:)71 b FF(end)33 b FD(r)-5 b(es)234 775 y FK(7:)71 +b FF(return)32 b FD(r)-5 b(es)p FK(\()p FC(u)p FK(\))234 +979 y(Figure)25 b(13:)39 b(The)27 b(algorithm)22 b FE(restrict)o +FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(u;)17 b(j;)g(b)p +FK(\))25 b(whic)m(h)h(computes)g(an)f(R)m(OBDD)234 1099 +y(for)32 b FC(t)418 1063 y FA(u)464 1099 y FK([)p FC(j)6 +b(=b)p FK(].)-9 1473 y Fn(4.5)135 b(SatCoun)l(t,)46 b(An)l(ySat,)f +(AllSat)-9 1658 y FK(In)33 b(this)h(section)f(w)m(e)i(consider)f(op)s +(erations)f(to)g(examine)g(the)h(set)g(of)f(satisfying)g(truth)h +(assignmen)m(ts)-9 1778 y(of)f(a)i(no)s(de)f FC(u)p FK(.)48 +b(A)35 b(truth)f(assignmen)m(t)h FC(\032)f FK(satis\014es)h(a)f(no)s +(de)h FC(u)f FK(if)f FC(t)2406 1742 y FA(u)2451 1778 +y FK([)p FC(\032)p FK(])i(can)g(b)s(e)f(ev)-5 b(aluated)34 +b(to)g(1)g(using)-9 1898 y(the)j(truth)f(tables)h(of)f(the)h(Bo)s +(olean)e(op)s(erators.)56 b(F)-8 b(ormally)g(,)34 b(the)j(satisfying)f +(truth)h(assignmen)m(ts)g(is)-9 2019 y(the)c(set)g FD(sat)p +FK(\()p FC(u)p FK(\):)1039 2139 y FD(sat)p FK(\()p FC(u)p +FK(\))27 b(=)g FI(f)p FC(\032)h FI(2)g Fz(B)1712 2097 +y Fy(f)p FA(x)1787 2106 y Fx(1)1821 2097 y FA(;:::)o(;x)1960 +2105 y Fw(n)2001 2097 y Fy(g)2068 2139 y FI(j)g FC(t)2159 +2098 y FA(u)2204 2139 y FK([)p FC(\032)p FK(])33 b(is)f(true)h +FI(g)p FC(;)-9 2313 y FK(where)39 b Fz(B)345 2271 y Fy(f)p +FA(x)420 2280 y Fx(1)454 2271 y FA(;:::)o(;x)593 2279 +y Fw(n)635 2271 y Fy(g)713 2313 y FK(denotes)h(the)f(set)g(of)f(all)f +(truth)h(assignmen)m(ts)h(for)f(v)-5 b(ariables)38 b +FI(f)p FC(x)3141 2328 y FB(1)3180 2313 y FC(;)17 b(:)g(:)g(:)f(;)h(x) +3454 2328 y FA(n)3501 2313 y FI(g)p FK(,)40 b(i.e.,)-9 +2434 y(functions)h(from)g FI(f)p FC(x)765 2449 y FB(1)805 +2434 y FC(;)17 b(:)g(:)g(:)e(;)i(x)1078 2449 y FA(n)1126 +2434 y FI(g)41 b FK(to)h(the)g(truth)g(v)-5 b(alues)42 +b Fz(B)65 b FK(=)43 b FI(f)p FK(0)p FC(;)17 b FK(1)p +FI(g)p FK(.)70 b(The)43 b(\014rst)f(algorithm,)f FE(Sa)-7 +b(t-)-9 2554 y(Count)p FK(,)44 b(computes)d(the)h(size)f(of)g +FD(sat)p FK(\()p FC(u)p FK(\),)i(see)f(\014gure)g(14.)69 +b(The)42 b(algorithm)c(exploits)j(the)g(follo)m(w-)-9 +2675 y(ing)f(fact.)69 b(If)41 b FC(u)f FK(is)h(a)g(no)s(de)g(with)g(v) +-5 b(ariable)39 b(index)i FD(var)11 b FK(\()p FC(u)p +FK(\))40 b(then)i(t)m(w)m(o)g(sets)g(of)f(truth)g(assignmen)m(ts)-9 +2795 y(can)50 b(mak)m(e)h FC(f)519 2759 y FA(u)614 2795 +y FK(true.)97 b(The)52 b(\014rst)e(set)i(has)e FD(var)11 +b FC(u)50 b FK(equal)g(to)g(0,)55 b(the)50 b(other)h(has)g +FD(var)10 b FC(u)50 b FK(equal)g(to)-9 2915 y(1.)75 b(F)-8 +b(or)42 b(the)i(\014rst)g(set,)j(the)c(n)m(um)m(b)s(er)h(is)f(found)g +(b)m(y)h(\014nding)f(the)h(n)m(um)m(b)s(er)g(of)e(truth)i(assignmen)m +(ts)-9 3036 y FD(c)-5 b(ount)p FK(\()p FD(low)10 b FK(\()p +FC(u)p FK(\)\))48 b(making)g FD(low)10 b FK(\()p FC(u)p +FK(\))49 b(true.)94 b(All)47 b(v)-5 b(ariables)48 b(b)s(et)m(w)m(een)j +FD(var)11 b FK(\()p FC(u)p FK(\))48 b(and)i FD(var)10 +b FK(\()p FD(low)g FK(\()p FC(u)p FK(\)\))49 b(in)-9 +3156 y(the)e(ordering)f(can)h(b)s(e)f(c)m(hosen)j(arbitrarily)-8 +b(,)47 b(therefore)h(in)d(the)j(case)f(of)f FD(var)11 +b FC(u)46 b FK(b)s(eing)g(0,)k(a)d(total)-9 3276 y(of)33 +b(2)152 3240 y Fo(var)8 b FB(\()p Fo(low)g FB(\()p FA(u)p +FB(\)\))p Fy(\000)p Fo(var)h FB(\()p FA(u)p FB(\))p Fy(\000)p +FB(1)893 3276 y FI(\003)23 b FD(c)-5 b(ount)p FK(\()p +FD(low)11 b FK(\()p FC(u)p FK(\)\))33 b(satisfying)h(truth)g(assignmen) +m(ts)h(exists.)49 b(T)-8 b(o)35 b(b)s(e)f(e\016cien)m(t,)-9 +3397 y(dynamic)d(programming)f(should)i(b)s(e)h(applied)f(in)f +FE(Sa)-7 b(tCount)34 b FK(\(see)g(exercise)g(4.10\).)137 +3517 y(The)39 b(next)f(algorithm)d FE(AnySa)-7 b(t)38 +b FK(in)f(\014gure)h(15)f(\014nds)i(a)e(satisfying)g(truth)h(assignmen) +m(t.)58 b(Some)-9 3638 y(irrelev)-5 b(an)m(t)35 b(v)-5 +b(ariables)35 b(presen)m(t)j(in)d(the)i(ordering)f(migh)m(t)e(not)j +(app)s(ear)f(in)f(the)i(result)f(and)h(they)g(can)-9 +3758 y(b)s(e)31 b(assigned)h(an)m(y)g(v)-5 b(alue)31 +b(whatso)s(ev)m(er.)45 b FE(AnySa)-7 b(t)32 b FK(simply)e(\014nds)j(a)e +(path)h(leading)e(to)h(1)g(b)m(y)h(a)g(depth-)-9 3878 +y(\014rst)c(tra)m(v)m(ersal,)h(prefering)f(somewhat)g(arbitrarily)d(lo) +m(w-edges)k(o)m(v)m(er)g(high-edges.)42 b(It)28 b(is)f(particularly)-9 +3999 y(simple)h(due)i(to)g(the)g(observ)-5 b(ation)29 +b(that)g FD(if)k(a)f(no)-5 b(de)31 b(is)h(not)g(the)h(terminal)e(0,)i +(it)f(has)g(at)g(le)-5 b(ast)33 b(one)e(p)-5 b(ath)-9 +4119 y(le)g(ading)33 b(to)i(1.)43 b FK(The)34 b(running)e(time)f(is)h +(clearly)g(linear)f(in)h(the)h(result.)137 4239 y FE(AllSa)-7 +b(t)33 b FK(in)f(\014gure)h(16)e(\014nds)j(all)c(satisfying)i +(truth-assignmen)m(ts)g(lea)m(ving)g(out)g(irrelev)-5 +b(an)m(t)32 b(v)-5 b(ari-)-9 4360 y(ables)29 b(from)f(the)j(ordering.) +41 b FE(AllSa)-7 b(t)p FK(\()p FC(u)p FK(\))30 b(\014nds)h(all)c(paths) +j(from)f(a)g(no)s(de)h FC(u)f FK(to)g(the)i(terminal)c(1.)42 +b(The)-9 4480 y(running)33 b(time)f(is)h(linear)f(in)h(the)g(size)h(of) +f(the)h(result)g(m)m(ultiplied)c(with)j(the)h(time)e(to)h(add)h(the)g +(single)-9 4601 y(assignmen)m(ts)29 b([)p FC(x)610 4616 +y Fo(var)8 b FB(\()p FA(u)p FB(\))844 4601 y FI(7!)28 +b FK(0])g(and)h([)p FC(x)1344 4616 y Fo(var)8 b FB(\()p +FA(u)p FB(\))1579 4601 y FI(7!)27 b FK(1])i(in)f(fron)m(t)h(of)f(a)h +(list)e(of)h(up)i(to)e FC(n)h FK(elemen)m(ts.)43 b(Ho)m(w)m(ev)m(er,)-9 +4721 y(the)33 b(result)f(can)h(b)s(e)g(exp)s(onen)m(tially)e(large)h +(in)g FI(j)p FC(u)p FI(j)p FK(,)f(so)i(the)g(running)f(time)f(is)h(the) +h(p)s(o)s(or)f FC(O)s FK(\(2)3398 4685 y Fy(j)p FA(u)p +Fy(j)3481 4721 y FC(n)p FK(\).)p eop +%%Page: 23 24 +23 23 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(23)234 -80 y FE(Sa)-7 +b(tCount)p FK([)p FC(T)14 b FK(]\()p FC(u)p FK(\))234 +41 y(1:)144 b FF(function)32 b FD(c)-5 b(ount)p FK(\()p +FC(u)p FK(\))234 161 y(2:)363 b FF(if)32 b FC(u)27 b +FK(=)h(0)k FF(then)h FD(r)-5 b(es)27 b FI( )h FK(0)234 +282 y(3:)363 b FF(else)37 b(if)32 b FC(u)27 b FK(=)h(1)k +FF(then)h FD(r)-5 b(es)27 b FI( )h FK(1)234 404 y(4:)363 +b FF(else)32 b FD(r)-5 b(es)28 b FI( )69 b FK(2)1250 +367 y Fo(var)7 b FB(\()p Fo(low)h FB(\()p FA(u)p FB(\)\))p +Fy(\000)p Fo(var)h FB(\()p FA(u)p FB(\))p Fy(\000)p FB(1)1989 +404 y FI(\003)22 b FD(c)-5 b(ount)p FK(\()p FD(low)10 +b FK(\()p FC(u)p FK(\)\))1201 526 y(+)32 b(2)1358 490 +y Fo(var)7 b FB(\()p Fo(high)g FB(\()p FA(u)p FB(\)\))p +Fy(\000)p Fo(var)h FB(\()p FA(u)p FB(\))p Fy(\000)p FB(1)2121 +526 y FI(\003)22 b FD(c)-5 b(ount)p FK(\()p FD(high)7 +b FK(\()p FC(u)p FK(\)\))234 646 y(5:)363 b FF(return)33 +b FD(r)-5 b(es)234 766 y FK(6:)144 b FF(end)33 b FD(c)-5 +b(ount)234 887 y FK(7:)234 1009 y(8:)144 b FF(return)32 +b FK(2)846 973 y Fo(var)7 b FB(\()p FA(u)p FB(\))p Fy(\000)p +FB(1)1165 1009 y FI(\003)22 b FD(c)-5 b(ount)p FK(\()p +FC(u)p FK(\))234 1212 y(Figure)41 b(14:)61 b(An)42 b(algorithm)c(for)j +(determining)f(the)i(n)m(um)m(b)s(er)g(of)f(v)-5 b(alid)40 +b(truth)i(assign-)234 1333 y(men)m(ts.)i(Recall,)29 b(that)i(the)f(\\v) +-5 b(ariable)29 b(index")i FD(var)41 b FK(of)30 b(0)g(and)g(1)h(in)e +(the)i(R)m(OBDD)f(repre-)234 1453 y(sen)m(tation)e(is)f +FC(n)11 b FK(+)g(1)27 b(when)i(the)f(ordering)e(con)m(tains)h +FC(n)h FK(v)-5 b(ariables)26 b(\(n)m(um)m(b)s(ered)i(1)f(through)234 +1573 y FC(n)p FK(\).)44 b(This)33 b(means)f(that)h FD(var)11 +b FK(\(0\))31 b(and)i FD(var)11 b FK(\(1\))32 b(alw)m(a)m(ys)h(giv)m +(es)g FC(n)22 b FK(+)g(1.)234 2087 y FE(AnySa)-7 b(t)p +FK(\()p FC(u)p FK(\))234 2208 y(1:)363 b FF(if)32 b FC(u)27 +b FK(=)h(0)k FF(then)h FK(Error)234 2328 y(2:)363 b FF(else)37 +b(if)32 b FC(u)27 b FK(=)h(1)k FF(then)h(return)f FK([])234 +2448 y(3:)363 b FF(else)37 b(if)32 b FD(low)10 b FK(\()p +FC(u)p FK(\))27 b(=)h(0)k FF(then)h(return)f FK([)p FC(x)2157 +2464 y Fo(var)8 b FB(\()p FA(u)p FB(\))2392 2448 y FI(7!)27 +b FK(1)p FC(;)17 b FE(AnySa)-7 b(t)p FK(\()p FD(high)7 +b FK(\()p FC(u)p FK(\)\)])234 2569 y(4:)363 b FF(else)32 +b(return)h FK([)p FC(x)1309 2584 y Fo(var)8 b FB(\()p +FA(u)p FB(\))1543 2569 y FI(7!)28 b FK(0)p FC(;)17 b +FE(AnySa)-7 b(t)p FK(\()p FD(low)10 b FK(\()p FC(u)p +FK(\)\)])234 2772 y(Figure)45 b(15:)69 b(An)46 b(algorithm)c(for)j +(returning)g(a)h(satisfying)e(truth-assignmen)m(t.)82 +b(The)234 2893 y(v)-5 b(ariables)32 b(are)g(assumed)i(to)e(b)s(e)h +FC(x)1500 2908 y FB(1)1539 2893 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1813 +2908 y FA(n)1893 2893 y FK(ordered)33 b(in)f(this)g(w)m(a)m(y)-8 +b(.)234 3401 y FE(AllSa)h(t)p FK(\()p FC(u)p FK(\))234 +3521 y(1:)363 b FF(if)32 b FC(u)27 b FK(=)h(0)k FF(then)h(return)f +FI(h)g(i)234 3641 y FK(2:)363 b FF(else)37 b(if)32 b +FC(u)27 b FK(=)h(1)k FF(then)h(return)f FI(h)g FK([)h(])g +FI(i)234 3762 y FK(3:)363 b FF(else)32 b(return)234 3882 +y FK(4:)573 b FI(h)p FK(add)33 b([)p FC(x)1194 3898 y +Fo(var)8 b FB(\()p FA(u)p FB(\))1428 3882 y FI(7!)28 +b FK(0])k(in)g(fron)m(t)g(of)g(all)234 4003 y(5:)638 +b(truth-assignmen)m(ts)33 b(in)f FE(AllSa)-7 b(t)p FK(\()p +FD(low)10 b FK(\()p FC(u)p FK(\)\))p FC(;)234 4123 y +FK(6:)638 b(add)33 b([)p FC(x)1220 4138 y Fo(var)8 b +FB(\()p FA(u)p FB(\))1455 4123 y FI(7!)27 b FK(1])32 +b(in)g(fron)m(t)h(of)f(all)234 4243 y(7:)638 b(truth-assignmen)m(ts)33 +b(in)f FE(AllSa)-7 b(t)p FK(\()p FD(high)7 b FK(\()p +FC(u)p FK(\)\))p FI(i)234 4447 y FK(Figure)34 b(16:)47 +b(An)35 b(algorithm)c(whic)m(h)36 b(returns)f(all)e(satisfying)h +(truth-assignmen)m(ts.)49 b(The)234 4567 y(v)-5 b(ariables)41 +b(are)h(assumed)h(to)f(b)s(e)g FC(x)1547 4582 y FB(1)1587 +4567 y FC(;)17 b(:)g(:)g(:)f(x)1817 4582 y FA(n)1907 +4567 y FK(ordered)42 b(in)g(this)g(w)m(a)m(y)-8 b(.)73 +b(W)-8 b(e)43 b(use)g FI(h\001)17 b(\001)g(\001)n(i)41 +b FK(to)234 4688 y(denote)26 b(sequences)i(of)c(truth)h(assignmen)m +(ts.)41 b(In)25 b(particular,)g FI(h)f(i)h FK(is)f(the)h(empt)m(y)g +(sequence)234 4808 y(of)30 b(truth)h(assignmen)m(ts,)g(and)g +FI(h)f FK([)h(])f FI(i)g FK(is)g(the)h(sequence)i(consisting)d(of)g +(the)h(single)f(empt)m(y)234 4928 y(truth)j(assignmen)m(t.)p +eop +%%Page: 24 25 +24 24 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(24)234 1116 y FE(Simplify)p +FK(\()p FC(d;)17 b(u)p FK(\))234 1236 y(1:)144 b FF(function)32 +b FD(sim)o FK(\()p FC(d;)17 b(u)p FK(\))234 1357 y(2:)363 +b FF(if)32 b FC(d)27 b FK(=)h(0)k FF(then)h(return)f +FK(0)234 1477 y(3:)363 b FF(else)37 b(if)32 b FC(u)27 +b FI(\024)h FK(1)33 b FF(then)f(return)h FC(u)234 1598 +y FK(4:)363 b FF(else)37 b(if)32 b FC(d)27 b FK(=)h(1)k +FF(then)234 1718 y FK(5:)583 b FF(return)32 b FE(mk)q +FK(\()p FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b +FD(sim)o FK(\()p FC(d;)g FD(low)9 b FK(\()p FC(u)p FK(\)\))p +FC(;)17 b FD(sim)o FK(\()p FC(d;)g FD(high)6 b FK(\()p +FC(u)p FK(\)\)\))234 1838 y(6:)363 b FF(else)37 b(if)32 +b FD(var)11 b FK(\()p FC(d)p FK(\))27 b(=)g FD(var)11 +b FK(\()p FC(u)p FK(\))32 b FF(then)234 1959 y FK(7:)583 +b FF(if)31 b FD(low)11 b FK(\()p FC(d)p FK(\))27 b(=)g(0)33 +b FF(then)g(return)f FD(sim)o FK(\()p FD(high)7 b FK(\()p +FC(d)p FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)p FK(\)\))234 +2079 y(8:)583 b FF(else)37 b(if)31 b FD(high)7 b FK(\()p +FC(d)p FK(\))27 b(=)h(0)k FF(then)h(return)f FD(sim)p +FK(\()p FD(low)10 b FK(\()p FC(d)p FK(\))p FC(;)17 b +FD(low)9 b FK(\()p FC(u)p FK(\)\))234 2199 y(9:)583 b +FF(else)32 b(return)g FE(mk)q FK(\()p FD(var)10 b FK(\()p +FC(u)p FK(\))p FC(;)234 2320 y FK(10:)1263 b FD(sim)o +FK(\()p FD(low)10 b FK(\()p FC(d)p FK(\))p FC(;)17 b +FD(low)10 b FK(\()p FC(u)p FK(\)\))p FC(;)234 2440 y +FK(11:)1263 b FD(sim)o FK(\()p FD(high)7 b FK(\()p FC(d)p +FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)p FK(\)\)\))234 +2561 y(12:)314 b FF(else)37 b(if)32 b FD(var)11 b FK(\()p +FC(d)p FK(\))27 b FC(<)g FD(var)11 b FK(\()p FC(u)p FK(\))32 +b FF(then)234 2681 y FK(13:)534 b FF(return)32 b FE(mk)q +FK(\()p FD(var)10 b FK(\()p FC(d)p FK(\))p FC(;)17 b +FD(sim)o FK(\()p FD(low)10 b FK(\()p FC(d)p FK(\))p FC(;)17 +b(u)p FK(\))p FC(;)g FD(sim)n FK(\()p FD(high)6 b FK(\()p +FC(d)p FK(\))p FC(;)17 b(u)p FK(\)\))234 2801 y(14:)314 +b FF(else)234 2922 y FK(15:)534 b FF(return)32 b FE(mk)q +FK(\()p FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b +FD(sim)o FK(\()p FC(d;)g FD(low)9 b FK(\()p FC(u)p FK(\)\))p +FC(;)17 b FD(sim)o FK(\()p FC(d;)g FD(high)6 b FK(\()p +FC(u)p FK(\)\)\))234 3042 y(16:)95 b FF(end)33 b FD(sim)234 +3163 y FK(17:)234 3283 y(18:)95 b FF(return)32 b FD(sim)p +FK(\()p FC(d;)17 b(u)p FK(\))234 3486 y(Figure)34 b(17:)48 +b(An)36 b(algorithm)31 b(\(due)36 b(to)f(Coudert)h(et)f(al)f([CBM89])h +(\))g(for)g(simplifying)c(an)234 3607 y(R)m(OBDD)i FC(b)h +FK(that)f(w)m(e)i(only)e(care)h(ab)s(out)f(on)h(the)g(domain)e +FC(d)p FK(.)46 b(Dynamic)32 b(programming)234 3727 y(should)h(b)s(e)g +(applied)e(to)h(impro)m(v)m(e)h(e\016ciency)h(\(exercise)f(4.12\))p +eop +%%Page: 25 26 +25 25 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(25)p 413 -267 2935 4 +v 411 -147 4 121 v 463 -183 a FE(mk)p FK(\()p FC(i;)17 +b(u)771 -168 y FB(0)811 -183 y FC(;)g(u)911 -168 y FB(1)949 +-183 y FK(\))p 1260 -147 V 324 w FC(O)s FK(\(1\))p 1830 +-147 V 3346 -147 V 411 -27 V 463 -63 a FE(Build)p FK(\()p +FC(t)p FK(\))p 1260 -27 V 456 w FC(O)s FK(\(2)1476 -99 +y FA(n)1522 -63 y FK(\))p 1830 -27 V 3346 -27 V 411 94 +V 463 58 a FE(Appl)-7 b(y)p FK(\()p FC(op;)17 b(u)995 +73 y FB(1)1033 58 y FC(;)g(u)1133 73 y FB(2)1172 58 y +FK(\))p 1260 94 V 101 w FC(O)s FK(\()p FI(j)p FC(u)1511 +73 y FB(1)1549 58 y FI(j)g(j)p FC(u)1678 73 y FB(2)1716 +58 y FI(j)p FK(\))p 1830 94 V 3346 94 V 411 214 V 463 +178 a FE(Restrict)p FK(\()p FC(u;)g(j;)g(b)p FK(\))p +1260 214 V 98 w FC(O)s FK(\()p FI(j)p FC(u)p FI(j)p FK(\))p +1830 214 V 304 w(See)33 b(note)p 3346 214 V 411 335 V +463 298 a FE(Sa)-7 b(tCount)p FK(\()p FC(u)p FK(\))p +1260 335 V 220 w FC(O)s FK(\()p FI(j)p FC(u)p FI(j)p +FK(\))p 1830 335 V 304 w(See)33 b(note)p 3346 335 V 411 +455 V 463 419 a FE(AnySa)-7 b(t)p FK(\()p FC(u)p FK(\))p +1260 455 V 339 w FC(O)s FK(\()p FI(j)p FC(p)p FI(j)p +FK(\))p 1830 455 V 311 w FC(p)28 b FK(=)f FC(Any)t(S)6 +b(at)p FK(\()p FC(u)p FK(\),)32 b FI(j)p FC(p)p FI(j)27 +b FK(=)g FC(O)s FK(\()p FI(j)p FC(u)p FI(j)o FK(\))p +3346 455 V 411 577 4 123 v 463 541 a FE(AllSa)-7 b(t)p +FK(\()p FC(u)p FK(\))p 1260 577 V 359 w FC(O)s FK(\()p +FI(j)p FC(r)s FI(j)20 b(\003)i FC(n)p FK(\))p 1830 577 +V 163 w FC(r)30 b FK(=)e FC(Al)r(l)r(S)6 b(at)p FK(\()p +FC(u)p FK(\),)33 b FI(j)p FC(r)s FI(j)26 b FK(=)i FC(O)s +FK(\(2)2936 505 y Fy(j)p FA(u)p Fy(j)3019 541 y FK(\))p +3346 577 V 411 697 4 121 v 463 661 a FE(Simplify)p FK(\()p +FC(d;)17 b(u)p FK(\))p 1260 697 V 205 w FC(O)s FK(\()p +FI(j)p FC(d)p FI(jj)p FC(u)p FI(j)p FK(\))p 1830 697 +V 197 w(See)33 b(note)p 3346 697 V 413 701 2935 4 v 463 +770 a(Note:)51 b(These)38 b(running)e(times)f(only)g(holds)h(if)f +(dynamic)h(programming)d(is)463 890 y(used)h(\(exercises)g(4.7,)e +(4.10,)g(and)h(4.12\).)-9 1184 y(T)-8 b(able)26 b(1:)40 +b(W)-8 b(orst-case)27 b(running)f(times)f(for)h(the)h(R)m(OBDD)e(op)s +(erations.)41 b(The)27 b(running)f(times)f(are)i(the)-9 +1304 y(exp)s(ected)37 b(running)f(times)f(since)h(they)h(are)f(all)d +(based)k(on)f(a)g(hash-table)f(with)g(exp)s(ected)j(constan)m(t)-9 +1424 y(time)31 b(searc)m(h)j(and)e(insertion)g(op)s(erations.)-9 +1697 y Fn(4.6)135 b(Simplify)-9 1882 y FK(The)45 b(\014nal)f(algorithm) +d(called)j FE(Simplify)h FK(is)f(sho)m(wn)i(in)e(\014gure)h(17.)79 +b(The)46 b(algorithm)41 b(is)k(used)g(to)-9 2002 y(simplify)29 +b(an)i(R)m(OBDD)f(b)m(y)j(trying)e(to)g(remo)m(v)m(e)h(no)s(des.)44 +b(The)33 b(simpli\014cation)28 b(is)j(based)h(on)g(a)f(domain)-9 +2123 y FC(d)42 b FK(of)g(in)m(terest.)73 b(The)44 b(R)m(OBDD)d +FC(u)h FK(is)g(supp)s(osed)i(to)e(b)s(e)h(of)f(in)m(terest)h(only)f(on) +g(truth)h(assignmen)m(ts)-9 2243 y(that)d(also)g(satisfy)h +FC(d)p FK(.)67 b(\(This)41 b(o)s(ccurs)h(when)g(using)e(R)m(OBDDs)g +(for)h FD(formal)g(veri\014c)-5 b(ation)p FK(.)67 b(Section)-9 +2364 y(7)36 b(sho)m(ws)i(ho)m(w)f(to)f(do)g(formal)e(v)m(eri\014cation) +i(with)g(R)m(OBDDs,)g(but)h(con)m(tains)f(no)h(example)e(of)h(using)-9 +2484 y FE(Simplify)p FK(.\))137 2604 y(T)-8 b(o)39 b(b)s(e)g(precise,)i +(giv)m(en)f FC(d)e FK(and)h FC(u)p FK(,)h FE(Simplify)i +FK(\014nds)e(another)f(R)m(OBDD)f FC(u)2971 2568 y Fy(0)2994 +2604 y FK(,)i(t)m(ypically)e(smaller)-9 2725 y(than)h +FC(u)p FK(,)i(suc)m(h)f(that)g FC(t)829 2689 y FA(d)896 +2725 y FI(^)27 b FC(t)1024 2689 y FA(u)1109 2725 y FK(=)39 +b FC(t)1259 2689 y FA(d)1326 2725 y FI(^)28 b FC(t)1455 +2689 y FA(u)1496 2665 y Fd(0)1522 2725 y FK(.)64 b(It)40 +b(do)s(es)f(so)h(b)m(y)g(trying)f(to)g(iden)m(tify)g(sons,)j(and)d +(thereb)m(y)-9 2845 y(making)31 b(some)h(no)s(des)h(redundan)m(t.)45 +b(A)33 b(more)f(detailed)f(analysis)h(is)g(left)g(to)g(the)h(reader.) +137 3053 y(The)f(running)f(time)e(of)i(the)h(algorithms)c(of)j(the)g +(previous)h(sections)g(is)e(summarized)g(in)h(table)f(1.)-9 +3459 y Fn(4.7)135 b(Existen)l(tial)47 b(Quan)l(ti\014cation)g(and)d +(Substitution)-9 3644 y FK(When)d(applying)f(R)m(OBDDs)g(often)h +FD(existential)h(quanti\014c)-5 b(ation)47 b FK(and)41 +b FD(c)-5 b(omp)g(osition)47 b FK(is)40 b(used.)70 b(Ex-)-9 +3764 y(isten)m(tial)46 b(quan)m(ti\014cation)h(is)g(the)h(Bo)s(olean)e +(op)s(eration)h FI(9)p FC(x:t)p FK(.)90 b(The)49 b(meaning)d(of)h(an)h +(existen)m(tial)-9 3885 y(quan)m(ti\014cation)31 b(of)h(a)h(Bo)s(olean) +e(v)-5 b(ariable)31 b(is)h(giv)m(en)h(b)m(y)g(the)g(follo)m(wing)d +(equation:)1376 4084 y FI(9)p FC(x:t)61 b FK(=)f FC(t)p +FK([0)p FC(=x)p FK(])23 b FI(_)f FC(t)p FK([1)p FC(=x)p +FK(])17 b FC(:)1261 b FK(\(6\))-9 4283 y(On)37 b(R)m(OBDDs)h(existen)m +(tial)e(quan)m(ti\014cation)h(can)h(therefore)h(b)s(e)f(implemen)m(ted) +e(using)h(t)m(w)m(o)i(calls)d(to)-9 4403 y FE(Restrict)31 +b FK(and)h(a)h(single)e(call)g(to)h FE(Appl)-7 b(y)p +FK(.)137 4523 y FD(Comp)i(osition)46 b FK(is)40 b(the)h(R)m(OBDD)e(op)s +(eration)g(p)s(erforming)g(the)h(equiv)-5 b(alen)m(t)40 +b(of)g(substitution)g(on)-9 4644 y(Bo)s(olean)23 b(expression.)42 +b(Often)25 b(the)g(notation)e FC(t)p FK([)p FC(t)1768 +4608 y Fy(0)1792 4644 y FC(=x)p FK(])i(is)f(used)h(to)g(describ)s(e)g +(the)g(result)f(of)h(substituting)-9 4764 y(all)32 b(free)i(o)s +(ccurrences)i(of)e FC(x)g FK(in)f FC(t)i FK(b)m(y)g FC(t)1400 +4728 y Fy(0)1423 4764 y FK(.)48 b(\(An)34 b(o)s(ccurrence)i(of)d(a)h(v) +-5 b(ariable)33 b(is)g(free)i(if)e(it)g(is)g(not)h(within)-9 +4884 y(the)43 b(scop)s(e)h(of)f(a)g(quan)m(ti\014er.\))1128 +4848 y FB(1)1243 4884 y FK(T)-8 b(o)44 b(p)s(erform)e(this)h +(substitution)f(on)i(R)m(OBDDs)e(w)m(e)j(observ)m(e)g(the)p +-9 4971 1512 4 v 103 5033 a Fs(1)140 5063 y Fr(Since)28 +b(R)n(OBDDs)g(con)n(tain)f(no)h(quan)n(ti\014ers)f(w)n(e)h(shall)f(not) +h(b)r(e)h(concerned)e(with)h(the)h(problems)e(of)h(free)f(v)-5 +b(ariables)-9 5162 y(of)27 b Ft(t)115 5132 y Fm(0)166 +5162 y Fr(b)r(eing)h(b)r(ound)g(b)n(y)f(quan)n(ti\014ers)g(of)g +Ft(t)p Fr(.)p eop +%%Page: 26 27 +26 26 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 +b(TING)34 b(R)m(OBDDS)1196 b FK(26)-9 -171 y(follo)m(wing)29 +b(equation,)k(whic)m(h)g(holds)f(if)g FC(t)g FK(con)m(tains)h(no)f +(quan)m(ti\014ers:)899 32 y FC(t)p FK([)p FC(t)996 -9 +y Fy(0)1020 32 y FC(=x)p FK(])61 b(=)f FC(t)p FK([)p +FC(t)1445 -9 y Fy(0)1496 32 y FI(!)27 b FK(1)p FC(;)17 +b FK(0)p FC(=x)p FK(])60 b(=)g FC(t)2127 -9 y Fy(0)2178 +32 y FI(!)28 b FC(t)p FK([1)p FC(=x)p FK(])p FC(;)17 +b(t)p FK([0)p FC(=x)p FK(])p FC(:)784 b FK(\(7\))137 +236 y(Since)31 b(\()p FC(t)463 199 y Fy(0)514 236 y FI(!)c +FC(t)p FK([1)p FC(=x)p FK(])p FC(;)17 b(t)p FK([0)p FC(=x)p +FK(]\))28 b(=)g(\()p FC(t)1412 199 y Fy(0)1453 236 y +FI(^)19 b FC(t)p FK([1)p FC(=x)p FK(]\))f FI(_)h FK(\()p +FI(:)p FC(t)2060 199 y Fy(0)2102 236 y FI(^)g FC(t)p +FK([0)p FC(=x)p FK(]\))31 b(w)m(e)g(can)g(compute)g(this)f(with)g(t)m +(w)m(o)-9 356 y(applications)c(of)i FE(restrict)f FK(and)h(three)h +(applications)d(of)i FE(appl)-7 b(y)28 b FK(\(with)g(the)h(op)s +(erators)f FI(^)p FK(,)h(\()p FI(:)p 3546 372 33 4 v +33 w FK(\))13 b FI(^)p 3709 372 V 47 w FK(,)-9 476 y +FI(_)p FK(\).)43 b(Ho)m(w)m(ev)m(er,)35 b(b)m(y)e(essen)m(tially)f +(generalizing)e FE(appl)-7 b(y)32 b FK(to)f(op)s(erators)h +FD(op)g FK(with)g(three)h(argumen)m(ts)f(w)m(e)-9 597 +y(can)g(do)h(b)s(etter)g(\(see)g(exercise)h(4.13\).)-9 +883 y Fn(Exercises)-9 1068 y FF(Exercise)i(4.1)49 b FK(Construct)35 +b(the)g(R)m(OBDD)e(for)h FI(:)p FC(x)1922 1083 y FB(1)1985 +1068 y FI(^)24 b FK(\()p FC(x)2168 1083 y FB(2)2238 1068 +y FI(,)30 b(:)p FC(x)2489 1083 y FB(3)2530 1068 y FK(\))k(with)f +(ordering)h FC(x)3267 1083 y FB(1)3337 1068 y FC(<)d(x)3499 +1083 y FB(2)3569 1068 y FC(<)f(x)3730 1083 y FB(3)-9 +1188 y FK(using)i(the)h(algorithm)c FE(Build)k FK(in)f(\014gure)h(9.)-9 +1397 y FF(Exercise)j(4.2)49 b FK(Sho)m(w)32 b(the)f(represen)m(tation)g +(of)g(the)g(R)m(OBDD)f(of)g(\014gure)h(6)g(in)f(the)h(st)m(yle)h(of)e +(\014gure)h(7.)-9 1607 y FF(Exercise)36 b(4.3)49 b FK(Suggest)32 +b(an)g(impro)m(v)m(emen)m(t)f FE(BuildConj)p FK(\()p +FC(t)p FK(\))j(of)k FE(Build)32 b FK(whic)m(h)g(generates)h(only)e(a)-9 +1727 y(linear)39 b(n)m(um)m(b)s(er)j(of)e(calls)g(for)h(Bo)s(olean)f +(expressions)j FC(t)e FK(that)g(are)g(conjunctions)g(of)g(v)-5 +b(ariables)40 b(and)-9 1847 y(negations)32 b(of)g(v)-5 +b(ariables.)-9 2056 y FF(Exercise)36 b(4.4)49 b FK(Construct)c(the)g(R) +m(OBDDs)f(for)f FC(x)i FK(and)f FC(x)k FI(\))g FC(y)f +FK(using)d(whatev)m(er)i(ordering)d(y)m(ou)-9 2177 y(w)m(an)m(t.)h +(Compute)33 b(the)g(disjunction)f(of)g(the)h(t)m(w)m(o)g(R)m(OBDDs)f +(using)g FE(appl)-7 b(y)p FK(.)-9 2386 y FF(Exercise)36 +b(4.5)49 b FK(Construct)36 b(the)g(R)m(OBDDs)e(for)h +FI(:)p FK(\()p FC(x)2002 2401 y FB(1)2066 2386 y FI(^)24 +b FC(x)2211 2401 y FB(3)2251 2386 y FK(\))35 b(and)g +FC(x)2571 2401 y FB(2)2635 2386 y FI(^)24 b FC(x)2780 +2401 y FB(3)2855 2386 y FK(using)35 b FE(build)g FK(with)g(the)-9 +2506 y(ordering)c FC(x)430 2521 y FB(1)498 2506 y FC(<)c(x)656 +2521 y FB(2)724 2506 y FC(<)h(x)883 2521 y FB(3)922 2506 +y FK(.)44 b(Use)33 b FE(appl)-7 b(y)33 b FK(to)f(\014nd)h(the)g(R)m +(OBDD)f(for)g FI(:)p FK(\()p FC(x)2677 2521 y FB(1)2739 +2506 y FI(^)23 b FC(x)2883 2521 y FB(3)2922 2506 y FK(\))f +FI(_)h FK(\()p FC(x)3164 2521 y FB(2)3226 2506 y FI(^)g +FC(x)3370 2521 y FB(3)3409 2506 y FK(\).)-9 2716 y FF(Exercise)36 +b(4.6)49 b FK(Is)22 b(there)h(an)m(y)f(essen)m(tial)g(di\013erence)g +(in)f(running)g(time)g(b)s(et)m(w)m(een)j(\014nding)d +FE(restrict)o FK(\()p FC(b;)c FK(1)p FC(;)g FK(0\))-9 +2836 y(and)32 b FE(restrict)o FK(\()p FC(b;)17 b(n;)g +FK(0\))32 b(when)i(the)f(v)-5 b(ariable)31 b(ordering)h(is)g +FC(x)2279 2851 y FB(1)2346 2836 y FC(<)c(x)2505 2851 +y FB(2)2572 2836 y FC(<)g FI(\001)17 b(\001)g(\001)26 +b FC(<)h(x)2978 2851 y FA(n)3026 2836 y FK(?)-9 3045 +y FF(Exercise)36 b(4.7)49 b FK(Use)33 b(dynamic)f(programming)e(to)i +(impro)m(v)m(e)g(the)h(running)f(time)g(of)g FE(Restrict)p +FK(.)-9 3254 y FF(Exercise)k(4.8)49 b FK(Generalise)21 +b FE(restrict)f FK(to)i(arbitrary)e(truth)i(assignmen)m(ts)g([)p +FC(x)2905 3269 y FA(i)2929 3278 y Fx(1)2996 3254 y FK(=)28 +b FC(b)3141 3269 y FA(i)3165 3278 y Fx(1)3204 3254 y +FK(,)p FC(x)3286 3269 y FA(i)3310 3278 y Fx(2)3377 3254 +y FK(=)g FC(b)3522 3269 y FA(i)3546 3278 y Fx(2)3585 +3254 y FK(,)p FC(:)17 b(:)g(:)o FK(,)p FC(x)3808 3269 +y FA(i)3832 3277 y Fw(n)3907 3254 y FK(=)-9 3375 y FC(b)32 +3390 y FA(i)56 3398 y Fw(n)103 3375 y FK(].)43 b(It)33 +b(migh)m(t)e(b)s(e)i(con)m(v)m(enien)m(t)h(to)e(assume)h(that)g +FC(x)1923 3390 y FA(i)1947 3399 y Fx(1)2014 3375 y FC(<)27 +b(x)2172 3390 y FA(i)2196 3399 y Fx(2)2263 3375 y FC(<)h +FI(\001)17 b(\001)g(\001)26 b FC(<)h(x)2669 3390 y FA(i)2693 +3398 y Fw(n)2740 3375 y FK(.)-9 3584 y FF(Exercise)36 +b(4.9)49 b FK(Suggest)24 b(a)g(substan)m(tially)e(b)s(etter)i(w)m(a)m +(y)h(of)e(building)f(R)m(OBDDs)h(for)g(\(large\))f(Bo)s(olean)-9 +3704 y(expressions)34 b(than)f FE(build)p FK(.)-9 3914 +y FF(Exercise)j(4.10)49 b FK(Change)34 b FE(Sa)-7 b(tCount)35 +b FK(suc)m(h)g(that)e(dynamic)g(programming)e(is)i(used.)48 +b(Ho)m(w)35 b(do)s(es)-9 4034 y(this)d(c)m(hange)h(the)g(running)f +(time?)-9 4243 y FF(Exercise)k(4.11)49 b FK(Explain)32 +b(wh)m(y)i(dynamic)d(programming)f(do)s(es)j(not)f(help)h(in)f(impro)m +(ving)e(the)j(run-)-9 4363 y(ning)e(time)h(of)39 b FE(AllSa)-7 +b(t)p FK(.)-9 4573 y FF(Exercise)36 b(4.12)49 b FK(Impro)m(v)m(e)33 +b(the)g(e\016ciency)h(of)e FE(Simplify)h FK(with)g(dynamic)f +(programming.)-9 4782 y FF(Exercise)k(4.13)49 b FK(W)-8 +b(rite)39 b(the)g(algorithm)e FE(Compose)p FK(\()p FC(u)2116 +4797 y FB(1)2154 4782 y FC(;)17 b(x;)g(u)2353 4797 y +FB(2)2392 4782 y FK(\))40 b(for)e(computing)g(the)i(R)m(OBDD)e(of)-9 +4902 y FC(u)47 4917 y FB(1)86 4902 y FK([)p FC(u)169 +4917 y FB(2)208 4902 y FC(=x)p FK(])47 b(e\016cien)m(tly)g(along)f(the) +h(lines)f(of)h FE(appl)-7 b(y)o FK(.)87 b(First)46 b(generalize)g +FE(appl)-7 b(y)47 b FK(to)g(op)s(erators)f FD(op)-9 5023 +y FK(with)34 b(three)h(argumen)m(ts)g(\(as)g(for)f(example)g(the)h +(if-then-else)e(op)s(erator\),)i(utilizing)c(once)k(again)f(the)-9 +5143 y(Shannon)f(expansion.)44 b(Then)33 b(use)h(equation)e(7)g(to)h +(write)f(the)h(algorithm.)p eop +%%Page: 27 28 +27 27 bop -9 -460 a FG(5)97 b(IMPLEMENTING)35 b(THE)e(R)m(OBDD)f(OPERA) +-8 b(TIONS)1410 b FK(27)-9 -171 y FH(5)161 b(Implemen)l(ting)51 +b(the)i(R)l(OBDD)g(op)t(erations)-9 48 y FK(There)36 +b(are)f(man)m(y)g(c)m(hoices)g(that)g(ha)m(v)m(e)h(to)f(b)s(e)g(tak)m +(en)h(in)e(implemen)m(ting)e(the)k(R)m(OBDD)e(op)s(erations.)-9 +168 y(There)41 b(is)e(no)h(ob)m(vious)g(b)s(est)h(w)m(a)m(y)g(of)e +(doing)g(it.)65 b(This)40 b(section)g(giv)m(es)g(hin)m(ts)g(for)f(some) +h(reasonable)-9 289 y(solutions.)137 409 y(First,)30 +b(the)i(no)s(de)f(table)f FC(T)44 b FK(is)31 b(an)f(arra)m(y)h(as)h +(sho)m(wn)g(in)e(\014gure)h(7.)43 b(The)32 b(only)e(problem)g(is)g +(that)h(the)-9 530 y(size)38 b(of)h(the)g(arra)m(y)f(is)g(not)h(kno)m +(wn)h(un)m(til)d(the)i(full)e(BDD)h(has)h(b)s(een)g(constructed.)63 +b(Either)39 b(a)f(\014xed)-9 650 y(upp)s(er)j(b)s(ound)g(could)f(b)s(e) +h(assumed,)i(or)e(other)f(tric)m(ks)i(m)m(ust)e(b)s(e)h(applied)f +(\(for)g(example)g FD(dynamic)-9 770 y(arr)-5 b(ays)33 +b FK([CLR90,)i(sec.)g(18.4]\).)46 b(The)35 b(table)f +FC(H)41 b FK(could)33 b(b)s(e)h(implemen)m(ted)f(as)h(a)g(hash-table)f +(using)h(for)-9 891 y(instance)e(the)h(hash)h(function)1019 +1099 y FC(h)p FK(\()p FC(i;)17 b(v)t FK(0)p FC(;)g(v)t +FK(1\))26 b(=)i FD(p)-5 b(air)o FK(\()p FC(i;)17 b FD(p)-5 +b(air)p FK(\()p FC(v)t FK(0)p FC(;)17 b(v)t FK(1\)\))31 +b(mo)s(d)g FC(m)-9 1307 y FK(where)36 b FD(p)-5 b(air)34 +b FK(is)h(a)g(pairing)e(function)h(that)h(maps)g(pairs)f(of)h(natural)f +(n)m(um)m(b)s(ers)i(to)e(natural)g(n)m(um)m(b)s(ers)-9 +1427 y(and)e FC(m)h FK(is)f(a)g(prime.)43 b(One)33 b(c)m(hoice)g(for)f +(the)h(pairing)d(function)i(is)1186 1685 y FD(p)-5 b(air)p +FK(\()p FC(i;)17 b(j)6 b FK(\))27 b(=)1692 1618 y(\()p +FC(i)22 b FK(+)g FC(j)6 b FK(\)\()p FC(i)22 b FK(+)g +FC(j)28 b FK(+)22 b(1\))p 1692 1662 720 4 v 2027 1753 +a(2)2443 1685 y(+)g FC(i)-9 1918 y FK(whic)m(h)42 b(is)g(a)f +(bijection,)j(and)e(therefore)g(\\p)s(erfect":)63 b(it)41 +b(pro)s(duces)i(no)f(collisions.)69 b(As)43 b(usual)e(with)-9 +2039 y(hash-tables)f(w)m(e)h(ha)m(v)m(e)h(to)e(decide)h(on)f(the)h +(size)g(as)f(a)g(prime)f FC(m)p FK(.)68 b(Ho)m(w)m(ev)m(er,)44 +b(since)d(the)g(size)g(of)f FC(H)-9 2159 y FK(gro)m(ws)33 +b(dynamically)f(it)g(can)h(b)s(e)h(hard)f(to)g(\014nd)h(a)f(go)s(o)s(d) +f(c)m(hoice)i(for)e FC(m)p FK(.)46 b(One)34 b(solution)e(w)m(ould)h(b)s +(e)g(to)-9 2280 y(tak)m(e)k FC(m)f FK(v)m(ery)i(large,)f(for)f(example) +f FC(m)g FK(=)f(15485863)h(\(whic)m(h)i(is)e(the)i(1000000'th)e(prime)h +(n)m(um)m(b)s(er\),)-9 2400 y(and)c(then)h(tak)m(e)h(as)f(the)g +(hashing)f(function)1180 2608 y FC(h)1236 2567 y Fy(0)1259 +2608 y FK(\()p FC(i;)17 b(v)t FK(0)p FC(;)g(v)t FK(1\))26 +b(=)i FC(h)p FK(\()p FC(i;)17 b(v)t FK(0)p FC(;)g(v)t +FK(1\))31 b(mo)s(d)h(2)2539 2567 y FA(k)-9 2816 y FK(using)d(a)h(table) +g(of)g(size)g(2)904 2780 y FA(k)947 2816 y FK(.)42 b(Starting)29 +b(from)g(some)i(reasonable)f(small)e(v)-5 b(alue)29 b(of)h +FC(k)j FK(w)m(e)f(could)e(increase)-9 2937 y(the)41 b(table)f(when)h +(it)f(con)m(tains)h(2)1227 2901 y FA(k)1310 2937 y FK(elemen)m(ts)g(b)m +(y)g(adding)f(one)h(to)f FC(k)s FK(,)j(construct)f(a)e(new)i(table)e +(and)-9 3057 y(rehash)f(all)e(elemen)m(ts)i(in)m(to)g(this)f(new)i +(table.)62 b(\(Again,)40 b(see)g(for)e(example)h([CLR90)o(,)i(sec.)f +(18.4])f(for)-9 3177 y(details.\))i(F)-8 b(or)29 b(suc)m(h)i(a)e +(dynamic)g(hash-table)g(the)h(amortized,)e(exp)s(ected)k(cost)e(of)f +(eac)m(h)h(op)s(eration)f(is)-9 3298 y(still)h FC(O)s +FK(\(1\).)137 3418 y(The)k(table)f FC(G)g FK(used)i(in)e +FE(Appl)-7 b(y)33 b FK(could)g(b)s(e)h(implemen)m(ted)e(as)h(a)h(t)m(w) +m(o-dimensional)d(arra)m(y)-8 b(.)46 b(Ho)m(w-)-9 3539 +y(ev)m(er,)i(it)43 b(turns)h(out)g(to)g(b)s(e)g(v)m(ery)i(sparsely)e +(used)h({)f(esp)s(ecially)f(if)g(w)m(e)i(succeed)h(in)d(getting)g +(small)-9 3659 y(R)m(OBDDs)36 b({)g(and)h(it)e(is)h(b)s(etter)h(to)f +(use)i(a)e(hash-table)g(for)g(it.)55 b(The)37 b(hashing)g(function)f +(used)h(could)-9 3779 y(b)s(e)32 b FC(g)t FK(\()p FC(v)t +FK(0)p FC(;)17 b(v)t FK(1\))26 b(=)h FC(pair)s FK(\()p +FC(v)t FK(0)p FC(;)17 b(v)t FK(1\))32 b(mo)s(d)f FC(m)i +FK(and)g(as)f(for)g FC(H)41 b FK(a)32 b(dynamic)g(hash-table)g(could)g +(b)s(e)h(used.)-9 4110 y FH(6)161 b(Examples)53 b(of)h(problem)f +(solving)h(with)g(R)l(OBDDs)-9 4329 y FK(This)d(section)h(will)d +(describ)s(e)j(v)-5 b(arious)51 b(examples)g(of)g(problems)g(that)g +(can)g(b)s(e)h(solv)m(ed)g(with)f(an)-9 4450 y(R)m(OBDD-pac)m(k)-5 +b(age.)86 b(The)48 b(examples)f(are)g FD(not)57 b FK(c)m(hosen)49 +b(to)d(illustrate)f(when)k(R)m(OBDDs)d(are)i(the)-9 4570 +y(b)s(est)33 b(c)m(hoice,)g(but)g(simply)e(c)m(hosen)j(to)e(illustrate) +f(the)i(scop)s(e)g(of)f(p)s(oten)m(tial)f(applications.)-9 +4857 y Fn(6.1)135 b(The)44 b(8)h(Queens)h(problem)-9 +5042 y FK(A)34 b(classical)e(c)m(hess-b)s(oard)k(problem)d(is)g(the)i +FD(8)h(que)-5 b(ens)36 b(pr)-5 b(oblem)p FK(:)45 b(Is)35 +b(it)e(p)s(ossible)h(to)f(place)h(8)g(queens)-9 5162 +y(on)f(a)h(c)m(hess)h(b)s(oard)f(so)f(that)h(no)f(queen)j(can)e(b)s(e)g +(captured)g(b)m(y)h(another)f(queen?)48 b(T)-8 b(o)34 +b(b)s(e)f(a)h(bit)f(more)p eop +%%Page: 28 29 +28 28 bop -9 -460 a FG(6)97 b(EXAMPLES)34 b(OF)e(PR)m(OBLEM)i(SOL)-11 +b(VING)33 b(WITH)g(R)m(OBDDS)1052 b FK(28)-9 -171 y(general)30 +b(w)m(e)i(could)e(ask)i(the)f(question)g(for)f(arbitrary)g +FC(N)10 b FK(:)43 b(Is)32 b(it)e(p)s(ossible)g(to)g(place)h +FC(N)41 b FK(queens)33 b(safely)-9 -51 y(on)f(a)g FC(N)h +FI(\002)23 b FC(N)43 b FK(c)m(hess)34 b(b)s(oard?)137 +70 y(T)-8 b(o)33 b(solv)m(e)g(the)g(problem)e(using)h(R)m(OBDDs)g(w)m +(e)i(m)m(ust)f(enco)s(de)g(it)f(using)g(Bo)s(olean)f(v)-5 +b(ariables.)43 b(W)-8 b(e)-9 190 y(do)33 b(this)h(b)m(y)h(in)m(tro)s +(ducing)d(a)i(v)-5 b(ariable)32 b(for)h(eac)m(h)i(p)s(osition)d(on)i +(the)g(b)s(oard.)47 b(W)-8 b(e)35 b(name)e(the)h(v)-5 +b(ariables)-9 310 y(as)29 b FC(x)162 325 y FA(ij)223 +310 y FC(;)17 b FK(1)27 b FI(\024)h FC(i;)17 b(j)34 b +FI(\024)28 b FC(N)40 b FK(where)30 b FC(i)g FK(is)f(the)h(ro)m(w)f(and) +h FC(j)35 b FK(is)29 b(the)h(column.)41 b(A)29 b(v)-5 +b(ariable)28 b(will)f(b)s(e)i(1)g(if)f(a)h(queen)-9 431 +y(is)j(placed)g(on)h(the)g(corresp)s(onding)f(p)s(osition.)1075 +2231 y @beginspecial 0 @llx 0 @lly 194 @urx 200 @ury +1940 @rwi @setspecial +%%BeginDocument: chess.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-39.0 221.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 5884 m 0 0 l 6202 0 l 6202 5884 l cp clip + 0.03780 0.03780 sc +/Times-Roman ff 270.00 scf sf +1635 5805 m +gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +2235 5805 m +gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +2835 5805 m +gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +3435 5805 m +gs 1 -1 sc (4) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +4035 5805 m +gs 1 -1 sc (5) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +4635 5805 m +gs 1 -1 sc (6) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +5235 5805 m +gs 1 -1 sc (7) dup sw pop 2 div neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +5835 5805 m +gs 1 -1 sc (8) dup sw pop 2 div neg 0 rm col0 sh gr +% Polyline +7.500 slw +n 4350 1170 m 4950 1170 l 4950 570 l 4350 570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3750 1770 m 4350 1770 l 4350 1170 l 3750 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4350 2370 m 4950 2370 l 4950 1770 l 4350 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3750 2970 m 4350 2970 l 4350 2370 l 3750 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4350 3570 m 4950 3570 l 4950 2970 l 4350 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3750 4170 m 4350 4170 l 4350 3570 l 3750 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4350 4770 m 4950 4770 l 4950 4170 l 4350 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3750 5370 m 4350 5370 l 4350 4770 l 3750 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3750 570 m 4950 570 l 4950 5370 l 3750 5370 l 3750 5370 l gs col0 s gr +% Polyline +n 4350 570 m 4350 5370 l gs col0 s gr +% Polyline +n 4950 1170 m 3750 1170 l gs col0 s gr +% Polyline +n 4950 1770 m 3750 1770 l gs col0 s gr +% Polyline +n 4950 2370 m 3750 2370 l gs col0 s gr +% Polyline +n 4950 2970 m 3750 2970 l gs col0 s gr +% Polyline +n 4950 3570 m 3750 3570 l gs col0 s gr +% Polyline +n 4950 4170 m 3750 4170 l gs col0 s gr +% Polyline +n 4950 4770 m 3750 4770 l gs col0 s gr +% Polyline +n 3150 1170 m 3750 1170 l 3750 570 l 3150 570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 2550 1770 m 3150 1770 l 3150 1170 l 2550 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3150 2370 m 3750 2370 l 3750 1770 l 3150 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 2550 2970 m 3150 2970 l 3150 2370 l 2550 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3150 3570 m 3750 3570 l 3750 2970 l 3150 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 2550 4170 m 3150 4170 l 3150 3570 l 2550 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 3150 4770 m 3750 4770 l 3750 4170 l 3150 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 2550 5370 m 3150 5370 l 3150 4770 l 2550 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 2550 570 m 3750 570 l 3750 5370 l 2550 5370 l 2550 5370 l gs col0 s gr +% Polyline +n 3150 570 m 3150 5370 l gs col0 s gr +% Polyline +n 3750 1170 m 2550 1170 l gs col0 s gr +% Polyline +n 3750 1770 m 2550 1770 l gs col0 s gr +% Polyline +n 3750 2370 m 2550 2370 l gs col0 s gr +% Polyline +n 3750 2970 m 2550 2970 l gs col0 s gr +% Polyline +n 3750 3570 m 2550 3570 l gs col0 s gr +% Polyline +n 3750 4170 m 2550 4170 l gs col0 s gr +% Polyline +n 3750 4770 m 2550 4770 l gs col0 s gr +% Polyline +n 1950 1170 m 2550 1170 l 2550 570 l 1950 570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1350 1770 m 1950 1770 l 1950 1170 l 1350 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1950 2370 m 2550 2370 l 2550 1770 l 1950 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1350 2970 m 1950 2970 l 1950 2370 l 1350 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1950 3570 m 2550 3570 l 2550 2970 l 1950 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1350 4170 m 1950 4170 l 1950 3570 l 1350 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1950 4770 m 2550 4770 l 2550 4170 l 1950 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1350 5370 m 1950 5370 l 1950 4770 l 1350 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 1350 570 m 2550 570 l 2550 5370 l 1350 5370 l 1350 5370 l gs col0 s gr +% Polyline +n 1950 570 m 1950 5370 l gs col0 s gr +% Polyline +n 2550 1170 m 1350 1170 l gs col0 s gr +% Polyline +n 2550 1770 m 1350 1770 l gs col0 s gr +% Polyline +n 2550 2370 m 1350 2370 l gs col0 s gr +% Polyline +n 2550 2970 m 1350 2970 l gs col0 s gr +% Polyline +n 2550 3570 m 1350 3570 l gs col0 s gr +% Polyline +n 2550 4170 m 1350 4170 l gs col0 s gr +% Polyline +n 2550 4770 m 1350 4770 l gs col0 s gr +% Polyline +n 5550 1170 m 6150 1170 l 6150 570 l 5550 570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4950 1770 m 5550 1770 l 5550 1170 l 4950 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 5550 2370 m 6150 2370 l 6150 1770 l 5550 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4950 2970 m 5550 2970 l 5550 2370 l 4950 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 5550 3570 m 6150 3570 l 6150 2970 l 5550 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4950 4170 m 5550 4170 l 5550 3570 l 4950 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 5550 4770 m 6150 4770 l 6150 4170 l 5550 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4950 5370 m 5550 5370 l 5550 4770 l 4950 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr +% Polyline +n 4950 570 m 6150 570 l 6150 5370 l 4950 5370 l 4950 5370 l gs col0 s gr +% Polyline +n 5550 570 m 5550 5370 l gs col0 s gr +% Polyline +n 6150 1170 m 4950 1170 l gs col0 s gr +% Polyline +n 6150 1770 m 4950 1770 l gs col0 s gr +% Polyline +n 6150 2370 m 4950 2370 l gs col0 s gr +% Polyline +n 6150 2970 m 4950 2970 l gs col0 s gr +% Polyline +n 6150 3570 m 4950 3570 l gs col0 s gr +% Polyline +n 6150 4170 m 4950 4170 l gs col0 s gr +% Polyline +n 6150 4770 m 4950 4770 l gs col0 s gr +% Polyline +n 1350 570 m 1350 5370 l gs col0 s gr +/Times-Roman ff 270.00 scf sf +1185 5145 m +gs 1 -1 sc (1) dup sw pop neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +1185 4605 m +gs 1 -1 sc (2) dup sw pop neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +1185 4020 m +gs 1 -1 sc (3) dup sw pop neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +1185 3390 m +gs 1 -1 sc (4) dup sw pop neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +1185 2805 m +gs 1 -1 sc (5) dup sw pop neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +1185 2175 m +gs 1 -1 sc (6) dup sw pop neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +1185 1545 m +gs 1 -1 sc (7) dup sw pop neg 0 rm col0 sh gr +/Times-Roman ff 270.00 scf sf +1185 960 m +gs 1 -1 sc (8) dup sw pop neg 0 rm col0 sh gr +$F2psEnd +rs +%%EndDocument + @endspecial 137 2556 a(The)k(capturing)e(rules)h(for)f(queens)j +(require)f(that)e(no)h(other)g(queen)i(can)e(b)s(e)g(p)s(ositioned)f +(on)h(the)-9 2677 y(same)e(ro)m(w,)i(column,)e(or)g(an)m(y)i(of)e(the)h +(diagonals.)46 b(This)34 b(w)m(e)h(can)f(express)i(as)e(Bo)s(olean)e +(expressions:)-9 2797 y(F)-8 b(or)31 b(all)g FC(i;)17 +b(j)6 b FK(,)1138 2929 y FC(x)1193 2944 y FA(ij)1282 +2929 y FI(\))1531 2835 y Fv(^)1409 3047 y FB(1)p Fy(\024)p +FA(l)q Fy(\024)p FA(N)s(;l)q Fy(6)p FB(=)p FA(j)1780 +2929 y FI(:)p FC(x)1901 2944 y FA(il)1138 3174 y FC(x)1193 +3189 y FA(ij)1282 3174 y FI(\))1543 3080 y Fv(^)1409 +3292 y FB(1)p Fy(\024)p FA(k)r Fy(\024)p FA(N)s(;k)r +Fy(6)p FB(=)p FA(i)1805 3174 y FI(:)p FC(x)1926 3189 +y FA(k)r(j)1138 3419 y FC(x)1193 3434 y FA(ij)1282 3419 +y FI(\))1758 3325 y Fv(^)1409 3537 y FB(1)p Fy(\024)p +FA(k)r Fy(\024)p FA(N)s(;)p FB(1)p Fy(\024)p FA(j)t FB(+)p +FA(k)r Fy(\000)p FA(i)p Fy(\024)p FA(N)s(;k)r Fy(6)p +FB(=)p FA(i)2234 3419 y FI(:)p FC(x)2355 3434 y FA(k)r(;j)t +FB(+)p FA(k)r Fy(\000)p FA(i)1138 3664 y FC(x)1193 3679 +y FA(ij)1282 3664 y FI(\))1758 3570 y Fv(^)1409 3782 +y FB(1)p Fy(\024)p FA(k)r Fy(\024)p FA(N)s(;)p FB(1)p +Fy(\024)p FA(j)t FB(+)p FA(i)p Fy(\000)p FA(k)r Fy(\024)p +FA(N)s(;k)r Fy(6)p FB(=)p FA(i)2234 3664 y FI(:)p FC(x)2355 +3679 y FA(k)r(;j)t FB(+)p FA(i)p Fy(\000)p FA(k)-9 3936 +y FK(Moreo)m(v)m(er,)34 b(there)f(m)m(ust)g(b)s(e)g(a)f(queen)i(in)e +(eac)m(h)h(ro)m(w:)44 b(F)-8 b(or)32 b(all)e FC(i)p FK(,)1464 +4156 y FC(x)1519 4171 y FA(i)p FB(1)1605 4156 y FI(_)23 +b FC(x)1749 4171 y FA(i)p FB(2)1835 4156 y FI(_)f(\001)17 +b(\001)g(\001)j(_)j FC(x)2205 4171 y FA(iN)-9 4376 y +FK(T)-8 b(aking)31 b(the)i(conjunction)f(of)g(all)e(the)j(ab)s(o)m(v)m +(e)g(requiremen)m(ts,)g(w)m(e)h(get)e(a)g(predicate)g +FD(Sol)3247 4391 y FA(N)3314 4376 y FK(\()n FC(~)-47 +b(x)q FK(\))32 b(true)g(at)-9 4497 y(exactly)h(the)g(con\014gurations)f +(that)g(are)h(solutions)e(to)h(the)h FC(N)44 b FK(queens)34 +b(problem.)-9 4725 y FF(Exercise)i(6.1)h(\(8)g(Queens)i(Problem\))47 +b FK(W)-8 b(rite)49 b(a)h(program)f(that)i(can)f(\014nd)h(an)f(R)m +(OBDD)g(for)-9 4845 y FD(Sol)120 4860 y FA(N)187 4845 +y FK(\()n FC(~)-47 b(x)q FK(\))46 b(when)i(giv)m(en)f +FC(N)57 b FK(as)47 b(input.)85 b(Mak)m(e)48 b(a)f(table)f(of)g(the)h(n) +m(um)m(b)s(er)g(of)f(solutions)g(to)g(the)i FC(N)-9 4966 +y FK(queens)34 b(problem)d(for)i FC(N)38 b FK(=)27 b(1)p +FC(;)17 b FK(2)p FC(;)g FK(3)p FC(;)g FK(4)p FC(;)g FK(5)p +FC(;)g FK(6)p FC(;)g FK(7)p FC(;)g FK(8)p FC(;)g(:)g(:)g(:)28 +b FK(When)34 b(there)f(is)f(a)g(solution,)f(giv)m(e)i(one.)p +eop +%%Page: 29 30 +29 29 bop -9 -460 a FG(6)97 b(EXAMPLES)34 b(OF)e(PR)m(OBLEM)i(SOL)-11 +b(VING)33 b(WITH)g(R)m(OBDDS)1052 b FK(29)657 1816 y +@beginspecial 0 @llx 0 @lly 322 @urx 251 @ury 3220 @rwi +@setspecial +%%BeginDocument: adder.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +8.0 259.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 423 m 0 0 l 505 0 l 505 423 l cp clip + 0.67500 0.67500 sc +% Polyline +0.500 slw +n 259 119 m 259 79 l 219 79 l 219 119 l cp gs col0 s gr +% Polyline +n 359 199 m 359 159 l 319 159 l 319 199 l cp gs col0 s gr +% Polyline +n 259 259 m 259 219 l 219 219 l 219 259 l cp gs col0 s gr +% Polyline +n 369 319 m 369 279 l 329 279 l 329 319 l cp gs col0 s gr +% Polyline +gs clippath +331 149 m 329 157 l 327 149 l 327 160 l 331 160 l cp +clip +n 329 39 m 329 159 l gs col0 s gr gr + +% arrowhead +n 331 149 m 329 157 l 327 149 l col0 s +% Polyline +gs clippath +351 149 m 349 157 l 347 149 l 347 160 l 351 160 l cp +clip +n 349 39 m 349 159 l gs col0 s gr gr + +% arrowhead +n 351 149 m 349 157 l 347 149 l col0 s +% Polyline +gs clippath +269 91 m 260 89 l 269 87 l 258 87 l 258 91 l cp +clip +n 329 89 m 259 89 l gs col0 s gr gr + +% arrowhead +n 269 91 m 260 89 l 269 87 l col0 s +% Polyline +gs clippath +269 111 m 260 109 l 269 107 l 258 107 l 258 111 l cp +clip +n 349 109 m 259 109 l gs col0 s gr gr + +% arrowhead +n 269 111 m 260 109 l 269 107 l col0 s +% Polyline +gs clippath +341 269 m 339 277 l 337 269 l 337 280 l 341 280 l cp +clip +n 339 199 m 339 279 l gs col0 s gr gr + +% arrowhead +n 341 269 m 339 277 l 337 269 l col0 s +% Polyline +gs clippath +269 231 m 260 229 l 269 227 l 258 227 l 258 231 l cp +clip +n 339 229 m 259 229 l gs col0 s gr gr + +% arrowhead +n 269 231 m 260 229 l 269 227 l col0 s +% Polyline +gs clippath +269 251 m 260 249 l 269 247 l 258 247 l 258 251 l cp +clip +n 419 249 m 259 249 l gs col0 s gr gr + +% arrowhead +n 269 251 m 260 249 l 269 247 l col0 s +% Polyline +gs clippath +149 241 m 140 239 l 149 237 l 138 237 l 138 241 l cp +clip +n 219 239 m 139 239 l gs col0 s gr gr + +% arrowhead +n 149 241 m 140 239 l 149 237 l col0 s +% Polyline +n 139 249 m 139 209 l 99 209 l 99 249 l cp gs col0 s gr +% Polyline +gs clippath +149 221 m 140 219 l 149 217 l 138 217 l 138 221 l cp +clip +n 219 99 m 179 99 l 179 219 l 139 219 l gs col0 s gr gr + +% arrowhead +n 149 221 m 140 219 l 149 217 l col0 s +% Polyline +gs clippath +49 231 m 40 229 l 49 227 l 38 227 l 38 231 l cp +clip +n 99 229 m 39 229 l gs col0 s gr gr + +% arrowhead +n 49 231 m 40 229 l 49 227 l col0 s +% Polyline +gs clippath +361 269 m 359 277 l 357 269 l 357 280 l 361 280 l cp +clip +n 359 249 m 359 279 l gs col0 s gr gr + +% arrowhead +n 361 269 m 359 277 l 357 269 l col0 s +% Polyline +gs clippath +351 349 m 349 357 l 347 349 l 347 360 l 351 360 l cp +clip +n 349 319 m 349 359 l gs col0 s gr gr + +% arrowhead +n 351 349 m 349 357 l 347 349 l col0 s +$F2psEnd +rs +%%EndDocument + @endspecial 1348 1006 a + gsave 0 0 0 setrgbcolor + 1348 1006 a Fc(_)1428 1006 y + grestore + +1428 1006 a 2023 275 a + gsave 0 0 0 setrgbcolor + 2023 275 a Fc(^)2103 275 y + grestore + 2103 +275 a 2023 1062 a + gsave 0 0 0 setrgbcolor + 2023 1062 a Fc(^)2103 1062 y + grestore + 2103 1062 +a 2543 725 a + gsave 0 0 0 setrgbcolor + 2543 725 a FL(xor)2710 725 y + grestore + 2710 725 a +2599 1400 a + gsave 0 0 0 setrgbcolor + 2599 1400 a FL(xor)2766 1400 y + grestore + 2766 1400 +a 2536 -175 a + gsave 0 0 0 setrgbcolor + 2536 -175 a Fq(x)2603 -175 y + grestore + 2603 -175 +a 2651 -175 a + gsave 0 0 0 setrgbcolor + 2651 -175 a Fq(y)2712 -175 y + grestore + 2712 -175 +a 815 1006 a + gsave 0 0 0 setrgbcolor + 815 1006 a Fq(c)865 1024 y Ft(o)910 1006 +y + grestore + 910 1006 a 3104 1091 a + gsave 0 0 0 setrgbcolor + 3104 1091 a Fq(c)3154 1109 y +Ft(i)3187 1091 y + grestore + 3187 1091 a 2654 1794 a + gsave 0 0 0 setrgbcolor + 2654 1794 a +Fq(s)2709 1794 y + grestore + 2709 1794 a 1385 2128 a FK(Figure)32 +b(18:)43 b(A)32 b(full-adder)-9 2413 y Fn(6.2)135 b(Correctness)46 +b(of)f(Com)l(binational)i(Circuits)-9 2597 y FK(A)h FD(ful)5 +b(l-adder)58 b FK(tak)m(es)50 b(as)e(argumen)m(ts)h(t)m(w)m(o)g(bits)f +FC(x)g FK(and)h FC(y)i FK(and)e(an)f(incoming)e(carry)j(bit)e +FC(c)3551 2612 y FA(i)3579 2597 y FK(.)91 b(It)-9 2718 +y(pro)s(duces)39 b(as)h(output)e(a)h(sum)g(bit)f FC(s)g +FK(and)h(an)g(outgoing)e(carry)j(bit)e FC(c)2605 2733 +y FA(o)2643 2718 y FK(.)62 b(The)40 b(requiremen)m(t)f(is)f(that)-9 +2838 y(2)17 b FI(\003)h FC(c)167 2853 y FA(o)223 2838 +y FK(+)g FC(s)28 b FK(=)f FC(x)19 b FK(+)f FC(y)j FK(+)d +FC(c)867 2853 y FA(i)895 2838 y FK(,)31 b(in)f(other)g(w)m(ords)i +FC(c)1637 2853 y FA(o)1706 2838 y FK(is)e(the)h(most)f(signi\014can)m +(t)f(bit)h(of)g(the)h(sum)g(of)f FC(x;)17 b(y)t FK(,)30 +b(and)-9 2958 y FC(c)33 2973 y FA(i)61 2958 y FK(,)j(and)g +FC(s)f FK(the)i(least)e(signi\014can)m(t)g(bit.)43 b(The)34 +b(requiremen)m(t)f(can)h(b)s(e)f(written)f(do)m(wn)i(as)f(a)f(table)h +(for)f FC(c)3732 2973 y FA(o)-9 3079 y FK(and)i(a)h(table)f(for)g +FC(s)h FK(in)f(terms)h(of)f(v)-5 b(alues)35 b(of)f FC(x;)17 +b(y)t FK(,)35 b(and)g FC(c)2100 3094 y FA(i)2128 3079 +y FK(.)50 b(F)-8 b(rom)33 b(suc)m(h)j(a)f(table)f(it)g(is)g(easy)i(to)e +(write)-9 3199 y(do)m(wn)f(a)f(DNF)g(for)g FC(c)764 3214 +y FA(o)835 3199 y FK(and)h FC(s)p FK(.)137 3320 y(A)m(t)49 +b(the)h(normal)d(lev)m(el)i(of)g(abstraction)g(a)g(com)m(binational)d +(circuit)i(is)h(nothing)f(else)i(than)f(a)-9 3440 y(Bo)s(olean)c +(expression.)87 b(It)47 b(can)g(b)s(e)g(represen)m(ted)j(as)c(an)h(R)m +(OBDD,)f(using)g FE(Build)i FK(to)e(construct)-9 3560 +y(the)33 b(trivial)c(R)m(OBDDs)k(for)f(the)h(inputs)f(and)h(using)f(a)g +(call)f(to)h FE(Appl)-7 b(y)33 b FK(for)f(eac)m(h)h(gate.)-9 +3789 y FF(Exercise)j(6.2)49 b FK(Find)32 b(DNFs)h(for)g +FC(c)1333 3804 y FA(o)1404 3789 y FK(and)h FC(s)p FK(.)45 +b(V)-8 b(erify)33 b(that)g(the)h(circuit)e(in)g(\014gure)i(18)f +(implemen)m(ts)e(a)-9 3909 y(one)h(bit)g(full-adder)f(using)h(the)h(R)m +(OBDD-pac)m(k)-5 b(age)32 b(and)g(the)h(DNFs.)-9 4198 +y Fn(6.3)135 b(Equiv)-7 b(alence)46 b(of)f(Com)l(binational)i(Circuits) +-9 4383 y FK(As)26 b(ab)s(o)m(v)m(e)g(w)m(e)h(can)f(construct)g(an)g(R) +m(OBDD)f(from)f(a)h(com)m(binational)e(circuit)h(and)i(use)h(the)f(R)m +(OBDDs)-9 4503 y(to)32 b(sho)m(w)h(prop)s(erties.)44 +b(F)-8 b(or)32 b(instance,)h(the)g(equiv)-5 b(alence)33 +b(with)f(other)g(circuits.)-9 4731 y FF(Exercise)k(6.3)49 +b FK(V)-8 b(erify)28 b(that)g(the)g(t)m(w)m(o)h(circuits)f(in)f +(\014gure)i(19)f(are)g FD(not)38 b FK(equiv)-5 b(alen)m(t)28 +b(using)f(R)m(OBDDs.)-9 4852 y(Find)k(an)i(input)f(that)g(returns)i +(di\013eren)m(t)f(outputs)g(in)f(the)h(t)m(w)m(o)g(circuits.)p +eop +%%Page: 30 31 +30 30 bop -9 -460 a FG(6)97 b(EXAMPLES)34 b(OF)e(PR)m(OBLEM)i(SOL)-11 +b(VING)33 b(WITH)g(R)m(OBDDS)1052 b FK(30)572 4024 y +@beginspecial 0 @llx 0 @lly 334 @urx 419 @ury 3340 @rwi +@setspecial +%%BeginDocument: two-circuits.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +9.0 445.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 658 m 0 0 l 491 0 l 491 658 l cp clip + 0.72000 0.72000 sc +0.500 slw +% Ellipse +n 59 364 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 69 394 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 59 454 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 129 454 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 139 524 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 169 604 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 199 604 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 149 464 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 169 444 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 159 394 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 79 524 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 114 434 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Polyline +n 99 464 m 99 444 l 79 444 l 79 464 l cp gs col0 s gr +% Polyline +gs clippath +209 362 m 217 364 l 209 366 l 220 366 l 220 362 l cp +clip +n 39 364 m 219 364 l gs col0 s gr gr + +% arrowhead +n 209 362 m 217 364 l 209 366 l col0 s +% Polyline +gs clippath +209 502 m 217 504 l 209 506 l 220 506 l 220 502 l cp +clip +n 59 364 m 59 504 l 219 504 l gs col0 s gr gr + +% arrowhead +n 209 502 m 217 504 l 209 506 l col0 s +% Polyline +n 119 534 m 119 514 l 99 514 l 99 534 l cp gs col0 s gr +% Polyline +gs clippath +209 392 m 217 394 l 209 396 l 220 396 l 220 392 l cp +clip +n 39 394 m 219 394 l gs col0 s gr gr + +% arrowhead +n 209 392 m 217 394 l 209 396 l col0 s +% Polyline +gs clippath +209 512 m 217 514 l 209 516 l 220 516 l 220 512 l cp +clip +n 159 394 m 159 514 l 219 514 l gs col0 s gr gr + +% arrowhead +n 209 512 m 217 514 l 209 516 l col0 s +% Polyline +gs clippath +209 522 m 217 524 l 209 526 l 220 526 l 220 522 l cp +clip +n 119 524 m 219 524 l gs col0 s gr gr + +% arrowhead +n 209 522 m 217 524 l 209 526 l col0 s +% Polyline +gs clippath +89 522 m 97 524 l 89 526 l 100 526 l 100 522 l cp +clip +n 39 524 m 99 524 l gs col0 s gr gr + +% arrowhead +n 89 522 m 97 524 l 89 526 l col0 s +% Polyline +gs clippath +209 602 m 217 604 l 209 606 l 220 606 l 220 602 l cp +clip +n 39 604 m 219 604 l gs col0 s gr gr + +% arrowhead +n 209 602 m 217 604 l 209 606 l col0 s +% Polyline +gs clippath +69 452 m 77 454 l 69 456 l 80 456 l 80 452 l cp +clip +n 59 454 m 79 454 l gs col0 s gr gr + +% arrowhead +n 69 452 m 77 454 l 69 456 l col0 s +% Polyline +gs clippath +209 452 m 217 454 l 209 456 l 220 456 l 220 452 l cp +clip +n 99 454 m 219 454 l gs col0 s gr gr + +% arrowhead +n 209 452 m 217 454 l 209 456 l col0 s +% Polyline +gs clippath +209 582 m 217 584 l 209 586 l 220 586 l 220 582 l cp +clip +n 129 454 m 129 584 l 219 584 l gs col0 s gr gr + +% arrowhead +n 209 582 m 217 584 l 209 586 l col0 s +% Polyline +gs clippath +209 572 m 217 574 l 209 576 l 220 576 l 220 572 l cp +clip +n 139 524 m 139 574 l 219 574 l gs col0 s gr gr + +% arrowhead +n 209 572 m 217 574 l 209 576 l col0 s +% Polyline +n 99 434 m 99 414 l 79 414 l 79 434 l cp gs col0 s gr +% Polyline +gs clippath +69 422 m 77 424 l 69 426 l 80 426 l 80 422 l cp +clip +n 69 394 m 69 424 l 79 424 l gs col0 s gr gr + +% arrowhead +n 69 422 m 77 424 l 69 426 l col0 s +% Polyline +gs clippath +209 592 m 217 594 l 209 596 l 220 596 l 220 592 l cp +clip +n 99 424 m 149 424 l 149 594 l 219 594 l gs col0 s gr gr + +% arrowhead +n 209 592 m 217 594 l 209 596 l col0 s +% Polyline +gs clippath +309 452 m 317 454 l 309 456 l 320 456 l 320 452 l cp +clip +n 259 379 m 279 379 l 279 454 l 319 454 l gs col0 s gr gr + +% arrowhead +n 309 452 m 317 454 l 309 456 l col0 s +% Polyline +gs clippath +309 462 m 317 464 l 309 466 l 320 466 l 320 462 l cp +clip +n 259 464 m 319 464 l gs col0 s gr gr + +% arrowhead +n 309 462 m 317 464 l 309 466 l col0 s +% Polyline +gs clippath +309 502 m 317 504 l 309 506 l 320 506 l 320 502 l cp +clip +n 259 504 m 319 504 l gs col0 s gr gr + +% arrowhead +n 309 502 m 317 504 l 309 506 l col0 s +% Polyline +gs clippath +309 512 m 317 514 l 309 516 l 320 516 l 320 512 l cp +clip +n 259 589 m 279 589 l 279 514 l 319 514 l gs col0 s gr gr + +% arrowhead +n 309 512 m 317 514 l 309 516 l col0 s +% Polyline +gs clippath +409 482 m 417 484 l 409 486 l 420 486 l 420 482 l cp +clip +n 359 484 m 419 484 l gs col0 s gr gr + +% arrowhead +n 409 482 m 417 484 l 409 486 l col0 s +% Polyline +n 259 404 m 259 354 l 219 354 l 219 404 l cp gs col0 s gr +% Polyline +n 259 544 m 259 494 l 219 494 l 219 544 l cp gs col0 s gr +% Polyline +n 259 474 m 259 424 l 219 424 l 219 474 l cp gs col0 s gr +% Polyline +n 259 614 m 259 564 l 219 564 l 219 614 l cp gs col0 s gr +% Polyline +n 359 524 m 359 444 l 319 444 l 319 524 l cp gs col0 s gr +% Polyline +gs clippath +209 532 m 217 534 l 209 536 l 220 536 l 220 532 l cp +clip +n 199 604 m 199 534 l 219 534 l gs col0 s gr gr + +% arrowhead +n 209 532 m 217 534 l 209 536 l col0 s +% Polyline +gs clippath +209 442 m 217 444 l 209 446 l 220 446 l 220 442 l cp +clip +n 169 604 m 169 464 l 169 444 l 219 444 l gs col0 s gr gr + +% arrowhead +n 209 442 m 217 444 l 209 446 l col0 s +% Polyline +gs clippath +209 372 m 217 374 l 209 376 l 220 376 l 220 372 l cp +clip +n 169 444 m 169 384 l 169 374 l 219 374 l gs col0 s gr gr + +% arrowhead +n 209 372 m 217 374 l 209 376 l col0 s +% Polyline +gs clippath +209 462 m 217 464 l 209 466 l 220 466 l 220 462 l cp +clip +n 149 464 m 219 464 l gs col0 s gr gr + +% arrowhead +n 209 462 m 217 464 l 209 466 l col0 s +% Polyline +gs clippath +209 382 m 217 384 l 209 386 l 220 386 l 220 382 l cp +clip +n 79 524 m 79 479 l 114 479 l 114 384 l 219 384 l gs col0 s gr gr + +% arrowhead +n 209 382 m 217 384 l 209 386 l col0 s +% Polyline +gs clippath +209 432 m 217 434 l 209 436 l 220 436 l 220 432 l cp +clip +n 114 434 m 219 434 l gs col0 s gr gr + +% arrowhead +n 209 432 m 217 434 l 209 436 l col0 s +% Ellipse +n 74 49 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 74 209 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 54 309 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Ellipse +n 55 149 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr + +% Polyline +n 139 79 m 139 39 l 99 39 l 99 79 l cp gs col0 s gr +% Polyline +n 139 159 m 139 119 l 99 119 l 99 159 l cp gs col0 s gr +% Polyline +n 259 119 m 259 79 l 219 79 l 219 119 l cp gs col0 s gr +% Polyline +n 139 239 m 139 199 l 99 199 l 99 239 l cp gs col0 s gr +% Polyline +n 139 319 m 139 279 l 99 279 l 99 319 l cp gs col0 s gr +% Polyline +n 259 279 m 259 239 l 219 239 l 219 279 l cp gs col0 s gr +% Polyline +n 359 199 m 359 159 l 319 159 l 319 199 l cp gs col0 s gr +% Polyline +gs clippath +89 47 m 97 49 l 89 51 l 100 51 l 100 47 l cp +clip +n 39 49 m 99 49 l gs col0 s gr gr + +% arrowhead +n 89 47 m 97 49 l 89 51 l col0 s +% Polyline +gs clippath +89 147 m 97 149 l 89 151 l 100 151 l 100 147 l cp +clip +n 39 149 m 99 149 l gs col0 s gr gr + +% arrowhead +n 89 147 m 97 149 l 89 151 l col0 s +% Polyline +gs clippath +89 207 m 97 209 l 89 211 l 100 211 l 100 207 l cp +clip +n 39 209 m 99 209 l gs col0 s gr gr + +% arrowhead +n 89 207 m 97 209 l 89 211 l col0 s +% Polyline +gs clippath +89 307 m 97 309 l 89 311 l 100 311 l 100 307 l cp +clip +n 39 309 m 99 309 l gs col0 s gr gr + +% arrowhead +n 89 307 m 97 309 l 89 311 l col0 s +% Polyline +gs clippath +209 87 m 217 89 l 209 91 l 220 91 l 220 87 l cp +clip +n 139 59 m 179 59 l 179 89 l 219 89 l gs col0 s gr gr + +% arrowhead +n 209 87 m 217 89 l 209 91 l col0 s +% Polyline +gs clippath +209 107 m 217 109 l 209 111 l 220 111 l 220 107 l cp +clip +n 139 139 m 179 139 l 179 109 l 219 109 l gs col0 s gr gr + +% arrowhead +n 209 107 m 217 109 l 209 111 l col0 s +% Polyline +gs clippath +209 247 m 217 249 l 209 251 l 220 251 l 220 247 l cp +clip +n 139 219 m 179 219 l 179 249 l 219 249 l gs col0 s gr gr + +% arrowhead +n 209 247 m 217 249 l 209 251 l col0 s +% Polyline +gs clippath +209 267 m 217 269 l 209 271 l 220 271 l 220 267 l cp +clip +n 139 299 m 179 299 l 179 269 l 219 269 l gs col0 s gr gr + +% arrowhead +n 209 267 m 217 269 l 209 271 l col0 s +% Polyline +gs clippath +309 167 m 317 169 l 309 171 l 320 171 l 320 167 l cp +clip +n 259 99 m 289 99 l 289 169 l 319 169 l gs col0 s gr gr + +% arrowhead +n 309 167 m 317 169 l 309 171 l col0 s +% Polyline +gs clippath +309 187 m 317 189 l 309 191 l 320 191 l 320 187 l cp +clip +n 259 259 m 289 259 l 289 189 l 319 189 l gs col0 s gr gr + +% arrowhead +n 309 187 m 317 189 l 309 191 l col0 s +% Polyline +gs clippath +389 177 m 397 179 l 389 181 l 400 181 l 400 177 l cp +clip +n 359 179 m 399 179 l gs col0 s gr gr + +% arrowhead +n 389 177 m 397 179 l 389 181 l col0 s +% Polyline +gs clippath +89 127 m 97 129 l 89 131 l 100 131 l 100 127 l cp +clip +n 74 49 m 74 129 l 99 129 l gs col0 s gr gr + +% arrowhead +n 89 127 m 97 129 l 89 131 l col0 s +% Polyline +gs clippath +89 67 m 97 69 l 89 71 l 100 71 l 100 67 l cp +clip +n 54 149 m 54 69 l 99 69 l gs col0 s gr gr + +% arrowhead +n 89 67 m 97 69 l 89 71 l col0 s +% Polyline +gs clippath +89 287 m 97 289 l 89 291 l 100 291 l 100 287 l cp +clip +n 74 209 m 74 289 l 99 289 l gs col0 s gr gr + +% arrowhead +n 89 287 m 97 289 l 89 291 l col0 s +% Polyline +gs clippath +89 227 m 97 229 l 89 231 l 100 231 l 100 227 l cp +clip +n 54 309 m 54 229 l 99 229 l gs col0 s gr gr + +% arrowhead +n 89 227 m 97 229 l 89 231 l col0 s +$F2psEnd +rs +%%EndDocument + @endspecial 1138 2890 a + gsave 0 0 0 setrgbcolor + 1138 2890 a Fc(:)1218 2890 y + grestore + +1218 2890 a 1138 3070 a + gsave 0 0 0 setrgbcolor + 1138 3070 a Fc(:)1218 3070 y + grestore + +1218 3070 a 1258 3490 a + gsave 0 0 0 setrgbcolor + 1258 3490 a Fc(:)1338 3490 y + grestore + +1338 3490 a 2038 3490 a + gsave 0 0 0 setrgbcolor + 2038 3490 a Fc(^)2118 3490 y + grestore + +2118 3490 a 2038 3910 a + gsave 0 0 0 setrgbcolor + 2038 3910 a Fc(^)2118 3910 y + grestore + +2118 3910 a 2038 3070 a + gsave 0 0 0 setrgbcolor + 2038 3070 a Fc(^)2118 3070 y + grestore + +2118 3070 a 2038 2620 a + gsave 0 0 0 setrgbcolor + 2038 2620 a Fc(^)2118 2620 y + grestore + +2118 2620 a 2638 3280 a + gsave 0 0 0 setrgbcolor + 2638 3280 a Fc(_)2718 3280 y + grestore + +2718 3280 a 736 2560 a + gsave 0 0 0 setrgbcolor + 736 2560 a Fq(x)803 2577 y Fr(1)848 +2560 y + grestore + 848 2560 a 736 3520 a + gsave 0 0 0 setrgbcolor + 736 3520 a Fq(x)803 3537 +y Fr(2)848 3520 y + grestore + 848 3520 a 746 4000 a + gsave 0 0 0 setrgbcolor + 746 4000 a Fq(y)803 +4017 y Fr(2)848 4000 y + grestore + 848 4000 a 746 2710 a + gsave 0 0 0 setrgbcolor + 746 2710 +a Fq(y)803 2727 y Fr(1)848 2710 y + grestore + 848 2710 a 3188 3280 +a + gsave 0 0 0 setrgbcolor + 3188 3280 a Fq(b)3238 3280 y + grestore + 3238 3280 a 736 670 a + gsave 0 0 0 setrgbcolor + +736 670 a Fq(x)803 687 y Fr(1)848 670 y + grestore + 848 670 a 746 +1270 a + gsave 0 0 0 setrgbcolor + 746 1270 a Fq(y)803 1287 y Fr(1)848 1270 y + grestore + 848 +1270 a 736 1630 a + gsave 0 0 0 setrgbcolor + 736 1630 a Fq(x)803 1647 y Fr(2)848 +1630 y + grestore + 848 1630 a 746 2230 a + gsave 0 0 0 setrgbcolor + 746 2230 a Fq(y)803 2247 +y Fr(2)848 2230 y + grestore + 848 2230 a 3068 1420 a + gsave 0 0 0 setrgbcolor + 3068 1420 a +Fq(a)3129 1420 y + grestore + 3129 1420 a 1318 730 a + gsave 0 0 0 setrgbcolor + 1318 730 a Fc(^)1398 +730 y + grestore + 1398 730 a 1274 1210 a + gsave 0 0 0 setrgbcolor + 1274 1210 a FL(nor)1444 +1210 y + grestore + 1444 1210 a 1318 1690 a + gsave 0 0 0 setrgbcolor + 1318 1690 a Fc(^)1398 +1690 y + grestore + 1398 1690 a 1274 2170 a + gsave 0 0 0 setrgbcolor + 1274 2170 a FL(nor)1444 +2170 y + grestore + 1444 2170 a 2038 970 a + gsave 0 0 0 setrgbcolor + 2038 970 a Fc(_)2118 970 +y + grestore + 2118 970 a 2038 1930 a + gsave 0 0 0 setrgbcolor + 2038 1930 a Fc(_)2118 1930 y + grestore + +2118 1930 a 2638 1450 a + gsave 0 0 0 setrgbcolor + 2638 1450 a Fc(^)2718 1450 y + grestore + +2718 1450 a 951 4335 a FK(Figure)31 b(19:)43 b(Tw)m(o)34 +b(circuits)e(used)h(in)f(exercise)i(6.3)p eop +%%Page: 31 32 +31 31 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) +2039 b FK(31)1059 1102 y @beginspecial 0 @llx 0 @lly +198 @urx 166 @ury 1980 @rwi @setspecial +%%BeginDocument: ring.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-48.0 180.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 438 m 0 0 l 585 0 l 585 438 l cp clip + 0.45000 0.45000 sc +1.000 slw +% Rotated Ellipse +gs +434 214 tr +-269.978 rot +n 0 0 40 40 0 360 DrawEllipse gs col-1 s gr +gr + +% Polyline +n 474 214 m 494 214 l gs col-1 s gr +% Polyline +n 434 134 m 434 174 l gs col-1 s gr +% Polyline +n 434 254 m 434 294 l gs col-1 s gr +% Ellipse +n 324 119 40 40 0 360 DrawEllipse gs col-1 s gr + +% Rotated Ellipse +gs +324 309 tr +-180.023 rot +n 0 0 40 40 0 360 DrawEllipse gs col-1 s gr +gr + +% Rotated Ellipse +gs +214 214 tr +-90.012 rot +n 0 0 40 40 0 360 DrawEllipse gs col-1 s gr +gr + +% Polyline +n 324 79 m 324 59 l gs col-1 s gr +% Polyline +n 244 119 m 284 119 l gs col-1 s gr +% Polyline +n 364 119 m 404 119 l gs col-1 s gr +% Polyline +n 324 349 m 324 369 l gs col-1 s gr +% Polyline +n 404 309 m 364 309 l gs col-1 s gr +% Polyline +n 284 309 m 244 309 l gs col-1 s gr +% Polyline +n 174 214 m 154 214 l gs col-1 s gr +% Polyline +n 214 294 m 214 254 l gs col-1 s gr +% Polyline +n 214 174 m 214 134 l gs col-1 s gr +$F2psEnd +rs +%%EndDocument + @endspecial 2592 449 a Fb(t)2620 457 y Fx(2)2246 431 +y Fb(h)2290 439 y Fx(2)1842 -207 y Fb(t)1870 -199 y Fx(1)1426 +74 y Fb(c)1459 82 y Fx(1)2251 787 y Fb(c)2284 795 y Fx(3)1842 +1087 y Fb(t)1870 1095 y Fx(3)1110 431 y Fb(t)1138 439 +y Fx(4)1833 93 y Fb(h)1877 101 y Fx(1)1833 806 y Fb(h)1877 +814 y Fx(3)1421 449 y Fb(h)1465 457 y Fx(4)2251 74 y +Fb(c)2284 82 y Fx(2)1426 787 y Fb(c)1459 795 y Fx(4)-9 +1413 y FK(Figure)30 b(20:)42 b(Milner's)31 b(Sc)m(heduler)h(with)f(4)g +(cyclers.)44 b(The)32 b(tok)m(en)g(is)f(passed)i(clo)s(c)m(kwise)e +(from)f FC(c)3500 1428 y FB(1)3571 1413 y FK(to)h FC(c)3731 +1428 y FB(2)-9 1534 y FK(to)h FC(c)152 1549 y FB(3)224 +1534 y FK(to)g FC(c)385 1549 y FB(4)457 1534 y FK(and)h(bac)m(k)g(to)f +FC(c)1035 1549 y FB(1)-9 1814 y FH(7)161 b(V)-13 b(eri\014cation)53 +b(with)h(R)l(OBDDs)-9 2033 y FK(One)27 b(of)g(the)g(ma)5 +b(jor)26 b(uses)j(of)e(R)m(OBDDs)f(is)h(in)f FD(formal)j(veri\014c)-5 +b(ation)p FK(.)41 b(In)27 b(formal)e(v)m(eri\014cation)i(a)g(mo)s(del) +-9 2154 y(of)i(a)h(system)h FC(M)41 b FK(is)30 b(giv)m(en)g(together)h +(with)f(some)g(prop)s(erties)g FC(P)44 b FK(supp)s(osed)31 +b(to)f(hold)g(for)f(the)i(system.)-9 2274 y(The)d(task)g(is)e(to)h +(determine)g(whether)i(indeed)e FC(M)38 b FK(satisfy)27 +b FC(P)14 b FK(.)41 b(The)29 b(approac)m(h)e(w)m(e)i(tak)m(e,)g(in)d +(whic)m(h)i(w)m(e)-9 2394 y(shall)i(use)j(an)f(algorithm)d(to)i(answ)m +(er)j(the)e(satisfaction)f(problem,)g(is)g(often)h(called)f +FD(mo)-5 b(del)33 b(che)-5 b(cking)p FK(.)137 2515 y(W)d(e)39 +b(shall)e(lo)s(ok)g(at)h(a)g(concrete)i(example)e(called)f +FD(Milner's)j(Sche)-5 b(duler)49 b FK(\(tak)m(en)39 b(from)e(Milner's) +-9 2635 y(b)s(o)s(ok)j([Mil89)o(]\).)70 b(The)42 b(mo)s(del)e(consists) +i(of)e FC(N)52 b FD(cyclers)p FK(,)44 b(connected)f(in)d(a)h(ring,)i +(that)e(co-op)s(erates)-9 2755 y(on)h(starting)f(and)h(detecting)h +(termination)c(of)j FC(N)53 b FK(tasks)43 b(that)f(are)g(not)g(further) +h(describ)s(ed.)73 b(The)-9 2876 y(sc)m(heduler)47 b(m)m(ust)f(mak)m(e) +g(sure)h(that)e(the)i FC(N)56 b FK(tasks)47 b(are)f(alw)m(a)m(ys)g +(started)h(in)e(order)h(but)g(they)h(are)-9 2996 y(allo)m(w)m(ed)33 +b(to)g(terminate)f(in)h(an)m(y)i(order.)47 b(This)33 +b(is)h(one)g(of)f(the)h(prop)s(erties)g(that)f(has)h(to)f(b)s(e)h(sho)m +(wn)h(to)-9 3117 y(hold)h(for)i(the)g(mo)s(del.)57 b(The)39 +b(cyclers)g(try)f(to)f(ful\014ll)e(this)i(b)m(y)i(passing)f(a)f(tok)m +(en:)55 b(the)38 b(holder)f(of)h(the)-9 3237 y(tok)m(en)33 +b(is)f(the)h(only)f(pro)s(cess)i(allo)m(w)m(ed)e(to)g(start)h(its)f +(task.)137 3357 y(All)f(cyclers)i(are)g(similar)c(except)34 +b(that)f(one)g(of)f(them)g(has)h(the)g(tok)m(en)h(in)d(the)i(initial)c +(state.)44 b(The)-9 3478 y(cyclers)32 b FD(cyc)444 3493 +y FA(i)472 3478 y FK(,)g(1)27 b FI(\024)h FC(i)g FI(\024)g +FC(N)42 b FK(are)32 b(describ)s(ed)g(in)e(a)h(state-based)i(fashion)d +(as)i(small)d(transition)h(systems)-9 3598 y(o)m(v)m(er)i(the)f(Bo)s +(olean)e(v)-5 b(ariables)30 b FC(t)1175 3613 y FA(i)1203 +3598 y FC(;)17 b(h)1303 3613 y FA(i)1331 3598 y FK(,)32 +b(and)f FC(c)1620 3613 y FA(i)1648 3598 y FK(.)43 b(The)32 +b(v)-5 b(ariable)29 b FC(t)2316 3613 y FA(i)2375 3598 +y FK(is)h(1)h(when)h(task)f FC(i)h FK(is)e(running)g(and)h(0)-9 +3719 y(when)k(it)e(is)h(terminated;)g FC(h)1030 3734 +y FA(i)1093 3719 y FK(is)f(1)h(when)i(cycler)f FC(i)f +FK(has)h(a)f(tok)m(en,)h(0)f(otherwise;)i FC(c)3022 3734 +y FA(i)3084 3719 y FK(is)e(1)g(when)h(cycler)-9 3839 +y FC(i)25 b FI(\000)g FK(1)36 b(has)h(put)f(do)m(wn)h(the)g(tok)m(en)g +(and)g(cycler)g FC(i)f FK(not)g(y)m(et)i(pic)m(k)m(ed)f(it)f(up.)55 +b(Hence)38 b(a)e(cycler)g(starts)h(a)-9 3959 y(task)28 +b(b)m(y)h(c)m(hanging)e FC(t)765 3974 y FA(i)822 3959 +y FK(from)f(0)i(to)g(1,)g(and)g(detects)i(its)d(termination)f(when)j +FC(t)2798 3974 y FA(i)2854 3959 y FK(is)e(again)g(c)m(hanged)i(bac)m(k) +-9 4080 y(to)j(0;)i(and)f(it)f(pic)m(ks)i(up)g(the)f(tok)m(en)h(b)m(y)g +(c)m(hanging)f FC(c)1917 4095 y FA(i)1978 4080 y FK(from)f(1)h(to)g(0)g +(and)g(puts)h(it)e(do)m(wn)i(b)m(y)g(c)m(hanging)-9 4200 +y FC(c)33 4215 y FA(i)p FB(+1)183 4200 y FK(from)e(0)g(to)g(1.)43 +b(The)34 b(b)s(eha)m(viour)f(of)f(cycler)h FC(i)g FK(is)f(describ)s(ed) +h(b)m(y)g(t)m(w)m(o)h(transitions:)901 4398 y FF(if)e +FC(c)1041 4413 y FA(i)1097 4398 y FK(=)c(1)54 b FI(^)h +FC(t)1460 4413 y FA(i)1516 4398 y FK(=)28 b(0)k FF(then)38 +b FC(t)1993 4413 y FA(i)2021 4398 y FC(;)17 b(c)2107 +4413 y FA(i)2135 4398 y FC(;)g(h)2235 4413 y FA(i)2300 +4398 y FF(:=)38 b FK(1)p FC(;)17 b FK(0)p FC(;)g FK(1)901 +4518 y FF(if)32 b FC(h)1055 4533 y FA(i)1111 4518 y FK(=)c(1)437 +b FF(then)38 b FC(c)2000 4533 y FB(\()p FA(i)23 b Fa(mo)r(d)g +FA(N)7 b FB(\)+1)2414 4518 y FC(;)17 b(h)2514 4533 y +FA(i)2580 4518 y FF(:=)37 b FK(1)p FC(;)17 b FK(0)-9 +4715 y(The)39 b(meaning)e(of)i(a)f(transition)f(\\)p +FF(if)h FD(c)-5 b(ondition)38 b FF(then)g FD(assignment)p +FK(")g(is)g(that,)i(if)d(the)i FD(c)-5 b(ondition)46 +b FK(is)-9 4835 y(true)37 b(in)f(some)h(state,)i(then)e(the)h(system)g +(can)f(ev)m(olv)m(e)h(to)e(a)h(new)h(state)f(p)s(erforming)e(the)j +(\(parallel\))-9 4955 y FD(assignment)p FK(.)79 b(Hence,)50 +b(if)44 b(the)i(system)g(is)f(in)f(a)h(state)g(where)i +FC(c)2440 4970 y FA(i)2513 4955 y FK(is)e(1)g(and)g FC(t)2955 +4970 y FA(i)3028 4955 y FK(is)g(0)g(then)h(w)m(e)g(can)-9 +5076 y(sim)m(ultaneously)31 b(set)i FC(t)840 5091 y FA(i)901 +5076 y FK(to)f(1,)h FC(c)1171 5091 y FA(i)1231 5076 y +FK(to)g(0)f(and)h FC(h)1678 5091 y FA(i)1738 5076 y FK(to)g(1.)p +eop +%%Page: 32 33 +32 32 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) +2039 b FK(32)137 -171 y(The)28 b(transitions)e(are)i(enco)s(ded)g(b)m +(y)g(a)f(single)g(predicate)g(o)m(v)m(er)i(the)e(v)-5 +b(alue)27 b(of)g(the)h(v)-5 b(ariables)26 b(b)s(efore)-9 +-51 y(the)41 b(transitions)e(\(the)i FD(pr)-5 b(e-state)p +FK(\))40 b(and)h(the)g(v)-5 b(alues)40 b(after)h(the)g(transition)e +(\(the)i FD(p)-5 b(ost-state)p FK(\).)67 b(The)-9 70 +y(v)-5 b(ariables)27 b(in)i(the)g(pre-state)h(are)f(the)g +FC(t)1428 85 y FA(i)1457 70 y FC(;)17 b(h)1557 85 y FA(i)1585 +70 y FC(;)g(c)1671 85 y FA(i)1699 70 y FC(;)g FK(1)27 +b FI(\024)h FC(i)g FI(\024)g FC(N)40 b FK(whic)m(h)29 +b(w)m(e)h(shall)e(collectiv)m(ely)g(refer)h(to)g(as)-11 +190 y FC(~)-47 b(x)33 b FK(and)f(in)g(the)h(p)s(ost-state)g +FC(t)1039 154 y Fy(0)1039 215 y FA(i)1068 190 y FC(;)17 +b(h)1168 154 y Fy(0)1168 215 y FA(i)1196 190 y FC(;)g(c)1282 +154 y Fy(0)1282 215 y FA(i)1309 190 y FC(;)g FK(1)28 +b FI(\024)g FC(i)g FI(\024)h FC(N)10 b FK(,)33 b(whic)m(h)g(w)m(e)h +(shall)d(refer)i(to)g(as)e FC(~)-47 b(x)3021 154 y Fy(0)3044 +190 y FK(.)44 b(Eac)m(h)34 b(transition)-9 310 y(is)j(an)i(atomic)d +(action)i(that)g(excludes)i(an)m(y)f(other)f(action.)60 +b(Therefore)40 b(in)d(the)i(enco)s(ding)f(w)m(e)h(shall)-9 +431 y(often)31 b(ha)m(v)m(e)i(to)f(sa)m(y)g(that)g(a)f(lot)f(of)i(v)-5 +b(ariables)30 b(are)i(unc)m(hanged.)44 b(Assume)33 b(that)e +FC(S)38 b FK(is)31 b(a)g(subset)i(of)f(the)-9 551 y(unprimed)f(v)-5 +b(ariables)30 b FC(~)-47 b(x)p FK(.)43 b(W)-8 b(e)33 +b(shall)e(use)j(a)e(predicate)g FD(unchange)-5 b(d)2469 +566 y FA(S)2551 551 y FK(o)m(v)m(er)32 b FC(~)-47 b(x;)15 +b(~)-47 b(x)2914 515 y Fy(0)2970 551 y FK(whic)m(h)33 +b(ensures)h(that)-9 672 y(all)c(v)-5 b(ariables)31 b(in)h +FC(S)38 b FK(are)33 b(unc)m(hanged.)45 b(It)33 b(is)f(de\014ned)i(as)f +(follo)m(ws:)1265 904 y FD(unchange)-5 b(d)1706 927 y +FA(S)1817 904 y FK(=)1893 919 y Fx(def)2048 809 y Fv(^)2037 +1020 y FA(x)p Fy(2)p FA(S)2187 904 y FC(x)28 b FK(=)f +FC(x)2428 862 y Fy(0)2469 904 y FC(:)-9 1212 y FK(It)48 +b(is)f(sligh)m(tly)g(more)g(con)m(v)m(enien)m(t)j(to)e(use)h(the)f +(predicate)h FD(assigne)-5 b(d)2629 1235 y FA(S)2676 +1216 y Fd(0)2756 1212 y FK(=)54 b FD(unchange)-5 b(d)3326 +1235 y FA(~)-34 b(x)p Fy(n)p FA(S)3449 1216 y Fd(0)3523 +1212 y FK(whic)m(h)-9 1332 y(express)32 b(that)e(ev)m(ery)i(v)-5 +b(ariable)29 b FD(not)40 b FK(in)29 b FC(S)1510 1296 +y Fy(0)1564 1332 y FK(is)g(unc)m(hanged.)45 b(W)-8 b(e)30 +b(can)h(no)m(w)g(de\014ne)h FC(P)3068 1347 y FA(i)3096 +1332 y FK(,)e(the)h(transitions)-9 1452 y(of)h(cycler)h +FC(i)g FK(o)m(v)m(er)g(the)g(v)-5 b(ariables)30 b FC(~)-48 +b(x)q(;)1334 1430 y(~)1327 1452 y(x)1382 1424 y Fy(0)1438 +1452 y FK(as)33 b(follo)m(ws:)475 1672 y FC(P)538 1687 +y FA(i)626 1672 y FK(=)702 1687 y Fx(def)1037 1672 y +FK(\()p FC(c)1117 1687 y FA(i)1167 1672 y FI(^)23 b(:)p +FC(t)1357 1687 y FA(i)1408 1672 y FI(^)f FC(t)1531 1636 +y Fy(0)1531 1697 y FA(i)1582 1672 y FI(^)h(:)p FC(c)1779 +1636 y Fy(0)1779 1697 y FA(i)1829 1672 y FI(^)g FC(h)1974 +1636 y Fy(0)1974 1697 y FA(i)2215 1672 y FI(^)g FD(assigne)-5 +b(d)2653 1696 y Fy(f)p FA(c)2719 1706 y Fw(i)2745 1696 +y FA(;t)2790 1706 y Fw(i)2816 1696 y FA(;h)2877 1706 +y Fw(i)2903 1696 y Fy(g)2942 1672 y FK(\))888 1797 y +FI(_)83 b FK(\()p FC(h)1131 1812 y FA(i)1182 1797 y FI(^)248 +b FC(c)1538 1761 y Fy(0)1538 1826 y FB(\()p FA(i)22 b +Fx(mo)r(d)e FA(N)7 b FB(\)+1)1954 1797 y FI(^)22 b(:)p +FC(h)2164 1761 y Fy(0)2164 1821 y FA(i)2215 1797 y FI(^)h +FD(assigne)-5 b(d)2653 1820 y Fy(f)p FA(c)2719 1834 y +Fx(\()p Fw(i)20 b Fx(mo)r(d)h Fw(N)5 b Fx(\)+1)3080 1820 +y FA(;h)3141 1830 y Fw(i)3167 1820 y Fy(g)3206 1797 y +FK(\))-9 2024 y(The)45 b(signalling)d(of)i(termination)f(of)h(task)h +FC(i)p FK(,)k(b)m(y)c(c)m(hanging)g FC(t)2374 2039 y +FA(i)2447 2024 y FK(from)f(1)g(to)h(0)f(p)s(erformed)h(b)m(y)h(the)-9 +2145 y(en)m(vironmen)m(t)32 b(is)h(mo)s(deled)e(b)m(y)j +FC(N)43 b FK(transitions)31 b FC(E)1849 2160 y FA(i)1877 +2145 y FC(;)17 b FK(1)28 b FI(\024)g FC(i)g FI(\024)g +FC(N)10 b FK(:)1231 2365 y FC(E)1303 2380 y FA(i)1392 +2365 y FK(=)1468 2380 y Fx(def)1612 2365 y FC(t)1647 +2380 y FA(i)1698 2365 y FI(^)22 b(:)p FC(t)1887 2324 +y Fy(0)1887 2389 y FA(i)1938 2365 y FI(^)h FD(assigne)-5 +b(d)2376 2388 y Fy(f)p FA(t)2436 2398 y Fw(i)2463 2388 +y Fy(g)2502 2365 y FC(;)-9 2585 y FK(expressing)34 b(the)f(transitions) +f FF(if)g FC(t)1246 2600 y FA(i)1303 2585 y FK(=)c(1)k +FF(then)h FC(t)1775 2600 y FA(i)1832 2585 y FK(:=)28 +b(0.)44 b(No)m(w,)34 b(at)f(an)m(y)g(giv)m(en)g(state)h(the)f(system)h +(can)-9 2705 y(p)s(erform)27 b(one)i(of)g(the)g(transitions)f(from)f +(one)j(of)e(the)h FC(P)2018 2720 y FA(i)2046 2705 y FK('s)h(or)e(the)h +FC(E)2492 2720 y FA(i)2521 2705 y FK('s,)h(i.e.,)f(all)e(p)s(ossible)h +(transitions)-9 2825 y(are)k(giv)m(en)h(b)m(y)g(the)g(predicate)g +FC(T)14 b FK(:)1068 3046 y FC(T)74 b FK(=)1275 3061 y +Fx(def)1420 3046 y FC(P)1483 3061 y FB(1)1544 3046 y +FI(_)23 b(\001)17 b(\001)g(\001)j(_)j FC(P)1923 3061 +y FA(n)1991 3046 y FI(_)g FC(E)2152 3061 y FB(1)2214 +3046 y FI(_)f(\001)17 b(\001)g(\001)k(_)h FC(E)2601 3061 +y FA(n)2665 3046 y FC(:)-9 3266 y FK(In)34 b(the)h(initial)c(state)j(w) +m(e)i(assume)f(that)f(all)e(tasks)k(are)e(stopp)s(ed,)i(no)e(cycler)h +(has)g(a)f(tok)m(en)h(and)g(only)-9 3386 y(place)f(1)h(\()p +FC(c)406 3401 y FB(1)445 3386 y FK(\))g(has)g(a)f(tok)m(en.)51 +b(Hence)36 b(the)g(initial)31 b(state)k(can)g(b)s(e)g(c)m(haracterized) +g(b)m(y)h(the)f(predicate)g FC(I)-9 3506 y FK(o)m(v)m(er)e(the)g +(unprimed)f(v)-5 b(ariables)30 b FC(~)-48 b(x)33 b FK(giv)m(en)g(b)m +(y:)1043 3726 y FC(I)68 b FK(=)1230 3741 y Fx(def)1375 +3726 y FI(:)1435 3708 y FC(~)1441 3726 y(t)22 b FI(^)h(:)1646 +3700 y FC(~)1653 3726 y(h)g FI(^)f FC(c)1862 3741 y FB(1)1924 +3726 y FI(^)g(:)p FC(c)2120 3741 y FB(2)2182 3726 y FI(^)h(\001)17 +b(\001)g(\001)j(^)j(:)p FC(c)2606 3741 y FA(N)2690 3726 +y FC(:)-9 3946 y FK(\(Here)34 b FI(:)g FK(applied)e(to)i(a)f(v)m(ector) +1192 3928 y FC(~)1199 3946 y(t)g FK(means)h(the)g(conjunction)g(of)f +FI(:)h FK(applied)e(to)h(eac)m(h)i(co)s(ordinate)e FC(t)3677 +3961 y FA(i)3705 3946 y FK(.\))-9 4067 y(The)g(predicates)g(describing) +f(Milner's)h(Sc)m(heduler)g(are)g(summarized)e(in)h(\014gure)h(21.)137 +4187 y(Within)e(this)h(setup)i(w)m(e)g(could)e(start)g(asking)h(a)f +(lot)f(of)h(questions.)45 b(F)-8 b(or)32 b(example,)110 +4390 y(1.)48 b(Can)39 b(w)m(e)f(\014nd)h(a)e(predicate)h +FC(R)h FK(o)m(v)m(er)g(the)f(unprimed)f(v)-5 b(ariables)36 +b(c)m(haracterizing)h(exactly)i(the)234 4511 y(states)34 +b(that)e(can)h(b)s(e)g(reac)m(hed)h(from)d FC(I)8 b FK(?)43 +b FC(R)34 b FK(is)e(called)g(the)h(set)g(of)f FD(r)-5 +b(e)g(achable)34 b(states)p FK(.)110 4714 y(2.)48 b(Ho)m(w)34 +b(man)m(y)e(reac)m(hable)h(states)g(are)g(there?)110 +4918 y(3.)48 b(Is)34 b(it)d(the)i(case)h(that)e(in)g(all)e(reac)m +(hable)j(states)h(only)e(one)h(tok)m(en)g(is)f(presen)m(t?)110 +5121 y(4.)48 b(Is)34 b(task)f FC(t)585 5136 y FA(i)646 +5121 y FK(alw)m(a)m(ys)g(only)f(started)h(after)f FC(t)1768 +5136 y FA(i)p Fy(\000)p FB(1)1887 5121 y FK(?)p eop +%%Page: 33 34 +33 33 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) +2039 b FK(33)p -9 -267 3836 4 v -9 879 4 1146 v 413 -50 +a FD(unchange)-5 b(d)853 -27 y FA(S)987 -50 y FK(=)1063 +-35 y Fx(def)1230 -125 y Fv(V)1313 -21 y FA(x)p Fy(2)p +FA(S)1467 -50 y FC(x)29 b FK(=)e FC(x)1709 -86 y Fy(0)413 +70 y FD(assigne)-5 b(d)761 94 y FA(S)808 75 y Fd(0)987 +70 y FK(=)1063 85 y Fx(def)1230 70 y FD(unchange)g(d)1670 +94 y FA(~)-34 b(x)p Fy(n)p FA(S)1793 75 y Fd(0)413 195 +y FC(P)476 210 y FA(i)987 195 y FK(=)1063 210 y Fx(def)1329 +195 y FK(\()p FC(c)1409 210 y FA(i)1459 195 y FI(^)23 +b(:)p FC(t)1649 210 y FA(i)1700 195 y FI(^)f FC(t)1823 +158 y Fy(0)1823 219 y FA(i)1874 195 y FI(^)h(:)p FC(c)2071 +158 y Fy(0)2071 219 y FA(i)2121 195 y FI(^)g FC(h)2266 +158 y Fy(0)2266 219 y FA(i)2316 195 y FI(^)159 b FD(assigne)-5 +b(d)2890 218 y FA(c)2921 228 y Fw(i)2947 218 y FA(;t)2992 +228 y Fw(i)3018 218 y FA(;h)3079 228 y Fw(i)3109 195 +y FK(\))1230 315 y FI(_)33 b FK(\()p FC(h)1423 330 y +FA(i)1474 315 y FI(^)248 b FC(c)1830 279 y Fy(0)1830 +340 y FA(i)21 b Fx(mo)r(d)g FA(N)7 b FB(+1)2191 315 y +FI(^)23 b(:)p FC(h)2402 279 y Fy(0)2402 340 y FA(i)2453 +315 y FI(^)f FD(assigne)-5 b(d)2890 339 y FA(c)2921 351 +y Fw(i)20 b Fx(mo)r(d)h Fw(N)5 b Fx(+1)3234 339 y FA(;h)3295 +349 y Fw(i)3325 315 y FK(\))413 442 y FC(E)485 457 y +FA(i)987 442 y FK(=)1063 457 y Fx(def)1230 442 y FC(t)1265 +457 y FA(i)1316 442 y FI(^)22 b(:)p FC(t)1505 406 y Fy(0)1505 +466 y FA(i)1556 442 y FI(^)h FD(assigne)-5 b(d)1994 465 +y FA(t)2019 475 y Fw(i)413 582 y FC(T)517 b FK(=)1063 +597 y Fx(def)1291 488 y Fv(_)1230 699 y FB(1)p Fy(\024)p +FA(i)p Fy(\024)p FA(N)1479 582 y FC(P)1542 597 y FA(i)1592 +582 y FI(_)23 b FC(E)1753 597 y FA(i)413 818 y FC(I)531 +b FK(=)1063 833 y Fx(def)1230 818 y FI(:)1290 799 y FC(~)1296 +818 y(t)23 b FI(^)g(:)1502 791 y FC(~)1509 818 y(h)f +FI(^)h FC(c)1718 833 y FB(1)1779 818 y FI(^)g(:)p FC(c)1976 +833 y FB(2)2038 818 y FI(^)g(\001)17 b(\001)g(\001)j(^)i(:)p +FC(c)2461 833 y FA(N)p 3823 879 V -9 882 3836 4 v -9 +1042 a FK(Figure)33 b(21:)45 b(Milner's)34 b(Sc)m(heduler)h(as)f +(describ)s(ed)h(b)m(y)g(the)g(transition)d(predicate)i +FC(T)48 b FK(and)34 b(the)g(initial-)-9 1163 y(state)f(predicate)f +FC(I)8 b FK(.)110 1422 y(5.)48 b(Do)s(es)28 b(Milner's)g(Sc)m(heduler)i +(p)s(ossess)g(a)e(deadlo)s(c)m(k?)42 b(I.e.,)30 b(is)e(there)h(a)f +(reac)m(hable)g(state)h(in)e(whic)m(h)234 1542 y(no)33 +b(transitions)e(can)i(b)s(e)g(tak)m(en?)-9 1706 y(T)-8 +b(o)40 b(answ)m(er)j(these)f(questions)g(w)m(e)g(\014rst)f(ha)m(v)m(e)h +(to)f(compute)g FC(R)q FK(.)68 b(In)m(tuitiv)m(ely)-8 +b(,)43 b FC(R)f FK(m)m(ust)f(b)s(e)g(the)g(set)-9 1826 +y(of)34 b(states)i(that)f(either)h(satisfy)f FC(I)43 +b FK(\(are)35 b(initial\))c(or)k(within)f(a)h(\014nite)g(n)m(um)m(b)s +(er)h(of)f FC(T)49 b FK(transitions)34 b(can)-9 1947 +y(b)s(e)e(reac)m(hed)h(from)e FC(I)8 b FK(.)43 b(This)32 +b(suggest)h(an)f(iterativ)m(e)f(algorithm)e(for)j(computing)f +FC(R)i FK(as)f(an)g(increasing)-9 2067 y(c)m(hain)h(of)h(appro)m +(ximations)e FC(R)1127 2031 y FB(0)1167 2067 y FC(;)17 +b(R)1286 2031 y FB(1)1325 2067 y FC(;)g(:)g(:)g(:)f(;)h(R)1619 +2031 y FA(k)1661 2067 y FC(;)g(:)g(:)g(:)33 b FK(Step)i +FC(k)i FK(of)c(the)i(algorithm)30 b(\014nd)35 b(states)g(that)e(with)-9 +2188 y(less)c(than)h FC(k)j FK(transitions)28 b(can)i(b)s(e)g(reac)m +(hed)g(from)f FC(I)8 b FK(.)42 b(Hence,)32 b(w)m(e)e(tak)m(e)h +FC(R)2700 2151 y FB(0)2767 2188 y FK(=)c(0)j(the)g(constan)m(tly)g +(false)-9 2308 y(predicate)i(and)g(compute)g FC(R)1072 +2272 y FA(k)r FB(+1)1237 2308 y FK(as)g(the)h(disjunction)e(of)h +FC(I)40 b FK(and)32 b(the)h(set)g(of)e(states)i(whic)m(h)g(from)e(one) +-9 2428 y(transition)f(of)j FC(T)46 b FK(can)33 b(b)s(e)f(reac)m(hed)i +(from)e FC(R)1622 2392 y FA(k)1664 2428 y FK(.)44 b(Figure)31 +b(22)i(illustrates)d(the)j(computation)e(of)i FC(R)q +FK(.)137 2549 y(Ho)m(w)g(do)f(w)m(e)i(compute)e(this)g(with)h(R)m +(OBDDs?)42 b(W)-8 b(e)33 b(start)g(with)f(the)h(R)m(OBDD)e +FC(R)e FK(=)p 3302 2460 106 4 v 3302 2574 4 115 v 28 +w(0)p 3404 2574 V 3302 2577 106 4 v 28 w(.)44 b(A)m(t)32 +b(an)m(y)-9 2669 y(p)s(oin)m(t)26 b(in)h(the)h(computation)e(the)j +(next)f(appro)m(ximation)e(is)h(computed)h(b)m(y)g(the)g(disjunction)f +(of)g FC(I)36 b FK(and)-9 2789 y FC(T)44 b FK(comp)s(osed)32 +b(with)e(the)i(previous)g(appro)m(ximation)c FC(R)2036 +2753 y Fy(0)2060 2789 y FK(.)43 b(W)-8 b(e)31 b(are)h(done)f(when)h +(the)g(curren)m(t)g(and)g(the)-9 2910 y(previous)h(appro)m(ximations)d +(coincide:)234 3074 y FE(Rea)n(chable-St)-7 b(a)g(tes)p +FK(\()p FC(I)8 b(;)17 b(T)8 b(;)15 b(~)-47 b(x)n(;)15 +b(~)-47 b(x)1535 3038 y Fy(0)1559 3074 y FK(\))234 3202 +y(1:)144 b FC(R)29 b FI( )p 684 3113 V 684 3227 4 115 +v 55 w FK(0)p 786 3227 V 684 3230 106 4 v 234 3323 a(2:)144 +b FF(rep)s(eat)234 3443 y FK(3:)363 b FC(R)748 3407 y +Fy(0)799 3443 y FI( )28 b FC(R)234 3564 y FK(4:)363 b +FC(R)29 b FI( )e FC(I)j FI(_)23 b FK(\()p FI(9)n FC(~)-47 +b(x)q(:)32 b(T)k FI(^)23 b FC(R)q FK(\)[)n FC(~)-47 b(x=)n(~)g(x)1754 +3527 y Fy(0)1778 3564 y FK(])234 3684 y(5:)144 b FF(un)m(til)31 +b FC(R)789 3648 y Fy(0)840 3684 y FK(=)c FC(R)234 3804 +y FK(6:)144 b FF(return)32 b FC(R)-9 4086 y Fn(7.1)135 +b(Knigh)l(ts)46 b(tour)-9 4271 y FK(Using)39 b(the)h(same)g(enco)s +(ding)f(of)g(a)h(c)m(hess)i(b)s(oard)d(as)h(in)f(section)h(6.1,)h +(letting)d FC(x)3008 4286 y FA(ij)3109 4271 y FK(=)i(1)f(denote)i(the) +-9 4391 y(presence)31 b(of)d(a)h(Knigh)m(t)f(at)g(p)s(osition)f(\()p +FC(i;)17 b(j)6 b FK(\))29 b(w)m(e)h(can)f(solv)m(e)g(other)g(problems.) +42 b(W)-8 b(e)29 b(can)g(enco)s(de)h(mo)m(v)m(es)-9 4512 +y(of)39 b(a)h(Knigh)m(t)f(as)i(transitions.)65 b(F)-8 +b(or)39 b(eac)m(h)i(p)s(osition,)f(8)g(mo)m(v)m(es)h(are)f(p)s(ossible) +g(if)f(they)i(sta)m(y)g(on)f(the)-9 4632 y(b)s(oard.)i(A)30 +b(Knigh)m(t)f(at)g(\()p FC(i;)17 b(j)6 b FK(\))30 b(can)g(b)s(e)g(mo)m +(v)m(ed)g(to)f(an)m(y)i(one)f(of)f(\()p FC(i)16 b FI(\006)g +FK(1)p FC(;)h(j)24 b FI(\006)16 b FK(2\))p FC(;)h FK(\()p +FC(i)f FI(\006)g FK(2)p FC(;)h(j)23 b FI(\006)16 b FK(1\))31 +b(assuming)-9 4753 y(they)38 b(are)f(v)-5 b(acan)m(t)38 +b(and)f(within)f(the)i(b)s(oard)f(b)s(oundary)-8 b(.)58 +b(F)-8 b(or)37 b(all)e FC(i;)17 b(j)43 b FK(and)37 b +FC(k)s(;)17 b(l)40 b FK(with)d(1)e FI(\024)i FC(k)s(;)17 +b(l)37 b FI(\024)g FC(N)-9 4873 y FK(and)32 b(\()p FC(k)s(;)17 +b(l)r FK(\))28 b FI(2)g(f)p FK(\()p FC(i)22 b FI(\006)h +FK(1)p FC(;)17 b(j)27 b FI(\006)c FK(2\))p FC(;)17 b +FK(\()p FC(i)22 b FI(\006)g FK(2)p FC(;)17 b(j)28 b FI(\006)22 +b FK(1\))p FI(g)p FK(:)578 5064 y FC(M)672 5079 y FA(ij;k)r(l)836 +5064 y FK(=)912 5079 y Fx(def)1024 5064 y FC(x)1079 5079 +y FA(ij)1162 5064 y FI(^)h(:)p FC(x)1372 5079 y FA(k)r(;l)1479 +5064 y FI(^)g(:)p FC(x)1689 5023 y Fy(0)1689 5089 y FA(ij)1772 +5064 y FI(^)g FC(x)1916 5023 y Fy(0)1916 5089 y FA(k)r(l)2003 +5064 y FI(^)2325 4970 y Fv(^)2091 5186 y FB(\()p FA(i)2142 +5167 y Fd(0)2165 5186 y FA(;j)2218 5167 y Fd(0)2239 5186 +y FB(\))p Fy(62f)p FB(\()p FA(i;j)t FB(\))p FA(;)p FB(\()p +FA(k)r(;l)q FB(\))p Fy(g)2686 5064 y FC(x)2741 5079 y +FA(i)2765 5060 y Fd(0)2788 5079 y FA(j)2821 5060 y Fd(0)2875 +5064 y FK(=)k FC(x)3033 5023 y Fy(0)3033 5089 y FA(i)3057 +5070 y Fd(0)3080 5089 y FA(j)3113 5070 y Fd(0)3156 5064 +y FC(:)p eop +%%Page: 34 35 +34 34 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) +2039 b FK(34)570 1923 y @beginspecial 0 @llx 0 @lly 315 +@urx 264 @ury 3150 @rwi @setspecial +%%BeginDocument: reachable.pstex +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-51.0 285.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +n 0 462 m 0 0 l 582 0 l 582 462 l cp clip + 0.67500 0.67500 sc +% Polyline +1.000 slw +n 539 419 m 539 54 l 79 54 l 79 419 l cp gs col-1 s gr +% Interp Spline +gs n 164 119 m + 156.5 123.4 140.2 131.6 139 144 curveto + 137.7 156.6 146.0 170.8 159 174 curveto + 181.6 179.6 206.4 166.0 214 144 curveto + 218.6 130.7 211.6 115.0 199 109 curveto + 187.0 103.3 171.7 114.5 164 119 curveto + cp gs col-1 s gr + gr + +% Interp Spline +gs n 149 109 m + 133.9 118.9 112.6 142.3 114 164 curveto + 115.7 190.0 139.7 217.1 164 224 curveto + 193.5 232.4 236.0 221.7 254 194 curveto + 273.0 164.6 274.0 117.2 244 94 curveto + 215.2 71.8 171.2 94.4 149 109 curveto + cp gs col-1 s gr + gr + +% Interp Spline +gs n 144 99 m + 129.7 113.3 96.4 143.1 94 169 curveto + 91.7 194.0 108.8 229.6 129 244 curveto + 164.5 269.3 232.1 282.9 274 259 curveto + 311.9 237.3 338.2 182.4 329 139 curveto + 321.1 101.7 274.4 72.9 244 64 curveto + 226.3 58.8 193.8 68.0 179 74 curveto + 169.3 77.9 151.2 91.8 144 99 curveto + cp gs col-1 s gr + gr + +% Interp Spline +gs n 114 89 m + 104.5 100.5 92.7 130.3 89 144 curveto + 85.9 155.4 80.6 181.2 84 194 curveto + 95.6 237.7 142.1 310.4 184 334 curveto + 232.9 361.5 329.8 374.4 384 349 curveto + 442.1 321.8 527.0 249.7 509 174 curveto + 491.1 98.5 366.2 90.8 319 74 curveto + 302.2 68.0 261.7 60.3 244 59 curveto + 222.0 57.4 171.4 56.2 149 64 curveto + 138.9 67.5 120.7 80.8 114 89 curveto + cp gs col-1 s gr + gr + +/Times-Roman ff 18.00 scf sf +284 49 m +gs 1 -1 sc (Full state space) dup sw pop 2 div neg 0 rm col-1 sh gr +$F2psEnd +rs +%%EndDocument + @endspecial 980 416 a Fq(I)43 b FL(=)33 b Fq(R)1289 +372 y Fr(1)1407 641 y Fq(R)1497 597 y Fr(2)1660 894 y +Fq(R)1750 850 y Fr(3)2409 1344 y Fq(R)1904 1062 y FL(.)2017 +1147 y(.)2157 1203 y(.)669 2234 y FK(Figure)f(22:)43 +b(Sk)m(etc)m(h)34 b(of)e(computation)g(of)g(the)h(reac)m(hable)f +(states)-9 2519 y(Hence,)i(the)f(transitions)e(are)i(giv)m(en)f(as)h +(the)g(predicate)g FC(T)14 b FK(\()n FC(~)-47 b(x;)15 +b(~)-47 b(x)2350 2483 y Fy(0)2373 2519 y FK(\):)842 2757 +y FC(T)14 b FK(\()n FC(~)-47 b(x;)15 b(~)-47 b(x)1105 +2716 y Fy(0)1128 2757 y FK(\))28 b(=)1270 2772 y Fx(def)1971 +2662 y Fv(_)1381 2878 y FB(1)p Fy(\024)p FA(i;j;k)r(;l)q +Fy(\024)p FA(N)s(;)p FB(\()p FA(k)r(;l)q FB(\))p Fy(2f)p +FB(\()p FA(i)p Fy(\006)p FB(1)p FA(;j)t Fy(\006)p FB(2\))p +FA(;)p FB(\()p FA(i)p Fy(\006)p FB(2)p FA(;j)t Fy(\006)p +FB(1\))p Fy(g)2688 2757 y FC(M)2782 2772 y FA(ij;k)r(l)-9 +3295 y FF(Exercise)36 b(7.1)h(\(Knigh)m(t's)g(tour\))48 +b FK(W)-8 b(rite)41 b(a)h(program)f(to)h(solv)m(e)g(the)h(follo)m(wing) +c(problem)i(using)-9 3415 y(the)e(R)m(OBDD-pac)m(k)-5 +b(age:)54 b(Is)40 b(it)d(p)s(ossible)h(for)g(a)h(Knigh)m(t,)g(p)s +(ositioned)e(at)i(the)g(lo)m(w)m(er)f(left)g(corner)h(to)-9 +3536 y(visit)32 b(all)f(p)s(ositions)h(on)h(an)h FC(N)f +FI(\002)23 b FC(N)44 b FK(b)s(oard?)h(\()p FD(Hint:)34 +b FK(Compute)f(iterativ)m(ely)f(all)f(the)j(p)s(ositions)e(that)-9 +3656 y(can)g(b)s(e)h(reac)m(hed)h(b)m(y)g(the)f(Knigh)m(t.\))42 +b(T)-8 b(ry)34 b(it)d(for)h(v)-5 b(arious)32 b FC(N)10 +b FK(.)-9 3884 y FF(Exercise)36 b(7.2)49 b FK(Wh)m(y)34 +b(do)s(es)f(the)g(algorithm)c FE(Rea)n(chable-St)-7 b(a)g(tes)31 +b FK(alw)m(a)m(ys)i(terminate?)-9 4113 y FF(Exercise)j(7.3)49 +b FK(In)34 b(this)g(exercise)h(w)m(e)g(shall)e(w)m(ork)h(with)g +(Milner's)f(Sc)m(heduler)i(for)f FC(N)40 b FK(=)30 b(4.)48 +b(It)34 b(is)f(b)m(y)-9 4233 y(far)24 b(b)s(e)i(the)f(most)g(con)m(v)m +(enien)m(t)i(to)e(solv)m(e)g(the)h(exercise)g(b)m(y)g(using)f(an)g +(implemen)m(tation)d(of)j(an)g(R)m(OBDD)-9 4353 y(pac)m(k)-5 +b(age.)234 4557 y FF(a\))49 b FK(Find)32 b(the)h(reac)m(hable)g(states) +g(as)g(an)g(R)m(OBDD)e FC(R)q FK(.)234 4719 y FF(b\))49 +b FK(Find)32 b(the)h(n)m(um)m(b)s(er)g(of)f(reac)m(hable)h(states.)234 +4881 y FF(c\))49 b FK(Sho)m(w)27 b(that)g(in)g(all)e(reac)m(hable)i +(states)h(at)e(most)h(one)g(tok)m(en)h(is)f(presen)m(t)h(on)f(an)m(y)h +(of)f(the)449 5001 y(placeholders)38 b FC(c)1050 5016 +y FB(1)1089 5001 y FC(;)17 b(:)g(:)g(:)f(;)h(c)1350 5016 +y FA(N)1455 5001 y FK(b)m(y)39 b(form)m(ulating)c(a)j(suitable)f(prop)s +(ert)m(y)h FC(P)52 b FK(and)38 b(pro)m(v)m(e)449 5121 +y(that)32 b FC(R)d FI(\))e FC(P)14 b FK(.)p eop +%%Page: 35 36 +35 35 bop -9 -460 a FG(8)97 b(PR)m(OJECT:)34 b(AN)f(R)m(OBDD)f(P)-8 +b(A)m(CKA)m(GE)1946 b FK(35)234 -171 y FF(d\))49 b FK(Sho)m(w)32 +b(that)f(in)f(all)f(reac)m(hable)j(states)g(Milner's)e(Sc)m(heduler)i +(can)g(alw)m(a)m(ys)f(p)s(erform)f(a)449 -51 y(transition,)h(i.e.,)h +(it)g(do)s(es)h(not)f(p)s(ossess)j(a)d FD(de)-5 b(ad)5 +b(lo)-5 b(ck)p FK(.)-9 139 y FF(Exercise)36 b(7.4)49 +b FK(Complete)31 b(the)h(ab)s(o)m(v)m(e)h(exercise)g(b)m(y)g(sho)m +(wing)f(that)g(the)g(tasks)h(are)f(alw)m(a)m(ys)g(started)-9 +259 y(in)f(sequence)36 b(1)p FC(;)17 b FK(2)p FC(;)g(:)g(:)g(:)e(;)i(N) +5 b(;)17 b FK(1)p FC(;)g FK(2)g FC(:)g(:)g(:)-9 449 y +FF(Exercise)36 b(7.5)49 b FK(W)-8 b(rite)34 b(a)g(program)f(that)h(giv) +m(en)g(an)h FC(N)44 b FK(as)35 b(input)f(computes)h(the)f(reac)m(hable) +h(states)-9 570 y(of)47 b(Milner's)g(Sc)m(heduler)i(with)e +FC(N)58 b FK(cyclers.)90 b(The)49 b(program)d(should)h(write)h(out)f +(the)h(n)m(um)m(b)s(er)g(of)-9 690 y(reac)m(hable)34 +b(states)g(\(using)h FE(Sa)-7 b(tCount)p FK(\).)48 b(Run)34 +b(the)g(program)f(for)g FC(N)41 b FK(=)29 b(2)p FC(;)17 +b FK(4)p FC(;)g FK(6)p FC(;)g FK(8)p FC(;)g FK(10)p FC(;)g(:)g(:)g(:)31 +b FK(Measure)-9 810 y(the)d(running)f(times)g(and)h(dra)m(w)h(a)e +(graph)h(sho)m(wing)g(the)g(measuremen)m(ts)h(as)f(a)g(function)f(of)h +FC(N)10 b FK(.)42 b(What)-9 931 y(is)32 b(the)h(asymptotic)e(running)i +(time)e(of)h(y)m(our)h(program?)-9 1259 y FH(8)161 b(Pro)9 +b(ject:)70 b(An)54 b(R)l(OBDD)f(P)l(ac)l(k)-9 b(age)-9 +1478 y FK(This)30 b(pro)5 b(ject)31 b(implemen)m(ts)d(a)i(small)e(pac)m +(k)-5 b(age)31 b(of)f(R)m(OBDD-op)s(erations.)40 b(The)31 +b(full)d(pac)m(k)-5 b(age)31 b(should)-9 1598 y(con)m(tain)h(the)h +(follo)m(wing)d(op)s(erations:)-9 1772 y FF(Init)p FK(\()p +FC(n)p FK(\))234 1893 y(Initialize)g(the)j(pac)m(k)-5 +b(age.)44 b(Use)34 b FC(n)e FK(v)-5 b(ariables)32 b(n)m(um)m(b)s(ered)h +(1)g(through)f FC(n)p FK(.)-9 2087 y FF(Prin)m(t)p FK(\()p +FC(u)p FK(\))234 2207 y(Prin)m(t)25 b(a)g(represen)m(tation)g(of)g(the) +g(R)m(OBDD)f(on)h(the)g(standard)g(output.)41 b(Useful)25 +b(for)f(debugging.)-9 2401 y FF(Mk)p FK(\()p FC(i;)17 +b(l)r(;)g(h)p FK(\))234 2521 y(Return)28 b(the)f(n)m(um)m(b)s(er)g +FC(u)g FK(of)f(a)h(no)s(de)g(with)f FD(var)11 b FK(\()p +FC(u)p FK(\))27 b(=)h FC(i;)17 b FD(low)10 b FK(\()p +FC(u)p FK(\))27 b(=)g FC(l)r(;)17 b FD(high)7 b FK(\()p +FC(u)p FK(\))27 b(=)h FC(h)p FK(.)41 b(This)27 b(could)234 +2642 y(b)s(e)22 b(an)g(existing)f(no)s(de,)k(or)c(a)h(newly)g(created)h +(no)s(de.)40 b(The)23 b(reducedness)i(of)c(the)h(R)m(OBDD)f(should)234 +2762 y(not)33 b(b)s(e)g(violated.)-9 2956 y FF(Build)p +FK(\()p FC(t)p FK(\))234 3076 y(Construct)c(an)e(R)m(OBDD)g(from)f(a)h +(Bo)s(olean)f(expression.)43 b(Y)-8 b(ou)27 b(could)g(restrict)h(y)m +(ourself)g(to)f(the)234 3196 y(expressions)35 b FC(x)e +FK(or)f FI(:)p FC(x)h FK(or)g(\014nite)f(conjunctions)h(of)f(these.)45 +b(\(Wh)m(y?\))-9 3390 y FF(Apply)r FK(\()p FD(op)n FC(;)17 +b(u)529 3405 y FB(1)568 3390 y FC(;)g(u)668 3405 y FB(2)706 +3390 y FK(\))234 3511 y(Construct)34 b(the)f(R)m(OBDD)f(resulting)f +(from)h(applying)f FD(op)h FK(on)h FC(u)2608 3526 y FB(1)2679 +3511 y FK(and)g FC(u)2925 3526 y FB(2)2964 3511 y FK(.)-9 +3704 y FF(Restrict)p FK(\()p FC(u;)17 b(j;)g(b)p FK(\))234 +3825 y(Restrict)33 b(the)g(R)m(OBDD)e FC(u)h FK(according)g(to)h(the)g +(truth)f(assignmen)m(t)h([)p FC(b=x)2912 3840 y FA(j)2949 +3825 y FK(].)-9 4019 y FF(SatCoun)m(t)p FK(\()p FC(u)p +FK(\))234 4139 y(Return)e(the)g(n)m(um)m(b)s(er)g(of)f(elemen)m(ts)h +(in)f(the)h(set)g FD(sat)p FK(\()p FC(u)p FK(\).)42 b(\(Use)32 +b(a)e(t)m(yp)s(e)h(that)g(can)f(con)m(tain)h(v)m(ery)234 +4259 y(large)h(n)m(um)m(b)s(ers)h(suc)m(h)h(as)f(\015oating)e(p)s(oin)m +(t)h(n)m(um)m(b)s(ers.\))-9 4453 y FF(An)m(ySat)p FK(\()p +FC(u)p FK(\))234 4573 y(Return)h(a)g(satisfying)e(truth)i(assignmen)m +(t)f(for)g FC(u)-9 4857 y Fn(Sub-pro)7 b(ject)44 b(1)-9 +5042 y FK(Implemen)m(t)32 b(the)i(tables)f FC(T)47 b +FK(and)33 b FC(H)41 b FK(with)33 b(their)g(op)s(erations)f(listed)h(in) +f(section)i(4.)45 b(On)34 b(top)f(of)g(these)-9 5162 +y(implemen)m(t)d(the)j(op)s(erations)f FE(Init)p FK(\()p +FC(n)p FK(\),)h FE(Print)p FK(\()p FC(u)p FK(\),)f(and)h +FE(Mk)p FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\).)p eop +%%Page: 36 37 +36 36 bop -9 -460 a FG(REFERENCES)3013 b FK(36)-9 -171 +y Fn(Sub-pro)7 b(ject)44 b(2)-9 14 y FK(Con)m(tin)m(ue)h(implemen)m +(tation)d(of)j(the)g(pac)m(k)-5 b(age)46 b(b)m(y)g(adding)e(the)h(op)s +(erations)f FE(Build)p FK(\()p FC(t)p FK(\))i(and)f FE(Ap-)-9 +134 y(pl)-7 b(y)r FK(\()p FD(op)o FC(;)17 b(u)391 149 +y FB(1)430 134 y FC(;)g(u)530 149 y FB(2)569 134 y FK(\).)-9 +423 y Fn(Sub-pro)7 b(ject)44 b(3)-9 608 y FK(Finish)31 +b(y)m(our)i(implemen)m(tation)d(of)i(the)h(pac)m(k)-5 +b(age)33 b(b)m(y)h(adding)f FE(Restrict)p FK(\()p FC(u;)17 +b(j;)g(b)p FK(\),)32 b FE(Sa)-7 b(tCount)p FK(\()p FC(u)p +FK(\),)-9 728 y(and)32 b FE(AnySa)-7 b(t)p FK(\()p FC(u)p +FK(\).)-9 1061 y FH(References)-9 1280 y FK([AH97])131 +b(Henrik)35 b(Reif)f(Andersen)j(and)e(Henrik)g(Hulgaard.)50 +b(Bo)s(olean)33 b(expression)k(diagrams.)49 b(In)420 +1400 y FD(Pr)-5 b(o)g(c)g(e)g(e)g(dings,)35 b(Twelfth)h(A)n(nnual)g +(IEEE)g(Symp)-5 b(osium)35 b(on)h(L)-5 b(o)g(gic)36 b(in)g(Computer)g +(Scienc)-5 b(e)p FK(,)420 1521 y(pages)33 b(88{98,)f(W)-8 +b(arsa)m(w,)33 b(P)m(oland,)f(June)i(29{July)d(2)i(1997.)e(IEEE)j +(Computer)f(So)s(ciet)m(y)-8 b(.)-9 1724 y([Bry86])119 +b(Randal)27 b(E.)j(Bry)m(an)m(t.)38 b(Graph-based)28 +b(algorithms)f(for)h(Bo)s(olean)f(function)h(manipulation.)420 +1844 y FD(IEEE)35 b(T)-7 b(r)i(ansactions)33 b(on)h(Computers)p +FK(,)e(8\(C-35\):677{691,)f(1986.)-9 2048 y([Bry92])119 +b(Randal)21 b(E.)i(Bry)m(an)m(t.)28 b(Sym)m(b)s(olic)21 +b(Bo)s(olean)h(manipulation)d(with)j(ordered)h(binary-decision)420 +2168 y(diagrams.)42 b FD(A)n(CM)35 b(Computing)f(Surveys)p +FK(,)e(24\(3\):293{318,)f(Septem)m(b)s(er)i(1992.)-9 +2372 y([CBM89])49 b(Olivier)36 b(Coudert,)41 b(Christian)c(Berthet,)k +(and)d(Jean)h(Christophe)f(Madre.)61 b(V)-8 b(eri\014cation)420 +2492 y(of)31 b(sync)m(hronous)j(sequen)m(tial)d(mac)m(hines)h(based)g +(on)f(sym)m(b)s(olic)g(execution.)42 b(In)31 b(J.)h(Sifakis,)420 +2612 y(editor,)39 b FD(A)n(utomatic)h(V)-7 b(eri\014c)i(ation)39 +b(Metho)-5 b(ds)40 b(for)g(Finite)f(State)i(Systems.)e(Pr)-5 +b(o)g(c)g(e)g(e)g(dings)p FK(,)420 2733 y(v)m(olume)32 +b(407)g(of)g FD(LNCS)p FK(,)h(pages)g(365{373.)e(Springer-V)-8 +b(erlag,)30 b(1989.)-9 2936 y([CLR90])74 b(Thomas)33 +b(H.)h(Cormen,)g(Charles)g(E.)f(Leiserson,)i(and)e(Ronald)g(L.)g(Riv)m +(est.)47 b FD(Intr)-5 b(o)g(duction)420 3057 y(to)35 +b(A)n(lgorithms)p FK(.)43 b(McGra)m(w-Hill,)30 b(1990.)-9 +3260 y([Co)s(o71])106 b(S.A.)23 b(Co)s(ok.)28 b(The)c(complexit)m(y)e +(of)g(theorem-pro)m(ving)g(pro)s(cedures.)29 b(In)23 +b FD(Pr)-5 b(o)g(c)g(e)g(e)g(dings)24 b(of)i(the)420 +3380 y(Thir)-5 b(d)40 b(A)n(nnual)g(A)n(CM)g(Symp)-5 +b(osium)40 b(on)g(the)g(The)-5 b(ory)40 b(of)g(Computing)p +FK(,)f(pages)h(151{158,)420 3501 y(New)33 b(Y)-8 b(ork,)33 +b(1971.)f(Asso)s(ciation)f(for)h(Computing)g(Mac)m(hinery)-8 +b(.)-9 3704 y([Mil89])132 b(Robin)32 b(Milner.)42 b FD(Communic)-5 +b(ation)33 b(and)i(Concurr)-5 b(ency)p FK(.)42 b(Pren)m(tice)34 +b(Hall,)d(1989.)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/buddy/doc/buddy.ps b/buddy/doc/buddy.ps new file mode 100644 index 000000000..b7041107e --- /dev/null +++ b/buddy/doc/buddy.ps @@ -0,0 +1,7287 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software +%%Title: buddy.dvi +%%Pages: 104 +%%PageOrder: Ascend +%%BoundingBox: 0 0 596 842 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips buddy +%DVIPSParameters: dpi=600, compressed +%DVIPSSource: TeX output 2002.11.09:1826 +%%BeginProcSet: texc.pro +%! +/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 +%%BeginProcSet: special.pro +%! +TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N +/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N +/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N +/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ +/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho +X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B +/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ +/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known +{userdict/md get type/dicttype eq{userdict begin md length 10 add md +maxlength ge{/md md dup length 20 add dict copy def}if end md begin +/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S +atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ +itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll +transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll +curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf +pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} +if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 +-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 +get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip +yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub +neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ +noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop +90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get +neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr +1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr +2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 +-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S +TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ +Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale +}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState +save N userdict maxlength dict begin/magscale true def normalscale +currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts +/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x +psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx +psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub +TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +TeXDict begin 39158280 55380996 1000 600 600 (buddy.dvi) +@start +%DVIPSBitmapFont: Fa cmr6 6 3 +/Fa 3 52 df<13E01201120712FF12F91201B3A7487EB512C0A212217AA01E>49 +DI<13FF000313C0380F03E0381C00F014F800 +3E13FC147CA2001E13FC120CC712F8A2EB01F0EB03E0EB0FC03801FF00A2380003E0EB00 +F01478147C143E143F1230127812FCA2143E48137E0060137C003813F8381E03F0380FFF +C00001130018227DA01E>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fb cmex10 10 1 +/Fb 1 95 df94 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fc cmsy10 10.95 17 +/Fc 17 111 df<007FB812F8B912FCA26C17F83604789847>0 D3 +D8 D +15 D<1818187CEF01FCEF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7 +FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC0 +4848CAFCEA07FCEA1FF0EA7FC048CBFC5AEA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB +0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800 +FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC170018381800AE007FB812 +F8B912FCA26C17F8364878B947>20 D<126012F812FEEA7F80EA3FE0EA0FF8EA03FEC66C +7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED +03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC1701EF07F8EF +1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FC +EC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048 +CBFC12FC1270CCFCAE007FB812F8B912FCA26C17F8364878B947>I40 DI<03F015F0A20201824B15780203167C4B153C +0207163E4A488192C97E4A83023E707E023C1603027C834A707E49B97E49844984498401 +3FCBEA0FC0017E727E49727ED803F8F001FCD80FE0F0007FD83FC0F13FC0B4CDEA0FF0A2 +D83FC0F13FC0D80FE0F17F00D803F8F001FCC66CF003F0017E4E5A6D4E5A010FBAC7FC6D +606D606D60D900F8C9EA01F0027C4C5A023C5F023E16076E4C5A6E94C8FC6F5D6E6C153E +0203163C6F157C020116786F15F802005EA254327DAF5B>44 D<176017F01601A2EE03E0 +A2EE07C0A2EE0F80A2EE1F00A2163EA25EA25EA24B5AA24B5AA24B5AA24B5AA24BC7FCA2 +153EA25DA25DA24A5AA24A5AA24A5AA24A5AA24AC8FCA2143EA25CA25CA2495AA2495AA2 +495AA2495AA249C9FCA2133EA25BA25BA2485AA2485AA2485AA2485AA248CAFCA2123EA2 +5AA25AA25A12602C5473C000>54 D<007FB81280B912C0A27ECA1203B3A232187B9F3D> +58 D<15C04A7E4A7EA24A7EA34A7EA2EC1F3EA2EC3E1FA2EC3C0F027C7FA24A6C7EA249 +486C7EA2ECE001010380A249486C7EA24948137CA249C77EA2011E141E013E141FA2496E +7EA2496E7EA2491403000182A248486E7EA248486E7EA2491578000F167CA248C97EA200 +3E82A2003C82007C1780A248EE07C0A24816030060EE018032397BB63D>94 +D<0060EE018000F0EE03C06C1607A2007CEE0F80A2003C1700003E5EA26C163EA26C6C5D +A2000716786D15F8A26C6C4A5AA26C6C4A5AA200005E6D1407A2017C4A5AA26D4AC7FCA2 +011E141E011F143EA26D6C5BA26D6C5BA26D6C485AA201015CECF003A26D6C485AA29138 +7C0F80A2023C90C8FCEC3E1FA2EC1F3EA2EC0FFCA26E5AA36E5AA26E5A6E5A32397BB63D +>I<146014F01301A214E01303A214C01307A2EB0F80A214005BA2131E133EA25BA21378 +13F8A25B1201A25B1203A2485AA25B120FA290C7FC5AA2123EA2123C127CA2127812F8A4 +1278127CA2123C123EA27EA27E7FA212077FA26C7EA212017FA212007FA21378137CA27F +A2131E131FA27F1480A2EB07C0A2130314E0A2130114F0A213001460145A77C323>104 +D<126012F07EA21278127CA2123C123EA27EA27E7FA212077FA26C7EA212017FA212007F +A21378137CA27FA2131E131FA27F1480A2EB07C0A2130314E0A2130114F0A414E01303A2 +14C01307A2EB0F80A214005BA2131E133EA25BA2137813F8A25B1201A25B1203A2485AA2 +5B120FA290C7FC5AA2123EA2123C127CA2127812F8A25A1260145A7BC323>I<126012F0 +B3B3B3B3B11260045B76C319>I<126012F07EA21278127CA2123C123EA2121E121FA27E +7FA212077FA212037FA212017FA212007FA21378137CA27FA2131E131FA27F80A2130780 +A2130380A2130180A2130080A21478147CA2143C143EA2141E141FA26E7EA2140781A214 +0381A2140181A2140081A21578157CA2153C153EA2151E151FA2811680A2150716C0A215 +03ED0180225B7BC32D>110 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fd cmmi12 12 2 +/Fd 2 119 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A78891B>58 +D<013E140ED9FF80EB3F802603C3C0137F380703E0380601F0120E121CD81803143F0038 +151F0030150FA2D87007140700605BA2D8E00F150000C0497FEA001F4A5B1606133F91C7 +FC160E49140C137EA2161C01FE14185B1638163016704848146016E05E150100005D1503 +6D49C7FC1506017C130E017E5B6D137890380F81E06DB45AD900FEC8FC292D7DAB2F> +118 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fe cmbx12 12 23 +/Fe 23 121 df<161E163FB3AF007FBB1280BC12C0A46C1A80C9003FCAFCB3AF161E4A4A +7ABD57>43 D46 D48 DII<16 +3FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E147E +147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48C7 +FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>52 +D67 +D69 D73 +D77 +D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E +A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 +0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E +EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 +D99 D101 DI108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5 +D8F001B512E002816E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F00 +9026FF3E007F6C019E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081 +B60003B512FEA5572D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F89139 +87F03FFC91388F801F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083 +B512FEA5372D7CAC3E>II< +90397FC00FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07 +FF6C496D13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C +13E06E15C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091 +C7FCED1FF092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F13 +F8ED8FFC91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA3 +5CB3A5B612E0A5272D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003 +383FC00049133F48C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF +6C14C015F06C14FC6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA2 +6C141F150FA27EA26C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8 +F03F13E026E007FEC7FC232F7CAD2C>II120 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Ff cmti10 10.95 35 +/Ff 35 122 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C +137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218 +E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214 +3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101 +13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2 +49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12 +D<1838187CA218F8170118F0EF03E0A2EF07C0A2EF0F80171F1800173EA25FA25F16015F +4C5AA24C5AA24C5A161F94C7FC163EA25EA25E15015E4B5AA24B5AA24B5A151F93C8FC15 +3EA25DA25D14015D4A5AA24A5AA24A5A141F92C9FC143EA25CA25C13015C495AA2495AA2 +495A131F91CAFC133EA25BA25B12015B485AA2485AA2485A121F90CBFC123EA25AA25AA2 +5A5A365B7FC32E>47 D<15FE913803FFC091380F01F091383C00F84A137C4A7F4948133F +49487F4A148049C7FC5BEB0E0C011E15C0EB1C0EEB3C06133813781370020E133FD9F00C +148013E0141C0218137F00011600EBC0384A13FEEC600102E05B3A00E3C003F89039FF00 +07F0013C495A90C7485A5E037FC7FC15FC4A5A4A5AEC0FC04AC8FC147E14F8EB03E0495A +011FC9FC133E49141801F0143C48481438485A1678485A48C85A120E001E4A5AD83FE013 +0301FF495A397C3FF01FD8780FB55AD8700391C7FCD8F0015B486C6C5A6E5AEC07C02A3F +79BC2E>50 D55 D<171C173C177CA217FCA216011603A21607A24C7EA2161DA21639 +1679167116E1A2ED01C1A2ED038115071601150EA2031C7FA24B7EA25D15F05D4A5AA24A +5AA24AC7FC5C140E5C021FB6FC4A81A20270C7127FA25C13015C495AA249C8FCA2130E13 +1E131C133C5B01F882487ED807FEEC01FFB500E0017FEBFF80A25C39417BC044>65 +D<49B712C018F818FE903B0003FC0001FF9438007F804BEC3FC0A2F01FE014074B15F018 +0FA2140F5D181FA2021F16E05D183F19C0023FED7F804B14FF19004D5A027F4A5A92C7EA +07F0EF1FE0EF7F804AD903FEC7FC92B512F017FE4AC7EA3F800101ED1FE04A6E7E170784 +01036F7E5CA30107825CA3010F5E4A1407A260011F150F5C4D5A60013F153F4A4A5A4D5A +017F4A90C7FC4C5A91C7EA0FF849EC3FF0B812C094C8FC16F83C3E7BBD40>I<9339FF80 +01C0030F13E0033F9038F803809239FF807E07913A03FC001F0FDA0FF0EB071FDA1FC0EC +BF00DA7F806DB4FC4AC77E495AD903F86E5A495A130F4948157E4948157C495A13FF91C9 +FC4848167812035B1207491670120FA2485A95C7FC485AA3127F5BA312FF5BA490CCFCA2 +170FA2170EA2171E171C173C173817786C16706D15F04C5A003F5E6D1403001F4B5A6D4A +C8FC000F151E6C6C5C6C6C14F86C6C495A6C6CEB07C090397FC03F8090261FFFFEC9FC01 +0713F0010013803A4272BF41>I<49B712C018F818FE903B0003FE0003FF9438007F804B +EC1FC0F00FE0F007F014074BEC03F8F001FCA2140F4BEC00FEA3141F4B15FFA3143F5DA3 +027F5D5DA219FE14FF92C81203A34917FC4A1507A219F813034A150F19F0A20107EE1FE0 +5CF03FC0A2010FEE7F804A16006060011F4B5A4A4A5A4D5AA2013F4B5A4AEC3FC04DC7FC +017F15FEEE03FC4AEB0FF001FFEC7FE0B8128004FCC8FC16E0403E7BBD45>I<49B812F8 +A390260003FEC7121F18074B14031801F000F014075DA3140F5D19E0A2141F4B1338A2EF +7801023F027013C04B91C7FCA217F0027F5CED80011603160F91B65AA3ED001F49EC0780 +5CA3010392C8FC5CF003804C13070107020E14005C93C75A180E010F161E4A151C183CA2 +011F5E5C60A2013F15014A4A5A1707017F150F4D5A4A147F01FF913807FF80B9FCA295C7 +FC3D3E7BBD3E>I<49B6FC5BA2D9000313005D5DA314075DA3140F5DA3141F5DA3143F5D +A3147F5DA314FF92C7FCA35B5CA313035CA313075CA3130F5CA3131F5CA3133F5CA2137F +A25C497EB67EA3283E7BBD23>73 D<49B5933807FFFC496062D90003F0FC00505ADBBF80 +5E1A771AEF1407033F923801CFE0A2F1039F020FEE071F020E606F6C140E1A3F021E161C +021C04385BA2F1707F143C023804E090C7FCF001C0629126780FE0495A02705FF00700F0 +0E0114F002E0031C5BA2F03803010116704A6C6C5D18E019070103ED01C00280DA03805B +A2943807000F13070200020E5C5FDB03F8141F495D010E4B5CA24D133F131E011CDAF9C0 +5CEEFB80197F013C6DB4C7FC013895C8FC5E01784A5C13F8486C4A5CD807FE4C7EB500F0 +4948B512FE16E01500563E7BBD52>77 D<49B77E18F018FC903B0003FE0003FEEF00FF4B +EC7F80F03FC00207151F19E05DA2020F16F0A25DA2141FF03FE05DA2023F16C0187F4B15 +80A2027FEDFF00604B495A4D5A02FF4A5A4D5A92C7EA3FC04CB4C7FC4990B512FC17E04A +CAFCA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA2137FA25C497EB67E +A33C3E7BBD3E>80 D<92391FE00380ED7FFC913A01FFFE0700913907F01F8F91390FC007 +DF4AC66CB4FC023E6D5A4A130014FC495A4948147CA2495AA2010F15785CA3011F1570A4 +6E91C7FCA2808014FE90380FFFE015FC6DEBFF8016E06D806D806D6C7F141F02037FEC00 +3FED07FF1501A281A282A212075A167E120EA2001E15FE5EA25E003E14015E003F14034B +5A486C5C150F6D495A6D49C8FCD8F9F0137C39F8FE01F839F03FFFF0D8E00F13C026C001 +FEC9FC314279BF33>83 D<48B9FCA25A903AFE001FF00101F89138E0007FD807E0163E49 +013F141E5B48C75BA2001E147FA2001C4B131C123C003814FFA2007892C7FC12704A153C +00F01738485CC716001403A25DA21407A25DA2140FA25DA2141FA25DA2143FA25DA2147F +A25DA214FFA292C9FCA25BA25CA21303A25CEB0FFE003FB67E5AA2383D71BC41>I<147E +49B47E903907C1C38090391F80EFC090383F00FF017E137F4914804848133F485AA24848 +1400120F5B001F5C157E485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA214 +07EDE078020F1370127C021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F87 +81E3803A03FF00FF00D800FC133E252977A72E>97 DIIII<167C4BB4FC923807C7809238 +0F83C0ED1F87161FED3F3FA2157EA21780EE0E004BC7FCA414015DA414035DA30103B512 +F8A390260007E0C7FCA3140F5DA5141F5DA4143F92C8FCA45C147EA414FE5CA413015CA4 +495AA4495AA4495A121E127F5C12FF49C9FCA2EAFE1EEAF83C1270EA7878EA3FE0EA0F80 +2A5383BF1C>II +I<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0121E +121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B137E13FE5BA212015BA21203 +5B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C01383148038078700EA03FEEA +00F8163E79BC1C>I108 DIII<903903E001F890390FF807FE903A1E +7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED80019038 +F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA20103140F17E05CA201 +07EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA9C1F +C7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0B5FCA22D +3A80A72E>I114 +DII<137C48B4141C26038F +80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F03F13 +03140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2153F +1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C9039 +1FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F038038F80EA0707000E +01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EAF03F91C712E012 +005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA25DA25D15780001 +14706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<903903F001F890 +390FFC07FE90393C1E0E0F9026780F1C138001F0EBB83FD801E013F89039C007F07FEA03 +80000714E0D9000F140048151C000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147E +A314FE4A131CA30101143C001E1538003F491378D87F811470018314F000FF5D90390778 +01C039FE0F7C033A7C0E3C078027783C1E1EC7FC391FF80FFC3907E003F029297CA72A> +120 D<137C48B4143826038F8013FCEA0707000E7F001E1401001C15F8EA3C0F12381503 +D8781F14F000701380A2D8F03F1307020013E012005B017E130F16C013FE5B151F120149 +1480A2153F000315005BA25D157EA315FE5D00011301EBF8030000130790387C1FF8EB3F +F9EB07E1EB00035DA21407000E5CEA3F80007F495AA24A5AD8FF0090C7FC143E007C137E +00705B387801F0383803E0381E0FC06CB4C8FCEA03F8263B79A72C>I +E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fg cmsy8 8 1 +/Fg 1 1 df0 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fh cmr8 8 9 +/Fh 9 62 df48 D<130C133C137CEA03FC12FFEAFC7C1200B3 +B113FE387FFFFEA2172C7AAB23>III<140EA2 +141E143EA2147E14FEA2EB01BE1303143E1306130E130C131813381330136013E013C0EA +0180120313001206120E120C5A123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFC +A21E2D7EAC23>I<000CEB0180380FC01F90B512005C5C14F014C0D80C7EC7FC90C8FCA8 +EB1FC0EB7FF8380DE07C380F801F01001380000E130F000CEB07C0C713E0A2140315F0A4 +127812FCA448EB07E012E0006014C00070130F6C14806CEB1F006C133E380780F83801FF +E038007F801C2D7DAB23>I56 DI61 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fi cmmi8 8 4 +/Fi 4 111 df<123C127EB4FCA21380A2127F123D1201A312031300A25A1206120E5A5A +5A126009157A8714>59 D78 D<1307EB0F80EB1FC0A2EB0F80EB070090C7 +FCA9EA01E0EA07F8EA0E3CEA1C3E123812301270EA607EEAE07C12C013FC485A12001201 +5B12035BA21207EBC04014C0120F13801381381F01801303EB0700EA0F06131EEA07F8EA +01F0122E7EAC18>105 D<3907C007E0391FE03FF83918F8783E393879E01E39307B801F +38707F00126013FEEAE0FC12C05B00815C0001143E5BA20003147E157C5B15FC0007ECF8 +081618EBC00115F0000F1538913803E0300180147016E0001F010113C015E390C7EAFF00 +000E143E251F7E9D2B>110 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fj cmmi10 10.95 31 +/Fj 31 123 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>58 +D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A +120E5A1218123812300B1C798919>I<183818FC1703EF0FF8EF3FE0EFFF80933803FE00 +EE0FF8EE3FE0EEFF80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF +80D903FEC9FCEB0FF8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F +80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE +913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0 +EF0FF8EF03FC17001838363678B147>II<126012F8B4FCEA7FC0EA1FF0EA07FCEA +01FF38007FC0EB1FF0EB07FCEB01FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1F +F0ED07FCED01FF9238007FC0EE1FF0EE07FCEE01FF9338007FC0EF1FF0EF07F8EF01FCA2 +EF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC0 +4A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0 +EA7FC048CBFC12FC1270363678B147>I<17075F84171FA2173F177FA217FFA25E5EA24C +6C7EA2EE0E3F161E161C1638A21670A216E0ED01C084ED0380171FED07005D150E5DA25D +157815705D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F143C14384A81A24A140713 +015C495AA249C8FC5B130E131E4982137C13FED807FFED1FFEB500F00107B512FCA219F8 +3E417DC044>65 D<49B712F818FF19E090260001FEC7EA3FF0F007F84B6E7E727E850203 +815D1A80A20207167F4B15FFA3020F17004B5C611803021F5E4B4A5A180FF01FE0023F4B +5A4B4A5ADD01FEC7FCEF07F8027FEC7FE092B6C8FC18E092C7EA07F84AEC01FE4A6E7E72 +7E727E13014A82181FA213034A82A301075F4A153FA261010F167F4A5E18FF4D90C7FC01 +1F5E4A14034D5A013FED1FF04D5A4AECFFC0017F020790C8FCB812FC17F094C9FC413E7D +BD45>I<49B712F818FF19C0D9000190C7EA3FF0F00FF84BEC03FCF000FE197F0203EE3F +805DF11FC0A20207EE0FE05D1AF0A2020F16075DA21AF8141F5DA2190F143F5DA21AF014 +7F4B151FA302FF17E092C9123FA21AC049177F5C1A8019FF010318005C4E5A6101071603 +4A5E4E5A180F010F4C5A4A5E4E5A4EC7FC011F16FE4A4A5AEF07F8013FED0FE0EF3FC04A +49B4C8FC017FEC0FFCB812F017C004FCC9FC453E7DBD4B>68 D<49B56C49B512F81BF0A2 +90C76D9039000FFE004AEE03F0705D735A03DF150302037F038F5E82190791380787FC03 +0793C7FC1503705C140F91260E01FF140EA26F151E021E80021C017F141C83193C023C6D +7E02381638161F711378147802706D6C1370A2040714F002F0804A01035C8318010101EC +01FF4A5E82188313034A91387FC380A2EF3FC7010716E791C8001F90C8FC18F718FF4981 +010E5E1707A2131E011C6F5AA2013C1501137C01FE6F5AEA03FFB512FC187818704D3E7D +BD49>78 D<49B77E18F818FFD90001D900017F9438003FE04BEC0FF0727E727E14034B6E +7EA30207825DA3020F4B5A5DA24E5A141F4B4A5A614E5A023F4B5A4B4A5A06FEC7FCEF03 +FC027FEC0FF04BEBFF8092B500FCC8FC5F9139FF8001FE92C7EA7F80EF1FC084496F7E4A +1407A28413035CA2170F13075C60171F130F5CA3011F033F5B4AEE038018E0013F17071A +004A021F5B496C160EB600E090380FF01E05075B716C5ACBEAFFE0F03F8041407DBD45> +82 D86 +D<027FB5D88007B512C091B6FCA2020101F8C7EBF8009126007FE0EC7F804C92C7FC033F +157C701478616F6C495A4E5A6F6C495A4EC8FC180E6F6C5B606F6C5B6017016F6C485A4D +5A6F018FC9FC179E17BCEE7FF85F705AA3707EA283163F167FEEF7FCED01E7EEC3FEED03 +83ED070392380E01FF151E4B6C7F5D5D4A486D7E4A5A4A486D7E92C7FC140E4A6E7E5C4A +6E7E14F0495A49486E7E1307D91F806E7ED97FC014072603FFE0EC1FFF007F01FC49B512 +FEB55CA24A3E7EBD4B>88 D97 DIIII<163EEEFFC0923803 +E1E0923807C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7FCA45DA514015D +A30103B512FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F92C8FCA45C147E +A414FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FCEAF81EEA703EEA +7878EA1FF0EA07C02C537CBF2D>III<143C14FEA21301A314FCEB00701400AD137E3801FF80 +3803C7C0EA0703000F13E0120E121C13071238A2EA780F007013C0A2EAF01F1480120013 +3F14005B137EA213FE5BA212015B0003130E13F0A20007131EEBE01CA2143CEBC0381478 +147014E013C13803E3C03801FF00EA007C173E7EBC1F>I108 +D<01F8D907F0EB07F8D803FED93FFEEB1FFE28078F80F81FEB781F3E0F0F81C00F81E00F +803E0E07C78007C3C007C0001CD9CF00EBC78002FEDAEF007F003C4914FE0038495C4948 +5C12780070495CA200F0494948130F011F600000495CA2041F141F013F6091C75B193F04 +3F92C7FC5B017E92C75A197E5E01FE9438FE01C049027E14FCA204FE01011303000106F8 +1380495CF20700030115F00003190E494A151E1A1C03035E0007943800F8F0494AEC7FE0 +D801C0D900E0EC1F804A297EA750>I111 D114 D<147014FC1301A25CA21303A25CA21307A25CA2130FA25CA2007FB512F0B6 +FC15E039001F8000133FA291C7FCA25BA2137EA213FEA25BA21201A25BA21203A25BA212 +07EC01C013E01403000F1480A2EBC0071500140E141E5C000713385C3803E1E03801FF80 +D8003EC7FC1C3A7EB821>116 D<017E147848B4EB01FC2603C7C013FED807031303000F +13E0120E121C0107130100381400167ED8780F143E00705B161EEAF01F4A131C1200133F +91C7123C16385B137E167801FE14705B16F016E0120149EB01C0A2ED0380A2ED0700A200 +00140E5D6D133C017C5B6D5B90381F03C0903807FF80D901FCC7FC27297EA72C>118 +D<013EEE0380D9FF800107EB0FE02601C3E090381F801FD8038117F0380701F0000E153F +001E1600D81C03160F003C170700384BEB03E0D87807147E00705B1801D8F00F14FE4A49 +14C01200131FDA800114034C1480133F140003031407494A1400137EA26001FE0107140E +495C60A360150F017C5E017E011F14F0705B6D0139495A6D903970F8038090280FC0E07C +0FC7FC903A03FFC01FFC903A007F0007F03C297EA741>II<137C48B4EC +03802603C7C0EB0FC0EA0703000F7F000E151F001C168013071238163FD8780F15000070 +5BA2D8F01F5C4A137E1200133F91C712FE5E5B137E150113FE495CA2150300015D5BA215 +075EA2150F151F00005D6D133F017C137F017E13FF90393F03DF8090380FFF1FEB01FC90 +C7123F93C7FCA25DD80380137ED80FE013FE001F5C4A5AA24848485A4A5A6CC6485A001C +495A001E49C8FC000E137C380781F03803FFC0C648C9FC2A3B7EA72D>I<02F8130ED903 +FE131ED90FFF131C49EB803C49EBC0784914F090397E07F1E09038F800FF49EB1FC049EB +07800001EC0F006C48131E90C75A5D5D4A5A4A5A4A5A4AC7FC143E14785C495A495A495A +49C8FC011E14E05B5B4913014848EB03C0485AD807F8EB078048B4131F3A1F87E07F0039 +1E03FFFE486C5B00785CD870005B00F0EB7FC048011FC7FC27297DA72A>I +E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fk cmbx12 14.4 46 +/Fk 46 122 df<171FA24D7EB3B3A4007FBD1280A2BE12C0A36C1C80A2CAD83F80CAFCB3 +B3A471CBFCA25A5B79CA69>43 D46 D<913803FFC0023F13FC91B6FC010315C0010F018113F0903A +1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A24817E04890C813F0 +A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA6003F17FCA26D15FF +A26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913006D6C495AD91F +FCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313C0384F7BCD43> +48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7FCB3B3B3 +A6007FB712FEA52F4E76CD43>II<91380FFFC091B5 +12FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803F86E7E4916 +80D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C13 +005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E003 +0113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA +0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F04A13C06C48 +4A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD9 +001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167FA216FF5D5D +A25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC1F005C147E +147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A485A90C8FC +123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>III<121F7F7FEBFF8091B81280A45A1900606060A2606060485F0180C86C +C7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812014B5A5E4B +5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141FA2143FA4147F +5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13FC0103B67E01 +0F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48488048486E138000 +0717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE4913806C7FDBC0 +0313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C4BC7FC6D806D +81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D9007F14E04848 +011F14F048487F48481303030014F8484880161F4848020713FC1601824848157F173FA2 +171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F6C6CEDFF806C +6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F1580010102FCC7FCD9 +000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E4901037F90267FF8 +007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C05A7013E0A218F0 +B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13F390387FF8 +03011FB512E36D14C30103028313F89039007FFE03EC00401500A218F05EA3D801F816E0 +487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A5A49495B6C4849 +5BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49C8FC010013F036 +4F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C8083047F +80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E031F811680 +83033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D844AB87EA2 +4A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103854A82010785 +A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65 +DI<932601FFFCEC01C0047F +D9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7 +383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F882494982494982494982 +4949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA2 +98C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D +606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D +6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F +93C8FC030715FCDB007F14E0040101FCC9FC525479D261>IIII<9326 +01FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003 +EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F88249 +49824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181F +A3485B1B0FA25AA298C8FC5CA2B5FCAE6C057FB712E0A280A36C94C7003FEBC000A36C7F +A36C7FA27E6C7FA26C7F6C7FA26D7E6D7F6D7F6D6D5E6D7F6D01FC93B5FC6D13FF6D6C6D +5C6E01F0EC07FB020F01FEEC1FF10203903AFFF001FFE0020091B6EAC07F033FEE001F03 +0703FC1307DB007F02E01301040149CAFC5B5479D26A>III80 D82 D<003FBC1280A59126C0003F9038C0007F49C71607D87FF806 +0113C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C9 +94C7FCB3B3AC91B912F0A553517BD05E>84 D86 +D97 +DI<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001 +FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48 +92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC +3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC +020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91 +B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980 +485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C +6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9 +003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901 +817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191 +C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01 +F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE +903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F497E +000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3 +A6B612E0A51B547BD325>I +107 DIII<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>II119 D121 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fl cmbx12 20.74 12 +/Fl 12 117 df49 +D<92380FFFE04AB67E020F15F0027F15FE49B87E4917E0010F17F8013F8349D9C01F14FF +9027FFFC0001814801E06D6C80480180021F804890C86C8048486F8048486F8001FF6F80 +4801C06E8002F081486D18806E816E18C0B5821BE06E81A37214F0A56C5BA36C5B6C5B6C +5B000313C0C690C9FC90CA15E060A34E14C0A21B80601B0060626295B55A5F624D5C624D +5C4D91C7FC614D5B4D13F04D5B6194B55A4C49C8FC4C5B4C5B4C13E04C5B604C90C9FCEE +7FFC4C5A4B5B4B5B4B0180EC0FF04B90C8FC4B5A4B5A4B48ED1FE0EDFFE04A5B4A5B4A90 +C9FC4A48163F4A5ADA3FF017C05D4A48167F4A5A4990CA12FFD903FC160749BAFC5B4919 +805B5B90BBFC5A5A5A5A481A005A5ABCFCA462A44C7176F061>I<923801FFFE033FEBFF +F84AB7FC020F16E0023F16F84A16FE49B97E49DA003F80010F01F0010714F04901800101 +804948C880D97FF86F7F02E081496C834801FC6F148014FF486E6E14C08181481AE081A9 +6C5C1BC06C4A5C6C5C6D90C815806D5AD90FF85D90CA150062606295B55A4D5C624D5C4D +5C4D91C7FC4D13FC4D5B4CB512E0047F1480037FB548C8FC92B612F818C018F8F0FF806F +15F092C7003F13FC050713FF050114C071807213F8727F727F867214801BC07214E01BF0 +A27214F81BFCA37214FEA31BFFEBFF80000313E0487F001F13FC487FA2487FA2B67EA31B +FEA3601BFCA292C8FC6C1AF84A5D4A18F06C494B14E05C6C01C04B14C06C90C915804E14 +006C6D4B5B6C01F092B55A6C01FC4A5C27007FFFC001075C6D01FE013F14C0010F90B85A +6D4DC7FC010117F8D9003F16E0020F93C8FC020015F0030749C9FC507378F061>II<0170187001FEEF01F86D6C160F02F8167F +DAFF80EC07FF03FE49B5FC92B85A6262A26297C7FC61616119E061614EC8FC18F86018C0 +95C9FC17F817C0020701F8CAFC91CDFCB0923801FFFC031FEBFFE092B612FC020315FF02 +0F16C04A16F0027FD9003F7FDAFFF0010F13FE038001037F4AC76C8002F86E804A6F7F4A +6F7F4A834A6F7F91C980137E017C707F90CAFC1B80A21BC0A2841BE0A51BF0A313FE3803 +FF80000F7F4813F0487F5A80B5FCA41BE0A44E14C05C7E4A18805C4A5D6C90C9150001E0 +606C6C5E6D606C6C4C5B7F000794B55A6C6C6C4A5C6C6D4A5C6E4A5C26007FF8021F49C7 +FC6DB4027F5B6DD9F007B55A6D90B712E0010317806D4CC8FC6D6C15F8021F15C002034A +C9FCDA003F13804C7376F061>I<96267FFFE01670063FB6ED01F80503B700F01403053F +04FC14074CB96C130F040706E0131F043F72133F93BA00FC137F0303DC00076D13FF030F +03C09039003FFF814B02FCC8000713C3037F02E0030113F792B600806F6CB5FC02034ACA +121F4A02F8834A02E0834A4A1701027F4A8391B548CC7E494A85495C4C854988494A8549 +4A85495C8A4991CDFC90B54886A2484A1B7FA2481E3F5D481E1F5D5A1F0FA2485CA3481E +075DA2F703F0489BC7FCA45DA2B6FCB27EA281A47EA2F703F06FF307F87EA36C80A21F0F +7E6F1CF07E6F1B1F7E20E06C6E1B3F816DF57FC06D80F7FF806D806D6E4F13006D6E616D +525A826D6E4F5A6D6E4F5A6E6D6C4E5A021F6EF0FFE06E6E4D5B6E02F84D5B6E02FE050F +90C7FC02006E6CEE3FFE6F02F0EEFFFC031F02FE03035B6FDAFFC0021F13E0030303FF01 +03B55A030093B7C8FC043F18FC040718F0040118C0DC003F94C9FC050316F8DD003F1580 +DE007F01F0CAFC757A75F78C>67 D<92383FFFF80207B612E0027F15FC49B87E010717E0 +011F83499026F0007F13FC4948C7000F7F90B502036D7E486E6D806F6D80727F486E6E7F +8486727FA28684A26C5C72806C5C6D90C8FC6D5AEB0FF8EB03E090CAFCA70507B6FC041F +B7FC0303B8FC157F0203B9FC021FECFE0391B612800103ECF800010F14C04991C7FC017F +13FC90B512F04814C0485C4891C8FC485B5A485B5C5A5CA2B5FC5CA360A36E5DA26C5F6E +5D187E6C6D846E4A48806C6D4A4814FC6C6ED90FF0ECFFFC6C02E090263FE07F14FE0001 +9139FC03FFC06C91B6487E013F4B487E010F4B1307010303F01301D9003F0280D9003F13 +FC020101F8CBFC57507ACE5E>97 D<93387FFF80030FB512FC037FECFF804AB712E00207 +16F8021F16FE027FD9F8077F49B5D8C000804991C7003F13E04901FC020F7F49496E7F49 +498049496E7F49496E7F90B55A48727E92C914804884485B1BC048841BE0485BA27313F0 +5AA25C5AA21BF885A2B5FCA391BAFCA41BF002F8CCFCA67EA3807EA47E806CF103F0F207 +F86C7F1A0F6C6E17F06C191F6F17E06C6E163F6D6DEE7FC06D6D16FF6D6D4B13806D6D4B +13006D6D6CEC0FFE6D02E0EC3FFC6D02F8ECFFF86D9126FFC00F5B023F91B65A020F1780 +02034CC7FC020016F8031F15E0030392C8FCDB000F13E04D507BCE58>101 +D<903801FFFCB6FCA8C67E131F7FB3AD95380FFFE095B512FE05036E7E050F15E0053F15 +F84D81932701FFF01F7F4CD900077FDC07FC6D80DC0FF06D80DC1FC07F4C48824CC8FC04 +7E6F7F5EEDFDF85E03FF707F5EA25EA25EA293C9FCA45DB3B3A6B8D8E003B81280A86178 +79F76C>104 D<902601FFFCEC7FFEB6020FB512F0057F14FE4CB712C0040716F0041F82 +047F16FE93B5C66C7F92B500F0010F14C0C66C0380010380011F4AC76C806D4A6E8004F0 +6F7F4C6F7F4C6F7F4C8193C915804B7014C0861DE0A27414F0A27414F8A47513FCA57513 +FEAF5113FCA598B512F8A31DF0621DE0621DC0621D806F5E701800704B5B505B704B5B70 +92B55A04FC4A5C704A5C706C010F5C05E0013F49C7FC9227FE7FFC01B55A70B712F0040F +16C0040393C8FC040015F8053F14C0050301F0C9FC94CCFCB3A6B812E0A85F6F7ACD6C> +112 D<902601FFF8EB07FEB691383FFFC094B512F00403804C14FE4C8093261FFC3F1380 +93263FE07F13C0DC7F80B5FCC66C5D011FDAFE0114E06DEBF9FC16F815FB16F016E015FF +16C07114C05E72138095381FFE0093C76C5AF001E095C8FCA25DA65DB3B3A2B812F8A843 +4E7ACD4F>114 D<15FFA75CA55CA45CA25CA25CA25CA25C91B5FCA25B5B5B131F5B90B9 +FC120FBAFCA6D8000791C9FCB3B3A3F01FE0AE183F7014C07F187F7014806D16FF826D4B +13006E6D485AEEFE0F6E90B55A020F5D6E5D020115C06E6C5C031F49C7FC030113F03B6E +7CEC4B>116 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fm cmtt10 10.95 81 +/Fm 81 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00 +A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14 +00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2 +02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F +90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2 +29387DB730>I37 DII<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B +12035B485A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA2 +6C7EA27F12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F +147F141E184771BE30>I<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F8013 +3F14C0131FEB0FE014F01307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4130114 +FCA2130314F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A485AEA +3FE0485A485A90C7FC5A1278184778BE30>I<14E0497E497EA60038EC0380007EEC0FC0 +D8FF83EB3FE001C3137F9038F3F9FF267FFBFB13C06CB61280000FECFE00000314F86C5C +6C6C13C0011F90C7FC017F13C048B512F04880000F14FE003FECFF80267FFBFB13C026FF +F3F913E09038C3F87F0183133FD87E03EB0FC00038EC0380000091C7FCA66D5A6D5A2327 +7AAE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76CC8FCAF143EA229297DAF +30>II<007FB612F0A2B712 +F8A36C15F0A225077B9E30>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00 +0C0C6E8B30>I<16F01501ED03F8A21507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF +00A24A5AA25D1403A24A5AA24A5AA24A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A249 +5AA2495AA2495AA2495AA2495AA249C8FCA2485AA25B1203A2485AA2485AA2485AA2485A +A2485AA248C9FCA25AA2127CA225477BBE30>I<14FE903807FFC0497F013F13F8497F90 +B57E48EB83FF4848C6138049137F4848EB3FC04848EB1FE049130F001F15F0491307A248 +48EB03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA36D1303003F15F8A26D13 +07001F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEB +FFFE6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>IIIII<000FB612804815C05AA316800180C8FCAEEB83FF019F13C090B512 +F015FC8181D9FE0313809039F0007FC049133F0180EB1FE06CC7120F000E15F0C81207A2 +16F81503A31218127EA2B4FC150716F048140F6C15E06C141F6DEB3FC06D137F3A3FE001 +FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7FC25397BB730>II<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0 +A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>58 D +I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B0107 +13C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7F +F87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91 +381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7FC +A2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<12 +78127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313 +E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C0207 +13C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813E0 +000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>II< +147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA5 +90387F007FA4498049133F90B6FCA34881A39038FC001F00038149130FA4000781491307 +A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>65 D<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<383FFFF8487FB57E +A26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730 +>76 DII<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0133FD87F +80EB0FF0A290C71207A44815F8481403B3A96C1407A26C15F0A36D130FA26D131F6C6CEB +3FE001F813FF90B6FC6C15C06C15806C1500000114FCD8003F13E0253A7BB830>I<007F +B512F0B612FE6F7E16E0826C813903F8003FED0FFCED03FE15016F7EA2821780163FA616 +7F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0 +B57EA46C5B29387EB730>I<003FB57E4814F0B612FC15FF6C816C812603F8017F913800 +3FF0151F6F7E15071503821501A515035E1507150F4B5A153F4AB45A90B65A5E93C7FC5D +8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B5 +6C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>82 D<90390FF803C0D97FFF13 +E048B512C74814F74814FF5A381FF80F383FE001497E4848137F90C7123F5A48141FA215 +0FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13 +FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07F8A2007C140312FEA56C14 +0716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F8 +1F5BD878011380253A7BB830>I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07 +C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<3B7FFFC007FFFCB56C4813 +FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600A36C6C14FE6D13016D5CEC8003 +90393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038007FFCEC1FF02F3980B730 +>II< +D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C486D13E0D81FC09038001FC000 +0F1680A76D143F00071600A7000390380F803E9039F01FC07EEC3FE0A3EC7FF0A2147D00 +01157CA29039F8FDF8FCA314F8A300005D01F913FCA2ECF07CA201FD137DA2017D5CECE0 +3DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D397FB730>I<3A3FFF01FFF848 +01837F02C77FA202835B6C01015B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB +3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B +81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001143F49800003141F4980000714 +0FD87FFEEB7FFFB590B5128080A25C6C486D130029387DB730>I<007FB5FCB61280A415 +0048C8FCB3B3B3A5B6FC1580A46C140019476DBE30>91 D<007FB5FCB61280A47EC7123F +B3B3B3A5007FB5FCB6FCA46C140019477DBE30>93 D<1307EB1FC0EB7FF0497E000313FE +000FEBFF80003F14E0D87FFD13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F00010 +EB00401D0E77B730>I<007FB612F0A2B712F8A36C15F0A225077B7D30>I97 DII<913801 +FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D8 +1FF0133F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F +6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F0103 +13C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E4880480181 +13803A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A +5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A +03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>IIII<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA00 +01B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>I107 D<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I< +02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07 +EB03F801FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B54801 +8F13C0A46C486C01071380322881A730>II<49B4FC +010F13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0F +F0A24848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D130300 +3F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C1500 +6C6C13FC6D5B010F13E0010190C7FC272A7CA830>II<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390F +FC007F49131F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C +1307150F6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F101 +0F13C1903803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>II< +90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91 +C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380 +007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00 +FC14F0D8F83F13C026780FFEC7FC222A79A830>III<3B3FFFC07F +FF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005DA26D13 +0F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA214 +F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D +4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015D +EC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA29039 +3FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37FB5 +80A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06D +B45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F89038 +1F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C11480 +14E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C0 +6C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805BA214C0 +010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA2 +6E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0 +EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90C7 +EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A49 +90C7FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A485A485A48B7 +FCB8FCA46C15FE28277DA630>II<127CA2 +12FEB3B3B3AD127CA207476CBE30>II<017C133848B4 +137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF8713E0010713C0486C1380D87C +0113003838007C1F0C78B730>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fn cmr10 10.95 85 +/Fn 85 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907 +F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7 +FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11 +DIII<121EEA7F80EAFFC0A9EA7F80ACEA3F00AC +121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33 +D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013 +00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E +0018130C0038131C003013181C1C7DBE2D>I<013F1603D9FFC04B7E2601E0E0150F2607 +C070151F48486C4BC7FC023E157E48486C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F +3F13FD007E903A070FFFF1F0007C0200EB03E0160000FC6D6C495A170F604DC8FC5F173E +5F17FC5F4C5A1603007CD907005B4C5A007E150F003E495C020E49C9FC003F5D6C49133E +260F803C5B023813FC6C6C485B3A01E0E001F03800FFC090273F0003E0133F90C70007EC +FFC09339C001E0E0923A0F8007C070031F49487E0400143C033E90381F001C037E497F03 +7C133E4B150F0201027E7F4B137C4A5A020702FCEB03805D4A5A141F92C7FC143E147E14 +7C5CA2495A0103037CEB07005C4948147E010F033E5B4A160E49C8123F496F5B013E9238 +0F803C49173801FC6F6C5A49923801E0E0496FB45A0160043FC7FC41497BC34C>37 +DI<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013 +C0A312011380120313005A120E5A1218123812300B1C79BE19>I<1430147014E0EB01C0 +EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FC +A25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA2 +12017F12007F13787F133E131E7FEB07801303EB01C0EB00E014701430145A77C323>I< +12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA21480130F +A214C0A3130714E0A6130314F0B214E01307A614C0130FA31480A2131F1400A25B133EA2 +5BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<150615 +0FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A915063C3C7BB447>43 +D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A +120E5A1218123812300B1C798919>II<121EEA7F80A2EAFFC0A4 +EA7F80A2EA1E000A0A798919>IIII< +EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE001E6D7E001C158000 +3CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F16 +8015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A495A49C712 +70133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7FCA3243D7CBC2D> +II<150E151E153EA215 +7EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB0380EB0700 +A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC +4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5FC5D5D5D15C092C7 +FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8496C7E49137E497F +90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA416E090C7121F12FC +007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B5 +5A013F90C7FCEB07F8243F7CBC2D>II<1238123C123F90B612FCA316F85A16F016E00078C712010070EC03C0ED078016005D +48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C147814F8A2 +13015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>III<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EA +FFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FC +B3121E127FEAFF80A213C0A4127F121E1200A412011380A3120313005A1206120E120C12 +1C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A2 +6C18E03C167BA147>61 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15 +C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D +7E91B6FCA249819138800001A249C87EA24982010E157FA2011E82011C153FA2013C8201 +38151FA2017882170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65 +DII +IIIIII<011FB512FCA3D9000713006E5A1401B3B3A6123FEA7F +80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07EC7FC +3800FFF8EB3FC026407CBD2F>IIIIIII82 DI<003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E170712 +7C00781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42 +>IIII<007FB5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48 +EC1F806D6C92C7FC171E6D6C141C6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13 +036F485ADA1FF090C8FC020F5BEDF81E913807FC1C163C6E6C5A913801FF7016F06E5B6F +5AA26F7E6F7EA28282153FED3BFEED71FF15F103E07F913801C07F0203804B6C7EEC0700 +4A6D7E020E6D7E5C023C6D7E02386D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749 +C86C7E496F7E497ED9FFC04A7E00076DEC7FFFB500FC0103B512FEA33F3E7EBD44>II<003FB712F8A391C7EA1FF013F801E0 +EC3FE00180EC7FC090C8FC003EEDFF80A2003C4A1300007C4A5A12784B5A4B5AA200704A +5AA24B5A4B5AA2C8485A4A90C7FCA24A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8 +FCA2495A4948141CA2495A495AA2495A495A173C495AA24890C8FC485A1778485A484815 +F8A24848140116034848140F4848143FED01FFB8FCA32E3E7BBD38>II<486C13C00003130101001380481303000EEB0700 +48130E0018130C0038131C003013180070133800601330A300E01370481360A400CFEB67 +8039FFC07FE001E013F0A3007F133FA2003F131F01C013E0390F0007801C1C73BE2D>I< +EAFFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>I97 DI<49B4FC010F13E090383F00F801 +7C131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290 +C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C +6C137890383F01F090380FFFC0D901FEC7FC222A7DA828>IIII< +167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC +0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E039 +03FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15 +E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E +157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D +7EA82D>III<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC +147FEB7FFFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03 +F0381E07C0380FFF803801FC00185185BD1C>III<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B +7803F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91 +C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C> +I<3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C07F00 +01138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14 +FF010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F +15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F8 +6C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFF +F0010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F0 +3A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0F +F0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0 +DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C9038 +1F80F090397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A150148 +5AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990 +383F81F190380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807 +E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A3 +5BB3A5487EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E +1307003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C +7F6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15 +F07E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I< +131CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A9 +12009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>IIII< +B539F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7 +FC90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147B +ECF1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80 +486C80000F4A7EB539803FFFF8A32D277FA630>II<001FB61280A2EBE0000180140049485A001E +495A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A +90393FC00380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B484813 +7F00FF495A90B6FCA221277EA628>II +I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fo cmbx10 10.95 50 +/Fo 50 123 df12 +D14 +D<16F04B7EB3AD007FBA12E0BB12F0A46C19E0C8D801F8C9FCB3AD6F5A44467AB951>43 +D46 +D<161C163E167EA216FE16FC150116F8A2150316F0A2150716E0150F16C0A2151F168015 +3F1600A25D157E15FE5DA214015DA214035D14075DA2140F5D141F5DA2143F92C7FC5C14 +7EA214FE5CA213015C13035CA213075C130F5CA2131F5C133F91C8FCA25B137EA213FE5B +12015BA212035B12075BA2120F5B121F5BA2123F90C9FCA25A127E12FE5AA25A1278275B +7AC334>I<140F143F5C495A130F48B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5 +243C78BB34>49 D<903803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC003 +7F4848C67F486C6D7E6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B13 +00A25E153F5E4B5AA24B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80 +EB01FC495A4948EB1F00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4 +293C7BBB34>I<903801FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807 +F06D7E82D80FFC131F6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B02 +0F5B902607FFFEC7FC15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0 +A217E0EA0FC0487E487E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C49 +5A3A0FFE01FFF86CB65A6C5DC61580013F49C7FC010313E02B3D7CBB34>II<00071538D80FE0EB01F801FE133F90 +B6FC5E5E5E5E93C7FC5D15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B6 +7E020113E09039F8007FF0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC048 +7E487E12FF7FA21700A25B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6C +B65A6C92C7FCC614FC013F13F0010790C8FC293D7BBB34>I66 D<922607FFC0130E92B500FC131E +020702FF133E023FEDC07E91B7EAE1FE01039138803FFB499039F80003FF4901C0130001 +3F90C8127F4948151FD9FFF8150F48491507485B4A1503481701485B18004890CAFC197E +5A5B193E127FA349170012FFAC127F7F193EA2123FA27F6C187E197C6C7F19FC6C6D16F8 +6C6D150119F06C6D15036C6DED07E0D97FFEED0FC06D6CED3F80010F01C0ECFF006D01F8 +EB03FE6D9039FF801FFC010091B55A023F15E002071580020002FCC7FC030713C03F407A +BE4C>IIII<922607FFC0130E92B500FC131E020702 +FF133E023FEDC07E91B7EAE1FE01039138803FFB499039F80003FF4901C01300013F90C8 +127F4948151FD9FFF8150F48491507485B4A1503481701485B18004890CAFC197E5A5B19 +3E127FA34994C7FC12FFAB0407B612FC127F7FA3003F92C7383FFE00A27F7EA26C7FA26C +7F6C7FA26C7F6C7FD97FFE157F6D6C7E010F01E014FF6D01F813036D9038FF801F010091 +B512F3023F15C00207ED803E02009138FE000E030701E090C7FC46407ABE52>I73 D75 D78 DI82 +D<903A03FFC001C0011FEBF803017FEBFE0748B6128F4815DF48010013FFD80FF8130F48 +481303497F4848EB007F127F49143F161F12FF160FA27F1607A27F7F01FC91C7FCEBFF80 +6C13F8ECFFC06C14FCEDFF806C15E016F86C816C816C816C16806C6C15C07F010715E0EB +007F020714F0EC003F1503030013F8167F163F127800F8151FA2160FA27EA217F07E161F +6C16E06D143F01E015C001F8EC7F8001FEEB01FF9026FFE00713004890B55A486C14F8D8 +F81F5CD8F00314C027E0003FFEC7FC2D407ABE3A>I<003FB912FCA5903BFE003FFE003F +D87FF0EE0FFE01C0160349160190C71500197E127EA2007C183EA400FC183F48181FA5C8 +1600B3AF010FB712F8A5403D7CBC49>III<903807FFC0013F13F848B6FC48812607FE037F260FF8007F +6DEB3FF0486C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F +4813E0000F1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01 +FB13FE391FFF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97 +D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8 +02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E +495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113 +C033407DBE3A>IIIII<903A03FF8007F0 +013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED +F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5 +C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C +16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C +EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8 +013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E +4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C +BE3A>II<13FFB5FCA512077EB092380FFFFEA5DB01FEC7FC4B5A +ED07F0ED1FE04B5A4B5A4BC8FCEC03FC4A5A4A5A141F4A7EECFFFCA2818102E77F02C37F +148102007F826F7E6F7E151F6F7E826F7F6F7F816F7FB5D8FC07EBFFC0A5323F7DBE37> +107 D<13FFB5FCA512077EB3B3AFB512FCA5163F7CBE1D>I<01FFD91FF8ECFFC0B590B5 +010713F80203DAC01F13FE4A6E487FDA0FE09026F07F077F91261F003FEBF8010007013E +DAF9F0806C0178ECFBC04A6DB4486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03F +EBFF80A551297CA858>I<01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F00 +07013C806C5B4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A533297CA83A>II<01FFEBFFE0B5000713FC021FEBFF80027F80DA +FF8113F09139FC007FF8000701F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0 +AA4C13C0A318805E18005E6E5C6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC +028713FC028113C00280C9FCACB512FEA5333B7DA83A>II<3901FE01FE00FF903807FF804A13E04A13F0EC3F1F91387C3FF800 +0713F8000313F0EBFFE0A29138C01FF0ED0FE091388007C092C7FCA391C8FCB3A2B6FCA5 +25297DA82B>I<90383FFC1E48B512BE000714FE5A381FF00F383F800148C7FC007E147E +A200FE143EA27E7F6D90C7FC13F8EBFFE06C13FF15C06C14F06C806C806C806C80C61580 +131F1300020713C014000078147F00F8143F151F7EA27E16806C143F6D140001E013FF90 +38F803FE90B55A15F0D8F87F13C026E00FFEC7FC222B7DA929>IIIIIII<003FB612F8A4D9 +F80113F001C014E0495A494813C04A1380007E15005C4A5A007C5C147F4A5A495B5DC65A +495B495BA249EB007C495A5C137F494813FC484913F85C5A48EBC0011480481403481300 +4848130749131F007FECFFF0B7FCA426287DA72E>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fp cmbx12 24.88 29 +/Fp 29 122 df[<96260FFFFE0507B5FC060FB600E00307B612F04DB700FC92B712FE05 +1F04FF020F707E94B900C0017F17E00407DEF003B97E041FDEF80F18FC047F9126FC001F +D9FC3F9126FE000F7F4BB6008001006DB600C001007F030702F8C8003FB600FCC8001F7F +4B02E0030F03F003077F033F02804B03C04B7F4B49C9007F92C9123F92B54893B6484C7F +4A02F04B03F893B5FC4A4A4B4B4B804A4A4B4B5D4A4A4F8451614A91C95E4A4997C9FCA2 +4A496159807D5C91B5FC4C61A375735CA275735C75735C75745B76071F90C8FCA1EA07FC +A1CAFCAF101FB612FEC5B5FCA9C702FCCA6C49C912018FA17EB3B3B3B2003FB800F0011F +B800F8011FB812F8A9>181 144 123 271 194 14 D[143 +142 120 269 165 66 D[<0803B500C0EE01F00703B600FEEE03F8077FDBFFE015070607 +B800FC150F063F05FF151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326 +F8000FECC003040F4BC86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F0933900 +7FFF3F030703C0051F90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A +92CD7E4A4A864A4A864A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E49 +8B494A88A2495C8D90B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485CFA0F +F09FC7FCA25AA45DA3B6FCB27EA381A47EA46C80FA07F0FA0FF87EA2817EA36C6F1D1F23 +F07E827E223F6D6E1EE0A26D6E1D7F23C06D6E1DFF7F705213806D806D55130070646D6F +646D6F515A6E6E1B1F6E6E515A6E6E515A6E6E1BFF6E6E505B6E6E505B6E6F4F5B6E03E0 +4F90C7FC6F6EF13FFE6F02FC4F5A030F02FF4E485A6F03C005075B030103F0051F5B6F03 +FE057F1380043FDAFFE00303B5C8FC040F03FE033F13FC0403DBFFF80107B55A040093B8 +12E0053F1A80050F4FC9FC050119F8DD003F18C0060795CAFCDE007F16F0070393CBFCDF +000314C0>141 146 115 271 168 I[138 141 120 +268 153 69 D[<0803B500C0EE01F00703B600FE4C7E077FDBFFE015070607B800FC150F +063F05FF151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326F8000FECC0 +03040F4BC86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F09339007FFF3F0307 +03C0051F90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A92CD7E4A4A +864A4A864A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E498B494A88A2 +495C8D90B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485C7C5A9FC9FCA25A +A45DA3B6FCB27EA381A20A0FBB12F8A27EA46C80A36C98C96C02F8C7FCA2817EA36C81A2 +7E827E827FA26D80A26D806D80A26D806D80A26D816D816E806E806E806E6E97B6FC6E80 +6E806E03C0606E816F02F8606F02FE60030F6E606F03E0173F030103F85F6F03FF933801 +FFFC043F03E00307497E040F03FF033F497E040304FC0107B5EAE00F040093B8487E053F +F20001050F07FCEB007F050107F0141FDD003F06C01407060795C81201DE007F04F8ED00 +700703048093C8FCDF000302E0CDFC>157 146 115 271 183 71 +D[74 142 +122 269 87 73 D[163 +144 120 269 173 82 D[<93260FFFF8163E4BB600E0153F031F03FE5D037FDBFFC05C02 +03B800F05B020F05FC5B4A05FF5B027FF0C00F91B526FE000FECF01F010302C0D9007F6D +5A4991C800076D5A4901FC030090B6FC4901F0163F4949160F4901808290B5170192CBFC +4849844849181F87484984A2484984874886A248498588A24887A388A2B58680A36E85A2 +80A26E8580A2818103F0725A6C6E96C7FC15FE8116E06C15FEEEFFE017FF6C17F0F0FF80 +6C18F8F1FFC06C19FCF2FF806C1AE01BF86C1AFE6C747E6D1AE0886D866D866D1AFF6D87 +6D87010087806E86020F86020386020086153F030F851501DB001F19801601DC000F18C0 +EF007F060717E0F0003F070316F0F1003F1A0F080315F81A00871B1F877514FCA287007F +86486C85A288A388A36D86A31EF87FA37F1EF0A26D626D1CE0A27F6D5013C0A26E1B806E +96B5FC6E1B0002F8606E4E5B6E626E6C5F03E04D5B03F84D5B03FE057F5BDBFFC093B55A +04F803035C496CD9FF80021F91C7FCD9FC1F02FF49B55AD9F80792B75A496C19F049C661 +49011F18804901074DC8FC90C817F848031F16C048030003FCC9FC007C04011480>102 +146 115 271 129 I[162 144 120 269 179 85 +D<93B512FC037FECFFF00207B8FC023F17E091B912F84918FE0107727E499126C0007F14 +E04901E0C7000F80496D020380496D020014FE6F6F7F90B570806F6F8085486E6F807380 +A27380A28885886C5CA26D4982886D5B6D5B010713C0010190CAFC90CCFCA90603B7FC05 +0FB8FC0403B9FC167F0307BAFC153F4AB7EA807F020FEDE000023F02FCC7FC91B612E001 +0392C8FC4914FC011F14F04914C0495C90B548C9FC485C485C485C485C5A5D485CA24891 +CAFCA3B6FC5CA397B6FCA461806C60F107EF6C6E150F6F16CF6C183F6FDB7F8F806C6EDB +FF0F14E06C02FCDA03FE15FE6C6E91260FFC0791B5FC6C6E6CD93FF817806C923AF803FF +F003013F91B6487E010FEF8000010394C77E010004FC141F021F03F0140702010380DA00 +7F1400DA000701F8CDFC695F79DD71>97 D[113 144 121 270 129 I<94387FFFF0041FB612E093B712 +FE0307707E031F17F092B97E4A18FE020784021F9126F8000F14804A0280010014C04A49 +C74814E049B500F85C494A17F0494A5C495C494A4A14F84991C8FC5D495B90B5FC5D5A48 +5C7314F05A4B6F14E05A7314C0487214804B93383FFE00F20FF84896C8FCA4485CA5B6FC +B07EA281A37EA36C80A37E6F18FE6CF201FFA26C6E5F1CFE6C801B076C6EEF0FFC6D7F70 +EE1FF86DF13FF06D6E167F6D6EEEFFE06D02F84B13C06D6E5D6D02FF030F13806D03C002 +3F1300023F02F0903801FFFC6E9126FF801F5B020792B65A6E18C0020060033F4CC7FC03 +0716F8030016C0041F4AC8FCDC007F13C0585F78DD67>I[113 144 120 270 129 I<94387FFFC0040FB6FC93B712E0030716FC +031F16FF037F17C04AB912F00207DAF80380021F912680003F13FE4A49C7000F7F4A01F8 +02038049B5486E804902C06E6C7F494A6F7F4991C9FC49727F4949707F4B84498490B548 +707F5A4B198048855D481CC086481CE05D5A871DF05AA25D5AA21DF887A2B6FCA392BBFC +A51DF00380CDFCA77EA4817EA37EA2817EA26CF307F06FF00FF87E816C1B1F6F19F06C1B +3F6D6DF07FE06D7FF4FFC06D6E4C13806D6E5E6D02F04C13006D6EEE1FFE6D6E4C5A6D6C +01FFEEFFF86E02E002035B6E02FC021F5B02079126FFC003B55A6E92B7C7FC020060033F +17F8030F17E003011780DB003F03FCC8FC040315C0DC000F01F8C9FC5D5F7ADD6A>I[<95 +383FFF80050FB512F094B612FE040781041F16C0047F824BB87E0307DAF8077F031FDAC0 +0F7F4B49C6487F4B495B92B500F0814A4A5B4A5C4A93B612805F4A91C7FC5C5E5C5E5C73 +1400A24C6E5B91B56F5BA2735B070313E00700138097C8FCB3A4BA12F8A9C702FCCBFCB3 +B3B3B3A2003FB9FCA9>81 144 121 271 71 II[114 143 119 270 129 I[49 +144 119 271 65 I[50 143 119 270 65 108 DII<94381FFFF00407B612 +C0047F15FC0303B87E030F17E0037F17FC4ABAFC4A9126FC007F80020F02C0010714E04A +49C880027F01F8033F13FC91B5486F7F4902C003077F494A6F804991C96C804949708049 +49717F49874949717FA290B548717F48884B83481D80A2481DC04B83481DE0A2481DF0A3 +484A7114F8A4481DFCA5B61BFEAF6C1DFCA56C6E4D14F8A36C1DF0A36C1DE06F5F6C1DC0 +A26C6E4D1480A26C1D006F5F6C646D6D4D5B6F94B5FC6D636D6D4C5C6D6E4B5C6D6E4B5C +6D02F0031F5C6D6E4B91C7FC6D6C01FE92B512FC6ED9FFC001075C6E02FC017F5C020791 +B812C0020196C8FC6E6C17FC031F17F003031780DB007F03FCC9FC040715C0DC001F01F0 +CAFC675F7ADD74>II< +DB7FC049B47E90B6021F13F8B7027F13FE4DB67E4D15E04D814D814D01077F94263FF00F +7F94387FC01F4D48487FD8003F16000107DAC1FE491480EEC3FC6D5DEEC7F05F16CF5F16 +DF4D6D1400A204FFC76C5BA2735B4C6E5B735B070013C04C92C8FCA45EA65EB3B3AAB912 +FCA9515D79DC5F>114 D<92261FFFF814F80203B638C001FC023FEDFC0791B8121F0103 +17FF130F013F9038F8001F4990C8FCD9FFF8153F4801E0150F484915034849814890CAFC +197F4848173F191F485AA2007F180FA31907487EA27FA28002E0705A6E93C8FC14FC14FF +15F06CECFF8016FCEEFFF06CEEFF8018F06C17FE727E6C18E0856C18FC6C846C727E6C85 +6D84011F846D841303010084023F83140F020183EC001FDB007F16801603DC000F15C017 +00183F060F14E0007F1703486C82727E857F85857FA2857F1BC07FA27F1B806D5F7F1B00 +6E5E6E5F6E163F6E4C5A02FC4C5A6E03035B6E6C4A5B03F0023F5B03FF0107B55A01F991 +B7C7FCD9F07F16FCD9E01F16F0D9800716C0D9000193C8FC48D9003F14F8007C020349C9 +FC4B5F78DD5C>I[72 +132 124 258 90 II<007FB86C49 +B712FEA9C792C9000F02C0C7FC6E6E030101F0C8FC715F6E6E4B5B6E6E4B5B6E4E90C9FC +6E6E5E71151F6E6E4B5A6E6E4B5A6E4E5A6F6E495B72495B6F6E495B6F806F6E4990CAFC +6F4C5A72495A6F6E495A6F6E495A6F03815B705E7014C307E75B7091B5CBFC705D705D70 +5D6282705D715C8386718071807180837180864D814D815F4D81874D814D81DDFFF3804C +13E14C01C1804C0180814E6C804C6E804C487F4C48824C486D804C486D804B496D804B49 +7F73804B49834B90C86C804B486F804B48814B486F804B48844C6F804A71804A496F804A +49814A90CA814A487180023F7280010FB500E07080B8031FB812E0A9735C7CDB7B>120 +D<007FB800C04AB71280A9D800034ACA000791C7FC6D080013F0775A6D6E4E5AA26E6E60 +64836E4F90C8FC836E4F5A836E4F5AA26E6E4C5AA26E6E5F1C3F6E6E5F1C7F836E4F5A84 +6F4D5B846F4D90C9FCA26F6E4A5AA26F6E5D1B0F846F4D5A846F4D5A846F4D5AA26F6E4A +5AA2706E5C627002C091CAFC6219E0704B5A19F0704B5AA2706E485AA2706E485AA27002 +FE5B1A7F19FF704B5AA2715DA27192CBFCA2715CA2715CA3715CA2715CA2715CA2715CA2 +725BA27290CCFCA3725AA2725AA24E5AA24E5AA261187FA24E5AA24D5B13FE2603FF804A +90CDFC000F13E0486D4A5A487F486D4A5AA260B56C141F4D5AA24D5A17FF604C5B4A4990 +CEFC6C5D4C5A6C49EB3FFC4A495A6C4948485A9026FE80075B270FFFC03F5B6C90B6CFFC +6C5D6C15F86C6C5C011F14C0010749D0FC9038007FE071857CDB7B>I +E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fq cmtt12 12 9 +/Fq 9 122 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B6C8A33>46 +D64 D98 D100 D<14E0EB03F8A2497EA36D5AA2EB00E091C8FCAA383FFFF8487FA47EEA00 +01B3AD007FB612C0B712E016F0A216E06C15C0243E78BD33>105 +D107 D116 DI<3B7FFF801FFF +E0B56C4813F06E4813F8A24A6C13F06C496C13E0D803F8C7EAFC00000114015E7F000014 +036D5C137EA2017F495A7FA26E485A131FA26D6C485AA214E0010749C7FCA214F0130315 +7EEB01F8A2157C010013FC14FC5D147C147DEC3FF0A36E5AA36E5AA2141F5DA2143F92C8 +FCA3147EA214FE003F5B1301387F81F81383EB87F0139FEBFFE06C5B5C6C90C9FCEA0FFC +EA03F02D427DAA33>121 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fr cmr12 12 34 +/Fr 34 122 df<1606A25E161C1618163816305EEC7F80903903FFF0C090380FC0FC9039 +3E001F8049130F01F0EB03C04848497E0003814848EB0CF84848147C1518001F157E48C7 +487E157015604802E01380007EECC01FEC0180A200FED9030013C0A21406140E140C141C +14185CA25C007E16805CD87F01143F003F4914001303001F90C7123E0186147E000F157C +01CC14FC00075DD803F8495A00014A5A00004A5A017E011FC7FC90387F807E9038C7FFF8 +9038C07F804848C9FCA248CAFC5A1206120E120C5AA22A3F7DB431>28 +D<140C141C1438147014E0EB01C01303EB0780EB0F00A2131E5BA25B13F85B12015B1203 +A2485AA3485AA348C7FCA35AA2123EA2127EA4127CA312FCB3A2127CA3127EA4123EA212 +3FA27EA36C7EA36C7EA36C7EA212017F12007F13787FA27F7FA2EB0780EB03C01301EB00 +E014701438141C140C166476CA26>40 D<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7E +A21378137C133C133E131E131FA2EB0F80A3EB07C0A3EB03E0A314F0A21301A214F8A413 +00A314FCB3A214F8A31301A414F0A21303A214E0A3EB07C0A3EB0F80A3EB1F00A2131E13 +3E133C137C13785BA2485A485AA2485A48C7FC120E5A5A5A5A5A16647BCA26>I<121EEA +7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A1206120E +5A5A5A12600B1D78891B>44 DI<14FF010713E090381F81F890 +383E007C01FC133F4848EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301001F +15F8A2003F15FCA390C8FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8 +A26C6CEB03F0A36C6CEB07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F +81F8903807FFE0010090C7FC28447CC131>48 D50 D<14FF010713E0011F13F890387F80FC9038FC007E48487F4848EB1F804848 +EB0FC0000FEC07E0485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516FFA4 +6C5CA36C7E5D121F7F000F5C6C6C130E150C6C6C131C6C6C5BD8007C5B90383F01E09039 +0FFF80FE903801FE0090C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C130F +16C0ED1F80A249EB3F0049137E001EC75A001C495A000F495A3907E01FE06CB51280C649 +C7FCEB1FF028447CC131>57 D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3A5121E +EA7F80A2EAFFC0A4EA7F80A2EA1E000A2B78AA1B>I67 D73 D<010FB512FEA3D9000313806E130080B3B3AB123F487E487EA44A5A13801300 +006C495A00705C6C13076C5C6C495A6CEB1F802603E07FC7FC3800FFFCEB1FE027467BC3 +32>I76 +D78 D<003FB912F8A3903BF0001FF8001F0180 +6D481303003EC7150048187C0078183CA20070181CA30060180CA5481806A5C81600B3B3 +A54B7EED7FFE49B77EA33F447DC346>84 DI97 DI<167FED3FFFA315018182B3EC7F80903803FFF090380FC07C90383F +000E017E1307496D5AD803F87F48487F5B000F81485AA2485AA2127FA290C8FC5AAB7E7F +A2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F806C6C010E13C0013F011C13FE +90380FC0F8903803FFE09026007F0013002F467DC436>100 DIII< +EA01FC12FFA3120712031201B3EC01FE913807FFC091381E07F091383801F802707FECE0 +00D9FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F457DC436 +>II108 DI<3901FC01FE00FF903807FFC091381E07F091383801F8000701707F0003EBE0 +002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F2C7DAB +36>II<3901FC03FC00FF90380FFF809138 +3C07E091387001F83A07FDE000FE00030180137FD801FFEC3F8091C7EA1FC04915E04914 +0F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07F8A217F0160F6D15E0EE1FC06D14 +3F17806EEB7E00D9FDC05B9039FCF003F891383C0FE091381FFF80DA03FCC7FC91C9FCAE +487EB512F8A32F3F7DAB36>I<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0FF3803 +F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26>114 +D<90383FE0183901FFFC383907E01F78390F0003F8001E1301481300007C1478127800F8 +1438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0C614F0 +011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15786C14 +F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I<1306A5130E +A4131EA3133E137EA213FE12011207001FB512F0B6FCA2C648C7FCB3A4150CAA017E131C +017F1318A26D133890381F8030ECC070903807E0E0903801FFC09038007F001E3E7EBC26 +>I118 +D121 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fs cmr12 14.4 21 +/Fs 21 122 df<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F000C0C768B21>46 +D50 D<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F00 +C7FCB3A9120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F000C3376B221>58 +D66 D68 D82 D97 D99 D101 +D103 D<1378EA01FE487E487FA66C90C7FC6C5AEA007890C8FC +B0EB7F80B5FCA41203C6FC137FB3B3A43801FFE0B61280A419507CCF21>105 +D107 +DI<01FFD907 +FEEC03FFB590261FFFC0010F13E0037F01F0013F13F8912701F80FFC9038FC07FE913D03 +C003FE01E001FF000390260700019038038000C6010E6D6C48C76C7E6D48DA7F8E6E7E4A +159CA24ADA3FF86E7E02605D14E04A5DA34A5DB3AD2601FFE0DAFFF0EC7FF8B6D8C07F90 +26FFE03FB512F0A45C347CB363>I<01FFEB07FCB590383FFF8092B512E0913901F00FF8 +913903C007FC000349C66C7EC6010E13016D486D7E5C143002706E7E146014E05CA35CB3 +AD2601FFE0903801FFE0B600C0B612C0A43A347CB341>I +I<90397F8007FCB590387FFF800281B512E0913987F00FF891398F8003FC000390399E00 +01FFC601BC6D7FD97FF86E7E4A6E7E4A6E7E4A140F844A6E7EA2717EA3717EA4711380AB +4D1300A44D5AA24D5AA2606E140F4D5A6E5D6E4A5A6E4A5A02BC4AC7FC029E495A028FEB +07FC913987E01FF00281B512C0DA807F90C8FCED0FF892CAFCB13801FFE0B612C0A4394B +7DB341>I<01FFEB1F80B5EB7FF0913801FFF8913803E1FC91380783FE0003EB0F07C613 +1EEB7F1C1438143091387003FC91386000F0160014E05CA45CB3AA8048487EB612F0A427 +347DB32E>114 DI< +D97F80EC7F80B591B5FCA400031503C61500017F157FB3AC17FFA35EA3013F5C6EEB077F +A2011F020E7F6D6C011C13F06E0178EBFFC0903903FC01F06DB512E06D6C1380912607FC +00EB80003A357CB341>117 D121 D E +%EndDVIPSBitmapFont +end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: A4 + +%%EndSetup +%%Page: 1 1 +1 0 bop 907 162 a Fs(BuDDy:)52 b(Binary)37 b(Decision)i(Diagram)c(pac)m +(k)-7 b(age)1724 275 y(Release)38 b(2.2)1628 482 y Fr(J\034rn)33 +b(Lind-Nielsen)1244 599 y(IT-Univ)m(ersit)m(y)g(of)f(Cop)s(enhagen)i +(\(ITU\))1535 715 y(e-mail:)41 b Fq(buddy@itu.dk)1626 +828 y Fr(No)m(v)m(em)m(b)s(er)33 b(9,)g(2002)1430 3250 +y @beginspecial 0 @llx 0 @lly 139 @urx 216 @ury 1390 +@rwi @setspecial +%%BeginDocument: example.pstex +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: example.pstex +%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 +%%CreationDate: Fri Jul 17 10:12:32 1998 +%%For: jl@britta (Jorn Lind-Nielsen) +%%Orientation: Portrait +%%BoundingBox: 0 0 139 216 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-145.0 343.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit +n -1000 6712 m -1000 -1000 l 5733 -1000 l 5733 6712 l cp clip + 0.06000 0.06000 sc +7.500 slw +% Ellipse +n 3300 2400 270 270 0 360 DrawEllipse gs col0 s gr + +/Helvetica ff 270.00 scf sf +3210 2520 m +gs 1 -1 sc (X) col0 sh gr +% Ellipse +n 3300 4170 270 270 0 360 DrawEllipse gs col0 s gr + +% Ellipse +n 2700 3270 270 270 0 360 DrawEllipse gs col0 s gr + +% Ellipse +n 3900 3270 270 270 0 360 DrawEllipse gs col0 s gr + +% Ellipse +n 4455 4170 270 270 0 360 DrawEllipse gs col0 s gr + +% Polyline +n 3000 5100 m 3600 5100 l 3600 5700 l 3000 5700 l cp gs col0 s gr +% Polyline +n 3900 5100 m 4500 5100 l 4500 5700 l 3900 5700 l cp gs col0 s gr +% Polyline +gs clippath +2957 2969 m 2864 3052 l 2907 2936 l 2817 3071 l 2867 3104 l cp +clip +n 3150 2625 m 2850 3075 l gs col0 s gr gr + +% arrowhead +n 2957 2969 m 2864 3052 l 2907 2936 l 2932 2953 l 2957 2969 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +gs clippath +3693 2936 m 3735 3052 l 3643 2969 l 3733 3104 l 3783 3071 l cp +clip +n 3450 2625 m 3750 3075 l gs col0 s gr gr + [] 0 sd +% arrowhead +n 3693 2936 m 3735 3052 l 3643 2969 l 3668 2953 l 3693 2936 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3649 3881 m 3556 3964 l 3599 3848 l 3509 3983 l 3559 4016 l cp +clip +n 3842 3537 m 3542 3987 l gs col0 s gr gr + +% arrowhead +n 3649 3881 m 3556 3964 l 3599 3848 l 3624 3865 l 3649 3881 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +gs clippath +4235 3824 m 4277 3940 l 4185 3857 l 4275 3992 l 4325 3959 l cp +clip +n 3992 3513 m 4292 3963 l gs col0 s gr gr + [] 0 sd +% arrowhead +n 4235 3824 m 4277 3940 l 4185 3857 l 4210 3841 l 4235 3824 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +gs clippath +3036 3830 m 3062 3950 l 2982 3857 l 3055 4002 l 3109 3975 l cp +clip +n 2850 3525 m 3075 3975 l gs col0 s gr gr + [] 0 sd +% arrowhead +n 3036 3830 m 3062 3950 l 2982 3857 l 3009 3844 l 3036 3830 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3330 4953 m 3300 5073 l 3270 4953 l 3270 5115 l 3330 5115 l cp +clip +n 3300 4425 m 3300 5100 l gs col0 s gr gr + +% arrowhead +n 3330 4953 m 3300 5073 l 3270 4953 l 3300 4953 l 3330 4953 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +gs clippath +3975 4970 m 4032 5079 l 3930 5010 l 4038 5131 l 4082 5091 l cp +clip +n 3450 4425 m 4050 5100 l gs col0 s gr gr + [] 0 sd +% arrowhead +n 3975 4970 m 4032 5079 l 3930 5010 l 3952 4990 l 3975 4970 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [60] 0 sd +gs clippath +3579 5023 m 3469 5081 l 3539 4979 l 3419 5088 l 3459 5132 l cp +clip +n 4275 4350 m 3450 5100 l gs col0 s gr gr + [] 0 sd +% arrowhead +n 3579 5023 m 3469 5081 l 3539 4979 l 3559 5001 l 3579 5023 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +4336 4963 m 4280 5073 l 4278 4950 l 4242 5108 l 4301 5121 l cp +clip +n 4425 4425 m 4275 5100 l gs col0 s gr gr + +% arrowhead +n 4336 4963 m 4280 5073 l 4278 4950 l 4307 4957 l 4336 4963 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3131 4983 m 3204 5082 l 3093 5029 l 3217 5133 l 3256 5087 l cp +clip +n 2550 3525 m 2550 3527 l 2549 3530 l 2549 3536 l 2548 3546 l 2546 3560 l + 2544 3579 l 2541 3602 l 2538 3629 l 2535 3661 l 2532 3696 l + 2528 3735 l 2524 3777 l 2520 3821 l 2516 3866 l 2513 3912 l + 2510 3958 l 2507 4004 l 2505 4049 l 2504 4092 l 2504 4133 l + 2504 4173 l 2506 4211 l 2508 4247 l 2512 4280 l 2517 4312 l + 2523 4342 l 2530 4371 l 2539 4398 l 2550 4425 l 2562 4451 l + 2576 4477 l 2592 4503 l 2610 4529 l 2630 4556 l 2652 4583 l + 2677 4611 l 2704 4641 l 2734 4671 l 2765 4702 l 2799 4733 l + 2834 4766 l 2870 4798 l 2907 4831 l 2944 4864 l 2980 4896 l + 3016 4926 l 3051 4955 l 3083 4982 l 3112 5007 l 3138 5029 l + 3161 5048 l 3180 5063 l 3195 5076 l 3207 5085 l 3225 5100 l gs col0 s gr gr + +% arrowhead +n 3131 4983 m 3204 5082 l 3093 5029 l 3112 5006 l 3131 4983 l cp gs 0.00 setgray ef gr col0 s +/Helvetica ff 270.00 scf sf +3210 4290 m +gs 1 -1 sc (Z) col0 sh gr +/Helvetica ff 270.00 scf sf +3210 5490 m +gs 1 -1 sc (1) col0 sh gr +/Helvetica ff 270.00 scf sf +4140 5505 m +gs 1 -1 sc (0) col0 sh gr +/Helvetica ff 270.00 scf sf +2610 3390 m +gs 1 -1 sc (Y) col0 sh gr +/Helvetica ff 270.00 scf sf +3810 3390 m +gs 1 -1 sc (Y) col0 sh gr +/Helvetica ff 270.00 scf sf +4365 4290 m +gs 1 -1 sc (Z) col0 sh gr +$F2psEnd +rs + +%%EndDocument + @endspecial eop +%%Page: 2 2 +2 1 bop eop +%%Page: 1 3 +1 2 bop 236 826 a Fp(Con)-6 b(ten)g(ts)236 1362 y Fo(1)85 +b(In)m(tro)s(duction)2778 b(1)373 1475 y Fn(1.1)94 b(Ac)m(kno)m +(wledgemen)m(ts)59 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)127 b(1)236 1679 y Fo(2)85 b(Users)35 b(Guide)2791 +b(3)373 1792 y Fn(2.1)94 b(Getting)31 b(BuDDy)h(.)46 +b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(3)373 1905 y(2.2)94 b(Installing)81 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(3)373 +2018 y(2.3)94 b(Compiling)43 b(.)i(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(3)373 2131 +y(2.4)94 b(Programming)29 b(with)g(BuDDy)82 b(.)45 b(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)127 b(3)582 2244 y(2.4.1)106 b(More)31 +b(Examples)40 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(4)373 2357 y(2.5)94 b(V)-8 b(ariable)30 b(sets)90 b(.)46 +b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(4)373 2469 y(2.6)94 b(Dynamic)30 b(V)-8 b(ariable)30 +b(Reordering)51 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(5)373 2582 y(2.7)94 b(Error)29 b(Handling)60 b(.)46 +b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(6)373 2695 y(2.8)94 b(The)30 b(C++)f(in)m(terface)46 +b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(6)373 2808 y(2.9)94 b(Finite)29 b(Domain)h(Blo)s(c)m(ks)83 +b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(7)373 2921 y(2.10)49 b(Bo)s(olean)30 b(V)-8 b(ectors)26 +b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 +b(7)582 3034 y(2.10.1)61 b(C++)29 b(In)m(terface)77 b(.)45 +b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(9)236 +3238 y Fo(3)85 b(E\016ciency)35 b(Concerns)2407 b(11)236 +3442 y(4)85 b(Some)34 b(Implemen)m(tation)e(details)1967 +b(13)236 3645 y(5)85 b(Reference)2853 b(15)373 3758 y +Fn(b)s(ddCac)m(heStat)103 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(20)373 3871 +y(b)s(ddGb)s(cStat)106 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(21)373 3984 +y(b)s(ddStat)59 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(22)373 +4097 y(b)s(dd)p 534 4097 28 4 v 30 w(addref)j(.)46 b(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(22)373 4210 y(b)s(dd)p 534 4210 V 30 w(addv)-5 b(arblo)s(c)m(k)67 +b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)82 b(23)373 4323 y(b)s(dd)p 534 4323 V 30 w(in)m(taddv)-5 +b(arblo)s(c)m(k)100 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(23)373 4436 y(b)s(dd)p 534 4436 +V 30 w(allsat)123 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(24)373 4549 +y(b)s(dd)p 534 4549 V 30 w(and)119 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(24)373 4662 y(b)s(dd)p 534 4662 V 30 w(ano)s(decoun)m(t)94 +b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)82 b(25)373 4775 y(b)s(dd)p 534 4775 V 30 w(appall)92 +b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(25)373 4887 y(b)s(dd)p 534 4887 +V 30 w(app)s(ex)98 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(26)373 5000 +y(b)s(dd)p 534 5000 V 30 w(apply)115 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(27)373 5113 y(b)s(dd)p 534 5113 V 30 w(appuni)61 b(.)46 +b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)82 b(27)373 5226 y(b)s(dd)p 534 5226 V 30 +w(autoreorder)88 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)82 b(28)373 5339 y(b)s(dd)p 534 +5339 V 30 w(autoreorder)p 1024 5339 V 33 w(times)55 b(.)45 +b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(28)373 5452 y(b)s(dd)p 534 5452 V 30 w(biimp)106 b(.)46 +b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)82 b(28)373 5565 y(b)s(dd)p 534 5565 V 30 +w(blo)s(c)m(k\014le)p 891 5565 V 32 w(ho)s(ok)68 b(.)46 +b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(29)373 5678 y(b)s(dd)p 534 5678 V 30 w(buildcub)s(e)88 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(29)1995 5989 y(i)p eop +%%Page: 2 4 +2 3 bop 373 162 a Fn(b)s(dd)p 534 162 28 4 v 30 w(ibuildcub)s(e)62 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(29)373 275 y(b)s(dd)p 534 275 V 30 w(cac)m(hestats)c(.) +45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)82 b(30)373 388 y(b)s(dd)p 534 388 V 30 w(clear)p +751 388 V 33 w(error)65 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(30)373 501 y(b)s(dd)p +534 501 V 30 w(clrv)-5 b(arblo)s(c)m(ks)76 b(.)46 b(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(30)373 +614 y(b)s(dd)p 534 614 V 30 w(comp)s(ose)71 b(.)46 b(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(31)373 727 y(b)s(dd)p 534 727 V 30 w(constrain)113 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(31)373 840 y(b)s(dd)p 534 840 V 30 w(delref)115 +b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(32)373 953 y(b)s(dd)p 534 953 +V 30 w(disable)p 839 953 V 31 w(reorder)100 b(.)46 b(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(32)373 +1066 y(b)s(dd)p 534 1066 V 30 w(done)d(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(32)373 1178 y(b)s(dd)p 534 1178 V 30 w(enable)p 817 +1178 V 33 w(reorder)120 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)82 b(33)373 1291 y(b)s(dd)p 534 +1291 V 30 w(error)p 757 1291 V 33 w(ho)s(ok)60 b(.)45 +b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)82 b(33)373 1404 y(b)s(dd)p 534 1404 V 30 w(errstring)66 +b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)82 b(34)373 1517 y(b)s(dd)p 534 1517 V +30 w(exist)f(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(34)373 1630 y(b)s(dd)p +534 1630 V 30 w(extv)-5 b(arn)m(um)56 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(34)373 +1743 y(b)s(dd)p 534 1743 V 30 w(false)91 b(.)45 b(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(35)373 1856 y(b)s(dd)p 534 1856 V 30 w(\014le)p 681 +1856 V 32 w(ho)s(ok)66 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(35)373 1969 +y(b)s(dd)p 534 1969 V 30 w(forall)60 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(36)373 2082 y(b)s(dd)p 534 2082 V 30 w(freepair)105 +b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)82 b(36)373 2195 y(b)s(dd)p 534 2195 V +30 w(fullsatone)95 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(36)373 2308 y(b)s(dd)p +534 2308 V 30 w(gb)s(c)p 703 2308 V 33 w(ho)s(ok)114 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(37)373 2420 y(b)s(dd)p 534 2420 V 30 +w(getallo)s(cn)m(um)68 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(37)373 2533 y(b)s(dd)p +534 2533 V 30 w(getno)s(den)m(um)63 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(38)373 +2646 y(b)s(dd)p 534 2646 V 30 w(getreorder)p 968 2646 +V 34 w(metho)s(d)92 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(38)373 2759 y(b)s(dd)p 534 2759 V 30 +w(getreorder)p 968 2759 V 34 w(times)110 b(.)45 b(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(38)373 2872 +y(b)s(dd)p 534 2872 V 30 w(high)93 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(39)373 2985 y(b)s(dd)p 534 2985 V 30 w(imp)113 b(.)45 +b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)82 b(39)373 3098 y(b)s(dd)p 534 3098 +V 30 w(init)57 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(40)373 3211 +y(b)s(dd)p 534 3211 V 30 w(isrunning)105 b(.)45 b(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(40)373 3324 y(b)s(dd)p 534 3324 V 30 w(ite)94 b(.)46 +b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)82 b(41)373 3437 y(b)s(dd)p 534 3437 +V 30 w(ith)m(v)-5 b(ar)103 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(41)373 +3550 y(b)s(dd)p 534 3550 V 30 w(lev)m(el2v)-5 b(ar)61 +b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)82 b(42)373 3662 y(b)s(dd)p 534 3662 V +30 w(load)99 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(42)373 3775 +y(b)s(dd)p 534 3775 V 30 w(fnload)90 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(42)373 3888 y(b)s(dd)p 534 3888 V 30 w(lo)m(w)61 b(.)46 +b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)82 b(43)373 4001 y(b)s(dd)p 534 4001 +V 30 w(mak)m(eset)90 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(43)373 4114 +y(b)s(dd)p 534 4114 V 30 w(newpair)92 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(44)373 4227 y(b)s(dd)p 534 4227 V 30 w(nith)m(v)-5 +b(ar)123 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)82 b(44)373 4340 y(b)s(dd)p 534 +4340 V 30 w(no)s(decoun)m(t)69 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(45)373 4453 +y(b)s(dd)p 534 4453 V 30 w(not)64 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(45)373 4566 y(b)s(dd)p 534 4566 V 30 w(or)114 b(.)46 +b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)82 b(45)373 4679 y(b)s(dd)p 534 4679 +V 30 w(pathcoun)m(t)77 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(46)373 4792 y(b)s(dd)p +534 4792 V 30 w(prin)m(tall)114 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(46)373 +4905 y(b)s(dd)p 534 4905 V 30 w(fprin)m(tall)k(.)46 b(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(46)373 5017 y(b)s(dd)p 534 5017 V 30 w(prin)m(tdot)e(.)46 +b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)82 b(47)373 5130 y(b)s(dd)p 534 5130 V 30 w(fprin)m(tdot)123 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(47)373 5243 y(b)s(dd)p 534 5243 V 30 +w(prin)m(torder)74 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(47)373 5356 y(b)s(dd)p +534 5356 V 30 w(prin)m(tset)100 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(48)373 +5469 y(b)s(dd)p 534 5469 V 30 w(fprin)m(tset)72 b(.)46 +b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)82 b(48)373 5582 y(b)s(dd)p 534 5582 V 30 w(prin)m(tstat)60 +b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)82 b(48)373 5695 y(b)s(dd)p 534 5695 V +30 w(fprin)m(tstat)103 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(48)1983 5989 y(ii)p +eop +%%Page: 3 5 +3 4 bop 373 162 a Fn(b)s(dd)p 534 162 28 4 v 30 w(prin)m(ttable)85 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(49)373 275 y(b)s(dd)p 534 275 V 30 w(fprin)m(ttable)57 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(49)373 388 y(b)s(dd)p 534 388 V 30 w(relpro)s(d)119 +b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)82 b(49)373 501 y(b)s(dd)p 534 501 V 30 +w(reorder)123 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(50)373 614 y(b)s(dd)p +534 614 V 30 w(reorder)p 848 614 V 33 w(gain)64 b(.)46 +b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +82 b(51)373 727 y(b)s(dd)p 534 727 V 30 w(reorder)p 848 +727 V 33 w(ho)s(ok)110 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)82 b(51)373 840 y(b)s(dd)p 534 +840 V 30 w(reorder)p 848 840 V 33 w(prob)s(e)76 b(.)46 +b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(52)373 953 y(b)s(dd)p 534 953 V 30 w(reorder)p 848 +953 V 33 w(v)m(erb)s(ose)77 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(52)373 1066 y(b)s(dd)p +534 1066 V 30 w(replace)58 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(53)373 +1178 y(b)s(dd)p 534 1178 V 30 w(resetpair)62 b(.)46 b(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(53)373 1291 y(b)s(dd)p 534 1291 V 30 w(resize)p 782 +1291 V 33 w(ho)s(ok)105 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(54)373 1404 y(b)s(dd)p +534 1404 V 30 w(restrict)123 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(55)373 +1517 y(b)s(dd)p 534 1517 V 30 w(satcoun)m(t)72 b(.)46 +b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)82 b(55)373 1630 y(b)s(dd)p 534 1630 V 30 w(setcoun)m(tset)107 +b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)82 b(55)373 1743 y(b)s(dd)p 534 1743 V 30 w(satcoun)m(tln)66 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(56)373 1856 y(b)s(dd)p 534 1856 V 30 +w(setcoun)m(tlnset)101 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)82 b(56)373 1969 y(b)s(dd)p 534 +1969 V 30 w(satone)i(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(56)373 2082 +y(b)s(dd)p 534 2082 V 30 w(satoneset)115 b(.)45 b(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(57)373 2195 y(b)s(dd)p 534 2195 V 30 w(sa)m(v)m(e)103 +b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)82 b(57)373 2308 y(b)s(dd)p 534 +2308 V 30 w(fnsa)m(v)m(e)94 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(57)373 +2420 y(b)s(dd)p 534 2420 V 30 w(scanset)124 b(.)46 b(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(58)373 2533 y(b)s(dd)p 534 2533 V 30 w(setcac)m(heratio)108 +b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)82 b(58)373 2646 y(b)s(dd)p 534 2646 V 30 w(setmaxincrease)96 +b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(59)373 2759 y(b)s(dd)p 534 2759 V 30 w(setmaxno)s(den)m(um)116 +b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(59)373 2872 y(b)s(dd)p 534 2872 V 30 w(setminfreeno)s(des)56 +b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(60)373 2985 y(b)s(dd)p 534 2985 V 30 w(setpair)67 b(.)46 +b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)82 b(60)373 3098 y(b)s(dd)p 534 3098 V 30 +w(setb)s(ddpair)53 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(60)373 3211 y(b)s(dd)p +534 3211 V 30 w(setpairs)102 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(61)373 +3324 y(b)s(dd)p 534 3324 V 30 w(setb)s(ddpairs)87 b(.)46 +b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +82 b(61)373 3437 y(b)s(dd)p 534 3437 V 30 w(setv)-5 b(arn)m(um)68 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(61)373 3550 y(b)s(dd)p 534 3550 V 30 +w(setv)-5 b(arorder)105 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(62)373 3662 y(b)s(dd)p +534 3662 V 30 w(simplify)90 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(62)373 +3775 y(b)s(dd)p 534 3775 V 30 w(stats)d(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(62)373 3888 y(b)s(dd)p 534 3888 V 30 w(strm)p 747 3888 +V 33 w(ho)s(ok)70 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(63)373 4001 y(b)s(dd)p +534 4001 V 30 w(supp)s(ort)99 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(63)373 +4114 y(b)s(dd)p 534 4114 V 30 w(sw)m(ap)m(v)-5 b(ar)91 +b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)82 b(64)373 4227 y(b)s(dd)p 534 4227 V +30 w(true)104 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(64)373 4340 +y(b)s(dd)p 534 4340 V 30 w(unique)69 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(65)373 4453 y(b)s(dd)p 534 4453 V 30 w(v)-5 b(ar)71 +b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(65)373 4566 y(b)s(dd)p +534 4566 V 30 w(v)-5 b(ar2lev)m(el)61 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(65)373 4679 y(b)s(dd)p 534 4679 V 30 w(v)-5 b(arblo)s(c)m(k)g(all)122 +b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)82 b(66)373 4792 y(b)s(dd)p 534 4792 V 30 w(v)-5 +b(arn)m(um)108 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(66)373 4905 y(b)s(dd)p +534 4905 V 30 w(v)-5 b(arpro\014le)105 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(66)373 +5017 y(b)s(dd)p 534 5017 V 30 w(v)m(eccomp)s(ose)87 b(.)46 +b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +82 b(67)373 5130 y(b)s(dd)p 534 5130 V 30 w(v)m(ersionn)m(um)94 +b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)82 b(67)373 5243 y(b)s(dd)p 534 5243 V 30 w(v)m(ersionstr)92 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(67)373 5356 y(b)s(dd)p 534 5356 V 30 +w(xor)66 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(68)373 5469 +y(b)s(ddfalse)50 b(.)c(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(68)373 5582 +y(b)s(ddtrue)63 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(68)373 +5695 y(b)m(v)m(ec)66 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(69)1970 5989 y(iii)p eop +%%Page: 4 6 +4 5 bop 373 162 a Fn(b)m(v)m(ec)p 551 162 28 4 v 34 w(add)98 +b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)82 b(69)373 275 y(b)m(v)m(ec)p +551 275 V 34 w(addref)64 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(70)373 +388 y(b)m(v)m(ec)p 551 388 V 34 w(co)s(erce)71 b(.)46 +b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)82 b(70)373 501 y(b)m(v)m(ec)p 551 501 V +34 w(con)109 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(70)373 614 y(b)m(v)m(ec)p +551 614 V 34 w(cop)m(y)64 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(71)373 +727 y(b)m(v)m(ec)p 551 727 V 34 w(delref)94 b(.)46 b(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(71)373 840 y(b)m(v)m(ec)p 551 840 V 34 w(div)120 b(.)45 +b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)82 b(71)373 953 y(b)m(v)m(ec)p 551 953 +V 34 w(div\014xed)71 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(72)373 1066 +y(b)m(v)m(ec)p 551 1066 V 34 w(equ)106 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(72)373 1178 y(b)m(v)m(ec)p 551 1178 V 34 w(false)70 +b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)82 b(72)373 1291 y(b)m(v)m(ec)p +551 1291 V 34 w(free)101 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(73)373 +1404 y(b)m(v)m(ec)p 551 1404 V 34 w(gte)54 b(.)46 b(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(73)373 1517 y(b)m(v)m(ec)p 551 1517 V 34 w(gth)114 +b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)82 b(73)373 1630 y(b)m(v)m(ec)p +551 1630 V 34 w(isconst)117 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(74)373 +1743 y(b)m(v)m(ec)p 551 1743 V 34 w(ite)73 b(.)46 b(.)f(.)h(.)g(.)f(.)h +(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(74)373 1856 y(b)m(v)m(ec)p 551 1856 V 34 w(lte)73 b(.)46 +b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)82 b(74)373 1969 y(b)m(v)m(ec)p 551 +1969 V 34 w(lth)62 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(75)373 +2082 y(b)m(v)m(ec)p 551 2082 V 34 w(map1)98 b(.)46 b(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(75)373 2195 y(b)m(v)m(ec)p 551 2195 V 34 w(map2)98 +b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(76)373 2308 y(b)m(v)m(ec)p 551 +2308 V 34 w(map3)98 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(76)373 2420 +y(b)m(v)m(ec)p 551 2420 V 34 w(m)m(ul)95 b(.)45 b(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(77)373 2533 y(b)m(v)m(ec)p 551 2533 V 34 w(m)m(ul\014xed)117 +b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)82 b(77)373 2646 y(b)m(v)m(ec)p 551 2646 V +34 w(neq)106 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(77)373 2759 +y(b)m(v)m(ec)p 551 2759 V 34 w(shl)61 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(78)373 2872 y(b)m(v)m(ec)p 551 2872 V 34 w(shl\014xed)h(.)46 +b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)82 b(78)373 2985 y(b)m(v)m(ec)p 551 2985 V 34 +w(shr)122 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(79)373 3098 y(b)m(v)m(ec)p +551 3098 V 34 w(shr\014xed)73 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(79)373 +3211 y(b)m(v)m(ec)p 551 3211 V 34 w(sub)107 b(.)45 b(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(80)373 3324 y(b)m(v)m(ec)p 551 3324 V 34 w(true)h(.)45 +b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)82 b(80)373 3437 y(b)m(v)m(ec)p 551 3437 +V 34 w(v)-5 b(al)60 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(81)373 +3550 y(b)m(v)m(ec)p 551 3550 V 34 w(v)-5 b(ar)121 b(.)45 +b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)82 b(81)373 3662 y(b)m(v)m(ec)p 551 3662 +V 34 w(v)-5 b(arfdd)61 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(82)373 3775 +y(b)m(v)m(ec)p 551 3775 V 34 w(v)-5 b(arv)m(ec)66 b(.)46 +b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)82 b(82)373 3888 y(fdd)p 508 3888 V 31 w(clearall)77 +b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(82)373 4001 y(fdd)p 508 4001 +V 31 w(domain)67 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(83)373 4114 +y(fdd)p 508 4114 V 31 w(domainn)m(um)104 b(.)46 b(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(83)373 +4227 y(fdd)p 508 4227 V 31 w(domainsize)67 b(.)45 b(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(83)373 4340 y(fdd)p 508 4340 V 31 w(equals)115 b(.)46 +b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)82 b(84)373 4453 y(fdd)p 508 4453 V 31 w(extdomain)k(.)45 +b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)82 b(84)373 4566 y(fdd)p 508 4566 V 31 w(\014le)p +656 4566 V 32 w(ho)s(ok)91 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(85)373 4679 +y(fdd)p 508 4679 V 31 w(in)m(taddv)-5 b(arblo)s(c)m(k)54 +b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)82 b(85)373 4792 y(fdd)p 508 4792 V 31 w(ithset)68 +b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g +(.)f(.)h(.)g(.)f(.)h(.)82 b(86)373 4905 y(fdd)p 508 4905 +V 31 w(ith)m(v)-5 b(ar)58 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(86)373 +5017 y(fdd)p 508 5017 V 31 w(mak)m(eset)115 b(.)46 b(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(87)373 5130 y(fdd)p 508 5130 V 31 w(o)m(v)m(erlap)s(domain)62 +b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h +(.)82 b(87)373 5243 y(fdd)p 508 5243 V 31 w(prin)m(tset)54 +b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(88)373 5356 y(fdd)p 508 5356 +V 31 w(fprin)m(tset)97 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(88)373 5469 +y(fdd)p 508 5469 V 31 w(scanallv)-5 b(ar)110 b(.)45 b(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(88)373 5582 y(fdd)p 508 5582 V 31 w(scanset)c(.)46 +b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h +(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)82 b(89)373 5695 y(fdd)p 508 5695 V 31 w(scan)m(v)-5 +b(ar)68 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) +g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(89)1971 5989 y(iv)p eop +%%Page: 5 7 +5 6 bop 373 162 a Fn(fdd)p 508 162 28 4 v 31 w(setpair)92 +b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(90)373 275 y(fdd)p 508 275 V +31 w(setpairs)56 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) +f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(90)373 388 y(fdd)p +508 388 V 31 w(strm)p 722 388 V 32 w(ho)s(ok)96 b(.)45 +b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)82 b(91)373 501 y(fdd)p 508 501 V 31 w(v)-5 b(arn)m(um)62 +b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) +f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f +(.)h(.)g(.)f(.)h(.)82 b(91)373 614 y(fdd)p 508 614 V +31 w(v)-5 b(ars)60 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f +(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) +h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(92)373 +727 y(op)s(erator)p Fm(<<)90 b Fn(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) +g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g +(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 +b(92)1984 5989 y(v)p eop +%%Page: 6 8 +6 7 bop 1971 5989 a Fn(vi)p eop +%%Page: 1 9 +1 8 bop 236 785 a Fl(Chapter)65 b(1)236 1200 y Fp(In)-6 +b(tro)6 b(duction)236 1645 y Fn(BuDDy)27 b(is)e(a)h(Binary)f(Decision)g +(Diagram)h(pac)m(k)-5 b(age)28 b(that)e(pro)m(vides)f(all)g(of)h(the)g +(most)g(used)f(functions)236 1758 y(for)31 b(manipulating)d(BDDs.)43 +b(The)30 b(pac)m(k)-5 b(age)33 b(also)d(includes)f(functions)g(for)i +(in)m(teger)g(arithmetics)f(suc)m(h)236 1871 y(as)h(addition)d(and)i +(relational)f(op)s(erators.)377 1984 y(BuDDy)36 b(started)f(as)g(a)h +(tec)m(hnology)g(transfer)e(pro)5 b(ject)35 b(b)s(et)m(w)m(een)h(the)f +(T)-8 b(ec)m(hnical)34 b(Univ)m(ersit)m(y)g(of)236 2097 +y(Denmark)i(and)f(Bann)g(Visualstate.)57 b(The)35 b(later)h(is)e(no)m +(w)i(using)e(the)i(tec)m(hniques)f(from)g(BuDDy)i(in)236 +2210 y(their)30 b(soft)m(w)m(are.)42 b(See)30 b Fm(www.visualstate.com) +p Fn(.)377 2323 y(This)19 b(man)m(ual)h(describ)s(es)f(only)h(the)h(in) +m(terface)g(to)h(BuDDy)-8 b(,)24 b(not)d(the)g(underlying)c(theory)k +(of)g(BDDs.)236 2435 y(More)37 b(information)c(ab)s(out)j(that)g(can)g +(b)s(e)f(found)f(in)g(Henrik)h(Reif)g(Andersen's)f(\\An)i(In)m(tro)s +(duction)236 2548 y(T)-8 b(o)42 b(Binary)e(Decision)h(Diagrams")g(whic) +m(h)f(is)h(supplied)c(with)j(the)h(BuDD)m(Y)i(distribution.)69 +b(Ev)m(en)236 2661 y(more)39 b(information)e(can)j(of)f(course)g(b)s(e) +f(found)g(in)f(the)i(original)e(pap)s(ers)h(b)m(y)h(Bry)m(an)m(t,)j +(Rudell)37 b(and)236 2774 y(Brace)32 b([1,)f(3)q(,)f(2)q(,)g(4)q(])236 +3061 y Fk(1.1)136 b(Ac)l(kno)l(wledgemen)l(ts)236 3264 +y Fn(Thanks)38 b(to)i(the)f(follo)m(wing)e(p)s(eople)h(for)g(new)h +(ideas,)h(bug)e(h)m(un)m(ts)h(and)f(lots)h(of)g(discussions:)55 +b(Gerd)236 3376 y(Behrmann,)26 b(Henrik)f(Reif)g(Andersen,)h(Ken)g +(Larsen,)g(Jacob)h(Lic)m(h)m(ten)m(b)s(erg,)g(P)m(oul)e(Williams,)g +(Nik)m(ola)5 b(j)236 3489 y(Bjorner,)31 b(Alan)e(Mishc)m(henk)m(o,)i +(Henrik)e(Hulgaard,)h(and)g(Malte)h(Helmert.)1985 5989 +y(1)p eop +%%Page: 2 10 +2 9 bop 1985 5989 a Fn(2)p eop +%%Page: 3 11 +3 10 bop 236 785 a Fl(Chapter)65 b(2)236 1200 y Fp(Users)77 +b(Guide)236 1682 y Fk(2.1)136 b(Getting)45 b(BuDDy)236 +1885 y Fn(BuDDy)31 b(can)g(b)s(e)f(found)f(on)h(the)h(serv)m(er)f +Fm(http://www.itu.dk/researc)o(h/bu)o(ddy)o Fn(.)236 +2171 y Fk(2.2)136 b(Installing)347 2374 y Fn(1.)46 b(Edit)30 +b(the)g(\014le)g("con\014g")h(to)g(sp)s(ecify)e(y)m(our)i(compiler)e +(and)g(install)g(options.)347 2562 y(2.)46 b(T)m(yp)s(e)30 +b Fm(make)g Fn(to)h(mak)m(e)g(the)g(binary)-8 b(.)347 +2749 y(3.)46 b(T)m(yp)s(e)30 b Fm(make)47 b(install)28 +b Fn(to)j(cop)m(y)h(the)e(BDD)i(\014les)d(to)i(their)f(appropriate)f +(directories)347 2937 y(4.)46 b(T)m(yp)s(e)30 b Fm(make)47 +b(examples)28 b Fn(to)j(mak)m(e)h(the)e(examples)236 +3223 y Fk(2.3)136 b(Compiling)236 3426 y Fn(This)28 b(is)g(rather)h +(simple.)38 b(Just)28 b(inform)g(the)h(compiler)f(of)h(where)g(the)g +(binaries)e(and)h(include)f(\014les)h(are)236 3539 y(installed.)38 +b(With)26 b(Gn)m(u)h(C)g(this)f(is)h(done)g(with)f(the)h +Fm(-I)g Fn(and)g Fm(-L)f Fn(options.)39 b(Assuming)26 +b(that)i(the)f(binary)236 3652 y(library)g Fm(libbdd.a)g +Fn(is)h(installed)e(in)i Fm(/usr/local/lib)d Fn(and)j(the)i(include)c +(\014le)i Fm(bdd.h)g Fn(is)g(installed)f(in)236 3765 +y Fm(/usr/local/include)p Fn(,)f(then)k(the)g(compile)g(command)g +(should)e(b)s(e)377 3968 y Fm(cc)48 b(-I/usr/local/include)42 +b(myfile.c)j(-o)j(myfile)e(-L/usr/include/lib)c(-lbdd)236 +4173 y Fn(If)31 b(the)h(ab)s(o)m(v)m(e)h(directories)d(are)i(included)d +(in)h(y)m(our)i(searc)m(h)g(path)f(already)-8 b(,)33 +b(then)e(y)m(ou)h(migh)m(t)f(b)s(e)g(able)236 4286 y(to)g(reduce)f(the) +h(command)f(to)463 4485 y Fm(cc)48 b(myfile.c)d(-o)i(myfile)f(-lbdd)236 +4777 y Fk(2.4)136 b(Programming)46 b(with)f(BuDDy)236 +4980 y Fn(First)28 b(of)h(all)f(a)h(program)g(needs)f(to)i(call)e +Fm(bdd)p 1791 4980 29 4 v 33 w(init\(nodenum,cachesize\))23 +b Fn(to)29 b(initialize)d(the)j(BDD)236 5093 y(pac)m(k)-5 +b(age.)55 b(The)34 b Fm(nodenum)e Fn(parameter)j(sets)g(the)g(initial)c +(n)m(um)m(b)s(er)i(of)i(BDD)h(no)s(des)d(and)h Fm(cachesize)236 +5206 y Fn(sets)28 b(the)g(size)f(of)h(the)g(cac)m(hes)h(used)e(for)g +(the)h(BDD)g(op)s(erators)g(\(not)g(the)g(unique)e(no)s(de)h(table\).) +40 b(These)236 5319 y(cac)m(hes)32 b(are)f(used)e(for)i +Fm(bdd)p 1166 5319 V 33 w(apply)e Fn(anmong)h(others.)377 +5432 y(Go)s(o)s(d)g(initial)e(v)-5 b(alues)30 b(are)1985 +5989 y(3)p eop +%%Page: 4 12 +4 11 bop 427 150 a Fo(Example)642 b(no)s(den)m(um)99 +b(cac)m(hesize)427 263 y Fn(Small)29 b(test)i(examples)486 +b(1000)377 b(100)427 376 y(Small)29 b(examples)618 b(10000)331 +b(1000)427 489 y(Medium)29 b(sized)h(examples)246 b(100000)287 +b(10000)427 602 y(Large)31 b(examples)526 b(1000000)203 +b(v)-5 b(ariable)236 757 y(T)d(o)s(o)40 b(few)f(no)s(des)f(will)e(only) +j(result)f(in)f(reduced)i(p)s(erformance)f(as)h(this)f(increases)h(the) +h(n)m(um)m(b)s(er)d(of)236 870 y(garbage)g(collections)e(needed.)55 +b(If)35 b(the)h(pac)m(k)-5 b(age)37 b(needs)e(more)h(no)s(des,)g(then)f +(it)g(will)e(automatically)236 983 y(increase)21 b(the)g(size)f(of)h +(the)g(no)s(de)f(table.)38 b(Use)21 b Fm(bdd)p 1906 983 +29 4 v 34 w(setminfreenodes)16 b Fn(to)22 b(c)m(hange)g(the)f +(parameters)g(for)236 1095 y(when)h(this)g(is)g(done)g(and)g(use)h +Fm(bdd)p 1398 1095 V 33 w(setcacheratio)d Fn(to)j(enable)f(dynamical)g +(resizing)f(of)i(the)g(op)s(erator)236 1208 y(cac)m(hes.)41 +b(Y)-8 b(ou)27 b(ma)m(y)g(also)f(use)g(the)g(function)f +Fm(bdd)p 1912 1208 V 34 w(setmaxincrease)d Fn(to)27 b(adjust)f(ho)m(w)g +(BuDDy)h(resizes)236 1321 y(the)k(no)s(de)e(table.)377 +1434 y(After)42 b(the)f(initialization)d(a)k(call)e(m)m(ust)h(b)s(e)g +(done)g(to)h Fm(bdd)p 2469 1434 V 33 w(setvarnum)d Fn(to)j(de\014ne)e +(ho)m(w)h(man)m(y)236 1547 y(v)-5 b(ariables)30 b(to)j(use)e(in)f(this) +g(session.)43 b(This)30 b(n)m(um)m(b)s(er)g(ma)m(y)i(b)s(e)f(increased) +g(later)g(on)h(either)f(b)m(y)g(calls)g(to)236 1660 y +Fm(bdd)p 386 1660 V 34 w(setvarnum)d Fn(or)i(to)h Fm(bdd)p +1246 1660 V 34 w(extvarnum)p Fn(.)377 1773 y(The)20 b(atomic)h +(functions)e(for)h(getting)h(new)f(BDD)h(no)s(des)f(are)g +Fm(bdd)p 2588 1773 V 34 w(ithvar\(i\))d Fn(and)j Fm(bdd)p +3382 1773 V 34 w(nithvar\(i\))236 1886 y Fn(whic)m(h)27 +b(returns)f(references)i(to)h(BDD)g(no)s(des)e(of)h(the)f(form)h(\()p +Fj(v)2359 1900 y Fi(i)2387 1886 y Fj(;)15 b Fn(0)p Fj(;)g +Fn(1\))30 b(and)d(\()p Fj(v)2875 1900 y Fi(i)2904 1886 +y Fj(;)15 b Fn(1)p Fj(;)g Fn(0\).)42 b(The)27 b(no)s(des)g(con-)236 +1999 y(structed)h(in)f(this)g(w)m(a)m(y)j(corresp)s(onds)c(to)j(the)g +(p)s(ositiv)m(e)e(and)h(negativ)m(e)h(v)m(ersions)f(of)g(a)h(single)d +(v)-5 b(ariable.)236 2112 y(Initially)28 b(the)i(v)-5 +b(ariable)29 b(order)h(is)g Fj(v)1451 2126 y Fh(0)1515 +2112 y Fj(<)25 b(v)1655 2126 y Fh(1)1720 2112 y Fj(<)g(:)15 +b(:)g(:)26 b(<)f(v)2087 2126 y Fi(n)p Fg(\000)p Fh(1)2250 +2112 y Fj(<)g(v)2390 2126 y Fi(n)2437 2112 y Fn(.)377 +2225 y(The)41 b(BDDs)h(returned)e(from)h Fm(bdd)p 1611 +2225 V 34 w(ithvar\(i\))d Fn(can)k(then)f(b)s(e)f(used)h(to)h(form)f +(new)f(BDDs)j(b)m(y)236 2337 y(calling)c Fm(bdd)p 684 +2337 V 33 w(apply\(a,b,op\))e Fn(where)j Fm(op)f Fn(ma)m(y)i(b)s(e)f +Fm(bddop)p 2367 2337 V 33 w(and)f Fn(or)h(an)m(y)h(of)f(the)h(other)f +(op)s(erators)236 2450 y(de\014ned)27 b(in)g Fm(bdd.h)p +Fn(.)38 b(The)28 b(apply)e(function)h(p)s(erforms)f(the)j(binary)d(op)s +(eration)h(indicated)g(b)m(y)h Fm(op)p Fn(.)39 b(Use)236 +2563 y Fm(bdd)p 386 2563 V 34 w(not)28 b Fn(to)i(negate)g(a)f(BDD.)i +(The)d(result)g(from)h Fm(bdd)p 2115 2563 V 33 w(apply)f +Fn(and)g(an)m(y)h(other)h(BDD)g(op)s(erator)f Ff(must)236 +2676 y Fn(b)s(e)c(handed)f(o)m(v)m(er)j(to)f Fm(bdd)p +1114 2676 V 34 w(addref)d Fn(to)k(increase)e(the)g(reference)h(coun)m +(t)g(of)g(the)g(no)s(de)e(b)s(efore)h(an)m(y)h(other)236 +2789 y(op)s(eration)34 b(is)g(p)s(erformed.)52 b(This)33 +b(is)h(done)g(to)h(prev)m(en)m(t)h(the)f(BDD)h(from)e(b)s(eing)f +(garbage)j(collected.)236 2902 y(When)f(a)g(BDD)i(is)d(no)h(longer)f +(in)g(use,)i(it)e(can)i(b)s(e)e(de-referenced)h(b)m(y)g(a)h(call)e(to)i +Fm(bdd)p 3230 2902 V 33 w(delref)p Fn(.)53 b(The)236 +3015 y(exceptions)28 b(to)h(this)e(are)h(the)h(return)e(v)-5 +b(alues)27 b(from)h Fm(bdd)p 2171 3015 V 33 w(ithvar)f +Fn(and)g Fm(bdd)p 2837 3015 V 34 w(nithvar)p Fn(.)37 +b(These)28 b(do)g(not)236 3128 y(need)35 b(to)g(b)s(e)f(reference)h +(coun)m(ted,)h(although)e(it)g(is)g(not)h(an)f(error)g(to)i(do)e(so.)53 +b(The)35 b(use)f(of)g(the)h(BDD)236 3241 y(pac)m(k)-5 +b(age)33 b(ends)c(with)g(a)i(call)f(to)h Fm(bdd)p 1493 +3241 V 33 w(done)p Fn(.)40 b(See)31 b(the)f(\014gures)g(2.1)h(and)f +(2.2)h(for)g(an)f(example.)377 3354 y(Information)41 +b(on)g(the)h(BDDs)h(can)f(b)s(e)e(found)h(using)f(the)i +Fm(bdd)p 2621 3354 V 33 w(var)p Fn(,)i Fm(bdd)p 3011 +3354 V 33 w(low)d Fn(and)g Fm(bdd)p 3561 3354 V 34 w(high)236 +3467 y Fn(functions)30 b(that)i(returns)e(the)i(v)-5 +b(ariable)30 b(lab)s(elling)e(a)k(BDD,)h(the)f(lo)m(w)f(branc)m(h)g +(and)f(the)i(high)e(branc)m(h)236 3579 y(of)h(a)g(BDD.)377 +3692 y(Prin)m(ting)i(BDDs)i(is)e(done)i(using)d(the)j(functions)e +Fm(bdd)p 2277 3692 V 33 w(printall)f Fn(that)j(prin)m(ts)e +Ff(al)5 b(l)35 b Fn(used)e(no)s(des,)236 3805 y Fm(bdd)p +386 3805 V 34 w(printtable)25 b Fn(that)j(prin)m(ts)f(the)h(part)f(of)i +(the)f(no)s(detable)f(that)h(corresp)s(onds)f(to)h(a)h(sp)s(eci\014c)d +(BDD)236 3918 y(and)d Fm(bdd)p 556 3918 V 34 w(printset)e +Fn(that)j(prin)m(ts)e(a)i(sp)s(eci\014c)e(BDD)j(as)f(a)f(list)g(of)g +(elemen)m(ts)h(in)e(a)i(set)g(\(all)f(paths)g(ending)236 +4031 y(in)29 b(the)i(true)f(terminal\).)236 4275 y Fe(2.4.1)113 +b(More)37 b(Examples)236 4446 y Fn(More)31 b(complex)f(examples)g(can)h +(b)s(e)f(found)f(in)g(the)h Fm(buddy/examples)d Fn(directory)-8 +b(.)236 4733 y Fk(2.5)136 b(V)-11 b(ariable)45 b(sets)236 +4936 y Fn(F)-8 b(or)25 b(some)g(functions)e(lik)m(e)h +Fm(bdd)p 1312 4936 V 33 w(exist)f Fn(it)h(is)g(p)s(ossible)e(to)j(pass) +f(a)h(whole)e(set)i(of)g(v)-5 b(ariables)23 b(to)i(b)s(e)f(quan-)236 +5048 y(ti\014ed,)32 b(using)f(BDDs)i(that)g(represen)m(t)f(the)h(v)-5 +b(ariables.)44 b(These)32 b(BDDs)i(are)e(simply)e(the)i(conjunction)236 +5161 y(of)f(all)f(the)g(v)-5 b(ariables)30 b(in)f(their)h(p)s(ositiv)m +(e)g(form)g(and)g(can)h(either)f(b)s(e)g(build)e(that)j(w)m(a)m(y)g(or) +g(b)m(y)g(a)g(call)f(to)236 5274 y Fm(bdd)p 386 5274 +V 34 w(makeset)p Fn(.)53 b(F)-8 b(or)35 b(the)h Fm(bdd)p +1307 5274 V 33 w(restrict)d Fn(function)h(the)h(v)-5 +b(ariables)34 b(need)h(to)h(b)s(e)e(included)e(in)i(b)s(oth)236 +5387 y(p)s(ositiv)m(e)c(and)f(negativ)m(e)j(form)e(whic)m(h)f(can)i +(only)e(b)s(e)h(done)g(man)m(ually)-8 b(.)377 5500 y(If)27 +b(for)f(example)g(v)-5 b(ariable)26 b(1)h(and)f(v)-5 +b(ariable)26 b(3)h(are)g(to)g(b)s(e)f(included)e(in)i(a)h(set,)h(then)e +(it)h(can)g(b)s(e)f(done)236 5613 y(in)j(t)m(w)m(o)j(w)m(a)m(ys,)f(as)g +(sho)m(wn)f(in)f(\014gure)h(2.3.)1985 5989 y(4)p eop +%%Page: 5 13 +5 12 bop 236 127 a Fm(#include)46 b()236 352 y(main\(void\))236 +465 y({)379 578 y(bdd)h(x,y,z;)379 804 y(bdd_init\(1000,100\);)379 +917 y(bdd_setvarnum\(5\);)379 1143 y(x)h(=)f(bdd_ithvar\(0\);)379 +1256 y(y)h(=)f(bdd_ithvar\(1\);)379 1369 y(z)h(=)f +(bdd_addref\(bdd_apply\(x,y,)o(bddo)o(p_an)o(d\)\))o(;)379 +1594 y(bdd_printtable\(z\);)379 1707 y(bdd_delref\(z\);)379 +1820 y(bdd_done\(\);)236 1933 y(})236 2229 y Fn(Figure)32 +b(2.1:)46 b(Standard)32 b(C)g(in)m(terface)h(to)g(BuDDy)-8 +b(.)48 b(In)32 b(this)f(mo)s(de)h(b)s(oth)g('b)s(dd')f(and)h('BDD')i +(can)f(b)s(e)236 2342 y(used)25 b(as)g(BuDDy)h(BDD)h(t)m(yp)s(es.)39 +b(The)25 b(C)g(in)m(terface)h(requires)d(the)j(user)f(to)h(ensure)e +(garbage)j(collection)236 2454 y(is)33 b(handled)g(correctly)-8 +b(.)53 b(This)32 b(means)i(calling)f('b)s(dd)p 2066 2454 +28 4 v 31 w(addref)7 b(')33 b(ev)m(ery)i(time)f(a)h(new)f(BDD)h(is)e +(created,)236 2567 y(and)d('b)s(dd)p 599 2567 V 31 w(delref)7 +b(')30 b(whenev)m(er)g(a)h(BDD)g(is)f(not)g(in)f(use)h(an)m(ymore.)236 +2842 y Fk(2.6)136 b(Dynamic)45 b(V)-11 b(ariable)45 b(Reordering)236 +3045 y Fn(Dynamic)31 b(v)-5 b(ariable)29 b(reordering)h(can)h(b)s(e)f +(done)h(using)e(the)i(functions)e Fm(bdd)p 2845 3045 +29 4 v 34 w(reorder\(int)44 b(method\))236 3158 y Fn(and)34 +b Fm(bdd)p 567 3158 V 34 w(autoreorder\(int)43 b(method\))p +Fn(.)52 b(Where)35 b(the)g(parameter)g Fm(method)p Fn(,)f(for)h +(instance)f(can)h(b)s(e)236 3271 y Fm(BDD)p 386 3271 +V 34 w(REORDER)p 756 3271 V 32 w(WIN2ITE)p Fn(.)40 b(The)i(pac)m(k)-5 +b(age)44 b(m)m(ust)e(kno)m(w)g(ho)m(w)g(the)g(BDD)h(v)-5 +b(ariables)41 b(are)h(related)g(to)236 3384 y(eac)m(h)30 +b(other,)g(so)f(the)f(user)h(m)m(ust)f(de\014ne)g(blo)s(c)m(ks)g(of)h +(BDD)h(v)-5 b(ariables,)28 b(using)f Fm(bdd)p 3036 3384 +V 34 w(addvarblock\(bdd)236 3497 y(var,)47 b(int)g(fixed\))p +Fn(.)65 b(A)39 b(blo)s(c)m(k)f(is)g(a)i(range)f(of)g(BDD)h(v)-5 +b(ariables)38 b(that)i(should)d(b)s(e)h(k)m(ept)i(together.)236 +3610 y(It)34 b(ma)m(y)g(either)f(b)s(e)g(a)h(simple)d(con)m(tiguous)j +(sequence)g(of)f(v)-5 b(ariables)32 b(or)i(a)g(sequence)g(of)f(other)h +(blo)s(c)m(ks)236 3723 y(with)g(ranges)h(inside)e(their)h(paren)m(ts)h +(range.)55 b(In)35 b(this)e(w)m(a)m(y)j(all)e(the)i(blo)s(c)m(ks)e +(form)h(a)g(tree)h(of)f(ranges.)236 3836 y(P)m(artially)29 +b(o)m(v)m(erlapping)h(blo)s(c)m(ks)g(are)h(not)f(allo)m(w)m(ed.)377 +3949 y(Example:)52 b(Assume)36 b(the)h(blo)s(c)m(k)f +Fj(v)1598 3963 y Fh(0)1652 3949 y Fj(:)15 b(:)g(:)i(v)1818 +3963 y Fh(9)1857 3949 y Fn(,)38 b(is)e(added)f(as)i(the)g(\014rst)e +(blo)s(c)m(k)h(and)g(then)g(the)h(blo)s(c)m(k)236 4062 +y Fj(v)280 4076 y Fh(1)335 4062 y Fj(:)15 b(:)g(:)h(v)500 +4076 y Fh(8)540 4062 y Fn(.)53 b(This)33 b(yields)g(the)h +Fj(v)1294 4076 y Fh(0)1349 4062 y Fj(:)15 b(:)g(:)h(v)1514 +4076 y Fh(9)1588 4062 y Fn(blo)s(c)m(k)35 b(at)g(the)g(top,)h(with)d +(the)i Fj(v)2717 4076 y Fh(1)2772 4062 y Fj(:)15 b(:)g(:)h(v)2937 +4076 y Fh(8)3011 4062 y Fn(blo)s(c)m(k)34 b(as)h(a)g(c)m(hild.)52 +b(If)236 4174 y(no)m(w)29 b(the)g(blo)s(c)m(k)g Fj(v)862 +4188 y Fh(1)916 4174 y Fj(:)15 b(:)g(:)h(v)1081 4188 +y Fh(4)1150 4174 y Fn(w)m(as)29 b(added,)g(it)f(w)m(ould)g(b)s(ecome)h +(a)g(c)m(hild)f(of)h(the)g Fj(v)2886 4188 y Fh(1)2940 +4174 y Fj(:)15 b(:)g(:)i(v)3106 4188 y Fh(8)3174 4174 +y Fn(blo)s(c)m(k,)29 b(similarly)236 4287 y(the)35 b(blo)s(c)m(k)f +Fj(v)685 4301 y Fh(5)739 4287 y Fj(:)15 b(:)g(:)i(v)905 +4301 y Fh(8)978 4287 y Fn(w)m(ould)33 b(b)s(e)h(a)h(c)m(hild)e(of)h +(the)h Fj(v)1991 4301 y Fh(1)2045 4287 y Fj(:)15 b(:)g(:)i(v)2211 +4301 y Fh(8)2284 4287 y Fn(blo)s(c)m(k.)53 b(If)34 b(w)m(e)g(add)g(the) +h(v)-5 b(ariables)33 b Fj(v)3571 4301 y Fh(1)3610 4287 +y Fn(,)j Fj(v)3715 4301 y Fh(2)3754 4287 y Fn(,)236 4400 +y Fj(v)280 4414 y Fh(3)349 4400 y Fn(and)29 b Fj(v)569 +4414 y Fh(4)639 4400 y Fn(as)h(single)e(v)-5 b(ariable)28 +b(blo)s(c)m(ks)h(w)m(e)i(at)f(last)g(get)h(tree)f(sho)m(w)m(ed)g(in)e +(\014gure)h(2.4.)42 b(If)29 b(all)g(v)-5 b(ariables)236 +4513 y(should)33 b(b)s(e)h(added)g(as)h(single)f(v)-5 +b(ariable)33 b(blo)s(c)m(ks)h(then)h Fm(bdd)p 2290 4513 +V 33 w(varblockall)d Fn(can)j(b)s(e)f(used)g(instead)g(of)236 +4626 y(doing)c(it)g(man)m(ually)-8 b(.)377 4739 y(The)33 +b(reordering)g(algorithm)f(is)h(then)g(to)h(\014rst)f(reorder)g(the)h +(top)g(most)f(blo)s(c)m(ks)g(and)g(there)h(after)236 +4852 y(descend)k(in)m(to)f(eac)m(h)i(blo)s(c)m(k)f(and)f(reorder)g +(these)i(recursiv)m(ely)d(-)i(unless)e(the)i(blo)s(c)m(k)g(is)e +(de\014ned)h(as)h(a)236 4965 y(\014xed)30 b(blo)s(c)m(k.)377 +5078 y(If)47 b(the)h(user)f(w)m(an)m(t)h(to)h(con)m(trol)f(the)f(sw)m +(apping)f(of)i(v)-5 b(ariables)46 b(himself,)k(then)d(the)h(functions) +236 5191 y Fm(bdd)p 386 5191 V 34 w(swapvar)42 b(bdd)p +942 5191 V 34 w(setvarorder)f Fn(ma)m(y)k(b)s(e)f(used.)83 +b(But)44 b(this)g(is)f(not)i(p)s(ossible)d(in)h(conjunction)236 +5304 y(with)34 b(the)h(use)g(of)g(v)-5 b(ariable)34 b(blo)s(c)m(ks)h +(and)f(the)i Fm(bdd)p 1999 5304 V 33 w(swapvar)d Fn(is)i(unfortunately) +e(quite)i(slo)m(w)g(since)f(a)236 5416 y(full)29 b(scan)i(of)g(all)f +(the)h(no)s(des)f(m)m(ust)h(b)s(e)f(done)h(b)s(oth)f(b)s(efore)g(and)h +(after)g(the)g(sw)m(ap.)42 b(Other)31 b(reordering)236 +5529 y(functions)i(are)j Fm(bdd)p 939 5529 V 33 w(autoreorder)p +1500 5529 V 31 w(times)p Fn(,)f Fm(bdd)p 1975 5529 V +34 w(reorder)p 2345 5529 V 32 w(verbose)p Fn(,)f Fm(bdd)p +2916 5529 V 34 w(sizeprobe)p 3382 5529 V 32 w(hook)f +Fn(and)236 5642 y Fm(bdd)p 386 5642 V 34 w(reorder)p +756 5642 V 32 w(hook)p Fn(.)1985 5989 y(5)p eop +%%Page: 6 14 +6 13 bop 236 127 a Fm(#include)46 b()236 352 y(main\(void\))236 +465 y({)379 578 y(bdd)h(x,y,z;)379 804 y(bdd_init\(1000,100\);)379 +917 y(bdd_setvarnum\(5\);)379 1143 y(x)h(=)f(bdd_ithvar\(0\);)379 +1256 y(y)h(=)f(bdd_ithvar\(1\);)379 1369 y(z)h(=)f(x)h(&)f(y;)379 +1594 y(cout)g(<<)g(bddtable)f(<<)h(z)g(<<)h(endl;)379 +1820 y(bdd_done\(\);)236 1933 y(})236 2229 y Fn(Figure)36 +b(2.2:)52 b(C++)35 b(in)m(terface)h(to)h(BuDDy)-8 b(.)58 +b(In)35 b(this)g(mo)s(de)g('b)s(dd')f(is)h(a)h(C++)f(class)h(that)g +(wraps)f(a)236 2342 y(handler)e(around)g(the)i(standard)f(C)g(in)m +(terface,)i(and)e(the)h('BDD')h(t)m(yp)s(e)f(referes)f(to)h(the)g +(standard)f(C)236 2454 y(BDD)e(t)m(yp)s(e.)43 b(The)30 +b(C++)g(in)m(terface)h(handles)f(all)f(garbage)k(collection,)d(so)i(no) +e(calls)g(to)i('b)s(dd)p 3471 2454 28 4 v 31 w(addref)7 +b(')236 2567 y(and)30 b('b)s(dd)p 599 2567 V 31 w(delref)7 +b(')30 b(are)g(needed.)236 2825 y Fk(2.7)136 b(Error)45 +b(Handling)236 3028 y Fn(If)33 b(an)g(error)g(o)s(ccurs)g(then)g(a)g(c) +m(hec)m(k)i(is)d(done)h(to)h(see)g(if)e(there)i(is)e(an)m(y)i(error)f +(handler)e(de\014ned)h(and)g(if)236 3141 y(so)37 b(it)f(is)f(called)g +(with)g(the)i(error)f(co)s(de)g(of)h(in)m(terest.)58 +b(The)36 b(default)g(error)f(handler)g(prin)m(ts)g(an)h(error)236 +3253 y(message)g(on)e Fm(stderr)e Fn(and)i(then)f(ab)s(orts)h(the)h +(program.)52 b(A)34 b(handler)e(can)j(also)f(b)s(e)f(de\014ned)g(b)m(y) +h(the)236 3366 y(user)c(with)f(a)i(call)e(to)j Fm(bdd)p +1140 3366 29 4 v 33 w(error)p 1413 3366 V 33 w(hook)p +Fn(.)236 3653 y Fk(2.8)136 b(The)44 b(C++)g(in)l(terface)236 +3856 y Fn(Mostly)35 b(this)e(consists)i(of)f(a)h(set)g(of)g(o)m(v)m +(erloaded)h(function)d(wrapp)s(ers)g(that)i(tak)m(es)h(a)f +Fm(bdd)f Fn(class)g(and)236 3969 y(calls)24 b(the)i(appropriate)e(C)g +(functions)g(with)g(the)h(ro)s(ot)g(n)m(um)m(b)s(er)f(stored)h(in)f +(the)h Fm(bdd)f Fn(class.)39 b(The)25 b(names)236 4082 +y(of)36 b(these)f(wrapp)s(ers)f(are)h(exactly)h(the)g(same)f(as)h(for)f +(the)g(C)g(functions.)54 b(In)34 b(addition)g(to)i(this)e(a)h(lot)236 +4194 y(of)k(the)g(C++)e(op)s(erators)i(lik)m(e)f Fm(|)p +Fn(&)g(-)g(=)h(==)f(are)g(o)m(v)m(erloaded)i(in)d(order)h(to)i(p)s +(erform)d(most)i(of)f(the)236 4307 y Fm(bdd)p 386 4307 +V 34 w(apply\(\))28 b Fn(op)s(erations.)40 b(These)30 +b(are)h(listed)e(together)j(with)d Fm(bdd)p 2630 4307 +V 33 w(apply)p Fn(.)40 b(The)30 b(rest)g(are)427 4508 +y Fo(Op)s(erator)111 b(Description)101 b(Return)35 b(v)-6 +b(alue)427 4621 y Fm(=)481 b Fn(assignmen)m(t)427 4733 +y Fm(==)433 b Fn(test)480 b(returns)29 b(1)i(if)e(t)m(w)m(o)j(BDDs)f +(are)g(equal,)f(otherwise)g(0)427 4846 y Fm(!=)433 b +Fn(test)480 b(returns)29 b(0)i(if)e(t)m(w)m(o)j(BDDs)f(are)g(equal,)f +(otherwise)g(1)427 4959 y Fm(bdd.id\(\))145 b Fn(iden)m(tit)m(y)320 +b(returns)29 b(the)i(ro)s(ot)f(n)m(um)m(b)s(er)f(of)i(the)g(BDD)236 +5215 y(The)i(default)f(constructor)h(for)g(the)g Fm(bdd)g +Fn(class)f(initializes)f(the)i(b)s(dds)e(to)i(the)h(constan)m(t)g +(false)f(v)-5 b(alue.)236 5328 y(Reference)32 b(coun)m(ting)e(is)g +(totally)g(automatic)i(when)d(the)i Fm(bdd)f Fn(class)g(is)g(used,)g +(here)g(the)h(constructors)236 5441 y(and)f(destructors)f(tak)m(es)j +(care)f(of)f Ff(al)5 b(l)30 b Fn(reference)h(coun)m(ting!)40 +b(The)30 b(C++)f(in)m(terface)h(is)f(also)h(de\014ned)f(in)236 +5554 y Fm(bdd.h)g Fn(so)i(nothing)e(extra)i(is)f(needed)g(to)h(use)f +(it.)1985 5989 y(6)p eop +%%Page: 7 15 +7 14 bop 236 127 a Fm(#include)46 b()236 352 y(main\(\))236 +465 y({)379 578 y(bdd)h(v1,)g(v3;)379 691 y(bdd)g(seta,)g(setb;)379 +804 y(static)f(int)h(v[2])g(=)g({1,3};)379 1030 y(bdd_init\(100,100\);) +379 1143 y(bdd_setvarnum\(5\);)379 1369 y(v1)h(=)f(bdd_ithvar\(1\);)379 +1481 y(v3)h(=)f(bdd_ithvar\(3\);)523 1707 y(/*)g(One)g(way)g(*/)379 +1820 y(seta)g(=)g(bdd_addref\()e(bdd_apply\(v1,v3,bddop_and)o(\))d(\);) +379 1933 y(bdd_printtable\(seta\);)523 2159 y(/*)47 b(Another)f(way)g +(*/)379 2272 y(setb)h(=)g(bdd_addref\()e(bdd_makeset\(v,2\))f(\);)379 +2385 y(bdd_printtable\(setb\);)236 2498 y(})1095 2793 +y Fn(Figure)30 b(2.3:)41 b(Tw)m(o)31 b(w)m(a)m(ys)g(to)g(create)h(a)f +(v)-5 b(ariable)29 b(set.)236 3062 y Fk(2.9)136 b(Finite)45 +b(Domain)h(Blo)t(c)l(ks)236 3265 y Fn(Included)20 b(in)h(the)i(BDD)g +(pac)m(k)-5 b(age)24 b(is)d(a)i(set)g(of)f(functions)f(for)h +(manipulating)d(v)-5 b(alues)22 b(of)g(\014nite)f(domains,)236 +3378 y(lik)m(e)27 b(for)f(example)h(\014nite)f(state)i(mac)m(hines.)39 +b(These)27 b(functions)f(are)h(used)f(to)i(allo)s(cate)g(blo)s(c)m(ks)e +(of)h(BDD)236 3491 y(v)-5 b(ariables)29 b(to)i(represen)m(t)g(in)m +(teger)g(v)-5 b(alues)29 b(instead)h(of)g(only)g(true)g(and)g(false.) +377 3604 y(New)j(\014nite)f(domain)f(blo)s(c)m(ks)i(are)g(allo)s(cated) +f(using)g Fm(fdd)p 2356 3604 29 4 v 33 w(extdomain)e +Fn(and)i(BDDs)i(represen)m(ting)236 3717 y(in)m(teger)k(v)-5 +b(alues)37 b(can)g(b)s(e)g(build)d(using)i Fm(fdd)p 1760 +3717 V 34 w(ithvar)p Fn(.)60 b(The)37 b(BDD)h(represen)m(ting)f(iden)m +(tit)m(y)g(b)s(et)m(w)m(een)236 3830 y(t)m(w)m(o)i(sets)f(of)f +(di\013eren)m(t)g(domains)f(can)h(b)s(e)g(build)d(using)i +Fm(fdd)p 2380 3830 V 34 w(equals)p Fn(.)60 b(BDDs)38 +b(represen)m(ting)f(\014nite)236 3943 y(domain)h(sets)h(can)f(b)s(e)g +(prin)m(ted)f(using)g Fm(fdd)p 1780 3943 V 34 w(printset)f +Fn(and)i(the)h(o)m(v)m(erloaded)g(C++)f(op)s(erator)h +Fm(<<)p Fn(.)236 4056 y(P)m(airs)g(for)h Fm(bdd)p 776 +4056 V 33 w(replace)e Fn(can)i(b)s(e)e(made)i(using)e +Fm(fdd)p 2134 4056 V 34 w(setpair)f Fn(and)i(v)-5 b(ariable)39 +b(sets)h(can)f(b)s(e)g(made)236 4169 y(using)27 b Fm(fdd)p +622 4169 V 34 w(ithset)f Fn(and)i Fm(fdd)p 1289 4169 +V 34 w(makeset)p Fn(.)38 b(The)28 b(\014nite)f(domain)g(blo)s(c)m(k)h +(in)m(terface)h(is)f(de\014ned)f(for)h(b)s(oth)236 4282 +y(C)i(and)g(C++.)40 b(T)-8 b(o)31 b(use)f(this)f(in)m(terface)i(y)m(ou) +g(m)m(ust)f(include)e Fm("fdd.h")p Fn(.)377 4394 y(Enco)s(ding)37 +b(using)g(FDDs)i(are)g(done)f(with)f(the)i(Least)g(Signi\014can)m(t)e +(Bits)h(\014rst)f(in)g(the)i(ordering)236 4507 y(\(top)29 +b(of)g(the)g(BDD\).)h(Assume)e(v)-5 b(ariables)27 b Fj(V)1743 +4521 y Fh(0)1798 4507 y Fj(:)15 b(:)g(:)h(V)1972 4521 +y Fh(3)2040 4507 y Fn(are)29 b(used)f(to)h(enco)s(de)f(the)h(v)-5 +b(alue)28 b(12)i(-)e(this)g(w)m(ould)236 4620 y(yield)h +Fj(V)509 4634 y Fh(0)574 4620 y Fn(=)c(0)p Fj(;)15 b(V)808 +4634 y Fh(1)873 4620 y Fn(=)25 b(0)p Fj(;)15 b(V)1107 +4634 y Fh(2)1173 4620 y Fn(=)25 b(1)p Fj(;)15 b(V)1407 +4634 y Fh(3)1472 4620 y Fn(=)25 b(1.)377 4733 y(An)j(example)f(program) +h(using)e(the)i(FDD)h(in)m(terface)g(can)f(b)s(e)f(found)f(in)h(the)h +(examples)f(directory)-8 b(.)236 5018 y Fk(2.10)136 b(Bo)t(olean)45 +b(V)-11 b(ectors)236 5221 y Fn(Another)28 b(in)m(terface)h(la)m(y)m(er) +f(for)g(BuDDy)g(implemen)m(ts)f(b)s(o)s(olean)g(v)m(ectors)i(for)f(use) +f(with)g(in)m(teger)h(arith-)236 5334 y(metics.)65 b(A)39 +b(b)s(o)s(olean)e(v)m(ector)j(is)e(simply)e(an)i(arra)m(y)h(of)g(BDDs)g +(where)f(eac)m(h)i(BDD)g(represen)m(ts)e(one)236 5447 +y(bit)d(of)g(an)h(expression.)55 b(T)-8 b(o)36 b(use)f(this)f(in)m +(terface)i(y)m(ou)g(m)m(ust)g(include)d Fm("bvec.h")p +Fn(.)54 b(As)35 b(an)h(example,)236 5560 y(supp)s(ose)29 +b(w)m(e)i(w)m(an)m(t)g(to)g(express)f(the)h(follo)m(wing)e(assignmen)m +(t)h(from)g(an)g(expression)463 5740 y Fj(x)c Fn(:=)f +Fj(y)e Fn(+)d(10)1985 5989 y(7)p eop +%%Page: 8 16 +8 15 bop 1465 1068 a @beginspecial 0 @llx 0 @lly 177 +@urx 120 @ury 1770 @rwi @setspecial +%%BeginDocument: varblock.pstex +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: varblock.pstex +%%Creator: fig2dev Version 3.2 Patchlevel 1 +%%CreationDate: Tue Feb 29 15:36:52 2000 +%%For: jln@joshua.itu.dk (Jorn Lind-Nielsen) +%%Orientation: Portrait +%%BoundingBox: 0 0 177 120 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-108.0 153.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit +n -1000 3550 m -1000 -1000 l 5740 -1000 l 5740 3550 l cp clip + 0.06000 0.06000 sc +% Polyline +7.500 slw +gs clippath +3255 1110 m 3225 1200 l 3195 1110 l 3195 1215 l 3255 1215 l cp +clip +n 3225 825 m 3225 1200 l gs col0 s gr gr + +% arrowhead +n 3255 1110 m 3225 1200 l 3195 1110 l 3225 1110 l 3255 1110 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2643 1783 m 2550 1800 l 2614 1730 l 2522 1781 l 2551 1834 l cp +clip +n 3225 1425 m 2550 1800 l gs col0 s gr gr + +% arrowhead +n 2643 1783 m 2550 1800 l 2614 1730 l 2629 1756 l 2643 1783 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3836 1730 m 3900 1800 l 3807 1783 l 3899 1834 l 3928 1781 l cp +clip +n 3225 1425 m 3900 1800 l gs col0 s gr gr + +% arrowhead +n 3836 1730 m 3900 1800 l 3807 1783 l 3821 1756 l 3836 1730 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2397 2338 m 2325 2400 l 2346 2307 l 2292 2397 l 2343 2428 l cp +clip +n 2550 2025 m 2325 2400 l gs col0 s gr gr + +% arrowhead +n 2397 2338 m 2325 2400 l 2346 2307 l 2371 2323 l 2397 2338 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2746 2314 m 2764 2407 l 2694 2343 l 2745 2435 l 2798 2405 l cp +clip +n 2550 2025 m 2764 2407 l gs col0 s gr gr + +% arrowhead +n 2746 2314 m 2764 2407 l 2694 2343 l 2720 2328 l 2746 2314 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +3090 2327 m 3150 2400 l 3058 2378 l 3147 2433 l 3179 2383 l cp +clip +n 2550 2025 m 3150 2400 l gs col0 s gr gr + +% arrowhead +n 3090 2327 m 3150 2400 l 3058 2378 l 3074 2352 l 3090 2327 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +2042 2378 m 1950 2400 l 2010 2327 l 1921 2383 l 1953 2433 l cp +clip +n 2550 2025 m 1950 2400 l gs col0 s gr gr + +% arrowhead +n 2042 2378 m 1950 2400 l 2010 2327 l 2026 2352 l 2042 2378 l cp gs 0.00 setgray ef gr col0 s +$F2psEnd +rs + +%%EndDocument + @endspecial 1690 768 a Fd(v)1737 783 y Fh(1)1793 768 +y Fd(:)17 b(:)g(:)f(v)1971 783 y Fh(4)1990 468 y Fd(v)2037 +483 y Fh(1)2093 468 y Fd(:)h(:)g(:)f(v)2271 483 y Fh(8)1990 +168 y Fd(v)2037 183 y Fh(0)2093 168 y Fd(:)h(:)g(:)f(v)2271 +183 y Fh(9)1690 1068 y Fd(v)1737 1083 y Fh(2)1915 1068 +y Fd(v)1962 1083 y Fh(3)2140 1068 y Fd(v)2187 1083 y +Fh(4)2327 768 y Fd(v)2374 783 y Fh(5)2430 768 y Fd(:)h(:)g(:)g(v)2609 +783 y Fh(8)1465 1068 y Fd(v)1512 1083 y Fh(1)236 1264 +y Fn(Figure)33 b(2.4:)49 b(The)33 b(v)-5 b(ariable)33 +b(tree)h(for)g(the)g(v)-5 b(ariable)32 b(blo)s(c)m(ks)h +Fj(v)2405 1278 y Fh(0)2460 1264 y Fj(:)15 b(:)g(:)h(v)2625 +1278 y Fh(9)2665 1264 y Fn(,)35 b Fj(v)2769 1278 y Fh(1)2823 +1264 y Fj(:)15 b(:)g(:)h(v)2988 1278 y Fh(8)3028 1264 +y Fn(,)35 b Fj(v)3132 1278 y Fh(1)3186 1264 y Fj(:)15 +b(:)g(:)i(v)3352 1278 y Fh(4)3391 1264 y Fn(,)35 b Fj(v)3495 +1278 y Fh(5)3550 1264 y Fj(:)15 b(:)g(:)h(v)3715 1278 +y Fh(8)3754 1264 y Fn(,)236 1377 y Fj(v)280 1391 y Fh(1)320 +1377 y Fn(,)30 b Fj(v)419 1391 y Fh(2)459 1377 y Fn(,)g +Fj(v)558 1391 y Fh(3)628 1377 y Fn(and)g Fj(v)849 1391 +y Fh(4)888 1377 y Fn(.)236 1752 y(what)j(w)m(e)g(do)g(is)e(to)j(enco)s +(de)f(the)g(v)-5 b(ariable)31 b Fj(y)36 b Fn(and)c(the)h(v)-5 +b(alue)32 b(10)i(as)f(b)s(o)s(olean)e(v)m(ectors)k Fj(y)g +Fn(and)d Fj(v)k Fn(of)d(a)236 1865 y(\014xed)d(length.)40 +b(Assume)30 b(w)m(e)h(use)f(four)f(bits)h(with)f(LSB)h(to)h(the)g(righ) +m(t,)f(then)g(w)m(e)h(get)463 2053 y Fj(y)e Fn(=)c Fc(h)p +Fj(y)713 2067 y Fh(4)752 2053 y Fj(;)15 b(:)g(:)g(:)i(;)e(y)999 +2067 y Fh(1)1038 2053 y Fc(i)463 2265 y Fj(v)29 b Fn(=)c +Fc(h)p Fn(1)p Fj(;)15 b Fn(0)p Fj(;)g Fn(1)p Fj(;)g Fn(0)p +Fc(i)236 2478 y Fn(where)32 b(eac)m(h)h Fj(y)752 2492 +y Fi(i)812 2478 y Fn(is)e(the)i(BDD)g(v)-5 b(ariable)31 +b(used)g(to)i(enco)s(de)g(the)f(in)m(teger)g(v)-5 b(ariable)31 +b Fj(y)s Fn(.)46 b(No)m(w)33 b(the)g(result)236 2591 +y(of)e(the)f(addition)f(can)i(b)s(e)e(expressed)h(as)h(the)f(v)m(ector) +i Fj(z)e Fn(=)25 b Fc(h)p Fj(z)2339 2605 y Fh(4)2379 +2591 y Fj(;)15 b(:)g(:)g(:)h(;)f(z)2622 2605 y Fh(1)2663 +2591 y Fc(i)30 b Fn(where)g(eac)m(h)i Fj(z)3238 2605 +y Fi(i)3296 2591 y Fn(is:)463 2778 y Fj(z)505 2792 y +Fi(i)559 2778 y Fn(=)25 b Fj(y)700 2792 y Fi(i)758 2778 +y Fn(xor)31 b Fj(v)962 2792 y Fi(i)1020 2778 y Fn(xor)f +Fj(c)1218 2792 y Fi(i)p Fg(\000)p Fh(1)236 2966 y Fn(and)g(the)h(carry) +f(in)f Fj(c)950 2980 y Fi(i)1009 2966 y Fn(is)463 3153 +y Fj(c)502 3167 y Fi(i)556 3153 y Fn(=)c(\()p Fj(y)732 +3167 y Fi(i)791 3153 y Fn(and)k Fj(v)1011 3167 y Fi(i)1040 +3153 y Fn(\))h(or)h(\()p Fj(c)1291 3167 y Fi(i)p Fg(\000)p +Fh(1)1440 3153 y Fn(and)f(\()p Fj(y)1697 3167 y Fi(i)1755 +3153 y Fn(or)h Fj(v)1911 3167 y Fi(i)1939 3153 y Fn(\)\))p +Fj(:)236 3341 y Fn(with)37 b Fj(c)490 3355 y Fh(0)569 +3341 y Fn(=)h(0.)65 b(What)39 b(is)f(left)g(no)m(w)g(is)g(to)h(assign)f +(the)g(result)g(to)h Fj(x)p Fn(.)65 b(This)37 b(is)g(a)i(conjunction)e +(of)i(a)236 3454 y(biimplication)27 b(of)j(eac)m(h)i(elemen)m(t)f(in)e +(the)h(v)m(ectors,)i(so)f(the)g(result)e(is)463 3712 +y Fj(R)d Fn(=)694 3606 y Fh(4)665 3631 y Fb(^)654 3813 +y Fi(i)p Fh(=1)784 3712 y Fj(x)836 3726 y Fi(i)889 3712 +y Fc(,)f Fj(z)1047 3726 y Fi(i)1076 3712 y Fj(:)236 3967 +y Fn(The)37 b(ab)s(o)m(v)m(e)h(example)f(could)f(b)s(e)g(carried)h(out) +g(with)f(the)h(follo)m(wing)f(C++)g(program)h(that)g(utilizes)236 +4080 y(the)31 b(FDD)g(in)m(terface)g(for)f(prin)m(ting)f(the)h(result.) +236 4268 y Fm(#include)46 b("bvec.h")236 4494 y(main\(\))236 +4607 y({)379 4720 y(int)h(domain[2])f(=)h({16,16};)379 +4945 y(bdd_init\(100,100\);)379 5058 y(fdd_extdomain\(domain,)42 +b(2\);)379 5284 y(bvec)47 b(y)g(=)h(bvec_varfdd\(0\);)379 +5397 y(bvec)f(v)g(=)h(bvec_con\(4,)d(10\);)379 5510 y(bvec)i(z)g(=)h +(bvec_add\(y,)d(v\);)379 5736 y(bvec)i(x)g(=)h(bvec_varfdd\(1\);)1985 +5989 y Fn(8)p eop +%%Page: 9 17 +9 16 bop 379 162 a Fm(bdd)95 b(result)46 b(=)i(bddtrue;)379 +388 y(for)f(\(int)g(n=0)g(;)g(n;)g Fc(\024)p Fj(;)g Fc(\025)p Fj(;)g Fn(=)p +Fj(;)g Fc(6)p Fn(=)27 b(can)g(also)g(b)s(e)f(enco)s(ded.)40 +b(Assume)26 b(w)m(e)h(w)m(an)m(t)h(to)f(enco)s(de)236 +1140 y Fj(x)e Fc(\024)g Fj(y)34 b Fn(using)28 b(the)j(same)g(v)-5 +b(ariables)29 b(as)h(in)f(the)i(ab)s(o)m(v)m(e)h(example.)40 +b(This)29 b(w)m(ould)g(b)s(e)g(done)i(as:)236 1328 y +Fm(#include)46 b("bvec.h")236 1554 y(main\(\))236 1667 +y({)379 1780 y(int)h(domain[2])f(=)h({16,16};)379 2005 +y(bdd_init\(100,100\);)379 2118 y(fdd_extdomain\(domain,)42 +b(2\);)379 2344 y(bvec)47 b(y)g(=)h(bvec_varfdd\(1\);)379 +2457 y(bvec)f(x)g(=)h(bvec_varfdd\(0\);)379 2683 y(bdd)95 +b(result)46 b(=)i(bvec_lte\(x,y\);)379 2909 y(cout)f(<<)g(fddset)f(<<)h +(result)g(<<)g(endl)f(<<)i(endl;)236 3022 y(})236 3209 +y Fn(Please)42 b(note)g(that)g(all)e(v)m(ectors)i(that)g(are)g +(returned)e(from)h(an)m(y)h(of)f(the)h Fm(bvec)p 3044 +3209 29 4 v 33 w(xxx)e Fn(functions)g(are)236 3322 y(referenced)31 +b(coun)m(ted)f(b)m(y)h(the)f(system.)236 3566 y Fe(2.10.1)113 +b(C++)37 b(In)m(terface)236 3737 y Fn(The)30 b(C++)f(in)m(terface)i +(de\014nes)f(the)g(class)236 3925 y Fm(class)47 b(bvec)236 +4038 y({)284 4151 y(public:)379 4376 y(bvec\(void\);)379 +4489 y(bvec\(int)f(bitnum\);)379 4602 y(bvec\(int)g(bitnum,)g(int)h +(val\);)379 4715 y(bvec\(const)e(bvec)i(&v\);)379 4828 +y(~bvec\(void\);)379 5054 y(void)g(set\(int)f(i,)h(const)f(bdd)h(&b\);) +379 5167 y(bdd)g(operator[]\(int)d(i\))95 b(const;)379 +5280 y(int)47 b(bitnum\(void\))e(const;)379 5393 y(int)i(empty\(void\)) +e(const;)379 5506 y(bvec)i(operator=\(const)d(bvec)i(&src\);)236 +5618 y(})1985 5989 y Fn(9)p eop +%%Page: 10 18 +10 17 bop 236 162 a Fn(The)29 b(default)f(constructor)h(mak)m(es)g(an)g +(empt)m(y)g(v)m(ector)i(with)c(no)i(elemen)m(ts,)h(the)f(in)m(teger)g +(constructor)236 275 y(creates)34 b(a)e(v)m(ector)i(with)d +Fm(bitnum)f Fn(elemen)m(ts)j(\(all)e(set)i(to)g(false\))f(and)g(the)g +(third)e(constructor)j(creates)236 388 y(a)d(v)m(ector)i(with)d +Fm(bitnum)f Fn(elemen)m(ts)i(and)f(assigns)g(the)h(in)m(teger)h(v)-5 +b(alue)29 b Fm(val)g Fn(to)h(the)h(v)m(ector.)42 b(Reference)236 +501 y(coun)m(ting)33 b(is)g(done)g(automatically)-8 b(.)49 +b(The)33 b(i'th)f(elemen)m(t)i(in)e(the)i(v)m(ector)g(can)g(b)s(e)f(c)m +(hanged)g(with)f Fm(set)236 614 y Fn(and)24 b(read)g(with)f +Fm(operator[])p Fn(.)36 b(The)24 b(n)m(um)m(b)s(er)f(of)h(bits)f(can)i +(b)s(e)e(found)g(with)g Fm(bitnum)g Fn(and)h(the)g(metho)s(d)236 +727 y Fm(empty)29 b Fn(returns)g(true)h(if)g(the)g(v)m(ector)i(is)e(a)h +(NULL)f(v)m(ector.)1962 5989 y(10)p eop +%%Page: 11 19 +11 18 bop 236 785 a Fl(Chapter)65 b(3)236 1200 y Fp(E\016ciency)77 +b(Concerns)236 1645 y Fn(Getting)29 b(the)g(most)g(out)f(of)h(an)m(y)g +(BDD)g(pac)m(k)-5 b(age)31 b(is)c(not)i(alw)m(a)m(ys)g(easy)-8 +b(.)41 b(It)29 b(requires)e(some)h(kno)m(wledge)236 1758 +y(ab)s(out)c(the)g(optimal)g(order)f(of)i(the)f(BDD)h(v)-5 +b(ariables)23 b(and)h(it)f(also)h(helps)f(if)g(y)m(ou)i(ha)m(v)m(e)g +(some)f(kno)m(wledge)236 1871 y(of)31 b(the)f(in)m(ternals)f(of)i(the)f +(pac)m(k)-5 b(age.)377 1984 y(First)31 b(of)g(all)g(|)g(a)g(go)s(o)s(d) +h(initial)c(v)-5 b(ariable)30 b(order)h(is)f(a)i(m)m(ust.)44 +b(Using)30 b(the)i(automatic)g(reordering)236 2097 y(metho)s(ds)c(ma)m +(y)h(b)s(e)f(an)g(easy)h(solution,)f(but)f(without)h(a)h(go)s(o)s(d)f +(initial)e(order)h(it)h(ma)m(y)h(also)g(b)s(e)f(a)g(w)m(aste)236 +2210 y(of)j(time.)377 2323 y(Second)c(|)f(memory)h(is)e(sp)s(eed.)39 +b(If)26 b(y)m(ou)h(allo)s(cate)g(as)g(m)m(uc)m(h)g(memory)f(as)h(p)s +(ossible)d(from)i(the)h(v)m(ery)236 2435 y(b)s(eginning,)i(then)i +(BuDDy)h(do)s(es)f(not)h(ha)m(v)m(e)g(to)g(w)m(aste)g(time)f(trying)g +(to)h(allo)s(cate)f(more)h(whenev)m(er)f(it)236 2548 +y(is)26 b(needed.)39 b(So)26 b(if)g(y)m(ou)h(really)f(w)m(an)m(t)h(sp)s +(eed)f(then)g Fm(bdd)p 2096 2548 29 4 v 34 w(init)f Fn(should)g(b)s(e)h +(called)f(with)h(as)h(man)m(y)f(no)s(des)236 2661 y(as)j(p)s(ossible.) +38 b(This)26 b(do)s(es)i(unfortunately)f(ha)m(v)m(e)j(the)f(side)e +(e\013ect)j(that)f(v)-5 b(ariable)27 b(reordering)g(b)s(ecomes)236 +2774 y(extremely)37 b(slo)m(w)e(since)h(it)g(has)g(to)h(reorder)e(an)i +(enormous)e(amoun)m(t)i(of)f(no)s(des)g(the)g(\014rst)g(time)g(it)f(is) +236 2887 y(triggered.)377 3000 y(Third)18 b(|)i(the)h(op)s(erator)f +(cac)m(hes)i(should)c(b)s(e)i(as)g(big)g(as)g(p)s(ossible.)35 +b(Use)21 b(the)f(function)f Fm(bdd)p 3427 3000 V 34 w(setcacheratio)236 +3113 y Fn(to)28 b(mak)m(e)f(sure)f(the)h(size)f(of)h(these)g(is)e +(increased)h(whenev)m(er)h(more)f(no)s(des)g(are)h(allo)s(cated.)39 +b Ff(Ple)-5 b(ase)30 b(note)236 3226 y(that)39 b(BuDDy)e(uses)g(a)h +(\014xe)-5 b(d)38 b(numb)-5 b(er)38 b(of)g(elements)g(for)g(these)g(c) +-5 b(aches)39 b(as)f(default)p Fn(.)57 b(Y)-8 b(ou)37 +b(m)m(ust)e(call)236 3339 y Fm(bdd)p 386 3339 V 34 w(setcacheratio)c +Fn(to)36 b(c)m(hange)h(this.)54 b(I)35 b(ha)m(v)m(e)i(found)d(a)h(cac)m +(he)i(ratio)e(of)h(1:64)h(\014tting)d(for)h(BDDs)236 +3452 y(of)d(more)g(than)f(one)h(million)c(no)s(des)j(\(the)h(solitare)f +(example\).)44 b(This)30 b(ma)m(y)i(b)s(e)f(a)g(bit)g(o)m(v)m(erkill,)g +(but)g(it)236 3565 y(w)m(orks.)377 3677 y(F)-8 b(ourth)30 +b(|)g(BuDDy)g(allo)s(cates)g(b)m(y)f(default)g(a)h(maxim)m(um)f(of)g +(50000)j(no)s(des)d(\(1Mb)h(RAM\))h(ev)m(ery)236 3790 +y(time)j(it)g(resizes)g(the)g(no)s(de)g(table.)52 b(If)33 +b(y)m(our)h(problem)f(needs)h(millions)c(of)35 b(no)s(des,)f(then)g +(this)f(is)g(w)m(a)m(y)236 3903 y(to)s(o)k(small)e(a)i(n)m(um)m(b)s +(er.)57 b(Use)37 b Fm(bdd)p 1442 3903 V 33 w(setmaxincrease)c +Fn(to)k(increase)f(this)f(n)m(um)m(b)s(er.)58 b(In)35 +b(the)i(solitare)236 4016 y(example)30 b(something)g(lik)m(e)g(5000000) +j(no)s(des)d(seems)g(more)h(reasonable.)377 4129 y(Fifth)g(|)g(b)m(y)f +(default,)h(BuDDy)h(increases)f(the)g(no)s(de)f(table)h(whenev)m(er)g +(there)h(is)e(less)g(than)h(20\045)236 4242 y(no)s(des)25 +b(free.)40 b(By)26 b(increasing)e(this)h(v)-5 b(alue)26 +b(y)m(ou)g(can)g(mak)m(e)h(BuDDy)g(go)f(faster)h(and)e(use)h(more)g +(memory)236 4355 y(or)31 b(vice)f(v)m(ersa.)41 b(Y)-8 +b(ou)31 b(can)g(c)m(hange)g(the)g(v)-5 b(alue)30 b(with)f +Fm(bdd)p 2203 4355 V 33 w(setminfreenodes)p Fn(.)377 +4468 y(So,)f(to)f(sum)e(it)h(up:)38 b(if)25 b(y)m(ou)h(w)m(an)m(t)i(sp) +s(eed,)e(then)g(allo)s(cate)h(as)g(man)m(y)f(no)s(des)f(as)i(p)s +(ossible,)e(use)h(small)236 4581 y(cac)m(he)34 b(ratios)e(and)g(set)h +Fm(maxincrease)p Fn(.)43 b(If)32 b(y)m(ou)h(need)f(memory)-8 +b(,)33 b(then)f(allo)s(cate)h(a)g(small)d(n)m(um)m(b)s(er)h(of)236 +4694 y(no)s(des)i(from)h(the)g(b)s(eginning,)e(use)i(a)g(\014xed)g +(size)f(cac)m(he,)k(do)d(not)g(c)m(hange)h Fm(maxincrease)c +Fn(and)i(lo)m(w)m(er)236 4807 y Fm(minfreenodes)p Fn(.)1962 +5989 y(11)p eop +%%Page: 12 20 +12 19 bop 1962 5989 a Fn(12)p eop +%%Page: 13 21 +13 20 bop 236 785 a Fl(Chapter)65 b(4)236 1200 y Fp(Some)78 +b(Implemen)-6 b(tation)76 b(details)373 1645 y Fc(\017)45 +b Fn(Negated)33 b(p)s(oin)m(ters)c(are)i(not)f(used.)373 +1833 y Fc(\017)45 b Fn(All)27 b(no)s(des)f(are)i(stored)f(in)f(one)i +(big)f(con)m(tiguous)g(arra)m(y)h(whic)m(h)e(is)h(also)g(used)g(as)g +(the)h(hash)f(table)463 1946 y(for)k(\014nding)d(iden)m(tical)h(no)s +(des.)373 2133 y Fc(\017)45 b Fn(The)g(hash)f(function)g(used)g(to)h +(\014nd)f(iden)m(tical)f(no)s(des)h(from)h(the)g(triple)e(\()p +Fj(l)r(ev)s(el)r(;)15 b(l)r(ow)r(;)g(hig)s(h)p Fn(\))463 +2246 y(spreads)27 b(all)f(no)s(des)h(ev)m(enly)g(in)f(the)i(table.)39 +b(This)26 b(means)h(the)g(a)m(v)m(erage)j(length)d(of)h(a)f(hash)g(c)m +(hain)463 2359 y(is)j(at)h(most)g(1.)373 2547 y Fc(\017)45 +b Fn(Eac)m(h)37 b(no)s(de)e(in)f(the)i(no)s(de)f(table)g(con)m(tains)h +(a)g(reference)g(coun)m(t,)i(the)e Fm(level)e Fn(of)i(the)g(v)-5 +b(ariable)463 2660 y(\(this)37 b(is)f(its)g(p)s(osition)f(in)h(the)h +(curren)m(t)g(v)-5 b(ariable)36 b(order\),)j(the)e Fm(high)f +Fn(and)g Fm(low)g Fn(part,)j(a)f Fm(hash)463 2772 y Fn(index)31 +b(used)g(to)i(\014nd)d(the)j(\014rst)e(no)s(de)g(in)g(a)h(hash)g(c)m +(hain)f(and)h(a)g Fm(next)f Fn(index)f(used)i(to)g(link)e(the)463 +2885 y(hash)j(c)m(hains.)48 b(Eac)m(h)34 b(no)s(de)e(\014ts)h(in)m(to)g +(20)h(b)m(ytes)f(of)g(memory)-8 b(.)49 b(Other)33 b(pac)m(k)-5 +b(ages)35 b(uses)d(only)h(16)463 2998 y(b)m(ytes)28 b(for)e(eac)m(h)i +(no)s(de)e(but)h(in)e(addition)g(to)j(this)d(they)i(m)m(ust)g(k)m(eep)g +(separate)h(tables)f(with)e(hash)463 3111 y(table)36 +b(en)m(tries.)57 b(The)35 b(e\013ect)i(of)f(this)e(is)h(that)i(the)e +(total)i(memory)e(consumption)g(is)f(20)j(b)m(ytes)463 +3224 y(for)31 b(eac)m(h)g(no)s(de)f(on)g(a)m(v)m(erage.)373 +3412 y Fc(\017)45 b Fn(Reference)32 b(coun)m(ting)e(are)h(done)f(on)g +(the)h(externally)e(referenced)h(no)s(des)g(only)-8 b(.)373 +3599 y Fc(\017)45 b Fn(The)30 b(ANSI-C)h Fm(bdd)e Fn(t)m(yp)s(e)i(is)e +(an)i(in)m(teger)g(n)m(um)m(b)s(er)e(referring)g(to)i(an)g(index)e(in)g +(the)h(no)s(de)g(table.)463 3712 y(In)g(C++)g(it)f(is)h(a)h(class.)373 +3900 y Fc(\017)45 b Fn(New)25 b(no)s(des)f(are)i(created)f(b)m(y)g +(doubling)d(\(or)j(just)g(extending\))f(the)h(no)s(de)f(table,)i(not)f +(b)m(y)g(adding)463 4013 y(new)30 b(blo)s(c)m(ks)g(of)h(no)s(des.)373 +4200 y Fc(\017)45 b Fn(Garbage)35 b(collection)f(recursiv)m(ely)e +(marks)i(all)e(no)s(des)h(reac)m(hable)h(from)g(the)g(externally)e +(refer-)463 4313 y(enced)f(no)s(des)f(b)s(efore)g(dead)g(no)s(des)f +(are)i(remo)m(v)m(ed.)373 4501 y Fc(\017)45 b Fn(Reordering)30 +b(in)m(terrupts)f(the)h(curren)m(t)g(BDD)i(op)s(eration)e(and)g +(restarts)g(it)g(again)h(afterw)m(ards.)373 4689 y Fc(\017)45 +b Fn(Reordering)37 b(c)m(hanges)i(the)f(hash)f(function)f(to)i(one)g +(where)f(all)g(no)s(des)g(of)h(a)g(sp)s(eci\014c)e(lev)m(el)h(is)463 +4802 y(placed)d(in)e(one)i(con)m(tin)m(uous)f(blo)s(c)m(k)g(and)g(up)s +(dates)g(the)g(reference)h(coun)m(t)h(\014eld)d(to)i(include)e(all)463 +4914 y(recursiv)m(e)40 b(dep)s(endencies.)67 b(After)40 +b(reordering)e(the)i(pac)m(k)-5 b(age)42 b(returns)c(to)j(the)f(normal) +e(hash)463 5027 y(function.)1962 5989 y(13)p eop +%%Page: 14 22 +14 21 bop 1962 5989 a Fn(14)p eop +%%Page: 15 23 +15 22 bop 236 785 a Fl(Chapter)65 b(5)236 1200 y Fp(Reference)p +327 1544 3192 4 v 325 1657 4 113 v 412 1623 a Fo(Bo)s(olean)35 +b(v)m(ectors)p 3517 1657 V 327 1660 3192 4 v 325 1773 +4 113 v 377 1739 a Fm(bvec)p 1080 1773 V 562 w Fn(a)c(b)s(o)s(olean)f +(v)m(ector)p 3517 1773 V 327 1776 3192 4 v 325 1889 4 +113 v 377 1855 a Fm(bvec)p 575 1855 29 4 v 33 w(add)p +1080 1889 4 113 v 385 w Fn(builds)e(a)i(b)s(o)s(olean)g(v)m(ector)i +(for)e(addition)p 3517 1889 V 327 1892 3192 4 v 325 2005 +4 113 v 377 1971 a Fm(bvec)p 575 1971 29 4 v 33 w(addref)p +1080 2005 4 113 v 241 w Fn(increase)h(reference)f(coun)m(t)h(of)g(a)g +(b)s(o)s(olean)e(v)m(ector)p 3517 2005 V 327 2009 3192 +4 v 325 2122 4 113 v 377 2088 a Fm(bvec)p 575 2088 29 +4 v 33 w(coerce)p 1080 2122 4 113 v 241 w Fn(adjust)h(the)h(size)f(of)g +(a)h(b)s(o)s(olean)f(v)m(ector)p 3517 2122 V 327 2125 +3192 4 v 325 2238 4 113 v 377 2204 a Fm(bvec)p 575 2204 +29 4 v 33 w(con)p 1080 2238 4 113 v 385 w Fn(build)e(a)i(b)s(o)s(olean) +g(v)m(ector)i(represen)m(ting)d(an)i(in)m(teger)f(v)-5 +b(alue)p 3517 2238 V 327 2241 3192 4 v 325 2354 4 113 +v 377 2320 a Fm(bvec)p 575 2320 29 4 v 33 w(copy)p 1080 +2354 4 113 v 337 w Fn(create)32 b(a)f(cop)m(y)g(of)g(a)f(b)m(v)m(ec)p +3517 2354 V 327 2357 3192 4 v 325 2470 4 113 v 377 2436 +a Fm(bvec)p 575 2436 29 4 v 33 w(delref)p 1080 2470 4 +113 v 241 w Fn(decrease)i(the)e(reference)h(coun)m(t)g(of)g(a)f(b)s(o)s +(olean)g(v)m(ector)p 3517 2470 V 327 2474 3192 4 v 325 +2587 4 113 v 377 2553 a Fm(bvec)p 575 2553 29 4 v 33 +w(div)p 1080 2587 4 113 v 385 w Fn(builds)e(a)i(b)s(o)s(olean)g(v)m +(ector)i(for)e(division)p 3517 2587 V 327 2590 3192 4 +v 325 2703 4 113 v 377 2669 a Fm(bvec)p 575 2669 29 4 +v 33 w(divfixed)p 1080 2703 4 113 v 145 w Fn(builds)e(a)i(b)s(o)s +(olean)g(v)m(ector)i(for)e(division)d(b)m(y)j(a)h(constan)m(t)p +3517 2703 V 327 2706 3192 4 v 325 2819 4 113 v 377 2785 +a Fm(bvec)p 575 2785 29 4 v 33 w(equ)p 1080 2819 4 113 +v 385 w Fn(calculates)g(the)g(truth)e(v)-5 b(alue)30 +b(of)h Fj(x)25 b Fn(=)g Fj(y)p 3517 2819 V 327 2822 3192 +4 v 325 2935 4 113 v 377 2901 a Fm(bvec)p 575 2901 29 +4 v 33 w(false)p 1080 2935 4 113 v 289 w Fn(build)j(a)i(v)m(ector)i(of) +f(constan)m(t)h(false)e(BDDs)p 3517 2935 V 327 2939 3192 +4 v 325 3051 4 113 v 377 3018 a Fm(bvec)p 575 3018 29 +4 v 33 w(free)p 1080 3051 4 113 v 337 w Fn(frees)h(all)e(memory)h(used) +g(b)m(y)g(a)h(b)s(o)s(olean)e(v)m(ector)p 3517 3051 V +327 3055 3192 4 v 325 3168 4 113 v 377 3134 a Fm(bvec)p +575 3134 29 4 v 33 w(gte)p 1080 3168 4 113 v 385 w Fn(calculates)i(the) +g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b Fc(\025)g Fj(y)p +3517 3168 V 327 3171 3192 4 v 325 3284 4 113 v 377 3250 +a Fm(bvec)p 575 3250 29 4 v 33 w(gth)p 1080 3284 4 113 +v 385 w Fn(calculates)31 b(the)g(truth)e(v)-5 b(alue)30 +b(of)h Fj(x)25 b(>)g(y)p 3517 3284 V 327 3287 3192 4 +v 325 3400 4 113 v 377 3366 a Fm(bvec)p 575 3366 29 4 +v 33 w(isconst)p 1080 3400 4 113 v 193 w Fn(test)32 b(a)e(v)m(ector)i +(for)f(constan)m(t)g(true/false)g(BDDs)p 3517 3400 V +327 3403 3192 4 v 325 3516 4 113 v 377 3482 a Fm(bvec)p +575 3482 29 4 v 33 w(ite)p 1080 3516 4 113 v 385 w Fn(calculates)g(the) +g(if-then-else)e(op)s(erator)i(for)f(a)h(b)s(o)s(olean)e(v)m(ector)p +3517 3516 V 327 3520 3192 4 v 325 3633 4 113 v 377 3599 +a Fm(bvec)p 575 3599 29 4 v 33 w(lte)p 1080 3633 4 113 +v 385 w Fn(calculates)i(the)g(truth)e(v)-5 b(alue)30 +b(of)h Fj(x)25 b Fc(\024)g Fj(y)p 3517 3633 V 327 3636 +3192 4 v 325 3749 4 113 v 377 3715 a Fm(bvec)p 575 3715 +29 4 v 33 w(lth)p 1080 3749 4 113 v 385 w Fn(calculates)31 +b(the)g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b(<)g(y)p +3517 3749 V 327 3752 3192 4 v 325 3865 4 113 v 377 3831 +a Fm(bvec)p 575 3831 29 4 v 33 w(map1)p 1080 3865 4 113 +v 337 w Fn(map)30 b(a)h(function)e(on)m(to)j(a)f(b)s(o)s(olean)e(v)m +(ector)p 3517 3865 V 327 3868 3192 4 v 325 3981 4 113 +v 377 3947 a Fm(bvec)p 575 3947 29 4 v 33 w(map2)p 1080 +3981 4 113 v 337 w Fn(map)h(a)h(function)e(on)m(to)j(a)f(b)s(o)s(olean) +e(v)m(ector)p 3517 3981 V 327 3985 3192 4 v 325 4098 +4 113 v 377 4064 a Fm(bvec)p 575 4064 29 4 v 33 w(map3)p +1080 4098 4 113 v 337 w Fn(map)h(a)h(function)e(on)m(to)j(a)f(b)s(o)s +(olean)e(v)m(ector)p 3517 4098 V 327 4101 3192 4 v 325 +4214 4 113 v 377 4180 a Fm(bvec)p 575 4180 29 4 v 33 +w(mul)p 1080 4214 4 113 v 385 w Fn(builds)f(a)i(b)s(o)s(olean)g(v)m +(ector)i(for)e(m)m(ultiplication)p 3517 4214 V 327 4217 +3192 4 v 325 4330 4 113 v 377 4296 a Fm(bvec)p 575 4296 +29 4 v 33 w(mulfixed)p 1080 4330 4 113 v 145 w Fn(builds)e(a)i(b)s(o)s +(olean)g(v)m(ector)i(for)e(m)m(ultiplication)d(with)i(a)i(constan)m(t)p +3517 4330 V 327 4333 3192 4 v 325 4446 4 113 v 377 4412 +a Fm(bvec)p 575 4412 29 4 v 33 w(neq)p 1080 4446 4 113 +v 385 w Fn(calculates)g(the)g(truth)e(v)-5 b(alue)30 +b(of)h Fj(x)25 b Fc(6)p Fn(=)g Fj(y)p 3517 4446 V 327 +4450 3192 4 v 325 4562 4 113 v 377 4529 a Fm(bvec)p 575 +4529 29 4 v 33 w(shl)p 1080 4562 4 113 v 385 w Fn(shift)k(left)i(op)s +(eration)e(\(sym)m(b)s(olic\))p 3517 4562 V 327 4566 +3192 4 v 325 4679 4 113 v 377 4645 a Fm(bvec)p 575 4645 +29 4 v 33 w(shlfixed)p 1080 4679 4 113 v 145 w Fn(shift)g(left)i(op)s +(eration)e(\(\014xed)h(n)m(um)m(b)s(er)f(of)i(bits\))p +3517 4679 V 327 4682 3192 4 v 325 4795 4 113 v 377 4761 +a Fm(bvec)p 575 4761 29 4 v 33 w(shr)p 1080 4795 4 113 +v 385 w Fn(shift)e(righ)m(t)h(op)s(eration)g(\(sym)m(b)s(olic\))p +3517 4795 V 327 4798 3192 4 v 325 4911 4 113 v 377 4877 +a Fm(bvec)p 575 4877 29 4 v 33 w(shrfixed)p 1080 4911 +4 113 v 145 w Fn(shift)f(righ)m(t)h(op)s(eration)p 3517 +4911 V 327 4914 3192 4 v 325 5027 4 113 v 377 4993 a +Fm(bvec)p 575 4993 29 4 v 33 w(sub)p 1080 5027 4 113 +v 385 w Fn(builds)e(a)i(b)s(o)s(olean)g(v)m(ector)i(for)e(subtraction)p +3517 5027 V 327 5031 3192 4 v 325 5144 4 113 v 377 5110 +a Fm(bvec)p 575 5110 29 4 v 33 w(true)p 1080 5144 4 113 +v 337 w Fn(build)e(a)i(v)m(ector)i(of)f(constan)m(t)h(true)e(BDDs)p +3517 5144 V 327 5147 3192 4 v 325 5260 4 113 v 377 5226 +a Fm(bvec)p 575 5226 29 4 v 33 w(val)p 1080 5260 4 113 +v 385 w Fn(calculate)h(the)g(in)m(teger)f(v)-5 b(alue)30 +b(represen)m(ted)h(b)m(y)f(a)h(b)s(o)s(olean)e(v)m(ector)p +3517 5260 V 327 5263 3192 4 v 325 5376 4 113 v 377 5342 +a Fm(bvec)p 575 5342 29 4 v 33 w(var)p 1080 5376 4 113 +v 385 w Fn(build)f(a)i(b)s(o)s(olean)g(v)m(ector)i(with)d(BDD)i(v)-5 +b(ariables)p 3517 5376 V 327 5379 3192 4 v 1962 5989 +a(15)p eop +%%Page: 16 24 +16 23 bop 236 74 3482 4 v 234 187 4 113 v 286 153 a Fm(bvec)p +484 153 29 4 v 33 w(varfdd)p 1228 187 4 113 v 480 w Fn(build)27 +b(a)k(b)s(o)s(olean)f(v)m(ector)i(from)d(a)i(FDD)h(v)-5 +b(ariable)29 b(blo)s(c)m(k)p 3716 187 V 236 191 3482 +4 v 234 303 4 113 v 286 270 a Fm(bvec)p 484 270 29 4 +v 33 w(varvec)p 1228 303 4 113 v 480 w Fn(build)e(a)k(b)s(o)s(olean)f +(v)m(ector)i(with)d(the)h(v)-5 b(ariables)29 b(passed)h(in)f(an)h(arra) +m(y)p 3716 303 V 236 307 3482 4 v 234 420 4 113 v 321 +386 a Fo(Finite)k(domain)h(v)-6 b(ariable)34 b(blo)s(c)m(ks)p +3716 420 V 236 423 3482 4 v 234 536 4 113 v 286 502 a +Fm(fdd)p 436 502 29 4 v 34 w(clearall)p 1228 536 4 113 +v 431 w Fn(clear)d(all)e(allo)s(cated)h(FDD)i(blo)s(c)m(ks)p +3716 536 V 236 539 3482 4 v 234 652 4 113 v 286 618 a +Fm(fdd)p 436 618 29 4 v 34 w(domain)p 1228 652 4 113 +v 527 w Fn(bDD)f(enco)s(ding)e(of)i(the)f(domain)f(of)i(a)g(FDD)g(v)-5 +b(ariable)p 3716 652 V 236 655 3482 4 v 234 768 4 113 +v 286 734 a Fm(fdd)p 436 734 29 4 v 34 w(domainnum)p +1228 768 4 113 v 383 w Fn(n)m(um)m(b)s(er)29 b(of)i(de\014ned)e +(\014nite)g(domain)g(blo)s(c)m(ks)p 3716 768 V 236 772 +3482 4 v 234 885 4 113 v 286 851 a Fm(fdd)p 436 851 29 +4 v 34 w(domainsize)p 1228 885 4 113 v 335 w Fn(real)h(size)g(of)h(a)g +(\014nite)e(domain)g(blo)s(c)m(k)p 3716 885 V 236 888 +3482 4 v 234 1001 4 113 v 286 967 a Fm(fdd)p 436 967 +29 4 v 34 w(equals)p 1228 1001 4 113 v 527 w Fn(returns)g(a)i(BDD)h +(setting)e(t)m(w)m(o)i(FD.)f(blo)s(c)m(ks)f(equal)p 3716 +1001 V 236 1004 3482 4 v 234 1117 4 113 v 286 1083 a +Fm(fdd)p 436 1083 29 4 v 34 w(extdomain)p 1228 1117 4 +113 v 383 w Fn(adds)g(another)g(set)h(of)g(\014nite)e(domain)g(blo)s(c) +m(ks)p 3716 1117 V 236 1120 3482 4 v 234 1233 4 113 v +286 1199 a Fm(fdd)p 436 1199 29 4 v 34 w(file)p 662 1199 +V 33 w(hook)p 1228 1233 4 113 v 398 w Fn(sp)s(eci\014es)g(a)i(prin)m +(ting)d(callbac)m(k)j(handler)p 3716 1233 V 236 1237 +3482 4 v 234 1349 4 113 v 286 1316 a Fm(fdd)p 436 1316 +29 4 v 34 w(intaddvarblock)p 1228 1349 4 113 v 143 w +Fn(adds)f(a)g(new)g(v)-5 b(ariable)30 b(blo)s(c)m(k)f(for)i(reordering) +p 3716 1349 V 236 1353 3482 4 v 234 1466 4 113 v 286 +1432 a Fm(fdd)p 436 1432 29 4 v 34 w(ithset)p 1228 1466 +4 113 v 527 w Fn(the)g(v)-5 b(ariable)29 b(set)i(for)f(the)g(i'th)g +(\014nite)f(domain)h(blo)s(c)m(k)p 3716 1466 V 236 1469 +3482 4 v 234 1582 4 113 v 286 1548 a Fm(fdd)p 436 1548 +29 4 v 34 w(ithvar)p 1228 1582 4 113 v 527 w Fn(the)h(BDD)g(for)f(the)h +(i'th)f(FDD)h(set)g(to)g(a)g(sp)s(eci\014c)e(v)-5 b(alue)p +3716 1582 V 236 1585 3482 4 v 234 1698 4 113 v 286 1664 +a Fm(fdd)p 436 1664 29 4 v 34 w(makeset)p 1228 1698 4 +113 v 479 w Fn(creates)32 b(a)f(v)-5 b(ariable)29 b(set)i(for)f(N)g +(\014nite)g(domain)f(blo)s(c)m(ks)p 3716 1698 V 236 1702 +3482 4 v 234 1814 4 113 v 286 1781 a Fm(fdd)p 436 1781 +29 4 v 34 w(overlapdomain)p 1228 1814 4 113 v 191 w Fn(com)m(bine)h(t)m +(w)m(o)i(FDD)f(blo)s(c)m(ks)f(in)m(to)h(one)p 3716 1814 +V 236 1818 3482 4 v 234 1931 4 113 v 286 1897 a Fm(fdd)p +436 1897 29 4 v 34 w(printset)p 1228 1931 4 113 v 431 +w Fn(prin)m(ts)e(a)i(BDD)g(for)f(a)h(\014nite)f(domain)f(blo)s(c)m(k)p +3716 1931 V 234 2044 V 286 2010 a Fm(fdd)p 436 2010 29 +4 v 34 w(fprintset)p 1228 2044 4 113 v 3716 2044 V 236 +2047 3482 4 v 234 2160 4 113 v 286 2126 a(fdd)p 436 2126 +29 4 v 34 w(scanallvar)p 1228 2160 4 113 v 335 w Fn(\014nds)g(one)h +(satisfying)f(v)-5 b(alue)30 b(of)h(all)e(FDD)j(v)-5 +b(ariables)p 3716 2160 V 236 2163 3482 4 v 234 2276 4 +113 v 286 2242 a Fm(fdd)p 436 2242 29 4 v 34 w(scanset)p +1228 2276 4 113 v 479 w Fn(scans)30 b(a)h(v)-5 b(ariable)29 +b(set)p 3716 2276 V 236 2279 3482 4 v 234 2392 4 113 +v 286 2358 a Fm(fdd)p 436 2358 29 4 v 34 w(scanvar)p +1228 2392 4 113 v 479 w Fn(\014nds)g(one)h(satisfying)f(v)-5 +b(alue)30 b(of)h(a)g(FDD)g(v)-5 b(ariable)p 3716 2392 +V 236 2396 3482 4 v 234 2508 4 113 v 286 2475 a Fm(fdd)p +436 2475 29 4 v 34 w(setpair)p 1228 2508 4 113 v 479 +w Fn(de\014nes)30 b(a)g(pair)f(for)i(t)m(w)m(o)g(\014nite)f(domain)f +(blo)s(c)m(ks)p 3716 2508 V 236 2512 3482 4 v 234 2625 +4 113 v 286 2591 a Fm(fdd)p 436 2591 29 4 v 34 w(setpairs)p +1228 2625 4 113 v 431 w Fn(de\014nes)h(N)g(pairs)f(for)h(\014nite)g +(domain)f(blo)s(c)m(ks)p 3716 2625 V 236 2628 3482 4 +v 234 2741 4 113 v 286 2707 a Fm(fdd)p 436 2707 29 4 +v 34 w(strm)p 662 2707 V 33 w(hook)p 1228 2741 4 113 +v 398 w Fn(sp)s(eci\014es)g(a)i(prin)m(ting)d(callbac)m(k)j(handler)p +3716 2741 V 236 2744 3482 4 v 234 2857 4 113 v 286 2823 +a Fm(fdd)p 436 2823 29 4 v 34 w(varnum)p 1228 2857 4 +113 v 527 w Fn(binary)e(size)h(of)g(a)h(\014nite)f(domain)f(blo)s(c)m +(k)p 3716 2857 V 236 2860 3482 4 v 234 2973 4 113 v 286 +2940 a Fm(fdd)p 436 2940 29 4 v 34 w(vars)p 1228 2973 +4 113 v 623 w Fn(all)g(BDD)j(v)-5 b(ariables)29 b(asso)s(ciated)i(with) +e(a)i(\014nite)e(domain)g(blo)s(c)m(k)p 3716 2973 V 236 +2977 3482 4 v 234 3090 4 113 v 321 3056 a Fo(File)35 +b(input/output)p 3716 3090 V 236 3093 3482 4 v 234 3206 +4 113 v 286 3172 a Fm(bdd)p 436 3172 29 4 v 34 w(load)p +1228 3206 4 113 v 623 w Fn(loads)30 b(a)h(BDD)g(from)f(a)h(\014le)p +3716 3206 V 234 3319 V 286 3285 a Fm(bdd)p 436 3285 29 +4 v 34 w(fnload)p 1228 3319 4 113 v 3716 3319 V 236 3322 +3482 4 v 234 3435 4 113 v 286 3401 a(bdd)p 436 3401 29 +4 v 34 w(printall)p 1228 3435 4 113 v 431 w Fn(prin)m(ts)e(all)g(used)h +(en)m(tries)g(in)f(the)i(no)s(de)e(table)p 3716 3435 +V 234 3548 V 286 3514 a Fm(bdd)p 436 3514 29 4 v 34 w(fprintall)p +1228 3548 4 113 v 3716 3548 V 236 3551 3482 4 v 234 3664 +4 113 v 286 3630 a(bdd)p 436 3630 29 4 v 34 w(printdot)p +1228 3664 4 113 v 431 w Fn(prin)m(ts)g(a)i(description)d(of)j(a)f(BDD)i +(in)d(DOT)h(format)p 3716 3664 V 234 3777 V 286 3743 +a Fm(bdd)p 436 3743 29 4 v 34 w(fprintdot)p 1228 3777 +4 113 v 3716 3777 V 236 3780 3482 4 v 234 3893 4 113 +v 286 3859 a(bdd)p 436 3859 29 4 v 34 w(printset)p 1228 +3893 4 113 v 431 w Fn(prin)m(ts)f(the)i(set)f(of)h(truth)f(assignmen)m +(ts)g(sp)s(eci\014ed)e(b)m(y)j(a)f(BDD)p 3716 3893 V +234 4006 V 286 3972 a Fm(bdd)p 436 3972 29 4 v 34 w(fprintset)p +1228 4006 4 113 v 3716 4006 V 236 4010 3482 4 v 234 4122 +4 113 v 286 4089 a(bdd)p 436 4089 29 4 v 34 w(printtable)p +1228 4122 4 113 v 335 w Fn(prin)m(ts)f(the)i(no)s(de)e(table)h(en)m +(tries)h(used)e(b)m(y)i(a)f(BDD)p 3716 4122 V 234 4235 +V 286 4201 a Fm(bdd)p 436 4201 29 4 v 34 w(fprinttable)p +1228 4235 4 113 v 3716 4235 V 236 4239 3482 4 v 234 4352 +4 113 v 286 4318 a(bdd)p 436 4318 29 4 v 34 w(save)p +1228 4352 4 113 v 623 w Fn(sa)m(v)m(es)i(a)f(BDD)g(to)g(a)g(\014le)p +3716 4352 V 234 4464 V 286 4431 a Fm(bdd)p 436 4431 29 +4 v 34 w(fnsave)p 1228 4464 4 113 v 3716 4464 V 236 4468 +3482 4 v 234 4581 4 113 v 286 4547 a(operator<<)p 1228 +4581 V 513 w Fn(c++)f(output)g(op)s(erator)h(for)f(BDDs)p +3716 4581 V 236 4584 3482 4 v 234 4697 4 113 v 321 4663 +a Fo(Information)k(on)h(BDDs)p 3716 4697 V 236 4700 3482 +4 v 234 4813 4 113 v 286 4779 a Fm(bdd)p 436 4779 29 +4 v 34 w(anodecount)p 1228 4813 4 113 v 335 w Fn(coun)m(ts)c(the)g(n)m +(um)m(b)s(er)e(of)h(shared)g(no)s(des)f(in)g(an)i(arra)m(y)g(of)f(BDDs) +p 3716 4813 V 236 4816 3482 4 v 234 4929 4 113 v 286 +4896 a Fm(bdd)p 436 4896 29 4 v 34 w(high)p 1228 4929 +4 113 v 623 w Fn(gets)h(the)g(true)f(branc)m(h)g(of)h(a)f(b)s(dd)p +3716 4929 V 236 4933 3482 4 v 234 5046 4 113 v 286 5012 +a Fm(bdd)p 436 5012 29 4 v 34 w(low)p 1228 5046 4 113 +v 671 w Fn(gets)h(the)g(false)f(branc)m(h)g(of)g(a)h(b)s(dd)p +3716 5046 V 236 5049 3482 4 v 234 5162 4 113 v 286 5128 +a Fm(bdd)p 436 5128 29 4 v 34 w(nodecount)p 1228 5162 +4 113 v 383 w Fn(coun)m(ts)g(the)g(n)m(um)m(b)s(er)e(of)h(no)s(des)g +(used)f(for)h(a)h(BDD)p 3716 5162 V 236 5165 3482 4 v +234 5278 4 113 v 286 5244 a Fm(bdd)p 436 5244 29 4 v +34 w(pathcount)p 1228 5278 4 113 v 383 w Fn(coun)m(t)g(the)g(n)m(um)m +(b)s(er)e(of)h(paths)g(leading)f(to)i(the)g(true)f(terminal)p +3716 5278 V 236 5281 3482 4 v 1962 5989 a(16)p eop +%%Page: 17 25 +17 24 bop 236 74 3549 4 v 234 187 4 113 v 286 153 a Fm(bdd)p +436 153 29 4 v 34 w(satcount)p 1275 187 4 113 v 479 w +Fn(calculates)30 b(the)h(n)m(um)m(b)s(er)e(of)i(satisfying)e(v)-5 +b(ariable)29 b(assignmen)m(ts)p 3783 187 V 234 300 V +286 266 a Fm(bdd)p 436 266 29 4 v 34 w(setcountset)p +1275 300 4 113 v 3783 300 V 236 303 3549 4 v 234 416 +4 113 v 286 382 a(bdd)p 436 382 29 4 v 34 w(satcountln)p +1275 416 4 113 v 383 w Fn(calculates)h(the)h(log.)41 +b(n)m(um)m(b)s(er)29 b(of)h(satisfying)g(v)-5 b(ariable)29 +b(assignmen)m(ts)p 3783 416 V 234 529 V 286 495 a Fm(bdd)p +436 495 29 4 v 34 w(setcountlnset)p 1275 529 4 113 v +3783 529 V 236 533 3549 4 v 234 645 4 113 v 286 612 a(bdd)p +436 612 29 4 v 34 w(support)p 1275 645 4 113 v 527 w +Fn(returns)g(the)i(v)-5 b(ariable)29 b(supp)s(ort)f(of)j(a)g(BDD)p +3783 645 V 236 649 3549 4 v 234 762 4 113 v 286 728 a +Fm(bdd)p 436 728 29 4 v 34 w(var)p 1275 762 4 113 v 719 +w Fn(gets)g(the)g(v)-5 b(ariable)29 b(lab)s(eling)f(the)i(b)s(dd)p +3783 762 V 236 765 3549 4 v 234 878 4 113 v 286 844 a +Fm(bdd)p 436 844 29 4 v 34 w(varprofile)p 1275 878 4 +113 v 383 w Fn(returns)f(a)i(v)-5 b(ariable)29 b(pro\014le)p +3783 878 V 236 881 3549 4 v 234 994 4 113 v 321 960 a +Fo(Kernel)35 b(BDD)g(op)s(erations)g(and)g(data)f(structures)p +3783 994 V 236 997 3549 4 v 234 1110 4 113 v 286 1077 +a Fm(bddCacheStat)p 1275 1110 V 465 w Fn(status)d(information)d(ab)s +(out)i(cac)m(he)i(usage)p 3783 1110 V 236 1114 3549 4 +v 234 1227 4 113 v 286 1193 a Fm(bddGbcStat)p 1275 1227 +V 561 w Fn(status)f(information)d(ab)s(out)i(garbage)i(collections)p +3783 1227 V 236 1230 3549 4 v 234 1343 4 113 v 286 1309 +a Fm(bddStat)p 1275 1343 V 705 w Fn(status)f(information)d(ab)s(out)i +(the)h(b)s(dd)d(pac)m(k)-5 b(age)p 3783 1343 V 236 1346 +3549 4 v 234 1459 4 113 v 286 1425 a Fm(bdd)p 436 1425 +29 4 v 34 w(addref)p 1275 1459 4 113 v 575 w Fn(increases)30 +b(the)g(reference)h(coun)m(t)g(on)g(a)f(no)s(de)p 3783 +1459 V 236 1462 3549 4 v 234 1575 4 113 v 286 1541 a +Fm(bdd)p 436 1541 29 4 v 34 w(cachestats)p 1275 1575 +4 113 v 383 w Fn(fetc)m(h)h(cac)m(he)h(access)g(usage)p +3783 1575 V 236 1579 3549 4 v 234 1692 4 113 v 286 1658 +a Fm(bdd)p 436 1658 29 4 v 34 w(clear)p 710 1658 V 33 +w(error)p 1275 1692 4 113 v 350 w Fn(clears)e(an)g(error)g(condition)f +(in)g(the)i(k)m(ernel)p 3783 1692 V 236 1695 3549 4 v +234 1808 4 113 v 286 1774 a Fm(bdd)p 436 1774 29 4 v +34 w(delref)p 1275 1808 4 113 v 575 w Fn(decreases)g(the)g(reference)f +(coun)m(t)h(on)g(a)f(no)s(de)p 3783 1808 V 236 1811 3549 +4 v 234 1924 4 113 v 286 1890 a Fm(bdd)p 436 1890 29 +4 v 34 w(done)p 1275 1924 4 113 v 671 w Fn(resets)h(the)f(b)s(dd)f(pac) +m(k)-5 b(age)p 3783 1924 V 236 1927 3549 4 v 234 2040 +4 113 v 286 2006 a Fm(bdd)p 436 2006 29 4 v 34 w(error)p +710 2006 V 33 w(hook)p 1275 2040 4 113 v 398 w Fn(set)31 +b(a)g(handler)d(for)i(error)g(conditions)p 3783 2040 +V 236 2044 3549 4 v 234 2156 4 113 v 286 2123 a Fm(bdd)p +436 2123 29 4 v 34 w(errstring)p 1275 2156 4 113 v 431 +w Fn(con)m(v)m(erts)i(an)e(error)g(co)s(de)g(to)i(a)e(string)p +3783 2156 V 236 2160 3549 4 v 234 2273 4 113 v 286 2239 +a Fm(bdd)p 436 2239 29 4 v 34 w(extvarnum)p 1275 2273 +4 113 v 431 w Fn(add)g(extra)h(BDD)g(v)-5 b(ariables)p +3783 2273 V 236 2276 3549 4 v 234 2389 4 113 v 286 2355 +a Fm(bdd)p 436 2355 29 4 v 34 w(false)p 1275 2389 4 113 +v 623 w Fn(returns)29 b(the)i(constan)m(t)g(false)f(b)s(dd)p +3783 2389 V 236 2392 3549 4 v 234 2505 4 113 v 286 2471 +a Fm(bdd)p 436 2471 29 4 v 34 w(file)p 662 2471 V 33 +w(hook)p 1275 2505 4 113 v 446 w Fn(sp)s(eci\014es)f(a)i(prin)m(ting)d +(callbac)m(k)i(handler)p 3783 2505 V 236 2508 3549 4 +v 234 2621 4 113 v 286 2588 a Fm(bdd)p 436 2588 29 4 +v 34 w(freepair)p 1275 2621 4 113 v 479 w Fn(frees)g(a)h(table)f(of)h +(pairs)p 3783 2621 V 236 2625 3549 4 v 234 2738 4 113 +v 286 2704 a Fm(bdd)p 436 2704 29 4 v 34 w(gbc)p 614 +2704 V 33 w(hook)p 1275 2738 4 113 v 494 w Fn(set)g(a)g(handler)d(for)i +(garbage)i(collections)p 3783 2738 V 236 2741 3549 4 +v 234 2854 4 113 v 286 2820 a Fm(bdd)p 436 2820 29 4 +v 34 w(getallocnum)p 1275 2854 4 113 v 335 w Fn(get)f(the)g(n)m(um)m(b) +s(er)e(of)i(allo)s(cated)f(no)s(des)p 3783 2854 V 236 +2857 3549 4 v 234 2970 4 113 v 286 2936 a Fm(bdd)p 436 +2936 29 4 v 34 w(getnodenum)p 1275 2970 4 113 v 383 w +Fn(get)h(the)g(n)m(um)m(b)s(er)e(of)i(activ)m(e)g(no)s(des)f(in)f(use)p +3783 2970 V 236 2973 3549 4 v 234 3086 4 113 v 286 3052 +a Fm(bdd)p 436 3052 29 4 v 34 w(init)p 1275 3086 4 113 +v 671 w Fn(initializes)e(the)k(BDD)h(pac)m(k)-5 b(age)p +3783 3086 V 236 3090 3549 4 v 234 3203 4 113 v 286 3169 +a Fm(bdd)p 436 3169 29 4 v 34 w(isrunning)p 1275 3203 +4 113 v 431 w Fn(test)31 b(whether)f(the)g(pac)m(k)-5 +b(age)33 b(is)c(started)i(or)f(not)p 3783 3203 V 236 +3206 3549 4 v 234 3319 4 113 v 286 3285 a Fm(bdd)p 436 +3285 29 4 v 34 w(ithvar)p 1275 3319 4 113 v 575 w Fn(returns)f(a)i(b)s +(dd)d(represen)m(ting)i(the)g(I'th)h(v)-5 b(ariable)p +3783 3319 V 236 3322 3549 4 v 234 3435 4 113 v 286 3401 +a Fm(bdd)p 436 3401 29 4 v 34 w(makeset)p 1275 3435 4 +113 v 527 w Fn(builds)27 b(a)k(BDD)g(v)-5 b(ariable)30 +b(set)g(from)g(an)h(in)m(teger)f(arra)m(y)p 3783 3435 +V 236 3438 3549 4 v 234 3551 4 113 v 286 3517 a Fm(bdd)p +436 3517 29 4 v 34 w(newpair)p 1275 3551 4 113 v 527 +w Fn(creates)i(an)e(empt)m(y)h(v)-5 b(ariable)29 b(pair)g(table)p +3783 3551 V 236 3555 3549 4 v 234 3667 4 113 v 286 3634 +a Fm(bdd)p 436 3634 29 4 v 34 w(nithvar)p 1275 3667 4 +113 v 527 w Fn(returns)g(a)i(b)s(dd)d(represen)m(ting)i(the)g(negation) +h(of)g(the)f(I'th)g(v)-5 b(ariable)p 3783 3667 V 236 +3671 3549 4 v 234 3784 4 113 v 286 3750 a Fm(bdd)p 436 +3750 29 4 v 34 w(printstat)p 1275 3784 4 113 v 431 w +Fn(prin)m(t)29 b(cac)m(he)j(statistics)p 3783 3784 V +234 3897 V 286 3863 a Fm(bdd)p 436 3863 29 4 v 34 w(fprintstat)p +1275 3897 4 113 v 3783 3897 V 236 3900 3549 4 v 234 4013 +4 113 v 286 3979 a(bdd)p 436 3979 29 4 v 34 w(resetpair)p +1275 4013 4 113 v 431 w Fn(clear)e(all)g(v)-5 b(ariable)29 +b(pairs)p 3783 4013 V 236 4016 3549 4 v 234 4129 4 113 +v 286 4095 a Fm(bdd)p 436 4095 29 4 v 34 w(resize)p 758 +4095 V 32 w(hook)p 1275 4129 4 113 v 351 w Fn(set)i(a)g(handler)d(for)i +(no)s(detable)g(resizes)p 3783 4129 V 236 4132 3549 4 +v 234 4245 4 113 v 286 4211 a Fm(bdd)p 436 4211 29 4 +v 34 w(scanset)p 1275 4245 4 113 v 527 w Fn(returns)f(an)h(in)m(teger)h +(represen)m(tation)f(of)h(a)g(v)-5 b(ariable)29 b(set)p +3783 4245 V 236 4249 3549 4 v 234 4362 4 113 v 286 4328 +a Fm(bdd)p 436 4328 29 4 v 34 w(setcacheratio)p 1275 +4362 4 113 v 239 w Fn(sets)i(the)f(cac)m(he)i(ratio)f(for)f(the)g(op)s +(erator)h(cac)m(hes)p 3783 4362 V 236 4365 3549 4 v 234 +4478 4 113 v 286 4444 a Fm(bdd)p 436 4444 29 4 v 34 w(setmaxincrease)p +1275 4478 4 113 v 191 w Fn(set)g(max.)41 b(n)m(um)m(b)s(er)29 +b(of)h(no)s(des)g(used)f(to)i(increase)g(no)s(de)e(table)p +3783 4478 V 236 4481 3549 4 v 234 4594 4 113 v 286 4560 +a Fm(bdd)p 436 4560 29 4 v 34 w(setmaxnodenum)p 1275 +4594 4 113 v 239 w Fn(set)i(the)f(maxim)m(um)g(a)m(v)-5 +b(ailable)29 b(n)m(um)m(b)s(er)g(of)i(b)s(dd)d(no)s(des)p +3783 4594 V 236 4597 3549 4 v 234 4710 4 113 v 286 4676 +a Fm(bdd)p 436 4676 29 4 v 34 w(setminfreenodes)p 1275 +4710 4 113 v 143 w Fn(set)j(min.)39 b(no.)i(of)30 b(no)s(des)g(to)h(b)s +(e)e(reclaimed)h(after)h(GBC.)p 3783 4710 V 236 4714 +3549 4 v 234 4826 4 113 v 286 4793 a Fm(bdd)p 436 4793 +29 4 v 34 w(setpair)p 1275 4826 4 113 v 527 w Fn(set)g(one)f(v)-5 +b(ariable)30 b(pair)p 3783 4826 V 234 4939 V 286 4905 +a Fm(bdd)p 436 4905 29 4 v 34 w(setbddpair)p 1275 4939 +4 113 v 3783 4939 V 236 4943 3549 4 v 234 5056 4 113 +v 286 5022 a(bdd)p 436 5022 29 4 v 34 w(setpairs)p 1275 +5056 4 113 v 479 w Fn(de\014nes)f(a)i(whole)f(set)h(of)f(pairs)p +3783 5056 V 234 5169 V 286 5135 a Fm(bdd)p 436 5135 29 +4 v 34 w(setbddpairs)p 1275 5169 4 113 v 3783 5169 V +236 5172 3549 4 v 234 5285 4 113 v 286 5251 a(bdd)p 436 +5251 29 4 v 34 w(setvarnum)p 1275 5285 4 113 v 431 w +Fn(set)h(the)f(n)m(um)m(b)s(er)f(of)i(used)e(b)s(dd)g(v)-5 +b(ariables)p 3783 5285 V 236 5288 3549 4 v 1962 5989 +a(17)p eop +%%Page: 18 26 +18 25 bop 236 74 3435 4 v 234 187 4 113 v 286 153 a Fm(bdd)p +436 153 29 4 v 34 w(stats)p 1357 187 4 113 v 705 w Fn(returns)29 +b(some)i(status)g(information)d(ab)s(out)i(the)h(b)s(dd)d(pac)m(k)-5 +b(age)p 3669 187 V 236 191 3435 4 v 234 303 4 113 v 286 +270 a Fm(bdd)p 436 270 29 4 v 34 w(strm)p 662 270 V 33 +w(hook)p 1357 303 4 113 v 528 w Fn(sp)s(eci\014es)29 +b(a)i(prin)m(ting)d(callbac)m(k)i(handler)p 3669 303 +V 236 307 3435 4 v 234 420 4 113 v 286 386 a Fm(bdd)p +436 386 29 4 v 34 w(true)p 1357 420 4 113 v 753 w Fn(returns)f(the)i +(constan)m(t)g(true)f(b)s(dd)p 3669 420 V 236 423 3435 +4 v 234 536 4 113 v 286 502 a Fm(bdd)p 436 502 29 4 v +34 w(varnum)p 1357 536 4 113 v 657 w Fn(returns)f(the)i(n)m(um)m(b)s +(er)e(of)h(de\014ned)f(v)-5 b(ariables)p 3669 536 V 236 +539 3435 4 v 234 652 4 113 v 286 618 a Fm(bdd)p 436 618 +29 4 v 34 w(versionnum)p 1357 652 4 113 v 465 w Fn(returns)29 +b(the)i(v)m(ersion)e(n)m(um)m(b)s(er)h(of)g(the)h(b)s(dd)d(pac)m(k)-5 +b(age)p 3669 652 V 236 655 3435 4 v 234 768 4 113 v 286 +734 a Fm(bdd)p 436 734 29 4 v 34 w(versionstr)p 1357 +768 4 113 v 465 w Fn(returns)29 b(a)i(text)g(string)f(with)f(v)m +(ersion)g(information)p 3669 768 V 236 772 3435 4 v 234 +885 4 113 v 286 851 a Fm(bddfalse)p 1357 885 V 739 w +Fn(the)h(constan)m(t)i(false)e(b)s(dd)p 3669 885 V 236 +888 3435 4 v 234 1001 4 113 v 286 967 a Fm(bddtrue)p +1357 1001 V 787 w Fn(the)g(constan)m(t)i(true)e(b)s(dd)p +3669 1001 V 236 1004 3435 4 v 234 1117 4 113 v 321 1083 +a Fo(BDD)35 b(op)s(erators)p 3669 1117 V 236 1120 3435 +4 v 234 1233 4 113 v 286 1199 a Fm(bdd)p 436 1199 29 +4 v 34 w(allsat)p 1357 1233 4 113 v 657 w Fn(\014nds)29 +b(all)g(satisfying)g(v)-5 b(ariable)29 b(assignmen)m(ts)p +3669 1233 V 236 1237 3435 4 v 234 1349 4 113 v 286 1316 +a Fm(bdd)p 436 1316 29 4 v 34 w(and)p 1357 1349 4 113 +v 801 w Fn(the)h(logical)g('and')h(of)f(t)m(w)m(o)i(BDDs)p +3669 1349 V 236 1353 3435 4 v 234 1466 4 113 v 286 1432 +a Fm(bdd)p 436 1432 29 4 v 34 w(appall)p 1357 1466 4 +113 v 657 w Fn(apply)d(op)s(eration)h(and)g(univ)m(ersal)e(quan)m +(ti\014cation)p 3669 1466 V 236 1469 3435 4 v 234 1582 +4 113 v 286 1548 a Fm(bdd)p 436 1548 29 4 v 34 w(appex)p +1357 1582 4 113 v 705 w Fn(apply)h(op)s(eration)h(and)g(existen)m(tial) +f(quan)m(ti\014cation)p 3669 1582 V 236 1585 3435 4 v +234 1698 4 113 v 286 1664 a Fm(bdd)p 436 1664 29 4 v +34 w(apply)p 1357 1698 4 113 v 705 w Fn(basic)h(b)s(dd)e(op)s(erations) +p 3669 1698 V 236 1702 3435 4 v 234 1814 4 113 v 286 +1781 a Fm(bdd)p 436 1781 29 4 v 34 w(appuni)p 1357 1814 +4 113 v 657 w Fn(apply)h(op)s(eration)h(and)g(unique)e(quan)m +(ti\014cation)p 3669 1814 V 236 1818 3435 4 v 234 1931 +4 113 v 286 1897 a Fm(bdd)p 436 1897 29 4 v 34 w(biimp)p +1357 1931 4 113 v 705 w Fn(the)i(logical)g('bi-implication')e(b)s(et)m +(w)m(een)j(t)m(w)m(o)g(BDDs)p 3669 1931 V 236 1934 3435 +4 v 234 2047 4 113 v 286 2013 a Fm(bdd)p 436 2013 29 +4 v 34 w(buildcube)p 1357 2047 4 113 v 513 w Fn(build)c(a)k(cub)s(e)f +(from)g(an)g(arra)m(y)h(of)f(v)-5 b(ariables)p 3669 2047 +V 234 2160 V 286 2126 a Fm(bdd)p 436 2126 29 4 v 34 w(ibuildcube)p +1357 2160 4 113 v 3669 2160 V 236 2163 3435 4 v 234 2276 +4 113 v 286 2242 a(bdd)p 436 2242 29 4 v 34 w(compose)p +1357 2276 4 113 v 609 w Fn(functional)29 b(comp)s(osition)p +3669 2276 V 236 2279 3435 4 v 234 2392 4 113 v 286 2358 +a Fm(bdd)p 436 2358 29 4 v 34 w(constrain)p 1357 2392 +4 113 v 513 w Fn(generalized)h(cofactor)p 3669 2392 V +236 2396 3435 4 v 234 2508 4 113 v 286 2475 a Fm(bdd)p +436 2475 29 4 v 34 w(exist)p 1357 2508 4 113 v 705 w +Fn(existen)m(tial)g(quan)m(ti\014cation)g(of)g(v)-5 b(ariables)p +3669 2508 V 236 2512 3435 4 v 234 2625 4 113 v 286 2591 +a Fm(bdd)p 436 2591 29 4 v 34 w(forall)p 1357 2625 4 +113 v 657 w Fn(univ)m(ersal)29 b(quan)m(ti\014cation)g(of)i(v)-5 +b(ariables)p 3669 2625 V 236 2628 3435 4 v 234 2741 4 +113 v 286 2707 a Fm(bdd)p 436 2707 29 4 v 34 w(fullsatone)p +1357 2741 4 113 v 465 w Fn(\014nds)29 b(one)h(satisfying)f(v)-5 +b(ariable)29 b(assignmen)m(t)p 3669 2741 V 236 2744 3435 +4 v 234 2857 4 113 v 286 2823 a Fm(bdd)p 436 2823 29 +4 v 34 w(imp)p 1357 2857 4 113 v 801 w Fn(the)h(logical)g +('implication')f(b)s(et)m(w)m(een)i(t)m(w)m(o)g(BDDs)p +3669 2857 V 236 2860 3435 4 v 234 2973 4 113 v 286 2940 +a Fm(bdd)p 436 2940 29 4 v 34 w(ite)p 1357 2973 4 113 +v 801 w Fn(if-then-else)f(op)s(erator)p 3669 2973 V 236 +2977 3435 4 v 234 3090 4 113 v 286 3056 a Fm(bdd)p 436 +3056 29 4 v 34 w(not)p 1357 3090 4 113 v 801 w Fn(negates)i(a)e(b)s(dd) +p 3669 3090 V 236 3093 3435 4 v 234 3206 4 113 v 286 +3172 a Fm(bdd)p 436 3172 29 4 v 34 w(or)p 1357 3206 4 +113 v 849 w Fn(the)g(logical)g('or')h(of)g(t)m(w)m(o)g(BDDs)p +3669 3206 V 236 3209 3435 4 v 234 3322 4 113 v 286 3288 +a Fm(bdd)p 436 3288 29 4 v 34 w(relprod)p 1357 3322 4 +113 v 609 w Fn(relational)e(pro)s(duct)p 3669 3322 V +236 3325 3435 4 v 234 3438 4 113 v 286 3404 a Fm(bdd)p +436 3404 29 4 v 34 w(replace)p 1357 3438 4 113 v 609 +w Fn(replaces)h(v)-5 b(ariables)29 b(with)g(other)i(v)-5 +b(ariables)p 3669 3438 V 236 3442 3435 4 v 234 3555 4 +113 v 286 3521 a Fm(bdd)p 436 3521 29 4 v 34 w(restrict)p +1357 3555 4 113 v 561 w Fn(restric)30 b(a)g(set)h(of)g(v)-5 +b(ariables)29 b(to)i(constan)m(t)h(v)-5 b(alues)p 3669 +3555 V 236 3558 3435 4 v 234 3671 4 113 v 286 3637 a +Fm(bdd)p 436 3637 29 4 v 34 w(satone)p 1357 3671 4 113 +v 657 w Fn(\014nds)29 b(one)h(satisfying)f(v)-5 b(ariable)29 +b(assignmen)m(t)p 3669 3671 V 236 3674 3435 4 v 234 3787 +4 113 v 286 3753 a Fm(bdd)p 436 3753 29 4 v 34 w(satoneset)p +1357 3787 4 113 v 513 w Fn(\014nds)g(one)h(satisfying)f(v)-5 +b(ariable)29 b(assignmen)m(t)p 3669 3787 V 236 3790 3435 +4 v 234 3903 4 113 v 286 3869 a Fm(bdd)p 436 3869 29 +4 v 34 w(simplify)p 1357 3903 4 113 v 561 w Fn(coudert)h(and)g(Madre's) +h(restrict)f(function)p 3669 3903 V 236 3907 3435 4 v +234 4019 4 113 v 286 3986 a Fm(bdd)p 436 3986 29 4 v +34 w(unique)p 1357 4019 4 113 v 657 w Fn(unique)e(quan)m(ti\014cation)i +(of)h(v)-5 b(ariables)p 3669 4019 V 236 4023 3435 4 v +234 4136 4 113 v 286 4102 a Fm(bdd)p 436 4102 29 4 v +34 w(veccompose)p 1357 4136 4 113 v 465 w Fn(sim)m(ultaneous)29 +b(functional)g(comp)s(osition)p 3669 4136 V 236 4139 +3435 4 v 234 4252 4 113 v 286 4218 a Fm(bdd)p 436 4218 +29 4 v 34 w(xor)p 1357 4252 4 113 v 801 w Fn(the)h(logical)g('xor')h +(of)g(t)m(w)m(o)g(BDDs)p 3669 4252 V 236 4255 3435 4 +v 234 4368 4 113 v 321 4334 a Fo(V)-9 b(ariable)35 b(reordering)p +3669 4368 V 236 4371 3435 4 v 234 4484 4 113 v 286 4451 +a Fm(bdd)p 436 4451 29 4 v 34 w(addvarblock)p 1357 4484 +4 113 v 417 w Fn(adds)30 b(a)g(new)g(v)-5 b(ariable)29 +b(blo)s(c)m(k)h(for)g(reordering)p 3669 4484 V 234 4597 +V 286 4563 a Fm(bdd)p 436 4563 29 4 v 34 w(intaddvarblock)p +1357 4597 4 113 v 3669 4597 V 236 4601 3435 4 v 234 4714 +4 113 v 286 4680 a(bdd)p 436 4680 29 4 v 34 w(autoreorder)p +1357 4714 4 113 v 417 w Fn(enables)g(automatic)h(reordering)p +3669 4714 V 234 4826 V 286 4793 a Fm(bdd)p 436 4793 29 +4 v 34 w(autoreorder)p 998 4793 V 31 w(times)p 1357 4826 +4 113 v 3669 4826 V 236 4830 3435 4 v 234 4943 4 113 +v 286 4909 a(bdd)p 436 4909 29 4 v 34 w(blockfile)p 902 +4909 V 31 w(hook)p 1357 4943 4 113 v 290 w Fn(sp)s(eci\014es)e(a)i +(prin)m(ting)d(callbac)m(k)i(handler)p 3669 4943 V 236 +4946 3435 4 v 234 5059 4 113 v 286 5025 a Fm(bdd)p 436 +5025 29 4 v 34 w(clrvarblocks)p 1357 5059 4 113 v 369 +w Fn(clears)g(all)f(v)-5 b(ariable)30 b(blo)s(c)m(ks)p +3669 5059 V 236 5062 3435 4 v 234 5175 4 113 v 286 5141 +a Fm(bdd)p 436 5141 29 4 v 34 w(disable)p 806 5141 V +32 w(reorder)p 1357 5175 4 113 v 241 w Fn(disable)e(automatic)k +(reordering)p 3669 5175 V 236 5178 3435 4 v 234 5291 +4 113 v 286 5258 a Fm(bdd)p 436 5258 29 4 v 34 w(enable)p +758 5258 V 32 w(reorder)p 1357 5291 4 113 v 289 w Fn(enables)e +(automatic)h(reordering)p 3669 5291 V 236 5295 3435 4 +v 1962 5989 a(18)p eop +%%Page: 19 27 +19 26 bop 236 74 3116 4 v 234 187 4 113 v 286 153 a Fm(bdd)p +436 153 29 4 v 34 w(getreorder)p 950 153 V 31 w(method)p +1357 187 4 113 v 146 w Fn(fetc)m(h)31 b(the)g(curren)m(t)f(reorder)g +(metho)s(d)p 3351 187 V 236 191 3116 4 v 234 303 4 113 +v 286 270 a Fm(bdd)p 436 270 29 4 v 34 w(getreorder)p +950 270 V 31 w(times)p 1357 303 4 113 v 194 w Fn(fetc)m(h)h(the)g +(curren)m(t)f(n)m(um)m(b)s(er)f(of)h(allo)m(w)m(ed)h(reorderings)p +3351 303 V 236 307 3116 4 v 234 420 4 113 v 286 386 a +Fm(bdd)p 436 386 29 4 v 34 w(level2var)p 1357 420 4 113 +v 513 w Fn(fetc)m(h)g(the)g(v)-5 b(ariable)29 b(n)m(um)m(b)s(er)g(of)h +(a)h(sp)s(eci\014c)e(lev)m(el)p 3351 420 V 236 423 3116 +4 v 234 536 4 113 v 286 502 a Fm(bdd)p 436 502 29 4 v +34 w(printorder)p 1357 536 4 113 v 465 w Fn(prin)m(ts)g(the)h(curren)m +(t)h(order)p 3351 536 V 236 539 3116 4 v 234 652 4 113 +v 286 618 a Fm(bdd)p 436 618 29 4 v 34 w(reorder)p 1357 +652 4 113 v 609 w Fn(start)g(dynamic)e(reordering)p 3351 +652 V 236 655 3116 4 v 234 768 4 113 v 286 734 a Fm(bdd)p +436 734 29 4 v 34 w(reorder)p 806 734 V 32 w(gain)p 1357 +768 4 113 v 385 w Fn(calculate)i(the)f(gain)g(in)f(size)i(after)f(a)h +(reordering)p 3351 768 V 236 772 3116 4 v 234 885 4 113 +v 286 851 a Fm(bdd)p 436 851 29 4 v 34 w(reorder)p 806 +851 V 32 w(hook)p 1357 885 4 113 v 385 w Fn(sets)g(a)f(handler)f(for)h +(automatic)h(reorderings)p 3351 885 V 236 888 3116 4 +v 234 1001 4 113 v 286 967 a Fm(bdd)p 436 967 29 4 v +34 w(reorder)p 806 967 V 32 w(probe)p 1357 1001 4 113 +v 337 w Fn(de\014ne)f(a)g(handler)f(for)h(minimization)d(of)k(BDDs)p +3351 1001 V 236 1004 3116 4 v 234 1117 4 113 v 286 1083 +a Fm(bdd)p 436 1083 29 4 v 34 w(reorder)p 806 1083 V +32 w(verbose)p 1357 1117 4 113 v 241 w Fn(enables)f(v)m(erb)s(ose)g +(information)f(ab)s(out)h(reorderings)p 3351 1117 V 236 +1120 3116 4 v 234 1233 4 113 v 286 1199 a Fm(bdd)p 436 +1199 29 4 v 34 w(setvarorder)p 1357 1233 4 113 v 417 +w Fn(set)h(a)g(sp)s(eci\014c)e(v)-5 b(ariable)29 b(order)p +3351 1233 V 236 1237 3116 4 v 234 1349 4 113 v 286 1316 +a Fm(bdd)p 436 1316 29 4 v 34 w(swapvar)p 1357 1349 4 +113 v 609 w Fn(sw)m(ap)h(t)m(w)m(o)i(BDD)f(v)-5 b(ariables)p +3351 1349 V 236 1353 3116 4 v 234 1466 4 113 v 286 1432 +a Fm(bdd)p 436 1432 29 4 v 34 w(var2level)p 1357 1466 +4 113 v 513 w Fn(fetc)m(h)31 b(the)g(lev)m(el)f(of)g(a)h(sp)s(eci\014c) +e(BDD)j(v)-5 b(ariable)p 3351 1466 V 236 1469 3116 4 +v 234 1582 4 113 v 286 1548 a Fm(bdd)p 436 1548 29 4 +v 34 w(varblockall)p 1357 1582 4 113 v 417 w Fn(add)30 +b(a)g(v)-5 b(ariable)30 b(blo)s(c)m(k)g(for)g(all)f(v)-5 +b(ariables)p 3351 1582 V 236 1585 3116 4 v 1962 5989 +a(19)p eop +%%Page: 20 28 +20 27 bop 236 83 3544 12 v 236 196 a Fo(b)s(ddCac)m(heStat)95 +b Fn({)31 b(Status)f(information)f(ab)s(out)h(cac)m(he)i(usage)p +236 250 V 236 447 a Fm(typedef)46 b(struct)g(s_bddCacheStat)236 +560 y({)379 673 y(long)h(unsigned)f(int)g(uniqueAccess;)379 +786 y(long)h(unsigned)f(int)g(uniqueChain;)379 899 y(long)h(unsigned)f +(int)g(uniqueHit;)379 1012 y(long)h(unsigned)f(int)g(uniqueMiss;)379 +1125 y(long)h(unsigned)f(int)g(opHit;)379 1238 y(long)h(unsigned)f(int) +g(opMiss;)379 1350 y(long)h(unsigned)f(int)g(swapCount;)236 +1463 y(})i(bddCacheStat;)236 1688 y Fo(Description)p +236 1743 3544 5 v 236 1855 a Fn(The)30 b(\014elds)f(are)286 +2056 y Fo(Name)357 b(Num)m(b)s(er)34 b(of)286 2169 y +Fn(uniqueAccess)99 b(accesses)32 b(to)f(the)g(unique)d(no)s(de)i(table) +286 2282 y(uniqueChain)120 b(iterations)30 b(through)f(the)i(cac)m(he)h +(c)m(hains)e(in)f(the)h(unique)f(no)s(de)g(table)286 +2394 y(uniqueHit)230 b(en)m(tries)30 b(actually)g(found)f(in)g(the)i +(the)f(unique)f(no)s(de)g(table)286 2507 y(uniqueMiss)178 +b(en)m(tries)30 b(not)h(found)e(in)g(the)h(the)h(unique)d(no)s(de)i +(table)286 2620 y(opHit)401 b(en)m(tries)30 b(found)f(in)g(the)i(op)s +(erator)f(cac)m(hes)286 2733 y(opMiss)349 b(en)m(tries)30 +b(not)h(found)e(in)g(the)h(op)s(erator)h(cac)m(hes)286 +2846 y(sw)m(apCoun)m(t)186 b(n)m(um)m(b)s(er)29 b(of)i(v)-5 +b(ariable)29 b(sw)m(aps)h(in)f(reordering)236 3102 y +Fo(See)35 b(also)p 236 3156 V 236 3269 a Fn(b)s(dd)p +397 3269 28 4 v 31 w(cac)m(hestats)1962 5989 y(20)p eop +%%Page: 21 29 +21 28 bop 236 83 3544 12 v 236 196 a Fo(b)s(ddGb)s(cStat)96 +b Fn({)30 b(Status)h(information)d(ab)s(out)j(garbage)g(collections)p +236 250 V 236 447 a Fm(typedef)46 b(struct)g(s_bddGbcStat)236 +560 y({)379 673 y(int)h(nodes;)379 786 y(int)g(freenodes;)379 +899 y(long)g(time;)379 1012 y(long)g(sumtime;)379 1125 +y(int)g(num;)236 1238 y(})h(bddGbcStat;)236 1463 y Fo(Description)p +236 1517 3544 5 v 236 1630 a Fn(The)30 b(\014elds)f(are)286 +1830 y Fm(nodes)289 b Fn(T)-8 b(otal)31 b(n)m(um)m(b)s(er)e(of)i(allo)s +(cated)f(no)s(des)g(in)f(the)h(no)s(detable)286 1943 +y Fm(freenodes)97 b Fn(Num)m(b)s(er)29 b(of)i(free)f(no)s(des)g(in)f +(the)i(no)s(detable)286 2056 y Fm(time)337 b Fn(Time)30 +b(used)f(for)h(garbage)i(collection)e(this)f(time)286 +2169 y Fm(sumtime)193 b Fn(T)-8 b(otal)31 b(time)f(used)g(for)g +(garbage)i(collection)286 2282 y Fm(num)385 b Fn(n)m(um)m(b)s(er)29 +b(of)i(garbage)g(collections)f(done)h(un)m(til)d(no)m(w)236 +2537 y Fo(See)35 b(also)p 236 2591 V 236 2704 a Fn(b)s(dd)p +397 2704 28 4 v 31 w(gb)s(c)p 567 2704 V 33 w(ho)s(ok)1962 +5989 y(21)p eop +%%Page: 22 30 +22 29 bop 236 83 3544 12 v 236 196 a Fo(b)s(ddStat)95 +b Fn({)31 b(Status)f(information)f(ab)s(out)h(the)g(b)s(dd)f(pac)m(k)-5 +b(age)p 236 250 V 236 447 a Fm(typedef)46 b(struct)g(s_bddStat)236 +560 y({)379 673 y(long)h(int)g(produced;)379 786 y(int)g(nodenum;)379 +899 y(int)g(maxnodenum;)379 1012 y(int)g(freenodes;)379 +1125 y(int)g(minfreenodes;)379 1238 y(int)g(varnum;)379 +1350 y(int)g(cachesize;)379 1463 y(int)g(gbcnum;)236 +1576 y(})h(bddStat;)236 1801 y Fo(Description)p 236 1855 +3544 5 v 236 1968 a Fn(The)30 b(\014elds)f(are)286 2169 +y Fm(produced)288 b Fn(total)32 b(n)m(um)m(b)s(er)d(of)h(new)g(no)s +(des)g(ev)m(er)h(pro)s(duced)286 2282 y Fm(nodenum)336 +b Fn(curren)m(tly)30 b(allo)s(cated)g(n)m(um)m(b)s(er)f(of)i(b)s(dd)d +(no)s(des)286 2394 y Fm(maxnodenum)192 b Fn(user)30 b(de\014ned)f +(maxim)m(um)g(n)m(um)m(b)s(er)g(of)i(b)s(dd)d(no)s(des)286 +2507 y Fm(freenodes)240 b Fn(n)m(um)m(b)s(er)29 b(of)i(curren)m(tly)e +(free)i(no)s(des)286 2620 y Fm(minfreenodes)96 b Fn(minim)m(um)54 +b(n)m(um)m(b)s(er)i(of)h(no)s(des)e(that)j(should)c(b)s(e)i(left)h +(after)g(a)958 2733 y(garbage)32 b(collection.)286 2846 +y Fm(varnum)384 b Fn(n)m(um)m(b)s(er)29 b(of)i(de\014ned)e(b)s(dd)f(v) +-5 b(ariables)286 2959 y Fm(cachesize)240 b Fn(n)m(um)m(b)s(er)29 +b(of)i(en)m(tries)f(in)f(the)i(in)m(ternal)e(cac)m(hes)286 +3072 y Fm(gbcnum)384 b Fn(n)m(um)m(b)s(er)29 b(of)i(garbage)h +(collections)e(done)g(un)m(til)e(no)m(w)236 3327 y Fo(See)35 +b(also)p 236 3382 V 236 3495 a Fn(b)s(dd)p 397 3495 28 +4 v 31 w(stats)p 236 3828 3544 12 v 236 3941 a Fo(b)s(dd)p +419 3941 32 4 v 38 w(addref)95 b Fn({)31 b(increases)f(the)h(reference) +g(coun)m(t)g(on)f(a)h(no)s(de)p 236 3995 3544 12 v 236 +4200 a Fm(BDD)47 b(bdd_addref\(BDD)d(r\))236 4425 y Fo(Description)p +236 4479 3544 5 v 236 4592 a Fn(Reference)28 b(coun)m(ting)f(is)f(done) +h(on)g(externaly)g(referenced)g(no)s(des)f(only)g(and)h(the)g(coun)m(t) +g(for)g(a)h(sp)s(eci\014c)236 4705 y(no)s(de)d Fm(r)g +Fn(can)h(and)f(m)m(ust)g(b)s(e)g(increased)g(using)f(this)g(function)g +(to)j(a)m(v)m(oid)f(lo)s(osing)e(the)i(no)s(de)e(in)h(the)g(next)236 +4818 y(garbage)32 b(collection.)236 5081 y Fo(Return)j(v)-6 +b(alue)p 236 5135 V 236 5248 a Fn(The)30 b(BDD)i(no)s(de)d +Fm(r)p Fn(.)236 5511 y Fo(See)35 b(also)p 236 5565 V +236 5678 a Fn(b)s(dd)p 397 5678 28 4 v 31 w(delref)1962 +5989 y(22)p eop +%%Page: 23 31 +23 30 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(addv)-6 b(arblo)s(c)m(k)97 b Fn({)30 +b(adds)g(a)h(new)f(v)-5 b(ariable)29 b(blo)s(c)m(k)h(for)g(reordering)p +236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_addvarblock\(BDD)c(var,)j +(int)h(fixed\))236 568 y(int)g(bdd_intaddvarblock\(int)42 +b(first,)k(int)h(last,)f(int)h(fixed\))236 793 y Fo(Description)p +236 847 3544 5 v 236 960 a Fn(Creates)40 b(a)g(new)e(v)-5 +b(ariable)38 b(blo)s(c)m(k)h(with)f(the)i(v)-5 b(ariables)38 +b(in)f(the)j(v)-5 b(ariable)38 b(set)i Fm(var)p Fn(.)66 +b(The)39 b(v)-5 b(ariables)236 1073 y(in)33 b Fm(var)h +Fn(m)m(ust)g(b)s(e)g(con)m(tiguous.)53 b(In)34 b(the)h(second)f(form)g +(the)h(argumen)m(t)g Fm(first)e Fn(is)g(the)i(\014rst)f(v)-5 +b(ariable)236 1186 y(included)28 b(in)g(the)j(blo)s(c)m(k)e(and)h +Fm(last)f Fn(is)g(the)h(last)g(v)-5 b(ariable)29 b(included)f(in)g(the) +j(blo)s(c)m(k.)40 b(This)28 b(order)i(do)s(es)236 1298 +y(not)h(dep)s(end)d(on)j(curren)m(t)f(v)-5 b(ariable)29 +b(order.)327 1411 y(The)24 b(v)-5 b(ariable)23 b(blo)s(c)m(ks)h(are)h +(ordered)f(as)h(a)g(tree,)h(with)e(the)g(largest)h(ranges)g(at)g(top)g +(and)f(the)g(smallest)236 1524 y(at)34 b(the)g(b)s(ottom.)50 +b(Example:)c(Assume)33 b(the)g(blo)s(c)m(k)g(0-9)i(is)d(added)h(as)g +(the)h(\014rst)f(blo)s(c)m(k)f(and)h(then)g(the)236 1637 +y(blo)s(c)m(k)f(0-6.)48 b(This)31 b(yields)f(the)j(0-9)g(blo)s(c)m(k)f +(at)h(the)g(top,)g(with)e(the)i(0-6)h(blo)s(c)m(k)d(as)i(a)g(c)m(hild.) +45 b(If)32 b(no)m(w)g(the)236 1750 y(blo)s(c)m(k)e(2-4)h(w)m(as)f +(added,)g(it)f(w)m(ould)g(b)s(ecome)h(a)h(c)m(hild)d(of)i(the)g(0-6)h +(blo)s(c)m(k.)40 b(A)30 b(blo)s(c)m(k)g(of)g(0-8)h(w)m(ould)e(b)s(e)g +(a)236 1863 y(c)m(hild)i(of)h(the)h(0-9)g(blo)s(c)m(k)f(and)g(ha)m(v)m +(e)h(the)g(0-6)g(blo)s(c)m(k)f(as)h(a)g(c)m(hild.)45 +b(P)m(artially)31 b(o)m(v)m(erlapping)g(blo)s(c)m(ks)h(are)236 +1976 y(not)f(allo)m(w)m(ed.)327 2089 y(The)g Fm(fixed)f +Fn(parameter)i(sets)g(the)g(blo)s(c)m(k)f(to)h(b)s(e)f(\014xed)g(\(no)g +(reordering)g(of)g(its)g(c)m(hild)f(blo)s(c)m(ks)h(is)g(al-)236 +2202 y(lo)m(w)m(ed\))23 b(or)f(free,)i(using)d(the)h(constan)m(ts)h +Fm(BDD)p 1734 2202 29 4 v 34 w(REORDER)p 2104 2202 V +32 w(FIXED)e Fn(and)g Fm(BDD)p 2709 2202 V 34 w(REORDER)p +3079 2202 V 32 w(FREE)p Fn(.)g(Reordering)236 2315 y(is)30 +b(alw)m(a)m(ys)h(done)f(on)g(the)h(top)f(most)h(blo)s(c)m(ks)f(\014rst) +f(and)h(then)g(recursiv)m(ely)f(do)m(wn)m(w)m(ards.)327 +2428 y(The)g(return)g(v)-5 b(alue)29 b(is)f(an)i(in)m(teger)g(that)g +(can)g(b)s(e)f(used)f(to)j(iden)m(tify)d(the)i(blo)s(c)m(k)f(later)g +(on)h(-)f(with)g(for)236 2540 y(example)h Fm(bdd)p 742 +2540 V 34 w(blockfile)p 1208 2540 V 32 w(hook)p Fn(.)39 +b(The)30 b(v)-5 b(alues)30 b(returned)f(will)f(b)s(e)i(in)f(the)h +(sequence)h(0)p Fj(;)15 b Fn(1)p Fj(;)g Fn(2)p Fj(;)g +Fn(3)p Fj(;)g(:)g(:)g(:)t Fn(.)236 2804 y Fo(Return)35 +b(v)-6 b(alue)p 236 2858 3544 5 v 236 2971 a Fn(A)31 +b(non-negativ)m(e)g(iden)m(ti\014er)e(on)h(success,)h(otherwise)f(a)g +(negativ)m(e)i(error)e(co)s(de.)236 3234 y Fo(See)35 +b(also)p 236 3288 V 236 3401 a Fn(b)s(dd)p 397 3401 28 +4 v 31 w(v)-5 b(arblo)s(c)m(k)g(all,)29 b(fdd)p 1038 +3401 V 32 w(in)m(taddv)-5 b(arblo)s(c)m(k,)29 b(b)s(dd)p +1870 3401 V 31 w(clrv)-5 b(arblo)s(c)m(ks)1962 5989 y(23)p +eop +%%Page: 24 32 +24 31 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(allsat)95 b Fn({)31 b(\014nds)e(all)g(satisfying)g(v)-5 +b(ariable)29 b(assignmen)m(ts)p 236 250 3544 12 v 236 +455 a Fm(BDD)47 b(bdd_satone\(BDD)d(r,)j(bddallsathandler)d(handler\)) +236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a +Fn(Iterates)33 b(through)e(all)g(legal)g(v)-5 b(ariable)31 +b(assignmen)m(ts)g(\(those)i(that)f(mak)m(e)h(the)f(BDD)h(come)g +(true\))f(for)236 960 y(the)h(b)s(dd)d Fm(r)i Fn(and)g(calls)g(the)h +(callbac)m(k)f(handler)f Fm(handler)f Fn(for)j(eac)m(h)g(of)g(them.)47 +b(The)32 b(arra)m(y)h(passed)f(to)236 1073 y Fm(handler)c +Fn(con)m(tains)i(one)g(en)m(try)g(for)f(eac)m(h)i(of)f(the)g(globaly)f +(de\014ned)f(v)-5 b(ariables.)39 b(Eac)m(h)30 b(en)m(try)g(is)f(either) +236 1186 y(0)i(if)e(the)i(v)-5 b(ariable)29 b(is)g(false,)i(1)g(if)e +(it)h(is)f(true,)i(and)e(-1)i(if)f(it)g(is)f(a)i(don't)f(care.)327 +1298 y(The)f(follo)m(wing)e(is)h(an)h(example)g(of)g(a)h(callbac)m(k)f +(handler)e(that)j(prin)m(ts)e('X')h(for)g(don't)g(cares,)i('0')f(for) +236 1411 y(zero,)i(and)d('1')j(for)e(one:)236 1599 y +Fm(void)47 b(allsatPrintHandler\(char*)41 b(varset,)46 +b(int)h(size\))236 1712 y({)332 1825 y(for)g(\(int)f(v=0;)h(v>)377 2063 y(bddop)p 623 2063 V 33 w(biimp)146 +b Fn(bi-implication)27 b(\()p Fj(A)f Fc(,)f Fj(B)5 b +Fn(\))297 b([1,0,0,1])377 2176 y Fm(bddop)p 623 2176 +V 33 w(diff)194 b Fn(set)31 b(di\013erence)f(\()p Fj(A)20 +b Fc(n)h Fj(B)5 b Fn(\))385 b([0,0,1,0])524 b Fm(-)377 +2289 y(bddop)p 623 2289 V 33 w(less)194 b Fn(less)30 +b(than)g(\()p Fj(A)c(<)e(B)5 b Fn(\))519 b([0,1,0,0])524 +b Fm(<)377 2402 y(bddop)p 623 2402 V 33 w(invimp)98 b +Fn(rev)m(erse)31 b(implication)d(\()p Fj(A)e Fc(\()f +Fj(B)5 b Fn(\))99 b([1,0,1,1])500 b Fm(<<)236 2658 y +Fo(Return)35 b(v)-6 b(alue)p 236 2712 3544 5 v 236 2825 +a Fn(The)30 b(result)f(of)i(the)f(op)s(eration.)236 3088 +y Fo(See)35 b(also)p 236 3142 V 236 3255 a Fn(b)s(dd)p +397 3255 28 4 v 31 w(ite)p 236 3588 3544 12 v 236 3701 +a Fo(b)s(dd)p 419 3701 32 4 v 38 w(appuni)96 b Fn({)30 +b(apply)f(op)s(eration)h(and)g(unique)e(quan)m(ti\014cation)p +236 3755 3544 12 v 236 3960 a Fm(BDD)47 b(bdd_appuni\(BDD)d(left,)i +(BDD)h(right,)f(int)h(opr,)g(BDD)g(var\))236 4185 y Fo(Description)p +236 4239 3544 5 v 236 4352 a Fn(Applies)32 b(the)i(binary)e(op)s +(erator)i Fm(opr)f Fn(to)i(the)f(argumen)m(ts)g Fm(left)e +Fn(and)i Fm(right)e Fn(and)h(then)h(p)s(erforms)e(a)236 +4465 y(unique)c(quan)m(ti\014cation)g(of)h(the)h(v)-5 +b(ariables)28 b(from)g(the)i(v)-5 b(ariable)28 b(set)i +Fm(var)p Fn(.)39 b(This)27 b(is)i(done)g(in)f(a)h(b)s(ottom)236 +4578 y(up)f(manner)g(suc)m(h)h(that)h(b)s(oth)e(the)h(apply)f(and)h +(quan)m(ti\014cation)f(is)g(done)h(on)g(the)g(lo)m(w)m(er)h(no)s(des)e +(b)s(efore)236 4691 y(stepping)d(up)g(to)i(the)g(higher)d(no)s(des.)39 +b(This)24 b(mak)m(es)j(the)g Fm(bdd)p 2321 4691 29 4 +v 33 w(appuni)e Fn(function)f(m)m(uc)m(h)j(more)f(e\016cien)m(t)236 +4804 y(than)k(an)h(apply)e(op)s(eration)g(follo)m(w)m(ed)h(b)m(y)h(a)f +(quan)m(ti\014cation.)236 5067 y Fo(Return)35 b(v)-6 +b(alue)p 236 5121 3544 5 v 236 5234 a Fn(The)30 b(result)f(of)i(the)f +(op)s(eration.)236 5497 y Fo(See)35 b(also)p 236 5552 +V 236 5665 a Fn(b)s(dd)p 397 5665 28 4 v 31 w(app)s(ex,)30 +b(b)s(dd)p 877 5665 V 31 w(appall,)f(b)s(dd)p 1362 5665 +V 30 w(apply)-8 b(,)30 b(b)s(dd)p 1816 5665 V 31 w(exist,)g(b)s(dd)p +2243 5665 V 31 w(unique,)f(b)s(dd)p 2751 5665 V 31 w(forall,)g(b)s(dd)p +3198 5665 V 31 w(mak)m(eset)1962 5989 y(27)p eop +%%Page: 28 36 +28 35 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(autoreorder)96 b Fn({)30 b(enables)g(automatic)h +(reordering)p 236 250 3544 12 v 236 455 a Fm(int)47 b +(bdd_autoreorder\(int)c(method\))236 568 y(int)k +(bdd_autoreorder_times\(int)41 b(method,)46 b(int)h(num\))236 +793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Enables)h +(automatic)j(reordering)d(using)f Fm(method)h Fn(as)i(the)f(reordering) +f(metho)s(d.)97 b(If)49 b Fm(method)e Fn(is)236 1073 +y Fm(BDD)p 386 1073 29 4 v 34 w(REORDER)p 756 1073 V +32 w(NONE)35 b Fn(then)g(automatic)i(reordering)d(is)h(disabled.)54 +b(Automatic)37 b(reordering)d(is)h(done)236 1186 y(ev)m(ery)42 +b(time)e(the)g(n)m(um)m(b)s(er)g(of)g(activ)m(e)i(no)s(des)e(in)f(the)i +(no)s(de)f(table)g(has)g(b)s(een)g(doubled)f(and)g(w)m(orks)236 +1298 y(b)m(y)i(in)m(terrupting)d(the)j(curren)m(t)f(BDD)i(op)s +(eration,)h(doing)d(the)g(reordering)g(and)g(the)h(retrying)e(the)236 +1411 y(op)s(eration.)327 1524 y(In)34 b(the)h(second)g(form)g(the)g +(argumen)m(t)g Fm(num)f Fn(sp)s(eci\014es)g(the)h(allo)m(w)m(ed)g(n)m +(um)m(b)s(er)f(of)h(reorderings.)53 b(So)236 1637 y(if)31 +b(for)h(example)f(a)h("one)h(shot")f(reordering)f(is)g(needed,)h(then)f +(the)h Fm(num)f Fn(argumen)m(t)i(w)m(ould)d(b)s(e)h(set)i(to)236 +1750 y(one.)327 1863 y(V)-8 b(alues)31 b(for)f Fm(method)e +Fn(can)j(b)s(e)f(found)f(under)g Fm(bdd)p 2025 1863 V +33 w(reorder)p Fn(.)236 2126 y Fo(Return)35 b(v)-6 b(alue)p +236 2180 3544 5 v 236 2293 a Fn(Returns)30 b(the)g(old)g(v)-5 +b(alue)30 b(of)g Fm(method)236 2557 y Fo(See)35 b(also)p +236 2611 V 236 2724 a Fn(b)s(dd)p 397 2724 28 4 v 31 +w(reorder)p 236 3057 3544 12 v 236 3170 a Fo(b)s(dd)p +419 3170 32 4 v 38 w(biimp)95 b Fn({)31 b(The)e(logical)h +('bi-implication')e(b)s(et)m(w)m(een)j(t)m(w)m(o)g(BDDs)p +236 3224 3544 12 v 236 3429 a Fm(BDD)47 b(bdd_biimp\(BDD)d(l,)j(BDD)g +(r\))236 3654 y Fo(Description)p 236 3708 3544 5 v 236 +3821 a Fn(This)29 b(a)i(wrapp)s(er)d(that)j(calls)f Fm(bdd)p +1426 3821 29 4 v 33 w(apply\(l,r,bddop)p 2179 3821 V +30 w(biimp\))p Fn(.)236 4084 y Fo(Return)35 b(v)-6 b(alue)p +236 4138 3544 5 v 236 4251 a Fn(The)30 b(logical)g('bi-implication')d +(of)k Fm(l)f Fn(and)g Fm(r)g Fn(\()p Fj(l)d Fc(,)e Fj(r)s +Fn(\).)236 4514 y Fo(See)35 b(also)p 236 4569 V 236 4681 +a Fn(b)s(dd)p 397 4681 28 4 v 31 w(apply)-8 b(,)30 b(b)s(dd)p +852 4681 V 30 w(imp)1962 5989 y(28)p eop +%%Page: 29 37 +29 36 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(blo)s(c)m(k\014le)p 832 196 V 39 w(ho)s(ok)96 +b Fn({)31 b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p +236 250 3544 12 v 236 455 a Fm(bddfilehandler)44 b +(bdd_blockfile_hook\(bddfil)o(eha)o(ndle)o(r)e(handler\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)27 +b(prin)m(ting)d(callbac)m(k)i(handler)f(is)g(used)g(to)i(con)m(v)m(ert) +h(the)f(v)-5 b(ariable)25 b(blo)s(c)m(k)g(iden)m(ti\014ers)g(in)m(to)h +(something)236 960 y(readable)d(b)m(y)g(the)g(end)g(user.)38 +b(Use)23 b Fm(bdd)p 1569 960 29 4 v 34 w(blockfile)p +2035 960 V 32 w(hook)f Fn(to)h(pass)g(a)h(handler)d(to)j(BuDDy)-8 +b(.)40 b(A)23 b(t)m(ypical)236 1073 y(handler)29 b(could)g(lo)s(ok)h +(lik)m(e)g(this:)236 1260 y Fm(void)47 b(printhandler\(FILE)c(*o,)k +(int)g(block\))236 1373 y({)379 1486 y(extern)f(char)h(**blocknames;) +379 1599 y(fprintf\(o,)e("\045s",)i(blocknames[block]\);)236 +1712 y(})236 1900 y Fn(The)42 b(handler)e(is)h(then)h(called)f(from)h +Fm(bdd)p 1743 1900 V 33 w(printorder)d Fn(and)j Fm(bdd)p +2628 1900 V 33 w(reorder)e Fn(\(dep)s(ending)g(on)i(the)236 +2012 y(v)m(erb)s(ose)36 b(lev)m(el\))g(with)f(the)h(blo)s(c)m(k)g(n)m +(um)m(b)s(ers)e(returned)h(b)m(y)h Fm(bdd)p 2466 2012 +V 33 w(addvarblock)d Fn(as)j(argumen)m(ts.)58 b(No)236 +2125 y(default)25 b(handler)f(is)g(supplied.)36 b(The)25 +b(argumen)m(t)i Fm(handler)c Fn(ma)m(y)j(b)s(e)f(NULL)h(if)f(no)g +(handler)f(is)h(needed.)236 2389 y Fo(Return)35 b(v)-6 +b(alue)p 236 2443 3544 5 v 236 2556 a Fn(The)30 b(old)g(handler)236 +2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p +397 2986 28 4 v 31 w(prin)m(torder)p 236 3337 3544 12 +v 236 3450 a Fo(b)s(dd)p 419 3450 32 4 v 38 w(buildcub)s(e)96 +b Fn({)31 b(build)c(a)k(cub)s(e)f(from)g(an)g(arra)m(y)h(of)f(v)-5 +b(ariables)p 236 3504 3544 12 v 236 3709 a Fm(BDD)47 +b(bdd_buildcube\(int)c(value,)j(int)h(width,)f(BDD)h(*var\))236 +3822 y(BDD)g(bdd_ibuildcube\(int)c(value,)j(int)h(width,)f(int)h +(*var\))236 4047 y Fo(Description)p 236 4101 3544 5 v +236 4214 a Fn(This)24 b(function)g(builds)e(a)k(cub)s(e)e(from)h(the)h +(v)-5 b(ariables)24 b(in)g Fm(var)p Fn(.)38 b(It)25 b(do)s(es)h(so)f(b) +m(y)g(in)m(terpreting)f(the)i Fm(width)236 4327 y Fn(lo)m(w)g(order)g +(bits)f(of)i Fm(value)d Fn(as)j(a)f(bit)g(mask{a)h(set)g(bit)e +(indicates)g(that)i(the)f(v)-5 b(ariable)25 b(should)g(b)s(e)g(added) +236 4440 y(in)i(it's)g(p)s(ositiv)m(e)f(form,)i(and)f(a)h(cleared)g +(bit)f(the)h(opp)s(osite.)39 b(The)27 b(most)h(signi\014can)m(t)e(bits) +h(are)h(enco)s(ded)236 4553 y(with)i(the)i(\014rst)f(v)-5 +b(ariables)30 b(in)g Fm(var)p Fn(.)43 b(Consider)29 b(as)j(an)f +(example)g(the)h(call)f Fm(bdd)p 2941 4553 29 4 v 33 +w(buildcube\(0xB,)44 b(4,)236 4665 y(var\))p Fn(.)62 +b(This)36 b(corresp)s(onds)g(to)j(the)f(expression:)54 +b Fj(v)s(ar)s Fn([0])26 b Fc(^)f(:)p Fj(v)s(ar)s Fn([1])h +Fc(^)e Fj(v)s(ar)s Fn([2])i Fc(^)f Fj(v)s(ar)s Fn([3].)64 +b(The)37 b(\014rst)236 4778 y(v)m(ersion)j(of)h(the)g(function)f(tak)m +(es)i(an)f(arra)m(y)g(of)g(BDDs,)k(whereas)40 b(the)h(second)g(tak)m +(es)h(an)f(arra)m(y)g(of)236 4891 y(v)-5 b(ariable)29 +b(n)m(um)m(b)s(ers)g(as)i(used)e(in)h Fm(bdd)p 1520 4891 +V 33 w(ithvar)p Fn(.)236 5154 y Fo(Return)35 b(v)-6 b(alue)p +236 5209 3544 5 v 236 5322 a Fn(The)30 b(resulting)f(cub)s(e)236 +5585 y Fo(See)35 b(also)p 236 5639 V 236 5752 a Fn(b)s(dd)p +397 5752 28 4 v 31 w(ith)m(v)-5 b(ar,)30 b(fdd)p 846 +5752 V 32 w(ith)m(v)-5 b(ar)1962 5989 y(29)p eop +%%Page: 30 38 +30 37 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(cac)m(hestats)96 b Fn({)31 b(F)-8 b(etc)m(h)32 +b(cac)m(he)g(access)g(usage)p 236 250 3544 12 v 236 455 +a Fm(void)47 b(bdd_cachestats\(bddCacheS)o(tat)41 b(*s\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(F)-8 +b(etc)m(hes)38 b(cac)m(he)g(usage)f(information)e(and)g(stores)i(it)e +(in)g Fm(s)p Fn(.)58 b(The)36 b(\014elds)e(of)j Fm(s)f +Fn(can)g(b)s(e)g(found)e(in)h(the)236 960 y(do)s(cumen)m(taion)k(for)h +Fm(bddCacheStat)p Fn(.)65 b(This)38 b(function)h(ma)m(y)h(or)g(ma)m(y)g +(not)g(b)s(e)f(compiled)g(in)m(to)g(the)236 1073 y(BuDDy)31 +b(pac)m(k)-5 b(age)33 b(-)d(dep)s(ending)e(on)i(the)h(setup)f(at)h +(compile)e(time)h(of)h(BuDDy)-8 b(.)236 1336 y Fo(See)35 +b(also)p 236 1390 V 236 1503 a Fn(b)s(ddCac)m(heStat,)30 +b(b)s(dd)p 1013 1503 28 4 v 31 w(prin)m(tstat)p 236 1854 +3544 12 v 236 1967 a Fo(b)s(dd)p 419 1967 32 4 v 38 w(clear)p +674 1967 V 38 w(error)96 b Fn({)31 b(clears)f(an)g(error)g(condition)f +(in)g(the)i(k)m(ernel)p 236 2021 3544 12 v 236 2226 a +Fm(void)47 b(bdd_clear_error\(void\))236 2451 y Fo(Description)p +236 2505 3544 5 v 236 2618 a Fn(The)28 b(BuDDy)h(k)m(ernel)f(ma)m(y)i +(at)f(some)g(p)s(oin)m(t)e(run)g(out)i(of)g(new)f(R)m(OBDD)h(no)s(des)f +(if)f(a)i(maxim)m(um)f(limit)236 2731 y(is)37 b(set)g(with)f +Fm(bdd)p 847 2731 29 4 v 34 w(setmaxnodenum)p Fn(.)58 +b(In)36 b(this)g(case)i(the)g(curren)m(t)f(error)g(handler)e(is)h +(called)h(and)g(an)236 2844 y(in)m(ternal)27 b(error)h(\015ag)h(is)e +(set.)41 b(F)-8 b(urther)28 b(calls)f(to)i(BuDDy)g(will)d(alw)m(a)m(ys) +j(return)e Fm(bddfalse)p Fn(.)38 b(F)-8 b(rom)29 b(here)236 +2957 y(BuDDy)j(m)m(ust)g(either)f(b)s(e)f(restarted)i(or)g +Fm(bdd)p 1828 2957 V 33 w(clear)p 2101 2957 V 33 w(error)e +Fn(ma)m(y)j(b)s(e)d(called)h(after)h(action)g(is)e(tak)m(en)236 +3070 y(to)g(let)e(BuDDy)i(con)m(tin)m(ue.)40 b(This)27 +b(ma)m(y)j(not)f(b)s(e)f(esp)s(ecially)f(usefull)f(since)i(the)h +(default)f(error)g(handler)236 3182 y(exits)i(the)h(program)f(-)h +(other)f(needs)g(ma)m(y)h(of)g(course)f(exist.)236 3446 +y Fo(See)35 b(also)p 236 3500 3544 5 v 236 3613 a Fn(b)s(dd)p +397 3613 28 4 v 31 w(error)p 621 3613 V 32 w(ho)s(ok,)c(b)s(dd)p +1057 3613 V 31 w(setmaxno)s(den)m(um)p 236 3964 3544 +12 v 236 4077 a Fo(b)s(dd)p 419 4077 32 4 v 38 w(clrv)-6 +b(arblo)s(c)m(ks)98 b Fn({)30 b(clears)h(all)e(v)-5 b(ariable)29 +b(blo)s(c)m(ks)p 236 4131 3544 12 v 236 4336 a Fm(void)47 +b(bdd_clrvarblocks\(void\))236 4561 y Fo(Description)p +236 4615 3544 5 v 236 4728 a Fn(Clears)30 b(all)f(the)i(v)-5 +b(ariable)29 b(blo)s(c)m(ks)h(that)g(has)h(b)s(een)e(de\014ned)g(b)m(y) +i(calls)e(to)i(b)s(dd)p 2902 4728 28 4 v 31 w(addv)-5 +b(arblo)s(c)m(k.)236 4991 y Fo(See)35 b(also)p 236 5045 +3544 5 v 236 5158 a Fn(b)s(dd)p 397 5158 28 4 v 31 w(addv)-5 +b(arblo)s(c)m(k)1962 5989 y(30)p eop +%%Page: 31 39 +31 38 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(comp)s(ose)96 b Fn({)30 b(functional)f(comp)s(osition)p +236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_compose\(BDD)d(f,)j(BDD)g +(g,)g(int)g(var\))236 680 y Fo(Description)p 236 734 +3544 5 v 236 847 a Fn(Substitutes)29 b(the)i(v)-5 b(ariable)29 +b Fm(var)g Fn(with)g(the)i(BDD)g Fm(g)f Fn(in)g(the)g(BDD)i +Fm(f)p Fn(:)40 b(result)29 b(=)c Fj(f)10 b Fn([)p Fj(g)s(=v)s(ar)s +Fn(].)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 +V 236 1277 a Fn(The)30 b(comp)s(osed)g(BDD)236 1540 y +Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p +397 1707 28 4 v 31 w(v)m(eccomp)s(ose,)d(b)s(dd)p 1102 +1707 V 31 w(replace,)f(b)s(dd)p 1623 1707 V 30 w(restrict)p +236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 +4 v 38 w(constrain)96 b Fn({)31 b(generalized)f(cofactor)p +236 2225 3544 12 v 236 2430 a Fm(BDD)47 b(bdd_constrain\(BDD)c(f,)k +(BDD)g(c\))236 2655 y Fo(Description)p 236 2709 3544 +5 v 236 2822 a Fn(Computes)30 b(the)h(generalized)f(cofactor)i(of)e +Fm(f)g Fn(with)f(resp)s(ect)i(to)g Fm(c)p Fn(.)236 3086 +y Fo(Return)k(v)-6 b(alue)p 236 3140 V 236 3253 a Fn(The)30 +b(constrained)g(BDD)236 3516 y Fo(See)35 b(also)p 236 +3570 V 236 3683 a Fn(b)s(dd)p 397 3683 28 4 v 31 w(restrict,)30 +b(b)s(dd)p 923 3683 V 31 w(simplify)1962 5989 y(31)p +eop +%%Page: 32 40 +32 39 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(delref)95 b Fn({)31 b(decreases)g(the)g(reference)g +(coun)m(t)g(on)f(a)h(no)s(de)p 236 250 3544 12 v 236 +455 a Fm(BDD)47 b(bdd_delref\(BDD)d(r\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Reference)28 b(coun)m(ting)f(is)f(done)h +(on)g(externaly)g(referenced)g(no)s(des)f(only)g(and)h(the)g(coun)m(t)g +(for)g(a)h(sp)s(eci\014c)236 960 y(no)s(de)k Fm(r)g Fn(can)h(and)f(m)m +(ust)h(b)s(e)e(decreased)j(using)d(this)g(function)g(to)j(mak)m(e)f(it) +f(p)s(ossible)e(to)k(reclaim)d(the)236 1073 y(no)s(de)f(in)f(the)i +(next)f(garbage)i(collection.)236 1336 y Fo(Return)j(v)-6 +b(alue)p 236 1390 V 236 1503 a Fn(The)30 b(BDD)i(no)s(de)d +Fm(r)p Fn(.)236 1766 y Fo(See)35 b(also)p 236 1820 V +236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(addref)p +236 2266 3544 12 v 236 2379 a Fo(b)s(dd)p 419 2379 32 +4 v 38 w(disable)p 771 2379 V 38 w(reorder)96 b Fn({)30 +b(Disable)g(automatic)h(reordering)p 236 2434 3544 12 +v 236 2638 a Fm(void)47 b(bdd_disable_reorder\(void)o(\))236 +2863 y Fo(Description)p 236 2918 3544 5 v 236 3031 a +Fn(Disables)29 b(automatic)i(reordering)e(un)m(til)g +Fm(bdd)p 1823 3031 29 4 v 33 w(enable)p 2144 3031 V 33 +w(reorder)f Fn(is)h(called.)40 b(Reordering)29 b(is)g(enabled)236 +3143 y(b)m(y)h(default)g(as)h(so)s(on)f(as)g(an)m(y)h(v)-5 +b(ariable)29 b(blo)s(c)m(ks)h(ha)m(v)m(e)i(b)s(een)d(de\014ned.)236 +3407 y Fo(See)35 b(also)p 236 3461 3544 5 v 236 3574 +a Fn(b)s(dd)p 397 3574 28 4 v 31 w(enable)p 681 3574 +V 32 w(reorder)p 236 3907 3544 12 v 236 4020 a Fo(b)s(dd)p +419 4020 32 4 v 38 w(done)61 b Fn({)31 b(resets)g(the)f(b)s(dd)e(pac)m +(k)-5 b(age)p 236 4074 3544 12 v 236 4279 a Fm(void)47 +b(bdd_done\(void\))236 4504 y Fo(Description)p 236 4558 +3544 5 v 236 4671 a Fn(This)37 b(function)g(frees)h(all)g(memory)g +(used)f(b)m(y)i(the)f(b)s(dd)f(pac)m(k)-5 b(age)40 b(and)e(resets)h +(the)f(pac)m(k)-5 b(age)41 b(to)e(it's)236 4784 y(initial)28 +b(state.)236 5047 y Fo(See)35 b(also)p 236 5101 V 236 +5214 a Fn(b)s(dd)p 397 5214 28 4 v 31 w(init)1962 5989 +y(32)p eop +%%Page: 33 41 +33 40 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(enable)p 749 196 V 37 w(reorder)96 b +Fn({)31 b(Enables)e(automatic)j(reordering)p 236 250 +3544 12 v 236 455 a Fm(void)47 b(bdd_enable_reorder\(void\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Re-enables)31 +b(reordering)e(after)i(a)f(call)g(to)h Fm(bdd)p 1846 +847 29 4 v 34 w(disable)p 2216 847 V 32 w(reorder)p Fn(.)236 +1110 y Fo(See)k(also)p 236 1164 3544 5 v 236 1277 a Fn(b)s(dd)p +397 1277 28 4 v 31 w(disable)p 703 1277 V 31 w(reorder)p +236 1610 3544 12 v 236 1723 a Fo(b)s(dd)p 419 1723 32 +4 v 38 w(error)p 686 1723 V 38 w(ho)s(ok)96 b Fn({)31 +b(set)g(a)g(handler)d(for)i(error)g(conditions)p 236 +1777 3544 12 v 236 1982 a Fm(bddinthandler)44 b +(bdd_error_hook\(bddinthandl)o(er)d(handler\))236 2207 +y Fo(Description)p 236 2262 3544 5 v 236 2374 a Fn(Whenev)m(er)35 +b(an)e(error)g(o)s(ccurs)h(in)e(the)i(b)s(dd)d(pac)m(k)-5 +b(age)36 b(a)e(test)h(is)d(done)i(to)g(see)g(if)f(an)g(error)h(handler) +d(is)236 2487 y(supplied)k(b)m(y)j(the)h(user)f(and)f(if)h(suc)m(h)g +(exists)g(then)g(it)g(will)d(b)s(e)j(called)f(with)h(an)g(error)g(co)s +(de)g(in)f(the)236 2600 y(v)-5 b(ariable)29 b Fm(errcode)p +Fn(.)38 b(The)30 b(handler)d(ma)m(y)k(then)e(prin)m(t)g(an)m(y)h +(usefull)d(information)h(and)h(return)g(or)h(exit)236 +2713 y(afterw)m(ards.)327 2826 y(This)h(function)h(sets)h(the)g +(handler)e(to)j(b)s(e)e Fm(handler)p Fn(.)47 b(If)32 +b(a)h Fm(NULL)f Fn(argumen)m(t)h(is)f(supplied)e(then)j(no)236 +2939 y(calls)26 b(are)h(made)f(when)g(an)g(error)h(o)s(ccurs.)39 +b(P)m(ossible)25 b(error)h(co)s(des)h(are)g(found)e(in)g +Fm(bdd.h)p Fn(.)38 b(The)26 b(default)236 3052 y(handler)j(is)g +Fm(bdd)p 806 3052 29 4 v 34 w(default)p 1176 3052 V 32 +w(errhandler)f Fn(whic)m(h)h(will)f(use)i Fm(exit\(\))e +Fn(to)j(terminate)g(the)f(program.)327 3165 y(An)m(y)h(handler)d +(should)g(b)s(e)i(de\014ned)f(lik)m(e)h(this:)236 3352 +y Fm(void)47 b(my_error_handler\(int)42 b(errcode\))236 +3465 y({)379 3578 y(...)236 3691 y(})236 4029 y Fo(Return)35 +b(v)-6 b(alue)p 236 4083 3544 5 v 236 4196 a Fn(The)30 +b(previous)f(handler)236 4459 y Fo(See)35 b(also)p 236 +4514 V 236 4626 a Fn(b)s(dd)p 397 4626 28 4 v 31 w(errstring)1962 +5989 y(33)p eop +%%Page: 34 42 +34 41 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(errstring)96 b Fn({)31 b(con)m(v)m(erts)g(an)g(error)f +(co)s(de)g(to)h(a)g(string)p 236 250 3544 12 v 236 455 +a Fm(const)47 b(char)f(*bdd_errstring\(int)d(errorcode\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Con)m(v)m(erts)25 +b(a)g(negativ)m(e)g(error)f(co)s(de)g Fm(errorcode)e +Fn(to)j(a)f(descriptiv)m(e)g(string)f(that)h(can)h(b)s(e)f(used)f(for)h +(error)236 960 y(handling.)236 1223 y Fo(Return)35 b(v)-6 +b(alue)p 236 1277 V 236 1390 a Fn(An)30 b(error)g(description)f(string) +g(if)g Fm(e)h Fn(is)g(kno)m(wn,)g(otherwise)g Fm(NULL)p +Fn(.)236 1653 y Fo(See)35 b(also)p 236 1707 V 236 1820 +a Fn(b)s(dd)p 397 1820 28 4 v 31 w(err)p 540 1820 V 32 +w(ho)s(ok)p 236 2154 3544 12 v 236 2266 a Fo(b)s(dd)p +419 2266 32 4 v 38 w(exist)95 b Fn({)31 b(existen)m(tial)f(quan)m +(ti\014cation)g(of)g(v)-5 b(ariables)p 236 2321 3544 +12 v 236 2526 a Fm(BDD)47 b(bdd_exist\(BDD)d(r,)j(BDD)g(var\))236 +2751 y Fo(Description)p 236 2805 3544 5 v 236 2918 a +Fn(Remo)m(v)m(es)32 b(all)e(o)s(ccurences)g(in)f Fm(r)h +Fn(of)h(v)-5 b(ariables)29 b(in)g(the)i(set)f Fm(var)g +Fn(b)m(y)g(existen)m(tial)g(quan)m(ti\014cation.)236 +3181 y Fo(Return)35 b(v)-6 b(alue)p 236 3235 V 236 3348 +a Fn(The)30 b(quan)m(ti\014ed)f(BDD.)236 3611 y Fo(See)35 +b(also)p 236 3665 V 236 3778 a Fn(b)s(dd)p 397 3778 28 +4 v 31 w(forall,)29 b(b)s(dd)p 844 3778 V 31 w(unique,)g(b)s(dd)p +1352 3778 V 31 w(mak)m(eset)p 236 4129 3544 12 v 236 +4242 a Fo(b)s(dd)p 419 4242 32 4 v 38 w(extv)-6 b(arn)m(um)95 +b Fn({)31 b(add)e(extra)i(BDD)h(v)-5 b(ariables)p 236 +4296 3544 12 v 236 4501 a Fm(int)47 b(bdd_extvarnum\(int)c(num\))236 +4726 y Fo(Description)p 236 4780 3544 5 v 236 4893 a +Fn(Extends)30 b(the)h(curren)m(t)f(n)m(um)m(b)s(er)f(of)h(allo)s(cated) +h(BDD)g(v)-5 b(ariables)29 b(with)g Fm(num)h Fn(extra)h(v)-5 +b(ariables.)236 5156 y Fo(Return)35 b(v)-6 b(alue)p 236 +5211 V 236 5323 a Fn(The)30 b(old)g(n)m(um)m(b)s(er)f(of)h(allo)s +(cated)h(v)-5 b(ariables)29 b(or)h(a)h(negativ)m(e)g(error)f(co)s(de.) +236 5587 y Fo(See)35 b(also)p 236 5641 V 236 5754 a Fn(b)s(dd)p +397 5754 28 4 v 31 w(setv)-5 b(arn)m(um,)30 b(b)s(dd)p +1049 5754 V 31 w(ith)m(v)-5 b(ar,)30 b(b)s(dd)p 1524 +5754 V 31 w(nith)m(v)-5 b(ar)1962 5989 y(34)p eop +%%Page: 35 43 +35 42 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(false)95 b Fn({)31 b(returns)e(the)i(constan)m(t)h +(false)e(b)s(dd)p 236 250 3544 12 v 236 455 a Fm(BDD)47 +b(bdd_false\(void\))236 680 y Fo(Description)p 236 734 +3544 5 v 236 847 a Fn(This)39 b(function)g(returns)g(the)h(constan)m(t) +i(false)e(b)s(dd)e(and)h(can)i(freely)f(b)s(e)f(used)h(together)h(with) +e(the)236 960 y Fm(bddtrue)29 b Fn(and)g Fm(bddfalse)f +Fn(constan)m(ts.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p +236 1277 V 236 1390 a Fn(The)30 b(constan)m(t)i(false)e(b)s(dd)236 +1653 y Fo(See)35 b(also)p 236 1707 V 236 1820 a Fn(b)s(dd)p +397 1820 28 4 v 31 w(true,)30 b(b)s(ddtrue,)f(b)s(ddfalse)p +236 2171 3544 12 v 236 2284 a Fo(b)s(dd)p 419 2284 32 +4 v 38 w(\014le)p 592 2284 V 38 w(ho)s(ok)96 b Fn({)31 +b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p +236 2338 3544 12 v 236 2543 a Fm(bddfilehandler)44 b +(bdd_file_hook\(bddfilehand)o(ler)d(handler\))236 2768 +y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(A)23 +b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(BDDs)i(is)e +(used)f(to)j(con)m(v)m(ert)g(the)f(BDD)h(v)-5 b(ariable)22 +b(n)m(um)m(b)s(er)236 3048 y(in)m(to)34 b(something)e(readable)h(b)m(y) +h(the)f(end)g(user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin) +m(t)i(a)i(string)e(name)236 3161 y(instead)e(of)g(the)h(n)m(um)m(b)s +(er.)39 b(A)31 b(handler)d(could)i(lo)s(ok)g(lik)m(e)f(this:)236 +3349 y Fm(void)47 b(printhandler\(FILE)c(*o,)k(int)g(var\))236 +3462 y({)379 3575 y(extern)f(char)h(**names;)379 3687 +y(fprintf\(o,)e("\045s",)i(names[var]\);)236 3800 y(})236 +3988 y Fn(The)30 b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g +(lik)m(e)f(this:)39 b Fm(bdd)p 2510 3988 29 4 v 34 w(file)p +2736 3988 V 33 w(hook\(printhandler\))p Fn(.)327 4101 +y(No)33 b(default)e(handler)g(is)g(supplied.)43 b(The)32 +b(argumen)m(t)h Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h +(handler)e(is)236 4214 y(needed.)236 4477 y Fo(Return)35 +b(v)-6 b(alue)p 236 4531 3544 5 v 236 4644 a Fn(The)30 +b(old)g(handler)236 4907 y Fo(See)35 b(also)p 236 4962 +V 236 5074 a Fn(b)s(dd)p 397 5074 28 4 v 31 w(prin)m(tset,)30 +b(b)s(dd)p 946 5074 V 31 w(strm)p 1160 5074 V 32 w(ho)s(ok,)g(fdd)p +1569 5074 V 32 w(\014le)p 1718 5074 V 32 w(ho)s(ok)1962 +5989 y(35)p eop +%%Page: 36 44 +36 43 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(forall)96 b Fn({)30 b(univ)m(ersal)f(quan)m +(ti\014cation)h(of)g(v)-5 b(ariables)p 236 250 3544 12 +v 236 455 a Fm(BDD)47 b(bdd_forall\(BDD)d(r,)j(BDD)g(var\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Remo)m(v)m(es)32 +b(all)e(o)s(ccurences)g(in)f Fm(r)h Fn(of)h(v)-5 b(ariables)29 +b(in)g(the)i(set)f Fm(var)g Fn(b)m(y)g(univ)m(ersal)f(quan)m +(ti\014cation.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p +236 1164 V 236 1277 a Fn(The)30 b(quan)m(ti\014ed)f(BDD.)236 +1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p +397 1707 28 4 v 31 w(exist,)30 b(b)s(dd)p 824 1707 V +31 w(unique,)f(b)s(dd)p 1332 1707 V 31 w(mak)m(eset)p +236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 +4 v 38 w(freepair)95 b Fn({)31 b(frees)f(a)h(table)f(of)h(pairs)p +236 2225 3544 12 v 236 2430 a Fm(void)47 b(bdd_freepair\(bddPair)42 +b(*pair\))236 2655 y Fo(Description)p 236 2709 3544 5 +v 236 2822 a Fn(F)-8 b(rees)32 b(the)e(table)g(of)h(pairs)e +Fm(pair)g Fn(that)i(has)f(b)s(een)g(allo)s(cated)g(b)m(y)g(a)h(call)f +(to)h Fm(bdd)p 2992 2822 29 4 v 34 w(newpair)p Fn(.)236 +3086 y Fo(See)k(also)p 236 3140 3544 5 v 236 3253 a Fn(b)s(dd)p +397 3253 28 4 v 31 w(replace,)c(b)s(dd)p 918 3253 V 30 +w(newpair,)e(b)s(dd)p 1473 3253 V 31 w(setpair,)h(b)s(dd)p +1984 3253 V 31 w(resetpair)p 236 3604 3544 12 v 236 3717 +a Fo(b)s(dd)p 419 3717 32 4 v 38 w(fullsatone)96 b Fn({)30 +b(\014nds)f(one)i(satisfying)e(v)-5 b(ariable)29 b(assignmen)m(t)p +236 3771 3544 12 v 236 3976 a Fm(BDD)47 b(bdd_fullsatone\(BDD)c(r\))236 +4201 y Fo(Description)p 236 4255 3544 5 v 236 4368 a +Fn(Finds)29 b(a)i(BDD)h(with)e(exactly)h(one)g(v)-5 b(ariable)30 +b(at)h(all)f(lev)m(els.)41 b(This)29 b(BDD)j(implies)c +Fm(r)i Fn(and)g(is)g(not)h(false)236 4481 y(unless)e +Fm(r)h Fn(is)f(false.)236 4744 y Fo(Return)35 b(v)-6 +b(alue)p 236 4798 V 236 4911 a Fn(The)30 b(result)f(of)i(the)f(op)s +(eration.)236 5174 y Fo(See)35 b(also)p 236 5228 V 236 +5341 a Fn(b)s(dd)p 397 5341 28 4 v 31 w(allsat)30 b(b)s(dd)p +827 5341 V 31 w(satone,)h(b)s(dd)p 1322 5341 V 31 w(satoneset,)h(b)s +(dd)p 1929 5341 V 31 w(satcoun)m(t,)g(b)s(dd)p 2508 5341 +V 31 w(satcoun)m(tln)1962 5989 y(36)p eop +%%Page: 37 45 +37 44 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(gb)s(c)p 616 196 V 38 w(ho)s(ok)97 b +Fn({)30 b(set)h(a)g(handler)d(for)j(garbage)g(collections)p +236 250 3544 12 v 236 455 a Fm(bddgbchandler)44 b +(bdd_gbc_hook\(bddgbchandler)d(handler\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Whenev)m(er)26 b(a)f(garbage)h +(collection)e(is)g(required,)g(a)h(test)h(is)e(done)g(to)i(see)f(if)f +(a)h(handler)e(for)h(this)g(ev)m(en)m(t)i(is)236 960 +y(supplied)g(b)m(y)j(the)g(user)f(and)g(if)g(suc)m(h)h(exists)g(then)f +(it)h(is)f(called,)g(b)s(oth)h(b)s(efore)f(and)h(after)g(the)g(garbage) +236 1073 y(collection)38 b(tak)m(es)j(places.)65 b(This)36 +b(is)i(indicated)f(b)m(y)i(an)f(in)m(teger)h(\015ag)g +Fm(pre)f Fn(passed)g(to)h(the)g(handler,)236 1186 y(whic)m(h)29 +b(will)f(b)s(e)i(one)g(b)s(efore)g(garbage)i(collection)e(and)g(zero)h +(after)g(garbage)h(collection.)327 1298 y(This)f(function)h(sets)h(the) +g(handler)e(to)j(b)s(e)e Fm(handler)p Fn(.)47 b(If)32 +b(a)h Fm(NULL)f Fn(argumen)m(t)h(is)f(supplied)e(then)j(no)236 +1411 y(calls)28 b(are)h(made)g(when)f(a)h(garbage)h(collection)e(tak)m +(es)i(place.)40 b(The)29 b(argumen)m(t)g Fm(pre)f Fn(indicates)f(pre)h +(vs.)236 1524 y(p)s(ost)36 b(garbage)i(collection)e(and)f(the)i +(argumen)m(t)g Fm(stat)e Fn(con)m(tains)h(information)f(ab)s(out)h(the) +g(garbage)236 1637 y(collection.)41 b(The)29 b(default)h(handler)f(is)g +Fm(bdd)p 1738 1637 29 4 v 34 w(default)p 2108 1637 V +32 w(gbchandler)p Fn(.)327 1750 y(An)m(y)i(handler)d(should)g(b)s(e)i +(de\014ned)f(lik)m(e)h(this:)236 1938 y Fm(void)47 b +(my_gbc_handler\(int)c(pre,)j(bddGbcStat)f(*stat\))236 +2051 y({)379 2164 y(...)236 2276 y(})236 2614 y Fo(Return)35 +b(v)-6 b(alue)p 236 2669 3544 5 v 236 2781 a Fn(The)30 +b(previous)f(handler)236 3045 y Fo(See)35 b(also)p 236 +3099 V 236 3212 a Fn(b)s(dd)p 397 3212 28 4 v 31 w(resize)p +646 3212 V 33 w(ho)s(ok,)30 b(b)s(dd)p 1082 3212 V 31 +w(reorder)p 1397 3212 V 32 w(ho)s(ok)p 236 3563 3544 +12 v 236 3676 a Fo(b)s(dd)p 419 3676 32 4 v 38 w(getallo)s(cn)m(um)95 +b Fn({)31 b(get)g(the)g(n)m(um)m(b)s(er)e(of)i(allo)s(cated)f(no)s(des) +p 236 3730 3544 12 v 236 3935 a Fm(int)47 b(bdd_getallocnum\(void\))236 +4160 y Fo(Description)p 236 4214 3544 5 v 236 4327 a +Fn(Returns)40 b(the)h(n)m(um)m(b)s(er)e(of)i(no)s(des)e(curren)m(tly)h +(allo)s(cated.)71 b(This)39 b(includes)f(b)s(oth)i(dead)g(and)g(activ)m +(e)236 4440 y(no)s(des.)236 4703 y Fo(Return)35 b(v)-6 +b(alue)p 236 4757 V 236 4870 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(no)s +(des.)236 5133 y Fo(See)k(also)p 236 5187 V 236 5300 +a Fn(b)s(dd)p 397 5300 28 4 v 31 w(getno)s(den)m(um,)30 +b(b)s(dd)p 1124 5300 V 31 w(setmaxno)s(den)m(um)1962 +5989 y(37)p eop +%%Page: 38 46 +38 45 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(getno)s(den)m(um)95 b Fn({)31 b(get)g(the)g(n)m(um)m(b) +s(er)e(of)h(activ)m(e)i(no)s(des)e(in)f(use)p 236 250 +3544 12 v 236 455 a Fm(int)47 b(bdd_getnodenum\(void\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)32 +b(the)g(n)m(um)m(b)s(er)f(of)h(no)s(des)g(in)f(the)h(no)s(detable)g +(that)g(are)h(curren)m(tly)e(in)g(use.)46 b(Note)34 b(that)f(dead)236 +960 y(no)s(des)d(that)h(ha)m(v)m(e)g(not)g(b)s(een)f(reclaimed)f(y)m +(et)i(b)m(y)g(a)f(garbage)i(collection)e(are)h(coun)m(ted)g(as)f(activ) +m(e.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 +V 236 1390 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(no)s(des.)236 +1653 y Fo(See)k(also)p 236 1707 V 236 1820 a Fn(b)s(dd)p +397 1820 28 4 v 31 w(getallo)s(cn)m(um,)30 b(b)s(dd)p +1119 1820 V 31 w(setmaxno)s(den)m(um)p 236 2171 3544 +12 v 236 2284 a Fo(b)s(dd)p 419 2284 32 4 v 38 w(getreorder)p +933 2284 V 38 w(metho)s(d)94 b Fn({)31 b(F)-8 b(etc)m(h)32 +b(the)f(curren)m(t)f(reorder)g(metho)s(d)p 236 2338 3544 +12 v 236 2543 a Fm(int)47 b(bdd_getreorder_method\(voi)o(d\))236 +2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a +Fn(Returns)30 b(the)g(curren)m(t)g(reorder)g(metho)s(d)g(as)h +(de\014ned)e(b)m(y)h Fm(bdd)p 2400 2935 29 4 v 34 w(autoreorder)p +Fn(.)236 3198 y Fo(See)35 b(also)p 236 3253 3544 5 v +236 3366 a Fn(b)s(dd)p 397 3366 28 4 v 31 w(reorder,)30 +b(b)s(dd)p 923 3366 V 31 w(getreorder)p 1358 3366 V 33 +w(times)p 236 3717 3544 12 v 236 3829 a Fo(b)s(dd)p 419 +3829 32 4 v 38 w(getreorder)p 933 3829 V 38 w(times)94 +b Fn({)31 b(F)-8 b(etc)m(h)32 b(the)f(curren)m(t)f(n)m(um)m(b)s(er)f +(of)i(allo)m(w)m(ed)f(reorderings)p 236 3884 3544 12 +v 236 4089 a Fm(int)47 b(bdd_getreorder_times\(void)o(\))236 +4313 y Fo(Description)p 236 4368 3544 5 v 236 4481 a +Fn(Returns)40 b(the)i(curren)m(t)e(n)m(um)m(b)s(er)g(of)h(allo)m(w)m +(ed)g(reorderings)f(left.)72 b(This)40 b(v)-5 b(alue)40 +b(can)h(b)s(e)g(de\014ned)f(b)m(y)236 4594 y Fm(bdd)p +386 4594 29 4 v 34 w(autoreorder)p 948 4594 V 31 w(times)p +Fn(.)236 4857 y Fo(See)35 b(also)p 236 4911 3544 5 v +236 5024 a Fn(b)s(dd)p 397 5024 28 4 v 31 w(reorder)p +712 5024 V 32 w(times,)30 b(b)s(dd)p 1168 5024 V 31 w(getreorder)p +1603 5024 V 34 w(metho)s(d)1962 5989 y(38)p eop +%%Page: 39 47 +39 46 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(high)96 b Fn({)31 b(gets)g(the)g(true)f(branc)m(h)g(of) +g(a)h(b)s(dd)p 236 250 3544 12 v 236 455 a Fm(BDD)47 +b(bdd_high\(BDD)e(r\))236 680 y Fo(Description)p 236 +734 3544 5 v 236 847 a Fn(Gets)31 b(the)g(true)f(branc)m(h)g(of)h(the)f +(b)s(dd)e Fm(r)p Fn(.)236 1110 y Fo(Return)35 b(v)-6 +b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(b)s(dd)e(of)j(the)g(true)f +(branc)m(h)236 1540 y Fo(See)35 b(also)p 236 1595 V 236 +1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(lo)m(w)p 236 +2041 3544 12 v 236 2154 a Fo(b)s(dd)p 419 2154 32 4 v +38 w(imp)95 b Fn({)30 b(The)g(logical)g('implication')e(b)s(et)m(w)m +(een)j(t)m(w)m(o)h(BDDs)p 236 2208 3544 12 v 236 2413 +a Fm(BDD)47 b(bdd_imp\(BDD)e(l,)i(BDD)g(r\))236 2638 +y Fo(Description)p 236 2692 3544 5 v 236 2805 a Fn(This)29 +b(a)i(wrapp)s(er)d(that)j(calls)f Fm(bdd)p 1426 2805 +29 4 v 33 w(apply\(l,r,bddop)p 2179 2805 V 30 w(imp\))p +Fn(.)236 3068 y Fo(Return)35 b(v)-6 b(alue)p 236 3122 +3544 5 v 236 3235 a Fn(The)30 b(logical)g('implication')e(of)j +Fm(l)f Fn(and)g Fm(r)g Fn(\()p Fj(l)d Fc(\))e Fj(r)s +Fn(\).)236 3498 y Fo(See)35 b(also)p 236 3552 V 236 3665 +a Fn(b)s(dd)p 397 3665 28 4 v 31 w(apply)-8 b(,)30 b(b)s(dd)p +852 3665 V 30 w(biimp)1962 5989 y(39)p eop +%%Page: 40 48 +40 47 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(init)95 b Fn({)31 b(initializes)d(the)i(BDD)i(pac)m(k) +-5 b(age)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_init\(int)e +(nodesize,)g(int)i(cachesize\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(This)39 b(function)g(initiates)g(the)i(b) +s(dd)d(pac)m(k)-5 b(age)43 b(and)c Ff(must)i Fn(b)s(e)f(called)g(b)s +(efore)g(an)m(y)h(b)s(dd)d(op)s(erations)236 960 y(are)g(done.)60 +b(The)37 b(argumen)m(t)g Fm(nodesize)e Fn(is)h(the)h(initial)e(n)m(um)m +(b)s(er)g(of)j(no)s(des)e(in)f(the)j(no)s(detable)e(and)236 +1073 y Fm(cachesize)28 b Fn(is)i(the)g(\014xed)g(size)h(of)f(the)h(in)m +(ternal)e(cac)m(hes.)43 b(T)m(ypical)29 b(v)-5 b(alues)30 +b(for)g Fm(nodesize)e Fn(are)j(10000)236 1186 y(no)s(des)h(for)h(small) +f(test)h(examples)g(and)f(up)g(to)i(1000000)i(no)s(des)c(for)h(large)g +(examples.)48 b(A)33 b(cac)m(he)i(size)236 1298 y(of)h(10000)i(seems)e +(to)g(w)m(ork)g(go)s(o)s(d)g(ev)m(en)g(for)g(large)f(examples,)i(but)e +(lesser)g(v)-5 b(alues)35 b(should)f(do)h(it)h(for)236 +1411 y(smaller)29 b(examples.)327 1524 y(The)c(n)m(um)m(b)s(er)f(of)h +(cac)m(he)i(en)m(tries)e(can)h(also)f(b)s(e)g(set)h(to)g(dep)s(end)d +(on)j(the)f(size)g(of)h(the)f(no)s(detable)g(using)236 +1637 y(a)31 b(call)f(to)h Fm(bdd)p 740 1637 29 4 v 33 +w(setcacheratio)p Fn(.)327 1750 y(The)36 b(initial)d(n)m(um)m(b)s(er)i +(of)i(no)s(des)e(is)g(not)i(critical)e(for)h(an)m(y)h(b)s(dd)d(op)s +(eration)h(as)i(the)f(table)h(will)c(b)s(e)236 1863 y(resized)g(whenev) +m(er)g(there)g(are)h(to)f(few)g(no)s(des)g(left)f(after)i(a)g(garbage)g +(collection.)48 b(But)34 b(it)e(do)s(es)h(ha)m(v)m(e)236 +1976 y(some)e(impact)f(on)g(the)h(e\016cency)g(of)g(the)f(op)s +(erations.)236 2239 y Fo(Return)35 b(v)-6 b(alue)p 236 +2293 3544 5 v 236 2406 a Fn(If)30 b(no)g(errors)g(o)s(ccur)g(then)h(0)f +(is)g(returned,)f(otherwise)h(a)h(negativ)m(e)g(error)f(co)s(de.)236 +2669 y Fo(See)35 b(also)p 236 2724 V 236 2837 a Fn(b)s(dd)p +397 2837 28 4 v 31 w(done,)30 b(b)s(dd)p 826 2837 V 31 +w(resize)p 1075 2837 V 33 w(ho)s(ok)p 236 3187 3544 12 +v 236 3300 a Fo(b)s(dd)p 419 3300 32 4 v 38 w(isrunning)96 +b Fn({)31 b(test)g(whether)f(the)h(pac)m(k)-5 b(age)32 +b(is)e(started)g(or)h(not)p 236 3355 3544 12 v 236 3559 +a Fm(void)47 b(bdd_isrunning\(void\))236 3784 y Fo(Description)p +236 3839 3544 5 v 236 3952 a Fn(This)29 b(function)g(tests)i(the)g(in)m +(ternal)e(state)i(of)g(the)f(pac)m(k)-5 b(age)33 b(and)d(returns)f(a)i +(status.)236 4215 y Fo(Return)k(v)-6 b(alue)p 236 4269 +V 236 4382 a Fn(1)31 b(\(true\))g(if)e(the)i(pac)m(k)-5 +b(age)32 b(has)e(b)s(een)g(started,)h(otherwise)f(0.)236 +4645 y Fo(See)35 b(also)p 236 4699 V 236 4812 a Fn(b)s(dd)p +397 4812 28 4 v 31 w(init,)29 b(b)s(dd)p 776 4812 V 31 +w(done)1962 5989 y(40)p eop +%%Page: 41 49 +41 48 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(ite)95 b Fn({)31 b(if-then-else)e(op)s(erator)p +236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_ite\(BDD)e(f,)i(BDD)g(g,)g +(BDD)g(h\))236 680 y Fo(Description)p 236 734 3544 5 +v 236 847 a Fn(Calculates)31 b(the)h(BDD)g(for)f(the)h(expression)e(\() +p Fj(f)g Fc(^)21 b Fj(g)s Fn(\))g Fc(_)g Fn(\()p Fc(:)p +Fj(f)30 b Fc(^)20 b Fj(h)p Fn(\))32 b(more)g(e\016cien)m(tly)f(than)g +(doing)f(the)236 960 y(three)39 b(op)s(erations)e(separately)-8 +b(.)66 b Fm(bdd)p 1562 960 29 4 v 33 w(ite)38 b Fn(can)g(also)g(b)s(e)g +(used)g(for)g(conjunction,)h(disjunction)d(and)236 1073 +y(an)m(y)31 b(other)g(b)s(o)s(olean)e(op)s(erator,)i(but)f(is)f(not)i +(as)f(e\016cien)m(t)h(for)f(the)h(binary)d(and)i(unary)f(op)s +(erations.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 +1390 3544 5 v 236 1503 a Fn(The)30 b(BDD)i(for)e(\()p +Fj(f)g Fc(^)19 b Fj(g)s Fn(\))j Fc(_)d Fn(\()p Fc(:)p +Fj(f)30 b Fc(^)20 b Fj(h)p Fn(\))236 1766 y Fo(See)35 +b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 +4 v 31 w(apply)p 236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p +419 2397 32 4 v 38 w(ith)m(v)-6 b(ar)96 b Fn({)30 b(returns)f(a)i(b)s +(dd)e(represen)m(ting)g(the)i(I'th)f(v)-5 b(ariable)p +236 2451 3544 12 v 236 2656 a Fm(BDD)47 b(bdd_ithvar\(int)d(var\))236 +2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a +Fn(This)26 b(function)h(is)g(used)g(to)i(get)g(a)f(b)s(dd)e(represen)m +(ting)i(the)g(I'th)g(v)-5 b(ariable)26 b(\(one)j(no)s(de)e(with)g(the)h +(c)m(hilds)236 3161 y(true)38 b(and)f(false\).)62 b(The)37 +b(requested)g(v)-5 b(ariable)37 b(m)m(ust)g(b)s(e)g(in)f(the)i(range)g +(de\014ne)f(b)m(y)g Fm(bdd)p 3322 3161 29 4 v 34 w(setvarnum)236 +3274 y Fn(starting)e(with)f(0)i(b)s(eing)e(the)i(\014rst.)55 +b(F)-8 b(or)36 b(ease)g(of)g(use)f(then)g(the)g(b)s(dd)f(returned)g +(from)h Fm(bdd)p 3466 3274 V 33 w(ithvar)236 3387 y Fn(do)s(es)i(not)g +(ha)m(v)m(e)i(to)f(b)s(e)e(referenced)h(coun)m(ted)h(with)e(a)h(call)g +(to)h Fm(bdd)p 2606 3387 V 33 w(addref)p Fn(.)60 b(The)36 +b(initial)f(v)-5 b(ariable)236 3500 y(order)29 b(is)f(de\014ned)f(b)m +(y)i(the)g(the)g(index)f Fm(var)g Fn(that)h(also)g(de\014nes)f(the)h(p) +s(osition)e(in)h(the)h(v)-5 b(ariable)28 b(order)g({)236 +3613 y(v)-5 b(ariables)29 b(with)g(lo)m(w)m(er)i(indecies)e(are)i(b)s +(efore)f(those)g(with)g(higher)f(indecies.)236 3876 y +Fo(Return)35 b(v)-6 b(alue)p 236 3930 3544 5 v 236 4043 +a Fn(The)30 b(I'th)g(v)-5 b(ariable)29 b(on)i(succes,)g(otherwise)f +(the)g(constan)m(t)i(false)e(b)s(dd)236 4306 y Fo(See)35 +b(also)p 236 4360 V 236 4473 a Fn(b)s(dd)p 397 4473 28 +4 v 31 w(setv)-5 b(arn)m(um,)30 b(b)s(dd)p 1049 4473 +V 31 w(nith)m(v)-5 b(ar,)30 b(b)s(ddtrue,)e(b)s(ddfalse)1962 +5989 y(41)p eop +%%Page: 42 50 +42 49 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(lev)m(el2v)-6 b(ar)96 b Fn({)31 b(F)-8 +b(etc)m(h)32 b(the)f(v)-5 b(ariable)29 b(n)m(um)m(b)s(er)g(of)h(a)h(sp) +s(eci\014c)e(lev)m(el)p 236 250 3544 12 v 236 455 a Fm(int)47 +b(bdd_level2var\(int)c(level\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Returns)30 b(the)g(v)-5 +b(ariable)29 b(placed)h(at)h(p)s(osition)e Fm(level)g +Fn(in)g(the)h(curren)m(t)h(v)-5 b(ariable)29 b(order.)236 +1110 y Fo(See)35 b(also)p 236 1164 V 236 1277 a Fn(b)s(dd)p +397 1277 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 1277 +V 31 w(v)-5 b(ar2lev)m(el)p 236 1628 3544 12 v 236 1741 +a Fo(b)s(dd)p 419 1741 32 4 v 38 w(load)96 b Fn({)30 +b(loads)g(a)h(BDD)h(from)d(a)i(\014le)p 236 1795 3544 +12 v 236 2000 a Fm(int)47 b(bdd_fnload\(char)d(*fname,)i(BDD)g(*r\))236 +2113 y(int)h(bdd_load\(FILE)d(*ifile,)i(BDD)h(*r\))236 +2338 y Fo(Description)p 236 2392 3544 5 v 236 2505 a +Fn(Loads)37 b(a)f(BDD)i(from)e(a)g(\014le)g(in)m(to)g(the)g(BDD)i(p)s +(oin)m(ted)d(to)i(b)m(y)f Fm(r)p Fn(.)59 b(The)35 b(\014le)h(can)g +(either)g(b)s(e)g(the)g(\014le)236 2618 y Fm(ifile)e +Fn(whic)m(h)h(m)m(ust)g(b)s(e)h(op)s(ened)e(for)i(reading)f(or)g(the)h +(\014le)f(named)g Fm(fname)g Fn(whic)m(h)f(will)f(b)s(e)i(op)s(ened)236 +2731 y(automatically)30 b(for)h(reading.)327 2844 y(The)k(input)e +(\014le)h(format)h(consists)f(of)h(in)m(tegers)g(arranged)g(in)f(the)h +(follo)m(wing)e(manner.)54 b(First)34 b(the)236 2957 +y(n)m(um)m(b)s(er)d(of)h(no)s(des)g Fj(N)42 b Fn(used)31 +b(b)m(y)h(the)g(BDD)h(and)f(then)g(the)g(n)m(um)m(b)s(er)f(of)h(v)-5 +b(ariables)31 b Fj(V)52 b Fn(allo)s(cated)32 b(and)236 +3070 y(the)j(v)-5 b(ariable)34 b(ordering)g(in)f(use)i(at)g(the)g(time) +g(the)g(BDD)h(w)m(as)f(sa)m(v)m(ed.)56 b(If)34 b Fj(N)45 +b Fn(and)34 b Fj(V)55 b Fn(are)36 b(b)s(oth)e(zero)236 +3182 y(then)27 b(the)g(BDD)h(is)e(either)g(the)h(constan)m(t)h(true)f +(or)g(false)f(BDD,)i(indicated)e(b)m(y)h(a)g(1)g(or)g(a)g(0)g(as)g(the) +g(next)236 3295 y(in)m(teger.)327 3408 y(In)e(an)m(y)h(other)g(case)h +(the)e(next)h Fj(N)36 b Fn(sets)26 b(of)f(4)h(in)m(tegers)g(will)d +(describ)s(e)h(the)i(no)s(des)f(used)g(b)m(y)g(the)h(BDD.)236 +3521 y(Eac)m(h)h(set)f(consists)g(of)g(\014rst)f(the)h(no)s(de)f(n)m +(um)m(b)s(er,)h(then)g(the)g(v)-5 b(ariable)25 b(n)m(um)m(b)s(er)f(and) +i(then)f(the)h(lo)m(w)g(and)236 3634 y(high)j(no)s(des.)327 +3747 y(The)36 b(no)s(des)f Ff(must)i Fn(b)s(e)e(sa)m(v)m(ed)i(in)e(a)i +(order)e(suc)m(h)h(that)h(an)m(y)f(lo)m(w)g(or)g(high)f(no)s(de)g(m)m +(ust)h(b)s(e)g(de\014ned)236 3860 y(b)s(efore)30 b(it)g(is)g(men)m +(tioned.)236 4123 y Fo(Return)35 b(v)-6 b(alue)p 236 +4177 V 236 4290 a Fn(Zero)31 b(on)f(succes,)h(otherwise)f(an)g(error)g +(co)s(de)g(from)g Fm(bdd.h)p Fn(.)236 4553 y Fo(See)35 +b(also)p 236 4608 V 236 4721 a Fn(b)s(dd)p 397 4721 28 +4 v 31 w(sa)m(v)m(e)1962 5989 y(42)p eop +%%Page: 43 51 +43 50 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(lo)m(w)95 b Fn({)31 b(gets)h(the)e(false)g(branc)m(h)g +(of)g(a)h(b)s(dd)p 236 250 3544 12 v 236 455 a Fm(BDD)47 +b(bdd_low\(BDD)e(r\))236 680 y Fo(Description)p 236 734 +3544 5 v 236 847 a Fn(Gets)31 b(the)g(false)f(branc)m(h)g(of)g(the)h(b) +s(dd)d Fm(r)p Fn(.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p +236 1164 V 236 1277 a Fn(The)30 b(b)s(dd)e(of)j(the)g(false)f(branc)m +(h)236 1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 +a Fn(b)s(dd)p 397 1707 28 4 v 31 w(high)p 236 2058 3544 +12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 4 v 38 w(mak)m(eset)94 +b Fn({)31 b(builds)c(a)k(BDD)h(v)-5 b(ariable)29 b(set)i(from)f(an)g +(in)m(teger)h(arra)m(y)p 236 2225 3544 12 v 236 2430 +a Fm(BDD)47 b(bdd_makeset\(int)d(*v,)j(int)g(n\))236 +2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a +Fn(Reads)23 b(a)f(set)h(of)g(v)-5 b(ariable)21 b(n)m(um)m(b)s(ers)g +(from)h(the)g(in)m(teger)h(arra)m(y)g Fm(v)f Fn(whic)m(h)f(m)m(ust)h +(hold)f(exactly)i Fm(n)f Fn(in)m(tegers)236 2935 y(and)30 +b(then)g(builds)d(a)k(BDD)h(represen)m(ting)d(the)i(v)-5 +b(ariable)29 b(set.)327 3048 y(The)41 b(BDD)i(v)-5 b(ariable)40 +b(set)i(is)f(represen)m(ted)h(as)f(the)h(conjunction)f(of)h(all)e(the)i +(v)-5 b(ariables)40 b(in)g(their)236 3161 y(p)s(ositiv)m(e)32 +b(form)g(and)f(ma)m(y)j(just)d(as)i(w)m(ell)f(b)s(e)f(made)i(that)g(w)m +(a)m(y)g(b)m(y)g(the)f(user.)47 b(The)32 b(user)f(should)g(k)m(eep)236 +3274 y(a)g(reference)g(to)g(the)f(returned)g(BDD)h(instead)f(of)g +(building)d(it)j(ev)m(ery)h(time)f(the)h(set)g(is)e(needed.)236 +3537 y Fo(Return)35 b(v)-6 b(alue)p 236 3591 V 236 3704 +a Fn(A)31 b(BDD)g(v)-5 b(ariable)29 b(set.)236 3968 y +Fo(See)35 b(also)p 236 4022 V 236 4135 a Fn(b)s(dd)p +397 4135 28 4 v 31 w(scanset)1962 5989 y(43)p eop +%%Page: 44 52 +44 51 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(newpair)95 b Fn({)31 b(creates)g(an)g(empt)m(y)g(v)-5 +b(ariable)29 b(pair)g(table)p 236 250 3544 12 v 236 455 +a Fm(bddPair)46 b(*bdd_newpair\(void\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(V)-8 b(ariable)32 b(pairs)g(of)h(the)g(t) +m(yp)s(e)g Fm(bddPair)d Fn(are)k(used)e(in)f Fm(bdd)p +2284 847 29 4 v 34 w(replace)f Fn(to)k(de\014ne)e(whic)m(h)f(v)-5 +b(ariables)32 b(to)236 960 y(replace)g(with)e(other)i(v)-5 +b(ariables.)43 b(This)30 b(function)g(allo)s(cates)i(suc)m(h)f(an)g +(empt)m(y)h(table.)45 b(The)31 b(table)g(can)236 1073 +y(b)s(e)f(freed)g(b)m(y)g(a)h(call)f(to)h Ff(b)-5 b(dd)p +1200 1073 28 4 v 34 w(fr)g(e)g(ep)g(air)p Fn(.)236 1336 +y Fo(Return)35 b(v)-6 b(alue)p 236 1390 3544 5 v 236 +1503 a Fn(Returns)30 b(a)g(new)g(table)h(of)f(pairs.)236 +1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p +397 1933 28 4 v 31 w(freepair,)30 b(b)s(dd)p 941 1933 +V 30 w(replace,)h(b)s(dd)p 1461 1933 V 31 w(setpair,)f(b)s(dd)p +1972 1933 V 30 w(setpairs)p 236 2284 3544 12 v 236 2397 +a Fo(b)s(dd)p 419 2397 32 4 v 38 w(nith)m(v)-6 b(ar)96 +b Fn({)30 b(returns)g(a)g(b)s(dd)f(represen)m(ting)g(the)i(negation)g +(of)f(the)h(I'th)f(v)-5 b(ariable)p 236 2451 3544 12 +v 236 2656 a Fm(BDD)47 b(bdd_nithvar\(int)d(var\))236 +2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a +Fn(This)26 b(function)g(is)g(used)h(to)h(get)h(a)e(b)s(dd)f(represen)m +(ting)g(the)i(negation)g(of)f(the)h(I'th)f(v)-5 b(ariable)26 +b(\(one)i(no)s(de)236 3161 y(with)37 b(the)h(c)m(hilds)e(false)h(and)g +(true\).)63 b(The)38 b(requested)f(v)-5 b(ariable)37 +b(m)m(ust)h(b)s(e)f(in)f(the)i(range)h(de\014ne)e(b)m(y)236 +3274 y Fm(bdd)p 386 3274 29 4 v 34 w(setvarnum)24 b Fn(starting)i(with) +f(0)h(b)s(eing)f(the)i(\014rst.)38 b(F)-8 b(or)27 b(ease)h(of)e(use)g +(then)g(the)h(b)s(dd)d(returned)h(from)236 3387 y Fm(bdd)p +386 3387 V 34 w(nithvar)j Fn(do)s(es)i(not)h(ha)m(v)m(e)g(to)h(b)s(e)d +(referenced)i(coun)m(ted)f(with)g(a)g(call)g(to)h Fm(bdd)p +3073 3387 V 34 w(addref)p Fn(.)236 3650 y Fo(Return)k(v)-6 +b(alue)p 236 3704 3544 5 v 236 3817 a Fn(The)30 b(negated)h(I'th)g(v)-5 +b(ariable)29 b(on)h(succes,)h(otherwise)f(the)g(constan)m(t)i(false)e +(b)s(dd)236 4080 y Fo(See)35 b(also)p 236 4135 V 236 +4248 a Fn(b)s(dd)p 397 4248 28 4 v 31 w(setv)-5 b(arn)m(um,)30 +b(b)s(dd)p 1049 4248 V 31 w(ith)m(v)-5 b(ar,)30 b(b)s(ddtrue,)f(b)s +(ddfalse)1962 5989 y(44)p eop +%%Page: 45 53 +45 52 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(no)s(decoun)m(t)96 b Fn({)31 b(coun)m(ts)g(the)g(n)m +(um)m(b)s(er)e(of)h(no)s(des)g(used)f(for)h(a)h(BDD)p +236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_nodecount\(BDD)c(r\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(T)-8 +b(ra)m(v)m(erses)32 b(the)e(BDD)i(and)e(coun)m(ts)h(all)e(distinct)g +(no)s(des)g(that)i(are)g(used)e(for)i(the)f(BDD.)236 +1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 +a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(no)s(des.)236 1540 +y Fo(See)k(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 +1707 28 4 v 31 w(pathcoun)m(t,)c(b)s(dd)p 1041 1707 V +31 w(satcoun)m(t,)h(b)s(dd)p 1620 1707 V 31 w(ano)s(decoun)m(t)p +236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 +4 v 38 w(not)95 b Fn({)31 b(negates)h(a)f(b)s(dd)p 236 +2225 3544 12 v 236 2430 a Fm(BDD)47 b(bdd_not\(BDD)e(r\))236 +2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a +Fn(Negates)38 b(the)d(BDD)i Fm(r)e Fn(b)m(y)g(exc)m(hanging)h(all)e +(references)h(to)h(the)g(zero-terminal)f(with)f(references)i(to)236 +2935 y(the)31 b(one-terminal)e(and)h(vice)g(v)m(ersa.)236 +3198 y Fo(Return)35 b(v)-6 b(alue)p 236 3253 V 236 3366 +a Fn(The)30 b(negated)h(b)s(dd.)p 236 3717 3544 12 v +236 3829 a Fo(b)s(dd)p 419 3829 32 4 v 38 w(or)96 b Fn({)31 +b(The)e(logical)h('or')h(of)g(t)m(w)m(o)g(BDDs)p 236 +3884 3544 12 v 236 4089 a Fm(BDD)47 b(bdd_or\(BDD)e(l,)i(BDD)g(r\))236 +4313 y Fo(Description)p 236 4368 3544 5 v 236 4481 a +Fn(This)29 b(a)i(wrapp)s(er)d(that)j(calls)f Fm(bdd)p +1426 4481 29 4 v 33 w(apply\(l,r,bddop)p 2179 4481 V +30 w(or\))p Fn(.)236 4744 y Fo(Return)35 b(v)-6 b(alue)p +236 4798 3544 5 v 236 4911 a Fn(The)30 b(logical)g('or')h(of)f +Fm(l)g Fn(and)g Fm(r)p Fn(.)236 5174 y Fo(See)35 b(also)p +236 5228 V 236 5341 a Fn(b)s(dd)p 397 5341 28 4 v 31 +w(apply)-8 b(,)30 b(b)s(dd)p 852 5341 V 30 w(xor,)h(b)s(dd)p +1223 5341 V 31 w(and)1962 5989 y(45)p eop +%%Page: 46 54 +46 53 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(pathcoun)m(t)96 b Fn({)31 b(coun)m(t)g(the)f(n)m(um)m +(b)s(er)f(of)i(paths)f(leading)f(to)i(the)f(true)h(terminal)p +236 250 3544 12 v 236 455 a Fm(double)46 b(bdd_pathcount\(BDD)d(r\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Coun)m(ts)30 +b(the)h(n)m(um)m(b)s(er)e(of)h(paths)g(from)g(the)h(ro)s(ot)g(no)s(de)e +Fm(r)h Fn(leading)f(to)j(the)e(terminal)f(true)h(no)s(de.)236 +1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 +a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(paths)236 1540 y +Fo(See)k(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 +1707 28 4 v 31 w(no)s(decoun)m(t,)c(b)s(dd)p 1049 1707 +V 30 w(satcoun)m(t)p 236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p +419 2171 32 4 v 38 w(prin)m(tall)95 b Fn({)31 b(prin)m(ts)e(all)g(used) +h(en)m(tries)g(in)f(the)i(no)s(de)e(table)p 236 2225 +3544 12 v 236 2430 a Fm(void)47 b(bdd_printall\(void\))236 +2543 y(void)g(bdd_fprintall\(FILE*)42 b(ofile\))236 2768 +y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(Prin)m(ts)31 +b(to)h(either)f(stdout)h(or)g(the)g(\014le)e Fm(ofile)h +Fn(all)f(the)i(used)f(en)m(tries)g(in)g(the)h(main)e(no)s(de)h(table.) +45 b(The)236 3048 y(format)31 b(is:)327 3251 y Fm([Nodenum])45 +b(Var/level)h(Low)h(High)236 3457 y Fn(Where)34 b Fm(Nodenum)e +Fn(is)h(the)i(p)s(osition)d(in)g(the)i(no)s(de)g(table)g(and)f(lev)m +(el)h(is)f(the)h(p)s(osition)e(in)h(the)h(curren)m(t)236 +3570 y(v)-5 b(ariable)29 b(order.)236 3833 y Fo(See)35 +b(also)p 236 3887 V 236 4000 a Fn(b)s(dd)p 397 4000 28 +4 v 31 w(prin)m(ttable,)29 b(b)s(dd)p 1031 4000 V 31 +w(prin)m(tset,)h(b)s(dd)p 1580 4000 V 31 w(prin)m(tdot)1962 +5989 y(46)p eop +%%Page: 47 55 +47 54 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(prin)m(tdot)95 b Fn({)31 b(prin)m(ts)e(a)i(description) +d(of)j(a)g(BDD)g(in)e(DOT)h(format)p 236 250 3544 12 +v 236 455 a Fm(void)47 b(bdd_printdot\(BDD)c(r\))236 +568 y(int)k(bdd_fnprintdot\(char*)42 b(fname,)k(BDD)h(r\))236 +681 y(void)g(bdd_fprintdot\(FILE*)42 b(ofile,)k(BDD)h(r\))236 +906 y Fo(Description)p 236 960 3544 5 v 236 1073 a Fn(Prin)m(ts)26 +b(a)h(BDD)h(in)d(a)j(format)f(suitable)e(for)i(use)f(with)g(the)h +(graph)f(dra)m(wing)f(program)i(DOT)f(to)i(either)236 +1186 y(stdout,)h(a)f(designated)f(\014le)g Fm(ofile)f +Fn(or)h(the)h(\014le)f(named)g(b)m(y)g Fm(fname)p Fn(.)39 +b(In)27 b(the)h(last)f(case)i(the)e(\014le)g(will)e(b)s(e)236 +1298 y(op)s(ened)30 b(for)g(writing,)f(an)m(y)h(previous)f(con)m(ten)m +(ts)j(destro)m(y)m(ed)g(and)d(then)h(closed)h(again.)236 +1562 y Fo(See)k(also)p 236 1616 V 236 1729 a Fn(b)s(dd)p +397 1729 28 4 v 31 w(prin)m(tall,)28 b(b)s(dd)p 930 1729 +V 31 w(prin)m(ttable,)h(b)s(dd)p 1564 1729 V 31 w(prin)m(tset)p +236 2080 3544 12 v 236 2193 a Fo(b)s(dd)p 419 2193 32 +4 v 38 w(prin)m(torder)96 b Fn({)31 b(prin)m(ts)d(the)j(curren)m(t)f +(order)p 236 2247 3544 12 v 236 2452 a Fm(void)47 b +(bdd_printorder\(void\))236 2565 y(bdd_fprint_order\(FILE)42 +b(*f\))236 2790 y Fo(Description)p 236 2844 3544 5 v +236 2957 a Fn(Prin)m(ts)28 b(an)i(inden)m(ted)e(list)g(of)h(the)h(v)-5 +b(ariable)28 b(blo)s(c)m(ks,)h(sho)m(wing)f(the)i(top)f(most)h(blo)s(c) +m(ks)f(to)h(the)f(left)g(and)236 3070 y(the)i(lo)m(w)m(er)f(blo)s(c)m +(ks)g(to)h(the)g(righ)m(t.)40 b(Example:)332 3370 y Fm(2{)475 +3483 y(0)475 3596 y(1)332 3709 y(2})332 3822 y(3)332 +3935 y(4)236 4122 y Fn(This)d(sho)m(ws)i(5)h(v)-5 b(ariable)37 +b(blo)s(c)m(ks.)66 b(The)39 b(\014rst)f(one)h(added)g(is)f(blo)s(c)m(k) +g(zero,)k(whic)m(h)c(is)g(on)h(the)g(same)236 4235 y(lev)m(el)d(as)h +(blo)s(c)m(k)e(one.)59 b(These)36 b(t)m(w)m(o)i(blo)s(c)m(ks)d(are)i +(then)f(sub-blo)s(c)m(ks)f(of)h(blo)s(c)m(k)g(t)m(w)m(o)h(and)f(blo)s +(c)m(k)g(t)m(w)m(o)h(is)236 4348 y(on)31 b(the)g(same)g(lev)m(el)f(as)h +(blo)s(c)m(k)g(three)g(and)f(four.)41 b(The)30 b(n)m(um)m(b)s(ers)f +(are)j(the)f(iden)m(ti\014ers)d(returned)i(from)236 4461 +y Fm(bdd)p 386 4461 29 4 v 34 w(addvarblock)p Fn(.)37 +b(The)30 b(blo)s(c)m(k)g(lev)m(els)g(dep)s(ends)f(on)h(the)g(v)-5 +b(ariables)29 b(included)f(in)h(the)i(blo)s(c)m(ks.)236 +4724 y Fo(See)k(also)p 236 4778 3544 5 v 236 4891 a Fn(b)s(dd)p +397 4891 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 4891 +V 31 w(addv)-5 b(arblo)s(c)m(k)1962 5989 y(47)p eop +%%Page: 48 56 +48 55 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(prin)m(tset)95 b Fn({)31 b(prin)m(ts)e(the)h(set)h(of)g +(truth)f(assignmen)m(ts)g(sp)s(eci\014ed)e(b)m(y)j(a)f(BDD)p +236 250 3544 12 v 236 455 a Fm(bdd_printset\(BDD)44 b(r\))236 +568 y(bdd_fprintset\(FILE*)f(ofile,)j(BDD)h(r\))236 793 +y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Prin)m(ts)29 +b(all)h(the)g(truth)g(assignmen)m(ts)g(for)g Fm(r)g Fn(that)h(w)m(ould) +e(yield)g(it)h(true.)40 b(The)30 b(format)h(is:)327 1128 +y Fm(<)48 b Fj(x)475 1142 y Fh(1)p Fi(;)p Fh(1)594 1128 +y Fn(:)26 b Fj(c)684 1142 y Fh(1)p Fi(;)p Fh(1)778 1128 +y Fj(;)15 b(:)g(:)g(:)i(;)e(x)1032 1142 y Fh(1)p Fi(;n)1130 +1151 y Fa(1)1194 1128 y Fn(:)25 b Fj(c)1283 1142 y Fh(1)p +Fi(;n)1381 1151 y Fa(1)1468 1128 y Fm(>)327 1240 y(<)48 +b Fj(x)475 1254 y Fh(2)p Fi(;)p Fh(1)594 1240 y Fn(:)26 +b Fj(c)684 1254 y Fh(2)p Fi(;)p Fh(1)778 1240 y Fj(;)15 +b(:)g(:)g(:)i(;)e(x)1032 1254 y Fh(2)p Fi(;n)1130 1263 +y Fa(2)1194 1240 y Fn(:)25 b Fj(c)1283 1254 y Fh(2)p +Fi(;n)1381 1263 y Fa(2)1468 1240 y Fm(>)327 1353 y Fj(:)15 +b(:)g(:)327 1466 y Fm(<)48 b Fj(x)475 1480 y Fi(N)s(;)p +Fh(1)618 1466 y Fn(:)26 b Fj(c)708 1480 y Fi(N)s(;)p +Fh(1)826 1466 y Fj(;)15 b(:)g(:)g(:)i(;)e(x)1080 1480 +y Fi(N)s(;n)1202 1489 y Fa(3)1266 1466 y Fn(:)25 b Fj(c)1355 +1480 y Fi(N)s(;n)1477 1489 y Fa(3)1564 1466 y Fm(>)236 +1661 y Fn(Where)i(the)g Fj(x)p Fn('s)g(are)g(v)-5 b(ariable)25 +b(n)m(um)m(b)s(ers)g(\(and)i(the)f(p)s(osition)f(in)g(the)i(curren)m(t) +g(order\))f(and)g(the)h Fj(c)p Fn('s)g(are)236 1774 y(the)f(p)s +(ossible)e(assignmen)m(ts)i(to)h(these.)39 b(Eac)m(h)27 +b(set)g(of)f(brac)m(k)m(ets)i(designates)e(one)g(p)s(ossible)e +(assignmen)m(t)236 1887 y(to)31 b(the)e(set)i(of)e(v)-5 +b(ariables)29 b(that)h(mak)m(e)h(up)d(the)i(BDD.)h(All)d(v)-5 +b(ariables)29 b(not)h(sho)m(wn)f(are)h(don't)f(cares.)41 +b(It)236 2000 y(is)29 b(p)s(ossible)e(to)k(sp)s(ecify)d(a)i(callbac)m +(k)g(handler)e(for)h(prin)m(ting)f(of)h(the)h(v)-5 b(ariables)29 +b(using)f Fm(bdd)p 3336 2000 29 4 v 33 w(file)p 3561 +2000 V 34 w(hook)236 2113 y Fn(or)j Fm(bdd)p 498 2113 +V 33 w(strm)p 723 2113 V 33 w(hook)p Fn(.)236 2376 y +Fo(See)k(also)p 236 2430 3544 5 v 236 2543 a Fn(b)s(dd)p +397 2543 28 4 v 31 w(prin)m(tall,)28 b(b)s(dd)p 930 2543 +V 31 w(prin)m(ttable,)h(b)s(dd)p 1564 2543 V 31 w(prin)m(tdot,)h(b)s +(dd)p 2133 2543 V 30 w(\014le)p 2280 2543 V 32 w(ho)s(ok,)h(b)s(dd)p +2716 2543 V 30 w(strm)p 2929 2543 V 33 w(ho)s(ok)p 236 +2894 3544 12 v 236 3007 a Fo(b)s(dd)p 419 3007 32 4 v +38 w(prin)m(tstat)95 b Fn({)31 b(prin)m(t)e(cac)m(he)j(statistics)p +236 3061 3544 12 v 236 3266 a Fm(void)47 b(bdd_printstat\(void\))236 +3379 y(void)g(bdd_fprintstat\(FILE)42 b(*ofile\))236 +3604 y Fo(Description)p 236 3658 3544 5 v 236 3771 a +Fn(Prin)m(ts)26 b(information)e(ab)s(out)j(the)f(cac)m(he)i(p)s +(erformance)e(on)g(standard)g(output)g(\(or)h(the)g(supplied)c +(\014le\).)236 3884 y(The)28 b(information)f(con)m(tains)i(the)g(n)m +(um)m(b)s(er)e(of)i(accesses)h(to)f(the)g(unique)d(no)s(de)i(table,)h +(the)g(n)m(um)m(b)s(er)e(of)236 3997 y(times)33 b(a)h(no)s(de)f(w)m(as) +h(\(not\))g(found)f(there)g(and)g(ho)m(w)h(man)m(y)f(times)g(a)h(hash)f +(c)m(hain)g(had)g(to)h(tra)m(v)m(ersed.)236 4110 y(Hit)c(and)g(miss)f +(coun)m(t)i(is)f(also)g(giv)m(en)g(for)g(the)h(op)s(erator)g(cac)m +(hes.)236 4373 y Fo(See)k(also)p 236 4427 V 236 4540 +a Fn(b)s(ddCac)m(heStat,)30 b(b)s(dd)p 1013 4540 28 4 +v 31 w(cac)m(hestats)1962 5989 y(48)p eop +%%Page: 49 57 +49 56 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(prin)m(ttable)95 b Fn({)31 b(prin)m(ts)e(the)h(no)s(de) +g(table)g(en)m(tries)g(used)g(b)m(y)g(a)h(BDD)p 236 250 +3544 12 v 236 455 a Fm(void)47 b(bdd_printtable\(BDD)c(r\))236 +568 y(void)k(bdd_fprinttable\(FILE*)42 b(ofile,)k(BDD)h(r\))236 +793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Prin)m(ts)30 +b(to)j(either)d(stdout)i(or)f(the)h(\014le)e Fm(ofile)g +Fn(all)g(the)i(en)m(tries)f(in)f(the)i(main)e(no)s(de)g(table)i(used)e +(b)m(y)i Fm(r)p Fn(.)236 1073 y(The)e(format)h(is:)327 +1276 y Fm([Nodenum])45 b(Var/level)h(:)95 b(Low)47 b(High)236 +1481 y Fn(Where)34 b Fm(Nodenum)e Fn(is)h(the)i(p)s(osition)d(in)g(the) +i(no)s(de)g(table)g(and)f(lev)m(el)h(is)f(the)h(p)s(osition)e(in)h(the) +h(curren)m(t)236 1594 y(v)-5 b(ariable)29 b(order.)236 +1857 y Fo(See)35 b(also)p 236 1911 V 236 2024 a Fn(b)s(dd)p +397 2024 28 4 v 31 w(prin)m(tall,)28 b(b)s(dd)p 930 2024 +V 31 w(prin)m(tset,)i(b)s(dd)p 1479 2024 V 31 w(prin)m(tdot)p +236 2375 3544 12 v 236 2488 a Fo(b)s(dd)p 419 2488 32 +4 v 38 w(relpro)s(d)96 b Fn({)31 b(relational)e(pro)s(duct)p +236 2542 3544 12 v 236 2747 a Fm(#define)46 b(bdd_relprod\(a,b,var\))c +(bdd_appex\(a,b,bddop_and,v)o(ar\))236 2972 y Fo(Description)p +236 3026 3544 5 v 236 3139 a Fn(Calculates)22 b(the)g(relational)f(pro) +s(duct)g(of)h Fm(a)g Fn(and)f Fm(b)h Fn(as)g Fm(a)47 +b(AND)g(b)22 b Fn(with)f(the)h(v)-5 b(ariables)21 b(in)f +Fm(var)i Fn(quan)m(ti\014ed)236 3252 y(out)31 b(afterw)m(ards.)236 +3515 y Fo(Return)k(v)-6 b(alue)p 236 3570 V 236 3683 +a Fn(The)30 b(relational)f(pro)s(duct)h(or)g Fm(bddfalse)e +Fn(on)i(errors.)236 3946 y Fo(See)35 b(also)p 236 4000 +V 236 4113 a Fn(b)s(dd)p 397 4113 28 4 v 31 w(app)s(ex)1962 +5989 y(49)p eop +%%Page: 50 58 +50 57 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(reorder)96 b Fn({)31 b(start)f(dynamic)g(reordering)p +236 250 3544 12 v 236 455 a Fm(void)47 b(bdd_reorder\(int)c(method\)) +236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a +Fn(This)34 b(function)g(initiates)f(dynamic)h(reordering)g(using)g(the) +h(heuristic)f(de\014ned)g(b)m(y)h Fm(method)p Fn(,)g(whic)m(h)236 +960 y(ma)m(y)c(b)s(e)f(one)h(of)f(the)h(follo)m(wing)282 +1147 y Fm(BDD)p 432 1147 29 4 v 33 w(REORDER)p 801 1147 +V 33 w(WIN2)463 1260 y Fn(Reordering)40 b(using)f(a)i(sliding)c(windo)m +(w)i(of)i(size)f(2.)72 b(This)39 b(algorithm)g(sw)m(aps)h(t)m(w)m(o)i +(adjacen)m(t)463 1373 y(v)-5 b(ariable)35 b(blo)s(c)m(ks)h(and)g(if)f +(this)g(results)g(in)g(more)h(no)s(des)g(then)f(the)i(t)m(w)m(o)g(blo)s +(c)m(ks)f(are)h(sw)m(app)s(ed)463 1486 y(bac)m(k)29 b(again.)40 +b(Otherwise)27 b(the)h(result)f(is)f(k)m(ept)j(in)e(the)h(v)-5 +b(ariable)26 b(order.)40 b(This)26 b(is)h(then)g(rep)s(eated)463 +1599 y(for)k(all)e(v)-5 b(ariable)29 b(blo)s(c)m(ks.)282 +1787 y Fm(BDD)p 432 1787 V 33 w(REORDER)p 801 1787 V +33 w(WIN2ITE)463 1900 y Fn(The)39 b(same)h(as)f(ab)s(o)m(v)m(e)i(but)d +(the)i(pro)s(cess)e(is)h(rep)s(eated)g(un)m(til)e(no)i(further)f +(progress)h(is)f(done.)463 2012 y(Usually)29 b(a)i(fast)g(and)f +(e\016cien)m(t)g(metho)s(d.)282 2200 y Fm(BDD)p 432 2200 +V 33 w(REORDER)p 801 2200 V 33 w(WIN3)463 2313 y Fn(The)g(same)h(as)g +(ab)s(o)m(v)m(e)g(but)f(with)f(a)i(windo)m(w)e(size)h(of)g(3.)282 +2501 y Fm(BDD)p 432 2501 V 33 w(REORDER)p 801 2501 V +33 w(WIN2ITE)463 2614 y Fn(The)g(same)h(as)g(ab)s(o)m(v)m(e)g(but)f +(with)f(a)i(windo)m(w)e(size)h(of)g(3.)282 2801 y Fm(BDD)p +432 2801 V 33 w(REORDER)p 801 2801 V 33 w(SIFT)463 2914 +y Fn(Reordering)36 b(where)f(eac)m(h)j(blo)s(c)m(k)d(is)h(mo)m(v)m(ed)h +(through)e(all)g(p)s(ossible)f(p)s(ositions.)56 b(The)36 +b(b)s(est)f(of)463 3027 y(these)c(is)f(then)g(used)f(as)i(the)g(new)e +(p)s(osition.)39 b(P)m(oten)m(tially)31 b(a)f(v)m(ery)h(slo)m(w)f(but)g +(go)s(o)s(d)g(metho)s(d.)282 3215 y Fm(BDD)p 432 3215 +V 33 w(REORDER)p 801 3215 V 33 w(SIFTITE)463 3328 y Fn(The)25 +b(same)g(as)g(ab)s(o)m(v)m(e)h(but)f(the)g(pro)s(cess)f(is)g(rep)s +(eated)h(un)m(til)e(no)i(further)f(progress)g(is)g(done.)39 +b(Can)463 3440 y(b)s(e)30 b(extremely)h(slo)m(w.)282 +3628 y Fm(BDD)p 432 3628 V 33 w(REORDER)p 801 3628 V +33 w(RANDOM)463 3741 y Fn(Mostly)d(used)f(for)g(debugging)g(purp)s +(ose,)f(but)h(ma)m(y)h(b)s(e)f(usefull)e(for)j(others.)40 +b(Selects)27 b(a)h(random)463 3854 y(p)s(osition)h(for)h(eac)m(h)i(v)-5 +b(ariable.)236 4192 y Fo(See)35 b(also)p 236 4246 3544 +5 v 236 4359 a Fn(b)s(dd)p 397 4359 28 4 v 31 w(autoreorder,)c(b)s(dd)p +1100 4359 V 31 w(reorder)p 1415 4359 V 32 w(v)m(erb)s(ose,)g(b)s(dd)p +1955 4359 V 31 w(addv)-5 b(arblo)s(c)m(k,)29 b(b)s(dd)p +2677 4359 V 31 w(clrv)-5 b(arblo)s(c)m(ks)1962 5989 y(50)p +eop +%%Page: 51 59 +51 58 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(reorder)p 792 196 V 38 w(gain)96 b Fn({)30 +b(Calculate)g(the)h(gain)f(in)f(size)h(after)h(a)g(reordering)p +236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_reorder_gain\(void\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)30 +b(the)g(gain)g(in)f(p)s(ercen)m(t)i(of)f(the)h(previous)e(n)m(um)m(b)s +(er)g(of)h(used)g(no)s(des.)40 b(The)30 b(v)-5 b(alue)30 +b(returned)f(is)463 1034 y(\(100)22 b Fc(\003)f Fn(\()p +Fj(A)g Fc(\000)f Fj(B)5 b Fn(\)\))p Fj(=)-5 b(A)236 1222 +y Fn(Where)31 b Fj(A)f Fn(is)g(previous)f(n)m(um)m(b)s(er)g(of)h(used)g +(no)s(des)f(and)h Fj(B)35 b Fn(is)29 b(curren)m(t)i(n)m(um)m(b)s(er)e +(of)h(used)g(no)s(des.)p 236 1573 3544 12 v 236 1686 +a Fo(b)s(dd)p 419 1686 32 4 v 38 w(reorder)p 792 1686 +V 38 w(ho)s(ok)96 b Fn({)31 b(sets)g(a)f(handler)f(for)h(automatic)h +(reorderings)p 236 1740 3544 12 v 236 1945 a Fm(bddinthandler)44 +b(bdd_reorder_hook\(bddinthan)o(dle)o(r)e(handler\))236 +2170 y Fo(Description)p 236 2224 3544 5 v 236 2337 a +Fn(Whenev)m(er)33 b(automatic)g(reordering)e(is)h(done,)h(a)f(c)m(hec)m +(k)i(is)e(done)g(to)h(see)g(if)e(the)h(user)g(has)g(supplied)d(a)236 +2450 y(handler)i(for)h(that)h(ev)m(en)m(t.)49 b(If)32 +b(so)h(then)f(it)g(is)g(called)g(with)f(the)h(argumen)m(t)h +Fm(prestate)e Fn(b)s(eing)g(1)i(if)e(the)236 2563 y(handler)21 +b(is)i(called)f(immediately)f Ff(b)-5 b(efor)g(e)24 b +Fn(reordering)e(and)g Fm(prestate)f Fn(b)s(eing)h(0)h(if)f(it)h(is)f +(called)g(immedi-)236 2676 y(ately)29 b(after.)41 b(The)28 +b(default)g(handler)e(is)i Fm(bdd)p 1764 2676 29 4 v +34 w(default)p 2134 2676 V 32 w(reohandler)e Fn(whic)m(h)h(will)f(prin) +m(t)h(information)236 2789 y(ab)s(out)j(the)h(reordering.)327 +2902 y(A)g(t)m(ypical)f(handler)e(could)i(lo)s(ok)g(lik)m(e)f(this:)236 +3089 y Fm(void)47 b(reorderhandler\(int)c(prestate\))236 +3202 y({)379 3315 y(if)48 b(\(prestate\))523 3428 y(printf\("Start)c +(reordering"\);)379 3541 y(else)523 3654 y(printf\("End)g +(reordering"\);)236 3767 y(})236 4105 y Fo(Return)35 +b(v)-6 b(alue)p 236 4159 3544 5 v 236 4272 a Fn(The)30 +b(previous)f(handler)236 4535 y Fo(See)35 b(also)p 236 +4589 V 236 4702 a Fn(b)s(dd)p 397 4702 28 4 v 31 w(reorder,)30 +b(b)s(dd)p 923 4702 V 31 w(autoreorder,)h(b)s(dd)p 1626 +4702 V 31 w(resize)p 1875 4702 V 32 w(ho)s(ok)1962 5989 +y(51)p eop +%%Page: 52 60 +52 59 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(reorder)p 792 196 V 38 w(prob)s(e)96 +b Fn({)31 b(De\014ne)f(a)h(handler)d(for)j(minimization)c(of)k(BDDs)p +236 250 3544 12 v 236 455 a Fm(bddsizehandler)44 b +(bdd_reorder_probe\(bddsize)o(han)o(dler)d(handler\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Reordering)d(is)h +(t)m(ypically)e(done)i(to)h(minimize)d(the)i(global)g(n)m(um)m(b)s(er)e +(of)j(BDD)g(no)s(des)e(in)g(use,)j(but)236 960 y(it)50 +b(ma)m(y)h(in)e(some)i(cases)g(b)s(e)f(usefull)d(to)k(minimize)d(with)h +(resp)s(ect)h(to)h(a)g(sp)s(eci\014c)e(BDD.)j(With)236 +1073 y Fm(bdd)p 386 1073 29 4 v 34 w(reorder)p 756 1073 +V 32 w(probe)41 b Fn(it)g(is)g(p)s(ossible)f(to)j(de\014ne)e(a)i +(callbac)m(k)f(function)e(that)j(calculates)f(the)h(size)236 +1186 y(of)35 b(a)f(sp)s(eci\014c)g(BDD)h(\(or)g(an)m(ything)e(else)i +(in)e(fact\).)54 b(This)32 b(handler)h(will)e(then)j(b)s(e)g(called)f +(b)m(y)i(the)f(re-)236 1298 y(ordering)h(functions)g(to)j(get)f(the)g +(curren)m(t)f(size)h(information.)57 b(A)36 b(t)m(ypical)h(handle)e +(could)g(lo)s(ok)h(lik)m(e)236 1411 y(this:)236 1599 +y Fm(int)47 b(sizehandler\(void\))236 1712 y({)379 1825 +y(extern)f(BDD)h(mybdd;)379 1938 y(return)f(bdd_nodecount\(mybdd\);)236 +2051 y(})236 2238 y Fn(No)39 b(default)e(handler)f(is)h(supplied.)60 +b(The)38 b(argumen)m(t)g Fm(handler)e Fn(ma)m(y)i(b)s(e)g(NULL)g(if)e +(no)i(handler)e(is)236 2351 y(needed.)236 2614 y Fo(Return)f(v)-6 +b(alue)p 236 2669 3544 5 v 236 2781 a Fn(The)30 b(old)g(handler)236 +3045 y Fo(See)35 b(also)p 236 3099 V 236 3212 a Fn(b)s(dd)p +397 3212 28 4 v 31 w(reorder)p 236 3545 3544 12 v 236 +3658 a Fo(b)s(dd)p 419 3658 32 4 v 38 w(reorder)p 792 +3658 V 38 w(v)m(erb)s(ose)96 b Fn({)31 b(enables)f(v)m(erb)s(ose)g +(information)f(ab)s(out)h(reorderings)p 236 3712 3544 +12 v 236 3917 a Fm(int)47 b(bdd_reorder_verbose\(int)42 +b(v\))236 4142 y Fo(Description)p 236 4196 3544 5 v 236 +4309 a Fn(With)32 b Fm(bdd)p 623 4309 29 4 v 33 w(reorder)p +992 4309 V 33 w(verbose)d Fn(it)j(is)f(p)s(ossible)e(to)k(set)f(the)g +(lev)m(el)g(of)g(information)e(whic)m(h)g(should)g(b)s(e)236 +4422 y(prin)m(ted)35 b(during)e(reordering.)56 b(A)36 +b(v)-5 b(alue)35 b(of)h(zero)h(means)f(no)f(information,)h(a)g(v)-5 +b(alue)35 b(of)h(one)h(means)236 4535 y(some)28 b(information)e(and)h +(an)m(y)i(greater)f(v)-5 b(alue)28 b(will)d(result)h(in)h(a)h(lot)g(of) +f(reordering)g(information.)38 b(The)236 4648 y(default)30 +b(v)-5 b(alue)30 b(is)f(zero.)236 4911 y Fo(Return)35 +b(v)-6 b(alue)p 236 4965 3544 5 v 236 5078 a Fn(The)30 +b(old)g(v)m(erb)s(ose)g(lev)m(el)236 5341 y Fo(See)35 +b(also)p 236 5395 V 236 5508 a Fn(b)s(dd)p 397 5508 28 +4 v 31 w(reorder)1962 5989 y(52)p eop +%%Page: 53 61 +53 60 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(replace)96 b Fn({)31 b(replaces)f(v)-5 +b(ariables)29 b(with)g(other)h(v)-5 b(ariables)p 236 +250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_replace\(BDD)d(r,)j(bddPair)f +(*pair\))236 680 y Fo(Description)p 236 734 3544 5 v +236 847 a Fn(Replaces)37 b(all)f(v)-5 b(ariables)36 b(in)g(the)h(BDD)i +Fm(r)d Fn(with)g(the)h(v)-5 b(ariables)36 b(de\014ned)g(b)m(y)h +Fm(pair)p Fn(.)60 b(Eac)m(h)37 b(en)m(try)h(in)236 960 +y Fm(pair)28 b Fn(consists)h(of)h(a)f(old)g(and)f(a)i(new)f(v)-5 +b(ariable.)39 b(Whenev)m(er)30 b(the)f(old)g(v)-5 b(ariable)28 +b(is)g(found)g(in)g Fm(r)h Fn(then)g(a)236 1073 y(new)h(no)s(de)g(with) +f(the)h(new)g(v)-5 b(ariable)29 b(is)h(inserted)f(instead.)236 +1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 V 236 1503 +a Fn(The)30 b(result)f(of)i(the)f(op)s(eration.)236 1766 +y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p +397 1933 28 4 v 31 w(newpair,)29 b(b)s(dd)p 953 1933 +V 31 w(setpair,)h(b)s(dd)p 1464 1933 V 30 w(setpairs)p +236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 +4 v 38 w(resetpair)95 b Fn({)31 b(clear)f(all)g(v)-5 +b(ariable)29 b(pairs)p 236 2451 3544 12 v 236 2656 a +Fm(void)47 b(bdd_resetpair\(bddPair)42 b(*pair\))236 +2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a +Fn(Resets)34 b(the)f(table)f(of)h(pairs)f Fm(pair)f Fn(b)m(y)i(setting) +g(all)e(substitutions)f(to)k(their)e(default)g(v)-5 b(alues)32 +b(\(that)h(is)236 3161 y(no)d(c)m(hange\).)236 3424 y +Fo(See)35 b(also)p 236 3479 V 236 3591 a Fn(b)s(dd)p +397 3591 28 4 v 31 w(newpair,)29 b(b)s(dd)p 953 3591 +V 31 w(setpair,)h(b)s(dd)p 1464 3591 V 30 w(freepair)1962 +5989 y(53)p eop +%%Page: 54 62 +54 61 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(resize)p 712 196 V 38 w(ho)s(ok)96 b +Fn({)31 b(set)g(a)g(handler)d(for)j(no)s(detable)e(resizes)p +236 250 3544 12 v 236 455 a Fm(bdd2inthandler)44 b +(bdd_resize_hook\(bdd2intha)o(ndl)o(er)e(handler\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Whenev)m(er)30 +b(it)f(is)g(imp)s(ossible)d(to)k(get)h(enough)e(free)h(no)s(des)f(b)m +(y)g(a)h(garbage)h(collection)e(then)g(the)h(no)s(de)236 +960 y(table)g(is)f(resized)g(and)g(a)i(test)f(is)f(done)h(to)h(see)f +(if)f(a)h(handler)e(is)h(supllied)d(b)m(y)k(the)g(user)f(for)h(this)f +(ev)m(en)m(t.)236 1073 y(If)34 b(so)h(then)g(it)f(is)f(called)h(with)g +Fm(oldsize)e Fn(b)s(eing)h(the)i(old)f(no)s(detable)g(size)g(and)g +Fm(newsize)f Fn(b)s(eing)g(the)236 1186 y(new)d(no)s(detable)g(size.) +327 1298 y(This)h(function)h(sets)h(the)g(handler)e(to)j(b)s(e)e +Fm(handler)p Fn(.)47 b(If)32 b(a)h Fm(NULL)f Fn(argumen)m(t)h(is)f +(supplied)e(then)j(no)236 1411 y(calls)d(are)h(made)f(when)f(a)i(table) +f(resize)h(is)e(done.)41 b(No)30 b(default)g(handler)f(is)g(supplied.) +327 1524 y(An)m(y)i(handler)d(should)g(b)s(e)i(de\014ned)f(lik)m(e)h +(this:)236 1712 y Fm(void)47 b(my_resize_handler\(int)42 +b(oldsize,)j(int)i(newsize\))236 1825 y({)379 1938 y(...)236 +2051 y(})236 2389 y Fo(Return)35 b(v)-6 b(alue)p 236 +2443 V 236 2556 a Fn(The)30 b(previous)f(handler)236 +2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p +397 2986 28 4 v 31 w(gb)s(c)p 567 2986 V 33 w(ho)s(ok,)30 +b(b)s(dd)p 1003 2986 V 31 w(reorder)p 1318 2986 V 32 +w(ho)s(ok,)h(b)s(dd)p 1754 2986 V 30 w(setminfreeno)s(des)1962 +5989 y(54)p eop +%%Page: 55 63 +55 62 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(restrict)96 b Fn({)30 b(restric)g(a)h(set)g(of)f(v)-5 +b(ariables)29 b(to)i(constan)m(t)h(v)-5 b(alues)p 236 +250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_restrict\(BDD)c(r,)48 +b(BDD)f(var\))236 680 y Fo(Description)p 236 734 3544 +5 v 236 847 a Fn(This)42 b(function)h(restricts)g(the)h(v)-5 +b(ariables)42 b(in)h Fm(r)g Fn(to)i(constan)m(t)g(true)e(or)h(false.)81 +b(Ho)m(w)44 b(this)f(is)g(done)236 960 y(dep)s(ends)28 +b(on)h(ho)m(w)h(the)f(v)-5 b(ariables)28 b(are)i(included)d(in)h(the)i +(v)-5 b(ariable)28 b(set)i Fm(var)p Fn(.)40 b(If)29 b(they)g(are)h +(included)d(in)236 1073 y(their)h(p)s(ositiv)m(e)f(form)h(then)g(they)g +(are)h(restricted)f(to)h(true)f(and)g(vice)h(v)m(ersa.)40 +b(Unfortunately)28 b(it)g(is)f(not)236 1186 y(p)s(ossible)32 +b(to)k(insert)d(v)-5 b(ariables)34 b(in)f(their)h(negated)i(form)e +(using)f Fm(bdd)p 2623 1186 29 4 v 34 w(makeset)p Fn(,)h(so)h(the)f(v) +-5 b(ariable)34 b(set)236 1298 y(has)e(to)h(b)s(e)f(build)d(man)m +(ually)i(as)h(a)h(conjunction)e(of)h(the)h(v)-5 b(ariables.)45 +b(Example:)e(Assume)32 b(v)-5 b(ariable)31 b(1)236 1411 +y(should)e(b)s(e)g(restricted)h(to)i(true)e(and)f(v)-5 +b(ariable)30 b(3)g(to)h(false.)332 1599 y Fm(bdd)47 b(X)g(=)g +(make_user_bdd\(\);)332 1712 y(bdd)g(R1)g(=)g(bdd_ithvar\(1\);)332 +1825 y(bdd)g(R2)g(=)g(bdd_nithvar\(3\);)332 1938 y(bdd)g(R)g(=)g +(bdd_addref\()e(bdd_apply\(R1,R2,)f(bddop_and\))h(\);)332 +2051 y(bdd)i(RES)f(=)i(bdd_addref\()d(bdd_restrict\(X,R\))e(\);)236 +2389 y Fo(Return)35 b(v)-6 b(alue)p 236 2443 3544 5 v +236 2556 a Fn(The)30 b(restricted)g(b)s(dd.)236 2819 +y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p +397 2986 28 4 v 31 w(mak)m(eset,)d(b)s(dd)p 958 2986 +V 31 w(exist,)e(b)s(dd)p 1385 2986 V 31 w(forall)p 236 +3337 3544 12 v 236 3450 a Fo(b)s(dd)p 419 3450 32 4 v +38 w(satcoun)m(t)96 b Fn({)31 b(calculates)f(the)h(n)m(um)m(b)s(er)e +(of)h(satisfying)f(v)-5 b(ariable)30 b(assignmen)m(ts)p +236 3504 3544 12 v 236 3709 a Fm(double)46 b(bdd_satcount\(BDD)e(r\)) +236 3822 y(double)i(bdd_satcountset\(BDD)d(r,)k(BDD)g(varset\))236 +4047 y Fo(Description)p 236 4101 3544 5 v 236 4214 a +Fn(Calculates)39 b(ho)m(w)g(man)m(y)g(p)s(ossible)e(v)-5 +b(ariable)38 b(assignmen)m(ts)h(there)g(exists)g(suc)m(h)g(that)g +Fm(r)g Fn(is)f(satis\014ed)236 4327 y(\(true\).)67 b(All)38 +b(de\014ned)g(v)-5 b(ariables)38 b(are)h(considered)f(in)f(the)j +(\014rst)e(v)m(ersion.)66 b(In)38 b(the)i(second)f(v)m(ersion,)236 +4440 y(only)c(the)g(v)-5 b(ariables)34 b(in)g(the)h(v)-5 +b(ariable)34 b(set)i Fm(varset)d Fn(are)j(considered.)53 +b(This)34 b(mak)m(es)i(the)f(function)f(a)236 4553 y +Ff(lot)d Fn(slo)m(w)m(er.)236 4816 y Fo(Return)k(v)-6 +b(alue)p 236 4870 V 236 4983 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(p)s +(ossible)d(assignmen)m(ts.)236 5246 y Fo(See)35 b(also)p +236 5300 V 236 5413 a Fn(b)s(dd)p 397 5413 28 4 v 31 +w(satone,)d(b)s(dd)p 893 5413 V 30 w(fullsatone,)e(b)s(dd)p +1517 5413 V 30 w(satcoun)m(tln)1962 5989 y(55)p eop +%%Page: 56 64 +56 63 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(satcoun)m(tln)96 b Fn({)31 b(calculates)f(the)h(log.)41 +b(n)m(um)m(b)s(er)29 b(of)h(satisfying)f(v)-5 b(ariable)30 +b(assignmen)m(ts)p 236 250 3544 12 v 236 455 a Fm(double)46 +b(bdd_satcountln\(BDD)d(r\))236 568 y(double)j(bdd_satcountlnset\(BDD)c +(r,)47 b(BDD)g(varset\))236 793 y Fo(Description)p 236 +847 3544 5 v 236 960 a Fn(Calculates)39 b(ho)m(w)g(man)m(y)g(p)s +(ossible)e(v)-5 b(ariable)38 b(assignmen)m(ts)h(there)g(exists)g(suc)m +(h)g(that)g Fm(r)g Fn(is)f(satis\014ed)236 1073 y(\(true\))29 +b(and)f(returns)f(the)h(logarithm)g(of)g(this.)39 b(The)28 +b(result)f(is)h(calculated)g(in)f(suc)m(h)h(a)h(manner)e(that)i(it)236 +1186 y(is)e(practically)f(imp)s(ossible)f(to)j(get)h(an)e(o)m(v)m +(er\015o)m(w,)j(whic)m(h)c(is)h(v)m(ery)h(p)s(ossible)d(for)j +Fm(bdd)p 3136 1186 29 4 v 33 w(satcount)e Fn(if)g(the)236 +1298 y(n)m(um)m(b)s(er)33 b(of)h(de\014ned)e(v)-5 b(ariables)33 +b(is)f(to)s(o)j(large.)51 b(All)32 b(de\014ned)h(v)-5 +b(ariables)32 b(are)i(considered)f(in)f(the)i(\014rst)236 +1411 y(v)m(ersion.)k(In)23 b(the)h(second)g(v)m(ersion,)h(only)e(the)h +(v)-5 b(ariables)23 b(in)f(the)i(v)-5 b(ariable)23 b(set)h +Fm(varset)e Fn(are)i(considered.)236 1524 y(This)29 b(mak)m(es)i(the)g +(function)e(a)h Ff(lot)i Fn(slo)m(w)m(er!)236 1787 y +Fo(Return)j(v)-6 b(alue)p 236 1842 3544 5 v 236 1955 +a Fn(The)30 b(logarithm)f(of)i(the)g(n)m(um)m(b)s(er)e(of)h(p)s +(ossible)e(assignmen)m(ts.)236 2218 y Fo(See)35 b(also)p +236 2272 V 236 2385 a Fn(b)s(dd)p 397 2385 28 4 v 31 +w(satone,)d(b)s(dd)p 893 2385 V 30 w(fullsatone,)e(b)s(dd)p +1517 2385 V 30 w(satcoun)m(t)p 236 2736 3544 12 v 236 +2849 a Fo(b)s(dd)p 419 2849 32 4 v 38 w(satone)95 b Fn({)31 +b(\014nds)e(one)i(satisfying)e(v)-5 b(ariable)29 b(assignmen)m(t)p +236 2903 3544 12 v 236 3108 a Fm(BDD)47 b(bdd_satone\(BDD)d(r\))236 +3333 y Fo(Description)p 236 3387 3544 5 v 236 3500 a +Fn(Finds)26 b(a)h(BDD)h(with)e(at)i(most)g(one)f(v)-5 +b(ariable)26 b(at)i(eac)m(h)g(lev)m(el.)39 b(This)25 +b(BDD)k(implies)24 b Fm(r)j Fn(and)f(is)g(not)i(false)236 +3613 y(unless)h Fm(r)h Fn(is)f(false.)236 3876 y Fo(Return)35 +b(v)-6 b(alue)p 236 3930 V 236 4043 a Fn(The)30 b(result)f(of)i(the)f +(op)s(eration.)236 4306 y Fo(See)35 b(also)p 236 4360 +V 236 4473 a Fn(b)s(dd)p 397 4473 28 4 v 31 w(allsat)30 +b(b)s(dd)p 827 4473 V 31 w(satoneset,)i(b)s(dd)p 1434 +4473 V 31 w(fullsatone,)d(b)s(dd)p 2058 4473 V 31 w(satcoun)m(t,)j(b)s +(dd)p 2637 4473 V 30 w(satcoun)m(tln)1962 5989 y(56)p +eop +%%Page: 57 65 +57 64 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(satoneset)95 b Fn({)31 b(\014nds)e(one)h(satisfying)f +(v)-5 b(ariable)30 b(assignmen)m(t)p 236 250 3544 12 +v 236 455 a Fm(BDD)47 b(bdd_satoneset\(BDD)c(r,)k(BDD)g(var,)g(BDD)g +(pol\))236 680 y Fo(Description)p 236 734 3544 5 v 236 +847 a Fn(Finds)32 b(a)h(min)m(term)f(in)g Fm(r)p Fn(.)48 +b(The)32 b Fm(var)g Fn(argumen)m(t)i(is)e(a)h(v)-5 b(ariable)32 +b(set)h(that)h(de\014nes)e(a)h(set)h(of)f(v)-5 b(ariables)236 +960 y(that)36 b Ff(must)g Fn(b)s(e)f(men)m(tioned)f(in)g(the)i(result.) +54 b(The)35 b(p)s(olarit)m(y)f(of)i(these)g(v)-5 b(ariables)34 +b(in)g(result|in)e(case)236 1073 y(they)f(are)h(unde\014ned)c(in)i +Fm(r)p Fn(|are)h(de\014ned)e(b)m(y)i(the)g Fm(pol)f Fn(parameter.)43 +b(If)30 b Fm(pol)g Fn(is)g(the)h(false)g(BDD)h(then)236 +1186 y(the)f(v)-5 b(ariables)29 b(will)f(b)s(e)h(in)g(negativ)m(e)j +(form,)e(and)g(otherwise)g(they)g(will)e(b)s(e)i(in)f(p)s(ositiv)m(e)g +(form.)236 1449 y Fo(Return)35 b(v)-6 b(alue)p 236 1503 +V 236 1616 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration.)236 +1879 y Fo(See)35 b(also)p 236 1933 V 236 2046 a Fn(b)s(dd)p +397 2046 28 4 v 31 w(allsat)30 b(b)s(dd)p 827 2046 V +31 w(satone,)h(b)s(dd)p 1322 2046 V 31 w(fullsatone,)e(b)s(dd)p +1946 2046 V 31 w(satcoun)m(t,)j(b)s(dd)p 2525 2046 V +31 w(satcoun)m(tln)p 236 2397 3544 12 v 236 2510 a Fo(b)s(dd)p +419 2510 32 4 v 38 w(sa)m(v)m(e)96 b Fn({)31 b(sa)m(v)m(es)g(a)g(BDD)h +(to)f(a)g(\014le)p 236 2564 3544 12 v 236 2769 a Fm(int)47 +b(bdd_fnsave\(char)d(*fname,)i(BDD)g(r\))236 2882 y(int)h +(bdd_save\(FILE)d(*ofile,)i(BDD)h(r\))236 3107 y Fo(Description)p +236 3161 3544 5 v 236 3274 a Fn(Sa)m(v)m(es)34 b(the)g(no)s(des)e(used) +g(b)m(y)h Fm(r)g Fn(to)h(either)f(a)g(\014le)f Fm(ofile)g +Fn(whic)m(h)g(m)m(ust)h(b)s(e)f(op)s(ened)h(for)f(writing)g(or)h(to)236 +3387 y(the)e(\014le)e(named)h Fm(fname)p Fn(.)39 b(In)30 +b(the)h(last)f(case)h(the)g(\014le)e(will)f(b)s(e)i(truncated)g(and)g +(op)s(ened)g(for)g(writing.)236 3650 y Fo(Return)35 b(v)-6 +b(alue)p 236 3704 V 236 3817 a Fn(Zero)31 b(on)f(succes,)h(otherwise)f +(an)g(error)g(co)s(de)g(from)g Fm(bdd.h)p Fn(.)236 4080 +y Fo(See)35 b(also)p 236 4135 V 236 4248 a Fn(b)s(dd)p +397 4248 28 4 v 31 w(load)1962 5989 y(57)p eop +%%Page: 58 66 +58 65 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(scanset)96 b Fn({)31 b(returns)e(an)h(in)m(teger)h +(represen)m(tation)f(of)h(a)g(v)-5 b(ariable)29 b(set)p +236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_scanset\(BDD)d(r,)j(int)g +(**v,)f(int)h(*n\))236 680 y Fo(Description)p 236 734 +3544 5 v 236 847 a Fn(Scans)39 b(a)h(v)-5 b(ariable)39 +b(set)h Fm(r)f Fn(and)g(copies)g(the)h(stored)g(v)-5 +b(ariables)38 b(in)m(to)i(an)f(in)m(teger)h(arra)m(y)g(of)g(v)-5 +b(ariable)236 960 y(n)m(um)m(b)s(ers.)50 b(The)34 b(argumen)m(t)g +Fm(v)g Fn(is)f(the)h(address)f(of)h(an)g(in)m(teger)g(p)s(oin)m(ter)f +(where)h(the)g(arra)m(y)g(is)f(stored)236 1073 y(and)f +Fm(n)g Fn(is)f(a)i(p)s(oin)m(ter)e(to)i(an)g(in)m(teger)f(where)g(the)h +(n)m(um)m(b)s(er)e(of)h(elemen)m(ts)h(are)f(stored.)47 +b(It)32 b(is)g(the)g(users)236 1186 y(resp)s(onsibilit)m(y)f(to)36 +b(mak)m(e)g(sure)f(the)g(arra)m(y)h(is)e(deallo)s(cated)h(b)m(y)g(a)h +(call)e(to)i Fm(free\(v\))p Fn(.)53 b(The)35 b(n)m(um)m(b)s(ers)236 +1298 y(returned)29 b(are)i(guaran)m(teed)h(to)f(b)s(e)e(in)h(ascending) +f(order.)236 1562 y Fo(Return)35 b(v)-6 b(alue)p 236 +1616 V 236 1729 a Fn(Zero)31 b(on)f(success,)h(otherwise)e(a)i(negativ) +m(e)h(error)e(co)s(de.)236 1992 y Fo(See)35 b(also)p +236 2046 V 236 2159 a Fn(b)s(dd)p 397 2159 28 4 v 31 +w(mak)m(eset)p 236 2492 3544 12 v 236 2605 a Fo(b)s(dd)p +419 2605 32 4 v 38 w(setcac)m(heratio)96 b Fn({)31 b(Sets)f(the)h(cac)m +(he)h(ratio)e(for)g(the)h(op)s(erator)f(cac)m(hes)p 236 +2659 3544 12 v 236 2864 a Fm(int)47 b(bdd_setcacheratio\(int)42 +b(r\))236 3089 y Fo(Description)p 236 3143 3544 5 v 236 +3256 a Fn(The)d(ratio)f(b)s(et)m(w)m(een)i(the)f(n)m(um)m(b)s(er)f(of)h +(no)s(des)f(in)f(the)i(no)s(detable)f(and)h(the)g(n)m(um)m(b)s(er)e(of) +i(en)m(tries)g(in)236 3369 y(the)k(op)s(erator)f(cac)m(hetables)i(is)e +(called)f(the)i(cac)m(he)h(ratio.)76 b(So)43 b(a)f(cac)m(he)i(ratio)f +(of)f(sa)m(y)-8 b(,)47 b(four,)e(allo-)236 3482 y(cates)h(one)f(cac)m +(he)h(en)m(try)f(for)f(eac)m(h)i(four)d(unique)g(no)s(de)h(en)m(tries.) +82 b(This)43 b(v)-5 b(alue)44 b(can)h(b)s(e)f(set)h(with)236 +3595 y Fm(bdd)p 386 3595 29 4 v 34 w(setcacheratio)32 +b Fn(to)k(an)m(y)g(p)s(ositiv)m(e)f(v)-5 b(alue.)57 b(When)35 +b(this)g(is)g(done)g(the)h(cac)m(hes)h(are)f(resized)f(in-)236 +3708 y(stan)m(tly)e(to)g(\014t)f(the)h(new)e(ratio.)47 +b(The)32 b(default)f(is)h(a)h(\014xed)e(cac)m(he)j(size)e(determined)f +(at)j(initialization)236 3821 y(time.)236 4084 y Fo(Return)h(v)-6 +b(alue)p 236 4138 3544 5 v 236 4251 a Fn(The)30 b(previous)f(cac)m(he)j +(ratio)e(or)h(a)f(negativ)m(e)i(n)m(um)m(b)s(er)d(on)h(error.)236 +4514 y Fo(See)35 b(also)p 236 4569 V 236 4681 a Fn(b)s(dd)p +397 4681 28 4 v 31 w(init)1962 5989 y(58)p eop +%%Page: 59 67 +59 66 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(setmaxincrease)95 b Fn({)31 b(set)g(max.)40 +b(n)m(um)m(b)s(er)29 b(of)i(no)s(des)f(used)f(to)i(increase)f(no)s(de)g +(table)p 236 250 3544 12 v 236 455 a Fm(int)47 b +(bdd_setmaxincrease\(int)42 b(size\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(The)37 b(no)s(de)f(table)h(is)f(expanded) +g(b)m(y)g(doubling)f(the)i(size)g(of)g(the)g(table)g(when)e(no)i(more)g +(free)g(no)s(des)236 960 y(can)47 b(b)s(e)e(found,)k(but)d(a)g(maxim)m +(um)f(for)h(the)g(n)m(um)m(b)s(er)f(of)i(new)e(no)s(des)h(added)f(can)i +(b)s(e)e(set)i(with)236 1073 y Fm(bdd)p 386 1073 29 4 +v 34 w(maxincrease)27 b Fn(to)k Fm(size)e Fn(no)s(des.)40 +b(The)30 b(default)g(is)f(50000)k(no)s(des)c(\(1)i(Mb\).)236 +1336 y Fo(Return)k(v)-6 b(alue)p 236 1390 3544 5 v 236 +1503 a Fn(The)30 b(old)g(threshold)e(on)j(succes,)g(otherwise)e(a)i +(negativ)m(e)h(error)e(co)s(de.)236 1766 y Fo(See)35 +b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 +4 v 31 w(setmaxno)s(den)m(um,)30 b(b)s(dd)p 1284 1933 +V 31 w(setminfreeno)s(des)p 236 2284 3544 12 v 236 2397 +a Fo(b)s(dd)p 419 2397 32 4 v 38 w(setmaxno)s(den)m(um)94 +b Fn({)31 b(set)g(the)f(maxim)m(um)f(a)m(v)-5 b(ailable)30 +b(n)m(um)m(b)s(er)f(of)i(b)s(dd)d(no)s(des)p 236 2451 +3544 12 v 236 2656 a Fm(int)47 b(bdd_setmaxnodenum\(int)42 +b(size\))236 2881 y Fo(Description)p 236 2935 3544 5 +v 236 3048 a Fn(This)32 b(function)f(sets)j(the)f(maximal)f(n)m(um)m(b) +s(er)g(of)h(b)s(dd)e(no)s(des)i(the)g(pac)m(k)-5 b(age)35 +b(ma)m(y)f(allo)s(cate)f(b)s(efore)g(it)236 3161 y(giv)m(es)g(up)f(a)g +(b)s(dd)f(op)s(eration.)46 b(The)32 b(argumen)m(t)h Fm(size)f +Fn(is)f(the)i(absolute)f(maximal)f(n)m(um)m(b)s(er)h(of)g(no)s(des)236 +3274 y(there)39 b(ma)m(y)g(b)s(e)f(allo)s(cated)h(for)f(the)h(no)s +(detable.)65 b(An)m(y)39 b(attempt)h(to)f(allo)s(cate)g(more)g(no)s +(des)f(results)236 3387 y(in)32 b(the)i(constan)m(t)g(false)f(b)s(eing) +f(returned)g(and)g(the)i(error)f(handler)e(b)s(eing)h(called)g(un)m +(til)g(some)h(no)s(des)236 3500 y(are)f(deallo)s(cated.)44 +b(A)32 b(v)-5 b(alue)31 b(of)h(0)g(is)e(in)m(terpreted)h(as)h(an)f +(unlimited)d(amoun)m(t.)45 b(It)32 b(is)e Ff(not)j Fn(p)s(ossible)c(to) +236 3613 y(sp)s(ecify)g(few)m(er)i(no)s(des)e(than)i(there)f(has)g +(already)g(b)s(een)g(allo)s(cated.)236 3876 y Fo(Return)35 +b(v)-6 b(alue)p 236 3930 V 236 4043 a Fn(The)30 b(old)g(threshold)e(on) +j(succes,)g(otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 +4306 y Fo(See)35 b(also)p 236 4360 V 236 4473 a Fn(b)s(dd)p +397 4473 28 4 v 31 w(setmaxincrease,)c(b)s(dd)p 1234 +4473 V 31 w(setminfreeno)s(des)1962 5989 y(59)p eop +%%Page: 60 68 +60 67 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(setminfreeno)s(des)95 b Fn({)31 b(set)g(min.)39 +b(no.)h(of)31 b(no)s(des)e(to)i(b)s(e)f(reclaimed)g(after)g(GBC.)p +236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_setminfreenodes\(int)42 +b(n\))236 680 y Fo(Description)p 236 734 3544 5 v 236 +847 a Fn(Whenev)m(er)37 b(a)g(garbage)h(collection)e(is)f(executed)i +(the)g(n)m(um)m(b)s(er)e(of)h(free)h(no)s(des)f(left)g(are)g(c)m(hec)m +(k)m(ed)j(to)236 960 y(see)e(if)e(a)h(resize)g(of)g(the)g(no)s(de)g +(table)g(is)f(required.)55 b(If)36 b Fj(X)42 b Fn(=)34 +b(\()p Ff(b)-5 b(ddfr)g(e)g(enum)33 b Fc(\003)25 b Fn(100\))p +Fj(=)p Ff(maxnum)46 b Fn(is)35 b(less)236 1073 y(than)c(or)h(equal)f +(to)h Fm(n)f Fn(then)g(a)h(resize)f(is)g(initiated.)42 +b(The)31 b(range)h(of)f Fm(X)h Fn(is)e(of)i(course)f(0)15 +b Fj(:)g(:)g(:)i Fn(100)33 b(and)e(has)236 1186 y(some)d(in\015uence)e +(on)i(ho)m(w)f(fast)h(the)g(pac)m(k)-5 b(age)29 b(is.)39 +b(A)28 b(lo)m(w)f(n)m(um)m(b)s(er)f(means)i(harder)e(attempts)j(to)f(a) +m(v)m(oid)236 1298 y(resizing)g(and)g(sa)m(v)m(es)i(space,)g(and)e(a)h +(high)f(n)m(um)m(b)s(er)f(reduces)i(the)g(time)f(used)g(in)g(garbage)i +(collections.)236 1411 y(The)g(default)g(v)-5 b(alue)29 +b(is)h(20.)236 1675 y Fo(Return)35 b(v)-6 b(alue)p 236 +1729 V 236 1842 a Fn(The)30 b(old)g(threshold)e(on)j(succes,)g +(otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 2105 +y Fo(See)35 b(also)p 236 2159 V 236 2272 a Fn(b)s(dd)p +397 2272 28 4 v 31 w(setmaxno)s(den)m(um,)30 b(b)s(dd)p +1284 2272 V 31 w(setmaxincrease)p 236 2623 3544 12 v +236 2736 a Fo(b)s(dd)p 419 2736 32 4 v 38 w(setpair)95 +b Fn({)31 b(set)g(one)g(v)-5 b(ariable)29 b(pair)p 236 +2790 3544 12 v 236 2995 a Fm(int)47 b(bdd_setpair\(bddPair)c(*pair,)j +(int)h(oldvar,)e(int)i(newvar\))236 3108 y(int)g +(bdd_setbddpair\(bddPair)42 b(*pair,)k(BDD)h(oldvar,)f(BDD)h(newvar\)) +236 3333 y Fo(Description)p 236 3387 3544 5 v 236 3500 +a Fn(Adds)30 b(the)h(pair)e Fm(\(oldvar,newvar\))e Fn(to)k(the)g(table) +g(of)g(pairs)e Fm(pair)p Fn(.)41 b(This)29 b(results)g(in)h +Fm(oldvar)f Fn(b)s(eing)236 3613 y(substituted)24 b(with)h +Fm(newvar)f Fn(in)h(a)h(call)f(to)i Fm(bdd)p 1814 3613 +29 4 v 33 w(replace)p Fn(.)38 b(In)25 b(the)h(\014rst)f(v)m(ersion)g +Fm(newvar)f Fn(is)h(an)h(in)m(teger)236 3726 y(represen)m(ting)43 +b(the)i(v)-5 b(ariable)42 b(to)j(b)s(e)f(replaced)f(with)g(the)h(old)f +(v)-5 b(ariable.)80 b(In)44 b(the)g(second)g(v)m(ersion)236 +3839 y Fm(oldvar)31 b Fn(is)g(a)h(BDD.)i(In)d(this)h(case)h(the)f(v)-5 +b(ariable)31 b Fm(oldvar)g Fn(is)g(substituted)f(with)h(the)i(BDD)g +Fm(newvar)p Fn(.)236 3952 y(The)25 b(p)s(ossibilit)m(y)c(to)26 +b(substitute)e(with)g(an)m(y)i(BDD)g(as)g Fm(newvar)d +Fn(is)h(utilized)f(in)h(b)s(dd)p 3052 3952 28 4 v 31 +w(comp)s(ose,)j(whereas)236 4064 y(only)j(the)g(topmost)h(v)-5 +b(ariable)29 b(in)h(the)g(BDD)i(is)d(used)h(in)f(b)s(dd)p +2350 4064 V 31 w(replace.)236 4328 y Fo(Return)35 b(v)-6 +b(alue)p 236 4382 3544 5 v 236 4495 a Fn(Zero)31 b(on)f(success,)h +(otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 4758 +y Fo(See)35 b(also)p 236 4812 V 236 4925 a Fn(b)s(dd)p +397 4925 28 4 v 31 w(newpair,)29 b(b)s(dd)p 953 4925 +V 31 w(setpairs,)h(b)s(dd)p 1500 4925 V 30 w(resetpair,)g(b)s(dd)p +2086 4925 V 31 w(replace,)h(b)s(dd)p 2607 4925 V 30 w(comp)s(ose)1962 +5989 y(60)p eop +%%Page: 61 69 +61 68 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(setpairs)95 b Fn({)31 b(de\014nes)f(a)g(whole)g(set)h +(of)g(pairs)p 236 250 3544 12 v 236 455 a Fm(int)47 b +(bdd_setpairs\(bddPair)42 b(*pair,)k(int)h(*oldvar,)f(int)h(*newvar,)e +(int)i(size\))236 568 y(int)g(bdd_setbddpairs\(bddPair)42 +b(*pair,)k(int)h(*oldvar,)e(BDD)i(*newvar,)f(int)g(size\))236 +793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(As)28 +b(for)f Fm(bdd)p 654 960 29 4 v 33 w(setpair)f Fn(but)h(with)f +Fm(oldvar)g Fn(and)g Fm(newvar)g Fn(b)s(eing)g(arra)m(ys)i(of)g(v)-5 +b(ariables)26 b(\(BDDs\))j(of)f(size)236 1073 y Fm(size)p +Fn(.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 +3544 5 v 236 1503 a Fn(Zero)31 b(on)f(success,)h(otherwise)e(a)i +(negativ)m(e)h(error)e(co)s(de.)236 1766 y Fo(See)35 +b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 +4 v 31 w(newpair,)29 b(b)s(dd)p 953 1933 V 31 w(setpair,)h(b)s(dd)p +1464 1933 V 30 w(replace,)h(b)s(dd)p 1984 1933 V 31 w(comp)s(ose)p +236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 +4 v 38 w(setv)-6 b(arn)m(um)95 b Fn({)31 b(set)g(the)f(n)m(um)m(b)s(er) +f(of)i(used)e(b)s(dd)g(v)-5 b(ariables)p 236 2451 3544 +12 v 236 2656 a Fm(int)47 b(bdd_setvarnum\(int)c(num\))236 +2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a +Fn(This)31 b(function)h(is)g(used)g(to)i(de\014ne)e(the)h(n)m(um)m(b)s +(er)e(of)i(v)-5 b(ariables)32 b(used)g(in)g(the)h(b)s(dd)e(pac)m(k)-5 +b(age.)50 b(It)33 b(ma)m(y)236 3161 y(b)s(e)25 b(called)g(more)h(than)g +(one)g(time,)g(but)g(only)e(to)j(increase)f(the)g(n)m(um)m(b)s(er)e(of) +i(v)-5 b(ariables.)38 b(The)25 b(argumen)m(t)236 3274 +y Fm(num)30 b Fn(is)f(the)i(n)m(um)m(b)s(er)e(of)h(v)-5 +b(ariables)29 b(to)i(use.)236 3537 y Fo(Return)k(v)-6 +b(alue)p 236 3591 V 236 3704 a Fn(Zero)31 b(on)f(succes,)h(otherwise)f +(a)g(negativ)m(e)i(error)e(co)s(de.)236 3968 y Fo(See)35 +b(also)p 236 4022 V 236 4135 a Fn(b)s(dd)p 397 4135 28 +4 v 31 w(ith)m(v)-5 b(ar,)30 b(b)s(dd)p 872 4135 V 31 +w(v)-5 b(arn)m(um,)30 b(b)s(dd)p 1413 4135 V 30 w(extv)-5 +b(arn)m(um)1962 5989 y(61)p eop +%%Page: 62 70 +62 69 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(setv)-6 b(arorder)96 b Fn({)31 b(set)g(a)f(sp)s +(eci\014c)f(v)-5 b(ariable)30 b(order)p 236 250 3544 +12 v 236 455 a Fm(void)47 b(bdd_setvarorder\(int)42 b(*neworder\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(This)c(function)g +(sets)i(the)g(curren)m(t)g(v)-5 b(ariable)38 b(order)h(to)i(b)s(e)e +(the)h(one)g(de\014ned)e(b)m(y)i Fm(neworder)p Fn(.)66 +b(The)236 960 y(parameter)28 b Fm(neworder)d Fn(is)h(in)m(terpreted)g +(as)i(a)f(sequence)h(of)f(v)-5 b(ariable)26 b(indecies)g(and)h(the)g +(new)g(v)-5 b(ariable)236 1073 y(order)31 b(is)g(exactly)i(this)d +(sequence.)45 b(The)32 b(arra)m(y)g Ff(must)g Fn(con)m(tain)g(all)f +(the)h(v)-5 b(ariables)30 b(de\014ned)g(so)i(far.)45 +b(If)236 1186 y(for)32 b(instance)g(the)g(curren)m(t)f(n)m(um)m(b)s(er) +g(of)h(v)-5 b(ariables)31 b(is)g(3)h(and)f Fm(neworder)f +Fn(con)m(tains)i([1)p Fj(;)15 b Fn(0)p Fj(;)g Fn(2])35 +b(then)c(the)236 1298 y(new)f(v)-5 b(ariable)29 b(order)h(is)g +Fj(v)1138 1312 y Fh(1)1202 1298 y Fj(<)25 b(v)1342 1312 +y Fh(0)1407 1298 y Fj(<)g(v)1547 1312 y Fh(2)1586 1298 +y Fn(.)236 1562 y Fo(See)35 b(also)p 236 1616 V 236 1729 +a Fn(b)s(dd)p 397 1729 28 4 v 31 w(reorder,)30 b(b)s(dd)p +923 1729 V 31 w(prin)m(torder)p 236 2080 3544 12 v 236 +2193 a Fo(b)s(dd)p 419 2193 32 4 v 38 w(simplify)95 b +Fn({)31 b(coudert)f(and)g(Madre's)h(restrict)f(function)p +236 2247 3544 12 v 236 2452 a Fm(BDD)47 b(bdd_simplify\(BDD)c(f,)48 +b(BDD)f(d\))236 2677 y Fo(Description)p 236 2731 3544 +5 v 236 2844 a Fn(T)-8 b(ries)30 b(to)h(simplify)c(the)j(BDD)i +Fm(f)e Fn(b)m(y)g(restricting)f(it)h(to)h(the)f(domaine)g(co)m(v)m +(ered)i(b)m(y)e Fm(d)p Fn(.)40 b(No)31 b(c)m(hec)m(ks)h(are)236 +2957 y(done)f(to)h(see)g(if)e(the)i(result)e(is)g(actually)h(smaller)e +(than)i(the)h(input.)41 b(This)30 b(can)h(b)s(e)g(done)g(b)m(y)g(the)g +(user)236 3070 y(with)e(a)i(call)f(to)h Fm(bdd)p 947 +3070 29 4 v 33 w(nodecount)p Fn(.)236 3333 y Fo(Return)k(v)-6 +b(alue)p 236 3387 3544 5 v 236 3500 a Fn(The)30 b(simpli\014ed)d(BDD) +236 3763 y Fo(See)35 b(also)p 236 3817 V 236 3930 a Fn(b)s(dd)p +397 3930 28 4 v 31 w(restrict)p 236 4263 3544 12 v 236 +4376 a Fo(b)s(dd)p 419 4376 32 4 v 38 w(stats)95 b Fn({)31 +b(returns)e(some)i(status)f(information)f(ab)s(out)h(the)h(b)s(dd)d +(pac)m(k)-5 b(age)p 236 4431 3544 12 v 236 4635 a Fm(void)47 +b(bdd_stats\(bddStat*)c(stat\))236 4860 y Fo(Description)p +236 4915 3544 5 v 236 5027 a Fn(This)22 b(function)g(acquires)h +(information)f(ab)s(out)h(the)h(in)m(ternal)f(state)i(of)e(the)h(b)s +(dd)e(pac)m(k)-5 b(age.)40 b(The)23 b(status)236 5140 +y(information)29 b(is)g(written)h(in)m(to)g(the)h Fm(stat)e +Fn(argumen)m(t.)236 5404 y Fo(See)35 b(also)p 236 5458 +V 236 5571 a Fn(b)s(ddStat)1962 5989 y(62)p eop +%%Page: 63 71 +63 70 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(strm)p 670 196 V 37 w(ho)s(ok)96 b Fn({)31 +b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p +236 250 3544 12 v 236 455 a Fm(bddstrmhandler)44 b +(bdd_strm_hook\(bddstrmhand)o(ler)d(handler\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)23 +b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(BDDs)i(is)e +(used)f(to)j(con)m(v)m(ert)g(the)f(BDD)h(v)-5 b(ariable)22 +b(n)m(um)m(b)s(er)236 960 y(in)m(to)34 b(something)e(readable)h(b)m(y)h +(the)f(end)g(user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin)m +(t)i(a)i(string)e(name)236 1073 y(instead)e(of)g(the)h(n)m(um)m(b)s +(er.)39 b(A)31 b(handler)d(could)i(lo)s(ok)g(lik)m(e)f(this:)236 +1260 y Fm(void)47 b(printhandler\(ostream)42 b(&o,)47 +b(int)g(var\))236 1373 y({)379 1486 y(extern)f(char)h(**names;)379 +1599 y(o)h(<<)f(names[var];)236 1712 y(})236 1900 y Fn(The)30 +b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g(lik)m(e)f(this:) +39 b Fm(bdd)p 2510 1900 29 4 v 34 w(strm)p 2736 1900 +V 33 w(hook\(printhandler\))p Fn(.)327 2012 y(No)33 b(default)e +(handler)g(is)g(supplied.)43 b(The)32 b(argumen)m(t)h +Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h(handler)e(is)236 +2125 y(needed.)236 2389 y Fo(Return)35 b(v)-6 b(alue)p +236 2443 3544 5 v 236 2556 a Fn(The)30 b(old)g(handler)236 +2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p +397 2986 28 4 v 31 w(prin)m(tset,)30 b(b)s(dd)p 946 2986 +V 31 w(\014le)p 1094 2986 V 32 w(ho)s(ok,)g(fdd)p 1503 +2986 V 32 w(strm)p 1718 2986 V 32 w(ho)s(ok)p 236 3337 +3544 12 v 236 3450 a Fo(b)s(dd)p 419 3450 32 4 v 38 w(supp)s(ort)96 +b Fn({)31 b(returns)e(the)h(v)-5 b(ariable)29 b(supp)s(ort)g(of)i(a)f +(BDD)p 236 3504 3544 12 v 236 3709 a Fm(BDD)47 b(bdd_support\(BDD)d +(r\))236 3934 y Fo(Description)p 236 3988 3544 5 v 236 +4101 a Fn(Finds)29 b(all)g(the)i(v)-5 b(ariables)29 b(that)i +Fm(r)f Fn(dep)s(ends)e(on.)41 b(That)30 b(is)g(the)g(supp)s(ort)f(of)h +Fm(r)p Fn(.)236 4364 y Fo(Return)35 b(v)-6 b(alue)p 236 +4418 V 236 4531 a Fn(A)31 b(BDD)g(v)-5 b(ariable)29 b(set.)236 +4794 y Fo(See)35 b(also)p 236 4849 V 236 4962 a Fn(b)s(dd)p +397 4962 28 4 v 31 w(mak)m(eset)1962 5989 y(63)p eop +%%Page: 64 72 +64 71 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(sw)m(ap)m(v)-6 b(ar)96 b Fn({)30 b(Sw)m(ap)g(t)m(w)m(o) +i(BDD)f(v)-5 b(ariables)p 236 250 3544 12 v 236 455 a +Fm(int)47 b(bdd_swapvar\(int)d(v1,)j(int)g(v2\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Use)40 +b Fm(bdd)p 570 847 29 4 v 33 w(swapvar)e Fn(to)h(sw)m(ap)h(the)f(p)s +(osition)e(\(in)i(the)g(curren)m(t)g(v)-5 b(ariable)38 +b(order\))h(of)g(the)h(t)m(w)m(o)g(BDD)236 960 y(v)-5 +b(ariables)30 b Fm(v1)h Fn(and)g Fm(v2)p Fn(.)43 b(There)31 +b(are)h(no)f(constrain)m(ts)g(on)h(the)f(p)s(osition)f(of)h(the)h(t)m +(w)m(o)h(v)-5 b(ariables)30 b(b)s(efore)236 1073 y(the)k(call.)49 +b(This)31 b(function)h(ma)m(y)i Ff(not)h Fn(b)s(e)d(used)h(together)i +(with)d(user)h(de\014ned)f(v)-5 b(ariable)32 b(blo)s(c)m(ks.)49 +b(The)236 1186 y(sw)m(ap)40 b(is)f(done)h(b)m(y)g(a)g(series)g(of)g +(adjacen)m(t)h(v)-5 b(ariable)39 b(sw)m(aps)h(and)f(requires)g(the)h +(whole)f(no)s(de)h(table)236 1298 y(to)35 b(b)s(e)d(rehashed)h(t)m +(wice)h(for)g(eac)m(h)g(call)f(to)h Fm(bdd)p 1882 1298 +V 34 w(swapvar)p Fn(.)48 b(It)34 b(should)d(therefore)j(not)g(b)s(e)f +(used)g(w)m(ere)236 1411 y(e\016ciency)e(is)e(a)i(ma)5 +b(jor)30 b(concern.)236 1675 y Fo(Return)35 b(v)-6 b(alue)p +236 1729 3544 5 v 236 1842 a Fn(Zero)31 b(on)f(succes)h(and)e(a)i +(negativ)m(e)h(error)e(co)s(de)g(otherwise.)236 2105 +y Fo(See)35 b(also)p 236 2159 V 236 2272 a Fn(b)s(dd)p +397 2272 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 2272 +V 31 w(addv)-5 b(arblo)s(c)m(k)p 236 2623 3544 12 v 236 +2736 a Fo(b)s(dd)p 419 2736 32 4 v 38 w(true)95 b Fn({)31 +b(returns)e(the)i(constan)m(t)g(true)f(b)s(dd)p 236 2790 +3544 12 v 236 2995 a Fm(BDD)47 b(bdd_true\(void\))236 +3220 y Fo(Description)p 236 3274 3544 5 v 236 3387 a +Fn(This)40 b(function)f(returns)h(the)i(constan)m(t)g(true)f(b)s(dd)e +(and)i(can)g(freely)g(b)s(e)f(used)h(together)h(with)e(the)236 +3500 y Fm(bddtrue)29 b Fn(and)g Fm(bddfalse)f Fn(constan)m(ts.)236 +3763 y Fo(Return)35 b(v)-6 b(alue)p 236 3817 V 236 3930 +a Fn(The)30 b(constan)m(t)i(true)e(b)s(dd)236 4193 y +Fo(See)35 b(also)p 236 4248 V 236 4360 a Fn(b)s(dd)p +397 4360 28 4 v 31 w(false,)30 b(b)s(ddtrue,)f(b)s(ddfalse)1962 +5989 y(64)p eop +%%Page: 65 73 +65 72 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(unique)96 b Fn({)31 b(unique)d(quan)m(ti\014cation)i +(of)g(v)-5 b(ariables)p 236 250 3544 12 v 236 455 a Fm(BDD)47 +b(bdd_unique\(BDD)d(r,)j(BDD)g(var\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Remo)m(v)m(es)41 b(all)c(o)s(ccurences)i +(in)f Fm(r)g Fn(of)h(v)-5 b(ariables)37 b(in)h(the)h(set)g +Fm(var)f Fn(b)m(y)g(unique)f(quan)m(ti\014cation.)65 +b(This)236 960 y(t)m(yp)s(e)26 b(of)g(quan)m(ti\014cation)g(uses)f(a)i +(X)m(OR)f(op)s(erator)g(instead)f(of)h(an)g(OR)g(op)s(erator)g(as)g(in) +f(the)h(existen)m(tial)236 1073 y(quan)m(ti\014cation,)k(and)g(an)g +(AND)h(op)s(erator)g(as)g(in)e(the)h(univ)m(ersal)f(quan)m +(ti\014cation.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p +236 1390 V 236 1503 a Fn(The)30 b(quan)m(ti\014ed)f(BDD.)236 +1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p +397 1933 28 4 v 31 w(exist,)30 b(b)s(dd)p 824 1933 V +31 w(forall,)g(b)s(dd)p 1272 1933 V 30 w(mak)m(eset)p +236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 +4 v 38 w(v)-6 b(ar)96 b Fn({)30 b(gets)i(the)e(v)-5 b(ariable)30 +b(lab)s(eling)d(the)k(b)s(dd)p 236 2451 3544 12 v 236 +2656 a Fm(int)47 b(bdd_var\(BDD)e(r\))236 2881 y Fo(Description)p +236 2935 3544 5 v 236 3048 a Fn(Gets)31 b(the)g(v)-5 +b(ariable)29 b(lab)s(eling)f(the)j(b)s(dd)d Fm(r)p Fn(.)236 +3311 y Fo(Return)35 b(v)-6 b(alue)p 236 3366 V 236 3479 +a Fn(The)30 b(v)-5 b(ariable)29 b(n)m(um)m(b)s(er.)p +236 3812 3544 12 v 236 3925 a Fo(b)s(dd)p 419 3925 32 +4 v 38 w(v)-6 b(ar2lev)m(el)96 b Fn({)31 b(F)-8 b(etc)m(h)32 +b(the)f(lev)m(el)f(of)g(a)h(sp)s(eci\014c)e(BDD)j(v)-5 +b(ariable)p 236 3979 3544 12 v 236 4184 a Fm(int)47 b +(bdd_var2level\(int)c(var\))236 4409 y Fo(Description)p +236 4463 3544 5 v 236 4576 a Fn(Returns)30 b(the)g(p)s(osition)f(of)h +(the)h(v)-5 b(ariable)29 b Fm(var)g Fn(in)h(the)g(curren)m(t)g(v)-5 +b(ariable)29 b(order.)236 4839 y Fo(See)35 b(also)p 236 +4893 V 236 5006 a Fn(b)s(dd)p 397 5006 28 4 v 31 w(reorder,)30 +b(b)s(dd)p 923 5006 V 31 w(lev)m(el2v)-5 b(ar)1962 5989 +y(65)p eop +%%Page: 66 74 +66 73 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(v)-6 b(arblo)s(c)m(k)g(all)97 b Fn({)31 +b(add)e(a)i(v)-5 b(ariable)29 b(blo)s(c)m(k)h(for)g(all)g(v)-5 +b(ariables)p 236 250 3544 12 v 236 455 a Fm(void)47 b +(bdd_varblockall\(void\))236 680 y Fo(Description)p 236 +734 3544 5 v 236 847 a Fn(Adds)40 b(a)i(v)-5 b(ariable)40 +b(blo)s(c)m(k)g(for)h(all)f(BDD)i(v)-5 b(ariables)40 +b(declared)h(so)g(far.)73 b(Eac)m(h)41 b(blo)s(c)m(k)g(con)m(tains)g +(one)236 960 y(v)-5 b(ariable)26 b(only)-8 b(.)39 b(More)27 +b(v)-5 b(ariable)25 b(blo)s(c)m(ks)h(can)h(b)s(e)f(added)g(later)h +(with)e(the)i(use)f(of)h Fm(bdd)p 3155 960 29 4 v 34 +w(addvarblock)c Fn({)236 1073 y(in)29 b(this)g(case)i(the)f(tree)h(of)f +(v)-5 b(ariable)28 b(blo)s(c)m(ks)i(will)d(ha)m(v)m(e)k(the)f(blo)s(c)m +(ks)g(of)g(single)f(v)-5 b(ariables)28 b(as)i(the)h(leafs.)236 +1336 y Fo(See)k(also)p 236 1390 3544 5 v 236 1503 a Fn(b)s(dd)p +397 1503 28 4 v 31 w(addv)-5 b(arblo)s(c)m(k,)30 b(b)s(dd)p +1120 1503 V 30 w(in)m(taddv)-5 b(arblo)s(c)m(k)p 236 +1854 3544 12 v 236 1967 a Fo(b)s(dd)p 419 1967 32 4 v +38 w(v)f(arn)m(um)95 b Fn({)31 b(returns)e(the)i(n)m(um)m(b)s(er)e(of)h +(de\014ned)f(v)-5 b(ariables)p 236 2021 3544 12 v 236 +2226 a Fm(int)47 b(bdd_varnum\(void\))236 2451 y Fo(Description)p +236 2505 3544 5 v 236 2618 a Fn(This)29 b(function)g(returns)g(the)i(n) +m(um)m(b)s(er)e(of)h(v)-5 b(ariables)29 b(de\014ned)g(b)m(y)i(a)f(call) +g(to)h Fm(bdd)p 3025 2618 29 4 v 34 w(setvarnum)p Fn(.)236 +2881 y Fo(Return)k(v)-6 b(alue)p 236 2935 3544 5 v 236 +3048 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(de\014ned)e(v)-5 +b(ariables)236 3311 y Fo(See)35 b(also)p 236 3366 V 236 +3479 a Fn(b)s(dd)p 397 3479 28 4 v 31 w(setv)-5 b(arn)m(um,)30 +b(b)s(dd)p 1049 3479 V 31 w(ith)m(v)-5 b(ar)p 236 3829 +3544 12 v 236 3942 a Fo(b)s(dd)p 419 3942 32 4 v 38 w(v)f(arpro\014le) +96 b Fn({)31 b(returns)e(a)i(v)-5 b(ariable)29 b(pro\014le)p +236 3997 3544 12 v 236 4201 a Fm(int)47 b(*bdd_varprofile\(BDD)c(r\)) +236 4426 y Fo(Description)p 236 4481 3544 5 v 236 4594 +a Fn(Coun)m(ts)34 b(the)g(n)m(um)m(b)s(er)e(of)i(times)f(eac)m(h)i(v)-5 +b(ariable)32 b(o)s(ccurs)i(in)e(the)i(b)s(dd)e Fm(r)p +Fn(.)50 b(The)33 b(result)g(is)f(stored)i(and)236 4706 +y(returned)h(in)g(an)h(in)m(teger)g(arra)m(y)h(where)e(the)h(i'th)g(p)s +(osition)e(stores)i(the)g(n)m(um)m(b)s(er)f(of)h(times)g(the)g(i'th)236 +4819 y(v)-5 b(ariable)30 b(o)s(ccured)g(in)f(the)i(BDD.)h(It)f(is)f +(the)h(users)e(resp)s(onsibilit)m(y)e(to)k(free)g(the)g(arra)m(y)g +(again)g(using)e(a)236 4932 y(call)h(to)h Fm(free)p Fn(.)236 +5195 y Fo(Return)k(v)-6 b(alue)p 236 5250 V 236 5363 +a Fn(A)31 b(p)s(oin)m(ter)e(to)i(an)f(in)m(teger)h(arra)m(y)g(with)e +(the)i(pro\014le)e(or)h(NULL)g(if)g(an)g(error)g(o)s(ccured.)1962 +5989 y(66)p eop +%%Page: 67 75 +67 74 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(v)m(eccomp)s(ose)96 b Fn({)31 b(sim)m(ultaneous)e +(functional)g(comp)s(osition)p 236 250 3544 12 v 236 +455 a Fm(BDD)47 b(bdd_veccompose\(BDD)c(f,)k(bddPair)f(*pair\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Uses)c(the)g +(pairs)f(of)h(v)-5 b(ariables)40 b(and)i(BDDs)g(in)f +Fm(pair)g Fn(to)h(mak)m(e)h(the)f(sim)m(ultaneous)f(substitution:)236 +960 y Fj(f)10 b Fn([)p Fj(g)359 974 y Fh(1)399 960 y +Fj(=V)497 974 y Fh(1)536 960 y Fj(;)15 b(:)g(:)g(:)i(;)e(g)781 +974 y Fi(n)829 960 y Fj(=V)927 974 y Fi(n)974 960 y Fn(].)43 +b(In)30 b(this)g(w)m(a)m(y)i(one)f(or)g(more)g(BDDs)h(ma)m(y)g(b)s(e)e +(substituted)g(in)f(one)i(step.)43 b(The)236 1073 y(BDDs)h(in)d +Fm(pair)g Fn(ma)m(y)i(dep)s(end)d(on)j(the)f(v)-5 b(ariables)41 +b(they)i(are)g(substituting.)74 b Fm(bdd)p 3209 1073 +29 4 v 33 w(compose)41 b Fn(ma)m(y)236 1186 y(b)s(e)d(used)g(instead)g +(of)h Fm(bdd)p 1168 1186 V 33 w(replace)e Fn(but)h(is)f(not)i(as)g +(e\016cien)m(t)g(when)f Fj(g)2765 1200 y Fi(i)2832 1186 +y Fn(is)f(a)i(single)f(v)-5 b(ariable,)39 b(the)236 1298 +y(same)j(applies)e(to)i Fm(bdd)p 1062 1298 V 33 w(restrict)p +Fn(.)72 b(Note)43 b(that)f(sim)m(ultaneous)e(substitution)f(is)i(not)h +(necessarily)236 1411 y(the)k(same)f(as)h(rep)s(eated)f(substitution.) +83 b(Example:)70 b(\()p Fj(x)2279 1425 y Fh(1)2349 1411 +y Fc(_)29 b Fj(x)2491 1425 y Fh(2)2531 1411 y Fn(\)[)p +Fj(x)2643 1425 y Fh(3)2683 1411 y Fj(=x)2780 1425 y Fh(1)2820 +1411 y Fj(;)15 b(x)2912 1425 y Fh(4)2952 1411 y Fj(=x)3049 +1425 y Fh(3)3088 1411 y Fn(])51 b(=)e(\()p Fj(x)3371 +1425 y Fh(3)3441 1411 y Fc(_)30 b Fj(x)3584 1425 y Fh(2)3623 +1411 y Fn(\))51 b Fc(6)p Fn(=)236 1524 y(\(\()p Fj(x)358 +1538 y Fh(1)419 1524 y Fc(_)19 b Fj(x)551 1538 y Fh(2)591 +1524 y Fn(\)[)p Fj(x)703 1538 y Fh(3)743 1524 y Fj(=x)840 +1538 y Fh(1)880 1524 y Fn(]\)[)p Fj(x)1017 1538 y Fh(4)1057 +1524 y Fj(=x)1154 1538 y Fh(3)1194 1524 y Fn(])25 b(=)g(\()p +Fj(x)1427 1538 y Fh(4)1487 1524 y Fc(_)20 b Fj(x)1620 +1538 y Fh(2)1659 1524 y Fn(\).)236 1787 y Fo(Return)35 +b(v)-6 b(alue)p 236 1842 3544 5 v 236 1955 a Fn(The)30 +b(comp)s(osed)g(BDD)236 2218 y Fo(See)35 b(also)p 236 +2272 V 236 2385 a Fn(b)s(dd)p 397 2385 28 4 v 31 w(comp)s(ose,)c(b)s +(dd)p 976 2385 V 31 w(replace,)f(b)s(dd)p 1496 2385 V +31 w(restrict)p 236 2736 3544 12 v 236 2849 a Fo(b)s(dd)p +419 2849 32 4 v 38 w(v)m(ersionn)m(um)96 b Fn({)30 b(returns)g(the)g(v) +m(ersion)g(n)m(um)m(b)s(er)f(of)i(the)f(b)s(dd)f(pac)m(k)-5 +b(age)p 236 2903 3544 12 v 236 3108 a Fm(int)47 b +(bdd_versionnum\(void\))236 3333 y Fo(Description)p 236 +3387 3544 5 v 236 3500 a Fn(This)26 b(function)g(returns)h(the)h(v)m +(ersion)f(n)m(um)m(b)s(er)f(of)i(the)g(b)s(dd)e(pac)m(k)-5 +b(age.)42 b(The)27 b(n)m(um)m(b)s(er)f(is)h(in)f(the)i(range)236 +3613 y(10-99)33 b(for)d(v)m(ersion)g(1.0)h(to)g(9.9.)236 +3876 y Fo(See)k(also)p 236 3930 V 236 4043 a Fn(b)s(dd)p +397 4043 28 4 v 31 w(v)m(ersionstr)p 236 4376 3544 12 +v 236 4489 a Fo(b)s(dd)p 419 4489 32 4 v 38 w(v)m(ersionstr)96 +b Fn({)31 b(returns)e(a)i(text)g(string)f(with)f(v)m(ersion)h +(information)p 236 4543 3544 12 v 236 4748 a Fm(char*)47 +b(bdd_versionstr\(void\))236 4973 y Fo(Description)p +236 5027 3544 5 v 236 5140 a Fn(This)24 b(function)h(returns)g(a)h +(text)h(string)e(with)g(information)f(ab)s(out)i(the)g(v)m(ersion)g(of) +g(the)g(b)s(dd)e(pac)m(k)-5 b(age.)236 5404 y Fo(See)35 +b(also)p 236 5458 V 236 5571 a Fn(b)s(dd)p 397 5571 28 +4 v 31 w(v)m(ersionn)m(um)1962 5989 y(67)p eop +%%Page: 68 76 +68 75 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 +196 32 4 v 38 w(xor)96 b Fn({)31 b(The)f(logical)f('xor')i(of)g(t)m(w)m +(o)h(BDDs)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_xor\(BDD)e(l,)i +(BDD)g(r\))236 680 y Fo(Description)p 236 734 3544 5 +v 236 847 a Fn(This)29 b(a)i(wrapp)s(er)d(that)j(calls)f +Fm(bdd)p 1426 847 29 4 v 33 w(apply\(l,r,bddop)p 2179 +847 V 30 w(xor\))p Fn(.)236 1110 y Fo(Return)35 b(v)-6 +b(alue)p 236 1164 3544 5 v 236 1277 a Fn(The)30 b(logical)g('xor')h(of) +f Fm(l)g Fn(and)g Fm(r)p Fn(.)236 1540 y Fo(See)35 b(also)p +236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 +w(apply)-8 b(,)30 b(b)s(dd)p 852 1707 V 30 w(or,)h(b)s(dd)p +1175 1707 V 31 w(and)p 236 2058 3544 12 v 236 2171 a +Fo(b)s(ddfalse)61 b Fn({)31 b(the)f(constan)m(t)i(false)e(b)s(dd)p +236 2225 V 236 2423 a Fm(extern)46 b(const)h(BDD)g(bddfalse;)236 +2648 y Fo(Description)p 236 2702 3544 5 v 236 2815 a +Fn(This)29 b(b)s(dd)f(holds)h(the)i(constan)m(t)g(false)f(v)-5 +b(alue)236 3078 y Fo(See)35 b(also)p 236 3132 V 236 3245 +a Fn(b)s(ddtrue,)29 b(b)s(dd)p 769 3245 28 4 v 30 w(true,)i(b)s(dd)p +1173 3245 V 31 w(false)p 236 3596 3544 12 v 236 3709 +a Fo(b)s(ddtrue)96 b Fn({)30 b(the)h(constan)m(t)h(true)e(b)s(dd)p +236 3763 V 236 3960 a Fm(extern)46 b(const)h(BDD)g(bddtrue;)236 +4185 y Fo(Description)p 236 4240 3544 5 v 236 4353 a +Fn(This)29 b(b)s(dd)f(holds)h(the)i(constan)m(t)g(true)f(v)-5 +b(alue)236 4616 y Fo(See)35 b(also)p 236 4670 V 236 4783 +a Fn(b)s(ddfalse,)29 b(b)s(dd)p 782 4783 28 4 v 30 w(true,)i(b)s(dd)p +1186 4783 V 31 w(false)1962 5989 y(68)p eop +%%Page: 69 77 +69 76 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)97 +b Fn({)30 b(A)h(b)s(o)s(olean)e(v)m(ector)p 236 250 V +236 447 a Fm(typedef)46 b(struct)g(s_bvec)236 560 y({)379 +673 y(int)h(bitnum;)379 786 y(BDD)g(*bitvec;)236 899 +y(})h(BVEC;)236 1125 y(typedef)e(BVEC)h(bvec;)236 1350 +y Fo(Description)p 236 1404 3544 5 v 236 1517 a Fn(This)33 +b(data)i(structure)f(is)g(used)f(to)j(store)f(b)s(o)s(olean)e(v)m +(ectors.)55 b(The)34 b(\014eld)f Fm(bitnum)g Fn(is)g(the)i(n)m(um)m(b)s +(er)e(of)236 1630 y(elemen)m(ts)e(in)f(the)h(v)m(ector)h(and)e(the)h +(\014eld)e Fm(bitvec)g Fn(con)m(tains)i(the)g(actual)g(BDDs)h(in)e(the) +h(v)m(ector.)43 b(The)236 1743 y(C++)30 b(v)m(ersion)f(of)i +Fm(bvec)e Fn(is)h(do)s(cumen)m(ted)g(at)h(the)f(b)s(eginning)e(of)j +(this)e(do)s(cumen)m(t)p 236 2093 3544 12 v 236 2206 +a Fo(b)m(v)m(ec)p 443 2206 32 4 v 39 w(add)95 b Fn({)31 +b(builds)c(a)k(b)s(o)s(olean)e(v)m(ector)j(for)e(addition)p +236 2261 3544 12 v 236 2465 a Fm(bvec)47 b(bvec_add\(bvec)d(l,)j(bvec)g +(r\))236 2690 y Fo(Description)p 236 2745 3544 5 v 236 +2858 a Fn(Builds)41 b(a)j(new)f(b)s(o)s(olean)f(v)m(ector)j(that)f +(represen)m(ts)f(the)h(addition)d(of)j(t)m(w)m(o)g(other)g(v)m(ectors.) +81 b(Eac)m(h)236 2970 y(elemen)m(t)31 b Fj(x)624 2984 +y Fi(i)683 2970 y Fn(in)e(the)h(result)f(will)f(represen)m(t)j(the)f +(function)463 3158 y Fj(x)515 3172 y Fi(i)569 3158 y +Fn(=)25 b Fj(l)692 3172 y Fi(i)750 3158 y Fn(xor)31 b +Fj(r)951 3172 y Fi(i)1009 3158 y Fn(xor)g Fj(c)1208 3172 +y Fi(i)p Fg(\000)p Fh(1)236 3346 y Fn(where)f(the)h(carry)f(in)f +Fj(c)1036 3360 y Fi(i)1095 3346 y Fn(is)463 3533 y Fj(c)502 +3547 y Fi(i)556 3533 y Fn(=)c(\()p Fj(l)714 3547 y Fi(i)773 +3533 y Fn(and)30 b Fj(r)991 3547 y Fi(i)1019 3533 y Fn(\))h(or)f(\()p +Fj(c)1270 3547 y Fi(i)p Fg(\000)p Fh(1)1420 3533 y Fn(and)f(\()p +Fj(l)1658 3547 y Fi(i)1717 3533 y Fn(or)i Fj(r)1870 3547 +y Fi(i)1898 3533 y Fn(\)\))p Fj(:)236 3721 y Fn(It)g(is)e(imp)s(ortan)m +(t)h(for)g(e\016cency)h(that)g(the)g(BDD)g(v)-5 b(ariables)29 +b(used)h(in)f Fm(l)h Fn(and)g Fm(r)g Fn(are)g(in)m(terlea)m(v)m(ed.)236 +3984 y Fo(Return)35 b(v)-6 b(alue)p 236 4038 V 236 4151 +a Fn(The)30 b(result)f(of)i(the)f(addition)f(\(whic)m(h)h(is)f(already) +h(reference)h(coun)m(ted\))236 4414 y Fo(See)k(also)p +236 4469 V 236 4582 a Fn(b)m(v)m(ec)p 414 4582 28 4 v +34 w(sub,)30 b(b)m(v)m(ec)p 814 4582 V 34 w(m)m(ul,)f(b)m(v)m(ec)p +1225 4582 V 34 w(shl)1962 5989 y(69)p eop +%%Page: 70 78 +70 77 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(addref)95 b Fn({)31 b(increase)f(reference)h(coun)m +(t)g(of)f(a)h(b)s(o)s(olean)e(v)m(ector)p 236 250 3544 +12 v 236 455 a Fm(bvec)47 b(bvec_addref\(bvec)c(v\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Use)32 +b(this)f(function)f(to)i(increase)g(the)f(reference)h(coun)m(t)h(of)e +(all)g(BDDs)h(in)f(a)h Fm(v)p Fn(.)43 b(Please)32 b(note)g(that)h(all) +236 960 y(b)s(o)s(olean)d(v)m(ectors)h(returned)f(from)g(BuDDy)h(are)f +(reference)h(coun)m(ted)g(from)f(the)h(b)s(eginning.)236 +1223 y Fo(Return)k(v)-6 b(alue)p 236 1277 V 236 1390 +a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j Fm(v)236 1653 +y Fo(See)j(also)p 236 1707 V 236 1820 a Fn(b)m(v)m(ec)p +414 1820 28 4 v 34 w(delref)p 236 2154 3544 12 v 236 +2266 a Fo(b)m(v)m(ec)p 443 2266 32 4 v 39 w(co)s(erce)96 +b Fn({)31 b(adjust)f(the)g(size)g(of)h(a)g(b)s(o)s(olean)e(v)m(ector)p +236 2321 3544 12 v 236 2526 a Fm(bvec)47 b(bvec_coerce\(int)c(bitnum,)j +(bvec)h(v\))236 2751 y Fo(Description)p 236 2805 3544 +5 v 236 2918 a Fn(Build)27 b(a)i(b)s(o)s(olean)e(v)m(ector)j(with)e +Fm(bitnum)e Fn(elemen)m(ts)j(copied)f(from)g Fm(v)p Fn(.)40 +b(If)28 b(the)h(n)m(um)m(b)s(er)e(of)i(elemen)m(ts)g(in)236 +3031 y Fm(v)i Fn(is)g(greater)h(than)f Fm(bitnum)f Fn(then)h(the)g +(most)h(signi\014can)m(t)e(bits)g(are)i(remo)m(v)m(ed,)h(otherwise)e +(if)f(n)m(um)m(b)s(er)236 3143 y(is)g(smaller)f(then)h(the)g(v)m(ector) +i(is)e(padded)f(with)g(constan)m(t)i(false)g(BDDs)g(\(zeros\).)236 +3407 y Fo(Return)k(v)-6 b(alue)p 236 3461 V 236 3574 +a Fn(The)30 b(new)g(b)s(o)s(olean)f(v)m(ector)j(\(whic)m(h)e(is)f +(already)h(reference)h(coun)m(ted\))p 236 3930 3544 12 +v 236 4043 a Fo(b)m(v)m(ec)p 443 4043 32 4 v 39 w(con)96 +b Fn({)31 b(Build)d(a)j(b)s(o)s(olean)e(v)m(ector)j(represen)m(ting)e +(an)g(in)m(teger)h(v)-5 b(alue)p 236 4097 3544 12 v 236 +4302 a Fm(bvec)47 b(bvec_con\(int)d(bitnum,)i(int)h(val\))236 +4527 y Fo(Description)p 236 4581 3544 5 v 236 4694 a +Fn(Builds)32 b(a)i(b)s(o)s(olean)e(v)m(ector)k(that)e(represen)m(ts)g +(the)g(v)-5 b(alue)33 b Fm(val)g Fn(using)f Fm(bitnum)g +Fn(bits.)50 b(The)33 b(v)-5 b(alue)33 b(will)236 4807 +y(b)s(e)d(represen)m(ted)g(with)f(the)i(LSB)f(at)h(the)g(p)s(osition)d +(0)j(and)f(the)g(MSB)h(at)g(p)s(osition)d Fm(bitnum)p +Fn(-1.)236 5070 y Fo(Return)35 b(v)-6 b(alue)p 236 5124 +V 236 5237 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j(\(whic)m(h)e(is)f +(already)h(reference)h(coun)m(ted\))236 5500 y Fo(See)k(also)p +236 5554 V 236 5667 a Fn(b)m(v)m(ec)p 414 5667 28 4 v +34 w(true,)c(b)m(v)m(ec)p 839 5667 V 34 w(false,)f(b)m(v)m(ec)p +1276 5667 V 34 w(v)-5 b(ar)1962 5989 y(70)p eop +%%Page: 71 79 +71 78 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(cop)m(y)96 b Fn({)31 b(create)h(a)f(cop)m(y)g(of)f +(a)h(b)m(v)m(ec)p 236 250 3544 12 v 236 455 a Fm(bvec)47 +b(bvec_copy\(bvec)d(src\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Returns)30 b(a)g(cop)m(y)i(of)e +Fm(src)p Fn(.)40 b(The)30 b(result)f(is)g(reference)i(coun)m(ted.)236 +1110 y Fo(See)k(also)p 236 1164 V 236 1277 a Fn(b)m(v)m(ec)p +414 1277 28 4 v 34 w(con)p 236 1610 3544 12 v 236 1723 +a Fo(b)m(v)m(ec)p 443 1723 32 4 v 39 w(delref)95 b Fn({)31 +b(decrease)g(the)g(reference)g(coun)m(t)g(of)f(a)h(b)s(o)s(olean)e(v)m +(ector)p 236 1777 3544 12 v 236 1982 a Fm(bvec)47 b(bvec_delref\(bvec)c +(v\))236 2207 y Fo(Description)p 236 2262 3544 5 v 236 +2374 a Fn(Use)31 b(this)e(function)g(to)i(decrease)h(the)e(reference)h +(coun)m(t)g(of)g(all)e(the)i(BDDs)g(in)e Fm(v)p Fn(.)236 +2638 y Fo(Return)35 b(v)-6 b(alue)p 236 2692 V 236 2805 +a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j Fm(v)236 3068 +y Fo(See)j(also)p 236 3122 V 236 3235 a Fn(b)m(v)m(ec)p +414 3235 28 4 v 34 w(addref)p 236 3568 3544 12 v 236 +3681 a Fo(b)m(v)m(ec)p 443 3681 32 4 v 39 w(div)95 b +Fn({)31 b(builds)c(a)k(b)s(o)s(olean)f(v)m(ector)h(for)g(division)p +236 3735 3544 12 v 236 3940 a Fm(int)47 b(bvec_div\(bvec)d(l,)j(bvec)g +(r,)g(bvec)g(*res,)f(bvec)h(*rem\))236 4165 y Fo(Description)p +236 4219 3544 5 v 236 4332 a Fn(Builds)32 b(a)j(new)e(b)s(o)s(olean)g +(v)m(ector)j(represen)m(ting)e(the)g(in)m(teger)h(division)c(of)j +Fm(l)g Fn(with)f Fm(r)p Fn(.)52 b(The)33 b(result)g(of)236 +4445 y(the)e(division)c(will)h(b)s(e)h(stored)i(in)e +Fm(res)g Fn(and)h(the)g(remainder)f(of)i(the)f(division)d(will)h(b)s(e) +i(stored)g(in)f Fm(rem)p Fn(.)236 4558 y(Both)39 b(v)m(ectors)g(should) +d(b)s(e)h(initialized)e(as)j(the)g(function)e(will)f(try)j(to)g +(release)h(the)f(no)s(des)f(used)g(b)m(y)236 4671 y(them.)k(If)30 +b(an)g(error)g(o)s(ccurs)g(then)g(the)h(no)s(des)e(will)f +Ff(not)j Fn(b)s(e)f(freed.)236 4934 y Fo(Return)35 b(v)-6 +b(alue)p 236 4988 V 236 5101 a Fn(Zero)31 b(on)f(success)g(or)h(a)g +(negativ)m(e)g(error)f(co)s(de)h(on)f(error.)236 5365 +y Fo(See)35 b(also)p 236 5419 V 236 5532 a Fn(b)m(v)m(ec)p +414 5532 28 4 v 34 w(m)m(ul,)30 b(b)m(v)m(ec)p 826 5532 +V 34 w(div\014xed,)e(b)m(v)m(ec)p 1401 5532 V 34 w(add,)i(b)m(v)m(ec)p +1810 5532 V 34 w(shl)1962 5989 y(71)p eop +%%Page: 72 80 +72 79 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(div\014xed)96 b Fn({)30 b(builds)e(a)i(b)s(o)s +(olean)g(v)m(ector)i(for)e(division)d(b)m(y)k(a)f(constan)m(t)p +236 250 3544 12 v 236 455 a Fm(int)47 b(bvec_div\(bvec)d(e,)j(int)g(c,) +h(bvec)e(*res,)h(bvec)f(*rem\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Builds)32 b(a)j(new)e(b)s(o)s(olean)g(v)m +(ector)j(represen)m(ting)e(the)g(in)m(teger)h(division)c(of)j +Fm(e)g Fn(with)f Fm(c)p Fn(.)52 b(The)33 b(result)g(of)236 +960 y(the)e(division)c(will)h(b)s(e)h(stored)i(in)e Fm(res)g +Fn(and)h(the)g(remainder)f(of)i(the)f(division)d(will)h(b)s(e)i(stored) +g(in)f Fm(rem)p Fn(.)236 1073 y(Both)39 b(v)m(ectors)g(should)d(b)s(e)h +(initialized)e(as)j(the)g(function)e(will)f(try)j(to)g(release)h(the)f +(no)s(des)f(used)g(b)m(y)236 1186 y(them.)k(If)30 b(an)g(error)g(o)s +(ccurs)g(then)g(the)h(no)s(des)e(will)f Ff(not)j Fn(b)s(e)f(freed.)236 +1449 y Fo(Return)35 b(v)-6 b(alue)p 236 1503 V 236 1616 +a Fn(Zero)31 b(on)f(success)g(or)h(a)g(negativ)m(e)g(error)f(co)s(de)h +(on)f(error.)236 1879 y Fo(See)35 b(also)p 236 1933 V +236 2046 a Fn(b)m(v)m(ec)p 414 2046 28 4 v 34 w(div,)29 +b(b)m(v)m(ec)p 800 2046 V 34 w(m)m(ul,)h(b)m(v)m(ec)p +1212 2046 V 34 w(add,)g(b)m(v)m(ec)p 1621 2046 V 34 w(shl)p +236 2397 3544 12 v 236 2510 a Fo(b)m(v)m(ec)p 443 2510 +32 4 v 39 w(equ)95 b Fn({)31 b(calculates)g(the)f(truth)g(v)-5 +b(alue)30 b(of)g Fj(x)c Fn(=)e Fj(y)p 236 2564 3544 12 +v 236 2769 a Fm(bdd)47 b(bvec_equ\(bvec)d(l,)j(bvec)g(r\))236 +2994 y Fo(Description)p 236 3048 3544 5 v 236 3161 a +Fn(Returns)25 b(the)g(BDD)i(represen)m(ting)d Fm(l)48 +b(=)f(r)25 b Fn(\()p Ff(not)h Fn(reference)g(coun)m(ted\).)40 +b(Both)26 b(v)m(ectors)h(m)m(ust)e(ha)m(v)m(e)h(the)236 +3274 y(same)31 b(n)m(um)m(b)s(er)e(of)i(bits.)236 3537 +y Fo(See)k(also)p 236 3591 V 236 3704 a Fn(b)m(v)m(ec)p +414 3704 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 3704 +V 34 w(lte,)g(b)m(v)m(ec)p 1151 3704 V 34 w(gth,)h(b)m(v)m(ec)p +1545 3704 V 34 w(gte,)h(b)m(v)m(ec)p 1929 3704 V 34 w(neq)p +236 4055 3544 12 v 236 4168 a Fo(b)m(v)m(ec)p 443 4168 +32 4 v 39 w(false)95 b Fn({)31 b(build)c(a)k(v)m(ector)h(of)e(constan)m +(t)i(false)e(BDDs)p 236 4222 3544 12 v 236 4427 a Fm(bvec)47 +b(bvec_false\(int)d(bitnum\))236 4652 y Fo(Description)p +236 4706 3544 5 v 236 4819 a Fn(Builds)27 b(a)i(b)s(o)s(olean)e(v)m +(ector)k(with)c Fm(bitnum)g Fn(elemen)m(ts,)j(eac)m(h)f(of)g(whic)m(h)f +(are)h(the)g(constan)m(t)h(false)e(BDD.)236 5083 y Fo(Return)35 +b(v)-6 b(alue)p 236 5137 V 236 5250 a Fn(The)30 b(b)s(o)s(olean)f(v)m +(ector)j(\(whic)m(h)e(is)f(already)h(reference)h(coun)m(ted\))236 +5513 y Fo(See)k(also)p 236 5567 V 236 5680 a Fn(b)m(v)m(ec)p +414 5680 28 4 v 34 w(true,)c(b)m(v)m(ec)p 839 5680 V +34 w(con,)g(b)m(v)m(ec)p 1238 5680 V 33 w(v)-5 b(ar)1962 +5989 y(72)p eop +%%Page: 73 81 +73 80 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(free)95 b Fn({)31 b(frees)f(all)f(memory)i(used)e +(b)m(y)h(a)h(b)s(o)s(olean)f(v)m(ector)p 236 250 3544 +12 v 236 455 a Fm(void)47 b(bvec_free\(bvec)d(v\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Use)38 +b(this)f(function)g(to)h(release)h(an)m(y)f(un)m(used)e(b)s(o)s(olean)h +(v)m(ectors.)65 b(The)37 b(decrease)i(of)f(the)g(reference)236 +960 y(coun)m(ts)31 b(on)f(the)h(BDDs)g(in)e Fm(v)h Fn(is)g(done)g(b)m +(y)g Fm(bvec)p 1891 960 29 4 v 34 w(free)p Fn(.)p 236 +1311 3544 12 v 236 1424 a Fo(b)m(v)m(ec)p 443 1424 32 +4 v 39 w(gte)95 b Fn({)31 b(calculates)f(the)h(truth)f(v)-5 +b(alue)29 b(of)i Fj(x)25 b Fc(\025)g Fj(y)p 236 1478 +3544 12 v 236 1683 a Fm(bdd)47 b(bvec_gte\(bvec)d(l,)j(bvec)g(r\))236 +1908 y Fo(Description)p 236 1962 3544 5 v 236 2075 a +Fn(Returns)31 b(the)g(BDD)i(represen)m(ting)e Fm(l)p +Fc(\025)p Fm(r)f Fn(\()p Ff(not)j Fn(reference)f(coun)m(ted\).)44 +b(Both)32 b(v)m(ectors)h(m)m(ust)f(ha)m(v)m(e)g(the)236 +2188 y(same)f(n)m(um)m(b)s(er)e(of)i(bits.)236 2451 y +Fo(See)k(also)p 236 2505 V 236 2618 a Fn(b)m(v)m(ec)p +414 2618 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 2618 +V 34 w(gth,)h(b)m(v)m(ec)p 1182 2618 V 34 w(gth,)g(b)m(v)m(ec)p +1576 2618 V 34 w(equ,)f(b)m(v)m(ec)p 1977 2618 V 34 w(neq)p +236 2969 3544 12 v 236 3082 a Fo(b)m(v)m(ec)p 443 3082 +32 4 v 39 w(gth)95 b Fn({)31 b(calculates)g(the)f(truth)g(v)-5 +b(alue)30 b(of)g Fj(x)25 b(>)g(y)p 236 3136 3544 12 v +236 3341 a Fm(bdd)47 b(bvec_gth\(bvec)d(l,)j(bvec)g(r\))236 +3566 y Fo(Description)p 236 3620 3544 5 v 236 3733 a +Fn(Returns)25 b(the)g(BDD)i(represen)m(ting)d Fm(l)48 +b(>)f(r)25 b Fn(\()p Ff(not)h Fn(reference)g(coun)m(ted\).)40 +b(Both)26 b(v)m(ectors)h(m)m(ust)e(ha)m(v)m(e)h(the)236 +3846 y(same)31 b(n)m(um)m(b)s(er)e(of)i(bits.)236 4109 +y Fo(See)k(also)p 236 4163 V 236 4276 a Fn(b)m(v)m(ec)p +414 4276 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 4276 +V 34 w(lte,)g(b)m(v)m(ec)p 1151 4276 V 34 w(gte,)i(b)m(v)m(ec)p +1535 4276 V 34 w(equ,)f(b)m(v)m(ec)p 1937 4276 V 34 w(neq)1962 +5989 y(73)p eop +%%Page: 74 82 +74 81 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(isconst)96 b Fn({)31 b(test)g(a)g(v)m(ector)h(for)e +(constan)m(t)i(true/false)e(BDDs)p 236 250 3544 12 v +236 455 a Fm(int)47 b(bvec_isconst\(bvec)c(v\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)31 +b(non-zero)h(if)f(the)h(v)m(ector)h Fm(v)e Fn(consists)g(of)h(only)f +(constan)m(t)i(true)e(or)h(false)f(BDDs.)46 b(Otherwise)236 +960 y(zero)31 b(is)f(returned.)39 b(This)29 b(test)i(should)e(prelude)f +(an)m(y)j(call)e(to)j Fm(bvec)p 2569 960 29 4 v 33 w(val)p +Fn(.)236 1223 y Fo(See)j(also)p 236 1277 3544 5 v 236 +1390 a Fn(b)m(v)m(ec)p 414 1390 28 4 v 34 w(v)-5 b(al,)30 +b(b)m(v)m(ec)p 790 1390 V 34 w(con)p 236 1741 3544 12 +v 236 1854 a Fo(b)m(v)m(ec)p 443 1854 32 4 v 39 w(ite)95 +b Fn({)31 b(calculates)f(the)h(if-then-else)e(op)s(erator)i(for)f(a)h +(b)s(o)s(olean)e(v)m(ector)p 236 1908 3544 12 v 236 2113 +a Fm(bvec)47 b(bvec_ite\(bdd)d(a,)j(bvec)g(b,)g(bvec)g(c\))236 +2338 y Fo(Description)p 236 2392 3544 5 v 236 2505 a +Fn(Builds)35 b(a)j(v)m(ector)h(where)e(the)h(b)s(dd)e +Fm(a)h Fn(has)g(b)s(een)g(applied)e(bit)m(wise)h(to)i +Fm(b)g Fn(and)e Fm(c)i Fn(in)e(an)h(if-then-else)236 +2618 y(op)s(eration,)30 b(suc)m(h)g(that)h(the)g(result)e +Fj(r)k Fn(is:)463 2806 y Fj(r)504 2820 y Fi(i)558 2806 +y Fn(=)25 b Fj(ite)p Fn(\()p Fj(a;)15 b(b)922 2820 y +Fi(i)951 2806 y Fj(;)g(c)1030 2820 y Fi(i)1059 2806 y +Fn(\);)236 3143 y Fo(Return)35 b(v)-6 b(alue)p 236 3198 +V 236 3311 a Fn(The)30 b(if-then-else)g(result.)236 3574 +y Fo(See)35 b(also)p 236 3628 V 236 3741 a Fn(b)s(dd)p +397 3741 28 4 v 31 w(ite)p 236 4074 3544 12 v 236 4187 +a Fo(b)m(v)m(ec)p 443 4187 32 4 v 39 w(lte)95 b Fn({)31 +b(calculates)f(the)h(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 +b Fc(\024)g Fj(y)p 236 4241 3544 12 v 236 4446 a Fm(bdd)47 +b(bvec_lte\(bvec)d(l,)j(bvec)g(r\))236 4671 y Fo(Description)p +236 4725 3544 5 v 236 4838 a Fn(Returns)31 b(the)g(BDD)i(represen)m +(ting)e Fm(l)p Fc(\024)p Fm(r)f Fn(\()p Ff(not)j Fn(reference)f(coun)m +(ted\).)44 b(Both)32 b(v)m(ectors)h(m)m(ust)f(ha)m(v)m(e)g(the)236 +4951 y(same)f(n)m(um)m(b)s(er)e(of)i(bits.)236 5214 y +Fo(See)k(also)p 236 5268 V 236 5381 a Fn(b)m(v)m(ec)p +414 5381 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 5381 +V 34 w(gth,)h(b)m(v)m(ec)p 1182 5381 V 34 w(gte,)g(b)m(v)m(ec)p +1565 5381 V 34 w(equ,)g(b)m(v)m(ec)p 1967 5381 V 34 w(neq)1962 +5989 y(74)p eop +%%Page: 75 83 +75 82 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(lth)95 b Fn({)31 b(calculates)f(the)h(truth)f(v)-5 +b(alue)29 b(of)i Fj(x)25 b(<)g(y)p 236 250 3544 12 v +236 455 a Fm(bdd)47 b(bvec_lth\(bvec)d(l,)j(bvec)g(r\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)25 +b(the)g(BDD)i(represen)m(ting)d Fm(l)48 b(<)f(r)25 b +Fn(\()p Ff(not)h Fn(reference)g(coun)m(ted\).)40 b(Both)26 +b(v)m(ectors)h(m)m(ust)e(ha)m(v)m(e)h(the)236 960 y(same)31 +b(n)m(um)m(b)s(er)e(of)i(bits.)236 1223 y Fo(See)k(also)p +236 1277 V 236 1390 a Fn(b)m(v)m(ec)p 414 1390 28 4 v +34 w(lte,)c(b)m(v)m(ec)p 778 1390 V 34 w(gth,)g(b)m(v)m(ec)p +1172 1390 V 34 w(gte,)g(b)m(v)m(ec)p 1555 1390 V 34 w(equ,)g(b)m(v)m +(ec)p 1957 1390 V 34 w(neq)p 236 1741 3544 12 v 236 1854 +a Fo(b)m(v)m(ec)p 443 1854 32 4 v 39 w(map1)94 b Fn({)31 +b(map)f(a)h(function)e(on)m(to)j(a)e(b)s(o)s(olean)g(v)m(ector)p +236 1908 3544 12 v 236 2113 a Fm(bvec)47 b(bvec_map1\(bvec)d(a,)j(bdd)g +(\(*fun\)\(bdd\)\))236 2338 y Fo(Description)p 236 2392 +3544 5 v 236 2505 a Fn(Maps)32 b(the)f(function)g Fm(fun)f +Fn(on)m(to)j(all)d(the)i(elemen)m(ts)f(in)g Fm(a)p Fn(.)43 +b(The)31 b(v)-5 b(alue)31 b(returned)f(from)h Fm(fun)g +Fn(is)f(stored)236 2618 y(in)36 b(a)h(new)g(v)m(ector)h(whic)m(h)e(is)g +(then)h(returned.)59 b(An)37 b(example)f(of)h(a)h(mapping)d(function)h +(is)g Fm(bdd)p 3609 2618 29 4 v 33 w(not)236 2731 y Fn(whic)m(h)29 +b(can)i(b)s(e)f(used)f(lik)m(e)h(this)327 2957 y Fm(bvec)47 +b(res)g(=)g(bvec)p 1050 2957 V 33 w(map1\(a,)f(bdd)p +1609 2957 V 34 w(not\))236 3182 y Fn(to)31 b(negate)h(all)d(the)i(BDDs) +g(in)f Fm(a)p Fn(.)236 3446 y Fo(Return)35 b(v)-6 b(alue)p +236 3500 3544 5 v 236 3613 a Fn(The)30 b(new)g(v)m(ector)i(\(whic)m(h)d +(is)h(already)g(reference)h(coun)m(ted\))236 3876 y Fo(See)k(also)p +236 3930 V 236 4043 a Fn(b)m(v)m(ec)p 414 4043 28 4 v +34 w(map2,)c(b)m(v)m(ec)p 894 4043 V 34 w(map3)1962 5989 +y(75)p eop +%%Page: 76 84 +76 83 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(map2)94 b Fn({)31 b(map)f(a)h(function)e(on)m(to)j +(a)e(b)s(o)s(olean)g(v)m(ector)p 236 250 3544 12 v 236 +455 a Fm(bvec)47 b(bvec_map2\(bvec)d(a,)j(bvec)g(b,)g(bdd)g +(\(*fun\)\(bdd,bdd\)\))236 680 y Fo(Description)p 236 +734 3544 5 v 236 847 a Fn(Maps)38 b(the)g(function)e +Fm(fun)h Fn(on)m(to)h(all)f(the)g(elemen)m(ts)h(in)f +Fm(a)g Fn(and)g Fm(b)p Fn(.)62 b(The)37 b(v)-5 b(alue)37 +b(returned)f(from)h Fm(fun)236 960 y Fn(is)e(stored)h(in)f(a)h(new)f(v) +m(ector)j(whic)m(h)c(is)h(then)h(returned.)55 b(An)36 +b(example)f(of)h(a)h(mapping)d(function)g(is)236 1073 +y Fm(bdd)p 386 1073 29 4 v 34 w(and)29 b Fn(whic)m(h)g(can)i(b)s(e)f +(used)f(lik)m(e)h(this)327 1298 y Fm(bvec)47 b(res)g(=)g(bvec)p +1050 1298 V 33 w(map2\(a,)f(b,)h(bdd)p 1752 1298 V 34 +w(and\))236 1524 y Fn(to)31 b(calculate)g(the)g(logical)f('and')g(of)g +(all)g(the)g(BDDs)i(in)d Fm(a)h Fn(and)f Fm(b)p Fn(.)236 +1787 y Fo(Return)35 b(v)-6 b(alue)p 236 1842 3544 5 v +236 1955 a Fn(The)30 b(new)g(v)m(ector)i(\(whic)m(h)d(is)h(already)g +(reference)h(coun)m(ted\))236 2218 y Fo(See)k(also)p +236 2272 V 236 2385 a Fn(b)m(v)m(ec)p 414 2385 28 4 v +34 w(map1,)c(b)m(v)m(ec)p 894 2385 V 34 w(map3)p 236 +2736 3544 12 v 236 2849 a Fo(b)m(v)m(ec)p 443 2849 32 +4 v 39 w(map3)94 b Fn({)31 b(map)f(a)h(function)e(on)m(to)j(a)e(b)s(o)s +(olean)g(v)m(ector)p 236 2903 3544 12 v 236 3108 a Fm(bvec)47 +b(bvec_map3\(bvec)d(a,)j(bvec)g(b,)g(bvec)f(c,)i(bdd)e +(\(*fun\)\(bdd,bdd,bdd\)\))236 3333 y Fo(Description)p +236 3387 3544 5 v 236 3500 a Fn(Maps)32 b(the)g(function)e +Fm(fun)h Fn(on)m(to)i(all)e(the)h(elemen)m(ts)g(in)e +Fm(a)p Fn(,)i Fm(b)g Fn(and)f Fm(c)p Fn(.)44 b(The)31 +b(v)-5 b(alue)32 b(returned)e(from)h Fm(fun)236 3613 +y Fn(is)k(stored)h(in)f(a)h(new)f(v)m(ector)j(whic)m(h)c(is)h(then)h +(returned.)55 b(An)36 b(example)f(of)h(a)h(mapping)d(function)g(is)236 +3726 y Fm(bdd)p 386 3726 29 4 v 34 w(ite)29 b Fn(whic)m(h)g(can)i(b)s +(e)f(used)f(lik)m(e)h(this)327 3952 y Fm(bvec)47 b(res)g(=)g(bvec)p +1050 3952 V 33 w(map3\(a,)f(b,)h(c,)h(bdd)p 1896 3952 +V 33 w(ite\))236 4177 y Fn(to)31 b(calculate)g(the)g(if-then-else)e +(function)g(for)i(eac)m(h)g(elemen)m(t)g(in)e Fm(a)p +Fn(,)h Fm(b)g Fn(and)g Fm(c)p Fn(.)236 4441 y Fo(Return)35 +b(v)-6 b(alue)p 236 4495 3544 5 v 236 4608 a Fn(The)30 +b(new)g(v)m(ector)i(\(whic)m(h)d(is)h(already)g(reference)h(coun)m +(ted\))236 4871 y Fo(See)k(also)p 236 4925 V 236 5038 +a Fn(b)m(v)m(ec)p 414 5038 28 4 v 34 w(map1,)c(b)m(v)m(ec)p +894 5038 V 34 w(map2)1962 5989 y(76)p eop +%%Page: 77 85 +77 84 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(m)m(ul)94 b Fn({)31 b(builds)c(a)k(b)s(o)s(olean)f +(v)m(ector)i(for)e(m)m(ultiplication)p 236 250 3544 12 +v 236 455 a Fm(bvec)47 b(bvec_mul\(bvec)d(l,)j(bvec)g(r\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)28 +b(a)j(b)s(o)s(olean)e(v)m(ector)j(represen)m(ting)e(the)h(m)m +(ultiplication)c(of)j Fm(l)h Fn(and)e Fm(r)p Fn(.)236 +1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 +a Fn(The)30 b(result)f(of)i(the)f(m)m(ultiplication)e(\(whic)m(h)h(is)h +(already)g(reference)g(coun)m(ted\))236 1540 y Fo(See)35 +b(also)p 236 1595 V 236 1707 a Fn(b)m(v)m(ec)p 414 1707 +28 4 v 34 w(m)m(ul\014xed,)29 b(b)m(v)m(ec)p 1015 1707 +V 34 w(div,)g(b)m(v)m(ec)p 1401 1707 V 34 w(add,)h(b)m(v)m(ec)p +1810 1707 V 34 w(shl)p 236 2058 3544 12 v 236 2171 a +Fo(b)m(v)m(ec)p 443 2171 32 4 v 39 w(m)m(ul\014xed)95 +b Fn({)30 b(builds)e(a)i(b)s(o)s(olean)g(v)m(ector)i(for)e(m)m +(ultiplication)d(with)i(a)i(constan)m(t)p 236 2225 3544 +12 v 236 2430 a Fm(bvec)47 b(bvec_mulfixed\(bvec)c(e,)k(int)g(c\))236 +2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a +Fn(Builds)28 b(a)j(b)s(o)s(olean)e(v)m(ector)j(represen)m(ting)e(the)h +(m)m(ultiplication)c(of)j Fm(e)h Fn(and)e Fm(c)p Fn(.)236 +3086 y Fo(Return)35 b(v)-6 b(alue)p 236 3140 V 236 3253 +a Fn(The)30 b(result)f(of)i(the)f(m)m(ultiplication)e(\(whic)m(h)h(is)h +(already)g(reference)g(coun)m(ted\))236 3516 y Fo(See)35 +b(also)p 236 3570 V 236 3683 a Fn(b)m(v)m(ec)p 414 3683 +28 4 v 34 w(m)m(ul,)30 b(b)m(v)m(ec)p 826 3683 V 34 w(div,)f(b)m(v)m +(ec)p 1212 3683 V 34 w(add,)h(b)m(v)m(ec)p 1621 3683 +V 34 w(shl)p 236 4034 3544 12 v 236 4147 a Fo(b)m(v)m(ec)p +443 4147 32 4 v 39 w(neq)95 b Fn({)31 b(calculates)g(the)f(truth)g(v)-5 +b(alue)30 b(of)g Fj(x)c Fc(6)p Fn(=)e Fj(y)p 236 4201 +3544 12 v 236 4406 a Fm(bdd)47 b(bvec_neq\(bvec)d(l,)j(bvec)g(r\))236 +4631 y Fo(Description)p 236 4685 3544 5 v 236 4798 a +Fn(Returns)31 b(the)g(BDD)i(represen)m(ting)e Fm(l)p +Fc(6)p Fn(=)p Fm(r)f Fn(\()p Ff(not)j Fn(reference)f(coun)m(ted\).)44 +b(Both)32 b(v)m(ectors)h(m)m(ust)f(ha)m(v)m(e)g(the)236 +4911 y(same)f(n)m(um)m(b)s(er)e(of)i(bits.)236 5174 y +Fo(See)k(also)p 236 5228 V 236 5341 a Fn(b)m(v)m(ec)p +414 5341 28 4 v 34 w(lte,)c(b)m(v)m(ec)p 778 5341 V 34 +w(lth,)e(b)m(v)m(ec)p 1151 5341 V 34 w(gth,)i(b)m(v)m(ec)p +1545 5341 V 34 w(gth,)g(b)m(v)m(ec)p 1939 5341 V 34 w(equ)1962 +5989 y(77)p eop +%%Page: 78 86 +78 85 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(shl)95 b Fn({)31 b(shift)e(left)h(op)s(eration)g +(\(sym)m(b)s(olic\))p 236 250 3544 12 v 236 455 a Fm(bvec)47 +b(bvec_shl\(bvec)d(l,)j(bvec)g(r,)g(BDD)g(c\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)38 +b(a)j(b)s(o)s(olean)f(v)m(ector)i(that)f(represen)m(ts)f +Fm(l)g Fn(shifted)f Fm(r)h Fn(times)g(to)h(the)g(left.)70 +b(The)40 b(new)g(empt)m(y)236 960 y(elemen)m(ts)e(will)c(b)s(e)j(set)g +(to)h Fm(c)p Fn(.)61 b(The)36 b(shift)g(op)s(eration)g(is)h(fully)d +(sym)m(b)s(olic)i(and)g(the)i(n)m(um)m(b)s(er)d(of)j(bits)236 +1073 y(shifted)29 b(dep)s(ends)g(on)h(the)h(curren)m(t)f(v)-5 +b(alue)30 b(enco)s(ded)g(b)m(y)g Fm(r)p Fn(.)236 1336 +y Fo(Return)35 b(v)-6 b(alue)p 236 1390 V 236 1503 a +Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g(is)f +(already)h(reference)h(coun)m(ted\))236 1766 y Fo(See)k(also)p +236 1820 V 236 1933 a Fn(b)m(v)m(ec)p 414 1933 28 4 v +34 w(add,)30 b(b)m(v)m(ec)p 823 1933 V 34 w(m)m(ul,)g(b)m(v)m(ec)p +1235 1933 V 34 w(shl\014xed,)e(b)m(v)m(ec)p 1798 1933 +V 34 w(shr)p 236 2284 3544 12 v 236 2397 a Fo(b)m(v)m(ec)p +443 2397 32 4 v 39 w(shl\014xed)96 b Fn({)31 b(shift)e(left)h(op)s +(eration)f(\(\014xed)i(n)m(um)m(b)s(er)e(of)h(bits\))p +236 2451 3544 12 v 236 2656 a Fm(bvec)47 b(bvec_shlfixed\(bvec)c(v,)k +(int)g(pos,)f(BDD)h(c\))236 2881 y Fo(Description)p 236 +2935 3544 5 v 236 3048 a Fn(Builds)33 b(a)i(b)s(o)s(olean)f(v)m(ector)i +(that)f(represen)m(ts)g Fm(v)g Fn(shifted)e Fm(pos)h +Fn(times)g(to)i(the)f(left.)53 b(The)35 b(new)f(empt)m(y)236 +3161 y(elemen)m(ts)d(will)d(b)s(e)h(set)i(to)g Fm(c)p +Fn(.)236 3424 y Fo(Return)k(v)-6 b(alue)p 236 3479 V +236 3591 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g +(is)f(already)h(reference)h(coun)m(ted\))236 3855 y Fo(See)k(also)p +236 3909 V 236 4022 a Fn(b)m(v)m(ec)p 414 4022 28 4 v +34 w(add,)30 b(b)m(v)m(ec)p 823 4022 V 34 w(m)m(ul,)g(b)m(v)m(ec)p +1235 4022 V 34 w(shl,)f(b)m(v)m(ec)p 1609 4022 V 34 w(shr)1962 +5989 y(78)p eop +%%Page: 79 87 +79 86 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(shr)96 b Fn({)30 b(shift)f(righ)m(t)h(op)s(eration) +g(\(sym)m(b)s(olic\))p 236 250 3544 12 v 236 455 a Fm(bvec)47 +b(bvec_shr\(bvec)d(l,)j(bvec)g(r,)g(BDD)g(c\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)35 +b(a)i(b)s(o)s(olean)f(v)m(ector)i(that)g(represen)m(ts)e +Fm(l)h Fn(shifted)e Fm(r)i Fn(times)f(to)i(the)f(righ)m(t.)59 +b(The)37 b(new)f(empt)m(y)236 960 y(elemen)m(ts)i(will)c(b)s(e)j(set)g +(to)h Fm(c)p Fn(.)61 b(The)36 b(shift)g(op)s(eration)g(is)h(fully)d +(sym)m(b)s(olic)i(and)g(the)i(n)m(um)m(b)s(er)d(of)j(bits)236 +1073 y(shifted)29 b(dep)s(ends)g(on)h(the)h(curren)m(t)f(v)-5 +b(alue)30 b(enco)s(ded)g(b)m(y)g Fm(r)p Fn(.)236 1336 +y Fo(Return)35 b(v)-6 b(alue)p 236 1390 V 236 1503 a +Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g(is)f +(already)h(reference)h(coun)m(ted\))236 1766 y Fo(See)k(also)p +236 1820 V 236 1933 a Fn(b)m(v)m(ec)p 414 1933 28 4 v +34 w(add,)30 b(b)m(v)m(ec)p 823 1933 V 34 w(m)m(ul,)g(b)m(v)m(ec)p +1235 1933 V 34 w(shl,)f(b)m(v)m(ec)p 1609 1933 V 34 w(shr\014xed)p +236 2284 3544 12 v 236 2397 a Fo(b)m(v)m(ec)p 443 2397 +32 4 v 39 w(shr\014xed)96 b Fn({)31 b(shift)e(righ)m(t)h(op)s(eration)p +236 2451 3544 12 v 236 2656 a Fm(bvec)47 b(bvec_shrfixed\(bvec)c(v,)k +(int)g(pos,)f(BDD)h(c\))236 2881 y Fo(Description)p 236 +2935 3544 5 v 236 3048 a Fn(Builds)29 b(a)j(b)s(o)s(olean)e(v)m(ector)j +(that)f(represen)m(ts)f Fm(v)g Fn(shifted)e Fm(pos)i +Fn(times)f(to)i(the)g(righ)m(t.)43 b(The)30 b(new)h(empt)m(y)236 +3161 y(elemen)m(ts)g(will)d(b)s(e)h(set)i(to)g Fm(c)p +Fn(.)236 3424 y Fo(Return)k(v)-6 b(alue)p 236 3479 V +236 3591 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g +(is)f(already)h(reference)h(coun)m(ted\))236 3855 y Fo(See)k(also)p +236 3909 V 236 4022 a Fn(b)m(v)m(ec)p 414 4022 28 4 v +34 w(add,)30 b(b)m(v)m(ec)p 823 4022 V 34 w(m)m(ul,)g(b)m(v)m(ec)p +1235 4022 V 34 w(shr,)f(b)m(v)m(ec)p 1619 4022 V 34 w(shl)1962 +5989 y(79)p eop +%%Page: 80 88 +80 87 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(sub)96 b Fn({)30 b(builds)d(a)k(b)s(o)s(olean)f(v)m +(ector)i(for)e(subtraction)p 236 250 3544 12 v 236 455 +a Fm(bvec)47 b(bvec_sub\(bvec)d(l,)j(bvec)g(r\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)33 +b(a)j(new)e(b)s(o)s(olean)h(v)m(ector)h(that)g(represen)m(ts)f(the)h +(subtraction)e(of)h(t)m(w)m(o)i(other)e(v)m(ectors.)57 +b(Eac)m(h)236 960 y(elemen)m(t)31 b Fj(x)624 974 y Fi(i)683 +960 y Fn(in)e(the)h(result)f(will)f(represen)m(t)j(the)f(function)463 +1147 y Fj(x)515 1161 y Fi(i)569 1147 y Fn(=)25 b Fj(l)692 +1161 y Fi(i)750 1147 y Fn(xor)31 b Fj(r)951 1161 y Fi(i)1009 +1147 y Fn(xor)g Fj(c)1208 1161 y Fi(i)p Fg(\000)p Fh(1)236 +1335 y Fn(where)f(the)h(carry)f(in)f Fj(c)1036 1349 y +Fi(i)1095 1335 y Fn(is)463 1523 y Fj(c)502 1537 y Fi(i)556 +1523 y Fn(=)c(\()p Fj(l)714 1537 y Fi(i)773 1523 y Fn(and)30 +b Fj(r)991 1537 y Fi(i)1049 1523 y Fn(and)g Fj(c)1265 +1537 y Fi(i)p Fg(\000)p Fh(1)1384 1523 y Fn(\))h(or)f(\(not)h +Fj(l)1785 1537 y Fi(i)1844 1523 y Fn(and)e(\()p Fj(r)2096 +1537 y Fi(i)2155 1523 y Fn(or)h Fj(c)2305 1537 y Fi(i)p +Fg(\000)p Fh(1)2424 1523 y Fn(\)\))p Fj(:)236 1710 y +Fn(It)h(is)e(imp)s(ortan)m(t)h(for)g(e\016cency)h(that)g(the)g(BDD)g(v) +-5 b(ariables)29 b(used)h(in)f Fm(l)h Fn(and)g Fm(r)g +Fn(are)g(in)m(terlea)m(v)m(ed.)236 1973 y Fo(Return)35 +b(v)-6 b(alue)p 236 2028 V 236 2141 a Fn(The)30 b(result)f(of)i(the)f +(subtraction)g(\(whic)m(h)f(is)h(already)g(reference)h(coun)m(ted\))236 +2404 y Fo(See)k(also)p 236 2458 V 236 2571 a Fn(b)m(v)m(ec)p +414 2571 28 4 v 34 w(add,)30 b(b)m(v)m(ec)p 823 2571 +V 34 w(m)m(ul,)g(b)m(v)m(ec)p 1235 2571 V 34 w(shl)p +236 2922 3544 12 v 236 3035 a Fo(b)m(v)m(ec)p 443 3035 +32 4 v 39 w(true)95 b Fn({)31 b(build)c(a)k(v)m(ector)h(of)e(constan)m +(t)i(true)e(BDDs)p 236 3089 3544 12 v 236 3294 a Fm(bvec)47 +b(bvec_true\(int)d(bitnum\))236 3519 y Fo(Description)p +236 3573 3544 5 v 236 3686 a Fn(Builds)28 b(a)i(b)s(o)s(olean)e(v)m +(ector)j(with)e Fm(bitnum)f Fn(elemen)m(ts,)i(eac)m(h)h(of)f(whic)m(h)e +(are)i(the)g(constan)m(t)h(true)e(BDD.)236 3949 y Fo(Return)35 +b(v)-6 b(alue)p 236 4003 V 236 4116 a Fn(The)30 b(b)s(o)s(olean)f(v)m +(ector)j(\(whic)m(h)e(is)f(already)h(reference)h(coun)m(ted\))236 +4379 y Fo(See)k(also)p 236 4434 V 236 4546 a Fn(b)m(v)m(ec)p +414 4546 28 4 v 34 w(false,)30 b(b)m(v)m(ec)p 851 4546 +V 34 w(con,)h(b)m(v)m(ec)p 1250 4546 V 34 w(v)-5 b(ar)1962 +5989 y(80)p eop +%%Page: 81 89 +81 88 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(v)-6 b(al)95 b Fn({)31 b(calculate)g(the)f(in)m +(teger)h(v)-5 b(alue)30 b(represen)m(ted)g(b)m(y)h(a)f(b)s(o)s(olean)g +(v)m(ector)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bvec_val\(bvec)d +(v\))236 680 y Fo(Description)p 236 734 3544 5 v 236 +847 a Fn(Calculates)35 b(the)h(v)-5 b(alue)35 b(represen)m(ted)g(b)m(y) +h(the)f(bits)g(in)f Fm(v)h Fn(assuming)f(that)i(the)g(v)m(ector)h +Fm(v)e Fn(consists)g(of)236 960 y(only)30 b(constan)m(t)h(true)g(or)f +(false)g(BDDs.)42 b(The)30 b(LSB)g(is)f(assumed)h(to)h(b)s(e)f(at)h(p)s +(osition)d(zero.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p +236 1277 V 236 1390 a Fn(The)30 b(in)m(teger)h(v)-5 b(alue)30 +b(represen)m(ted)g(b)m(y)g Fm(v)p Fn(.)236 1653 y Fo(See)35 +b(also)p 236 1707 V 236 1820 a Fn(b)m(v)m(ec)p 414 1820 +28 4 v 34 w(isconst,)30 b(b)m(v)m(ec)p 945 1820 V 34 +w(con)p 236 2171 3544 12 v 236 2284 a Fo(b)m(v)m(ec)p +443 2284 32 4 v 39 w(v)-6 b(ar)95 b Fn({)31 b(build)c(a)k(b)s(o)s +(olean)f(v)m(ector)i(with)d(BDD)i(v)-5 b(ariables)p 236 +2338 3544 12 v 236 2543 a Fm(bvec)47 b(bvec_var\(int)d(bitnum,)i(int)h +(offset,)f(int)h(step\))236 2768 y Fo(Description)p 236 +2822 3544 5 v 236 2935 a Fn(Builds)27 b(a)i(b)s(o)s(olean)f(v)m(ector)i +(with)e(the)h(BDD)h(v)-5 b(ariables)27 b Fj(v)2211 2949 +y Fh(1)2251 2935 y Fj(;)15 b(:)g(:)g(:)h(;)f(v)2496 2949 +y Fi(n)2573 2935 y Fn(as)29 b(the)g(elemen)m(ts.)40 b(Eac)m(h)30 +b(v)-5 b(ariable)236 3048 y(will)25 b(b)s(e)i(the)g(the)h(v)-5 +b(ariabled)26 b(n)m(um)m(b)s(ered)g Fm(offset)46 b(+)h(N*step)26 +b Fn(where)h Fm(N)g Fn(ranges)g(from)g(0)h(to)g Fm(bitnum)p +Fn(-1.)236 3311 y Fo(Return)35 b(v)-6 b(alue)p 236 3366 +V 236 3479 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j(\(whic)m(h)e(is)f +(already)h(reference)h(coun)m(ted\))236 3742 y Fo(See)k(also)p +236 3796 V 236 3909 a Fn(b)m(v)m(ec)p 414 3909 28 4 v +34 w(true,)c(b)m(v)m(ec)p 839 3909 V 34 w(false,)f(b)m(v)m(ec)p +1276 3909 V 34 w(con)1962 5989 y(81)p eop +%%Page: 82 90 +82 89 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p +443 196 32 4 v 39 w(v)-6 b(arfdd)95 b Fn({)31 b(build)d(a)i(b)s(o)s +(olean)g(v)m(ector)i(from)e(a)g(FDD)i(v)-5 b(ariable)29 +b(blo)s(c)m(k)p 236 250 3544 12 v 236 455 a Fm(bvec)47 +b(bvec_varfdd\(int)c(var\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Builds)32 b(a)i(b)s(o)s(olean)e(v)m +(ector)k(whic)m(h)c(will)f(include)h(exactly)i(the)g(v)-5 +b(ariables)32 b(used)h(to)h(de\014ne)f(the)h(FDD)236 +960 y(v)-5 b(ariable)29 b(blo)s(c)m(k)h Fm(var)p Fn(.)40 +b(The)30 b(v)m(ector)i(will)c(ha)m(v)m(e)j(the)g(LSB)f(at)h(p)s +(osition)d(zero.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p +236 1277 V 236 1390 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j(\(whic)m +(h)e(is)f(already)h(reference)h(coun)m(ted\))236 1653 +y Fo(See)k(also)p 236 1707 V 236 1820 a Fn(b)m(v)m(ec)p +414 1820 28 4 v 34 w(v)-5 b(ar)p 236 2154 3544 12 v 236 +2266 a Fo(b)m(v)m(ec)p 443 2266 32 4 v 39 w(v)f(arv)m(ec)96 +b Fn({)31 b(build)c(a)k(b)s(o)s(olean)e(v)m(ector)j(with)d(the)i(v)-5 +b(ariables)29 b(passed)h(in)f(an)h(arra)m(y)p 236 2321 +3544 12 v 236 2526 a Fm(bvec)47 b(bvec_varvec\(int)c(bitnum,)j(int)h +(*var\))236 2751 y Fo(Description)p 236 2805 3544 5 v +236 2918 a Fn(Builds)30 b(a)i(b)s(o)s(olean)f(v)m(ector)j(with)d(the)h +(BDD)h(v)-5 b(ariables)31 b(listed)f(in)h(the)h(arra)m(y)h +Fm(var)p Fn(.)45 b(The)31 b(arra)m(y)i(m)m(ust)236 3031 +y(b)s(e)d(of)g(size)h Fm(bitnum)p Fn(.)236 3294 y Fo(Return)k(v)-6 +b(alue)p 236 3348 V 236 3461 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j +(\(whic)m(h)e(is)f(already)h(reference)h(coun)m(ted\))236 +3724 y Fo(See)k(also)p 236 3778 V 236 3891 a Fn(b)m(v)m(ec)p +414 3891 28 4 v 34 w(v)-5 b(ar)p 236 4224 3544 12 v 236 +4337 a Fo(fdd)p 390 4337 32 4 v 38 w(clearall)96 b Fn({)30 +b(clear)h(all)e(allo)s(cated)h(FDD)i(blo)s(c)m(ks)p 236 +4391 3544 12 v 236 4596 a Fm(void)47 b(fdd_clearall\(void\))236 +4821 y Fo(Description)p 236 4876 3544 5 v 236 4988 a +Fn(Remo)m(v)m(es)96 b(all)d(de\014ned)h(\014nite)f(domain)g(blo)s(c)m +(ks)h(de\014ned)f(b)m(y)h Fm(fdd)p 2986 4988 29 4 v 34 +w(extdomain\(\))d Fn(and)236 5101 y Fm(fdd)p 386 5101 +V 34 w(overlapdomain\(\))1962 5989 y Fn(82)p eop +%%Page: 83 91 +83 90 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(domain)95 b Fn({)31 b(BDD)g(enco)s(ding)e(of)i(the)g +(domain)e(of)h(a)h(FDD)h(v)-5 b(ariable)p 236 250 3544 +12 v 236 455 a Fm(BDD)47 b(fdd_domain\(int)d(var\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)29 +b(what)g(corresp)s(onds)f(to)i(a)g(disjunction)d(of)i(all)g(p)s +(ossible)e(v)-5 b(alues)28 b(of)i(the)g(v)-5 b(ariable)28 +b Fm(var)p Fn(.)39 b(This)236 960 y(is)30 b(more)i(e\016cien)m(t)g +(than)e(doing)h Fm(fdd)p 1505 960 29 4 v 33 w(ithvar\(var,0\))45 +b(OR)i(fdd)p 2494 960 V 33 w(ithvar\(var,1\))d(...)e +Fn(explicitely)236 1073 y(for)30 b(all)g(v)-5 b(alues)29 +b(in)g(the)i(domain)e(of)i Fm(var)p Fn(.)236 1336 y Fo(Return)k(v)-6 +b(alue)p 236 1390 3544 5 v 236 1503 a Fn(The)30 b(enco)s(ding)f(of)i +(the)g(domain)p 236 1854 3544 12 v 236 1967 a Fo(fdd)p +390 1967 32 4 v 38 w(domainn)m(um)94 b Fn({)31 b(n)m(um)m(b)s(er)e(of)i +(de\014ned)e(\014nite)g(domain)g(blo)s(c)m(ks)p 236 2021 +3544 12 v 236 2226 a Fm(int)47 b(fdd_domainnum\(void\))236 +2451 y Fo(Description)p 236 2505 3544 5 v 236 2618 a +Fn(Returns)30 b(the)g(n)m(um)m(b)s(er)f(of)i(\014nite)e(domain)g(blo)s +(c)m(ks)h(de\014ne)g(b)m(y)g(calls)g(to)h Fm(bdd)p 2857 +2618 29 4 v 33 w(extdomain)p Fn(.)236 2881 y Fo(Return)k(v)-6 +b(alue)p 236 2935 3544 5 v 236 3048 a Fn(The)30 b(n)m(um)m(b)s(er)f(of) +i(de\014ned)e(\014nite)g(domain)g(blo)s(c)m(ks)h(or)g(a)h(negativ)m(e)h +(error)e(co)s(de)236 3311 y Fo(See)35 b(also)p 236 3366 +V 236 3479 a Fn(fdd)p 371 3479 28 4 v 32 w(domainsize,)29 +b(fdd)p 1023 3479 V 32 w(extdomain)p 236 3829 3544 12 +v 236 3942 a Fo(fdd)p 390 3942 32 4 v 38 w(domainsize)95 +b Fn({)31 b(real)f(size)g(of)h(a)g(\014nite)e(domain)g(blo)s(c)m(k)p +236 3997 3544 12 v 236 4201 a Fm(int)47 b(fdd_domainsize\(int)c(var\)) +236 4426 y Fo(Description)p 236 4481 3544 5 v 236 4594 +a Fn(Returns)30 b(the)g(size)g(of)h(the)g(domain)e(for)h(the)h +(\014nite)e(domain)g(blo)s(c)m(k)h Fm(var)p Fn(.)236 +4857 y Fo(Return)35 b(v)-6 b(alue)p 236 4911 V 236 5024 +a Fn(The)30 b(size)g(or)h(a)f(negativ)m(e)i(error)e(co)s(de)236 +5287 y Fo(See)35 b(also)p 236 5341 V 236 5454 a Fn(fdd)p +371 5454 28 4 v 32 w(domainn)m(um)1962 5989 y(83)p eop +%%Page: 84 92 +84 91 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(equals)96 b Fn({)30 b(returns)g(a)g(BDD)i(setting)e(t)m(w)m +(o)i(FD.)f(blo)s(c)m(ks)f(equal)p 236 250 3544 12 v 236 +455 a Fm(BDD)47 b(fdd_equals\(int)d(f,)j(int)g(g\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)26 +b(a)i(BDD)g(whic)m(h)f(is)f(true)i(for)f(all)g(the)g(p)s(ossible)f +(assignmen)m(ts)h(to)h(the)g(v)-5 b(ariable)27 b(blo)s(c)m(ks)g +Fm(f)g Fn(and)g Fm(g)236 960 y Fn(that)k(mak)m(es)g(the)g(blo)s(c)m(ks) +f(equal.)40 b(This)29 b(is)g(more)i(or)f(less)g(just)f(a)i(shorthand)e +(for)h(calling)f Fm(fdd)p 3482 960 29 4 v 34 w(equ\(\))p +Fn(.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 +3544 5 v 236 1390 a Fn(The)30 b(correct)i(BDD)f(or)g(the)f(constan)m(t) +i(false)e(on)g(errors.)p 236 1723 3544 12 v 236 1836 +a Fo(fdd)p 390 1836 32 4 v 38 w(extdomain)95 b Fn({)30 +b(adds)g(another)h(set)f(of)h(\014nite)e(domain)h(blo)s(c)m(ks)p +236 1890 3544 12 v 236 2095 a Fm(int)47 b(fdd_extdomain\(int)c(*dom,)k +(int)f(num\))236 2320 y Fo(Description)p 236 2374 3544 +5 v 236 2487 a Fn(Extends)32 b(the)g(set)h(of)f(\014nite)g(domain)f +(blo)s(c)m(ks)g(with)g(the)i Fm(num)e Fn(domains)g(in)g +Fm(dom)p Fn(.)45 b(Eac)m(h)33 b(en)m(try)f(in)f Fm(dom)236 +2600 y Fn(de\014nes)d(the)i(size)f(of)g(a)g(new)g(\014nite)f(domain)g +(whic)m(h)f(later)j(on)e(can)i(b)s(e)e(used)h(for)f(\014nite)g(state)j +(mac)m(hine)236 2713 y(tra)m(v)m(ersal)43 b(and)e(other)h(op)s +(erations)f(on)h(\014n)m(te)g(domains.)73 b(Eac)m(h)43 +b(domain)d(allo)s(cates)i(log)3366 2735 y Fh(2)3405 2713 +y Fn(\()p Fc(j)p Fj(dom)p Fn([)p Fj(i)p Fn(])p Fc(j)p +Fn(\))236 2826 y(BDD)c(v)-5 b(ariables)36 b(to)h(b)s(e)f(used)g(later.) +60 b(The)36 b(ordering)f(is)h(in)m(terlea)m(v)m(ed)h(for)g(the)g +(domains)e(de\014ned)h(in)236 2939 y(eac)m(h)27 b(call)d(to)j +Fm(bdd)p 854 2939 29 4 v 33 w(extdomain)p Fn(.)37 b(This)23 +b(means)i(that)h(assuming)e(domain)h Fj(D)2826 2953 y +Fh(0)2891 2939 y Fn(needs)f(2)i(BDD)h(v)-5 b(ariables)236 +3052 y Fj(x)288 3066 y Fh(1)354 3052 y Fn(and)25 b Fj(x)578 +3066 y Fh(2)618 3052 y Fn(,)i(and)e(another)i(domain)e +Fj(D)1566 3066 y Fh(1)1632 3052 y Fn(needs)g(4)i(BDD)g(v)-5 +b(ariables)25 b Fj(y)2594 3066 y Fh(1)2633 3052 y Fj(;)15 +b(y)2718 3066 y Fh(2)2757 3052 y Fj(;)g(y)2842 3066 y +Fh(3)2908 3052 y Fn(and)26 b Fj(y)3126 3066 y Fh(4)3165 +3052 y Fn(,)h(then)f(the)g(order)236 3165 y(will)g(b)s(e)i +Fj(x)580 3179 y Fh(1)620 3165 y Fj(;)15 b(y)705 3179 +y Fh(1)744 3165 y Fj(;)g(x)836 3179 y Fh(2)876 3165 y +Fj(;)g(y)961 3179 y Fh(2)1000 3165 y Fj(;)g(y)1085 3179 +y Fh(3)1125 3165 y Fj(;)g(y)1210 3179 y Fh(4)1249 3165 +y Fn(.)40 b(The)29 b(index)e(of)i(the)g(\014rst)f(domain)g(in)f +Fm(dom)h Fn(is)g(returned.)39 b(The)28 b(index)f(of)236 +3278 y(the)k(other)f(domains)g(are)g(o\013set)i(from)e(this)f(index)g +(with)g(the)h(same)h(o\013set)h(as)e(in)f Fm(dom)p Fn(.)327 +3391 y(The)36 b(BDD)h(v)-5 b(ariables)35 b(needed)h(to)g(enco)s(de)h +(the)f(domain)f(are)h(created)i(for)d(the)i(purp)s(ose)d(and)i(do)236 +3504 y(not)31 b(in)m(terfere)f(with)f(the)i(BDD)g(v)-5 +b(ariables)29 b(already)h(in)f(use.)236 3767 y Fo(Return)35 +b(v)-6 b(alue)p 236 3821 3544 5 v 236 3934 a Fn(The)30 +b(index)f(of)i(the)f(\014rst)g(domain)f(or)h(a)h(negativ)m(e)h(error)e +(co)s(de.)236 4197 y Fo(See)35 b(also)p 236 4251 V 236 +4364 a Fn(fdd)p 371 4364 28 4 v 32 w(ith)m(v)-5 b(ar,)30 +b(fdd)p 821 4364 V 31 w(equals,)g(fdd)p 1283 4364 V 32 +w(o)m(v)m(erlap)s(domain)1962 5989 y(84)p eop +%%Page: 85 93 +85 92 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(\014le)p 563 196 V 38 w(ho)s(ok)96 b Fn({)31 +b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p +236 250 3544 12 v 236 455 a Fm(bddfilehandler)44 b +(fdd_file_hook\(bddfilehand)o(ler)d(handler\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)23 +b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(FDDs)i(is)d +(used)h(to)i(con)m(v)m(ert)g(the)f(FDD)h(in)m(teger)f(iden)m(ti\014er) +236 960 y(in)m(to)34 b(something)e(readable)h(b)m(y)h(the)f(end)g +(user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin)m(t)i(a)i +(string)e(name)236 1073 y(instead)e(of)g(the)h(iden)m(ti\014er.)39 +b(A)30 b(handler)f(could)g(lo)s(ok)h(lik)m(e)g(this:)236 +1260 y Fm(void)47 b(printhandler\(FILE)c(*o,)k(int)g(var\))236 +1373 y({)379 1486 y(extern)f(char)h(**names;)379 1599 +y(fprintf\(o,)e("\045s",)i(names[var]\);)236 1712 y(})236 +1900 y Fn(The)30 b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g +(lik)m(e)f(this:)39 b Fm(fdd)p 2510 1900 29 4 v 34 w(file)p +2736 1900 V 33 w(hook\(printhandler\))p Fn(.)327 2012 +y(No)33 b(default)e(handler)g(is)g(supplied.)43 b(The)32 +b(argumen)m(t)h Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h +(handler)e(is)236 2125 y(needed.)236 2389 y Fo(Return)35 +b(v)-6 b(alue)p 236 2443 3544 5 v 236 2556 a Fn(The)30 +b(old)g(handler)236 2819 y Fo(See)35 b(also)p 236 2873 +V 236 2986 a Fn(fdd)p 371 2986 28 4 v 32 w(prin)m(tset,)30 +b(b)s(dd)p 921 2986 V 30 w(\014le)p 1068 2986 V 32 w(ho)s(ok)p +236 3337 3544 12 v 236 3450 a Fo(fdd)p 390 3450 32 4 +v 38 w(in)m(taddv)-6 b(arblo)s(c)m(k)97 b Fn({)30 b(adds)g(a)h(new)f(v) +-5 b(ariable)29 b(blo)s(c)m(k)h(for)g(reordering)p 236 +3504 3544 12 v 236 3709 a Fm(int)47 b(fdd_intaddvarblock\(int)42 +b(first,)k(int)h(last,)f(int)h(fixed\))236 3934 y Fo(Description)p +236 3988 3544 5 v 236 4101 a Fn(W)-8 b(orks)37 b(exactly)h(lik)m(e)e +Fm(bdd)p 1166 4101 29 4 v 33 w(addvarblock)e Fn(except)j(that)g +Fm(fdd)p 2399 4101 V 34 w(intaddvarblock)32 b Fn(tak)m(es)38 +b(a)f(range)g(of)236 4214 y(FDD)32 b(v)-5 b(ariables)29 +b(instead)g(of)i(BDD)h(v)-5 b(ariables.)236 4477 y Fo(Return)35 +b(v)-6 b(alue)p 236 4531 3544 5 v 236 4644 a Fn(Zero)31 +b(on)f(success,)h(otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 +4907 y Fo(See)35 b(also)p 236 4962 V 236 5074 a Fn(b)s(dd)p +397 5074 28 4 v 31 w(addv)-5 b(arblo)s(c)m(k,)30 b(b)s(dd)p +1120 5074 V 30 w(in)m(taddv)-5 b(arblo)s(c)m(k,)30 b(b)s(dd)p +1951 5074 V 30 w(reorder)1962 5989 y(85)p eop +%%Page: 86 94 +86 93 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(ithset)95 b Fn({)31 b(the)f(v)-5 b(ariable)29 +b(set)i(for)g(the)f(i'th)g(\014nite)f(domain)g(blo)s(c)m(k)p +236 250 3544 12 v 236 455 a Fm(BDD)47 b(fdd_ithset\(int)d(var\))236 +680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)27 +b(the)i(v)-5 b(ariable)27 b(set)h(that)h(con)m(tains)f(the)g(v)-5 +b(ariables)27 b(used)g(to)i(de\014ne)f(the)g(\014nite)f(domain)g(blo)s +(c)m(k)236 960 y Fm(var)p Fn(.)236 1223 y Fo(Return)35 +b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(v)-5 +b(ariable)29 b(set)i(or)g(the)f(constan)m(t)i(false)e(BDD)h(on)g +(error.)236 1653 y Fo(See)k(also)p 236 1707 V 236 1820 +a Fn(fdd)p 371 1820 28 4 v 32 w(ith)m(v)-5 b(ar)p 236 +2154 3544 12 v 236 2266 a Fo(fdd)p 390 2266 32 4 v 38 +w(ith)m(v)f(ar)96 b Fn({)30 b(the)h(BDD)g(for)g(the)f(i'th)g(FDD)h(set) +g(to)g(a)g(sp)s(eci\014c)e(v)-5 b(alue)p 236 2321 3544 +12 v 236 2526 a Fm(BDD)47 b(fdd_ithvar\(int)d(var,)j(int)g(val\))236 +2751 y Fo(Description)p 236 2805 3544 5 v 236 2918 a +Fn(Returns)23 b(the)i(BDD)g(that)g(de\014nes)e(the)h(v)-5 +b(alue)23 b Fm(val)h Fn(for)f(the)i(\014nite)e(domain)g(blo)s(c)m(k)g +Fm(var)p Fn(.)38 b(The)24 b(enco)s(ding)236 3031 y(places)33 +b(the)g(Least)g(Signi\014can)m(t)f(Bit)g(at)i(the)f(top)g(of)f(the)h +(BDD)h(tree)g(\(whic)m(h)e(means)g(they)h(will)d(ha)m(v)m(e)236 +3143 y(the)35 b(lo)m(w)m(est)h(v)-5 b(ariable)33 b(index\).)53 +b(The)34 b(returned)g(BDD)i(will)c(b)s(e)i Fj(V)2509 +3157 y Fh(0)2571 3143 y Fc(^)23 b Fj(V)2708 3157 y Fh(1)2771 +3143 y Fc(^)f Fj(:)15 b(:)g(:)25 b Fc(^)d Fj(V)3120 3157 +y Fi(N)3222 3143 y Fn(where)34 b(eac)m(h)i Fj(V)3751 +3157 y Fi(i)236 3256 y Fn(will)28 b(b)s(e)i(in)f(p)s(ositiv)m(e)g(or)h +(negativ)m(e)i(form)e(dep)s(ending)e(on)i(the)h(v)-5 +b(alue)29 b(of)i Fm(val)p Fn(.)236 3520 y Fo(Return)k(v)-6 +b(alue)p 236 3574 V 236 3687 a Fn(The)30 b(correct)i(BDD)f(or)g(the)f +(constan)m(t)i(false)e(BDD)h(on)g(error.)236 3950 y Fo(See)k(also)p +236 4004 V 236 4117 a Fn(fdd)p 371 4117 28 4 v 32 w(ithset)1962 +5989 y(86)p eop +%%Page: 87 95 +87 94 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(mak)m(eset)94 b Fn({)31 b(creates)h(a)f(v)-5 +b(ariable)29 b(set)i(for)f(N)g(\014nite)g(domain)f(blo)s(c)m(ks)p +236 250 3544 12 v 236 455 a Fm(BDD)47 b(fdd_makeset\(int)d(*varset,)h +(int)i(varnum\))236 680 y Fo(Description)p 236 734 3544 +5 v 236 847 a Fn(Returns)25 b(a)g(BDD)i(de\014ning)c(all)h(the)i(v)-5 +b(ariable)24 b(sets)h(used)g(to)h(de\014ne)e(the)i(v)-5 +b(ariable)24 b(blo)s(c)m(ks)h(in)e(the)j(arra)m(y)236 +960 y Fm(varset)p Fn(.)39 b(The)30 b(argumen)m(t)h Fm(varnum)e +Fn(de\014nes)g(the)i(size)f(of)g Fm(varset)p Fn(.)236 +1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 +a Fn(The)30 b(correct)i(BDD)f(or)g(the)f(constan)m(t)i(false)e(on)g +(errors.)236 1653 y Fo(See)35 b(also)p 236 1707 V 236 +1820 a Fn(fdd)p 371 1820 28 4 v 32 w(ithset,)30 b(b)s(dd)p +837 1820 V 31 w(mak)m(eset)p 236 2171 3544 12 v 236 2284 +a Fo(fdd)p 390 2284 32 4 v 38 w(o)m(v)m(erlap)s(domain)95 +b Fn({)31 b(com)m(bine)f(t)m(w)m(o)i(FDD)f(blo)s(c)m(ks)f(in)m(to)g +(one)p 236 2338 3544 12 v 236 2543 a Fm(int)47 b +(fdd_overlapdomain\(int)42 b(v1,)47 b(int)g(v2\))236 +2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a +Fn(This)29 b(function)g(tak)m(es)j(t)m(w)m(o)g(FDD)g(blo)s(c)m(ks)e +(and)g(merges)h(them)g(in)m(to)f(a)h(new)f(one,)i(suc)m(h)e(that)h(the) +g(new)236 3048 y(one)26 b(is)e(enco)s(ded)h(using)e(b)s(oth)i(sets)h +(of)f(BDD)h(v)-5 b(ariables.)38 b(If)25 b Fm(v1)f Fn(is)g(enco)s(ded)h +(using)f(the)h(BDD)i(v)-5 b(ariables)236 3161 y Fj(a)284 +3175 y Fh(1)324 3161 y Fj(;)15 b(:)g(:)g(:)h(;)f(a)573 +3175 y Fi(n)644 3161 y Fn(and)24 b(has)f(a)h(domain)f(of)h([0)p +Fj(;)15 b(N)1636 3175 y Fh(1)1676 3161 y Fn(],)26 b(and)d +Fm(v2)g Fn(is)g(enco)s(ded)g(using)g Fj(b)2741 3175 y +Fh(1)2780 3161 y Fj(;)15 b(:)g(:)g(:)i(;)e(b)3021 3175 +y Fi(n)3092 3161 y Fn(and)23 b(has)g(a)i(domain)236 3274 +y(of)37 b([0)p Fj(;)15 b(N)529 3288 y Fh(2)570 3274 y +Fn(],)38 b(then)e(the)h(result)e(will)f(b)s(e)i(enco)s(ded)g(using)f +(the)i(BDD)h(v)-5 b(ariables)35 b Fj(a)3036 3288 y Fh(1)3076 +3274 y Fj(;)15 b(:)g(:)g(:)h(;)f(a)3325 3288 y Fi(n)3373 +3274 y Fj(;)g(b)3452 3288 y Fh(1)3492 3274 y Fj(;)g(:)g(:)g(:)h(;)f(b) +3732 3288 y Fi(n)236 3387 y Fn(and)36 b(ha)m(v)m(e)i(the)f(domain)f([0) +p Fj(;)15 b(N)1311 3401 y Fh(1)1376 3387 y Fc(\003)25 +b Fj(N)1519 3401 y Fh(2)1558 3387 y Fn(].)60 b(The)37 +b(use)f(of)h(this)f(function)f(ma)m(y)j(result)d(in)h(some)h(strange) +236 3500 y(output)30 b(from)g Fm(fdd)p 899 3500 29 4 +v 34 w(printset)p Fn(.)236 3763 y Fo(Return)35 b(v)-6 +b(alue)p 236 3817 3544 5 v 236 3930 a Fn(The)30 b(index)f(of)i(the)f +(\014nite)f(domain)h(blo)s(c)m(k)236 4193 y Fo(See)35 +b(also)p 236 4248 V 236 4360 a Fn(fdd)p 371 4360 28 4 +v 32 w(extdomain)1962 5989 y(87)p eop +%%Page: 88 96 +88 95 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(prin)m(tset)95 b Fn({)31 b(prin)m(ts)e(a)i(BDD)g(for)f(a)h +(\014nite)e(domain)h(blo)s(c)m(k)p 236 250 3544 12 v +236 455 a Fm(void)47 b(fdd_printset\(BDD)c(r\))236 568 +y(void)k(fdd_fprintset\(FILE)c(*ofile,)i(BDD)i(f\))236 +793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Prin)m(ts)26 +b(the)h(BDD)h Fm(f)e Fn(using)g(a)h(set)g(notation)g(as)g(in)f +Fm(bdd)p 2128 960 29 4 v 33 w(printset)f Fn(but)h(with)f(the)i(index)f +(of)h(the)g(\014nite)236 1073 y(domain)k(blo)s(c)m(ks)g(included)f +(instead)h(of)h(the)g(BDD)h(v)-5 b(ariables.)44 b(It)32 +b(is)f(p)s(ossible)f(to)j(sp)s(ecify)d(a)j(prin)m(ting)236 +1186 y(callbac)m(k)i(function)e(with)h Fm(fdd)p 1311 +1186 V 33 w(file)p 1536 1186 V 34 w(hook)f Fn(or)i Fm(fdd)p +2055 1186 V 33 w(strm)p 2280 1186 V 34 w(hook)e Fn(whic)m(h)h(can)h(b)s +(e)f(used)g(to)h(prin)m(t)e(the)236 1298 y(FDD)f(iden)m(ti\014er)c(in)h +(a)i(readable)f(form.)236 1562 y Fo(See)35 b(also)p 236 +1616 3544 5 v 236 1729 a Fn(b)s(dd)p 397 1729 28 4 v +31 w(prin)m(tset,)30 b(fdd)p 920 1729 V 31 w(\014le)p +1068 1729 V 32 w(ho)s(ok,)h(fdd)p 1478 1729 V 31 w(strm)p +1692 1729 V 33 w(ho)s(ok)p 236 2080 3544 12 v 236 2193 +a Fo(fdd)p 390 2193 32 4 v 38 w(scanallv)-6 b(ar)96 b +Fn({)31 b(Finds)e(one)h(satisfying)f(v)-5 b(alue)30 b(of)h(all)e(FDD)j +(v)-5 b(ariables)p 236 2247 3544 12 v 236 2452 a Fm(int*)47 +b(fdd_scanallvar\(BDD)c(r\))236 2677 y Fo(Description)p +236 2731 3544 5 v 236 2844 a Fn(Finds)24 b(one)i(satisfying)e +(assignmen)m(t)i(in)e Fm(r)h Fn(of)h(all)f(the)g(de\014ned)g(FDD)i(v)-5 +b(ariables.)37 b(Eac)m(h)27 b(v)-5 b(alue)25 b(is)f(stored)236 +2957 y(in)d(an)h(arra)m(y)h(whic)m(h)e(is)h(returned.)36 +b(The)22 b(size)g(of)h(this)e(arra)m(y)i(is)e(exactly)i(the)g(n)m(um)m +(b)s(er)e(of)h(FDD)i(v)-5 b(ariables)236 3070 y(de\014ned.)40 +b(It)30 b(is)g(the)g(user's)g(resp)s(onsibilit)m(y)c(to)31 +b(free)g(this)e(arra)m(y)i(using)e Fm(free\(\))p Fn(.)236 +3333 y Fo(Return)35 b(v)-6 b(alue)p 236 3387 V 236 3500 +a Fn(An)27 b(arra)m(y)g(with)e(all)h(satisfying)f(v)-5 +b(alues.)39 b(If)27 b Fm(r)f Fn(is)g(the)h(trivially)d(false)i(BDD,)i +(then)f(NULL)g(is)e(returned.)236 3763 y Fo(See)35 b(also)p +236 3817 V 236 3930 a Fn(fdd)p 371 3930 28 4 v 32 w(scan)m(v)-5 +b(ar)1962 5989 y(88)p eop +%%Page: 89 97 +89 96 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(scanset)96 b Fn({)31 b(scans)f(a)h(v)-5 b(ariable)29 +b(set)p 236 250 3544 12 v 236 455 a Fm(int)47 b(fdd_scanset\(BDD)d(r,)j +(int)g(**varset,)e(int)i(*varnum\))236 680 y Fo(Description)p +236 734 3544 5 v 236 847 a Fn(Scans)27 b(the)g(BDD)i +Fm(r)d Fn(to)i(\014nd)e(all)g(o)s(ccurences)h(of)h(FDD)g(v)-5 +b(ariables)26 b(and)g(then)h(stores)h(these)f(in)f Fm(varset)p +Fn(.)236 960 y Fm(varset)f Fn(will)f(b)s(e)j(set)g(to)h(p)s(oin)m(t)d +(to)j(an)f(arra)m(y)g(of)g(size)f Fm(varnum)g Fn(whic)m(h)f(will)f(con) +m(tain)j(the)g(indices)e(of)i(the)236 1073 y(found)i(FDD)j(v)-5 +b(ariables.)39 b(It)31 b(is)e(the)i(users)e(resp)s(onsibilit)m(y)e(to)k +(free)f Fm(varset)f Fn(after)i(use.)236 1336 y Fo(Return)k(v)-6 +b(alue)p 236 1390 V 236 1503 a Fn(Zero)31 b(on)f(success)g(or)h(a)g +(negativ)m(e)g(error)f(co)s(de)h(on)f(error.)236 1766 +y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(fdd)p 371 +1933 28 4 v 32 w(mak)m(eset)p 236 2266 3544 12 v 236 +2379 a Fo(fdd)p 390 2379 32 4 v 38 w(scan)m(v)-6 b(ar)96 +b Fn({)31 b(Finds)e(one)i(satisfying)e(v)-5 b(alue)29 +b(of)i(a)g(FDD)g(v)-5 b(ariable)p 236 2434 3544 12 v +236 2638 a Fm(int)47 b(fdd_scanvar\(BDD)d(r,)j(int)g(var\))236 +2863 y Fo(Description)p 236 2918 3544 5 v 236 3031 a +Fn(Finds)31 b(one)i(satisfying)f(assignmen)m(t)h(of)g(the)f(FDD)i(v)-5 +b(ariable)32 b Fm(var)g Fn(in)f(the)i(BDD)h Fm(r)f Fn(and)f(returns)g +(this)236 3143 y(v)-5 b(alue.)236 3407 y Fo(Return)35 +b(v)-6 b(alue)p 236 3461 V 236 3574 a Fn(The)25 b(v)-5 +b(alue)25 b(of)h(a)g(satisfying)e(assignmen)m(t)h(of)h +Fm(var)p Fn(.)38 b(If)25 b Fm(r)h Fn(is)e(the)i(trivially)d(false)i +(BDD,)i(then)e(a)h(negativ)m(e)236 3687 y(v)-5 b(alue)30 +b(is)f(returned.)236 3950 y Fo(See)35 b(also)p 236 4004 +V 236 4117 a Fn(fdd)p 371 4117 28 4 v 32 w(scanallv)-5 +b(ar)1962 5989 y(89)p eop +%%Page: 90 98 +90 97 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(setpair)95 b Fn({)31 b(de\014nes)e(a)i(pair)e(for)h(t)m(w)m +(o)i(\014nite)e(domain)f(blo)s(c)m(ks)p 236 250 3544 +12 v 236 455 a Fm(int)47 b(fdd_setpair\(bddPair)c(*pair,)j(int)h(p1,)g +(int)f(p2\))236 680 y Fo(Description)p 236 734 3544 5 +v 236 847 a Fn(De\014nes)35 b(eac)m(h)i(v)-5 b(ariable)33 +b(in)h(the)h(\014nite)f(domain)g(blo)s(c)m(k)h Fm(p1)f +Fn(to)i(b)s(e)f(paired)e(with)h(the)h(corresp)s(onding)236 +960 y(v)-5 b(ariable)28 b(in)g Fm(p2)p Fn(.)40 b(The)29 +b(result)f(is)g(stored)h(in)f Fm(pair)g Fn(whic)m(h)g(m)m(ust)h(b)s(e)g +(allo)s(cated)g(using)f Fm(bdd)p 3345 960 29 4 v 33 w(makepair)p +Fn(.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 +3544 5 v 236 1390 a Fn(Zero)31 b(on)f(success)g(or)h(a)g(negativ)m(e)g +(error)f(co)s(de)h(on)f(error.)236 1653 y Fo(See)35 b(also)p +236 1707 V 236 1820 a Fn(fdd)p 371 1820 28 4 v 32 w(setpairs)p +236 2171 3544 12 v 236 2284 a Fo(fdd)p 390 2284 32 4 +v 38 w(setpairs)95 b Fn({)31 b(de\014nes)f(N)g(pairs)f(for)h(\014nite)g +(domain)f(blo)s(c)m(ks)p 236 2338 3544 12 v 236 2543 +a Fm(int)47 b(fdd_setpairs\(bddPair)42 b(*pair,)k(int)h(*p1,)g(int)g +(*p2,)g(int)f(size\))236 2768 y Fo(Description)p 236 +2822 3544 5 v 236 2935 a Fn(De\014nes)25 b(eac)m(h)h(v)-5 +b(ariable)23 b(in)g(all)h(the)g(\014nite)g(domain)f(blo)s(c)m(ks)h +(listed)f(in)h(the)g(arra)m(y)h Fm(p1)f Fn(to)i(b)s(e)e(paired)f(with) +236 3048 y(the)37 b(corresp)s(onding)d(v)-5 b(ariable)35 +b(in)h Fm(p2)p Fn(.)58 b(The)36 b(result)f(is)g(stored)i(in)e +Fm(pair)g Fn(whic)m(h)g(m)m(ust)i(b)s(e)e(allo)s(cated)236 +3161 y(using)29 b Fm(bdd)p 624 3161 29 4 v 34 w(makeset)p +Fn(.)236 3424 y Fo(Return)35 b(v)-6 b(alue)p 236 3479 +3544 5 v 236 3591 a Fn(Zero)31 b(on)f(success)g(or)h(a)g(negativ)m(e)g +(error)f(co)s(de)h(on)f(error.)236 3855 y Fo(See)35 b(also)p +236 3909 V 236 4022 a Fn(b)s(dd)p 397 4022 28 4 v 31 +w(setpair)1962 5989 y(90)p eop +%%Page: 91 99 +91 98 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(strm)p 641 196 V 37 w(ho)s(ok)96 b Fn({)31 +b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p +236 250 3544 12 v 236 455 a Fm(bddstrmhandler)44 b +(fdd_strm_hook\(bddstrmhand)o(ler)d(handler\))236 680 +y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)23 +b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(FDDs)i(is)d +(used)h(to)i(con)m(v)m(ert)g(the)f(FDD)h(in)m(teger)f(iden)m(ti\014er) +236 960 y(in)m(to)34 b(something)e(readable)h(b)m(y)h(the)f(end)g +(user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin)m(t)i(a)i +(string)e(name)236 1073 y(instead)e(of)g(the)h(iden)m(ti\014er.)39 +b(A)30 b(handler)f(could)g(lo)s(ok)h(lik)m(e)g(this:)236 +1260 y Fm(void)47 b(printhandler\(ostream)42 b(&o,)47 +b(int)g(var\))236 1373 y({)379 1486 y(extern)f(char)h(**names;)379 +1599 y(o)h(<<)f(names[var];)236 1712 y(})236 1900 y Fn(The)30 +b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g(lik)m(e)f(this:) +39 b Fm(fdd)p 2510 1900 29 4 v 34 w(strm)p 2736 1900 +V 33 w(hook\(printhandler\))p Fn(.)327 2012 y(No)33 b(default)e +(handler)g(is)g(supplied.)43 b(The)32 b(argumen)m(t)h +Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h(handler)e(is)236 +2125 y(needed.)236 2389 y Fo(Return)35 b(v)-6 b(alue)p +236 2443 3544 5 v 236 2556 a Fn(The)30 b(old)g(handler)236 +2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(fdd)p +371 2986 28 4 v 32 w(prin)m(tset,)30 b(b)s(dd)p 921 2986 +V 30 w(\014le)p 1068 2986 V 32 w(ho)s(ok)p 236 3337 3544 +12 v 236 3450 a Fo(fdd)p 390 3450 32 4 v 38 w(v)-6 b(arn)m(um)95 +b Fn({)31 b(binary)d(size)j(of)f(a)h(\014nite)e(domain)g(blo)s(c)m(k)p +236 3504 3544 12 v 236 3709 a Fm(int)47 b(fdd_varnum\(int)d(var\))236 +3934 y Fo(Description)p 236 3988 3544 5 v 236 4101 a +Fn(Returns)30 b(the)g(n)m(um)m(b)s(er)f(of)i(BDD)g(v)-5 +b(ariables)29 b(used)h(for)g(the)h(\014nite)e(domain)g(blo)s(c)m(k)h +Fm(var)p Fn(.)236 4364 y Fo(Return)35 b(v)-6 b(alue)p +236 4418 V 236 4531 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(v)-5 +b(ariables)29 b(or)h(a)h(negativ)m(e)g(error)f(co)s(de)236 +4794 y Fo(See)35 b(also)p 236 4849 V 236 4962 a Fn(fdd)p +371 4962 28 4 v 32 w(v)-5 b(ars)1962 5989 y(91)p eop +%%Page: 92 100 +92 99 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 +32 4 v 38 w(v)-6 b(ars)96 b Fn({)31 b(all)e(BDD)j(v)-5 +b(ariables)29 b(asso)s(ciated)h(with)f(a)i(\014nite)f(domain)f(blo)s(c) +m(k)p 236 250 3544 12 v 236 455 a Fm(int)47 b(*fdd_vars\(int)d(var\)) +236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a +Fn(Returns)34 b(an)h(in)m(teger)h(arra)m(y)f(con)m(taining)g(the)g(BDD) +h(v)-5 b(ariables)34 b(used)g(to)i(de\014ne)e(the)i(\014nite)e(domain) +236 960 y(blo)s(c)m(k)43 b Fm(var)p Fn(.)80 b(The)43 +b(size)g(of)h(the)g(arra)m(y)g(is)f(the)g(n)m(um)m(b)s(er)g(of)g(v)-5 +b(ariables)43 b(used)g(to)h(de\014ne)f(the)h(\014nite)236 +1073 y(domain)27 b(blo)s(c)m(k.)40 b(The)28 b(arra)m(y)h(will)d(ha)m(v) +m(e)j(the)g(Least)g(Signi\014can)m(t)e(Bit)h(at)i(p)s(os)d(0.)41 +b(The)28 b(arra)m(y)g(m)m(ust)h Ff(not)236 1186 y Fn(b)s(e)h(deallo)s +(cated.)236 1449 y Fo(Return)35 b(v)-6 b(alue)p 236 1503 +V 236 1616 a Fn(In)m(teger)32 b(arra)m(y)e(con)m(taning)h(the)g(v)-5 +b(ariable)29 b(n)m(um)m(b)s(ers)g(or)h(NULL)g(if)g Fm(v)g +Fn(is)f(an)h(unkno)m(wn)f(blo)s(c)m(k.)236 1879 y Fo(See)35 +b(also)p 236 1933 V 236 2046 a Fn(fdd)p 371 2046 28 4 +v 32 w(v)-5 b(arn)m(um)p 236 2379 3544 12 v 236 2492 +a Fo(op)s(erator)p Fm(<<)95 b Fn({)31 b(C++)e(output)h(op)s(erator)h +(for)f(BDDs)p 236 2546 V 236 2751 a Fm(ostream)46 b +(&operator<<\(ostream)d(&o,)j(const)h(bdd_ioformat)d(&f\))236 +2864 y(ostream)i(&operator<<\(ostream)d(&o,)j(const)h(bdd)g(&r\))236 +3089 y Fo(Description)p 236 3143 3544 5 v 236 3256 a +Fn(BDDs)60 b(can)g(b)s(e)e(prin)m(ted)g(in)f(v)-5 b(arious)58 +b(formats)i(using)d(the)i(C++)f(iostreams)h(library)-8 +b(.)125 b(The)236 3369 y(formats)61 b(are)h(the)f(those)g(used)f(in)g +Fm(bdd)p 1761 3369 29 4 v 34 w(printset)p Fn(,)66 b Fm(bdd)p +2414 3369 V 34 w(printtable)p Fn(,)g Fm(fdd)p 3163 3369 +V 33 w(printset)59 b Fn(and)236 3482 y Fm(bdd)p 386 3482 +V 34 w(printdot)p Fn(.)146 b(The)65 b(format)i(can)f(b)s(e)g(sp)s +(eci\014ed)e(with)h(the)h(follo)m(wing)f(format)h(ob)5 +b(jects:)286 3703 y Fm(bddset)241 b Fn(BDD)32 b(lev)m(el)e(set)h +(format)286 3816 y Fm(bddtable)145 b Fn(BDD)32 b(lev)m(el)e(table)g +(format)286 3928 y Fm(bdddot)241 b Fn(Output)29 b(for)i(use)f(with)f +(Dot)286 4041 y Fm(bddall)241 b Fn(The)30 b(whole)g(no)s(de)f(table)286 +4154 y Fm(fddset)241 b Fn(FDD)32 b(lev)m(el)e(set)h(format)236 +4309 y(So)f(a)h(BDD)h Fm(x)e Fn(can)h(for)f(example)g(b)s(e)f(prin)m +(ted)g(as)i(a)g(table)f(with)f(the)i(command)327 4535 +y Fm(cout)47 b(<<)g(bddtable)e(<<)j(x)f(<<)g(endl)p Fn(.)236 +4798 y Fo(Return)35 b(v)-6 b(alue)p 236 4853 3544 5 v +236 4965 a Fn(The)30 b(sp)s(eci\014ed)f(output)h(stream)236 +5229 y Fo(See)35 b(also)p 236 5283 V 236 5396 a Fn(b)s(dd)p +397 5396 28 4 v 31 w(strm)p 611 5396 V 32 w(ho)s(ok,)c(fdd)p +1021 5396 V 31 w(strm)p 1235 5396 V 33 w(ho)s(ok)1962 +5989 y(92)p eop +%%Page: 93 101 +93 100 bop 236 826 a Fp(Bibliograph)-6 b(y)236 1271 y +Fn([1])47 b(Randal)20 b(E.)i(Bry)m(an)m(t.)28 b(Graph-Based)22 +b(Algorithms)e(for)i(Bo)s(olean)g(Function)f(Manipulation.)j +Ff(IEEE)378 1384 y(T)-7 b(r)i(ansactions)35 b(on)e(Computers)p +Fn(,)f(C-35\(8\):677{691,)k(August)30 b(1986.)236 1572 +y([2])47 b(Randal)30 b(E.)i(Bry)m(an)m(t.)46 b(Sym)m(b)s(olic)30 +b(Bo)s(olean)i(manipulation)d(with)i(ordered)g(binary)f(decision)g +(dia-)378 1685 y(grams.)40 b Ff(A)n(CM)32 b(Computing)h(Surveys)p +Fn(,)e(24\(3\):293{318,)36 b(Septem)m(b)s(er)30 b(1992.)236 +1873 y([3])47 b(K.S.)22 b(Brace,)j(R.L.)d(Rudell,)g(and)g(R.E.)h(Bry)m +(an)m(t.)28 b(E\016cien)m(t)23 b(Implemen)m(tation)e(of)i(a)f(BDD)i +(Pac)m(k)-5 b(age.)378 1985 y(In)36 b Ff(27th)j(A)n(CM/IEEE)e(Design)h +(A)n(utomation)h(Confer)-5 b(enc)g(e)p Fn(,)40 b(pages)d(40{45,)k +(Orlando,)36 b(Florida,)378 2098 y(June)29 b(1990.)j(A)m(CM/IEEE,)g +(IEEE)d(Computer)h(So)s(ciet)m(y)g(Press.)236 2286 y([4])47 +b(R.)40 b(Rudell.)67 b(Dynamic)40 b(Variable)f(Ordering)g(for)g +(Ordered)g(Binary)h(Decision)f(Diagrams.)70 b(In)378 +2399 y Ff(IEEE)29 b(/A)n(CM)g(International)j(Confer)-5 +b(enc)g(e)31 b(on)f(CAD)p Fn(,)d(pages)h(42{47,)j(San)m(ta)d(Clara,)g +(California,)378 2512 y(No)m(v)m(em)m(b)s(er)j(1993.)i(A)m(CM/IEEE,)e +(IEEE)e(Computer)h(So)s(ciet)m(y)h(Press.)1962 5989 y(93)p +eop +%%Page: 94 102 +94 101 bop 236 630 a Fp(Index)236 1053 y Fn(addition,)29 +b(8)236 1166 y(arithmetic,)h(7)236 1362 y(b)s(dd)p 397 +1362 28 4 v 31 w(addref)g(,)g(22)236 1475 y(b)s(dd)p +397 1475 V 31 w(addv)-5 b(arblo)s(c)m(k)29 b(,)i(23)236 +1588 y(b)s(dd)p 397 1588 V 31 w(allsat)f(,)g(24)236 1700 +y(b)s(dd)p 397 1700 V 31 w(and)g(,)g(24)236 1813 y(b)s(dd)p +397 1813 V 31 w(ano)s(decoun)m(t)h(,)f(25)236 1926 y(b)s(dd)p +397 1926 V 31 w(appall)f(,)h(25)236 2039 y(b)s(dd)p 397 +2039 V 31 w(app)s(ex)g(,)g(26)236 2152 y(b)s(dd)p 397 +2152 V 31 w(apply)f(,)i(27)236 2265 y(b)s(dd)p 397 2265 +V 31 w(appuni)d(,)j(27)236 2378 y(b)s(dd)p 397 2378 V +31 w(autoreorder)g(,)f(28)236 2491 y(b)s(dd)p 397 2491 +V 31 w(autoreorder)p 888 2491 V 33 w(times)g(,)h(28)236 +2604 y(b)s(dd)p 397 2604 V 31 w(biimp)d(,)i(28)236 2717 +y(b)s(dd)p 397 2717 V 31 w(blo)s(c)m(k\014le)p 755 2717 +V 31 w(ho)s(ok)h(,)f(29)236 2830 y(b)s(dd)p 397 2830 +V 31 w(buildcub)s(e)d(,)j(29)236 2943 y(b)s(dd)p 397 +2943 V 31 w(cac)m(hestats)j(,)d(30)236 3055 y(b)s(dd)p +397 3055 V 31 w(clear)p 615 3055 V 33 w(error)g(,)g(30)236 +3168 y(b)s(dd)p 397 3168 V 31 w(clrv)-5 b(arblo)s(c)m(ks)29 +b(,)i(30)236 3281 y(b)s(dd)p 397 3281 V 31 w(comp)s(ose)g(,)f(31)236 +3394 y(b)s(dd)p 397 3394 V 31 w(constrain)g(,)g(31)236 +3507 y(b)s(dd)p 397 3507 V 31 w(delref)f(,)i(32)236 3620 +y(b)s(dd)p 397 3620 V 31 w(disable)p 703 3620 V 31 w(reorder)f(,)g(32) +236 3733 y(b)s(dd)p 397 3733 V 31 w(done,)g(32)236 3846 +y(b)s(dd)p 397 3846 V 31 w(enable)p 681 3846 V 32 w(reorder)g(,)h(33) +236 3959 y(b)s(dd)p 397 3959 V 31 w(error)p 621 3959 +V 32 w(ho)s(ok)g(,)f(33)236 4072 y(b)s(dd)p 397 4072 +V 31 w(errstring)f(,)h(34)236 4185 y(b)s(dd)p 397 4185 +V 31 w(exist)g(,)h(34)236 4297 y(b)s(dd)p 397 4297 V +31 w(extv)-5 b(arn)m(um)30 b(,)h(34)236 4410 y(b)s(dd)p +397 4410 V 31 w(false)f(,)h(35)236 4523 y(b)s(dd)p 397 +4523 V 31 w(\014le)p 545 4523 V 32 w(ho)s(ok)f(,)h(35)236 +4636 y(b)s(dd)p 397 4636 V 31 w(fnload)e(,)i(42)236 4749 +y(b)s(dd)p 397 4749 V 31 w(fnsa)m(v)m(e)g(,)g(57)236 +4862 y(b)s(dd)p 397 4862 V 31 w(forall)e(,)i(36)236 4975 +y(b)s(dd)p 397 4975 V 31 w(fprin)m(tall)d(,)i(46)236 +5088 y(b)s(dd)p 397 5088 V 31 w(fprin)m(tdot)f(,)i(47)236 +5201 y(b)s(dd)p 397 5201 V 31 w(fprin)m(tset)e(,)i(48)236 +5314 y(b)s(dd)p 397 5314 V 31 w(fprin)m(tstat)f(,)g(48)236 +5427 y(b)s(dd)p 397 5427 V 31 w(fprin)m(ttable)f(,)h(49)236 +5539 y(b)s(dd)p 397 5539 V 31 w(freepair)f(,)i(36)236 +5652 y(b)s(dd)p 397 5652 V 31 w(fullsatone)e(,)i(36)2153 +1053 y(b)s(dd)p 2314 1053 V 31 w(gb)s(c)p 2484 1053 V +33 w(ho)s(ok)f(,)g(37)2153 1166 y(b)s(dd)p 2314 1166 +V 31 w(getallo)s(cn)m(um)g(,)h(37)2153 1279 y(b)s(dd)p +2314 1279 V 31 w(getno)s(den)m(um)f(,)h(38)2153 1392 +y(b)s(dd)p 2314 1392 V 31 w(getreorder)p 2749 1392 V +33 w(metho)s(d)f(,)h(38)2153 1505 y(b)s(dd)p 2314 1505 +V 31 w(getreorder)p 2749 1505 V 33 w(times)f(,)h(38)2153 +1617 y(b)s(dd)p 2314 1617 V 31 w(high)e(,)i(39)2153 1730 +y(b)s(dd)p 2314 1730 V 31 w(ibuildcub)s(e)26 b(,)k(29)2153 +1843 y(b)s(dd)p 2314 1843 V 31 w(imp)f(,)h(39)2153 1956 +y(b)s(dd)p 2314 1956 V 31 w(init)f(,)h(40)2153 2069 y(b)s(dd)p +2314 2069 V 31 w(in)m(taddv)-5 b(arblo)s(c)m(k)29 b(,)h(23)2153 +2182 y(b)s(dd)p 2314 2182 V 31 w(isrunning)d(,)j(40)2153 +2295 y(b)s(dd)p 2314 2295 V 31 w(ite)g(,)h(41)2153 2408 +y(b)s(dd)p 2314 2408 V 31 w(ith)m(v)-5 b(ar)30 b(,)g(41)2153 +2521 y(b)s(dd)p 2314 2521 V 31 w(lev)m(el2v)-5 b(ar)30 +b(,)h(42)2153 2634 y(b)s(dd)p 2314 2634 V 31 w(load)f(,)g(42)2153 +2747 y(b)s(dd)p 2314 2747 V 31 w(lo)m(w)g(,)h(43)2153 +2859 y(b)s(dd)p 2314 2859 V 31 w(mak)m(eset)h(,)e(43)2153 +2972 y(b)s(dd)p 2314 2972 V 31 w(newpair)f(,)h(44)2153 +3085 y(b)s(dd)p 2314 3085 V 31 w(nith)m(v)-5 b(ar)29 +b(,)i(44)2153 3198 y(b)s(dd)p 2314 3198 V 31 w(no)s(decoun)m(t)f(,)h +(45)2153 3311 y(b)s(dd)p 2314 3311 V 31 w(not)g(,)f(45)2153 +3424 y(b)s(dd)p 2314 3424 V 31 w(or)g(,)h(45)2153 3537 +y(b)s(dd)p 2314 3537 V 31 w(pathcoun)m(t)g(,)f(46)2153 +3650 y(b)s(dd)p 2314 3650 V 31 w(prin)m(tall)e(,)i(46)2153 +3763 y(b)s(dd)p 2314 3763 V 31 w(prin)m(tdot)f(,)i(47)2153 +3876 y(b)s(dd)p 2314 3876 V 31 w(prin)m(torder)e(,)h(47)2153 +3989 y(b)s(dd)p 2314 3989 V 31 w(prin)m(tset)g(,)g(48)2153 +4101 y(b)s(dd)p 2314 4101 V 31 w(prin)m(tstat)g(,)h(48)2153 +4214 y(b)s(dd)p 2314 4214 V 31 w(prin)m(ttable)e(,)h(49)2153 +4327 y(b)s(dd)p 2314 4327 V 31 w(relpro)s(d)e(,)j(49)2153 +4440 y(b)s(dd)p 2314 4440 V 31 w(reorder)f(,)g(50)2153 +4553 y(b)s(dd)p 2314 4553 V 31 w(reorder)p 2629 4553 +V 32 w(gain)g(,)h(51)2153 4666 y(b)s(dd)p 2314 4666 V +31 w(reorder)p 2629 4666 V 32 w(ho)s(ok)f(,)h(51)2153 +4779 y(b)s(dd)p 2314 4779 V 31 w(reorder)p 2629 4779 +V 32 w(prob)s(e)f(,)g(52)2153 4892 y(b)s(dd)p 2314 4892 +V 31 w(reorder)p 2629 4892 V 32 w(v)m(erb)s(ose)h(,)f(52)2153 +5005 y(b)s(dd)p 2314 5005 V 31 w(replace)g(,)h(53)2153 +5118 y(b)s(dd)p 2314 5118 V 31 w(resetpair)f(,)g(53)2153 +5231 y(b)s(dd)p 2314 5231 V 31 w(resize)p 2563 5231 V +33 w(ho)s(ok)g(,)g(54)2153 5344 y(b)s(dd)p 2314 5344 +V 31 w(restrict)g(,)h(55)2153 5456 y(b)s(dd)p 2314 5456 +V 31 w(satcoun)m(t)h(,)e(55)2153 5569 y(b)s(dd)p 2314 +5569 V 31 w(satcoun)m(tln)g(,)h(56)2153 5682 y(b)s(dd)p +2314 5682 V 31 w(satone)g(,)g(56)1962 5989 y(94)p eop +%%Page: 95 103 +95 102 bop 236 162 a Fn(b)s(dd)p 397 162 28 4 v 31 w(satoneset)32 +b(,)e(57)236 275 y(b)s(dd)p 397 275 V 31 w(sa)m(v)m(e)i(,)e(57)236 +388 y(b)s(dd)p 397 388 V 31 w(scanset)h(,)g(58)236 501 +y(b)s(dd)p 397 501 V 31 w(setb)s(ddpair)d(,)i(60)236 +614 y(b)s(dd)p 397 614 V 31 w(setb)s(ddpairs)e(,)i(61)236 +727 y(b)s(dd)p 397 727 V 31 w(setcac)m(heratio)j(,)d(58)236 +840 y(b)s(dd)p 397 840 V 31 w(setcoun)m(tlnset)h(,)g(56)236 +953 y(b)s(dd)p 397 953 V 31 w(setcoun)m(tset)h(,)f(55)236 +1066 y(b)s(dd)p 397 1066 V 31 w(setmaxincrease)g(,)g(59)236 +1178 y(b)s(dd)p 397 1178 V 31 w(setmaxno)s(den)m(um)f(,)g(59)236 +1291 y(b)s(dd)p 397 1291 V 31 w(setminfreeno)s(des)f(,)h(60)236 +1404 y(b)s(dd)p 397 1404 V 31 w(setpair)g(,)g(60)236 +1517 y(b)s(dd)p 397 1517 V 31 w(setpairs)g(,)g(61)236 +1630 y(b)s(dd)p 397 1630 V 31 w(setv)-5 b(arn)m(um)30 +b(,)h(61)236 1743 y(b)s(dd)p 397 1743 V 31 w(setv)-5 +b(arorder)30 b(,)h(62)236 1856 y(b)s(dd)p 397 1856 V +31 w(simplify)c(,)j(62)236 1969 y(b)s(dd)p 397 1969 V +31 w(stats)h(,)g(62)236 2082 y(b)s(dd)p 397 2082 V 31 +w(strm)p 611 2082 V 32 w(ho)s(ok)g(,)f(63)236 2195 y(b)s(dd)p +397 2195 V 31 w(supp)s(ort)f(,)h(63)236 2308 y(b)s(dd)p +397 2308 V 31 w(sw)m(ap)m(v)-5 b(ar)31 b(,)f(64)236 2420 +y(b)s(dd)p 397 2420 V 31 w(true)g(,)h(64)236 2533 y(b)s(dd)p +397 2533 V 31 w(unique)d(,)j(65)236 2646 y(b)s(dd)p 397 +2646 V 31 w(v)-5 b(ar)30 b(,)h(65)236 2759 y(b)s(dd)p +397 2759 V 31 w(v)-5 b(ar2lev)m(el)31 b(,)f(65)236 2872 +y(b)s(dd)p 397 2872 V 31 w(v)-5 b(arblo)s(c)m(k)g(all)29 +b(,)h(66)236 2985 y(b)s(dd)p 397 2985 V 31 w(v)-5 b(arn)m(um)30 +b(,)g(66)236 3098 y(b)s(dd)p 397 3098 V 31 w(v)-5 b(arpro\014le)29 +b(,)i(66)236 3211 y(b)s(dd)p 397 3211 V 31 w(v)m(eccomp)s(ose)h(,)e(67) +236 3324 y(b)s(dd)p 397 3324 V 31 w(v)m(ersionn)m(um)f(,)i(67)236 +3437 y(b)s(dd)p 397 3437 V 31 w(v)m(ersionstr)f(,)g(67)236 +3550 y(b)s(dd)p 397 3550 V 31 w(xor)g(,)h(68)236 3662 +y(b)s(ddCac)m(heStat)f(,)h(20)236 3775 y(b)s(ddfalse,)e(68)236 +3888 y(b)s(ddGb)s(cStat)g(,)i(21)236 4001 y(b)s(ddStat)e(,)i(22)236 +4114 y(b)s(ddtrue)d(,)j(68)236 4227 y(Bo)s(olean)g(V)-8 +b(ectors,)32 b(7)236 4340 y(b)m(v)m(ec)g(,)e(69)236 4453 +y(b)m(v)m(ec)p 414 4453 V 34 w(add)g(,)h(69)236 4566 +y(b)m(v)m(ec)p 414 4566 V 34 w(addref)f(,)g(70)236 4679 +y(b)m(v)m(ec)p 414 4679 V 34 w(co)s(erce)i(,)e(70)236 +4792 y(b)m(v)m(ec)p 414 4792 V 34 w(con)h(,)f(70)236 +4905 y(b)m(v)m(ec)p 414 4905 V 34 w(cop)m(y)h(,)g(71)236 +5017 y(b)m(v)m(ec)p 414 5017 V 34 w(delref)e(,)i(71)236 +5130 y(b)m(v)m(ec)p 414 5130 V 34 w(div)e(,)i(71)236 +5243 y(b)m(v)m(ec)p 414 5243 V 34 w(div\014xed)e(,)h(72)236 +5356 y(b)m(v)m(ec)p 414 5356 V 34 w(equ)g(,)h(72)236 +5469 y(b)m(v)m(ec)p 414 5469 V 34 w(false)f(,)h(72)236 +5582 y(b)m(v)m(ec)p 414 5582 V 34 w(free)g(,)f(73)236 +5695 y(b)m(v)m(ec)p 414 5695 V 34 w(gte)i(,)e(73)2153 +162 y(b)m(v)m(ec)p 2331 162 V 34 w(gth)h(,)f(73)2153 +275 y(b)m(v)m(ec)p 2331 275 V 34 w(isconst)g(,)h(74)2153 +388 y(b)m(v)m(ec)p 2331 388 V 34 w(ite)f(,)h(74)2153 +501 y(b)m(v)m(ec)p 2331 501 V 34 w(lte)f(,)h(74)2153 +614 y(b)m(v)m(ec)p 2331 614 V 34 w(lth)f(,)g(75)2153 +727 y(b)m(v)m(ec)p 2331 727 V 34 w(map1)h(,)f(75)2153 +840 y(b)m(v)m(ec)p 2331 840 V 34 w(map2)h(,)f(76)2153 +953 y(b)m(v)m(ec)p 2331 953 V 34 w(map3)h(,)f(76)2153 +1066 y(b)m(v)m(ec)p 2331 1066 V 34 w(m)m(ul)f(,)i(77)2153 +1178 y(b)m(v)m(ec)p 2331 1178 V 34 w(m)m(ul\014xed)e(,)h(77)2153 +1291 y(b)m(v)m(ec)p 2331 1291 V 34 w(neq)g(,)h(77)2153 +1404 y(b)m(v)m(ec)p 2331 1404 V 34 w(shl)e(,)i(78)2153 +1517 y(b)m(v)m(ec)p 2331 1517 V 34 w(shl\014xed)d(,)j(78)2153 +1630 y(b)m(v)m(ec)p 2331 1630 V 34 w(shr)e(,)i(79)2153 +1743 y(b)m(v)m(ec)p 2331 1743 V 34 w(shr\014xed)e(,)h(79)2153 +1856 y(b)m(v)m(ec)p 2331 1856 V 34 w(sub)f(,)i(80)2153 +1969 y(b)m(v)m(ec)p 2331 1969 V 34 w(true)f(,)h(80)2153 +2082 y(b)m(v)m(ec)p 2331 2082 V 34 w(v)-5 b(al)30 b(,)h(81)2153 +2195 y(b)m(v)m(ec)p 2331 2195 V 34 w(v)-5 b(ar)30 b(,)h(81)2153 +2308 y(b)m(v)m(ec)p 2331 2308 V 34 w(v)-5 b(arfdd)29 +b(,)i(82)2153 2420 y(b)m(v)m(ec)p 2331 2420 V 34 w(v)-5 +b(arv)m(ec)32 b(,)e(82)2153 2616 y(C++)g(in)m(terface,)h(6)2153 +2729 y(compiling,)e(3)2153 2925 y(dynamic)g(v)-5 b(ariable)29 +b(reordering,)h(5)2153 3121 y(error)g(handling,)e(6)2153 +3317 y(fdd)p 2288 3317 V 32 w(clearall)h(,)i(82)2153 +3430 y(fdd)p 2288 3430 V 32 w(domain)e(,)h(83)2153 3543 +y(fdd)p 2288 3543 V 32 w(domainn)m(um)e(,)j(83)2153 3656 +y(fdd)p 2288 3656 V 32 w(domainsize)e(,)h(83)2153 3769 +y(fdd)p 2288 3769 V 32 w(equals)f(,)i(84)2153 3882 y(fdd)p +2288 3882 V 32 w(extdomain)f(,)g(84)2153 3995 y(fdd)p +2288 3995 V 32 w(\014le)p 2437 3995 V 32 w(ho)s(ok)g(,)g(85)2153 +4107 y(fdd)p 2288 4107 V 32 w(fprin)m(tset)f(,)i(88)2153 +4220 y(fdd)p 2288 4220 V 32 w(in)m(taddv)-5 b(arblo)s(c)m(k)29 +b(,)h(85)2153 4333 y(fdd)p 2288 4333 V 32 w(ithset)g(,)g(86)2153 +4446 y(fdd)p 2288 4446 V 32 w(ith)m(v)-5 b(ar)30 b(,)g(86)2153 +4559 y(fdd)p 2288 4559 V 32 w(mak)m(eset)i(,)e(87)2153 +4672 y(fdd)p 2288 4672 V 32 w(o)m(v)m(erlap)s(domain)f(,)i(87)2153 +4785 y(fdd)p 2288 4785 V 32 w(prin)m(tset)e(,)i(88)2153 +4898 y(fdd)p 2288 4898 V 32 w(scanallv)-5 b(ar)29 b(,)i(88)2153 +5011 y(fdd)p 2288 5011 V 32 w(scanset)g(,)f(89)2153 5124 +y(fdd)p 2288 5124 V 32 w(scan)m(v)-5 b(ar)31 b(,)f(89)2153 +5237 y(fdd)p 2288 5237 V 32 w(setpair)f(,)i(90)2153 5350 +y(fdd)p 2288 5350 V 32 w(setpairs)e(,)i(90)2153 5462 +y(fdd)p 2288 5462 V 32 w(strm)p 2503 5462 V 32 w(ho)s(ok)f(,)h(91)2153 +5575 y(fdd)p 2288 5575 V 32 w(v)-5 b(arn)m(um)29 b(,)i(91)2153 +5688 y(fdd)p 2288 5688 V 32 w(v)-5 b(ars)30 b(,)g(92)1962 +5989 y(95)p eop +%%Page: 96 104 +96 103 bop 236 162 a Fn(\014nite)30 b(domain)f(blo)s(c)m(ks,)h(7)236 +358 y(implemen)m(tation,)f(13)236 471 y(installing,)f(3)236 +667 y(op)s(erator)p Fm(<<)i Fn(,)h(92)236 863 y(programming)e +(examples,)i(3)236 1059 y(relational)f(pro)s(duct,)f(26)236 +1172 y(reordering,)h(5)236 1368 y(v)-5 b(ariable)29 b(reordering,)h(5) +236 1481 y(v)-5 b(ariable)29 b(sets,)i(4)1962 5989 y(96)p +eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/buddy/doc/makefile b/buddy/doc/makefile new file mode 100644 index 000000000..ad6a457e4 --- /dev/null +++ b/buddy/doc/makefile @@ -0,0 +1 @@ +clean: diff --git a/buddy/doc/tech.txt b/buddy/doc/tech.txt new file mode 100644 index 000000000..9a3fa6a63 --- /dev/null +++ b/buddy/doc/tech.txt @@ -0,0 +1,186 @@ +**************************************************************************** + How to create your own internal BDD functions. +**************************************************************************** + +PLEASE NOTE +That interrupting variable reordering has been introduced after this document was written. + + +===[ Functions that do not change or produce new BDDs ]===================== + +I'll do this by example. Take "bdd_satcount" that counts the number of +satisfying assignments that makes a BDD true. + +Almost all functions consists of some introduction followed by a +recursion through the BDD. + +* Use the type BDD for all references (numbers) to BDD nodes. +* External BDD variables used internally in the package are + defined in "kernel.h" +* Macros for reading BDD nodes are: + LEVEL(r) + LOW(r) + HIGH(r) + ISCONST(r) => true if r is one of the terminals + + +double bdd_satcount(BDD r) +{ + double size=1; + int n; + + CHECKa(r, 0.0); /* CHECK for valid nodes - defined in kernel.h */ + + miscid = CACHEID_SATCOU; /* Setup global variables. This is + used extensively instead of passing + arguments to the recursive functions, + for faster recursive calls */ + + for (n=0 ; na == root && entry->c == miscid) + return entry->r.dres; + + /* Do whatever calculations are needed */ + + size = 0; + s = 1; + + for (m=LEVEL(root)+1 ; ma = root; + entry->c = miscid; + entry->r.dres = size; + + return size; /* Return result */ +} + + + +===[ Functions that produces new BDDs ]===================================== + +Functions that produces BDD nodes must take great care to avoid +loosing intermidiate nodes when automatic garbage collections +occur. This is doneby stacking each intermidiate result until they are no more used. This stack is check by the garbage collector. + +Macros for accessing the stack: + INITREF: Reset the stack + PUSHREF(n): Push the node 'n' on the stack + READREF(p): Read 'p' positions down the stack + POPREF(p): Pop 'p' nodes off the stack. + +Again I'll illustrate this with an example - the NOT operator. + +BDD bdd_not(BDD r) +{ + int res; + CHECKa(r, bddfalse); /* Validate arguments */ + + INITREF; /* Important! resets the stack */ + + res = not_rec(r); /* Recurse */ + checkreorder(res); /* Check to see if a reordering was called for */ + + return res; /* Return result */ +} + + +static BDD not_rec(BDD r) +{ + BddCacheData *entry; /* Cache entry pointer */ + BDD res; + + if (ISZERO(r)) /* Check constant terminals */ + return BDDONE; + if (ISONE(r)) + return BDDZERO; + + /* Lookup in cache */ + entry = BddCache_lookup(&applycache, NOTHASH(r)); + if (entry->a == r && entry->c == bddop_not) + return entry->r.res; + + /* Recurse AND push result on the reference stack */ + PUSHREF( not_rec(LOW(r)) ); + PUSHREF( not_rec(HIGH(r)) ); + + /* Create a new BDD node */ + res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); + + /* Pop result off the stack */ + POPREF(2); + + /* Insert in cache */ + entry->a = r; + entry->c = bddop_not; + entry->r.res = res; + + /* Return the result */ + return res; +} + + + + +===[ Documentation ]======================================================== + +ALL entries visible to the user should be documentet by an commented +section like the one shown here, placed right before the code. + +Each doc. entry consist of a keyword followed by {* ... text +... *}. The entries are: + + NAME: Name of the function. + SECTION: Which part to place the documentation in. + SHORT: One line description of the code. + PROTO: The exact prototype. + DESCR: Multiline description of the code. + ALSO: Other relevant stuff. + RETURN: The returned value. + +/* +NAME {* bdd\_satcount *} +SECTION {* info *} +SHORT {* Calculates the number of satisfying variable assignments *} +PROTO {* double bdd_satcount(BDD r) *} +DESCR {* Calculates how many possible variable assignments there exists + such that {\tt r} is satisfied, taking all defined variables + into account. *} +ALSO {* bdd\_satone, bdd\_fullsatone, bdd\_satcountln *} +RETURN {* The number of possible assignments. *} +*/ diff --git a/buddy/examples/adder/adder.cxx b/buddy/examples/adder/adder.cxx new file mode 100644 index 000000000..6ade992eb --- /dev/null +++ b/buddy/examples/adder/adder.cxx @@ -0,0 +1,218 @@ +/************************************************************************* + FILE: adder.cc + DESCR: BDD implementation of an N bit adder. + AUTH: Jorn Lind + DATE: feb 1998 +*************************************************************************/ +#include +#include +#include +#include "bdd.h" + +int N; + +bdd *ainp; +bdd *binp; +bdd *co; +bdd *xout; + + +/************************************************************************* + Adder +*************************************************************************/ + +void build_adder(void) +{ + int n; + + for (n=0 ; n 0) + { + xout[n] = ainp[n] ^ binp[n] ^ co[n-1]; + co[n] = ainp[n] & binp[n] | + ainp[n] & co[n-1] | + binp[n] & co[n-1]; + } + else + { + xout[n] = ainp[n] ^ binp[n]; + co[n] = ainp[n] & binp[n]; + } + } +} + + +int main(int argc, char **argv) +{ + int method=BDD_REORDER_NONE; + int n; + + if(argc < 2 || argc > 3) + { + cout << "usage: adder N R\n"; + cout << " N number of bits\n"; + cout << " R -> enable reordering if R is win2,win2ite,win3,win3ite,sift,siftite\n"; + cout << " in this case 'adder' starts with a worst case ordering\n"; + exit(1); + } + + N = atoi(argv[1]); + if (N <= 0) + { + cout << "The number of bits must be more than zero\n"; + exit(2); + } + + if (argc == 3) + { + if (strcmp(argv[2], "win2") == 0) + method = BDD_REORDER_WIN2; + else + if (strcmp(argv[2], "win2ite") == 0) + method = BDD_REORDER_WIN2ITE; + else + if (strcmp(argv[2], "win3") == 0) + method = BDD_REORDER_WIN3; + else + if (strcmp(argv[2], "win3ite") == 0) + method = BDD_REORDER_WIN3ITE; + else + if (strcmp(argv[2], "sift") == 0) + method = BDD_REORDER_SIFT; + else + if (strcmp(argv[2], "siftite") == 0) + method = BDD_REORDER_SIFTITE; + else + if (strcmp(argv[2], "rand") == 0) + method = BDD_REORDER_RANDOM; + } + + long c0 = clock(); + + bdd_init(500,1000); + bdd_setvarnum(2*N); + + ainp = new bdd[N]; + binp = new bdd[N]; + co = new bdd[N]; + xout = new bdd[N]; + + for (n=0 ; n> 1; + } + + return x; +} + + +int test_vector(bdd av, bdd bv, int a, int b) +{ + int res = a+b; + + for (int n=0 ; n> 1; + } + + return 1; +} + + +int test_adder(void) +{ + int m = 1 << N; + + for (int a=0 ; a t2; + tautology t3; diff --git a/buddy/examples/calculator/examples/c1355.cal b/buddy/examples/calculator/examples/c1355.cal new file mode 100644 index 000000000..2a665cab9 --- /dev/null +++ b/buddy/examples/calculator/examples/c1355.cal @@ -0,0 +1,818 @@ +/* BDD Calculator data file */ + +initial 10000 10000; + +inputs +_1gat _8gat _15gat _22gat _29gat _36gat _43gat _50gat _57gat _64gat +_71gat _78gat _85gat _92gat _99gat _106gat _113gat _120gat _127gat _134gat +_141gat _148gat _155gat _162gat _169gat _176gat _183gat _190gat _197gat _204gat +_211gat _218gat _225gat _226gat _227gat _228gat _229gat _230gat _231gat _232gat +_233gat ; + +actions +autoreorder 0 sift; + +t2 = _1gat; +t3 = _29gat; +t4 = t2 nand t3; +t5 = t2 nand t4; +t6 = t3 nand t4; +t7 = t5 nand t6; +t8 = _57gat; +t9 = _85gat; +t10 = t8 nand t9; +t11 = t8 nand t10; +t12 = t9 nand t10; +t13 = t11 nand t12; +t14 = t7 nand t13; +t15 = t7 nand t14; +t16 = t13 nand t14; +t17 = t15 nand t16; +t18 = _225gat; +t19 = _233gat; +t20 = t18 and t19; +t21 = _113gat; +t22 = _120gat; +t23 = t21 nand t22; +t24 = t21 nand t23; +t25 = t22 nand t23; +t26 = t24 nand t25; +t27 = _127gat; +t28 = _134gat; +t29 = t27 nand t28; +t30 = t27 nand t29; +t31 = t28 nand t29; +t32 = t30 nand t31; +t33 = t26 nand t32; +t34 = t26 nand t33; +t35 = t32 nand t33; +t36 = t34 nand t35; +t37 = _141gat; +t38 = _148gat; +t39 = t37 nand t38; +t40 = t37 nand t39; +t41 = t38 nand t39; +t42 = t40 nand t41; +t43 = _155gat; +t44 = _162gat; +t45 = t43 nand t44; +t46 = t43 nand t45; +t47 = t44 nand t45; +t48 = t46 nand t47; +t49 = t42 nand t48; +t50 = t42 nand t49; +t51 = t48 nand t49; +t52 = t50 nand t51; +t53 = t36 nand t52; +t54 = t36 nand t53; +t55 = t52 nand t53; +t56 = t54 nand t55; +t57 = t20 nand t56; +t58 = t20 nand t57; +t59 = t56 nand t57; +t60 = t58 nand t59; +t61 = t17 nand t60; +t62 = t17 nand t61; +t63 = t60 nand t61; +t64 = t62 nand t63; +t65 = t28 nand t44; +t66 = t28 nand t65; +t67 = t44 nand t65; +t68 = t66 nand t67; +t69 = _190gat; +t70 = _218gat; +t71 = t69 nand t70; +t72 = t69 nand t71; +t73 = t70 nand t71; +t74 = t72 nand t73; +t75 = t68 nand t74; +t76 = t68 nand t75; +t77 = t74 nand t75; +t78 = t76 nand t77; +t79 = _232gat; +t80 = t79 and t19; +t81 = _36gat; +t82 = t3 nand t81; +t83 = t3 nand t82; +t84 = t81 nand t82; +t85 = t83 nand t84; +t86 = _43gat; +t87 = _50gat; +t88 = t86 nand t87; +t89 = t86 nand t88; +t90 = t87 nand t88; +t91 = t89 nand t90; +t92 = t85 nand t91; +t93 = t85 nand t92; +t94 = t91 nand t92; +t95 = t93 nand t94; +t96 = _92gat; +t97 = t9 nand t96; +t98 = t9 nand t97; +t99 = t96 nand t97; +t100 = t98 nand t99; +t101 = _99gat; +t102 = _106gat; +t103 = t101 nand t102; +t104 = t101 nand t103; +t105 = t102 nand t103; +t106 = t104 nand t105; +t107 = t100 nand t106; +t108 = t100 nand t107; +t109 = t106 nand t107; +t110 = t108 nand t109; +t111 = t95 nand t110; +t112 = t95 nand t111; +t113 = t110 nand t111; +t114 = t112 nand t113; +t115 = t80 nand t114; +t116 = t80 nand t115; +t117 = t114 nand t115; +t118 = t116 nand t117; +t119 = t78 nand t118; +t120 = t78 nand t119; +t121 = t118 nand t119; +t122 = t120 nand t121; +t123 = not t122; +t124 = t27 nand t43; +t125 = t27 nand t124; +t126 = t43 nand t124; +t127 = t125 nand t126; +t128 = _183gat; +t129 = _211gat; +t130 = t128 nand t129; +t131 = t128 nand t130; +t132 = t129 nand t130; +t133 = t131 nand t132; +t134 = t127 nand t133; +t135 = t127 nand t134; +t136 = t133 nand t134; +t137 = t135 nand t136; +t138 = _231gat; +t139 = t138 and t19; +t140 = _8gat; +t141 = t2 nand t140; +t142 = t2 nand t141; +t143 = t140 nand t141; +t144 = t142 nand t143; +t145 = _15gat; +t146 = _22gat; +t147 = t145 nand t146; +t148 = t145 nand t147; +t149 = t146 nand t147; +t150 = t148 nand t149; +t151 = t144 nand t150; +t152 = t144 nand t151; +t153 = t150 nand t151; +t154 = t152 nand t153; +t155 = _64gat; +t156 = t8 nand t155; +t157 = t8 nand t156; +t158 = t155 nand t156; +t159 = t157 nand t158; +t160 = _71gat; +t161 = _78gat; +t162 = t160 nand t161; +t163 = t160 nand t162; +t164 = t161 nand t162; +t165 = t163 nand t164; +t166 = t159 nand t165; +t167 = t159 nand t166; +t168 = t165 nand t166; +t169 = t167 nand t168; +t170 = t154 nand t169; +t171 = t154 nand t170; +t172 = t169 nand t170; +t173 = t171 nand t172; +t174 = t139 nand t173; +t175 = t139 nand t174; +t176 = t173 nand t174; +t177 = t175 nand t176; +t178 = t137 nand t177; +t179 = t137 nand t178; +t180 = t177 nand t178; +t181 = t179 nand t180; +t182 = t21 nand t37; +t183 = t21 nand t182; +t184 = t37 nand t182; +t185 = t183 nand t184; +t186 = _169gat; +t187 = _197gat; +t188 = t186 nand t187; +t189 = t186 nand t188; +t190 = t187 nand t188; +t191 = t189 nand t190; +t192 = t185 nand t191; +t193 = t185 nand t192; +t194 = t191 nand t192; +t195 = t193 nand t194; +t196 = _229gat; +t197 = t196 and t19; +t198 = t154 nand t95; +t199 = t154 nand t198; +t200 = t95 nand t198; +t201 = t199 nand t200; +t202 = t197 nand t201; +t203 = t197 nand t202; +t204 = t201 nand t202; +t205 = t203 nand t204; +t206 = t195 nand t205; +t207 = t195 nand t206; +t208 = t205 nand t206; +t209 = t207 nand t208; +t210 = t22 nand t38; +t211 = t22 nand t210; +t212 = t38 nand t210; +t213 = t211 nand t212; +t214 = _176gat; +t215 = _204gat; +t216 = t214 nand t215; +t217 = t214 nand t216; +t218 = t215 nand t216; +t219 = t217 nand t218; +t220 = t213 nand t219; +t221 = t213 nand t220; +t222 = t219 nand t220; +t223 = t221 nand t222; +t224 = _230gat; +t225 = t224 and t19; +t226 = t169 nand t110; +t227 = t169 nand t226; +t228 = t110 nand t226; +t229 = t227 nand t228; +t230 = t225 nand t229; +t231 = t225 nand t230; +t232 = t229 nand t230; +t233 = t231 nand t232; +t234 = t223 nand t233; +t235 = t223 nand t234; +t236 = t233 nand t234; +t237 = t235 nand t236; +t238 = not t237; +t239 = t209 and t238; +t240 = t181 and t239; +t241 = t123 and t240; +t242 = t145 nand t86; +t243 = t145 nand t242; +t244 = t86 nand t242; +t245 = t243 nand t244; +t246 = t160 nand t101; +t247 = t160 nand t246; +t248 = t101 nand t246; +t249 = t247 nand t248; +t250 = t245 nand t249; +t251 = t245 nand t250; +t252 = t249 nand t250; +t253 = t251 nand t252; +t254 = _227gat; +t255 = t254 and t19; +t256 = t186 nand t214; +t257 = t186 nand t256; +t258 = t214 nand t256; +t259 = t257 nand t258; +t260 = t128 nand t69; +t261 = t128 nand t260; +t262 = t69 nand t260; +t263 = t261 nand t262; +t264 = t259 nand t263; +t265 = t259 nand t264; +t266 = t263 nand t264; +t267 = t265 nand t266; +t268 = t36 nand t267; +t269 = t36 nand t268; +t270 = t267 nand t268; +t271 = t269 nand t270; +t272 = t255 nand t271; +t273 = t255 nand t272; +t274 = t271 nand t272; +t275 = t273 nand t274; +t276 = t253 nand t275; +t277 = t253 nand t276; +t278 = t275 nand t276; +t279 = t277 nand t278; +t280 = not t279; +t281 = not t64; +t282 = t140 nand t81; +t283 = t140 nand t282; +t284 = t81 nand t282; +t285 = t283 nand t284; +t286 = t155 nand t96; +t287 = t155 nand t286; +t288 = t96 nand t286; +t289 = t287 nand t288; +t290 = t285 nand t289; +t291 = t285 nand t290; +t292 = t289 nand t290; +t293 = t291 nand t292; +t294 = _226gat; +t295 = t294 and t19; +t296 = t187 nand t215; +t297 = t187 nand t296; +t298 = t215 nand t296; +t299 = t297 nand t298; +t300 = t129 nand t70; +t301 = t129 nand t300; +t302 = t70 nand t300; +t303 = t301 nand t302; +t304 = t299 nand t303; +t305 = t299 nand t304; +t306 = t303 nand t304; +t307 = t305 nand t306; +t308 = t267 nand t307; +t309 = t267 nand t308; +t310 = t307 nand t308; +t311 = t309 nand t310; +t312 = t295 nand t311; +t313 = t295 nand t312; +t314 = t311 nand t312; +t315 = t313 nand t314; +t316 = t293 nand t315; +t317 = t293 nand t316; +t318 = t315 nand t316; +t319 = t317 nand t318; +t320 = t281 and t319; +t321 = t280 and t320; +t322 = t146 nand t87; +t323 = t146 nand t322; +t324 = t87 nand t322; +t325 = t323 nand t324; +t326 = t161 nand t102; +t327 = t161 nand t326; +t328 = t102 nand t326; +t329 = t327 nand t328; +t330 = t325 nand t329; +t331 = t325 nand t330; +t332 = t329 nand t330; +t333 = t331 nand t332; +t334 = _228gat; +t335 = t334 and t19; +t336 = t52 nand t307; +t337 = t52 nand t336; +t338 = t307 nand t336; +t339 = t337 nand t338; +t340 = t335 nand t339; +t341 = t335 nand t340; +t342 = t339 nand t340; +t343 = t341 nand t342; +t344 = t333 nand t343; +t345 = t333 nand t344; +t346 = t343 nand t344; +t347 = t345 nand t346; +t348 = not t347; +t349 = t321 and t348; +t350 = not t319; +t351 = t281 and t350; +t352 = t280 and t351; +t353 = t352 and t347; +t354 = t279 and t351; +t355 = t354 and t348; +t356 = t353 or t355; +t357 = t349 or t356; +t358 = t64 and t350; +t359 = t280 and t358; +t360 = t359 and t348; +t361 = t357 or t360; +t362 = t241 and t361; +t363 = t64 and t362; +t364 = t2 nand t363; +t365 = t2 nand t364; +t366 = t363 nand t364; +t367 = t365 nand t366; +t368 = t281 and t280; +t369 = t368 and t348; +t370 = t351 and t280; +t371 = t351 and t348; +t372 = t370 or t371; +t373 = t369 or t372; +t374 = t350 and t280; +t375 = t374 and t348; +t376 = t373 or t375; +t377 = t241 and t376; +t378 = t64 and t377; +t379 = t2 nand t378; +t380 = t2 nand t379; +t381 = t378 nand t379; +t382 = t380 nand t381; +t383 = t367 biimp t382; +t384 = t319 and t362; +t385 = t140 nand t384; +t386 = t140 nand t385; +t387 = t384 nand t385; +t388 = t386 nand t387; +t389 = t319 and t377; +t390 = t140 nand t389; +t391 = t140 nand t390; +t392 = t389 nand t390; +t393 = t391 nand t392; +t394 = t388 biimp t393; +t466 = not t209; +t467 = t466 and t237; +t468 = t181 and t467; +t469 = t123 and t468; +t470 = t469 and t361; +t494 = t279 and t470; +t495 = t160 nand t494; +t496 = t160 nand t495; +t497 = t494 nand t495; +t498 = t496 nand t497; +t476 = t469 and t376; +t499 = t279 and t476; +t500 = t160 nand t499; +t501 = t160 nand t500; +t502 = t499 nand t500; +t503 = t501 nand t502; +t504 = t498 biimp t503; +t505 = t347 and t470; +t506 = t161 nand t505; +t507 = t161 nand t506; +t508 = t505 nand t506; +t509 = t507 nand t508; +t510 = t347 and t476; +t511 = t161 nand t510; +t512 = t161 nand t511; +t513 = t510 nand t511; +t514 = t512 nand t513; +t515 = t509 biimp t514; +t417 = not t181; +t516 = t417 and t467; +t517 = t122 and t516; +t518 = t517 and t361; +t519 = t64 and t518; +t520 = t9 nand t519; +t521 = t9 nand t520; +t522 = t519 nand t520; +t523 = t521 nand t522; +t524 = t517 and t376; +t525 = t64 and t524; +t526 = t9 nand t525; +t527 = t9 nand t526; +t528 = t525 nand t526; +t529 = t527 nand t528; +t530 = t523 biimp t529; +t531 = t319 and t518; +t532 = t96 nand t531; +t533 = t96 nand t532; +t534 = t531 nand t532; +t535 = t533 nand t534; +t536 = t319 and t524; +t537 = t96 nand t536; +t538 = t96 nand t537; +t539 = t536 nand t537; +t540 = t538 nand t539; +t541 = t535 biimp t540; +t542 = t279 and t518; +t543 = t101 nand t542; +t544 = t101 nand t543; +t545 = t542 nand t543; +t546 = t544 nand t545; +t547 = t279 and t524; +t548 = t101 nand t547; +t549 = t101 nand t548; +t550 = t547 nand t548; +t551 = t549 nand t550; +t552 = t546 biimp t551; +t553 = t347 and t518; +t554 = t102 nand t553; +t555 = t102 nand t554; +t556 = t553 nand t554; +t557 = t555 nand t556; +t558 = t347 and t524; +t559 = t102 nand t558; +t560 = t102 nand t559; +t561 = t558 nand t559; +t562 = t560 nand t561; +t563 = t557 biimp t562; +t564 = t279 and t358; +t565 = t348 and t564; +t566 = t516 and t123; +t567 = t466 and t238; +t568 = t417 and t567; +t569 = t568 and t122; +t570 = t181 and t567; +t571 = t570 and t123; +t572 = t569 or t571; +t573 = t566 or t572; +t418 = t417 and t239; +t574 = t418 and t123; +t575 = t573 or t574; +t576 = t565 and t575; +t577 = t209 and t576; +t578 = t21 nand t577; +t579 = t21 nand t578; +t580 = t577 nand t578; +t581 = t579 nand t580; +t582 = t466 and t417; +t583 = t582 and t123; +t584 = t567 and t417; +t585 = t567 and t123; +t586 = t584 or t585; +t587 = t583 or t586; +t588 = t238 and t417; +t589 = t588 and t123; +t590 = t587 or t589; +t591 = t565 and t590; +t592 = t209 and t591; +t593 = t21 nand t592; +t594 = t21 nand t593; +t595 = t592 nand t593; +t596 = t594 nand t595; +t597 = t581 biimp t596; +t598 = t237 and t576; +t599 = t22 nand t598; +t600 = t22 nand t599; +t601 = t598 nand t599; +t602 = t600 nand t601; +t603 = t237 and t591; +t604 = t22 nand t603; +t605 = t22 nand t604; +t606 = t603 nand t604; +t607 = t605 nand t606; +t608 = t602 biimp t607; +t609 = t181 and t576; +t610 = t27 nand t609; +t611 = t27 nand t610; +t612 = t609 nand t610; +t613 = t611 nand t612; +t614 = t181 and t591; +t615 = t27 nand t614; +t616 = t27 nand t615; +t617 = t614 nand t615; +t618 = t616 nand t617; +t619 = t613 biimp t618; +t620 = t122 and t576; +t621 = t28 nand t620; +t622 = t28 nand t621; +t623 = t620 nand t621; +t624 = t622 nand t623; +t625 = t122 and t591; +t626 = t28 nand t625; +t627 = t28 nand t626; +t628 = t625 nand t626; +t629 = t627 nand t628; +t630 = t624 biimp t629; +t395 = t279 and t362; +t396 = t145 nand t395; +t397 = t145 nand t396; +t398 = t395 nand t396; +t399 = t397 nand t398; +t400 = t279 and t377; +t401 = t145 nand t400; +t402 = t145 nand t401; +t403 = t400 nand t401; +t404 = t402 nand t403; +t405 = t399 biimp t404; +t631 = t347 and t359; +t632 = t631 and t575; +t633 = t209 and t632; +t634 = t37 nand t633; +t635 = t37 nand t634; +t636 = t633 nand t634; +t637 = t635 nand t636; +t638 = t631 and t590; +t639 = t209 and t638; +t640 = t37 nand t639; +t641 = t37 nand t640; +t642 = t639 nand t640; +t643 = t641 nand t642; +t644 = t637 biimp t643; +t645 = t237 and t632; +t646 = t38 nand t645; +t647 = t38 nand t646; +t648 = t645 nand t646; +t649 = t647 nand t648; +t650 = t237 and t638; +t651 = t38 nand t650; +t652 = t38 nand t651; +t653 = t650 nand t651; +t654 = t652 nand t653; +t655 = t649 biimp t654; +t656 = t181 and t632; +t657 = t43 nand t656; +t658 = t43 nand t657; +t659 = t656 nand t657; +t660 = t658 nand t659; +t661 = t181 and t638; +t662 = t43 nand t661; +t663 = t43 nand t662; +t664 = t661 nand t662; +t665 = t663 nand t664; +t666 = t660 biimp t665; +t667 = t122 and t632; +t668 = t44 nand t667; +t669 = t44 nand t668; +t670 = t667 nand t668; +t671 = t669 nand t670; +t672 = t122 and t638; +t673 = t44 nand t672; +t674 = t44 nand t673; +t675 = t672 nand t673; +t676 = t674 nand t675; +t677 = t671 biimp t676; +t678 = t279 and t320; +t679 = t348 and t678; +t680 = t679 and t575; +t681 = t209 and t680; +t682 = t186 nand t681; +t683 = t186 nand t682; +t684 = t681 nand t682; +t685 = t683 nand t684; +t686 = t679 and t590; +t687 = t209 and t686; +t688 = t186 nand t687; +t689 = t186 nand t688; +t690 = t687 nand t688; +t691 = t689 nand t690; +t692 = t685 biimp t691; +t693 = t237 and t680; +t694 = t214 nand t693; +t695 = t214 nand t694; +t696 = t693 nand t694; +t697 = t695 nand t696; +t698 = t237 and t686; +t699 = t214 nand t698; +t700 = t214 nand t699; +t701 = t698 nand t699; +t702 = t700 nand t701; +t703 = t697 biimp t702; +t704 = t181 and t680; +t705 = t128 nand t704; +t706 = t128 nand t705; +t707 = t704 nand t705; +t708 = t706 nand t707; +t709 = t181 and t686; +t710 = t128 nand t709; +t711 = t128 nand t710; +t712 = t709 nand t710; +t713 = t711 nand t712; +t714 = t708 biimp t713; +t715 = t122 and t680; +t716 = t69 nand t715; +t717 = t69 nand t716; +t718 = t715 nand t716; +t719 = t717 nand t718; +t720 = t122 and t686; +t721 = t69 nand t720; +t722 = t69 nand t721; +t723 = t720 nand t721; +t724 = t722 nand t723; +t725 = t719 biimp t724; +t726 = t347 and t321; +t727 = t726 and t575; +t728 = t209 and t727; +t729 = t187 nand t728; +t730 = t187 nand t729; +t731 = t728 nand t729; +t732 = t730 nand t731; +t733 = t726 and t590; +t734 = t209 and t733; +t735 = t187 nand t734; +t736 = t187 nand t735; +t737 = t734 nand t735; +t738 = t736 nand t737; +t739 = t732 biimp t738; +t740 = t237 and t727; +t741 = t215 nand t740; +t742 = t215 nand t741; +t743 = t740 nand t741; +t744 = t742 nand t743; +t745 = t237 and t733; +t746 = t215 nand t745; +t747 = t215 nand t746; +t748 = t745 nand t746; +t749 = t747 nand t748; +t750 = t744 biimp t749; +t406 = t347 and t362; +t407 = t146 nand t406; +t408 = t146 nand t407; +t409 = t406 nand t407; +t410 = t408 nand t409; +t411 = t347 and t377; +t412 = t146 nand t411; +t413 = t146 nand t412; +t414 = t411 nand t412; +t415 = t413 nand t414; +t416 = t410 biimp t415; +t751 = t181 and t727; +t752 = t129 nand t751; +t753 = t129 nand t752; +t754 = t751 nand t752; +t755 = t753 nand t754; +t756 = t181 and t733; +t757 = t129 nand t756; +t758 = t129 nand t757; +t759 = t756 nand t757; +t760 = t758 nand t759; +t761 = t755 biimp t760; +t762 = t122 and t727; +t763 = t70 nand t762; +t764 = t70 nand t763; +t765 = t762 nand t763; +t766 = t764 nand t765; +t767 = t122 and t733; +t768 = t70 nand t767; +t769 = t70 nand t768; +t770 = t767 nand t768; +t771 = t769 nand t770; +t772 = t766 biimp t771; +t419 = t122 and t418; +t420 = t419 and t361; +t421 = t64 and t420; +t422 = t3 nand t421; +t423 = t3 nand t422; +t424 = t421 nand t422; +t425 = t423 nand t424; +t426 = t419 and t376; +t427 = t64 and t426; +t428 = t3 nand t427; +t429 = t3 nand t428; +t430 = t427 nand t428; +t431 = t429 nand t430; +t432 = t425 biimp t431; +t433 = t319 and t420; +t434 = t81 nand t433; +t435 = t81 nand t434; +t436 = t433 nand t434; +t437 = t435 nand t436; +t438 = t319 and t426; +t439 = t81 nand t438; +t440 = t81 nand t439; +t441 = t438 nand t439; +t442 = t440 nand t441; +t443 = t437 biimp t442; +t444 = t279 and t420; +t445 = t86 nand t444; +t446 = t86 nand t445; +t447 = t444 nand t445; +t448 = t446 nand t447; +t449 = t279 and t426; +t450 = t86 nand t449; +t451 = t86 nand t450; +t452 = t449 nand t450; +t453 = t451 nand t452; +t454 = t448 biimp t453; +t455 = t347 and t420; +t456 = t87 nand t455; +t457 = t87 nand t456; +t458 = t455 nand t456; +t459 = t457 nand t458; +t460 = t347 and t426; +t461 = t87 nand t460; +t462 = t87 nand t461; +t463 = t460 nand t461; +t464 = t462 nand t463; +t465 = t459 biimp t464; +t471 = t64 and t470; +t472 = t8 nand t471; +t473 = t8 nand t472; +t474 = t471 nand t472; +t475 = t473 nand t474; +t477 = t64 and t476; +t478 = t8 nand t477; +t479 = t8 nand t478; +t480 = t477 nand t478; +t481 = t479 nand t480; +t482 = t475 biimp t481; +t483 = t319 and t470; +t484 = t155 nand t483; +t485 = t155 nand t484; +t486 = t483 nand t484; +t487 = t485 nand t486; +t488 = t319 and t476; +t489 = t155 nand t488; +t490 = t155 nand t489; +t491 = t488 nand t489; +t492 = t490 nand t491; +t493 = t487 biimp t492; + +tautology t383; +tautology t394; +tautology t504; +tautology t515; +tautology t530; +tautology t541; +tautology t552; +tautology t563; +tautology t597; +tautology t608; +tautology t619; +tautology t630; +tautology t405; +tautology t644; +tautology t655; +tautology t666; +tautology t677; +tautology t692; +tautology t703; +tautology t714; +tautology t725; +tautology t739; +tautology t750; +tautology t416; +tautology t761; +tautology t772; +tautology t432; +tautology t443; +tautology t454; +tautology t465; +tautology t482; +tautology t493; diff --git a/buddy/examples/calculator/examples/c1908.cal b/buddy/examples/calculator/examples/c1908.cal new file mode 100644 index 000000000..91f2368f0 --- /dev/null +++ b/buddy/examples/calculator/examples/c1908.cal @@ -0,0 +1,531 @@ +/* BDD Calculator data file */ + +initial 8000 10000; + +inputs +_101 _104 _107 _110 _113 _116 _119 _122 _125 _128 +_131 _134 _137 _140 _143 _146 _210 _214 _217 _221 +_224 _227 _234 _237 _469 _472 _475 _478 _898 _900 +_902 _952 _953 ; + +actions +autoreorder 0 sift; + +t2 = _952; +t3 = not t2; +t4 = _953; +t5 = not t4; +t6 = _146; +t7 = not t6; +t8 = _143; +t9 = not t8; +t10 = not t9; +t11 = t7 nand t10; +t12 = not t7; +t13 = t9 nand t12; +t14 = t11 nand t13; +t15 = _128; +t16 = not t15; +t17 = not t16; +t18 = t14 nand t17; +t19 = not t14; +t20 = t16 nand t19; +t21 = t18 nand t20; +t22 = _125; +t23 = not t22; +t24 = not t23; +t25 = t21 nand t24; +t26 = not t21; +t27 = t23 nand t26; +t28 = t25 nand t27; +t29 = _224; +t30 = t29 and t5; +t31 = not t30; +t32 = t28 nand t31; +t33 = not t28; +t34 = t30 nand t33; +t35 = t32 nand t34; +t36 = not t35; +t37 = _107; +t38 = not t37; +t39 = _104; +t40 = not t39; +t41 = not t40; +t42 = t38 nand t41; +t43 = not t38; +t44 = t40 nand t43; +t45 = t42 nand t44; +t46 = _101; +t47 = not t46; +t48 = not t47; +t49 = t45 nand t48; +t50 = not t45; +t51 = t47 nand t50; +t52 = t49 nand t51; +t53 = not t52; +t54 = _119; +t55 = not t54; +t56 = _116; +t57 = not t56; +t58 = not t57; +t59 = t55 nand t58; +t60 = not t55; +t61 = t57 nand t60; +t62 = t59 nand t61; +t63 = _113; +t64 = not t63; +t65 = not t64; +t66 = t62 nand t65; +t67 = not t62; +t68 = t64 nand t67; +t69 = t66 nand t68; +t70 = not t69; +t71 = t53 nand t70; +t72 = not t53; +t73 = t69 nand t72; +t74 = t71 nand t73; +t75 = _122; +t76 = not t75; +t77 = _110; +t78 = not t77; +t79 = not t78; +t80 = t76 nand t79; +t81 = not t76; +t82 = t78 nand t81; +t83 = t80 nand t82; +t84 = not t83; +t85 = not t84; +t86 = t74 nand t85; +t87 = not t74; +t88 = t84 nand t87; +t89 = t86 nand t88; +t90 = not t89; +t91 = t36 nand t90; +t92 = not t36; +t93 = t89 nand t92; +t94 = t91 nand t93; +t95 = not t94; +t96 = _902; +t97 = not t96; +t98 = t95 nand t97; +t99 = _210; +t100 = _237; +t101 = not t100; +t102 = t101 nand t97; +t103 = t99 nand t102; +t104 = not t103; +t105 = t98 nand t104; +t106 = not t98; +t107 = t103 nand t106; +t108 = t105 nand t107; +t109 = not t108; +t110 = _140; +t111 = not t110; +t112 = not t111; +t113 = t78 nand t112; +t114 = t111 nand t79; +t115 = t113 nand t114; +t116 = _227; +t117 = t116 and t5; +t118 = not t117; +t119 = t115 nand t118; +t120 = not t115; +t121 = t117 nand t120; +t122 = t119 nand t121; +t123 = not t26; +t124 = t52 nand t123; +t125 = t26 nand t53; +t126 = t124 nand t125; +t127 = _137; +t128 = not t127; +t129 = _134; +t130 = not t129; +t131 = not t130; +t132 = t128 nand t131; +t133 = not t128; +t134 = t130 nand t133; +t135 = t132 nand t134; +t136 = _131; +t137 = not t136; +t138 = not t137; +t139 = t135 nand t138; +t140 = not t135; +t141 = t137 nand t140; +t142 = t139 nand t141; +t143 = not t142; +t144 = not t143; +t145 = t126 nand t144; +t146 = not t126; +t147 = t143 nand t146; +t148 = t145 nand t147; +t149 = not t148; +t150 = not t149; +t151 = t122 nand t150; +t152 = not t122; +t153 = t149 nand t152; +t154 = t151 nand t153; +t155 = t154 nand t97; +t156 = _469; +t157 = not t156; +t158 = not t157; +t159 = t155 nand t158; +t160 = not t155; +t161 = t157 nand t160; +t162 = t159 nand t161; +t163 = not t162; +t164 = _214; +t165 = t164 nand t102; +t166 = t99 and t101; +t167 = t166 and t5; +t168 = not t167; +t169 = t47 nand t168; +t170 = t167 nand t48; +t171 = t169 nand t170; +t172 = not t171; +t173 = t143 nand t26; +t174 = t21 nand t144; +t175 = t173 nand t174; +t176 = not t70; +t177 = t175 nand t176; +t178 = not t175; +t179 = t70 nand t178; +t180 = t177 nand t179; +t181 = not t180; +t182 = not t181; +t183 = t172 nand t182; +t184 = not t172; +t185 = t181 nand t184; +t186 = t183 nand t185; +t187 = t186 nand t97; +t188 = _472; +t189 = not t188; +t190 = not t189; +t191 = t187 nand t190; +t192 = not t187; +t193 = t189 nand t192; +t194 = t191 nand t193; +t195 = not t194; +t196 = t23 nand t112; +t197 = t111 nand t24; +t198 = t196 nand t197; +t199 = t198 nand t12; +t200 = not t198; +t201 = t7 nand t200; +t202 = t199 nand t201; +t203 = t164 and t101; +t204 = t203 and t5; +t205 = not t204; +t206 = t9 nand t205; +t207 = t204 nand t10; +t208 = t206 nand t207; +t209 = t208 nand t138; +t210 = not t208; +t211 = t137 nand t210; +t212 = t209 nand t211; +t213 = not t212; +t214 = t202 nand t213; +t215 = not t202; +t216 = t212 nand t215; +t217 = t214 nand t216; +t218 = t76 nand t65; +t219 = t64 nand t81; +t220 = t218 nand t219; +t221 = t220 nand t41; +t222 = not t220; +t223 = t40 nand t222; +t224 = t221 nand t223; +t225 = not t224; +t226 = t217 nand t225; +t227 = not t217; +t228 = t224 nand t227; +t229 = t226 nand t228; +t230 = t229 nand t97; +t231 = _475; +t232 = not t231; +t233 = not t232; +t234 = t230 nand t233; +t235 = not t230; +t236 = t232 nand t235; +t237 = t234 nand t236; +t238 = not t237; +t239 = t16 nand t60; +t240 = t55 nand t17; +t241 = t239 nand t240; +t242 = t241 nand t79; +t243 = not t241; +t244 = t78 nand t243; +t245 = t242 nand t244; +t246 = not t245; +t247 = not t246; +t248 = t215 nand t247; +t249 = not t215; +t250 = t246 nand t249; +t251 = t248 nand t250; +t252 = _221; +t253 = _234; +t254 = t252 and t253; +t255 = t254 and t5; +t256 = t255 nand t133; +t257 = not t255; +t258 = t128 nand t257; +t259 = t256 nand t258; +t260 = not t259; +t261 = not t260; +t262 = t251 nand t261; +t263 = not t251; +t264 = t260 nand t263; +t265 = t262 nand t264; +t266 = t265 nand t97; +t267 = _217; +t268 = t253 nand t97; +t269 = t267 nand t268; +t270 = not t269; +t271 = t266 nand t270; +t272 = not t266; +t273 = t269 nand t272; +t274 = t271 nand t273; +t275 = not t274; +t276 = t76 nand t58; +t277 = t57 nand t81; +t278 = t276 nand t277; +t279 = t278 nand t43; +t280 = not t278; +t281 = t38 nand t280; +t282 = t279 nand t281; +t283 = t9 nand t17; +t284 = t16 nand t10; +t285 = t283 nand t284; +t286 = t285 nand t131; +t287 = not t285; +t288 = t130 nand t287; +t289 = t286 nand t288; +t290 = not t289; +t291 = t282 nand t290; +t292 = not t282; +t293 = t289 nand t292; +t294 = t291 nand t293; +t295 = t267 and t253; +t296 = t295 and t5; +t297 = not t296; +t298 = t294 nand t297; +t299 = not t294; +t300 = t296 nand t299; +t301 = t298 nand t300; +t302 = t301 nand t97; +t303 = _478; +t304 = not t303; +t305 = not t304; +t306 = t302 nand t305; +t307 = not t302; +t308 = t304 nand t307; +t309 = t306 nand t308; +t310 = not t309; +t311 = t275 and t310; +t312 = t238 and t311; +t313 = t195 and t312; +t314 = t165 and t313; +t315 = t163 and t314; +t316 = t109 and t315; +t317 = t252 nand t268; +t318 = t316 nand t317; +t319 = t5 and t318; +t320 = t3 and t319; +t321 = t320 and t3; +t322 = t2 and t319; +t323 = t310 and t238; +t324 = t274 and t194; +t325 = t165 and t108; +t326 = t317 and t163; +t327 = t325 and t326; +t328 = t324 and t327; +t329 = t323 and t328; +t330 = _898; +t331 = not t330; +t332 = t331 and t96; +t333 = t4 and t332; +t334 = t253 nand t100; +t335 = t333 nand t334; +t336 = t2 and t5; +t337 = t336 nand t334; +t338 = t335 nand t337; +t339 = t329 nand t338; +t340 = t309 and t238; +t341 = t275 and t194; +t342 = t341 and t327; +t343 = t340 and t342; +t344 = t343 nand t338; +t345 = t310 and t237; +t346 = t345 and t342; +t347 = t346 nand t338; +t348 = t274 and t195; +t349 = t317 and t162; +t350 = t325 and t349; +t351 = t348 and t350; +t352 = t323 and t351; +t353 = t352 nand t338; +t354 = t275 and t195; +t355 = t354 and t350; +t356 = t340 and t355; +t357 = t356 nand t338; +t358 = t341 and t350; +t359 = t323 and t358; +t360 = t359 nand t338; +t361 = t345 and t355; +t362 = t361 nand t338; +t363 = t360 and t362; +t364 = t357 and t363; +t365 = t353 and t364; +t366 = t347 and t365; +t367 = t344 and t366; +t368 = t339 and t367; +t369 = t309 and t237; +t370 = t354 and t327; +t371 = t369 and t370; +t372 = t371 nand t338; +t373 = t368 and t372; +t374 = t369 and t358; +t375 = _900; +t376 = not t375; +t377 = t376 and t96; +t378 = t4 and t377; +t379 = t378 nand t334; +t380 = t379 nand t337; +t381 = t374 nand t380; +t382 = t165 and t109; +t383 = t382 and t349; +t384 = t348 and t383; +t385 = t345 and t384; +t386 = t385 nand t380; +t387 = t324 and t383; +t388 = t323 and t387; +t389 = t388 nand t380; +t390 = t341 and t383; +t391 = t340 and t390; +t392 = t391 nand t380; +t393 = t345 and t390; +t394 = t393 nand t380; +t395 = t348 and t327; +t396 = t345 and t395; +t397 = t396 nand t380; +t398 = t324 and t350; +t399 = t340 and t398; +t400 = t399 nand t380; +t401 = t397 and t400; +t402 = t394 and t401; +t403 = t392 and t402; +t404 = t389 and t403; +t405 = t386 and t404; +t406 = t381 and t405; +t407 = t345 and t398; +t408 = t407 nand t380; +t409 = t406 and t408; +t410 = t373 and t409; +t411 = not t317; +t412 = t411 and t163; +t413 = t382 and t412; +t414 = t354 and t413; +t415 = t323 and t414; +t416 = t336 and t334; +t417 = t415 nand t416; +t418 = t382 and t326; +t419 = t348 and t418; +t420 = t323 and t419; +t421 = t420 nand t416; +t422 = t354 and t418; +t423 = t340 and t422; +t424 = t423 nand t416; +t425 = t345 and t422; +t426 = t425 nand t416; +t427 = t341 and t418; +t428 = t323 and t427; +t429 = t428 nand t416; +t430 = t323 and t370; +t431 = t430 nand t416; +t432 = t354 and t383; +t433 = t323 and t432; +t434 = t433 nand t416; +t435 = t431 and t434; +t436 = t429 and t435; +t437 = t426 and t436; +t438 = t424 and t437; +t439 = t421 and t438; +t440 = t417 and t439; +t441 = not t165; +t442 = t441 and t109; +t443 = t442 and t326; +t444 = t354 and t443; +t445 = t323 and t444; +t446 = t445 nand t416; +t447 = t440 and t446; +t448 = t410 and t447; +t449 = t322 and t448; +t450 = t321 nor t449; +t451 = t319 and t3; +t452 = t382 and t163; +t453 = t354 and t452; +t454 = t323 and t453; +t455 = t454 nand t334; +t456 = t420 nand t334; +t457 = t423 nand t334; +t458 = t425 nand t334; +t459 = t428 nand t334; +t460 = t430 nand t334; +t461 = t433 nand t334; +t462 = t460 and t461; +t463 = t459 and t462; +t464 = t458 and t463; +t465 = t457 and t464; +t466 = t456 and t465; +t467 = t455 and t466; +t468 = t109 and t326; +t469 = t354 and t468; +t470 = t323 and t469; +t471 = t470 nand t334; +t472 = t467 and t471; +t473 = t410 and t472; +t474 = t319 and t473; +t475 = t451 nor t474; +t476 = t450 biimp t475; +t477 = t35 nand t90; +t478 = t89 nand t36; +t479 = t477 nand t478; +t480 = t99 and t102; +t481 = t480 and t96; +t482 = t373 nand t409; +t483 = t481 and t482; +t484 = not t483; +t485 = t479 nand t484; +t486 = not t479; +t487 = t483 nand t486; +t488 = t485 nand t487; +t489 = t3 nand t4; +t490 = t488 and t489; +t491 = t99 and t96; +t492 = t491 and t482; +t493 = not t492; +t494 = t479 nand t493; +t495 = t492 nand t486; +t496 = t494 nand t495; +t497 = t496 and t489; +t498 = t490 biimp t497; +t499 = t267 and t268; +t500 = t499 and t96; +t501 = t500 and t482; +t502 = not t501; +t503 = t265 nand t502; +t504 = not t265; +t505 = t501 nand t504; +t506 = t503 nand t505; +t507 = t489 and t506; +t508 = t267 and t96; +t509 = t508 and t482; +t510 = not t509; +t511 = t265 nand t510; +t512 = t509 nand t504; +t513 = t511 nand t512; +t514 = t489 and t513; +t515 = t507 biimp t514; + +tautology t476; +tautology t498; +tautology t515; diff --git a/buddy/examples/calculator/examples/c2670.cal b/buddy/examples/calculator/examples/c2670.cal new file mode 100644 index 000000000..0ea2dbe5c --- /dev/null +++ b/buddy/examples/calculator/examples/c2670.cal @@ -0,0 +1,1237 @@ +/* BDD Calculator data file */ + +initial 41000 10000; + +inputs +_1 _2 _3 _4 _5 _6 _7 _8 _11 _14 +_15 _16 _19 _20 _21 _22 _23 _24 _25 _26 +_27 _28 _29 _32 _33 _34 _35 _36 _37 _40 +_43 _44 _47 _48 _49 _50 _51 _52 _53 _54 +_55 _56 _57 _60 _61 _62 _63 _64 _65 _66 +_67 _68 _69 _72 _73 _74 _75 _76 _77 _78 +_79 _80 _81 _82 _85 _86 _87 _88 _89 _90 +_91 _92 _93 _94 _95 _96 _99 _100 _101 _102 +_103 _104 _105 _106 _107 _108 _111 _112 _113 _114 +_115 _116 _117 _118 _119 _120 _123 _124 _125 _126 +_127 _128 _129 _130 _131 _132 _135 _136 _137 _138 +_139 _140 _141 _142 _452 _483 _543 _559 _567 _651 +_661 _860 _868 _1083 _1341 _1348 _1384 _1956 _1961 _1966 +_1971 _1976 _1981 _1986 _1991 _1996 _2066 _2067 _2072 _2078 +_2084 _2090 _2096 _2100 _2104 _2105 _2106 _2427 _2430 _2435 +_2438 _2443 _2446 _2451 _2454 _2474 _2678 ; + +actions +autoreorder 0 sift; + +t2 = _860; +t3 = not t2; +t4 = _56; +t5 = _543; +t6 = not t5; +t7 = t4 and t6; +t8 = _651; +t9 = t7 and t8; +t10 = _81; +t11 = t10 and t6; +t12 = not t8; +t13 = t11 and t12; +t14 = _43; +t15 = t14 and t5; +t16 = t15 and t12; +t17 = t13 or t16; +t18 = t9 or t17; +t19 = _68; +t20 = t19 and t5; +t21 = t20 and t8; +t22 = t18 or t21; +t23 = t22 and t2; +t24 = t3 or t23; +t25 = t3 or t22; +t26 = t24 biimp t25; +t27 = t6 and t8; +t28 = _87; +t29 = t28 and t6; +t30 = t29 and t12; +t31 = _49; +t32 = t31 and t5; +t33 = t32 and t12; +t34 = t30 or t33; +t35 = t27 or t34; +t36 = _74; +t37 = t36 and t5; +t38 = t37 and t8; +t39 = t35 or t38; +t40 = t29 or t33; +t41 = t27 or t40; +t42 = t36 and t8; +t43 = t41 or t42; +t44 = t39 biimp t43; +t45 = _559; +t46 = not t45; +t47 = _66; +t48 = t47 and t6; +t49 = t48 and t8; +t50 = _92; +t51 = t50 and t6; +t52 = t51 and t12; +t53 = _54; +t54 = t53 and t5; +t55 = t54 and t12; +t56 = t52 or t55; +t57 = t49 or t56; +t58 = _79; +t59 = t58 and t5; +t60 = t59 and t8; +t61 = t57 or t60; +t62 = not t61; +t63 = t46 nand t62; +t64 = t63 and t3; +t65 = t61 and t2; +t66 = t64 or t65; +t67 = t64 or t61; +t68 = t66 biimp t67; +t69 = _2100; +t70 = not t69; +t71 = _2104; +t72 = not t71; +t73 = _2105; +t74 = t72 and t73; +t75 = not t73; +t76 = t72 and t75; +t77 = t71 and t75; +t78 = t76 or t77; +t79 = t74 or t78; +t80 = t71 and t73; +t81 = t79 or t80; +t82 = t70 nand t81; +t83 = t70 and t82; +t84 = t82 and t81; +t85 = t83 or t84; +t86 = not t85; +t87 = t85 and t86; +t88 = t87 or t86; +t89 = _2096; +t90 = not t89; +t91 = _123; +t92 = t91 and t72; +t93 = t92 and t73; +t94 = _135; +t95 = t94 and t72; +t96 = t95 and t75; +t97 = _99; +t98 = t97 and t71; +t99 = t98 and t75; +t100 = t96 or t99; +t101 = t93 or t100; +t102 = _111; +t103 = t102 and t71; +t104 = t103 and t73; +t105 = t101 or t104; +t106 = t90 nand t105; +t107 = t90 and t106; +t108 = t106 and t105; +t109 = t107 or t108; +t110 = not t109; +t111 = t109 and t110; +t112 = t111 or t110; +t113 = t88 nand t112; +t114 = not t70; +t115 = not t114; +t116 = t115 nand t110; +t117 = t113 biimp t116; +t118 = _23; +t119 = _16; +t120 = not t119; +t121 = t118 and t120; +t122 = t39 and t119; +t123 = t121 or t122; +t124 = _1976; +t125 = not t124; +t126 = not t125; +t127 = t123 nand t126; +t128 = not t123; +t129 = t125 nand t128; +t130 = t127 nand t129; +t131 = not t130; +t132 = _6; +t133 = t132 and t120; +t134 = _61; +t135 = t134 and t6; +t136 = t135 and t8; +t137 = _86; +t138 = t137 and t6; +t139 = t138 and t12; +t140 = _48; +t141 = t140 and t5; +t142 = t141 and t12; +t143 = t139 or t142; +t144 = t136 or t143; +t145 = _73; +t146 = t145 and t5; +t147 = t146 and t8; +t148 = t144 or t147; +t149 = t148 and t119; +t150 = t133 or t149; +t151 = _1981; +t152 = not t151; +t153 = not t152; +t154 = t150 nand t153; +t155 = not t150; +t156 = t152 nand t155; +t157 = t154 nand t156; +t158 = not t157; +t159 = _25; +t160 = _29; +t161 = not t160; +t162 = t159 and t161; +t163 = _119; +t164 = t163 and t72; +t165 = t164 and t73; +t166 = _131; +t167 = t166 and t72; +t168 = t167 and t75; +t169 = _95; +t170 = t169 and t71; +t171 = t170 and t75; +t172 = t168 or t171; +t173 = t165 or t172; +t174 = _107; +t175 = t174 and t71; +t176 = t175 and t73; +t177 = t173 or t176; +t178 = t177 and t160; +t179 = t162 or t178; +t180 = _1991; +t181 = not t180; +t182 = not t181; +t183 = t179 nand t182; +t184 = not t179; +t185 = t181 nand t184; +t186 = t183 nand t185; +t187 = not t186; +t188 = _24; +t189 = t188 and t120; +t190 = _60; +t191 = t190 and t6; +t192 = t191 and t8; +t193 = _85; +t194 = t193 and t6; +t195 = t194 and t12; +t196 = _47; +t197 = t196 and t5; +t198 = t197 and t12; +t199 = t195 or t198; +t200 = t192 or t199; +t201 = _72; +t202 = t201 and t5; +t203 = t202 and t8; +t204 = t200 or t203; +t205 = t204 and t119; +t206 = t189 or t205; +t207 = _1986; +t208 = not t207; +t209 = not t208; +t210 = t206 nand t209; +t211 = not t206; +t212 = t208 nand t211; +t213 = t210 nand t212; +t214 = not t213; +t215 = t187 and t214; +t216 = t158 and t215; +t217 = t131 and t216; +t218 = _22; +t219 = t218 and t120; +t220 = _62; +t221 = t220 and t6; +t222 = t221 and t8; +t223 = _88; +t224 = t223 and t6; +t225 = t224 and t12; +t226 = _50; +t227 = t226 and t5; +t228 = t227 and t12; +t229 = t225 or t228; +t230 = t222 or t229; +t231 = _75; +t232 = t231 and t5; +t233 = t232 and t8; +t234 = t230 or t233; +t235 = t234 and t119; +t236 = t219 or t235; +t237 = _1971; +t238 = not t237; +t239 = not t238; +t240 = t236 nand t239; +t241 = not t236; +t242 = t238 nand t241; +t243 = t240 nand t242; +t244 = not t243; +t245 = t217 and t244; +t246 = _4; +t247 = t246 and t120; +t248 = t61 and t119; +t249 = t247 or t248; +t250 = _1348; +t251 = not t250; +t252 = not t251; +t253 = t249 nand t252; +t254 = not t249; +t255 = t251 nand t254; +t256 = t253 nand t255; +t257 = not t256; +t258 = _20; +t259 = t258 and t120; +t260 = _65; +t261 = t260 and t6; +t262 = t261 and t8; +t263 = _91; +t264 = t263 and t6; +t265 = t264 and t12; +t266 = _53; +t267 = t266 and t5; +t268 = t267 and t12; +t269 = t265 or t268; +t270 = t262 or t269; +t271 = _78; +t272 = t271 and t5; +t273 = t272 and t8; +t274 = t270 or t273; +t275 = t274 and t119; +t276 = t259 or t275; +t277 = _1956; +t278 = not t277; +t279 = not t278; +t280 = t276 nand t279; +t281 = not t276; +t282 = t278 nand t281; +t283 = t280 nand t282; +t284 = not t283; +t285 = _21; +t286 = t285 and t120; +t287 = _63; +t288 = t287 and t6; +t289 = t288 and t8; +t290 = _89; +t291 = t290 and t6; +t292 = t291 and t12; +t293 = _51; +t294 = t293 and t5; +t295 = t294 and t12; +t296 = t292 or t295; +t297 = t289 or t296; +t298 = _76; +t299 = t298 and t5; +t300 = t299 and t8; +t301 = t297 or t300; +t302 = t301 and t119; +t303 = t286 or t302; +t304 = _1966; +t305 = not t304; +t306 = not t305; +t307 = t303 nand t306; +t308 = not t303; +t309 = t305 nand t308; +t310 = t307 nand t309; +t311 = not t310; +t312 = _5; +t313 = t312 and t120; +t314 = _64; +t315 = t314 and t6; +t316 = t315 and t8; +t317 = _90; +t318 = t317 and t6; +t319 = t318 and t12; +t320 = _52; +t321 = t320 and t5; +t322 = t321 and t12; +t323 = t319 or t322; +t324 = t316 or t323; +t325 = _77; +t326 = t325 and t5; +t327 = t326 and t8; +t328 = t324 or t327; +t329 = t328 and t119; +t330 = t313 or t329; +t331 = _1961; +t332 = not t331; +t333 = not t332; +t334 = t330 nand t333; +t335 = not t330; +t336 = t332 nand t335; +t337 = t334 nand t336; +t338 = not t337; +t339 = t311 and t338; +t340 = t284 and t339; +t341 = t257 and t340; +t342 = _19; +t343 = t342 and t120; +t344 = t22 and t119; +t345 = t343 or t344; +t346 = _1341; +t347 = not t346; +t348 = not t347; +t349 = t345 nand t348; +t350 = not t345; +t351 = t347 nand t350; +t352 = t349 nand t351; +t353 = not t352; +t354 = t341 and t353; +t355 = t245 and t354; +t356 = _28; +t357 = t356 and t161; +t358 = t105 and t160; +t359 = t357 or t358; +t360 = _35; +t361 = t360 and t161; +t362 = _124; +t363 = t362 and t72; +t364 = t363 and t73; +t365 = _136; +t366 = t365 and t72; +t367 = t366 and t75; +t368 = _100; +t369 = t368 and t71; +t370 = t369 and t75; +t371 = t367 or t370; +t372 = t364 or t371; +t373 = _112; +t374 = t373 and t71; +t375 = t374 and t73; +t376 = t372 or t375; +t377 = t376 and t160; +t378 = t361 or t377; +t379 = _2090; +t380 = not t379; +t381 = not t380; +t382 = t378 nand t381; +t383 = not t378; +t384 = t380 nand t383; +t385 = t382 nand t384; +t386 = not t385; +t387 = t359 and t386; +t388 = _26; +t389 = t388 and t161; +t390 = _128; +t391 = t390 and t72; +t392 = t391 and t73; +t393 = _140; +t394 = t393 and t72; +t395 = t394 and t75; +t396 = _104; +t397 = t396 and t71; +t398 = t397 and t75; +t399 = t395 or t398; +t400 = t392 or t399; +t401 = _116; +t402 = t401 and t71; +t403 = t402 and t73; +t404 = t400 or t403; +t405 = t404 and t160; +t406 = t389 or t405; +t407 = _2067; +t408 = not t407; +t409 = not t408; +t410 = t406 nand t409; +t411 = not t406; +t412 = t408 nand t411; +t413 = t410 nand t412; +t414 = not t413; +t415 = _33; +t416 = t415 and t161; +t417 = _127; +t418 = t417 and t72; +t419 = t418 and t73; +t420 = _139; +t421 = t420 and t72; +t422 = t421 and t75; +t423 = _103; +t424 = t423 and t71; +t425 = t424 and t75; +t426 = t422 or t425; +t427 = t419 or t426; +t428 = _115; +t429 = t428 and t71; +t430 = t429 and t73; +t431 = t427 or t430; +t432 = t431 and t160; +t433 = t416 or t432; +t434 = _2072; +t435 = not t434; +t436 = not t435; +t437 = t433 nand t436; +t438 = not t433; +t439 = t435 nand t438; +t440 = t437 nand t439; +t441 = not t440; +t442 = _34; +t443 = t442 and t161; +t444 = _125; +t445 = t444 and t72; +t446 = t445 and t73; +t447 = _137; +t448 = t447 and t72; +t449 = t448 and t75; +t450 = _101; +t451 = t450 and t71; +t452 = t451 and t75; +t453 = t449 or t452; +t454 = t446 or t453; +t455 = _113; +t456 = t455 and t71; +t457 = t456 and t73; +t458 = t454 or t457; +t459 = t458 and t160; +t460 = t443 or t459; +t461 = _2084; +t462 = not t461; +t463 = not t462; +t464 = t460 nand t463; +t465 = not t460; +t466 = t462 nand t465; +t467 = t464 nand t466; +t468 = not t467; +t469 = _27; +t470 = t469 and t161; +t471 = _126; +t472 = t471 and t72; +t473 = t472 and t73; +t474 = _138; +t475 = t474 and t72; +t476 = t475 and t75; +t477 = _102; +t478 = t477 and t71; +t479 = t478 and t75; +t480 = t476 or t479; +t481 = t473 or t480; +t482 = _114; +t483 = t482 and t71; +t484 = t483 and t73; +t485 = t481 or t484; +t486 = t485 and t160; +t487 = t470 or t486; +t488 = _2078; +t489 = not t488; +t490 = not t489; +t491 = t487 nand t490; +t492 = not t487; +t493 = t489 nand t492; +t494 = t491 nand t493; +t495 = not t494; +t496 = t468 and t495; +t497 = t441 and t496; +t498 = t414 and t497; +t499 = _32; +t500 = t499 and t161; +t501 = _129; +t502 = t501 and t72; +t503 = t502 and t73; +t504 = _141; +t505 = t504 and t72; +t506 = t505 and t75; +t507 = _105; +t508 = t507 and t71; +t509 = t508 and t75; +t510 = t506 or t509; +t511 = t503 or t510; +t512 = _117; +t513 = t512 and t71; +t514 = t513 and t73; +t515 = t511 or t514; +t516 = t515 and t160; +t517 = t500 or t516; +t518 = _1996; +t519 = not t518; +t520 = not t519; +t521 = t517 nand t520; +t522 = not t517; +t523 = t519 nand t522; +t524 = t521 nand t523; +t525 = not t524; +t526 = t498 and t525; +t527 = t387 and t526; +t528 = t355 and t527; +t529 = _11; +t530 = _868; +t531 = not t530; +t532 = t529 and t531; +t533 = t529 and t530; +t534 = t532 or t533; +t535 = t528 and t534; +t536 = t43 and t119; +t537 = t121 or t536; +t538 = t537 nand t126; +t539 = not t537; +t540 = t125 nand t539; +t541 = t538 nand t540; +t542 = not t541; +t543 = t542 and t216; +t544 = t543 and t244; +t545 = t544 and t354; +t546 = t545 and t527; +t547 = t546 and t529; +t548 = t535 biimp t547; +t549 = not t535; +t550 = not t547; +t551 = t549 biimp t550; +t552 = not t376; +t553 = t458 nand t552; +t554 = not t458; +t555 = t376 nand t554; +t556 = t553 nand t555; +t557 = not t81; +t558 = t105 nand t557; +t559 = not t105; +t560 = t81 nand t559; +t561 = t558 nand t560; +t562 = not t561; +t563 = t556 nand t562; +t564 = not t556; +t565 = t561 nand t564; +t566 = t563 nand t565; +t567 = _130; +t568 = t567 and t72; +t569 = t568 and t73; +t570 = _142; +t571 = t570 and t72; +t572 = t571 and t75; +t573 = _106; +t574 = t573 and t71; +t575 = t574 and t75; +t576 = t572 or t575; +t577 = t569 or t576; +t578 = _118; +t579 = t578 and t71; +t580 = t579 and t73; +t581 = t577 or t580; +t582 = not t177; +t583 = t581 nand t582; +t584 = not t581; +t585 = t177 nand t584; +t586 = t583 nand t585; +t587 = not t404; +t588 = t515 nand t587; +t589 = not t515; +t590 = t404 nand t589; +t591 = t588 nand t590; +t592 = not t591; +t593 = t586 and t592; +t594 = not t485; +t595 = t431 nand t594; +t596 = not t431; +t597 = t485 nand t596; +t598 = t595 nand t597; +t599 = not t598; +t600 = t593 and t599; +t601 = not t586; +t602 = t592 and t601; +t603 = t602 and t598; +t604 = t600 nor t603; +t605 = t601 and t591; +t606 = t605 and t599; +t607 = t591 and t586; +t608 = t607 and t598; +t609 = t606 nor t608; +t610 = t604 nand t609; +t611 = not t610; +t612 = t566 nand t611; +t613 = not t566; +t614 = t610 nand t613; +t615 = t612 nand t614; +t616 = not t615; +t617 = _37; +t618 = not t617; +t619 = t616 and t618; +t620 = not t559; +t621 = not t620; +t622 = not t621; +t623 = t556 nand t622; +t624 = t621 nand t564; +t625 = t623 nand t624; +t626 = t625 nand t611; +t627 = not t625; +t628 = t610 nand t627; +t629 = t626 nand t628; +t630 = not t629; +t631 = t630 and t618; +t632 = t619 biimp t631; +t633 = _67; +t634 = t633 and t6; +t635 = t634 and t8; +t636 = _93; +t637 = t636 and t6; +t638 = t637 and t12; +t639 = _55; +t640 = t639 and t5; +t641 = t640 and t12; +t642 = t638 or t641; +t643 = t635 or t642; +t644 = _80; +t645 = t644 and t5; +t646 = t645 and t8; +t647 = t643 or t646; +t648 = t647 and t531; +t649 = not t234; +t650 = not t39; +t651 = not t650; +t652 = t649 nand t651; +t653 = not t649; +t654 = t650 nand t653; +t655 = t652 nand t654; +t656 = not t148; +t657 = not t204; +t658 = not t657; +t659 = t656 nand t658; +t660 = not t656; +t661 = t657 nand t660; +t662 = t659 nand t661; +t663 = not t662; +t664 = t655 nand t663; +t665 = not t655; +t666 = t662 nand t665; +t667 = t664 nand t666; +t668 = not t647; +t669 = not t22; +t670 = not t669; +t671 = t668 nand t670; +t672 = not t668; +t673 = t669 nand t672; +t674 = t671 nand t673; +t675 = not t674; +t676 = t63 and t675; +t677 = not t274; +t678 = not t677; +t679 = t62 nand t678; +t680 = not t62; +t681 = t677 nand t680; +t682 = t679 nand t681; +t683 = not t682; +t684 = t676 and t683; +t685 = not t63; +t686 = t675 and t685; +t687 = t686 and t682; +t688 = t684 nor t687; +t689 = t685 and t674; +t690 = t689 and t683; +t691 = t674 and t63; +t692 = t691 and t682; +t693 = t690 nor t692; +t694 = t688 nand t693; +t695 = not t694; +t696 = t667 nand t695; +t697 = not t667; +t698 = t694 nand t697; +t699 = t696 nand t698; +t700 = t699 and t530; +t701 = t648 or t700; +t702 = not t43; +t703 = not t702; +t704 = t649 nand t703; +t705 = t702 nand t653; +t706 = t704 nand t705; +t707 = t706 nand t663; +t708 = not t706; +t709 = t662 nand t708; +t710 = t707 nand t709; +t711 = t710 nand t695; +t712 = not t710; +t713 = t694 nand t712; +t714 = t711 nand t713; +t715 = t714 and t530; +t716 = t648 or t715; +t717 = t701 biimp t716; +t718 = t674 and t683; +t719 = not t328; +t720 = not t301; +t721 = not t720; +t722 = t719 nand t721; +t723 = not t719; +t724 = t720 nand t723; +t725 = t722 nand t724; +t726 = not t725; +t727 = t718 and t726; +t728 = t683 and t675; +t729 = t728 and t725; +t730 = t727 nor t729; +t731 = t675 and t682; +t732 = t731 and t726; +t733 = t682 and t674; +t734 = t733 and t725; +t735 = t732 nor t734; +t736 = t730 nand t735; +t737 = not t736; +t738 = t667 nand t737; +t739 = t736 nand t697; +t740 = t738 nand t739; +t741 = not t740; +t742 = t741 and t618; +t743 = t710 nand t737; +t744 = t736 nand t712; +t745 = t743 nand t744; +t746 = not t745; +t747 = t746 and t618; +t748 = t742 biimp t747; +t749 = _1384; +t750 = not t749; +t751 = t485 and t750; +t752 = t554 and t751; +t753 = _40; +t754 = t752 and t753; +t755 = not t754; +t756 = t515 and t755; +t757 = t753 and t554; +t758 = not t751; +t759 = t757 and t758; +t760 = t756 and t759; +t761 = not t760; +t762 = t519 and t755; +t763 = t762 and t759; +t764 = not t763; +t765 = t761 nand t764; +t766 = not t761; +t767 = t763 nand t766; +t768 = t765 nand t767; +t769 = t404 and t755; +t770 = t769 and t759; +t771 = not t770; +t772 = t408 and t755; +t773 = t772 and t759; +t774 = not t773; +t775 = t771 nand t774; +t776 = not t771; +t777 = t773 nand t776; +t778 = t775 nand t777; +t779 = t768 and t778; +t780 = t181 and t755; +t781 = t780 and t759; +t782 = t177 and t755; +t783 = t782 and t759; +t784 = not t783; +t785 = t781 and t784; +t786 = t779 and t785; +t787 = t773 and t771; +t788 = t763 and t761; +t789 = t778 and t788; +t790 = t787 or t789; +t791 = t786 or t790; +t792 = t204 and t755; +t793 = t792 and t759; +t794 = not t793; +t795 = t208 and t755; +t796 = t795 and t759; +t797 = t794 and t796; +t798 = not t781; +t799 = t784 nand t798; +t800 = not t784; +t801 = t781 nand t800; +t802 = t799 nand t801; +t803 = t802 and t778; +t804 = t797 and t803; +t805 = t804 and t768; +t806 = t791 or t805; +t807 = not t755; +t808 = t462 and t807; +t809 = t305 and t755; +t810 = t808 or t809; +t811 = _8; +t812 = t810 and t811; +t813 = t301 and t755; +t814 = t301 and t754; +t815 = t813 or t814; +t816 = t815 and t811; +t817 = not t816; +t818 = t812 and t817; +t819 = t234 and t755; +t820 = t234 and t754; +t821 = t819 or t820; +t822 = t821 and t811; +t823 = not t822; +t824 = t380 and t807; +t825 = t238 and t755; +t826 = t824 or t825; +t827 = t826 and t811; +t828 = not t827; +t829 = t823 nand t828; +t830 = not t823; +t831 = t827 nand t830; +t832 = t829 nand t831; +t833 = t148 and t755; +t834 = t833 and t811; +t835 = not t834; +t836 = t152 and t755; +t837 = t836 and t811; +t838 = not t837; +t839 = t835 nand t838; +t840 = not t835; +t841 = t837 nand t840; +t842 = t839 nand t841; +t843 = t832 and t842; +t844 = t818 and t843; +t845 = t39 and t755; +t846 = t845 and t811; +t847 = not t846; +t848 = t125 and t755; +t849 = t848 and t811; +t850 = not t849; +t851 = t847 nand t850; +t852 = not t847; +t853 = t849 nand t852; +t854 = t851 nand t853; +t855 = t844 and t854; +t856 = t854 and t842; +t857 = t827 and t823; +t858 = t856 and t857; +t859 = t837 and t835; +t860 = t849 and t847; +t861 = t842 and t860; +t862 = t859 or t861; +t863 = t858 or t862; +t864 = t855 or t863; +t865 = t489 and t807; +t866 = t332 and t755; +t867 = t865 or t866; +t868 = t867 and t719; +t869 = not t812; +t870 = t817 nand t869; +t871 = not t817; +t872 = t812 nand t871; +t873 = t870 nand t872; +t874 = t873 and t832; +t875 = t842 and t874; +t876 = t868 and t875; +t877 = t876 and t854; +t878 = t864 or t877; +t879 = not t867; +t880 = t719 nand t879; +t881 = t867 nand t723; +t882 = t880 nand t881; +t883 = t854 and t882; +t884 = t832 and t883; +t885 = t842 and t884; +t886 = t885 and t873; +t887 = t435 and t807; +t888 = t278 and t755; +t889 = t887 or t888; +t890 = t889 and t677; +t891 = not t889; +t892 = t677 nand t891; +t893 = t889 nand t678; +t894 = t892 nand t893; +t895 = t408 and t807; +t896 = t251 and t755; +t897 = t895 or t896; +t898 = t897 and t62; +t899 = t894 and t898; +t900 = t890 or t899; +t901 = not t897; +t902 = t62 nand t901; +t903 = t897 nand t680; +t904 = t902 nand t903; +t905 = t904 and t894; +t906 = t519 and t807; +t907 = t347 and t755; +t908 = t906 or t907; +t909 = t908 and t669; +t910 = t905 and t909; +t911 = t900 or t910; +t912 = t886 and t911; +t913 = t878 or t912; +t914 = not t913; +t915 = t806 and t914; +t916 = not t806; +t917 = not t796; +t918 = t794 nand t917; +t919 = not t794; +t920 = t796 nand t919; +t921 = t918 nand t920; +t922 = t768 and t921; +t923 = t802 and t922; +t924 = t923 and t778; +t925 = not t924; +t926 = t916 nand t925; +t927 = t926 and t913; +t928 = t915 or t927; +t929 = t756 and t757; +t930 = not t929; +t931 = not t930; +t932 = t762 and t757; +t933 = not t932; +t934 = t931 nand t933; +t935 = t769 and t757; +t936 = not t935; +t937 = not t936; +t938 = t772 and t757; +t939 = not t938; +t940 = t937 nand t939; +t941 = t934 and t940; +t942 = t780 and t757; +t943 = t782 and t757; +t944 = not t943; +t945 = t942 and t944; +t946 = t941 and t945; +t947 = t938 and t936; +t948 = t932 and t930; +t949 = t940 and t948; +t950 = t947 or t949; +t951 = t946 or t950; +t952 = t792 and t757; +t953 = not t952; +t954 = t795 and t757; +t955 = t953 and t954; +t956 = not t944; +t957 = not t942; +t958 = t956 nand t957; +t959 = t958 and t940; +t960 = t955 and t959; +t961 = t960 and t934; +t962 = t951 or t961; +t963 = not t953; +t964 = not t954; +t965 = t963 nand t964; +t966 = t934 and t965; +t967 = t958 and t966; +t968 = t967 and t940; +t969 = not t968; +t970 = not t969; +t971 = t301 and t811; +t972 = not t971; +t973 = t812 and t972; +t974 = t234 and t811; +t975 = not t974; +t976 = not t975; +t977 = t976 nand t828; +t978 = t840 nand t838; +t979 = t977 and t978; +t980 = t973 and t979; +t981 = t43 and t755; +t982 = t981 and t811; +t983 = not t982; +t984 = not t983; +t985 = t984 nand t850; +t986 = t980 and t985; +t987 = t985 and t978; +t988 = t827 and t975; +t989 = t987 and t988; +t990 = t849 and t983; +t991 = t978 and t990; +t992 = t859 or t991; +t993 = t989 or t992; +t994 = t986 or t993; +t995 = not t972; +t996 = t995 nand t869; +t997 = t996 and t977; +t998 = t978 and t997; +t999 = t868 and t998; +t1000 = t999 and t985; +t1001 = t994 or t1000; +t1002 = t723 nand t879; +t1003 = t985 and t1002; +t1004 = t977 and t1003; +t1005 = t978 and t1004; +t1006 = t1005 and t996; +t1007 = t678 nand t891; +t1008 = t1007 and t898; +t1009 = t890 or t1008; +t1010 = t680 nand t901; +t1011 = t1010 and t1007; +t1012 = t1011 and t909; +t1013 = t1009 or t1012; +t1014 = t1006 and t1013; +t1015 = t1001 or t1014; +t1016 = t970 and t1015; +t1017 = t962 or t1016; +t1018 = t928 biimp t1017; +t1019 = not t619; +t1020 = not t742; +t1021 = t1019 and t1020; +t1022 = t89 nand t70; +t1023 = t69 nand t90; +t1024 = t1022 nand t1023; +t1025 = _2678; +t1026 = t1025 nand t408; +t1027 = not t1025; +t1028 = t407 nand t1027; +t1029 = t1026 nand t1028; +t1030 = t434 nand t489; +t1031 = t488 nand t435; +t1032 = t1030 nand t1031; +t1033 = not t1032; +t1034 = t1029 and t1033; +t1035 = t461 nand t380; +t1036 = t379 nand t462; +t1037 = t1035 nand t1036; +t1038 = not t1037; +t1039 = t1034 and t1038; +t1040 = not t1029; +t1041 = t1033 and t1040; +t1042 = t1041 and t1037; +t1043 = t1039 nor t1042; +t1044 = t1040 and t1032; +t1045 = t1044 and t1038; +t1046 = t1032 and t1029; +t1047 = t1046 and t1037; +t1048 = t1045 nor t1047; +t1049 = t1043 nand t1048; +t1050 = not t1049; +t1051 = t1024 nand t1050; +t1052 = not t1024; +t1053 = t1049 nand t1052; +t1054 = t1051 nand t1053; +t1055 = t1021 and t1054; +t1056 = t151 nand t208; +t1057 = t207 nand t152; +t1058 = t1056 nand t1057; +t1059 = t180 nand t519; +t1060 = t518 nand t181; +t1061 = t1059 nand t1060; +t1062 = not t1061; +t1063 = t1058 nand t1062; +t1064 = not t1058; +t1065 = t1061 nand t1064; +t1066 = t1063 nand t1065; +t1067 = _2474; +t1068 = t1067 nand t278; +t1069 = not t1067; +t1070 = t277 nand t1069; +t1071 = t1068 nand t1070; +t1072 = t331 nand t305; +t1073 = t304 nand t332; +t1074 = t1072 nand t1073; +t1075 = not t1074; +t1076 = t1071 and t1075; +t1077 = t237 nand t125; +t1078 = t124 nand t238; +t1079 = t1077 nand t1078; +t1080 = not t1079; +t1081 = t1076 and t1080; +t1082 = not t1071; +t1083 = t1075 and t1082; +t1084 = t1083 and t1079; +t1085 = t1081 nor t1084; +t1086 = t1082 and t1074; +t1087 = t1086 and t1080; +t1088 = t1074 and t1071; +t1089 = t1088 and t1079; +t1090 = t1087 nor t1089; +t1091 = t1085 nand t1090; +t1092 = not t1091; +t1093 = t1066 nand t1092; +t1094 = not t1066; +t1095 = t1091 nand t1094; +t1096 = t1093 nand t1095; +t1097 = _2454; +t1098 = _2451; +t1099 = not t1098; +t1100 = t1097 nand t1099; +t1101 = not t1097; +t1102 = t1098 nand t1101; +t1103 = t1100 nand t1102; +t1104 = t346 nand t251; +t1105 = t250 nand t347; +t1106 = t1104 nand t1105; +t1107 = not t1106; +t1108 = t1103 nand t1107; +t1109 = not t1103; +t1110 = t1106 nand t1109; +t1111 = t1108 nand t1110; +t1112 = _2430; +t1113 = _2427; +t1114 = not t1113; +t1115 = t1112 nand t1114; +t1116 = not t1112; +t1117 = t1113 nand t1116; +t1118 = t1115 nand t1117; +t1119 = _2438; +t1120 = _2435; +t1121 = not t1120; +t1122 = t1119 nand t1121; +t1123 = not t1119; +t1124 = t1120 nand t1123; +t1125 = t1122 nand t1124; +t1126 = not t1125; +t1127 = t1118 and t1126; +t1128 = _2446; +t1129 = _2443; +t1130 = not t1129; +t1131 = t1128 nand t1130; +t1132 = not t1128; +t1133 = t1129 nand t1132; +t1134 = t1131 nand t1133; +t1135 = not t1134; +t1136 = t1127 and t1135; +t1137 = not t1118; +t1138 = t1126 and t1137; +t1139 = t1138 and t1134; +t1140 = t1136 nor t1139; +t1141 = t1137 and t1125; +t1142 = t1141 and t1135; +t1143 = t1125 and t1118; +t1144 = t1143 and t1134; +t1145 = t1142 nor t1144; +t1146 = t1140 nand t1145; +t1147 = not t1146; +t1148 = t1111 nand t1147; +t1149 = not t1111; +t1150 = t1146 nand t1149; +t1151 = t1148 nand t1150; +t1152 = not t1151; +t1153 = _14; +t1154 = t1152 and t1153; +t1155 = not t1154; +t1156 = t1096 and t1155; +t1157 = not t928; +t1158 = t928 and t1157; +t1159 = t1157 and t928; +t1160 = t1158 or t1159; +t1161 = not t1160; +t1162 = t1160 and t1161; +t1163 = t1162 or t1161; +t1164 = t1156 and t1163; +t1165 = t1055 and t1164; +t1166 = _2106; +t1167 = _96; +t1168 = _132; +t1169 = _82; +t1170 = t1168 and t1169; +t1171 = t1167 and t1170; +t1172 = _44; +t1173 = t1171 and t1172; +t1174 = not t1173; +t1175 = t1166 and t1174; +t1176 = not t1175; +t1177 = _567; +t1178 = _108; +t1179 = _120; +t1180 = _57; +t1181 = t1179 and t1180; +t1182 = t1178 and t1181; +t1183 = _69; +t1184 = t1182 and t1183; +t1185 = not t1184; +t1186 = t1177 and t1185; +t1187 = not t1186; +t1188 = t1176 and t1187; +t1189 = t1165 and t1188; +t1190 = not t631; +t1191 = not t747; +t1192 = t1190 and t1191; +t1193 = t1192 and t1054; +t1194 = t1193 and t1156; +t1195 = t1194 and t1188; +t1196 = t1189 biimp t1195; +t1197 = not t1189; +t1198 = not t1195; +t1199 = t1197 biimp t1198; + +tautology t26; +tautology t44; +tautology t68; +tautology t117; +tautology t548; +tautology t551; +tautology t632; +tautology t717; +tautology t717; +tautology t748; +tautology t1018; +tautology t1196; +tautology t1199; diff --git a/buddy/examples/calculator/examples/c3540.cal b/buddy/examples/calculator/examples/c3540.cal new file mode 100644 index 000000000..09ffb757e --- /dev/null +++ b/buddy/examples/calculator/examples/c3540.cal @@ -0,0 +1,2007 @@ +/* BDD Calculator data file */ + +initial 13000 10000; + +inputs +_1 _13 _20 _33 _41 _45 _50 _58 _68 _77 +_87 _97 _107 _116 _124 _125 _128 _132 _137 _143 +_150 _159 _169 _179 _190 _200 _213 _222 _223 _226 +_232 _238 _244 _250 _257 _264 _270 _274 _283 _294 +_303 _311 _317 _322 _326 _329 _330 _343 _1698 _2897 +; + +actions +autoreorder 0 sift; + +t695 = _330; +t9 = _1; +t10 = _13; +t11 = t9 and t10; +t154 = _33; +t180 = _41; +t181 = t154 and t180; +t182 = not t181; +t183 = t11 and t182; +t184 = not t183; +t47 = _270; +t322 = t184 and t47; +t186 = not t9; +t187 = _45; +t188 = t186 and t187; +t189 = not t180; +t190 = t188 and t189; +t191 = not t190; +t323 = t322 and t191; +t193 = _274; +t194 = t184 and t193; +t195 = t194 and t190; +t324 = t323 or t195; +t325 = _303; +t155 = not t154; +t198 = not t155; +t326 = t325 and t198; +t17 = _257; +t200 = _1698; +t201 = t200 or t154; +t202 = not t201; +t327 = t17 and t202; +t328 = t326 or t327; +t18 = _264; +t205 = t155 and t201; +t329 = t18 and t205; +t330 = t328 or t329; +t331 = t183 and t330; +t332 = t324 or t331; +t185 = t184 and t18; +t192 = t185 and t191; +t196 = t192 or t195; +t197 = _294; +t199 = t197 and t198; +t16 = _250; +t203 = t16 and t202; +t204 = t199 or t203; +t206 = t17 and t205; +t207 = t204 or t206; +t208 = t183 and t207; +t209 = t196 or t208; +t241 = t184 and t16; +t242 = not t188; +t243 = t241 and t242; +t244 = t194 and t188; +t245 = t243 or t244; +t48 = _116; +t246 = t48 and t198; +t27 = _238; +t247 = t27 and t202; +t248 = t246 or t247; +t35 = _244; +t249 = t35 and t205; +t250 = t248 or t249; +t251 = t183 and t250; +t252 = t245 or t251; +t283 = t184 and t17; +t284 = t283 and t191; +t285 = t284 or t195; +t286 = _283; +t287 = t286 and t198; +t288 = t35 and t202; +t289 = t287 or t288; +t290 = t16 and t205; +t291 = t289 or t290; +t292 = t183 and t291; +t293 = t285 or t292; +t744 = t252 and t293; +t745 = t209 and t744; +t746 = t332 and t745; +t211 = _179; +t747 = not t211; +t748 = t746 and t747; +t335 = not t332; +t213 = not t209; +t255 = not t252; +t296 = not t293; +t749 = t255 and t296; +t750 = t213 and t749; +t751 = t335 and t750; +t752 = t751 and t211; +t753 = t748 or t752; +t696 = t186 and t10; +t12 = _20; +t151 = not t12; +t697 = t696 and t151; +t698 = _213; +t699 = t697 and t698; +t700 = _343; +t716 = t699 nand t700; +t754 = not t716; +t755 = t753 and t754; +t150 = _169; +t39 = _107; +t103 = not t39; +t152 = not t151; +t153 = t103 and t152; +t156 = t155 or t12; +t157 = not t156; +t158 = t48 and t157; +t159 = t153 or t158; +t41 = _87; +t160 = t151 and t156; +t161 = t41 and t160; +t162 = t159 or t161; +t163 = t9 nand t10; +t164 = t9 and t12; +t165 = t164 nand t154; +t166 = t163 and t165; +t167 = not t166; +t168 = t162 and t167; +t169 = t10 and t12; +t170 = not t169; +t171 = t9 or t170; +t172 = t39 nor t171; +t173 = t168 or t172; +t174 = t155 or t9; +t175 = t39 and t174; +t176 = t166 and t171; +t177 = t175 and t176; +t178 = t173 or t177; +t179 = t150 and t178; +t210 = t179 and t209; +t212 = t211 and t178; +t214 = t212 and t213; +t215 = t210 nor t214; +t216 = _190; +t217 = t173 nor t177; +t218 = t216 and t217; +t219 = t218 and t213; +t220 = _200; +t221 = t220 and t217; +t222 = t221 and t209; +t223 = t219 or t222; +t224 = not t217; +t225 = t223 or t224; +t226 = t215 and t225; +t110 = not t41; +t43 = _97; +t109 = not t43; +t227 = t110 and t109; +t228 = t227 nand t103; +t229 = t228 and t152; +t230 = t43 and t157; +t231 = t229 or t230; +t5 = _68; +t232 = t5 and t160; +t233 = t231 or t232; +t234 = t233 and t167; +t235 = t41 nor t171; +t236 = t234 or t235; +t237 = t41 and t174; +t238 = t237 and t176; +t239 = t236 or t238; +t240 = t150 and t239; +t253 = t240 and t252; +t254 = t211 and t239; +t256 = t254 and t255; +t257 = t253 nor t256; +t258 = t236 nor t238; +t259 = t216 and t258; +t260 = t259 and t255; +t261 = t220 and t258; +t262 = t261 and t252; +t263 = t260 or t262; +t264 = not t258; +t265 = t263 or t264; +t266 = t257 and t265; +t267 = t39 nand t109; +t268 = t43 nand t103; +t269 = t267 nand t268; +t270 = not t269; +t271 = t270 and t152; +t272 = t39 and t157; +t273 = t271 or t272; +t36 = _77; +t274 = t36 and t160; +t275 = t273 or t274; +t276 = t275 and t167; +t277 = t43 nor t171; +t278 = t276 or t277; +t279 = t43 and t174; +t280 = t279 and t176; +t281 = t278 or t280; +t282 = t150 and t281; +t294 = t282 and t293; +t295 = t211 and t281; +t297 = t295 and t296; +t298 = t294 nor t297; +t299 = t278 nor t280; +t300 = t216 and t299; +t301 = t300 and t296; +t302 = t220 and t299; +t303 = t302 and t293; +t304 = t301 or t303; +t305 = not t299; +t306 = t304 or t305; +t307 = t298 and t306; +t308 = t266 and t307; +t309 = t226 and t308; +t310 = t48 and t152; +t311 = t286 and t157; +t312 = t310 or t311; +t313 = t43 and t160; +t314 = t312 or t313; +t315 = t314 and t167; +t316 = t48 nor t171; +t317 = t315 or t316; +t318 = t48 and t174; +t319 = t318 and t176; +t320 = t317 or t319; +t321 = t150 and t320; +t333 = t321 and t332; +t334 = t211 and t320; +t336 = t334 and t335; +t337 = t333 nor t336; +t338 = t317 nor t319; +t339 = t216 and t338; +t340 = t339 and t335; +t341 = t220 and t338; +t342 = t341 and t332; +t343 = t340 or t342; +t344 = not t338; +t345 = t343 or t344; +t346 = t337 and t345; +t347 = t309 and t346; +t756 = t347 and t716; +t757 = t755 or t756; +t758 = t695 and t757; +t701 = t699 and t700; +t473 = t36 and t152; +t474 = t41 and t157; +t475 = t473 or t474; +t3 = _58; +t476 = t3 and t160; +t477 = t475 or t476; +t478 = t477 and t167; +t479 = t36 nor t171; +t480 = t478 or t479; +t356 = t151 or t9; +t481 = t36 and t356; +t482 = t481 and t176; +t483 = t480 or t482; +t938 = t701 and t483; +t484 = t150 and t483; +t485 = t184 and t35; +t362 = t180 or t187; +t363 = t186 and t362; +t364 = not t363; +t486 = t485 and t364; +t366 = t194 and t363; +t487 = t486 or t366; +t488 = t39 and t198; +t31 = _232; +t489 = t31 and t202; +t490 = t488 or t489; +t491 = t27 and t205; +t492 = t490 or t491; +t493 = t183 and t492; +t494 = t487 or t493; +t495 = t484 and t494; +t496 = t211 and t483; +t497 = not t494; +t498 = t496 and t497; +t499 = t495 nor t498; +t500 = t480 nor t482; +t501 = t216 and t500; +t502 = t501 and t497; +t503 = t220 and t500; +t504 = t503 and t494; +t505 = t502 or t504; +t506 = not t500; +t507 = t505 or t506; +t508 = t499 and t507; +t939 = not t508; +t940 = t938 nand t939; +t941 = not t938; +t942 = t508 nand t941; +t943 = t940 nand t942; +t634 = t210 or t214; +t635 = t308 nand t634; +t636 = t253 or t256; +t637 = not t636; +t638 = t294 or t297; +t639 = t266 nand t638; +t640 = t637 and t639; +t641 = t635 and t640; +t642 = t333 or t336; +t643 = t642 and t307; +t644 = t226 and t643; +t645 = t644 nand t266; +t646 = t641 nand t645; +t759 = t646 and t716; +t760 = not t759; +t944 = t943 nand t760; +t945 = not t943; +t946 = t759 nand t945; +t947 = t944 nand t946; +t948 = not t947; +t949 = t758 nand t948; +t950 = not t758; +t951 = t947 nand t950; +t952 = t949 nand t951; +t798 = t10 and t151; +t799 = t798 nand t187; +t800 = t9 and t799; +t801 = not t800; +t953 = t952 and t801; +t21 = not t10; +t22 = t9 and t21; +t740 = t12 and t22; +t741 = t740 nand t189; +t742 = not t741; +t954 = t952 and t742; +t955 = t953 or t954; +t956 = _143; +t805 = t151 or t216; +t806 = not t220; +t807 = t12 and t211; +t808 = t806 and t807; +t809 = t805 nand t808; +t810 = not t809; +t957 = t956 and t810; +t394 = _150; +t812 = t151 nor t216; +t813 = t220 and t807; +t814 = t812 nand t813; +t815 = not t814; +t958 = t394 and t815; +t437 = _159; +t817 = t812 nand t808; +t818 = not t817; +t959 = t437 and t818; +t2 = _50; +t820 = t12 and t220; +t821 = not t807; +t822 = t820 and t821; +t823 = t805 nand t822; +t824 = not t823; +t960 = t2 and t824; +t826 = t12 nand t220; +t827 = t826 and t821; +t828 = t805 nand t827; +t829 = not t828; +t961 = t3 and t829; +t962 = _132; +t831 = t812 nand t827; +t832 = not t831; +t963 = t962 and t832; +t834 = t812 nand t822; +t835 = not t834; +t964 = t5 and t835; +t965 = t963 or t964; +t966 = t961 or t965; +t967 = t960 or t966; +t968 = t959 or t967; +t969 = t958 or t968; +t970 = t957 or t969; +t971 = _137; +t843 = t805 nand t813; +t844 = not t843; +t972 = t971 and t844; +t973 = t970 nor t972; +t974 = t973 and t155; +t975 = t197 and t810; +t976 = t286 and t815; +t977 = t48 and t818; +t978 = t39 and t824; +t830 = t43 and t829; +t852 = _311; +t979 = t852 and t832; +t980 = t41 and t835; +t981 = t979 or t980; +t982 = t830 or t981; +t983 = t978 or t982; +t984 = t977 or t983; +t985 = t976 or t984; +t986 = t975 or t985; +t987 = t325 and t844; +t988 = t986 nor t987; +t989 = t988 and t154; +t990 = t974 or t989; +t870 = t151 or t150; +t871 = t11 nand t870; +t872 = not t871; +t991 = t990 and t872; +t992 = t21 nand t155; +t993 = not t992; +t994 = t945 and t993; +t995 = t991 or t994; +t121 = not t36; +t996 = t871 and t992; +t997 = t121 and t996; +t998 = t995 nor t997; +t900 = t800 and t741; +t999 = t998 and t900; +t1000 = t955 or t999; +t1001 = t955 nor t999; +t1002 = not t1001; +t1003 = t1000 and t1002; +t511 = t193 and t190; +t548 = t323 or t511; +t549 = t548 or t331; +t512 = t192 or t511; +t513 = t512 or t208; +t523 = t193 and t188; +t524 = t243 or t523; +t525 = t524 or t251; +t535 = t284 or t511; +t536 = t535 or t292; +t773 = t525 and t536; +t774 = t513 and t773; +t775 = t549 and t774; +t776 = t775 and t747; +t551 = not t549; +t515 = not t513; +t527 = not t525; +t538 = not t536; +t777 = t527 and t538; +t778 = t515 and t777; +t779 = t551 and t778; +t780 = t779 and t211; +t781 = t776 or t780; +t782 = t781 and t754; +t514 = t179 and t513; +t516 = t212 and t515; +t517 = t514 nor t516; +t518 = t216 and t515; +t519 = t220 and t513; +t520 = t518 or t519; +t521 = t520 or t224; +t522 = t517 and t521; +t526 = t240 and t525; +t528 = t254 and t527; +t529 = t526 nor t528; +t530 = t216 and t527; +t531 = t220 and t525; +t532 = t530 or t531; +t533 = t532 or t264; +t534 = t529 and t533; +t537 = t282 and t536; +t539 = t295 and t538; +t540 = t537 nor t539; +t541 = t216 and t538; +t542 = t220 and t536; +t543 = t541 or t542; +t544 = t543 or t305; +t545 = t540 and t544; +t546 = t534 and t545; +t547 = t522 and t546; +t550 = t321 and t549; +t552 = t334 and t551; +t553 = t550 nor t552; +t554 = t216 and t551; +t555 = t220 and t549; +t556 = t554 or t555; +t557 = t556 or t344; +t558 = t553 and t557; +t559 = t547 and t558; +t783 = t559 and t716; +t784 = t782 or t783; +t785 = t695 and t784; +t614 = t481 and t166; +t615 = t480 or t614; +t1004 = t701 and t615; +t616 = t150 and t615; +t563 = t193 and t363; +t617 = t486 or t563; +t618 = t617 or t493; +t619 = t616 and t618; +t620 = t211 and t615; +t621 = not t618; +t622 = t620 and t621; +t623 = t619 nor t622; +t624 = t216 and t621; +t625 = t220 and t618; +t626 = t624 or t625; +t627 = t480 nor t614; +t628 = not t627; +t629 = t626 or t628; +t630 = t623 and t629; +t1005 = not t630; +t1006 = t1004 nand t1005; +t1007 = not t1004; +t1008 = t630 nand t1007; +t1009 = t1006 nand t1008; +t664 = t514 or t516; +t665 = t546 nand t664; +t666 = t526 or t528; +t667 = not t666; +t668 = t537 or t539; +t669 = t534 nand t668; +t670 = t667 and t669; +t671 = t665 and t670; +t672 = t550 or t552; +t673 = t672 and t545; +t674 = t522 and t673; +t675 = t674 nand t534; +t676 = t671 nand t675; +t786 = t676 and t716; +t1010 = not t786; +t1011 = t1009 nand t1010; +t1012 = not t1009; +t1013 = t786 nand t1012; +t1014 = t1011 nand t1013; +t1015 = not t1014; +t1016 = t785 nand t1015; +t1017 = not t785; +t1018 = t1014 nand t1017; +t1019 = t1016 nand t1018; +t1020 = t1019 and t801; +t1021 = t1019 and t742; +t1022 = t1020 or t1021; +t913 = t10 nand t870; +t914 = not t913; +t1023 = t990 and t914; +t1024 = not t1005; +t1025 = not t1024; +t1026 = t1025 and t993; +t1027 = t1023 or t1026; +t1028 = t913 and t992; +t1029 = t121 and t1028; +t1030 = t1027 nor t1029; +t1031 = t1030 and t900; +t1032 = t1022 nor t1031; +t1033 = not t1032; +t1034 = t1003 biimp t1033; +t4 = not t3; +t430 = t5 nand t4; +t6 = not t5; +t431 = t3 nand t6; +t432 = t430 nand t431; +t1035 = t432 and t36; +t127 = not t2; +t1036 = not t127; +t1037 = t1035 and t1036; +t1038 = t5 and t127; +t1039 = t1037 or t1038; +t1040 = t9 nand t21; +t1041 = not t1040; +t1042 = t1039 and t1041; +t1043 = t48 and t269; +t13 = t11 nand t12; +t14 = not t13; +t1044 = t1043 and t14; +t1045 = t1042 or t1044; +t348 = t6 and t152; +t349 = t36 and t157; +t350 = t348 or t349; +t351 = t2 and t160; +t352 = t350 or t351; +t353 = t352 and t167; +t354 = t5 nor t171; +t355 = t353 or t354; +t357 = t5 and t356; +t358 = t357 and t176; +t359 = t355 or t358; +t1046 = t701 and t359; +t360 = t150 and t359; +t361 = t184 and t27; +t365 = t361 and t364; +t367 = t365 or t366; +t368 = t43 and t198; +t29 = _226; +t369 = t29 and t202; +t370 = t368 or t369; +t371 = t31 and t205; +t372 = t370 or t371; +t373 = t183 and t372; +t374 = t367 or t373; +t375 = t360 and t374; +t376 = t211 and t359; +t377 = not t374; +t378 = t376 and t377; +t379 = t375 nor t378; +t380 = t355 nor t358; +t381 = t216 and t380; +t382 = t381 and t377; +t383 = t220 and t380; +t384 = t383 and t374; +t385 = t382 or t384; +t386 = not t380; +t387 = t385 or t386; +t388 = t379 and t387; +t1047 = not t388; +t1048 = t1046 nand t1047; +t1049 = not t1046; +t1050 = t388 nand t1049; +t1051 = t1048 nand t1050; +t433 = not t432; +t434 = t433 and t152; +t435 = t5 and t157; +t436 = t434 or t435; +t438 = t437 and t160; +t439 = t436 or t438; +t440 = t439 and t167; +t441 = t3 nor t171; +t442 = t440 or t441; +t443 = t3 and t356; +t444 = t443 and t176; +t445 = t442 or t444; +t1052 = t699 and t445; +t446 = t150 and t445; +t447 = t184 and t31; +t448 = t447 and t364; +t449 = t448 or t366; +t450 = t41 and t198; +t411 = _223; +t451 = t411 and t202; +t452 = t450 or t451; +t453 = t29 and t205; +t454 = t452 or t453; +t455 = t183 and t454; +t456 = t449 or t455; +t457 = t446 and t456; +t458 = t211 and t445; +t459 = not t456; +t460 = t458 and t459; +t461 = t457 nor t460; +t462 = t442 nor t444; +t463 = t216 and t462; +t464 = t463 and t459; +t465 = t220 and t462; +t466 = t465 and t456; +t467 = t464 or t466; +t468 = not t462; +t469 = t467 or t468; +t470 = t461 and t469; +t1053 = not t470; +t1054 = t1052 nand t1053; +t1055 = not t1052; +t1056 = t470 nand t1055; +t1057 = t1054 nand t1056; +t1058 = t757 and t1057; +t1059 = t1051 and t1058; +t1060 = t1059 and t943; +t389 = t127 and t4; +t390 = t389 nand t6; +t391 = t390 and t152; +t392 = t3 and t157; +t393 = t391 or t392; +t395 = t394 and t160; +t396 = t393 or t395; +t397 = t396 and t167; +t398 = t2 nor t171; +t399 = t397 or t398; +t400 = t2 and t356; +t401 = t400 and t176; +t402 = t399 or t401; +t403 = t150 and t402; +t404 = t184 and t29; +t405 = t404 and t364; +t406 = t405 or t366; +t407 = t36 and t198; +t408 = _222; +t409 = t408 and t202; +t410 = t407 or t409; +t412 = t411 and t205; +t413 = t410 or t412; +t414 = t183 and t413; +t415 = t406 or t414; +t416 = t403 and t415; +t417 = t211 and t402; +t418 = not t415; +t419 = t417 and t418; +t420 = t416 nor t419; +t421 = t399 nor t401; +t422 = t216 and t421; +t423 = t422 and t418; +t424 = t220 and t421; +t425 = t424 and t415; +t426 = t423 or t425; +t427 = not t421; +t428 = t426 or t427; +t429 = t420 and t428; +t471 = t429 and t470; +t472 = t388 and t471; +t509 = t472 and t508; +t1061 = t757 and t509; +t1062 = not t1061; +t1063 = t1060 nand t1062; +t1064 = not t1060; +t1065 = t1061 nand t1064; +t1066 = t1063 nand t1065; +t1067 = t695 and t1066; +t648 = t375 or t378; +t649 = t471 nand t648; +t650 = t416 or t419; +t651 = not t650; +t652 = t457 or t460; +t653 = t429 nand t652; +t654 = t651 and t653; +t655 = t649 and t654; +t656 = t495 or t498; +t657 = t656 and t470; +t658 = t388 and t657; +t659 = t658 nand t429; +t660 = t655 nand t659; +t1068 = t759 and t509; +t1069 = t660 or t1068; +t1070 = t1057 and t1051; +t1071 = t656 and t716; +t1072 = t1070 nand t1071; +t1073 = t697 nand t698; +t1074 = t652 and t1073; +t1075 = not t1074; +t1076 = t648 and t716; +t1077 = t1057 nand t1076; +t1078 = t1075 and t1077; +t1079 = t1072 and t1078; +t1080 = t943 and t1070; +t1081 = t1080 nand t759; +t1082 = t1079 nand t1081; +t1083 = not t1082; +t1084 = t1069 nand t1083; +t1085 = not t1069; +t1086 = t1082 nand t1085; +t1087 = t1084 nand t1086; +t1088 = not t1087; +t1089 = t1067 nand t1088; +t1090 = not t1067; +t1091 = t1087 nand t1090; +t1092 = t1089 nand t1091; +t1093 = t1040 and t13; +t1094 = t1092 and t1093; +t1095 = t1045 or t1094; +t1096 = t1045 nor t1094; +t1097 = not t1096; +t1098 = t1095 and t1097; +t560 = t357 and t166; +t561 = t355 or t560; +t1099 = t701 and t561; +t562 = t150 and t561; +t564 = t365 or t563; +t565 = t564 or t373; +t566 = t562 and t565; +t567 = t211 and t561; +t568 = not t565; +t569 = t567 and t568; +t570 = t566 nor t569; +t571 = t216 and t568; +t572 = t220 and t565; +t573 = t571 or t572; +t574 = t355 nor t560; +t575 = not t574; +t576 = t573 or t575; +t577 = t570 and t576; +t1100 = not t577; +t1101 = t1099 nand t1100; +t1102 = not t1099; +t1103 = t577 nand t1102; +t1104 = t1101 nand t1103; +t595 = t443 and t166; +t596 = t442 or t595; +t1105 = t699 and t596; +t597 = t150 and t596; +t598 = t448 or t563; +t599 = t598 or t455; +t600 = t597 and t599; +t601 = t211 and t596; +t602 = not t599; +t603 = t601 and t602; +t604 = t600 nor t603; +t605 = t216 and t602; +t606 = t220 and t599; +t607 = t605 or t606; +t608 = t442 nor t595; +t609 = not t608; +t610 = t607 or t609; +t611 = t604 and t610; +t1106 = not t611; +t1107 = t1105 nand t1106; +t1108 = not t1105; +t1109 = t611 nand t1108; +t1110 = t1107 nand t1109; +t1111 = t784 and t1110; +t1112 = t1104 and t1111; +t1113 = t1112 and t1009; +t578 = t400 and t166; +t579 = t399 or t578; +t580 = t150 and t579; +t581 = t405 or t563; +t582 = t581 or t414; +t583 = t580 and t582; +t584 = t211 and t579; +t585 = not t582; +t586 = t584 and t585; +t587 = t583 nor t586; +t588 = t216 and t585; +t589 = t220 and t582; +t590 = t588 or t589; +t591 = t399 nor t578; +t592 = not t591; +t593 = t590 or t592; +t594 = t587 and t593; +t612 = t594 and t611; +t613 = t577 and t612; +t631 = t613 and t630; +t1114 = t784 and t631; +t1115 = not t1114; +t1116 = t1113 nand t1115; +t1117 = not t1113; +t1118 = t1114 nand t1117; +t1119 = t1116 nand t1118; +t1120 = t695 and t1119; +t678 = t566 or t569; +t679 = t612 nand t678; +t680 = t583 or t586; +t681 = not t680; +t682 = t600 or t603; +t683 = t594 nand t682; +t684 = t681 and t683; +t685 = t679 and t684; +t686 = t619 or t622; +t687 = t686 and t611; +t688 = t577 and t687; +t689 = t688 nand t594; +t690 = t685 nand t689; +t1121 = t786 and t631; +t1122 = t690 or t1121; +t1123 = t1110 and t1104; +t1124 = t686 and t716; +t1125 = t1123 nand t1124; +t1126 = t682 and t1073; +t1127 = not t1126; +t1128 = t678 and t716; +t1129 = t1110 nand t1128; +t1130 = t1127 and t1129; +t1131 = t1125 and t1130; +t1132 = t1009 and t1123; +t1133 = t1132 nand t786; +t1134 = t1131 nand t1133; +t1135 = not t1134; +t1136 = t1122 nand t1135; +t1137 = not t1122; +t1138 = t1134 nand t1137; +t1139 = t1136 nand t1138; +t1140 = not t1139; +t1141 = t1120 nand t1140; +t1142 = not t1120; +t1143 = t1139 nand t1142; +t1144 = t1141 nand t1143; +t1145 = t1144 and t1093; +t1146 = t1045 nor t1145; +t1147 = not t1146; +t1148 = t1098 biimp t1147; +t702 = t701 and t320; +t703 = not t346; +t704 = t702 nand t703; +t705 = not t702; +t706 = t346 nand t705; +t707 = t704 nand t706; +t708 = t701 and t178; +t709 = not t226; +t710 = t708 nand t709; +t711 = not t708; +t712 = t226 nand t711; +t713 = t710 nand t712; +t714 = t707 and t713; +t1149 = t701 and t281; +t1150 = not t307; +t1151 = t1149 nand t1150; +t1152 = not t1149; +t1153 = t307 nand t1152; +t1154 = t1151 nand t1153; +t1155 = t714 and t1154; +t1156 = t695 and t1155; +t1157 = t701 and t239; +t1158 = not t266; +t1159 = t1157 nand t1158; +t1160 = not t1157; +t1161 = t266 nand t1160; +t1162 = t1159 nand t1161; +t1163 = t638 and t716; +t1164 = not t1163; +t717 = t634 and t716; +t1165 = t1154 nand t717; +t1166 = t1164 and t1165; +t1167 = t1154 and t713; +t718 = t642 and t716; +t1168 = t1167 nand t718; +t1169 = t1166 nand t1168; +t1170 = not t1169; +t1171 = t1162 nand t1170; +t1172 = not t1162; +t1173 = t1169 nand t1172; +t1174 = t1171 nand t1173; +t1175 = not t1174; +t1176 = t1156 nand t1175; +t1177 = not t1156; +t1178 = t1174 nand t1177; +t1179 = t1176 nand t1178; +t1180 = t1179 and t801; +t1181 = not t1179; +t761 = t758 and t760; +t1182 = t761 nor t759; +t1183 = t1181 nor t1182; +t1184 = t695 and t707; +t1185 = not t718; +t1186 = t713 nand t1185; +t1187 = not t713; +t1188 = t718 nand t1187; +t1189 = t1186 nand t1188; +t1190 = not t1189; +t1191 = t1184 nand t1190; +t1192 = not t1184; +t1193 = t1189 nand t1192; +t1194 = t1191 nand t1193; +t715 = t695 and t714; +t719 = t713 and t718; +t720 = t717 or t719; +t721 = not t720; +t1195 = t1154 nand t721; +t1196 = not t1154; +t1197 = t720 nand t1196; +t1198 = t1195 nand t1197; +t1199 = not t1198; +t1200 = t715 nand t1199; +t1201 = not t715; +t1202 = t1198 nand t1201; +t1203 = t1200 nand t1202; +t1204 = t1194 and t1203; +t1205 = t1179 and t1204; +t1206 = t1205 and t1182; +t1207 = t1183 or t1206; +t1208 = t1207 and t742; +t1209 = t1180 or t1208; +t1210 = t394 and t810; +t1211 = t437 and t815; +t1212 = t2 and t818; +t1213 = t3 and t824; +t1214 = t5 and t829; +t1215 = t971 and t832; +t1216 = t36 and t835; +t1217 = t1215 or t1216; +t1218 = t1214 or t1217; +t1219 = t1213 or t1218; +t1220 = t1212 or t1219; +t1221 = t1211 or t1220; +t1222 = t1210 or t1221; +t1223 = t956 and t844; +t1224 = t1222 nor t1223; +t1225 = t1224 and t155; +t1226 = t325 and t810; +t1227 = t197 and t815; +t1228 = t286 and t818; +t1229 = t48 and t824; +t1230 = t39 and t829; +t850 = _317; +t1231 = t850 and t832; +t1232 = t43 and t835; +t1233 = t1231 or t1232; +t1234 = t1230 or t1233; +t1235 = t1229 or t1234; +t1236 = t1228 or t1235; +t1237 = t1227 or t1236; +t1238 = t1226 or t1237; +t1239 = t852 and t844; +t1240 = t1238 nor t1239; +t1241 = t1240 and t154; +t1242 = t1225 or t1241; +t1243 = t1242 and t872; +t874 = t21 and t151; +t875 = t874 nand t155; +t876 = not t875; +t1244 = t1172 and t876; +t1245 = t1243 or t1244; +t60 = not t18; +t61 = t47 nand t60; +t62 = not t47; +t63 = t18 nand t62; +t64 = t61 nand t63; +t65 = not t16; +t66 = t17 nand t65; +t67 = not t17; +t68 = t16 nand t67; +t69 = t66 nand t68; +t70 = not t69; +t71 = t64 nand t70; +t72 = not t64; +t73 = t69 nand t72; +t74 = t71 nand t73; +t884 = t22 and t12; +t885 = t884 nand t154; +t886 = not t885; +t1246 = t74 and t886; +t890 = t884 nand t155; +t891 = not t890; +t1247 = t1246 or t891; +t894 = t885 and t890; +t1248 = t110 and t894; +t1249 = t1247 or t1248; +t897 = t871 and t875; +t1250 = t1249 and t897; +t1251 = t1245 nor t1250; +t1252 = t1251 and t900; +t1253 = t1209 or t1252; +t1254 = t1209 nor t1252; +t1255 = not t1254; +t1256 = t1253 and t1255; +t724 = not t558; +t725 = t702 nand t724; +t726 = t558 nand t705; +t727 = t725 nand t726; +t728 = not t522; +t729 = t708 nand t728; +t730 = t522 nand t711; +t731 = t729 nand t730; +t732 = t727 and t731; +t1257 = not t545; +t1258 = t1149 nand t1257; +t1259 = t545 nand t1152; +t1260 = t1258 nand t1259; +t1261 = t732 and t1260; +t1262 = t695 and t1261; +t1263 = not t534; +t1264 = t1157 nand t1263; +t1265 = t534 nand t1160; +t1266 = t1264 nand t1265; +t1267 = t668 and t716; +t1268 = not t1267; +t734 = t664 and t716; +t1269 = t1260 nand t734; +t1270 = t1268 and t1269; +t1271 = t1260 and t731; +t735 = t672 and t716; +t1272 = t1271 nand t735; +t1273 = t1270 nand t1272; +t1274 = not t1273; +t1275 = t1266 nand t1274; +t1276 = not t1266; +t1277 = t1273 nand t1276; +t1278 = t1275 nand t1277; +t1279 = not t1278; +t1280 = t1262 nand t1279; +t1281 = not t1262; +t1282 = t1278 nand t1281; +t1283 = t1280 nand t1282; +t1284 = t1283 and t801; +t1285 = not t1283; +t1286 = t785 nor t786; +t1287 = t1285 nor t1286; +t1288 = t695 and t727; +t1289 = not t735; +t1290 = t731 nand t1289; +t1291 = not t731; +t1292 = t735 nand t1291; +t1293 = t1290 nand t1292; +t1294 = not t1293; +t1295 = t1288 nand t1294; +t1296 = not t1288; +t1297 = t1293 nand t1296; +t1298 = t1295 nand t1297; +t733 = t695 and t732; +t736 = t731 and t735; +t737 = t734 or t736; +t1299 = not t737; +t1300 = t1260 nand t1299; +t1301 = not t1260; +t1302 = t737 nand t1301; +t1303 = t1300 nand t1302; +t1304 = not t1303; +t1305 = t733 nand t1304; +t1306 = not t733; +t1307 = t1303 nand t1306; +t1308 = t1305 nand t1307; +t1309 = t1298 and t1308; +t1310 = t1309 and t1283; +t1311 = t1287 or t1310; +t1312 = t1311 and t742; +t1313 = t1284 or t1312; +t1314 = t1242 and t914; +t1315 = not t1263; +t1316 = not t1315; +t1317 = t1316 and t876; +t1318 = t1314 or t1317; +t920 = t21 and t12; +t921 = t920 nand t154; +t922 = not t921; +t1319 = t74 and t922; +t924 = t920 nand t155; +t925 = not t924; +t1320 = t1319 or t925; +t1321 = t110 and t921; +t1322 = t1320 or t1321; +t931 = t913 and t875; +t1323 = t1322 and t931; +t1324 = t1318 nor t1323; +t1325 = t1324 and t900; +t1326 = t1313 nor t1325; +t1327 = not t1326; +t1328 = t1256 biimp t1327; +t1329 = t1194 and t801; +t1330 = not t1194; +t1331 = not t1330; +t1332 = t1182 nand t1331; +t1333 = not t1182; +t1334 = t1330 nand t1333; +t1335 = t1332 nand t1334; +t1336 = not t1335; +t1337 = t1336 and t742; +t1338 = t1329 or t1337; +t1339 = t2 and t810; +t1340 = t3 and t815; +t1341 = t5 and t818; +t1342 = t36 and t824; +t1343 = t41 and t829; +t1344 = t394 and t832; +t1345 = t1344 or t1232; +t1346 = t1343 or t1345; +t1347 = t1342 or t1346; +t1348 = t1341 or t1347; +t1349 = t1340 or t1348; +t1350 = t1339 or t1349; +t1351 = t437 and t844; +t1352 = t1350 nor t1351; +t1353 = t1352 and t155; +t1354 = t850 and t810; +t1355 = t852 and t815; +t1356 = t325 and t818; +t1357 = t197 and t824; +t1358 = t286 and t829; +t865 = _326; +t1359 = t865 and t832; +t1360 = t48 and t835; +t1361 = t1359 or t1360; +t1362 = t1358 or t1361; +t1363 = t1357 or t1362; +t1364 = t1356 or t1363; +t1365 = t1355 or t1364; +t1366 = t1354 or t1365; +t848 = _322; +t1367 = t848 and t844; +t1368 = t1366 nor t1367; +t1369 = t1368 and t154; +t1370 = t1353 or t1369; +t1371 = t1370 and t872; +t1372 = t1187 and t876; +t1373 = t1371 or t1372; +t75 = not t27; +t76 = t35 nand t75; +t77 = not t35; +t78 = t27 nand t77; +t79 = t76 nand t78; +t80 = not t29; +t81 = t31 nand t80; +t82 = not t31; +t83 = t29 nand t82; +t84 = t81 nand t83; +t85 = not t84; +t86 = t79 nand t85; +t87 = not t79; +t88 = t84 nand t87; +t89 = t86 nand t88; +t90 = not t89; +t879 = not t187; +t880 = not t879; +t1374 = t90 and t880; +t102 = not t48; +t765 = t227 and t103; +t766 = t102 and t765; +t1375 = t5 nand t36; +t1376 = t766 and t1375; +t1377 = t127 and t1376; +t1378 = t1377 and t3; +t1379 = t1378 and t879; +t1380 = t1374 nor t1379; +t1381 = t1380 and t886; +t1382 = t102 nand t765; +t1383 = t1382 and t891; +t1384 = t1381 or t1383; +t1385 = t103 and t894; +t1386 = t1384 or t1385; +t1387 = t1386 and t897; +t1388 = t1373 nor t1387; +t1389 = t1388 and t900; +t1390 = t1338 or t1389; +t1391 = t1338 nor t1389; +t1392 = not t1391; +t1393 = t1390 and t1392; +t1394 = t1298 and t801; +t1395 = not t1298; +t1396 = not t1395; +t1397 = t1286 nand t1396; +t1398 = not t1286; +t1399 = t1395 nand t1398; +t1400 = t1397 nand t1399; +t1401 = not t1400; +t1402 = t1401 and t742; +t1403 = t1394 or t1402; +t1404 = t1370 and t914; +t1405 = not t728; +t1406 = not t1405; +t1407 = t1406 and t876; +t1408 = t1404 or t1407; +t1409 = t1380 and t922; +t1410 = t1382 and t925; +t1411 = t1409 or t1410; +t928 = t921 and t924; +t1412 = t103 and t928; +t1413 = t1411 or t1412; +t1414 = t1413 and t931; +t1415 = t1408 nor t1414; +t1416 = t1415 and t900; +t1417 = t1403 nor t1416; +t1418 = not t1417; +t1419 = t1393 biimp t1418; +t1420 = t1203 and t801; +t1421 = t1194 and t1182; +t1422 = not t1203; +t1423 = t1421 nand t1422; +t1424 = not t1421; +t1425 = t1203 nand t1424; +t1426 = t1423 nand t1425; +t1427 = t1426 and t742; +t1428 = t1420 or t1427; +t1429 = t437 and t810; +t1430 = t2 and t815; +t1431 = t3 and t818; +t1432 = t5 and t824; +t1433 = t36 and t829; +t1434 = t956 and t832; +t1435 = t1434 or t980; +t1436 = t1433 or t1435; +t1437 = t1432 or t1436; +t1438 = t1431 or t1437; +t1439 = t1430 or t1438; +t1440 = t1429 or t1439; +t1441 = t394 and t844; +t1442 = t1440 nor t1441; +t1443 = t1442 and t155; +t1444 = t852 and t810; +t1445 = t325 and t815; +t1446 = t197 and t818; +t1447 = t286 and t824; +t1448 = t48 and t829; +t1449 = t848 and t832; +t836 = t39 and t835; +t1450 = t1449 or t836; +t1451 = t1448 or t1450; +t1452 = t1447 or t1451; +t1453 = t1446 or t1452; +t1454 = t1445 or t1453; +t1455 = t1444 or t1454; +t1456 = t850 and t844; +t1457 = t1455 nor t1456; +t1458 = t1457 and t154; +t1459 = t1443 or t1458; +t1460 = t1459 and t872; +t1461 = t1196 and t876; +t1462 = t1460 or t1461; +t104 = not t103; +t105 = t102 nand t104; +t106 = not t102; +t107 = t103 nand t106; +t108 = t105 nand t107; +t111 = not t110; +t112 = t109 nand t111; +t113 = not t109; +t114 = t110 nand t113; +t115 = t112 nand t114; +t116 = not t115; +t117 = t108 nand t116; +t118 = not t108; +t119 = t115 nand t118; +t120 = t117 nand t119; +t1463 = t120 and t886; +t1464 = t1463 or t891; +t1465 = t109 and t894; +t1466 = t1464 or t1465; +t1467 = t1466 and t897; +t1468 = t1462 nor t1467; +t1469 = t1468 and t900; +t1470 = t1428 or t1469; +t1471 = t1428 nor t1469; +t1472 = not t1471; +t1473 = t1470 and t1472; +t1474 = t1308 and t801; +t1475 = t1298 and t1286; +t1476 = not t1308; +t1477 = t1475 nand t1476; +t1478 = not t1475; +t1479 = t1308 nand t1478; +t1480 = t1477 nand t1479; +t1481 = t1480 and t742; +t1482 = t1474 or t1481; +t1483 = t1459 and t914; +t1484 = not t1257; +t1485 = not t1484; +t1486 = t1485 and t876; +t1487 = t1483 or t1486; +t1488 = t120 and t922; +t1489 = t1488 or t925; +t1490 = t109 and t921; +t1491 = t1489 or t1490; +t1492 = t1491 and t931; +t1493 = t1487 nor t1492; +t1494 = t1493 and t900; +t1495 = t1482 nor t1494; +t1496 = not t1495; +t1497 = t1473 biimp t1496; +t1498 = t757 and t943; +t1499 = t1498 and t1051; +t1500 = t695 and t1499; +t1501 = not t1076; +t1502 = t1051 nand t1071; +t1503 = t1501 and t1502; +t1504 = t1051 and t943; +t1505 = t1504 nand t759; +t1506 = t1503 nand t1505; +t1507 = not t1506; +t1508 = t1057 nand t1507; +t1509 = not t1057; +t1510 = t1506 nand t1509; +t1511 = t1508 nand t1510; +t1512 = not t1511; +t1513 = t1500 nand t1512; +t1514 = not t1500; +t1515 = t1511 nand t1514; +t1516 = t1513 nand t1515; +t1517 = t1516 and t801; +t1518 = t695 and t1498; +t1519 = t759 and t943; +t1520 = t1071 or t1519; +t1521 = not t1520; +t1522 = t1051 nand t1521; +t1523 = not t1051; +t1524 = t1520 nand t1523; +t1525 = t1522 nand t1524; +t1526 = not t1525; +t1527 = t1518 nand t1526; +t1528 = not t1518; +t1529 = t1525 nand t1528; +t1530 = t1527 nand t1529; +t1531 = t695 and t1061; +t1532 = t1531 and t1085; +t1533 = t1532 nor t1069; +t1534 = t1530 and t1533; +t1535 = not t1516; +t1536 = t1534 nand t1535; +t1537 = not t1534; +t1538 = t1516 nand t1537; +t1539 = t1536 nand t1538; +t1540 = t1539 and t742; +t1541 = t1517 or t1540; +t1542 = t962 and t810; +t1543 = t971 and t815; +t1544 = t956 and t818; +t1545 = t394 and t824; +t1546 = t437 and t829; +t1547 = _125; +t1548 = t1547 and t832; +t1549 = t2 and t835; +t1550 = t1548 or t1549; +t1551 = t1546 or t1550; +t1552 = t1545 or t1551; +t1553 = t1544 or t1552; +t1554 = t1543 or t1553; +t1555 = t1542 or t1554; +t1556 = _128; +t1557 = t1556 and t844; +t1558 = t1555 nor t1557; +t1559 = t1558 and t155; +t1560 = t48 and t810; +t1561 = t39 and t815; +t1562 = t43 and t818; +t825 = t41 and t824; +t1563 = t197 and t832; +t1564 = t1563 or t964; +t1565 = t1433 or t1564; +t1566 = t825 or t1565; +t1567 = t1562 or t1566; +t1568 = t1561 or t1567; +t1569 = t1560 or t1568; +t1570 = t286 and t844; +t1571 = t1569 nor t1570; +t1572 = t1571 and t154; +t1573 = t1559 or t1572; +t1574 = t1573 and t872; +t1575 = t1509 and t993; +t1576 = t1574 or t1575; +t1577 = t4 and t996; +t1578 = t1576 nor t1577; +t1579 = t1578 and t900; +t1580 = t1541 or t1579; +t1581 = t784 and t1009; +t1582 = t1581 and t1104; +t1583 = t695 and t1582; +t1584 = not t1128; +t1585 = t1104 nand t1124; +t1586 = t1584 and t1585; +t1587 = t1104 and t1009; +t1588 = t1587 nand t786; +t1589 = t1586 nand t1588; +t1590 = not t1589; +t1591 = t1110 nand t1590; +t1592 = not t1110; +t1593 = t1589 nand t1592; +t1594 = t1591 nand t1593; +t1595 = not t1594; +t1596 = t1583 nand t1595; +t1597 = not t1583; +t1598 = t1594 nand t1597; +t1599 = t1596 nand t1598; +t1600 = t1599 and t801; +t1601 = t695 and t1581; +t1602 = t786 and t1009; +t1603 = t1124 or t1602; +t1604 = not t1603; +t1605 = t1104 nand t1604; +t1606 = not t1104; +t1607 = t1603 nand t1606; +t1608 = t1605 nand t1607; +t1609 = not t1608; +t1610 = t1601 nand t1609; +t1611 = not t1601; +t1612 = t1608 nand t1611; +t1613 = t1610 nand t1612; +t1614 = t695 and t1114; +t1615 = t1614 nor t1122; +t1616 = t1613 and t1615; +t1617 = not t1599; +t1618 = t1616 nand t1617; +t1619 = not t1616; +t1620 = t1599 nand t1619; +t1621 = t1618 nand t1620; +t1622 = t1621 and t742; +t1623 = t1600 or t1622; +t1624 = t1573 and t914; +t1625 = not t1106; +t1626 = not t1625; +t1627 = t1626 and t993; +t1628 = t1624 or t1627; +t1629 = t4 and t1028; +t1630 = t1628 nor t1629; +t1631 = t1630 and t900; +t1632 = t1623 or t1631; +t1633 = t1580 biimp t1632; +t1634 = t695 and t1060; +t1635 = t699 and t402; +t1636 = not t429; +t1637 = t1635 nand t1636; +t1638 = not t1635; +t1639 = t429 nand t1638; +t1640 = t1637 nand t1639; +t1641 = t1640 nand t1083; +t1642 = not t1640; +t1643 = t1082 nand t1642; +t1644 = t1641 nand t1643; +t1645 = not t1644; +t1646 = t1634 nand t1645; +t1647 = not t1634; +t1648 = t1644 nand t1647; +t1649 = t1646 nand t1648; +t1650 = t1649 and t801; +t1651 = not t1649; +t1652 = t1651 nor t1533; +t1653 = t1530 and t1516; +t1654 = t1649 and t1653; +t1655 = t1654 and t1533; +t1656 = t1652 or t1655; +t1657 = t1656 and t742; +t1658 = t1650 or t1657; +t1659 = t1556 and t810; +t1660 = t962 and t815; +t1661 = t971 and t818; +t1662 = t956 and t824; +t1663 = t394 and t829; +t1664 = _124; +t1665 = t1664 and t832; +t1666 = t437 and t835; +t1667 = t1665 or t1666; +t1668 = t1663 or t1667; +t1669 = t1662 or t1668; +t1670 = t1661 or t1669; +t1671 = t1660 or t1670; +t1672 = t1659 or t1671; +t1673 = t1547 and t844; +t1674 = t1672 nor t1673; +t1675 = t155 nand t189; +t1676 = not t1675; +t1677 = t1674 and t1676; +t1678 = t39 and t810; +t1679 = t43 and t815; +t1680 = t41 and t818; +t1681 = t286 and t832; +t1682 = t3 and t835; +t1683 = t1681 or t1682; +t1684 = t1214 or t1683; +t1685 = t1342 or t1684; +t1686 = t1680 or t1685; +t1687 = t1679 or t1686; +t1688 = t1678 or t1687; +t1689 = t48 and t844; +t1690 = t1688 nor t1689; +t1691 = t154 nand t189; +t1692 = not t1691; +t1693 = t1690 and t1692; +t1694 = t1677 or t1693; +t1695 = t1675 and t1691; +t1696 = t127 and t1695; +t1697 = t1694 or t1696; +t1698 = t1697 and t872; +t1699 = t1642 and t993; +t1700 = t1698 or t1699; +t1701 = t127 and t996; +t1702 = t1700 nor t1701; +t1703 = t1702 and t900; +t1704 = t1658 or t1703; +t1705 = t695 and t1113; +t1706 = t699 and t579; +t1707 = not t594; +t1708 = t1706 nand t1707; +t1709 = not t1706; +t1710 = t594 nand t1709; +t1711 = t1708 nand t1710; +t1712 = t1711 nand t1135; +t1713 = not t1711; +t1714 = t1134 nand t1713; +t1715 = t1712 nand t1714; +t1716 = not t1715; +t1717 = t1705 nand t1716; +t1718 = not t1705; +t1719 = t1715 nand t1718; +t1720 = t1717 nand t1719; +t1721 = t1720 and t801; +t1722 = not t1720; +t1723 = t1722 nor t1615; +t1724 = t1613 and t1599; +t1725 = t1724 and t1720; +t1726 = t1723 or t1725; +t1727 = t1726 and t742; +t1728 = t1721 or t1727; +t1729 = t1697 and t914; +t1730 = not t1707; +t1731 = not t1730; +t1732 = t1731 and t993; +t1733 = t1729 or t1732; +t1734 = t127 and t1028; +t1735 = t1733 nor t1734; +t1736 = t1735 and t900; +t1737 = t1728 or t1736; +t1738 = t1704 biimp t1737; +t1739 = t1530 and t801; +t1740 = not t1530; +t1741 = not t1740; +t1742 = t1533 nand t1741; +t1743 = not t1533; +t1744 = t1740 nand t1743; +t1745 = t1742 nand t1744; +t1746 = not t1745; +t1747 = t1746 and t742; +t1748 = t1739 or t1747; +t1749 = t971 and t810; +t1750 = t956 and t815; +t1751 = t394 and t818; +t1752 = t437 and t824; +t1753 = t2 and t829; +t1754 = t1556 and t832; +t1755 = t1754 or t1682; +t1756 = t1753 or t1755; +t1757 = t1752 or t1756; +t1758 = t1751 or t1757; +t1759 = t1750 or t1758; +t1760 = t1749 or t1759; +t1761 = t962 and t844; +t1762 = t1760 nor t1761; +t1763 = t1762 and t155; +t1764 = t286 and t810; +t1765 = t48 and t815; +t1766 = t39 and t818; +t1767 = t43 and t824; +t1768 = t325 and t832; +t1769 = t1768 or t1216; +t1770 = t1343 or t1769; +t1771 = t1767 or t1770; +t1772 = t1766 or t1771; +t1773 = t1765 or t1772; +t1774 = t1764 or t1773; +t1775 = t197 and t844; +t1776 = t1774 nor t1775; +t1777 = t1776 and t154; +t1778 = t1763 or t1777; +t1779 = t1778 and t872; +t1780 = t1523 and t993; +t1781 = t1779 or t1780; +t1782 = t6 and t996; +t1783 = t1781 nor t1782; +t1784 = t1783 and t900; +t1785 = t1748 or t1784; +t1786 = t1748 nor t1784; +t1787 = not t1786; +t1788 = t1785 and t1787; +t1789 = t1613 and t801; +t1790 = not t1613; +t1791 = not t1790; +t1792 = t1615 nand t1791; +t1793 = not t1615; +t1794 = t1790 nand t1793; +t1795 = t1792 nand t1794; +t1796 = not t1795; +t1797 = t1796 and t742; +t1798 = t1789 or t1797; +t1799 = t1778 and t914; +t1800 = not t1100; +t1801 = not t1800; +t1802 = t1801 and t993; +t1803 = t1799 or t1802; +t1804 = t6 and t1028; +t1805 = t1803 nor t1804; +t1806 = t1805 and t900; +t1807 = t1798 nor t1806; +t1808 = not t1807; +t1809 = t1788 biimp t1808; +t793 = not t695; +t794 = t707 nand t793; +t795 = not t707; +t796 = t695 nand t795; +t797 = t794 nand t796; +t802 = t797 and t801; +t803 = t797 and t742; +t804 = t802 or t803; +t811 = t3 and t810; +t816 = t5 and t815; +t819 = t36 and t818; +t833 = t437 and t832; +t837 = t833 or t836; +t838 = t830 or t837; +t839 = t825 or t838; +t840 = t819 or t839; +t841 = t816 or t840; +t842 = t811 or t841; +t845 = t2 and t844; +t846 = t842 nor t845; +t847 = t846 and t155; +t849 = t848 and t810; +t851 = t850 and t815; +t853 = t852 and t818; +t854 = t325 and t824; +t855 = t197 and t829; +t856 = _329; +t857 = t856 and t832; +t858 = t286 and t835; +t859 = t857 or t858; +t860 = t855 or t859; +t861 = t854 or t860; +t862 = t853 or t861; +t863 = t851 or t862; +t864 = t849 or t863; +t866 = t865 and t844; +t867 = t864 nor t866; +t868 = t867 and t154; +t869 = t847 or t868; +t873 = t869 and t872; +t877 = t795 and t876; +t878 = t873 or t877; +t122 = not t6; +t123 = t121 nand t122; +t124 = not t121; +t125 = t6 nand t124; +t126 = t123 nand t125; +t128 = t4 nand t127; +t129 = not t4; +t130 = t2 nand t129; +t131 = t128 nand t130; +t132 = not t131; +t133 = t126 nand t132; +t134 = not t126; +t135 = t131 nand t134; +t136 = t133 nand t135; +t881 = t136 and t880; +t7 = t4 nand t6; +t8 = t2 and t7; +t882 = t8 and t879; +t883 = t881 nor t882; +t887 = t883 and t886; +t888 = t109 nand t103; +t889 = t41 nand t888; +t892 = t889 and t891; +t893 = t887 or t892; +t895 = t102 and t894; +t896 = t893 or t895; +t898 = t896 and t897; +t899 = t878 nor t898; +t901 = t899 and t900; +t903 = t804 nor t901; +t1810 = t903 and t1391; +t1811 = t1471 and t1810; +t1812 = t1811 and t1254; +t1813 = t1541 nor t1579; +t1814 = t1001 and t1786; +t1815 = t1813 and t1814; +t1816 = t1658 nor t1703; +t1817 = t1815 and t1816; +t1818 = t1812 and t1817; +t1819 = not t1818; +t906 = t727 nand t793; +t907 = not t727; +t908 = t695 nand t907; +t909 = t906 nand t908; +t910 = t909 and t801; +t911 = t909 and t742; +t912 = t910 or t911; +t915 = t869 and t914; +t916 = not t724; +t917 = not t916; +t918 = t917 and t876; +t919 = t915 or t918; +t923 = t883 and t922; +t926 = t889 and t925; +t927 = t923 or t926; +t929 = t102 and t928; +t930 = t927 or t929; +t932 = t930 and t931; +t933 = t919 nor t932; +t934 = t933 and t900; +t935 = t912 nor t934; +t1820 = t935 and t1417; +t1821 = t1495 and t1820; +t1822 = t1821 and t1326; +t1823 = t1623 nor t1631; +t1824 = t1032 and t1807; +t1825 = t1823 and t1824; +t1826 = t1728 nor t1736; +t1827 = t1825 and t1826; +t1828 = t1822 and t1827; +t1829 = not t1828; +t1830 = t1819 biimp t1829; +t1831 = t1813 and t1816; +t1832 = not t698; +t1833 = t1832 nor t700; +t1834 = t1831 and t1833; +t1835 = t1834 nor t1818; +t1836 = t698 and t1835; +t1837 = not t1836; +t1838 = t1823 and t1826; +t1839 = t1838 and t1833; +t1840 = t1839 nor t1828; +t1841 = t698 and t1840; +t1842 = not t1841; +t1843 = t1837 biimp t1842; +t15 = t8 and t14; +t19 = t17 or t18; +t20 = t16 and t19; +t23 = t22 nand t12; +t24 = not t23; +t25 = t20 and t24; +t26 = t15 or t25; +t28 = t27 nand t5; +t30 = t29 nand t2; +t32 = t31 nand t3; +t33 = t30 and t32; +t34 = t28 and t33; +t37 = t35 nand t36; +t38 = t34 and t37; +t40 = t18 nand t39; +t42 = t16 nand t41; +t44 = t17 nand t43; +t45 = t42 and t44; +t46 = t40 and t45; +t49 = t47 nand t48; +t50 = t46 and t49; +t51 = t38 nand t50; +t52 = t13 and t23; +t53 = t51 and t52; +t54 = t26 or t53; +t55 = t26 nor t53; +t56 = not t55; +t57 = t54 nand t56; +t58 = not t56; +t59 = t57 biimp t58; +t1844 = not t1470; +t1845 = t1253 nand t1844; +t1846 = not t1253; +t1847 = t1470 nand t1846; +t1848 = t1845 nand t1847; +t902 = t804 or t901; +t1849 = not t902; +t1850 = t1390 nand t1849; +t1851 = not t1390; +t1852 = t902 nand t1851; +t1853 = t1850 nand t1852; +t1854 = not t1853; +t1855 = t1848 nand t1854; +t1856 = not t1848; +t1857 = t1853 nand t1856; +t1858 = t1855 nand t1857; +t1859 = not t1858; +t1860 = not t1000; +t1861 = t1785 nand t1860; +t1862 = not t1785; +t1863 = t1000 nand t1862; +t1864 = t1861 nand t1863; +t1865 = not t1864; +t1866 = t1832 or t700; +t1867 = t1580 and t1866; +t1868 = t1866 and t1704; +t1869 = not t1868; +t1870 = t1867 nand t1869; +t1871 = not t1867; +t1872 = t1868 nand t1871; +t1873 = t1870 nand t1872; +t1874 = t1865 and t1873; +t1875 = _2897; +t1876 = t1833 nand t1875; +t1877 = t1874 and t1876; +t1878 = t1864 and t1873; +t1879 = t1833 and t1875; +t1880 = t1878 and t1879; +t1881 = not t1873; +t1882 = t1864 and t1881; +t1883 = t1882 and t1876; +t1884 = t1880 or t1883; +t1885 = t1877 or t1884; +t1886 = t1865 and t1881; +t1887 = t1886 and t1879; +t1888 = t1885 or t1887; +t1889 = not t1888; +t1890 = t1859 nand t1889; +t1891 = not t1859; +t1892 = t1888 nand t1891; +t1893 = t1890 nand t1892; +t1894 = t1798 or t1806; +t1895 = t1022 or t1031; +t1896 = not t1895; +t1897 = t1894 nand t1896; +t1898 = not t1894; +t1899 = t1895 nand t1898; +t1900 = t1897 nand t1899; +t1901 = t1632 and t1866; +t1902 = t1866 and t1737; +t1903 = not t1902; +t1904 = t1901 nand t1903; +t1905 = not t1901; +t1906 = t1902 nand t1905; +t1907 = t1904 nand t1906; +t1908 = not t1907; +t1909 = t1900 and t1908; +t1910 = t1909 and t1876; +t1911 = not t1900; +t1912 = t1911 and t1907; +t1913 = t1910 or t1912; +t1914 = t1911 and t1879; +t1915 = t1913 or t1914; +t1916 = not t1915; +t1917 = not t1916; +t1918 = t1313 or t1325; +t1919 = t1482 or t1494; +t1920 = not t1919; +t1921 = t1918 nand t1920; +t1922 = not t1918; +t1923 = t1919 nand t1922; +t1924 = t1921 nand t1923; +t1925 = t1403 or t1416; +t1926 = t912 or t934; +t1927 = not t1926; +t1928 = t1925 nand t1927; +t1929 = not t1925; +t1930 = t1926 nand t1929; +t1931 = t1928 nand t1930; +t1932 = not t1931; +t1933 = t1924 nand t1932; +t1934 = not t1924; +t1935 = t1931 nand t1934; +t1936 = t1933 nand t1935; +t1937 = not t1936; +t1938 = not t1937; +t1939 = not t1938; +t1940 = t1917 nand t1939; +t1941 = t1938 nand t1916; +t1942 = t1940 and t1941; +t1943 = t1893 biimp t1942; +t1944 = not t1580; +t1945 = t1704 nand t1944; +t1946 = not t1704; +t1947 = t1580 nand t1946; +t1948 = t1945 nand t1947; +t1949 = t1948 nand t1865; +t1950 = not t1948; +t1951 = t1864 nand t1950; +t1952 = t1949 nand t1951; +t1953 = t1952 nand t1859; +t1954 = not t1952; +t1955 = t1858 nand t1954; +t1956 = t1953 nand t1955; +t1957 = not t1956; +t1958 = not t1632; +t1959 = t1737 nand t1958; +t1960 = not t1737; +t1961 = t1632 nand t1960; +t1962 = t1959 nand t1961; +t1963 = t1962 nand t1911; +t1964 = not t1962; +t1965 = t1900 nand t1964; +t1966 = t1963 nand t1965; +t1967 = not t1966; +t1968 = not t1967; +t1969 = t1938 nand t1968; +t1970 = t1967 nand t1937; +t1971 = t1969 nand t1970; +t1972 = t1957 biimp t1971; +t91 = t74 nand t90; +t92 = not t74; +t93 = t89 nand t92; +t94 = t91 nand t93; +t95 = not t94; +t96 = not t90; +t97 = not t92; +t98 = t96 nand t97; +t99 = t92 nand t90; +t100 = t98 nand t99; +t101 = t95 biimp t100; +t137 = not t136; +t138 = t120 nand t137; +t139 = not t120; +t140 = t136 nand t139; +t141 = t138 nand t140; +t142 = not t141; +t143 = not t142; +t144 = not t140; +t145 = not t144; +t146 = not t138; +t147 = not t146; +t148 = t145 nand t147; +t149 = t143 biimp t148; +t510 = t347 and t509; +t632 = t559 and t631; +t633 = t510 biimp t632; +t647 = t509 nand t646; +t661 = not t660; +t662 = t647 and t661; +t663 = not t662; +t677 = t631 nand t676; +t691 = not t690; +t692 = t677 and t691; +t693 = not t692; +t694 = t663 biimp t693; +t722 = t715 and t721; +t723 = t722 or t720; +t738 = t733 or t737; +t739 = t723 biimp t738; +t743 = t8 and t742; +t762 = t761 or t759; +t763 = t762 and t186; +t764 = t743 or t763; +t767 = t741 and t9; +t768 = t766 and t767; +t769 = t764 or t768; +t770 = t764 nor t768; +t771 = not t770; +t772 = t769 and t771; +t787 = t785 or t786; +t788 = t787 and t186; +t789 = t743 or t788; +t790 = t789 nor t768; +t791 = not t790; +t792 = t772 biimp t791; +t904 = not t903; +t905 = t902 and t904; +t936 = not t935; +t937 = t905 biimp t936; + +tautology t1034; +tautology t1148; +tautology t1328; +tautology t1419; +tautology t1497; +tautology t1633; +tautology t1738; +tautology t1809; +tautology t1830; +tautology t1843; +tautology t59; +tautology t1943; +tautology t1972; +tautology t101; +tautology t149; +tautology t633; +tautology t694; +tautology t739; +tautology t792; +tautology t937; diff --git a/buddy/examples/calculator/examples/c432.cal b/buddy/examples/calculator/examples/c432.cal new file mode 100644 index 000000000..60db3370e --- /dev/null +++ b/buddy/examples/calculator/examples/c432.cal @@ -0,0 +1,260 @@ +/* BDD Calculator data file */ + +initial 10000 10000; + +inputs +_1gat _4gat _8gat _11gat _14gat _17gat _21gat _24gat _27gat _30gat +_34gat _37gat _40gat _43gat _47gat _50gat _53gat _56gat _60gat _63gat +_66gat _69gat _73gat _76gat _79gat _82gat _86gat _89gat _92gat _95gat +_99gat _102gat _105gat _108gat _112gat _115gat ; + +actions +autoreorder 0 win2ite; + +t2 = _8gat; +t3 = _89gat; +t4 = not t3; +t5 = _95gat; +t6 = t4 nand t5; +t7 = _76gat; +t8 = not t7; +t9 = _82gat; +t10 = t8 nand t9; +t11 = _63gat; +t12 = not t11; +t13 = _69gat; +t14 = t12 nand t13; +t15 = _50gat; +t16 = not t15; +t17 = _56gat; +t18 = t16 nand t17; +t19 = _37gat; +t20 = not t19; +t21 = _43gat; +t22 = t20 nand t21; +t23 = _24gat; +t24 = not t23; +t25 = _30gat; +t26 = t24 nand t25; +t27 = _1gat; +t28 = not t27; +t29 = _4gat; +t30 = t28 nand t29; +t31 = _11gat; +t32 = not t31; +t33 = _17gat; +t34 = t32 nand t33; +t35 = t30 and t34; +t36 = t26 and t35; +t37 = t22 and t36; +t38 = t18 and t37; +t39 = t14 and t38; +t40 = t10 and t39; +t41 = t6 and t40; +t42 = _102gat; +t43 = not t42; +t44 = _108gat; +t45 = t43 nand t44; +t46 = t41 and t45; +t47 = not t46; +t48 = t47 xor t6; +t49 = _99gat; +t50 = not t5; +t51 = t49 nor t50; +t52 = t48 nand t51; +t53 = t47 xor t10; +t54 = _86gat; +t55 = not t9; +t56 = t54 nor t55; +t57 = t53 nand t56; +t58 = t47 xor t14; +t59 = _73gat; +t60 = not t13; +t61 = t59 nor t60; +t62 = t58 nand t61; +t63 = t47 xor t18; +t64 = _60gat; +t65 = not t17; +t66 = t64 nor t65; +t67 = t63 nand t66; +t68 = t47 xor t22; +t69 = _47gat; +t70 = not t21; +t71 = t69 nor t70; +t72 = t68 nand t71; +t73 = t47 xor t26; +t74 = _34gat; +t75 = not t25; +t76 = t74 nor t75; +t77 = t73 nand t76; +t78 = t47 xor t30; +t79 = not t29; +t80 = t2 nor t79; +t81 = t78 nand t80; +t82 = t47 xor t34; +t83 = _21gat; +t84 = not t33; +t85 = t83 nor t84; +t86 = t82 nand t85; +t87 = t81 and t86; +t88 = t77 and t87; +t89 = t72 and t88; +t90 = t67 and t89; +t91 = t62 and t90; +t92 = t57 and t91; +t93 = t52 and t92; +t94 = t47 xor t45; +t95 = _112gat; +t96 = not t44; +t97 = t95 nor t96; +t98 = t94 nand t97; +t99 = t93 and t98; +t100 = not t99; +t101 = t2 nand t100; +t102 = t27 nand t47; +t103 = t29 and t102; +t104 = t101 and t103; +t105 = _14gat; +t106 = t100 xor t52; +t107 = _105gat; +t108 = t107 nor t50; +t109 = t48 nand t108; +t110 = not t109; +t111 = t106 nand t110; +t112 = t100 xor t57; +t113 = _92gat; +t114 = t113 nor t55; +t115 = t53 nand t114; +t116 = not t115; +t117 = t112 nand t116; +t118 = t100 xor t62; +t119 = _79gat; +t120 = t119 nor t60; +t121 = t58 nand t120; +t122 = not t121; +t123 = t118 nand t122; +t124 = t100 xor t67; +t125 = _66gat; +t126 = t125 nor t65; +t127 = t63 nand t126; +t128 = not t127; +t129 = t124 nand t128; +t130 = t100 xor t72; +t131 = _53gat; +t132 = t131 nor t70; +t133 = t68 nand t132; +t134 = not t133; +t135 = t130 nand t134; +t136 = t100 xor t77; +t137 = _40gat; +t138 = t137 nor t75; +t139 = t73 nand t138; +t140 = not t139; +t141 = t136 nand t140; +t142 = t100 xor t81; +t143 = t105 nor t79; +t144 = t78 nand t143; +t145 = not t144; +t146 = t142 nand t145; +t147 = t100 xor t86; +t148 = _27gat; +t149 = t148 nor t84; +t150 = t82 nand t149; +t151 = not t150; +t152 = t147 nand t151; +t153 = t146 and t152; +t154 = t141 and t153; +t155 = t135 and t154; +t156 = t129 and t155; +t157 = t123 and t156; +t158 = t117 and t157; +t159 = t111 and t158; +t160 = t100 xor t98; +t161 = _115gat; +t162 = t161 nor t96; +t163 = t94 nand t162; +t164 = not t163; +t165 = t160 nand t164; +t166 = t159 and t165; +t167 = not t166; +t168 = t105 nand t167; +t169 = t104 nand t168; +t170 = not t169; +t171 = t167 nand t107; +t172 = t47 nand t3; +t173 = t100 nand t49; +t174 = t172 and t173; +t175 = t171 and t174; +t176 = t175 nand t5; +t177 = t167 nand t113; +t178 = t47 nand t7; +t179 = t100 nand t54; +t180 = t178 and t179; +t181 = t177 and t180; +t182 = t181 nand t9; +t183 = t167 nand t119; +t184 = t47 nand t11; +t185 = t100 nand t59; +t186 = t184 and t185; +t187 = t183 and t186; +t188 = t187 nand t13; +t189 = t167 nand t125; +t190 = t47 nand t15; +t191 = t100 nand t64; +t192 = t190 and t191; +t193 = t189 and t192; +t194 = t193 nand t17; +t195 = t167 nand t131; +t196 = t47 nand t19; +t197 = t100 nand t69; +t198 = t196 and t197; +t199 = t195 and t198; +t200 = t199 nand t21; +t201 = t167 nand t148; +t202 = t47 nand t31; +t203 = t100 nand t83; +t204 = t202 and t203; +t205 = t201 and t204; +t206 = t205 nand t33; +t207 = t167 nand t137; +t208 = t47 nand t23; +t209 = t100 nand t74; +t210 = t208 and t209; +t211 = t207 and t210; +t212 = t211 nand t25; +t213 = t206 and t212; +t214 = t200 and t213; +t215 = t194 and t214; +t216 = t188 and t215; +t217 = t182 and t216; +t218 = t176 and t217; +t219 = t167 nand t161; +t220 = t47 nand t42; +t221 = t100 nand t95; +t222 = t220 and t221; +t223 = t219 and t222; +t224 = t223 nand t44; +t225 = t218 and t224; +t226 = t170 nor t225; +t227 = t218 and t96; +t228 = t170 nor t227; +t229 = t226 biimp t228; +t230 = not t188; +t231 = t212 and t200; +t232 = t230 and t231; +t233 = t232 nand t194; +t234 = not t200; +t235 = t212 nand t234; +t236 = t206 and t235; +t237 = t233 and t236; +t238 = t182 and t231; +t239 = not t176; +t240 = t238 nand t239; +t241 = t237 nand t240; +t242 = t212 and t182; +t243 = t242 nand t239; +t244 = t237 nand t243; +t245 = t241 biimp t244; + +tautology t229; +tautology t245; diff --git a/buddy/examples/calculator/examples/c499.cal b/buddy/examples/calculator/examples/c499.cal new file mode 100644 index 000000000..7982182d3 --- /dev/null +++ b/buddy/examples/calculator/examples/c499.cal @@ -0,0 +1,409 @@ +/* BDD Calculator data file */ + +initial 10000 10000; + +inputs +id0 id1 id2 id3 id4 id5 id6 id7 id8 id9 +id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 +id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 +id30 id31 ic0 ic1 ic2 ic3 ic4 ic5 ic6 ic7 +r ; + +actions +autoreorder 0 sift; +t2 = id0; +t3 = id4; +t4 = t2 xor t3; +t5 = id8; +t6 = id12; +t7 = t5 xor t6; +t8 = t4 xor t7; +t9 = ic0; +t10 = r; +t11 = t9 and t10; +t12 = id16; +t13 = id17; +t14 = t12 xor t13; +t15 = id18; +t16 = id19; +t17 = t15 xor t16; +t18 = t14 xor t17; +t19 = id20; +t20 = id21; +t21 = t19 xor t20; +t22 = id22; +t23 = id23; +t24 = t22 xor t23; +t25 = t21 xor t24; +t26 = t18 xor t25; +t27 = t11 xor t26; +t28 = t8 xor t27; +t29 = t16 xor t23; +t30 = id27; +t31 = id31; +t32 = t30 xor t31; +t33 = t29 xor t32; +t34 = ic7; +t35 = t34 and t10; +t36 = id5; +t37 = t3 xor t36; +t38 = id6; +t39 = id7; +t40 = t38 xor t39; +t41 = t37 xor t40; +t42 = id13; +t43 = t6 xor t42; +t44 = id14; +t45 = id15; +t46 = t44 xor t45; +t47 = t43 xor t46; +t48 = t41 xor t47; +t49 = t35 xor t48; +t50 = t33 xor t49; +t51 = not t50; +t52 = t15 xor t22; +t53 = id26; +t54 = id30; +t55 = t53 xor t54; +t56 = t52 xor t55; +t57 = ic6; +t58 = t57 and t10; +t59 = id1; +t60 = t2 xor t59; +t61 = id2; +t62 = id3; +t63 = t61 xor t62; +t64 = t60 xor t63; +t65 = id9; +t66 = t5 xor t65; +t67 = id10; +t68 = id11; +t69 = t67 xor t68; +t70 = t66 xor t69; +t71 = t64 xor t70; +t72 = t58 xor t71; +t73 = t56 xor t72; +t74 = t12 xor t19; +t75 = id24; +t76 = id28; +t77 = t75 xor t76; +t78 = t74 xor t77; +t79 = ic4; +t80 = t79 and t10; +t81 = t64 xor t41; +t82 = t80 xor t81; +t83 = t78 xor t82; +t84 = t13 xor t20; +t85 = id25; +t86 = id29; +t87 = t85 xor t86; +t88 = t84 xor t87; +t89 = ic5; +t90 = t89 and t10; +t91 = t70 xor t47; +t92 = t90 xor t91; +t93 = t88 xor t92; +t94 = not t93; +t95 = t83 and t94; +t96 = t73 and t95; +t97 = t51 and t96; +t98 = t61 xor t38; +t99 = t67 xor t44; +t100 = t98 xor t99; +t101 = ic2; +t102 = t101 and t10; +t103 = t75 xor t85; +t104 = t53 xor t30; +t105 = t103 xor t104; +t106 = t18 xor t105; +t107 = t102 xor t106; +t108 = t100 xor t107; +t109 = not t108; +t110 = not t28; +t111 = t59 xor t36; +t112 = t65 xor t42; +t113 = t111 xor t112; +t114 = ic1; +t115 = t114 and t10; +t116 = t76 xor t86; +t117 = t54 xor t31; +t118 = t116 xor t117; +t119 = t105 xor t118; +t120 = t115 xor t119; +t121 = t113 xor t120; +t122 = t110 and t121; +t123 = t109 and t122; +t124 = t62 xor t39; +t125 = t68 xor t45; +t126 = t124 xor t125; +t127 = ic3; +t128 = t127 and t10; +t129 = t25 xor t118; +t130 = t128 xor t129; +t131 = t126 xor t130; +t132 = not t131; +t133 = t123 and t132; +t134 = not t121; +t135 = t110 and t134; +t136 = t109 and t135; +t137 = t136 and t131; +t138 = t108 and t135; +t139 = t138 and t132; +t140 = t137 or t139; +t141 = t133 or t140; +t142 = t28 and t134; +t143 = t109 and t142; +t144 = t143 and t132; +t145 = t141 or t144; +t146 = t97 and t145; +t147 = t28 and t146; +t148 = t2 xor t147; +t149 = t110 and t109; +t150 = t149 and t132; +t151 = t135 and t109; +t152 = t135 and t132; +t153 = t151 or t152; +t154 = t150 or t153; +t155 = t134 and t109; +t156 = t155 and t132; +t157 = t154 or t156; +t158 = t97 and t157; +t159 = t28 and t158; +t160 = t2 xor t159; +t161 = t148 biimp t160; +t162 = t121 and t146; +t163 = t59 xor t162; +t164 = t121 and t158; +t165 = t59 xor t164; +t166 = t163 biimp t165; +t202 = not t83; +t203 = t202 and t93; +t204 = t73 and t203; +t205 = t51 and t204; +t206 = t205 and t145; +t218 = t108 and t206; +t219 = t67 xor t218; +t209 = t205 and t157; +t220 = t108 and t209; +t221 = t67 xor t220; +t222 = t219 biimp t221; +t223 = t131 and t206; +t224 = t68 xor t223; +t225 = t131 and t209; +t226 = t68 xor t225; +t227 = t224 biimp t226; +t177 = not t73; +t228 = t177 and t203; +t229 = t50 and t228; +t230 = t229 and t145; +t231 = t28 and t230; +t232 = t6 xor t231; +t233 = t229 and t157; +t234 = t28 and t233; +t235 = t6 xor t234; +t236 = t232 biimp t235; +t237 = t121 and t230; +t238 = t42 xor t237; +t239 = t121 and t233; +t240 = t42 xor t239; +t241 = t238 biimp t240; +t242 = t108 and t230; +t243 = t44 xor t242; +t244 = t108 and t233; +t245 = t44 xor t244; +t246 = t243 biimp t245; +t247 = t131 and t230; +t248 = t45 xor t247; +t249 = t131 and t233; +t250 = t45 xor t249; +t251 = t248 biimp t250; +t252 = t108 and t142; +t253 = t132 and t252; +t254 = t228 and t51; +t255 = t202 and t94; +t256 = t177 and t255; +t257 = t256 and t50; +t258 = t73 and t255; +t259 = t258 and t51; +t260 = t257 or t259; +t261 = t254 or t260; +t178 = t177 and t95; +t262 = t178 and t51; +t263 = t261 or t262; +t264 = t253 and t263; +t265 = t83 and t264; +t266 = t12 xor t265; +t267 = t202 and t177; +t268 = t267 and t51; +t269 = t255 and t177; +t270 = t255 and t51; +t271 = t269 or t270; +t272 = t268 or t271; +t273 = t94 and t177; +t274 = t273 and t51; +t275 = t272 or t274; +t276 = t253 and t275; +t277 = t83 and t276; +t278 = t12 xor t277; +t279 = t266 biimp t278; +t280 = t93 and t264; +t281 = t13 xor t280; +t282 = t93 and t276; +t283 = t13 xor t282; +t284 = t281 biimp t283; +t285 = t73 and t264; +t286 = t15 xor t285; +t287 = t73 and t276; +t288 = t15 xor t287; +t289 = t286 biimp t288; +t290 = t50 and t264; +t291 = t16 xor t290; +t292 = t50 and t276; +t293 = t16 xor t292; +t294 = t291 biimp t293; +t167 = t108 and t146; +t168 = t61 xor t167; +t169 = t108 and t158; +t170 = t61 xor t169; +t171 = t168 biimp t170; +t295 = t131 and t143; +t296 = t295 and t263; +t297 = t83 and t296; +t298 = t19 xor t297; +t299 = t295 and t275; +t300 = t83 and t299; +t301 = t19 xor t300; +t302 = t298 biimp t301; +t303 = t93 and t296; +t304 = t20 xor t303; +t305 = t93 and t299; +t306 = t20 xor t305; +t307 = t304 biimp t306; +t308 = t73 and t296; +t309 = t22 xor t308; +t310 = t73 and t299; +t311 = t22 xor t310; +t312 = t309 biimp t311; +t313 = t50 and t296; +t314 = t23 xor t313; +t315 = t50 and t299; +t316 = t23 xor t315; +t317 = t314 biimp t316; +t318 = t108 and t122; +t319 = t132 and t318; +t320 = t319 and t263; +t321 = t83 and t320; +t322 = t75 xor t321; +t323 = t319 and t275; +t324 = t83 and t323; +t325 = t75 xor t324; +t326 = t322 biimp t325; +t327 = t93 and t320; +t328 = t85 xor t327; +t329 = t93 and t323; +t330 = t85 xor t329; +t331 = t328 biimp t330; +t332 = t73 and t320; +t333 = t53 xor t332; +t334 = t73 and t323; +t335 = t53 xor t334; +t336 = t333 biimp t335; +t337 = t50 and t320; +t338 = t30 xor t337; +t339 = t50 and t323; +t340 = t30 xor t339; +t341 = t338 biimp t340; +t342 = t131 and t123; +t343 = t342 and t263; +t344 = t83 and t343; +t345 = t76 xor t344; +t346 = t342 and t275; +t347 = t83 and t346; +t348 = t76 xor t347; +t349 = t345 biimp t348; +t350 = t93 and t343; +t351 = t86 xor t350; +t352 = t93 and t346; +t353 = t86 xor t352; +t354 = t351 biimp t353; +t172 = t131 and t146; +t173 = t62 xor t172; +t174 = t131 and t158; +t175 = t62 xor t174; +t176 = t173 biimp t175; +t355 = t73 and t343; +t356 = t54 xor t355; +t357 = t73 and t346; +t358 = t54 xor t357; +t359 = t356 biimp t358; +t360 = t50 and t343; +t361 = t31 xor t360; +t362 = t50 and t346; +t363 = t31 xor t362; +t364 = t361 biimp t363; +t179 = t50 and t178; +t180 = t179 and t145; +t181 = t28 and t180; +t182 = t3 xor t181; +t183 = t179 and t157; +t184 = t28 and t183; +t185 = t3 xor t184; +t186 = t182 biimp t185; +t187 = t121 and t180; +t188 = t36 xor t187; +t189 = t121 and t183; +t190 = t36 xor t189; +t191 = t188 biimp t190; +t192 = t108 and t180; +t193 = t38 xor t192; +t194 = t108 and t183; +t195 = t38 xor t194; +t196 = t193 biimp t195; +t197 = t131 and t180; +t198 = t39 xor t197; +t199 = t131 and t183; +t200 = t39 xor t199; +t201 = t198 biimp t200; +t207 = t28 and t206; +t208 = t5 xor t207; +t210 = t28 and t209; +t211 = t5 xor t210; +t212 = t208 biimp t211; +t213 = t121 and t206; +t214 = t65 xor t213; +t215 = t121 and t209; +t216 = t65 xor t215; +t217 = t214 biimp t216; + +tautology t161; +tautology t166; +tautology t222; +tautology t227; +tautology t236; +tautology t241; +tautology t246; +tautology t251; +tautology t279; +tautology t284; +tautology t289; +tautology t294; +tautology t171; +tautology t302; +tautology t307; +tautology t312; +tautology t317; +tautology t326; +tautology t331; +tautology t336; +tautology t341; +tautology t349; +tautology t354; +tautology t176; +tautology t359; +tautology t364; +tautology t186; +tautology t191; +tautology t196; +tautology t201; +tautology t212; +tautology t217; diff --git a/buddy/examples/calculator/examples/readme b/buddy/examples/calculator/examples/readme new file mode 100644 index 000000000..50a49a022 --- /dev/null +++ b/buddy/examples/calculator/examples/readme @@ -0,0 +1,3 @@ + The files here are from the ISCAS85 benchmark set. They have been + adjustet such that the comparison of two combinatorial circuits + are joined into one file. diff --git a/buddy/examples/calculator/hashtbl.cxx b/buddy/examples/calculator/hashtbl.cxx new file mode 100644 index 000000000..805646305 --- /dev/null +++ b/buddy/examples/calculator/hashtbl.cxx @@ -0,0 +1,174 @@ +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/examples/calculator/Attic/hashtbl.cxx,v 1.1 2003/05/05 10:57:55 aduret Exp $ + FILE: hashtbl.cc + DESCR: Compiler hash table + AUTH: Jorn Lind + DATE: (C) september 1998 +*************************************************************************/ +#include "hashtbl.h" + +/************************************************************************* +*************************************************************************/ + +/*======================================================================*/ + +hashTable::hashTable(void) +{ + table = NULL; + clear(); +} + + +hashTable::~hashTable(void) +{ + delete[] table; +} + + +void hashTable::add(hashData &d) +{ + if (freepos == -1) + reallocate_table(); + + unsigned int h = hashval(d.id); + int tmppos = table[freepos].next; + + table[freepos].data = d; + table[freepos].next = table[h].first; + table[h].first = freepos; + freepos = tmppos; +} + + +int hashTable::exists(const char *id) +{ + if (size == 0) + return 0; + + int p = table[hashval(id)].first; + + while (p != -1) + { + if (strcmp(id, table[p].data.id) == 0) + return 1; + p = table[p].next; + } + + return 0; +} + + +int hashTable::lookup(const char *id, hashData &d) const +{ + if (size == 0) + return -1; + + int p = table[hashval(id)].first; + + while (p != -1) + { + if (strcmp(id, table[p].data.id) == 0) + { + d = table[p].data; + return 0; + } + p = table[p].next; + } + + return -1; +} + + +int hashTable::remove(const char *id) +{ + if (size == 0) + return -1; + + int h = hashval(id); + int next = table[h].first; + int prev = -1; + + while (next != -1) + { + if (strcmp(id, table[next].data.id) == 0) + { + if (prev == -1) + table[h].first = table[next].next; + else + table[prev].next = table[next].next; + + table[next].next = freepos; + freepos = next; + + return 0; + } + + prev = next; + next = table[next].next; + } + + return -1; +} + + +void hashTable::clear(void) +{ + delete[] table; + freepos = -1; + size = 0; +} + + +void hashTable::reallocate_table(void) +{ + hashElement *newtable; + int oldsize = size; + int n; + + if (size > 0) + { + size *= 2; + newtable = new hashElement[size]; + for (int n=0 ; n + +class hashData +{ +public: + hashData(void) { id=NULL; type=0; def=NULL; } + hashData(const char *s, int t, void *d) : id(s) { type=t; def=d; } + const char *id; + int type; + void *def; +}; + + +class hashElement +{ +public: + hashData data; + int first; + int next; +}; + + +class hashTable +{ +public: + hashTable(void); + ~hashTable(void); + void add(hashData &); + int exists(const char *); + int lookup(const char *, hashData &) const; + int remove(const char *); + void clear(void); + +private: + void reallocate_table(void); + unsigned int hashval(const char *) const; + hashElement *table; + int size, freepos; +}; + + +#endif /* _HASHTBL_H */ + + +/* EOF */ diff --git a/buddy/examples/calculator/lexer.l b/buddy/examples/calculator/lexer.l new file mode 100644 index 000000000..7818adb25 --- /dev/null +++ b/buddy/examples/calculator/lexer.l @@ -0,0 +1,101 @@ +/************************************************************************* + FILE: lexer.l + DESCR: FLEX rules for BDD calculator + AUTH: Jorn Lind + DATE: (C) may 1999 +*************************************************************************/ +%{ +#include +#include +#include "parser.h" +#include "tokens.h" +%} + + +/************************************************************************* + Macros and sub-lexers +*************************************************************************/ + +DIGIT [0-9] +ID [a-zA-Z_][a-zA-Z0-9_]* +LINE [^\n] + +%x COMM + +%% + + /************************************************************************** + Tokens + **************************************************************************/ + + /* Keywords */ + +"initial" return T_initial; +"inputs" return T_inputs; +"actions" return T_actions; +"exist" return T_exist; +"forall" return T_forall; +"size" return T_size; +"dot" return T_dot; +"autoreorder" return T_autoreorder; +"reorder" return T_reorder; +"win2" return T_win2; +"win2ite" return T_win2ite; +"sift" return T_sift; +"siftite" return T_siftite; +"none" return T_none; +"cache" return T_cache; +"tautology" return T_tautology; +"true" return T_true; +"false" return T_false; +"print" return T_print; + + /* Symbols and operators */ + +"." return T_dot; +"(" return T_lpar; +")" return T_rpar; +";" return T_semi; +"=" return T_equal; +"<>" return T_biimp; +"=>" return T_imp; +"|" return T_or; +"^" return T_xor; +"&" return T_and; +"~" return T_not; +"biimp" return T_biimp; +"imp" return T_imp; +"or" return T_or; +"xor" return T_xor; +"and" return T_and; +"not" return T_not; +"nand" return T_nand; +"nor" return T_nor; + + /* Identifiers and constant values */ +{ID} { strncpy(yylval.id, yytext, MAXIDLEN); return T_id; } +{DIGIT}+ { yylval.ival = atol(yytext); return T_intval; } + + /* Strings */ +\"[^\"]*\" { yylval.str=sdup(yytext+1); + yylval.str[strlen(yylval.str)-1]=0; return T_str; } + + /* Whitespace */ +[\n] { linenum++; } +[\r\t\f ] /* ignore blanks */ + + +"//"{LINE}* /* Remove one line comments */ + + + /************************************************************************** + Remove multi line comments + **************************************************************************/ + +"/*" BEGIN COMM; +[^*\n]* /* ignore */ +"*"[^*/\n]* /* ignore */ +\n { linenum++; } +"*/" BEGIN INITIAL; + +. { yyerror("Unknown symbol"); } diff --git a/buddy/examples/calculator/makefile b/buddy/examples/calculator/makefile new file mode 100644 index 000000000..ccab052cc --- /dev/null +++ b/buddy/examples/calculator/makefile @@ -0,0 +1,48 @@ +# --------------------------- +# Makefile for BDD calculator +# --------------------------- + +all: bddcalc + +# --- Compiler flags +CFLAGS = -O3 -pedantic -Wall -ansi -L../../src -I../../src + +# --- C++ compiler +CPP = g++ + +# --- C compiler +CC = gcc + +# --- You may need to change these according to your flex and bison versions +parser.cxx: parser.h parser.y + bison -d -o parser.cxx parser.y + mv parser.cxx.h tokens.h + +lexer.cxx: tokens.h parser.h lexer.l + flex -olexer.cxx lexer.l + + +# --- Do not touch --- + +.SUFFIXES: .cxx .c + +.cxx.o: + $(CPP) $(CFLAGS) -c $< + +.c.o: + $(CC) $(CFLAGS) -c $< + +bddcalc: parser.o lexer.o hashtbl.o bddlib + $(CPP) $(CFLAGS) parser.o lexer.o hashtbl.o -o bddcalc -lbdd -lm + +bddlib: + cd ../..; make + +clean: + rm -f *~ examples/*~ + rm -f *.o + rm -f bddcalc parser.cxx lexer.cxx + +# --- Needed for the author's Cygwin compiler +export BISONLIB=/cygnus/cygwin-b20/share/ + diff --git a/buddy/examples/calculator/parser.h b/buddy/examples/calculator/parser.h new file mode 100644 index 000000000..7b59b0067 --- /dev/null +++ b/buddy/examples/calculator/parser.h @@ -0,0 +1,44 @@ +/************************************************************************* + FILE: parser.h + DESCR: parser defs. for BDD calculator + AUTH: Jorn Lind + DATE: (C) may 1999 +*************************************************************************/ + +#ifndef _PARSER_H +#define _PARSER_H + +#include +#include "bdd.h" + +#define MAXIDLEN 32 /* Max. number of allowed characters in an identifier */ + +struct token /* BISON token data */ +{ + char id[MAXIDLEN+1]; + char *str; + int ival; + bdd *bval; +}; + +#define YYSTYPE token +#define YY_SKIP_YYWRAP +#define YY_NO_UNPUT +#define yywrap() (1) + +extern YYSTYPE yylval; /* Declare for flex user */ +extern void yyerror(char *,...); /* Declare for flex and bison */ +extern FILE *yyin; +extern int yylex(void); /* Declare for bison */ +extern int yyparse(void); /* Declare for bison user */ +extern int linenum; /* Declare for error handler */ + + /* Use this instead of strdup() to avoid malloc() */ +inline char *sdup(const char *s) +{ + return strcpy(new char[strlen(s)+1], s); +} + +#endif /* _PARSER_H */ + +/* EOF */ diff --git a/buddy/examples/calculator/parser.y b/buddy/examples/calculator/parser.y new file mode 100644 index 000000000..ba68a539f --- /dev/null +++ b/buddy/examples/calculator/parser.y @@ -0,0 +1,457 @@ +/************************************************************************* + FILE: parser.y + DESCR: BISON rules and main program for BDD calculator + AUTH: Jorn Lind + DATE: (C) may 1999 +*************************************************************************/ + +%{ +#include +#include +#include +#include +#define IMPLEMENTSLIST /* Special for list template handling */ +#include "slist.h" +#include "hashtbl.h" +#include "parser.h" + + /* Definitions for storing and caching of identifiers */ +#define inputTag 0 +#define exprTag 1 + + struct nodeData + { + nodeData(const nodeData &d) { tag=d.tag; name=sdup(d.name); val=d.val; } + nodeData(int t, char *n, bdd v) { tag=t; name=n; val=v; } + ~nodeData(void) { delete[] name; } + int tag; + char *name; + bdd val; + }; + + typedef SList nodeLst; + nodeLst inputs; + hashTable names; + + /* Other */ + int linenum; + + bddgbchandler gbcHandler = bdd_default_gbchandler; + + /* Prototypes */ +void actInit(token *nodes, token *cache); +void actInputs(void); +void actAddInput(token *id); +void actAssign(token *id, token *expr); +void actOpr2(token *res, token *left, token *right, int opr); +void actNot(token *res, token *right); +void actId(token *res, token *id); +void actConst(token *res, int); +void actSize(token *id); +void actDot(token *fname, token *id); +void actAutoreorder(token *times, token *method); +void actCache(void); +void actTautology(token *id); +void actExist(token *res, token *var, token *expr); +void actForall(token *res, token *var, token *expr); +void actQuantVar2(token *res, token *id, token *list); +void actQuantVar1(token *res, token *id); +void actPrint(token *id); + +%} + +/************************************************************************* + Token definitions +*************************************************************************/ + +%token T_id, T_str, T_intval, T_true, T_false + +%token T_initial, T_inputs, T_actions +%token T_size, T_dumpdot +%token T_autoreorder, T_reorder, T_win2, T_win2ite, T_sift, T_siftite, T_none +%token T_cache, T_tautology, T_print + +%token T_lpar, T_rpar +%token T_equal +%token T_semi, T_dot + +%right T_exist, T_forall, T_dot +%left T_biimp +%left T_imp +%left T_or, T_nor +%left T_xor +%left T_nand, T_and +%right T_not + +/************************************************************************* + BISON rules +*************************************************************************/ +%% + +/*=[ Top ]==============================================================*/ + +calc: + initial inputs actions + ; + +/*=[ Initializers ]=====================================================*/ + +initial: + T_initial T_intval T_intval T_semi { actInit(&$2,&$3); } + ; + +inputs: + T_inputs inputSeq T_semi { actInputs(); } + ; + +inputSeq: + inputSeq T_id { actAddInput(&$2); } + | T_id { actAddInput(&$1); } + ; + + +/*=[ Actions ]==========================================================*/ + +actions: + T_actions actionSeq + ; + +actionSeq: + action T_semi actionSeq + | action T_semi + ; + +action: + assign + | size + | dot + | reorder + | cache + | tautology + | print + ; + +assign: + T_id T_equal expr { actAssign(&$1,&$3); } + ; + +expr: + expr T_and expr { actOpr2(&$$,&$1,&$3,bddop_and); } + | expr T_nand expr { actOpr2(&$$,&$1,&$3,bddop_nand); } + | expr T_xor expr { actOpr2(&$$,&$1,&$3,bddop_xor); } + | expr T_or expr { actOpr2(&$$,&$1,&$3,bddop_or); } + | expr T_nor expr { actOpr2(&$$,&$1,&$3,bddop_nor); } + | expr T_imp expr { actOpr2(&$$,&$1,&$3,bddop_imp); } + | expr T_biimp expr { actOpr2(&$$,&$1,&$3,bddop_biimp); } + | T_not expr { actNot(&$$,&$2); } + | T_lpar expr T_rpar { $$.bval = $2.bval; } + | T_id { actId(&$$,&$1); } + | T_true { $$.bval = new bdd(bddtrue); } + | T_false { $$.bval = new bdd(bddfalse); } + | quantifier { $$.bval = $1.bval; } + ; + +quantifier: + T_exist varlist T_dot expr { actExist(&$$,&$2,&$4); } + | T_forall varlist T_dot expr { actForall(&$$,&$2,&$4); } + ; + +varlist: + T_id varlist { actQuantVar2(&$$,&$1,&$2); } + | T_id { actQuantVar1(&$$,&$1); } + ; + + +size: + T_size T_id { actSize(&$2); } + ; + +dot: + T_dumpdot T_str T_id { actDot(&$2,&$3); } + ; + +reorder: + T_reorder method { bdd_reorder($2.ival); } + | T_autoreorder T_intval method { actAutoreorder(&$2,&$3); } + ; + +method: + T_win2 { $$.ival = BDD_REORDER_WIN2; } + | T_win2ite { $$.ival = BDD_REORDER_WIN2ITE; } + | T_sift { $$.ival = BDD_REORDER_SIFT; } + | T_siftite { $$.ival = BDD_REORDER_SIFTITE; } + | T_none { $$.ival = BDD_REORDER_NONE; } + ; + +cache: + T_cache { actCache(); } + ; + +tautology: + T_tautology T_id { actTautology(&$2); } + ; + +print: + T_print T_id { actPrint(&$2); } + +%% +/************************************************************************* + Main and more +*************************************************************************/ + +void usage(void) +{ + cerr << "USAGE: bddcalc [-hg] file\n"; + cerr << " -h : print this message\n"; + cerr << " -g : disable garbage collection info\n"; +} + + +int main(int ac, char **av) +{ + int c; + + while ((c=getopt(ac, av, "hg")) != EOF) + { + switch (c) + { + case 'h': + usage(); + break; + case 'g': + gbcHandler = bdd_default_gbchandler; + break; + } + } + + if (optind >= ac) + usage(); + + yyin = fopen(av[optind],"r"); + if (!yyin) + { + cerr << "Could not open file: " << av[optind] << endl; + exit(2); + } + + linenum = 1; + bdd_setcacheratio(2); + yyparse(); + + bdd_printstat(); + bdd_done(); + + return 0; +} + + +void yyerror(char *fmt, ...) +{ + va_list argp; + va_start(argp,fmt); + fprintf(stderr, "Parse error in (or before) line %d: ", linenum); + vfprintf(stderr, fmt, argp); + va_end(argp); + exit(3); +} + + +/************************************************************************* + Semantic actions +*************************************************************************/ + +void actInit(token *nodes, token *cache) +{ + bdd_init(nodes->ival, cache->ival); + bdd_gbc_hook(gbcHandler); + bdd_reorder_verbose(0); +} + + +void actInputs(void) +{ + bdd_setvarnum(inputs.size()); + + int vnum=0; + for (nodeLst::ite i=inputs.first() ; i.more() ; i++, vnum++) + { + if (names.exists((*i).name)) + yyerror("Redefinition of input %s", (*i).name); + + (*i).val = bdd_ithvar(vnum); + hashData hd((*i).name, 0, &(*i)); + names.add(hd); + } + + bdd_varblockall(); +} + + +void actAddInput(token *id) +{ + inputs.append( nodeData(inputTag,sdup(id->id),bddtrue) ); +} + + +void actAssign(token *id, token *expr) +{ + if (names.exists(id->id)) + yyerror("Redefinition of %s", id->id); + + nodeData *d = new nodeData(exprTag, sdup(id->id), *expr->bval); + hashData hd(d->name, 0, d); + names.add(hd); + delete expr->bval; +} + + +void actOpr2(token *res, token *left, token *right, int opr) +{ + res->bval = new bdd( bdd_apply(*left->bval, *right->bval, opr) ); + delete left->bval; + delete right->bval; +} + + +void actNot(token *res, token *right) +{ + res->bval = new bdd( bdd_not(*right->bval) ); + delete right->bval; + //printf("%5d -> %f\n", fixme, bdd_satcount(*res->bval)); +} + + +void actId(token *res, token *id) +{ + hashData hd; + + if (names.lookup(id->id,hd) == 0) + { + res->bval = new bdd( ((nodeData*)hd.def)->val ); + } + else + yyerror("Unknown variable %s", id->id); +} + + +void actExist(token *res, token *var, token *expr) +{ + res->bval = new bdd( bdd_exist(*expr->bval, *var->bval) ); + delete var->bval; + delete expr->bval; +} + + +void actForall(token *res, token *var, token *expr) +{ + res->bval = new bdd( bdd_forall(*expr->bval, *var->bval) ); + delete var->bval; + delete expr->bval; +} + + +void actQuantVar2(token *res, token *id, token *list) +{ + hashData hd; + + if (names.lookup(id->id,hd) == 0) + { + if (hd.type == inputTag) + { + res->bval = list->bval; + *res->bval &= ((nodeData*)hd.def)->val; + } + else + yyerror("%s is not a variable", id->id); + } + else + yyerror("Unknown variable %s", id->id); +} + + +void actQuantVar1(token *res, token *id) +{ + hashData hd; + + if (names.lookup(id->id,hd) == 0) + { + if (hd.type == inputTag) + res->bval = new bdd( ((nodeData*)hd.def)->val ); + else + yyerror("%s is not a variable", id->id); + } + else + yyerror("Unknown variable %s", id->id); +} + + +void actSize(token *id) +{ + hashData hd; + + if (names.lookup(id->id,hd) == 0) + { + cout << "Number of nodes used for " << id->id << " = " + << bdd_nodecount(((nodeData*)hd.def)->val) << endl; + } + else + yyerror("Unknown variable %s", id->id); +} + + +void actDot(token *fname, token *id) +{ + hashData hd; + + if (names.lookup(id->id,hd) == 0) + { + if (bdd_fnprintdot(fname->str, ((nodeData*)hd.def)->val) < 0) + cout << "Could not open file: " << fname->str << endl; + } + else + yyerror("Unknown variable %s", id->id); +} + + +void actAutoreorder(token *times, token *method) +{ + if (times->ival == 0) + bdd_autoreorder(method->ival); + else + bdd_autoreorder_times(method->ival, times->ival); +} + + +void actCache(void) +{ + bdd_printstat(); +} + + +void actTautology(token *id) +{ + hashData hd; + + if (names.lookup(id->id,hd) == 0) + { + if (((nodeData*)hd.def)->val == bddtrue) + cout << "Formula " << id->id << " is a tautology!\n"; + else + cout << "Formula " << id->id << " is NOT a tautology!\n"; + } + else + yyerror("Unknown variable %s", id->id); +} + + +void actPrint(token *id) +{ + hashData hd; + + if (names.lookup(id->id,hd) == 0) + cout << id->id << " = " << bddset << ((nodeData*)hd.def)->val << endl; + else + yyerror("Unknown variable %s", id->id); +} + +/* EOF */ diff --git a/buddy/examples/calculator/readme b/buddy/examples/calculator/readme new file mode 100644 index 000000000..b281b90d3 --- /dev/null +++ b/buddy/examples/calculator/readme @@ -0,0 +1,99 @@ +A PRIMITIVE BDD CALCULATOR +-------------------------- + +This is a small program that parses commands for a BDD calculator. The +input file contains the definition of the basic BDD variables (inputs) +and a sequence of actions - typically assignments. The calculator can +be used for verification of combinatorial circuits (tautology check), +such as some of the ISCAS85 circuits in the "examples" directory. These +ISCAS85 have been modified by another program before they where added to +the BuDDy examples, so please do not compare the runtime results to other +test runs. + + +A BDD calculator file could be something like this ("example.cal"): + + initial 100 100; + + inputs + a b c; + + actions + t1 = (a | b) & c; + t2 = (a & c) | (b & c); + t3 = t1 <> t2; + tautology t3; /* Verify that (a | b) & c == (a & c) | (b & c) */ + + +Where the blocks are like this: + +initial n c +----------- + Initialize the BDD package using 'n' bddnodes and 'c' elements in + the caches. This part is mandatory. + + +inputs id-seq +------------- + Define all identifiers in the sequence 'id-seq' to be primary + inputs. This also corresponds to the initial BDD variable ordering, + starting with the first identifier in the top. + + +outputs id-seq +-------------- + Define all identifiers in the sequence 'id-seq' to be primary + outputs. The sequence is space separated. + + +actions act-seq +--------------- + A list of all the calculations and more. This list is traversed and + interpreted in the same order as written in the file. An action can + be one of the following: + + Assignments: "id = expression" + Calculate the right-hand side and assign the value to the + left-hand identifier. The expression may contain: + + + identifiers : A previously defined identifier + + true : The constant true BDD + + false : The constant false BDD + + ( ... ) : Parenteses + + E1 & E2 : Conjunction of two sub-expressions + + E1 | E2 : Disjunction of two sub-expressions + + E1 ^ E2 : Xor + + E1 => E2 : Implication + + E1 <> E2 : Biimplication + + ~E : Negation + + exist V.E : + + forall V. E : Existential/Universal quantification of the + variables V in the expression E. V is a space + separated list of input names. + + + Tautology check: "tautology id" + Check the variable 'id' for tautology (being equal to the constant + true BDD). + + Size information: "size id" + Print the number of distinct BDD nodes used to represent 'id'. + + Dump as a dot file: "dot "filename" id" + Dump the BDD representing 'id' as commands to the graph drawing + program Dot. The commands are written to the file 'filename'. + + Reordering: "reorder mtd" + Do a dynamic variable reordering now using the method 'mtd'. The + argument 'mtd' may be either: win2, win2ite or sift. + + Automatic reordering: "autoreorder times mtd" + Enable automatic dynamic variable reordering using the method + 'mtd'. The argument 'mtd' may be either: win2, win2ite, sift or + none. Use none to disable automatic reordering. The 'times' + argument supplies the number of times that reordering may be + done. Use for example 1 if you only want a "one-shot" reordering. + + Cache statistics: "cache" + Print various cache statistics for the BDD kernel. + diff --git a/buddy/examples/calculator/slist.h b/buddy/examples/calculator/slist.h new file mode 100644 index 000000000..aba90cd92 --- /dev/null +++ b/buddy/examples/calculator/slist.h @@ -0,0 +1,235 @@ +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/examples/calculator/Attic/slist.h,v 1.1 2003/05/05 10:57:55 aduret Exp $ + FILE: slist.h + DESCR: Single linked list + AUTH: Jorn Lind + DATE: (C) +*************************************************************************/ + +#ifndef _SLIST_H +#define _SLIST_H + +#include + + +/* === Base void list ==================================================*/ + +class voidSList; + +class voidSList +{ +protected: + class voidSListElem + { + public: + void *data; + voidSListElem *next; + ~voidSListElem(void) { delete next; } + + private: + voidSListElem(void *d) { data=d; next=NULL; } + friend voidSList; + }; + +public: + voidSList(void) { head=tail=NULL; len=0; } + ~voidSList(void) { delete head; } + void *append(void *); + void *append(voidSListElem *p, void *d); + void *insert(void *); + int size(void) const { return len; } + int empty(void) const { return len==0; } + void reverse(void); + void eraseHead(void); + void eraseAll(void) { delete head; head=tail=NULL; len=0; } + +protected: + int len; + voidSListElem *head, *tail; +}; + + +#ifdef IMPLEMENTSLIST + +void *voidSList::append(void *d) +{ + voidSListElem *elem = new voidSListElem(d); + + if (tail) + tail->next = elem; + else + head = elem; + + tail = elem; + len++; + + return elem->data; +} + + +void *voidSList::append(voidSListElem *p, void *d) +{ + voidSListElem *elem = new voidSListElem(d); + + if (p) + { + elem->next = p->next; + p->next = elem; + if (p == tail) + tail = p->next; + } + else + { + if (tail) + tail->next = elem; + else + head = elem; + tail = elem; + } + + len++; + + return elem->data; +} + + +void *voidSList::insert(void *d) +{ + voidSListElem *elem = new voidSListElem(d); + + if (tail == NULL) + tail = elem; + + elem->next = head; + head = elem; + len++; + + return elem->data; +} + + +void voidSList::reverse(void) +{ + voidSListElem *newTail = head; + voidSListElem *tmpHead = NULL; + + if (len < 2) + return ; + + while (head != NULL) + { + voidSListElem *tmpNext = head->next; + + head->next = tmpHead; + tmpHead = head; + + head = tmpNext; + } + + tail = newTail; + head = tmpHead; +} + + +void voidSList::eraseHead(void) +{ + if (head != NULL) + { + head = head->next; + if (head == NULL) + tail = NULL; + len--; + } +} + +#endif /* IMPLEMENTSLIST */ + + +/* === Base void list ==================================================*/ + +//sorting + +template +class SList : private voidSList +{ +public: + class ite + { + public: + ite(void) { next=NULL; } + ite(const ite &start) { next=start.next;} + ite(voidSListElem *start) { next=start; } + int more(void) const { return next!=NULL; } + ite &operator=(const ite &start) { next=start.next; return *this; } + ite operator++(void) + { if (next) next=next->next; return *this; } + ite operator++(int) + { ite tmp=*this; if (next) next=next->next; return tmp; } + T &operator*(void) const { return *((T*)next->data); } + int operator==(ite x) { return x.next==next; } + private: + voidSListElem *next; + friend SList; + }; + + ~SList(void) { for (ite x=first() ; x.more() ; x++) delete &(*x); } + T &append(const T &d) { return *((T*)voidSList::append(new T(d))); } + T &insert(const T &d) { return *((T*)voidSList::insert(new T(d))); } + T &head(void) const { return *((T*)voidSList::head->data); } + T &tail(void) const { return *((T*)voidSList::tail->data); } + ite first(void) const { return ite(voidSList::head); } + int empty(void) const { return voidSList::empty(); } + int size(void) const { return voidSList::size(); } + void reverse(void) { voidSList::reverse(); } + void filter(int (*)(T&)); + void append(SList &l) + { for (ite x=l.first() ; x.more() ; x++) append(*x); } + T &append(ite &i, const T &d) + { return *((T*)voidSList::append(i.next, new T(d))); } + void eraseHead(void) + { delete ((T*)voidSList::head->data); voidSList::eraseHead(); } + void eraseAll(void) + { for (ite x=first() ; x.more() ; x++) delete &(*x); voidSList::eraseAll();} + void map(void (*f)(T&)) + { for (ite x=first() ; x.more() ; x++) f(*x); } +}; + + +template +void SList::filter(int (*f)(T&)) +{ + voidSListElem *prev=NULL, *next=voidSList::head; + + while (next) + { + if (f(*((T*)next->data))) + { + prev = next; + next = next->next; + } + else + { + voidSListElem *n = next->next; + + if (prev == NULL) + voidSList::head = next->next; + else + prev->next = next->next; + if (voidSList::head == NULL) + voidSList::tail = NULL; + + delete next->data; + next->next = NULL; + delete next; + + next = n; + len--; + } + } +} + + +#endif /* _SLIST_H */ + + +/* EOF */ diff --git a/buddy/examples/calculator/tokens.h b/buddy/examples/calculator/tokens.h new file mode 100644 index 000000000..007490412 --- /dev/null +++ b/buddy/examples/calculator/tokens.h @@ -0,0 +1,41 @@ +#ifndef YYSTYPE +#define YYSTYPE int +#endif +#define T_id 257 +#define T_str 258 +#define T_intval 259 +#define T_true 260 +#define T_false 261 +#define T_initial 262 +#define T_inputs 263 +#define T_actions 264 +#define T_size 265 +#define T_dumpdot 266 +#define T_autoreorder 267 +#define T_reorder 268 +#define T_win2 269 +#define T_win2ite 270 +#define T_sift 271 +#define T_siftite 272 +#define T_none 273 +#define T_cache 274 +#define T_tautology 275 +#define T_print 276 +#define T_lpar 277 +#define T_rpar 278 +#define T_equal 279 +#define T_semi 280 +#define T_dot 281 +#define T_exist 282 +#define T_forall 283 +#define T_biimp 284 +#define T_imp 285 +#define T_or 286 +#define T_nor 287 +#define T_xor 288 +#define T_nand 289 +#define T_and 290 +#define T_not 291 + + +extern YYSTYPE yylval; diff --git a/buddy/examples/cmilner/makefile b/buddy/examples/cmilner/makefile new file mode 100644 index 000000000..222fcdea0 --- /dev/null +++ b/buddy/examples/cmilner/makefile @@ -0,0 +1,36 @@ +# -------------------------------- +# Makefile for milner test example +# -------------------------------- + +# --- Compiler flags +CFLAGS = -O3 -pedantic -Wall -ansi -L../../src -I../../src + +# --- C++ compiler +CPP = g++ + +# --- C compiler +CC = gcc + + +# --- Do not touch --- + +.SUFFIXES: .cxx .c + +.cxx.o: + $(CPP) $(CFLAGS) -c $< + +.c.o: + $(CC) $(CFLAGS) -c $< + +milner: milner.o bddlib + $(CC) $(CFLAGS) milner.o -o milner -lbdd -lm + +bddlib: + cd ../..; make + +clean: + rm -f *~ + rm -f *.o + rm -f milner + +milner.o: ../../src/bdd.h diff --git a/buddy/examples/cmilner/milner.c b/buddy/examples/cmilner/milner.c new file mode 100644 index 000000000..65b70f139 --- /dev/null +++ b/buddy/examples/cmilner/milner.c @@ -0,0 +1,299 @@ +#include +#include +#include +#include +#include "bdd.h" + +int N; /* Number of cyclers */ +int *normvar; /* Current state variables */ +int *primvar; /* Next state variables */ + +bdd normvarset; +bddPair *pairs; + +bdd A(bdd* x, bdd* y, int z) +{ + bdd res = bddtrue, tmp1, tmp2; + int i; + + for(i=0 ; i 1 -> 2 -> 3 -> 4 -> 5 -> -> 7 -> 0 + */ + +#include "fdd.h" + +/* Use the transition relation "transRel" to iterate through the statespace + */ +void findStateSpace(bdd transRel) +{ + /* Create a new pair for renaming the next-state variables to + * current-state variables */ + bddPair *p = bdd_newpair(); + fdd_setpair(p,1,0); + + /* Get a BDD that represents all the current-state variables */ + bdd currentStateVar = fdd_ithset(0); + + /* Start with the initial state */ + bdd reachedStates = fdd_ithvar(0,0); + + bdd tmp = bddfalse; + + /* Repeat until no new states are found */ + do + { + tmp = reachedStates; + + /* Calculate: Newset = (exists V_cur. transRel & Reached)[cur/next] */ + bdd newset; + newset = reachedStates & transRel; + newset = bdd_exist(newset, currentStateVar); + newset = bdd_replace(newset, p); + + cout << "Front: " << (newset - reachedStates) << endl; + + /* Add the new states to the found states */ + reachedStates = reachedStates | newset; + } + while (tmp != reachedStates); +} + + +main() +{ + /* Initialize BuDDy and declare two interleaved FDD variable blocks + * with the domain [0..7] */ + int domain[2] = {8,8}; + + bdd_init(100,100); + fdd_extdomain(domain, 2); + + /* Initialize the transition relation with no transitions */ + bdd T = bddfalse; + + /* Add all the transitions (from state 'i' to state 'i+1') */ + for (int i=0 ; i<8 ; i++) + { + /* Set the current state to be state 'i' */ + bdd current = fdd_ithvar(0,i); + + /* Set the next state to be state 'i+1' */ + bdd next = fdd_ithvar(1, (i+1) % 8); + + /* Add the transition */ + T = T | (current & next); + } + + cout << fddset << "Transition relation: " << T << endl << endl; + + /* Calculate the reachable statespace */ + findStateSpace(T); +} diff --git a/buddy/examples/internal/bddtest.cxx b/buddy/examples/internal/bddtest.cxx new file mode 100644 index 000000000..ac154982e --- /dev/null +++ b/buddy/examples/internal/bddtest.cxx @@ -0,0 +1,143 @@ +#include +#include +#include + +static const int varnum = 5; + +/************************************************************************** + Example of allsat print handler. +**************************************************************************/ + +void allsatHandlerPrint(char* varset, int size) +{ + for (int v=0; v +#include +#include +#include +#include "bdd.h" + +int N; // Number of cyclers +bdd normvar; // Current state variables +bdd primvar; // Next state variables +bddPair *renamepair; // Variable pairs for renaming + + +/* Build a BDD expressing that all other variables than 'z' is unchanged. + */ +bdd A(bdd* x, bdd* y, int z) +{ + bdd res = bddtrue; + int i; + + for(i=0 ; icp[i]) & (tp[i]>t[i]) & hp[i] & A(c,cp,i) + & A(t,tp,i) & A(h,hp,i)) + | ((h[i]>hp[i]) & cp[(i+1)%N] & A(c,cp,(i+1)%N) & A(h,hp,i) + & A(t,tp,N)); + + E = t[i] & !tp[i] & A(t,tp,i) & A(h,hp,N) & A(c,cp,N); + + T |= P | E; + } + + return T; +} + + +/* Create a BDD for the initial state. + */ +bdd initial_state(bdd* t, bdd* h, bdd* c) +{ + int i; + bdd I = c[0] & !h[0] & !t[0]; + + for(i=1; i slow + tmp = T & bx; + tmp = bdd_exist(tmp, normvar); +#else + // Apply and exist as one operation => fast + tmp = bdd_appex(R, T, bddop_and, normvar); +#endif + tmp = bdd_replace(tmp, renamepair); + R |= tmp; + } + while(prevR != R); + + return R; +} + + +int main(int argc, char** argv) +{ + int n; + if(argc < 2) + { + cerr << "usage: milner N\n"; + cerr << " N number of cyclers\n"; + exit(1); + } + + N = atoi(argv[1]); + if (N <= 0) + { + cerr << "The number of cyclers must be more than zero\n"; + exit(2); + } + + long clk1 = clock(); + + bdd_init(500000, 50000); + bdd_setvarnum(N*6); + + bdd* c = new bdd[N]; + bdd* cp = new bdd[N]; + bdd* t = new bdd[N]; + bdd* tp = new bdd[N]; + bdd* h = new bdd[N]; + bdd* hp = new bdd[N]; + + int *nvar = new int[N*3]; + int *pvar = new int[N*3]; + + for (n=0 ; n0 and m>0. + */ + +int main(void) +{ + // Allocate 11 domains with room for up to 3*10 + static int dom[11] = {30,30,30,30,30,30,30,30,30,30,30}; + + bdd_init(10000,10000); + fdd_extdomain(dom,11); + + // Assign binary vectors (expressions) to the digits + + bvec s = bvec_varfdd(0); // The 's' digit + bvec e = bvec_varfdd(1); // The 'e' digit + bvec n = bvec_varfdd(2); // ... + bvec d = bvec_varfdd(3); + bvec m = bvec_varfdd(4); + bvec o = bvec_varfdd(5); + bvec r = bvec_varfdd(6); + bvec y = bvec_varfdd(7); + bvec m1 = bvec_varfdd(8); // Carry out 1 + bvec m2 = bvec_varfdd(9); // Carry out 2 + bvec m3 = bvec_varfdd(10); // Carry out 3 + + // Create a few constants of the right bit number (5) + bvec c10 = bvec_con(5,10); + bvec c2 = bvec_con(5,2); + bvec c0 = bvec_con(5,0); + + // Create constraints + + // Constraint 1: addition of the last digits and constraints on + // the max. value of the involved variables and carry-out + bdd t1 = (d + e == y + m1*10) & d c0 & s > c0); + + // Make sure all digits are different + bdd t6 = (s!=e & s!=n & s!=d & s!=m & s!=o & s!=r & s!=y); + bdd t7 = (e!=n & e!=d & e!=m & e!=o & e!=r & e!=y); + bdd t8 = (n!=d & n!=m & n!=o & n!=r & n!=y); + bdd t9 = (d!=m & d!=o & d!=r & d!=y); + bdd t10 = (m!=o & m!=r & m!=y); + bdd t11 = (o!=r & o!=y); + bdd t12 = (r!=y); + + // Join all constraints + bdd t = t1 & t2 & t3 & t4 & t5 & t6 & t7 & t8 & t9 & t10 & t11 & t12; + + // Print result + cout << fddset << t << endl; + + return 0; +} diff --git a/buddy/examples/queen/makefile b/buddy/examples/queen/makefile new file mode 100644 index 000000000..9454bd55a --- /dev/null +++ b/buddy/examples/queen/makefile @@ -0,0 +1,37 @@ +# --------------------------------- +# Makefile for N-queen test example +# --------------------------------- + +# --- Compiler flags +CFLAGS = -O3 -pedantic -Wall -ansi -L../../src -I../../src + +# --- C++ compiler +CPP = g++ + +# --- C compiler +CC = gcc + + +# --- Do not touch --- + +.SUFFIXES: .cxx .c + +.cxx.o: + $(CPP) $(CFLAGS) -c $< + +.c.o: + $(CC) $(CFLAGS) -c $< + +queen: queen.o bddlib + $(CPP) $(CFLAGS) queen.o -o queen -lbdd -lm + +bddlib: + cd ../..; make + +clean: + rm -f *~ + rm -f *.o + rm -f queen + +queen.o: ../../src/bdd.h + diff --git a/buddy/examples/queen/queen.cxx b/buddy/examples/queen/queen.cxx new file mode 100644 index 000000000..eb5aaa13c --- /dev/null +++ b/buddy/examples/queen/queen.cxx @@ -0,0 +1,133 @@ +/************************************************************************** + BDD demonstration of the N-Queen chess problem. + ----------------------------------------------- + The BDD variables correspond to a NxN chess board like: + + 0 N 2N .. N*N-N + 1 N+1 2N+1 .. N*N-N+1 + 2 N+2 2N+2 .. N*N-N+2 + .. .. .. .. .. + N-1 2N-1 3N-1 .. N*N-1 + + So for example a 4x4 is: + + 0 4 8 12 + 1 5 9 13 + 2 6 10 14 + 3 7 11 15 + + One solution is then that 2,4,11,13 should be true, meaning a queen + should be placed there: + + . X . . + . . . X + X . . . + . . X . + +**************************************************************************/ +#include +#include "bdd.h" + +int N; /* Size of the chess board */ +bdd **X; /* BDD variable array */ +bdd queen; /* N-queen problem express as a BDD */ + + +/* Build the requirements for all other fields than (i,j) assuming + that (i,j) has a queen */ +void build(int i, int j) +{ + bdd a=bddtrue, b=bddtrue, c=bddtrue, d=bddtrue; + int k,l; + + /* No one in the same column */ + for (l=0 ; l> !X[i][l]; + + /* No one in the same row */ + for (k=0 ; k> !X[k][j]; + + /* No one in the same up-right diagonal */ + for (k=0 ; k=0 && ll> !X[k][ll]; + } + + /* No one in the same down-right diagonal */ + for (k=0 ; k=0 && ll> !X[k][ll]; + } + + queen &= a & b & c & d; +} + + +int main(int ac, char **av) +{ + int n,i,j; + + if (ac != 2) + { + fprintf(stderr, "USAGE: queen N\n"); + return 1; + } + + N = atoi(av[1]); + if (N <= 0) + { + fprintf(stderr, "USAGE: queen N\n"); + return 1; + } + + /* Initialize with 100000 nodes, 10000 cache entries and NxN variables */ + bdd_init(N*N*256, 10000); + bdd_setvarnum(N*N); + + queen = bddtrue; + + /* Build variable array */ + X = new bdd*[N]; + for (n=0 ; n +#include +#include +#include +#include "bdd.h" + +float dummyStateNum; // Use to remove the number of states defined by the + // next-state variables + +#define SIZE 33 // Size of the board +#define CENTER 16 // Location of the center place + +bdd boardC[SIZE]; // Current state variables +bdd boardN[SIZE]; // Next state variables +bdd I; // Initial state +bdd T; // Transition relation + +bdd currentvar; // All current state variables +bddPair *pair; // Renaming pair + + + // All the possible moves. Note that the numbering starts from '1' +int moves[][3] = +{ {1,4,9}, {1,2,3}, + {2,5,10}, + {3,2,1}, {3,6,11}, + {4,5,6}, {4,9,16}, + {5,10,17}, + {6,5,4}, {6,11,18}, + {7,8,9}, {7,14,21}, + {8,9,10}, {8,15,22}, + {9,8,7}, {9,10,11}, {9,4,1}, {9,16,23}, + {10,9,8}, {10,11,12}, {10,5,2}, {10,17,24}, + {11,10,9}, {11,12,13}, {11,6,3}, {11,18,25}, + {12,11,10}, {12,19,26}, + {13,12,11}, {13,20,27}, + {14,15,16}, + {15,16,17}, + {16,15,14}, {16,17,18}, {16,9,4}, {16,23,28}, + {17,16,15}, {17,18,19}, {17,10,5}, {17,24,29}, + {18,17,16}, {18,19,20}, {18,11,6}, {18,25,30}, + {19,18,17}, + {20,19,18}, + {21,22,23}, {21,14,7}, + {22,23,24}, {22,15,8}, + {23,22,21}, {23,24,25}, {23,16,9}, {23,28,31}, + {24,23,22}, {24,25,26}, {24,17,10}, {24,29,32}, + {25,24,23}, {25,26,27}, {25,18,11}, {25,30,33}, + {26,25,24}, {26,19,12}, + {27,26,25}, {27,20,13}, + {28,29,30}, {28,23,16}, + {29,24,17}, + {30,29,28}, {30,25,18}, + {31,32,33}, {31,28,23}, + {32,29,24}, + {33,32,31}, {33,30,25}, + {0,0,0} +}; + + + + + +// Setup the variables needed for the board +void make_board(void) +{ + bdd_setvarnum(SIZE*2); + + for (int n=0 ; n $(RD)/doc/makefile + mkdir $(RD)/examples/milner + cp examples/milner/* $(RD)/examples/milner + mkdir $(RD)/examples/cmilner + cp examples/cmilner/* $(RD)/examples/cmilner + mkdir $(RD)/examples/adder + cp examples/adder/* $(RD)/examples/adder + mkdir $(RD)/examples/queen + cp examples/queen/* $(RD)/examples/queen + mkdir $(RD)/examples/fdd + cp examples/fdd/* $(RD)/examples/fdd + mkdir $(RD)/examples/calculator + mkdir $(RD)/examples/calculator/examples + cp -R examples/calculator/* $(RD)/examples/calculator + mkdir $(RD)/examples/solitare + cp examples/solitare/* $(RD)/examples/solitare + mkdir $(RD)/examples/money + cp examples/money/* $(RD)/examples/money + mkdir $(RD)/examples/internal + cp examples/internal/* $(RD)/examples/internal + tar -cvf $(TARGET)$(VERSION).tar $(RD)/* + gzip $(TARGET)$(VERSION).tar + rm -fr $(RD) + @cat RELEASE + + + diff --git a/buddy/src/bdd.h b/buddy/src/bdd.h new file mode 100644 index 000000000..c32647e76 --- /dev/null +++ b/buddy/src/bdd.h @@ -0,0 +1,833 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/bdd.h,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: bdd.h + DESCR: C,C++ User interface for the BDD package + AUTH: Jorn Lind + DATE: (C) feb 1997 +*************************************************************************/ + +#ifndef _BDD_H +#define _BDD_H + + /* Allow this headerfile to define C++ constructs if requested */ +#ifdef __cplusplus +#define CPLUSPLUS +#endif + +#include + +/*=== Defined operators for apply calls ================================*/ + +#define bddop_and 0 +#define bddop_xor 1 +#define bddop_or 2 +#define bddop_nand 3 +#define bddop_nor 4 +#define bddop_imp 5 +#define bddop_biimp 6 +#define bddop_diff 7 +#define bddop_less 8 +#define bddop_invimp 9 + + /* Should *not* be used in bdd_apply calls !!! */ +#define bddop_not 10 +#define bddop_simplify 11 + + +/*=== User BDD types ===================================================*/ + +typedef int BDD; + +#ifndef CPLUSPLUS +typedef BDD bdd; +#endif /* CPLUSPLUS */ + + +typedef struct s_bddPair +{ + BDD *result; + int last; + int id; + struct s_bddPair *next; +} bddPair; + + +/*=== Status information ===============================================*/ + +/* +NAME {* bddStat *} +SECTION {* kernel *} +SHORT {* Status information about the bdd package *} +PROTO {* typedef struct s_bddStat +{ + long int produced; + int nodenum; + int maxnodenum; + int freenodes; + int minfreenodes; + int varnum; + int cachesize; + int gbcnum; +} bddStat; *} +DESCR {* The fields are \\[\baselineskip] \begin{tabular}{lp{10cm}} + {\tt produced} & total number of new nodes ever produced \\ + {\tt nodenum} & currently allocated number of bdd nodes \\ + {\tt maxnodenum} & user defined maximum number of bdd nodes \\ + {\tt freenodes} & number of currently free nodes \\ + {\tt minfreenodes} & minimum number of nodes that should be left after a + garbage collection. \\ + {\tt varnum} & number of defined bdd variables \\ + {\tt cachesize} & number of entries in the internal caches \\ + {\tt gbcnum} & number of garbage collections done until now + \end{tabular} *} +ALSO {* bdd\_stats *} +*/ +typedef struct s_bddStat +{ + long int produced; + int nodenum; + int maxnodenum; + int freenodes; + int minfreenodes; + int varnum; + int cachesize; + int gbcnum; +} bddStat; + + +/* +NAME {* bddGbcStat *} +SECTION {* kernel *} +SHORT {* Status information about garbage collections *} +PROTO {* typedef struct s_bddGbcStat +{ + int nodes; + int freenodes; + long time; + long sumtime; + int num; +} bddGbcStat; *} +DESCR {* The fields are \\[\baselineskip] \begin{tabular}{ll} + {\tt nodes} & Total number of allocated nodes in the nodetable \\ + {\tt freenodes} & Number of free nodes in the nodetable \\ + {\tt time} & Time used for garbage collection this time \\ + {\tt sumtime} & Total time used for garbage collection \\ + {\tt num} & number of garbage collections done until now + \end{tabular} *} +ALSO {* bdd\_gbc\_hook *} +*/ +typedef struct s_bddGbcStat +{ + int nodes; + int freenodes; + long time; + long sumtime; + int num; +} bddGbcStat; + + +/* +NAME {* bddCacheStat *} +SECTION {* kernel *} +SHORT {* Status information about cache usage *} +PROTO {* typedef struct s_bddCacheStat +{ + long unsigned int uniqueAccess; + long unsigned int uniqueChain; + long unsigned int uniqueHit; + long unsigned int uniqueMiss; + long unsigned int opHit; + long unsigned int opMiss; + long unsigned int swapCount; +} bddCacheStat; *} +DESCR {* The fields are \\[\baselineskip] \begin{tabular}{ll} + {\bf Name} & {\bf Number of } \\ + uniqueAccess & accesses to the unique node table \\ + uniqueChain & iterations through the cache chains in the unique node table\\ + uniqueHit & entries actually found in the the unique node table \\ + uniqueMiss & entries not found in the the unique node table \\ + opHit & entries found in the operator caches \\ + opMiss & entries not found in the operator caches \\ + swapCount & number of variable swaps in reordering \\ +\end{tabular} *} +ALSO {* bdd\_cachestats *} +*/ +typedef struct s_bddCacheStat +{ + long unsigned int uniqueAccess; + long unsigned int uniqueChain; + long unsigned int uniqueHit; + long unsigned int uniqueMiss; + long unsigned int opHit; + long unsigned int opMiss; + long unsigned int swapCount; +} bddCacheStat; + +/*=== BDD interface prototypes =========================================*/ + +/* +NAME {* bdd\_relprod *} +SECTION {* operator *} +SHORT {* relational product *} +PROTO {* #define bdd_relprod(a,b,var) bdd_appex(a,b,bddop_and,var) *} +DESCR {* Calculates the relational product of {\tt a} and {\tt b} as + {\tt a AND b} with the variables in {\tt var} quantified out + afterwards. *} +RETURN {* The relational product or {\tt bddfalse} on errors. *} +ALSO {* bdd\_appex *} +*/ +#define bdd_relprod(a,b,var) bdd_appex((a),(b),bddop_and,(var)) + + + /* In file "kernel.c" */ + +#ifdef CPLUSPLUS +extern "C" { +#endif + +typedef void (*bddinthandler)(int); +typedef void (*bddgbchandler)(int,bddGbcStat*); +typedef void (*bdd2inthandler)(int,int); +typedef int (*bddsizehandler)(void); +typedef void (*bddfilehandler)(FILE *, int); +typedef void (*bddallsathandler)(char*, int); + +extern bddinthandler bdd_error_hook(bddinthandler); +extern bddgbchandler bdd_gbc_hook(bddgbchandler); +extern bdd2inthandler bdd_resize_hook(bdd2inthandler); +extern bddinthandler bdd_reorder_hook(bddinthandler); +extern bddfilehandler bdd_file_hook(bddfilehandler); + +extern int bdd_init(int, int); +extern void bdd_done(void); +extern int bdd_setvarnum(int); +extern int bdd_extvarnum(int); +extern int bdd_isrunning(void); +extern int bdd_setmaxnodenum(int); +extern int bdd_setmaxincrease(int); +extern int bdd_setminfreenodes(int); +extern int bdd_getnodenum(void); +extern int bdd_getallocnum(void); +extern char* bdd_versionstr(void); +extern int bdd_versionnum(void); +extern void bdd_stats(bddStat *); +extern void bdd_cachestats(bddCacheStat *); +extern void bdd_fprintstat(FILE *); +extern void bdd_printstat(void); +extern void bdd_default_gbchandler(int, bddGbcStat *); +extern void bdd_default_errhandler(int); +extern const char *bdd_errstring(int); +extern void bdd_clear_error(void); +#ifndef CPLUSPLUS +extern BDD bdd_true(void); +extern BDD bdd_false(void); +#endif +extern int bdd_varnum(void); +extern BDD bdd_ithvar(int); +extern BDD bdd_nithvar(int); +extern int bdd_var(BDD); +extern BDD bdd_low(BDD); +extern BDD bdd_high(BDD); +extern int bdd_varlevel(int); +extern BDD bdd_addref(BDD); +extern BDD bdd_delref(BDD); +extern void bdd_gbc(void); +extern int bdd_scanset(BDD, int**, int*); +extern BDD bdd_makeset(int *, int); +extern bddPair* bdd_newpair(void); +extern int bdd_setpair(bddPair*, int, int); +extern int bdd_setpairs(bddPair*, int*, int*, int); +extern int bdd_setbddpair(bddPair*, int, BDD); +extern int bdd_setbddpairs(bddPair*, int*, BDD*, int); +extern void bdd_resetpair(bddPair *); +extern void bdd_freepair(bddPair*); + + /* In bddop.c */ + +extern int bdd_setcacheratio(int); +extern BDD bdd_buildcube(int, int, BDD *); +extern BDD bdd_ibuildcube(int, int, int *); +extern BDD bdd_not(BDD); +extern BDD bdd_apply(BDD, BDD, int); +extern BDD bdd_and(BDD, BDD); +extern BDD bdd_or(BDD, BDD); +extern BDD bdd_xor(BDD, BDD); +extern BDD bdd_imp(BDD, BDD); +extern BDD bdd_biimp(BDD, BDD); +extern BDD bdd_ite(BDD, BDD, BDD); +extern BDD bdd_restrict(BDD, BDD); +extern BDD bdd_constrain(BDD, BDD); +extern BDD bdd_replace(BDD, bddPair*); +extern BDD bdd_compose(BDD, BDD, BDD); +extern BDD bdd_veccompose(BDD, bddPair*); +extern BDD bdd_simplify(BDD, BDD); +extern BDD bdd_exist(BDD, BDD); +extern BDD bdd_forall(BDD, BDD); +extern BDD bdd_unique(BDD, BDD); +extern BDD bdd_appex(BDD, BDD, int, BDD); +extern BDD bdd_appall(BDD, BDD, int, BDD); +extern BDD bdd_appuni(BDD, BDD, int, BDD); +extern BDD bdd_support(BDD); +extern BDD bdd_satone(BDD); +extern BDD bdd_satoneset(BDD, BDD, BDD); +extern BDD bdd_fullsatone(BDD); +extern void bdd_allsat(BDD r, bddallsathandler handler); +extern double bdd_satcount(BDD); +extern double bdd_satcountset(BDD, BDD); +extern double bdd_satcountln(BDD); +extern double bdd_satcountlnset(BDD, BDD); +extern int bdd_nodecount(BDD); +extern int bdd_anodecount(BDD *, int); +extern int* bdd_varprofile(BDD); +extern double bdd_pathcount(BDD); + + +/* In file "bddio.c" */ + +extern void bdd_printall(void); +extern void bdd_fprintall(FILE *); +extern void bdd_fprinttable(FILE *, BDD); +extern void bdd_printtable(BDD); +extern void bdd_fprintset(FILE *, BDD); +extern void bdd_printset(BDD); +extern int bdd_fnprintdot(char *, BDD); +extern void bdd_fprintdot(FILE *, BDD); +extern void bdd_printdot(BDD); +extern int bdd_fnsave(char *, BDD); +extern int bdd_save(FILE *, BDD); +extern int bdd_fnload(char *, BDD *); +extern int bdd_load(FILE *ifile, BDD *); + +/* In file reorder.c */ + +extern int bdd_swapvar(int v1, int v2); +extern void bdd_default_reohandler(int); +extern void bdd_reorder(int); +extern int bdd_reorder_gain(void); +extern bddsizehandler bdd_reorder_probe(bddsizehandler); +extern void bdd_clrvarblocks(void); +extern int bdd_addvarblock(BDD, int); +extern int bdd_intaddvarblock(int, int, int); +extern void bdd_varblockall(void); +extern bddfilehandler bdd_blockfile_hook(bddfilehandler); +extern int bdd_autoreorder(int); +extern int bdd_autoreorder_times(int, int); +extern int bdd_var2level(int); +extern int bdd_level2var(int); +extern int bdd_getreorder_times(void); +extern int bdd_getreorder_method(void); +extern void bdd_enable_reorder(void); +extern void bdd_disable_reorder(void); +extern int bdd_reorder_verbose(int); +extern void bdd_setvarorder(int *); +extern void bdd_printorder(void); +extern void bdd_fprintorder(FILE *); + +#ifdef CPLUSPLUS +} +#endif + + +/*=== BDD constants ====================================================*/ + +#ifndef CPLUSPLUS + +extern const BDD bddfalse; +extern const BDD bddtrue; + +#endif /* CPLUSPLUS */ + + +/*=== Reordering algorithms ============================================*/ + +#define BDD_REORDER_NONE 0 +#define BDD_REORDER_WIN2 1 +#define BDD_REORDER_WIN2ITE 2 +#define BDD_REORDER_SIFT 3 +#define BDD_REORDER_SIFTITE 4 +#define BDD_REORDER_WIN3 5 +#define BDD_REORDER_WIN3ITE 6 +#define BDD_REORDER_RANDOM 7 + +#define BDD_REORDER_FREE 0 +#define BDD_REORDER_FIXED 1 + + +/*=== Error codes ======================================================*/ + +#define BDD_MEMORY (-1) /* Out of memory */ +#define BDD_VAR (-2) /* Unknown variable */ +#define BDD_RANGE (-3) /* Variable value out of range (not in domain) */ +#define BDD_DEREF (-4) /* Removing external reference to unknown node */ +#define BDD_RUNNING (-5) /* Called bdd_init() twice whithout bdd_done() */ +#define BDD_FILE (-6) /* Some file operation failed */ +#define BDD_FORMAT (-7) /* Incorrect file format */ +#define BDD_ORDER (-8) /* Vars. not in order for vector based functions */ +#define BDD_BREAK (-9) /* User called break */ +#define BDD_VARNUM (-10) /* Different number of vars. for vector pair */ +#define BDD_NODES (-11) /* Tried to set max. number of nodes to be fewer */ + /* than there already has been allocated */ +#define BDD_OP (-12) /* Unknown operator */ +#define BDD_VARSET (-13) /* Illegal variable set */ +#define BDD_VARBLK (-14) /* Bad variable block operation */ +#define BDD_DECVNUM (-15) /* Trying to decrease the number of variables */ +#define BDD_REPLACE (-16) /* Replacing to already existing variables */ +#define BDD_NODENUM (-17) /* Number of nodes reached user defined maximum */ +#define BDD_ILLBDD (-18) /* Illegal bdd argument */ +#define BDD_SIZE (-19) /* Illegal size argument */ + +#define BVEC_SIZE (-20) /* Mismatch in bitvector size */ +#define BVEC_SHIFT (-21) /* Illegal shift-left/right parameter */ +#define BVEC_DIVZERO (-22) /* Division by zero */ + +#define BDD_ERRNUM 24 + +/************************************************************************* + If this file is included from a C++ compiler then the following + classes, wrappers and hacks are supplied. +*************************************************************************/ +#ifdef CPLUSPLUS +#include + +/*=== User BDD class ===================================================*/ + +class bvec; + +class bdd +{ + public: + + bdd(void) { root=0; } + bdd(const bdd &r) { bdd_addref(root=r.root); } + ~bdd(void) { bdd_delref(root); } + + int id(void) const; + + bdd operator=(const bdd &r); + + bdd operator&(const bdd &r) const; + bdd operator&=(const bdd &r); + bdd operator^(const bdd &r) const; + bdd operator^=(const bdd &r); + bdd operator|(const bdd &r) const; + bdd operator|=(const bdd &r); + bdd operator!(void) const; + bdd operator>>(const bdd &r) const; + bdd operator>>=(const bdd &r); + bdd operator-(const bdd &r) const; + bdd operator-=(const bdd &r); + bdd operator>(const bdd &r) const; + bdd operator<(const bdd &r) const; + bdd operator<<(const bdd &r) const; + bdd operator<<=(const bdd &r); + int operator==(const bdd &r) const; + int operator!=(const bdd &r) const; + +private: + BDD root; + + bdd(BDD r) { bdd_addref(root=r); } + bdd operator=(BDD r); + + friend int bdd_init(int, int); + friend int bdd_setvarnum(int); + friend bdd bdd_true(void); + friend bdd bdd_false(void); + friend bdd bdd_ithvarpp(int); + friend bdd bdd_nithvarpp(int); + friend int bdd_var(const bdd &); + friend bdd bdd_low(const bdd &); + friend bdd bdd_high(const bdd &); + friend int bdd_scanset(const bdd &, int *&, int &); + friend bdd bdd_makesetpp(int *, int); + friend int bdd_setbddpair(bddPair*, int, const bdd &); + friend int bdd_setbddpairs(bddPair*, int*, const bdd *, int); + friend bdd bdd_buildcube(int, int, const bdd *); + friend bdd bdd_ibuildcubepp(int, int, int *); + friend bdd bdd_not(const bdd &); + friend bdd bdd_simplify(const bdd &, const bdd &); + friend bdd bdd_apply(const bdd &, const bdd &, int); + friend bdd bdd_and(const bdd &, const bdd &); + friend bdd bdd_or(const bdd &, const bdd &); + friend bdd bdd_xor(const bdd &, const bdd &); + friend bdd bdd_imp(const bdd &, const bdd &); + friend bdd bdd_biimp(const bdd &, const bdd &); + friend bdd bdd_ite(const bdd &, const bdd &, const bdd &); + friend bdd bdd_restrict(const bdd &, const bdd &); + friend bdd bdd_constrain(const bdd &, const bdd &); + friend bdd bdd_exist(const bdd &, const bdd &); + friend bdd bdd_forall(const bdd &, const bdd &); + friend bdd bdd_unique(const bdd &, const bdd &); + friend bdd bdd_appex(const bdd &, const bdd &, int, const bdd &); + friend bdd bdd_appall(const bdd &, const bdd &, int, const bdd &); + friend bdd bdd_appuni(const bdd &, const bdd &, int, const bdd &); + friend bdd bdd_replace(const bdd &, bddPair*); + friend bdd bdd_compose(const bdd &, const bdd &, int); + friend bdd bdd_veccompose(const bdd &, bddPair*); + friend bdd bdd_support(const bdd &); + friend bdd bdd_satone(const bdd &); + friend bdd bdd_satoneset(const bdd &, const bdd &, const bdd &); + friend bdd bdd_fullsatone(const bdd &); + friend void bdd_allsat(const bdd &r, bddallsathandler handler); + friend double bdd_satcount(const bdd &); + friend double bdd_satcountset(const bdd &, const bdd &); + friend double bdd_satcountln(const bdd &); + friend double bdd_satcountlnset(const bdd &, const bdd &); + friend int bdd_nodecount(const bdd &); + friend int bdd_anodecountpp(const bdd *, int); + friend int* bdd_varprofile(const bdd &); + friend double bdd_pathcount(const bdd &); + + friend void bdd_fprinttable(FILE *, const bdd &); + friend void bdd_printtable(const bdd &); + friend void bdd_fprintset(FILE *, const bdd &); + friend void bdd_printset(const bdd &); + friend void bdd_printdot(const bdd &); + friend int bdd_fnprintdot(char*, const bdd &); + friend void bdd_fprintdot(FILE*, const bdd &); + friend std::ostream &operator<<(std::ostream &, const bdd &); + friend int bdd_fnsave(char*, const bdd &); + friend int bdd_save(FILE*, const bdd &); + friend int bdd_fnload(char*, bdd &); + friend int bdd_load(FILE*, bdd &); + + friend bdd fdd_ithvarpp(int, int); + friend bdd fdd_ithsetpp(int); + friend bdd fdd_domainpp(int); + friend int fdd_scanvar(const bdd &, int); + friend int* fdd_scanallvar(const bdd &); + friend bdd fdd_equalspp(int, int); + friend void fdd_printset(const bdd &); + friend void fdd_fprintset(FILE*, const bdd &); + friend bdd fdd_makesetpp(int*, int); + friend int fdd_scanset(const bdd &, int *&, int &); + + friend int bdd_addvarblock(const bdd &, int); + + friend class bvec; + friend bvec bvec_ite(const bdd& a, const bvec& b, const bvec& c); + friend bvec bvec_shlfixed(const bvec &e, int pos, const bdd &c); + friend bvec bvec_shl(const bvec &left, const bvec &right, const bdd &c); + friend bvec bvec_shrfixed(const bvec &e, int pos, const bdd &c); + friend bvec bvec_shr(const bvec &left, const bvec &right, const bdd &c); + friend bdd bvec_lth(const bvec &left, const bvec &right); + friend bdd bvec_lte(const bvec &left, const bvec &right); + friend bdd bvec_gth(const bvec &left, const bvec &right); + friend bdd bvec_gte(const bvec &left, const bvec &right); + friend bdd bvec_equ(const bvec &left, const bvec &right); + friend bdd bvec_neq(const bvec &left, const bvec &right); +}; + + +/*=== BDD constants ====================================================*/ + +extern const bdd bddfalsepp; +extern const bdd bddtruepp; + +#define bddtrue bddtruepp +#define bddfalse bddfalsepp + +/*=== C++ interface ====================================================*/ + +extern int bdd_cpp_init(int, int); + +inline void bdd_stats(bddStat& s) +{ bdd_stats(&s); } + +inline bdd bdd_ithvarpp(int v) +{ return bdd_ithvar(v); } + +inline bdd bdd_nithvarpp(int v) +{ return bdd_nithvar(v); } + +inline int bdd_var(const bdd &r) +{ return bdd_var(r.root); } + +inline bdd bdd_low(const bdd &r) +{ return bdd_low(r.root); } + +inline bdd bdd_high(const bdd &r) +{ return bdd_high(r.root); } + +inline int bdd_scanset(const bdd &r, int *&v, int &n) +{ return bdd_scanset(r.root, &v, &n); } + +inline bdd bdd_makesetpp(int *v, int n) +{ return bdd(bdd_makeset(v,n)); } + +inline int bdd_setbddpair(bddPair *p, int ov, const bdd &nv) +{ return bdd_setbddpair(p,ov,nv.root); } + + /* In bddop.c */ + +inline bdd bdd_replace(const bdd &r, bddPair *p) +{ return bdd_replace(r.root, p); } + +inline bdd bdd_compose(const bdd &f, const bdd &g, int v) +{ return bdd_compose(f.root, g.root, v); } + +inline bdd bdd_veccompose(const bdd &f, bddPair *p) +{ return bdd_veccompose(f.root, p); } + +inline bdd bdd_restrict(const bdd &r, const bdd &var) +{ return bdd_restrict(r.root, var.root); } + +inline bdd bdd_constrain(const bdd &f, const bdd &c) +{ return bdd_constrain(f.root, c.root); } + +inline bdd bdd_simplify(const bdd &d, const bdd &b) +{ return bdd_simplify(d.root, b.root); } + +inline bdd bdd_ibuildcubepp(int v, int w, int *a) +{ return bdd_ibuildcube(v,w,a); } + +inline bdd bdd_not(const bdd &r) +{ return bdd_not(r.root); } + +inline bdd bdd_apply(const bdd &l, const bdd &r, int op) +{ return bdd_apply(l.root, r.root, op); } + +inline bdd bdd_and(const bdd &l, const bdd &r) +{ return bdd_apply(l.root, r.root, bddop_and); } + +inline bdd bdd_or(const bdd &l, const bdd &r) +{ return bdd_apply(l.root, r.root, bddop_or); } + +inline bdd bdd_xor(const bdd &l, const bdd &r) +{ return bdd_apply(l.root, r.root, bddop_xor); } + +inline bdd bdd_imp(const bdd &l, const bdd &r) +{ return bdd_apply(l.root, r.root, bddop_imp); } + +inline bdd bdd_biimp(const bdd &l, const bdd &r) +{ return bdd_apply(l.root, r.root, bddop_biimp); } + +inline bdd bdd_ite(const bdd &f, const bdd &g, const bdd &h) +{ return bdd_ite(f.root, g.root, h.root); } + +inline bdd bdd_exist(const bdd &r, const bdd &var) +{ return bdd_exist(r.root, var.root); } + +inline bdd bdd_forall(const bdd &r, const bdd &var) +{ return bdd_forall(r.root, var.root); } + +inline bdd bdd_unique(const bdd &r, const bdd &var) +{ return bdd_unique(r.root, var.root); } + +inline bdd bdd_appex(const bdd &l, const bdd &r, int op, const bdd &var) +{ return bdd_appex(l.root, r.root, op, var.root); } + +inline bdd bdd_appall(const bdd &l, const bdd &r, int op, const bdd &var) +{ return bdd_appall(l.root, r.root, op, var.root); } + +inline bdd bdd_appuni(const bdd &l, const bdd &r, int op, const bdd &var) +{ return bdd_appuni(l.root, r.root, op, var.root); } + +inline bdd bdd_support(const bdd &r) +{ return bdd_support(r.root); } + +inline bdd bdd_satone(const bdd &r) +{ return bdd_satone(r.root); } + +inline bdd bdd_satoneset(const bdd &r, const bdd &var, const bdd &pol) +{ return bdd_satoneset(r.root, var.root, pol.root); } + +inline bdd bdd_fullsatone(const bdd &r) +{ return bdd_fullsatone(r.root); } + +inline void bdd_allsat(const bdd &r, bddallsathandler handler) +{ bdd_allsat(r.root, handler); } + +inline double bdd_satcount(const bdd &r) +{ return bdd_satcount(r.root); } + +inline double bdd_satcountset(const bdd &r, const bdd &varset) +{ return bdd_satcountset(r.root, varset.root); } + +inline double bdd_satcountln(const bdd &r) +{ return bdd_satcountln(r.root); } + +inline double bdd_satcountlnset(const bdd &r, const bdd &varset) +{ return bdd_satcountlnset(r.root, varset.root); } + +inline int bdd_nodecount(const bdd &r) +{ return bdd_nodecount(r.root); } + +inline int* bdd_varprofile(const bdd &r) +{ return bdd_varprofile(r.root); } + +inline double bdd_pathcount(const bdd &r) +{ return bdd_pathcount(r.root); } + + + /* I/O extensions */ + +inline void bdd_fprinttable(FILE *file, const bdd &r) +{ bdd_fprinttable(file, r.root); } + +inline void bdd_printtable(const bdd &r) +{ bdd_printtable(r.root); } + +inline void bdd_fprintset(FILE *file, const bdd &r) +{ bdd_fprintset(file, r.root); } + +inline void bdd_printset(const bdd &r) +{ bdd_printset(r.root); } + +inline void bdd_printdot(const bdd &r) +{ bdd_printdot(r.root); } + +inline void bdd_fprintdot(FILE* ofile, const bdd &r) +{ bdd_fprintdot(ofile, r.root); } + +inline int bdd_fnprintdot(char* fname, const bdd &r) +{ return bdd_fnprintdot(fname, r.root); } + +inline int bdd_fnsave(char *fname, const bdd &r) +{ return bdd_fnsave(fname, r.root); } + +inline int bdd_save(FILE *ofile, const bdd &r) +{ return bdd_save(ofile, r.root); } + +inline int bdd_fnload(char *fname, bdd &r) +{ int lr,e; e=bdd_fnload(fname, &lr); r=bdd(lr); return e; } + +inline int bdd_load(FILE *ifile, bdd &r) +{ int lr,e; e=bdd_load(ifile, &lr); r=bdd(lr); return e; } + +inline int bdd_addvarblock(const bdd &v, int f) +{ return bdd_addvarblock(v.root, f); } + + /* Hack to allow for overloading */ +#define bdd_init bdd_cpp_init +#define bdd_ithvar bdd_ithvarpp +#define bdd_nithvar bdd_nithvarpp +#define bdd_makeset bdd_makesetpp +#define bdd_ibuildcube bdd_ibuildcubepp +#define bdd_anodecount bdd_anodecountpp + +/*=== Inline C++ functions =============================================*/ + +inline int bdd::id(void) const +{ return root; } + +inline bdd bdd::operator&(const bdd &r) const +{ return bdd_apply(*this,r,bddop_and); } + +inline bdd bdd::operator&=(const bdd &r) +{ return (*this=bdd_apply(*this,r,bddop_and)); } + +inline bdd bdd::operator^(const bdd &r) const +{ return bdd_apply(*this,r,bddop_xor); } + +inline bdd bdd::operator^=(const bdd &r) +{ return (*this=bdd_apply(*this,r,bddop_xor)); } + +inline bdd bdd::operator|(const bdd &r) const +{ return bdd_apply(*this,r,bddop_or); } + +inline bdd bdd::operator|=(const bdd &r) +{ return (*this=bdd_apply(*this,r,bddop_or)); } + +inline bdd bdd::operator!(void) const +{ return bdd_not(*this);} + +inline bdd bdd::operator>>(const bdd &r) const +{ return bdd_apply(*this,r,bddop_imp); } + +inline bdd bdd::operator>>=(const bdd &r) +{ return (*this=bdd_apply(*this,r,bddop_imp)); } + +inline bdd bdd::operator-(const bdd &r) const +{ return bdd_apply(*this,r,bddop_diff); } + +inline bdd bdd::operator-=(const bdd &r) +{ return (*this=bdd_apply(*this,r,bddop_diff)); } + +inline bdd bdd::operator>(const bdd &r) const +{ return bdd_apply(*this,r,bddop_diff); } + +inline bdd bdd::operator<(const bdd &r) const +{ return bdd_apply(*this,r,bddop_less); } + +inline bdd bdd::operator<<(const bdd &r) const +{ return bdd_apply(*this,r,bddop_invimp); } + +inline bdd bdd::operator<<=(const bdd &r) +{ return (*this=bdd_apply(*this,r,bddop_invimp)); } + +inline int bdd::operator==(const bdd &r) const +{ return r.root==root; } + +inline int bdd::operator!=(const bdd &r) const +{ return r.root!=root; } + +inline bdd bdd_true(void) +{ return 1; } + +inline bdd bdd_false(void) +{ return 0; } + + +/*=== Iostream printing ================================================*/ + +class bdd_ioformat +{ + public: + bdd_ioformat(int f) { format=f; } + private: + bdd_ioformat(void) { } + int format; + static int curformat; + + friend std::ostream &operator<<(std::ostream &, const bdd_ioformat &); + friend std::ostream &operator<<(std::ostream &, const bdd &); +}; + +std::ostream &operator<<(std::ostream &, const bdd &); +std::ostream &operator<<(std::ostream &, const bdd_ioformat &); + +extern bdd_ioformat bddset; +extern bdd_ioformat bddtable; +extern bdd_ioformat bdddot; +extern bdd_ioformat bddall; +extern bdd_ioformat fddset; + +typedef void (*bddstrmhandler)(std::ostream &, int); + +extern bddstrmhandler bdd_strm_hook(bddstrmhandler); + +#endif /* CPLUSPLUS */ + +#endif /* _BDD_H */ + +/* EOF */ diff --git a/buddy/src/bddio.c b/buddy/src/bddio.c new file mode 100644 index 000000000..a73daec7f --- /dev/null +++ b/buddy/src/bddio.c @@ -0,0 +1,593 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/bddio.c,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: bddio.c + DESCR: File I/O routines for BDD package + AUTH: Jorn Lind + DATE: (C) june 1997 +*************************************************************************/ +#include +#include +#include +#include +#include +#include "kernel.h" + +static void bdd_printset_rec(FILE *, int, int *); +static void bdd_fprintdot_rec(FILE*, BDD); +static int bdd_save_rec(FILE*, int); +static int bdd_loaddata(FILE *); +static int loadhash_get(int); +static void loadhash_add(int, int); + +static bddfilehandler filehandler; + +typedef struct s_LoadHash +{ + int key; + int data; + int first; + int next; +} LoadHash; + +static LoadHash *lh_table; +static int lh_freepos; +static int lh_nodenum; +static int *loadvar2level; + +/*=== PRINTING ========================================================*/ + + +/* +NAME {* bdd\_file\_hook *} +SECTION {* kernel *} +SHORT {* Specifies a printing callback handler *} +PROTO {* bddfilehandler bdd_file_hook(bddfilehandler handler) *} +DESCR {* A printing callback handler for use with BDDs is used to + convert the BDD variable number into something readable by the + end user. Typically the handler will print a string name + instead of the number. A handler could look like this: + \begin{verbatim} +void printhandler(FILE *o, int var) +{ + extern char **names; + fprintf(o, "%s", names[var]); +} +\end{verbatim} + + \noindent + The handler can then be passed to BuDDy like this: + {\tt bdd\_file\_hook(printhandler)}. + + No default handler is supplied. The argument {\tt handler} may be + NULL if no handler is needed. *} +RETURN {* The old handler *} +ALSO {* bdd\_printset, bdd\_strm\_hook, fdd\_file\_hook *} +*/ +bddfilehandler bdd_file_hook(bddfilehandler handler) +{ + bddfilehandler old = filehandler; + filehandler = handler; + return old; +} + + +/* +NAME {* bdd\_printall *} +EXTRA {* bdd\_fprintall *} +SECTION {* fileio *} +SHORT {* prints all used entries in the node table *} +PROTO {* void bdd_printall(void) +void bdd_fprintall(FILE* ofile) *} +DESCR {* Prints to either stdout or the file {\tt ofile} all the used + entries in the main node table. The format is: + \begin{Ill} + {\tt [Nodenum] Var/level Low High} + \end{Ill} + Where {\tt Nodenum} is the position in the node table and level + is the position in the current variable order. *} +ALSO {* bdd\_printtable, bdd\_printset, bdd\_printdot *} +*/ +void bdd_printall(void) +{ + bdd_fprintall(stdout); +} + + +void bdd_fprintall(FILE *ofile) +{ + int n; + + for (n=0 ; n\\ + < $x_{2,1}:c_{2,1},\ldots,x_{2,n_2}:c_{2,n_2}$ >\\ + $\ldots$ \\ + < $x_{N,1}:c_{N,1},\ldots,x_{N,n_3}:c_{N,n_3}$ > } + \end{Ill} + Where the $x$'s are variable numbers (and the position in the + current order) and the $c$'s are the + possible assignments to these. Each set of brackets designates + one possible assignment to the set of variables that make up the + BDD. All variables not shown are don't cares. It is possible to + specify a callback handler for printing of the variables using + {\tt bdd\_file\_hook} or {\tt bdd\_strm\_hook}. *} +ALSO {* bdd\_printall, bdd\_printtable, bdd\_printdot, bdd\_file\_hook, bdd\_strm\_hook *} +*/ +void bdd_printset(BDD r) +{ + bdd_fprintset(stdout, r); +} + + +void bdd_fprintset(FILE *ofile, BDD r) +{ + int *set; + + if (r < 2) + { + fprintf(ofile, "%s", r == 0 ? "F" : "T"); + return; + } + + if ((set=(int *)malloc(sizeof(int)*bddvarnum)) == NULL) + { + bdd_error(BDD_MEMORY); + return; + } + + memset(set, 0, sizeof(int) * bddvarnum); + bdd_printset_rec(ofile, r, set); + free(set); +} + + +static void bdd_printset_rec(FILE *ofile, int r, int *set) +{ + int n; + int first; + + if (r == 0) + return; + else + if (r == 1) + { + fprintf(ofile, "<"); + first = 1; + + for (n=0 ; n 0) + { + if (!first) + fprintf(ofile, ", "); + first = 0; + if (filehandler) + filehandler(ofile, bddlevel2var[n]); + else + fprintf(ofile, "%d", bddlevel2var[n]); + fprintf(ofile, ":%d", (set[n]==2 ? 1 : 0)); + } + } + + fprintf(ofile, ">"); + } + else + { + set[LEVEL(r)] = 1; + bdd_printset_rec(ofile, LOW(r), set); + + set[LEVEL(r)] = 2; + bdd_printset_rec(ofile, HIGH(r), set); + + set[LEVEL(r)] = 0; + } +} + + +/* +NAME {* bdd\_printdot *} +EXTRA {* bdd\_fprintdot *} +SECTION {* fileio *} +SHORT {* prints a description of a BDD in DOT format *} +PROTO {* void bdd_printdot(BDD r) +int bdd_fnprintdot(char* fname, BDD r) +void bdd_fprintdot(FILE* ofile, BDD r) *} +DESCR {* Prints a BDD in a format suitable for use with the graph + drawing program DOT to either stdout, a designated file + {\tt ofile} or the file named by {\tt fname}. In the last case + the file will be opened for writing, any previous contents + destroyed and then closed again. *} +ALSO {* bdd\_printall, bdd\_printtable, bdd\_printset *} +*/ +void bdd_printdot(BDD r) +{ + bdd_fprintdot(stdout, r); +} + + +int bdd_fnprintdot(char *fname, BDD r) +{ + FILE *ofile = fopen(fname, "w"); + if (ofile == NULL) + return bdd_error(BDD_FILE); + bdd_fprintdot(ofile, r); + fclose(ofile); + return 0; +} + + +void bdd_fprintdot(FILE* ofile, BDD r) +{ + fprintf(ofile, "digraph G {\n"); + fprintf(ofile, "0 [shape=box, label=\"0\", style=filled, shape=box, height=0.3, width=0.3];\n"); + fprintf(ofile, "1 [shape=box, label=\"1\", style=filled, shape=box, height=0.3, width=0.3];\n"); + + bdd_fprintdot_rec(ofile, r); + + fprintf(ofile, "}\n"); + + bdd_unmark(r); +} + + +static void bdd_fprintdot_rec(FILE* ofile, BDD r) +{ + if (ISCONST(r) || MARKED(r)) + return; + + fprintf(ofile, "%d [label=\"", r); + if (filehandler) + filehandler(ofile, bddlevel2var[LEVEL(r)]); + else + fprintf(ofile, "%d", bddlevel2var[LEVEL(r)]); + fprintf(ofile, "\"];\n"); + + fprintf(ofile, "%d -> %d [style=dotted];\n", r, LOW(r)); + fprintf(ofile, "%d -> %d [style=filled];\n", r, HIGH(r)); + + SETMARK(r); + + bdd_fprintdot_rec(ofile, LOW(r)); + bdd_fprintdot_rec(ofile, HIGH(r)); +} + + +/*=== SAVE =============================================================*/ + +/* +NAME {* bdd\_save *} +EXTRA {* bdd\_fnsave *} +SECTION {* fileio *} +SHORT {* saves a BDD to a file *} +PROTO {* int bdd_fnsave(char *fname, BDD r) +int bdd_save(FILE *ofile, BDD r) *} +DESCR {* Saves the nodes used by {\tt r} to either a file {\tt ofile} + which must be opened for writing or to the file named {\tt fname}. + In the last case the file will be truncated and opened for + writing. *} +ALSO {* bdd\_load *} +RETURN {* Zero on succes, otherwise an error code from {\tt bdd.h}. *} +*/ +int bdd_fnsave(char *fname, BDD r) +{ + FILE *ofile; + int ok; + + if ((ofile=fopen(fname,"w")) == NULL) + return bdd_error(BDD_FILE); + + ok = bdd_save(ofile, r); + fclose(ofile); + return ok; +} + + +int bdd_save(FILE *ofile, BDD r) +{ + int err, n=0; + + if (r < 2) + { + fprintf(ofile, "0 0 %d\n", r); + return 0; + } + + bdd_markcount(r, &n); + bdd_unmark(r); + fprintf(ofile, "%d %d\n", n, bddvarnum); + + for (n=0 ; n bddvarnum) + bdd_setvarnum(vnum); + + if ((lh_table=(LoadHash*)malloc(lh_nodenum*sizeof(LoadHash))) == NULL) + return bdd_error(BDD_MEMORY); + + for (n=0 ; n= 2) + low = loadhash_get(low); + if (high >= 2) + high = loadhash_get(high); + + if (low<0 || high<0 || var<0) + return bdd_error(BDD_FORMAT); + + root = bdd_addref( bdd_ite(bdd_ithvar(var), high, low) ); + + loadhash_add(key, root); + } + + return root; +} + + +static void loadhash_add(int key, int data) +{ + int hash = key % lh_nodenum; + int pos = lh_freepos; + + lh_freepos = lh_table[pos].next; + lh_table[pos].next = lh_table[hash].first; + lh_table[hash].first = pos; + + lh_table[pos].key = key; + lh_table[pos].data = data; +} + + +static int loadhash_get(int key) +{ + int hash = lh_table[key % lh_nodenum].first; + + while (hash != -1 && lh_table[hash].key != key) + hash = lh_table[hash].next; + + if (hash == -1) + return -1; + return lh_table[hash].data; +} + + +/* EOF */ diff --git a/buddy/src/bddop.c b/buddy/src/bddop.c new file mode 100644 index 000000000..93e0e6a7c --- /dev/null +++ b/buddy/src/bddop.c @@ -0,0 +1,2832 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/bddop.c,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: bddop.c + DESCR: BDD operators + AUTH: Jorn Lind + DATE: (C) nov 1997 +*************************************************************************/ +#include +#include +#include +#include +#include + +#include "kernel.h" +#include "cache.h" + + /* Hash value modifiers to distinguish between entries in misccache */ +#define CACHEID_CONSTRAIN 0x0 +#define CACHEID_RESTRICT 0x1 +#define CACHEID_SATCOU 0x2 +#define CACHEID_SATCOULN 0x3 +#define CACHEID_PATHCOU 0x4 + + /* Hash value modifiers for replace/compose */ +#define CACHEID_REPLACE 0x0 +#define CACHEID_COMPOSE 0x1 +#define CACHEID_VECCOMPOSE 0x2 + + /* Hash value modifiers for quantification */ +#define CACHEID_EXIST 0x0 +#define CACHEID_FORALL 0x1 +#define CACHEID_UNIQUE 0x2 +#define CACHEID_APPEX 0x3 +#define CACHEID_APPAL 0x4 +#define CACHEID_APPUN 0x5 + + + /* Number of boolean operators */ +#define OPERATOR_NUM 11 + + /* Operator results - entry = left<<1 | right (left,right in {0,1}) */ +static int oprres[OPERATOR_NUM][4] = +{ {0,0,0,1}, /* and ( & ) */ + {0,1,1,0}, /* xor ( ^ ) */ + {0,1,1,1}, /* or ( | ) */ + {1,1,1,0}, /* nand */ + {1,0,0,0}, /* nor */ + {1,1,0,1}, /* implication ( >> ) */ + {1,0,0,1}, /* bi-implication */ + {0,0,1,0}, /* difference /greater than ( - ) ( > ) */ + {0,1,0,0}, /* less than ( < ) */ + {1,0,1,1}, /* inverse implication ( << ) */ + {1,1,0,0} /* not ( ! ) */ +}; + + + /* Variables needed for the operators */ +static int applyop; /* Current operator for apply */ +static int appexop; /* Current operator for appex */ +static int appexid; /* Current cache id for appex */ +static int quantid; /* Current cache id for quantifications */ +static int *quantvarset; /* Current variable set for quant. */ +static int quantvarsetID; /* Current id used in quantvarset */ +static int quantlast; /* Current last variable to be quant. */ +static int replaceid; /* Current cache id for replace */ +static int *replacepair; /* Current replace pair */ +static int replacelast; /* Current last var. level to replace */ +static int composelevel; /* Current variable used for compose */ +static int miscid; /* Current cache id for other results */ +static int *varprofile; /* Current variable profile */ +static int supportID; /* Current ID (true value) for support */ +static int supportMin; /* Min. used level in support calc. */ +static int supportMax; /* Max. used level in support calc. */ +static int* supportSet; /* The found support set */ +static BddCache applycache; /* Cache for apply results */ +static BddCache itecache; /* Cache for ITE results */ +static BddCache quantcache; /* Cache for exist/forall results */ +static BddCache appexcache; /* Cache for appex/appall results */ +static BddCache replacecache; /* Cache for replace results */ +static BddCache misccache; /* Cache for other results */ +static int cacheratio; +static BDD satPolarity; +static int firstReorder; /* Used instead of local variable in order + to avoid compiler warning about 'first' + being clobbered by setjmp */ + +static char* allsatProfile; /* Variable profile for bdd_allsat() */ +static bddallsathandler allsatHandler; /* Callback handler for bdd_allsat() */ + +extern bddCacheStat bddcachestats; + + /* Internal prototypes */ +static BDD not_rec(BDD); +static BDD apply_rec(BDD, BDD); +static BDD ite_rec(BDD, BDD, BDD); +static int simplify_rec(BDD, BDD); +static int quant_rec(int); +static int appquant_rec(int, int); +static int restrict_rec(int); +static BDD constrain_rec(BDD, BDD); +static BDD replace_rec(BDD); +static BDD bdd_correctify(int, BDD, BDD); +static BDD compose_rec(BDD, BDD); +static BDD veccompose_rec(BDD); +static void support_rec(int, int*); +static BDD satone_rec(BDD); +static BDD satoneset_rec(BDD, BDD); +static int fullsatone_rec(int); +static void allsat_rec(BDD r); +static double satcount_rec(int); +static double satcountln_rec(int); +static void varprofile_rec(int); +static double bdd_pathcount_rec(BDD); +static int varset2vartable(BDD); +static int varset2svartable(BDD); + + + /* Hashvalues */ +#define NOTHASH(r) (r) +#define APPLYHASH(l,r,op) (TRIPLE(l,r,op)) +#define ITEHASH(f,g,h) (TRIPLE(f,g,h)) +#define RESTRHASH(r,var) (PAIR(r,var)) +#define CONSTRAINHASH(f,c) (PAIR(f,c)) +#define QUANTHASH(r) (r) +#define REPLACEHASH(r) (r) +#define VECCOMPOSEHASH(f) (f) +#define COMPOSEHASH(f,g) (PAIR(f,g)) +#define SATCOUHASH(r) (r) +#define PATHCOUHASH(r) (r) +#define APPEXHASH(l,r,op) (PAIR(l,r)) + +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif + +#define log1p(a) (log(1.0+a)) + +#define INVARSET(a) (quantvarset[a] == quantvarsetID) /* unsigned check */ +#define INSVARSET(a) (abs(quantvarset[a]) == quantvarsetID) /* signed check */ + +/************************************************************************* + Setup and shutdown +*************************************************************************/ + +int bdd_operator_init(int cachesize) +{ + if (BddCache_init(&applycache,cachesize) < 0) + return bdd_error(BDD_MEMORY); + + if (BddCache_init(&itecache,cachesize) < 0) + return bdd_error(BDD_MEMORY); + + if (BddCache_init(&quantcache,cachesize) < 0) + return bdd_error(BDD_MEMORY); + + if (BddCache_init(&appexcache,cachesize) < 0) + return bdd_error(BDD_MEMORY); + + if (BddCache_init(&replacecache,cachesize) < 0) + return bdd_error(BDD_MEMORY); + + if (BddCache_init(&misccache,cachesize) < 0) + return bdd_error(BDD_MEMORY); + + quantvarsetID = 0; + quantvarset = NULL; + cacheratio = 0; + supportSet = NULL; + + return 0; +} + + +void bdd_operator_done(void) +{ + if (quantvarset != NULL) + free(quantvarset); + + BddCache_done(&applycache); + BddCache_done(&itecache); + BddCache_done(&quantcache); + BddCache_done(&appexcache); + BddCache_done(&replacecache); + BddCache_done(&misccache); + + if (supportSet != NULL) + free(supportSet); +} + + +void bdd_operator_reset(void) +{ + BddCache_reset(&applycache); + BddCache_reset(&itecache); + BddCache_reset(&quantcache); + BddCache_reset(&appexcache); + BddCache_reset(&replacecache); + BddCache_reset(&misccache); +} + + +void bdd_operator_varresize(void) +{ + if (quantvarset != NULL) + free(quantvarset); + + if ((quantvarset=NEW(int,bddvarnum)) == NULL) + bdd_error(BDD_MEMORY); + + memset(quantvarset, 0, sizeof(int)*bddvarnum); + quantvarsetID = 0; +} + + +static void bdd_operator_noderesize(void) +{ + if (cacheratio > 0) + { + int newcachesize = bddnodesize / cacheratio; + + BddCache_resize(&applycache, newcachesize); + BddCache_resize(&itecache, newcachesize); + BddCache_resize(&quantcache, newcachesize); + BddCache_resize(&appexcache, newcachesize); + BddCache_resize(&replacecache, newcachesize); + BddCache_resize(&misccache, newcachesize); + } +} + + +/************************************************************************* + Other +*************************************************************************/ + +/* +NAME {* bdd\_setcacheratio *} +SECTION {* kernel *} +SHORT {* Sets the cache ratio for the operator caches *} +PROTO {* int bdd_setcacheratio(int r) *} +DESCR {* The ratio between the number of nodes in the nodetable + and the number of entries in the operator cachetables is called + the cache ratio. So a cache ratio of say, four, allocates one cache + entry for each four unique node entries. This value can be set with + {\tt bdd\_setcacheratio} to any positive value. When this is done + the caches are resized instantly to fit the new ratio. + The default is a fixed cache size determined at + initialization time. *} +RETURN {* The previous cache ratio or a negative number on error. *} +ALSO {* bdd\_init *} +*/ +int bdd_setcacheratio(int r) +{ + int old = cacheratio; + + if (r <= 0) + return bdd_error(BDD_RANGE); + if (bddnodesize == 0) + return old; + + cacheratio = r; + bdd_operator_noderesize(); + return old; +} + + +/************************************************************************* + Operators +*************************************************************************/ + +static void checkresize(void) +{ + if (bddresized) + bdd_operator_noderesize(); + bddresized = 0; +} + + +/*=== BUILD A CUBE =====================================================*/ + +/* +NAME {* bdd\_buildcube *} +EXTRA {* bdd\_ibuildcube *} +SECTION {* operator *} +SHORT {* build a cube from an array of variables *} +PROTO {* BDD bdd_buildcube(int value, int width, BDD *var) +BDD bdd_ibuildcube(int value, int width, int *var)*} +DESCR {* This function builds a cube from the variables in {\tt + var}. It does so by interpreting the {\tt width} low order + bits of {\tt value} as a bit mask--a set bit indicates that the + variable should be added in it's positive form, and a cleared + bit the opposite. The most significant bits are encoded with + the first variables in {\tt var}. Consider as an example + the call {\tt bdd\_buildcube(0xB, 4, var)}. This corresponds + to the expression: $var[0] \conj \neg var[1] \conj var[2] + \conj var[3]$. The first version of the function takes an array + of BDDs, whereas the second takes an array of variable numbers + as used in {\tt bdd\_ithvar}. *} +RETURN {* The resulting cube *} +ALSO {* bdd\_ithvar, fdd\_ithvar *} +*/ +BDD bdd_buildcube(int value, int width, BDD *variables) +{ + BDD result = BDDONE; + int z; + + for (z=0 ; z>=1) + { + BDD tmp; + BDD v; + + if (value & 0x1) + v = bdd_addref( variables[width-z-1] ); + else + v = bdd_addref( bdd_not(variables[width-z-1]) ); + + bdd_addref(result); + tmp = bdd_apply(result,v,bddop_and); + bdd_delref(result); + bdd_delref(v); + + result = tmp; + } + + return result; +} + + +BDD bdd_ibuildcube(int value, int width, int *variables) +{ + BDD result = BDDONE; + int z; + + for (z=0 ; z>=1) + { + BDD tmp; + BDD v; + + if (value & 0x1) + v = bdd_ithvar(variables[width-z-1]); + else + v = bdd_nithvar(variables[width-z-1]); + + bdd_addref(result); + tmp = bdd_apply(result,v,bddop_and); + bdd_delref(result); + + result = tmp; + } + + return result; +} + + +/*=== NOT ==============================================================*/ + +/* +NAME {* bdd\_not *} +SECTION {* operator *} +SHORT {* negates a bdd *} +PROTO {* BDD bdd_not(BDD r) *} +DESCR {* Negates the BDD {\tt r} by exchanging + all references to the zero-terminal with references to the + one-terminal and vice versa. *} +RETURN {* The negated bdd. *} +*/ +BDD bdd_not(BDD r) +{ + BDD res; + firstReorder = 1; + CHECKa(r, bddfalse); + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + + if (!firstReorder) + bdd_disable_reorder(); + res = not_rec(r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD not_rec(BDD r) +{ + BddCacheData *entry; + BDD res; + + if (ISZERO(r)) + return BDDONE; + if (ISONE(r)) + return BDDZERO; + + entry = BddCache_lookup(&applycache, NOTHASH(r)); + + if (entry->a == r && entry->c == bddop_not) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + PUSHREF( not_rec(LOW(r)) ); + PUSHREF( not_rec(HIGH(r)) ); + res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); + POPREF(2); + + entry->a = r; + entry->c = bddop_not; + entry->r.res = res; + + return res; +} + + +/*=== APPLY ============================================================*/ + +/* +NAME {* bdd\_apply *} +SECTION {* operator *} +SHORT {* basic bdd operations *} +PROTO {* BDD bdd_apply(BDD left, BDD right, int opr) *} +DESCR {* The {\tt bdd\_apply} function performs all of the basic + bdd operations with two operands, such as AND, OR etc. + The {\tt left} argument is the left bdd operand and {\tt right} + is the right operand. The {\tt opr} argument is the requested + operation and must be one of the following\\ + + \begin{tabular}{lllc} + {\bf Identifier} & {\bf Description} & {\bf Truth table} + & {\bf C++ opr.} \\ + {\tt bddop\_and} & logical and ($A \wedge B$) & [0,0,0,1] + & \verb%&% \\ + {\tt bddop\_xor} & logical xor ($A \oplus B$) & [0,1,1,0] + & \verb%^% \\ + {\tt bddop\_or} & logical or ($A \vee B$) & [0,1,1,1] + & \verb%|% \\ + {\tt bddop\_nand} & logical not-and & [1,1,1,0] \\ + {\tt bddop\_nor} & logical not-or & [1,0,0,0] \\ + {\tt bddop\_imp} & implication ($A \Rightarrow B$) & [1,1,0,1] + & \verb%>>% \\ + {\tt bddop\_biimp} & bi-implication ($A \Leftrightarrow B$)& [1,0,0,1] \\ + {\tt bddop\_diff} & set difference ($A \setminus B$) & [0,0,1,0] + & \verb%-% \\ + {\tt bddop\_less} & less than ($A < B$) & [0,1,0,0] + & \verb%<% \\ + {\tt bddop\_invimp} & reverse implication ($A \Leftarrow B$)& [1,0,1,1] + & \verb%<<% \\ + \end{tabular} + *} + RETURN {* The result of the operation. *} + ALSO {* bdd\_ite *} +*/ +BDD bdd_apply(BDD l, BDD r, int op) +{ + BDD res; + firstReorder = 1; + + CHECKa(l, bddfalse); + CHECKa(r, bddfalse); + + if (op<0 || op>bddop_invimp) + { + bdd_error(BDD_OP); + return bddfalse; + } + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + applyop = op; + + if (!firstReorder) + bdd_disable_reorder(); + res = apply_rec(l, r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD apply_rec(BDD l, BDD r) +{ + BddCacheData *entry; + BDD res; + + switch (applyop) + { + case bddop_and: + if (l == r) + return l; + if (ISZERO(l) || ISZERO(r)) + return 0; + if (ISONE(l)) + return r; + if (ISONE(r)) + return l; + break; + case bddop_or: + if (l == r) + return l; + if (ISONE(l) || ISONE(r)) + return 1; + if (ISZERO(l)) + return r; + if (ISZERO(r)) + return l; + break; + case bddop_xor: + if (l == r) + return 0; + if (ISZERO(l)) + return r; + if (ISZERO(r)) + return l; + break; + case bddop_nand: + if (ISZERO(l) || ISZERO(r)) + return 1; + break; + case bddop_nor: + if (ISONE(l) || ISONE(r)) + return 0; + break; + case bddop_imp: + if (ISZERO(l)) + return 1; + if (ISONE(l)) + return r; + if (ISONE(r)) + return 1; + break; + } + + if (ISCONST(l) && ISCONST(r)) + res = oprres[applyop][l<<1 | r]; + else + { + entry = BddCache_lookup(&applycache, APPLYHASH(l,r,applyop)); + + if (entry->a == l && entry->b == r && entry->c == applyop) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + if (LEVEL(l) == LEVEL(r)) + { + PUSHREF( apply_rec(LOW(l), LOW(r)) ); + PUSHREF( apply_rec(HIGH(l), HIGH(r)) ); + res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); + } + else + if (LEVEL(l) < LEVEL(r)) + { + PUSHREF( apply_rec(LOW(l), r) ); + PUSHREF( apply_rec(HIGH(l), r) ); + res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); + } + else + { + PUSHREF( apply_rec(l, LOW(r)) ); + PUSHREF( apply_rec(l, HIGH(r)) ); + res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); + } + + POPREF(2); + + entry->a = l; + entry->b = r; + entry->c = applyop; + entry->r.res = res; + } + + return res; +} + + +/* +NAME {* bdd\_and *} +SECTION {* operator *} +SHORT {* The logical 'and' of two BDDs *} +PROTO {* BDD bdd_and(BDD l, BDD r) *} +DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_and)}. *} +RETURN {* The logical 'and' of {\tt l} and {\tt r}. *} +ALSO {* bdd\_apply, bdd\_or, bdd\_xor *} +*/ +BDD bdd_and(BDD l, BDD r) +{ + return bdd_apply(l,r,bddop_and); +} + + +/* +NAME {* bdd\_or *} +SECTION {* operator *} +SHORT {* The logical 'or' of two BDDs *} +PROTO {* BDD bdd_or(BDD l, BDD r) *} +DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_or)}. *} +RETURN {* The logical 'or' of {\tt l} and {\tt r}. *} +ALSO {* bdd\_apply, bdd\_xor, bdd\_and *} +*/ +BDD bdd_or(BDD l, BDD r) +{ + return bdd_apply(l,r,bddop_or); +} + + +/* +NAME {* bdd\_xor *} +SECTION {* operator *} +SHORT {* The logical 'xor' of two BDDs *} +PROTO {* BDD bdd_xor(BDD l, BDD r) *} +DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_xor)}. *} +RETURN {* The logical 'xor' of {\tt l} and {\tt r}. *} +ALSO {* bdd\_apply, bdd\_or, bdd\_and *} +*/ +BDD bdd_xor(BDD l, BDD r) +{ + return bdd_apply(l,r,bddop_xor); +} + + +/* +NAME {* bdd\_imp *} +SECTION {* operator *} +SHORT {* The logical 'implication' between two BDDs *} +PROTO {* BDD bdd_imp(BDD l, BDD r) *} +DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_imp)}. *} +RETURN {* The logical 'implication' of {\tt l} and {\tt r} ($l \Rightarrow r$). *} +ALSO {* bdd\_apply, bdd\_biimp *} +*/ +BDD bdd_imp(BDD l, BDD r) +{ + return bdd_apply(l,r,bddop_imp); +} + + +/* +NAME {* bdd\_biimp *} +SECTION {* operator *} +SHORT {* The logical 'bi-implication' between two BDDs *} +PROTO {* BDD bdd_biimp(BDD l, BDD r) *} +DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_biimp)}. *} +RETURN {* The logical 'bi-implication' of {\tt l} and {\tt r} ($l \Leftrightarrow r$). *} +ALSO {* bdd\_apply, bdd\_imp *} +*/ +BDD bdd_biimp(BDD l, BDD r) +{ + return bdd_apply(l,r,bddop_biimp); +} + + +/*=== ITE ==============================================================*/ + +/* +NAME {* bdd\_ite *} +SECTION {* operator *} +SHORT {* if-then-else operator *} +PROTO {* BDD bdd_ite(BDD f, BDD g, BDD h) *} +DESCR {* Calculates the BDD for the expression + $(f \conj g) \disj (\neg f \conj h)$ more efficiently than doing + the three operations separately. {\tt bdd\_ite} can also be used + for conjunction, disjunction and any other boolean operator, but + is not as efficient for the binary and unary operations. *} +RETURN {* The BDD for $(f \conj g) \disj (\neg f \conj h)$ *} +ALSO {* bdd\_apply *} +*/ +BDD bdd_ite(BDD f, BDD g, BDD h) +{ + BDD res; + firstReorder = 1; + + CHECKa(f, bddfalse); + CHECKa(g, bddfalse); + CHECKa(h, bddfalse); + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + + if (!firstReorder) + bdd_disable_reorder(); + res = ite_rec(f,g,h); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD ite_rec(BDD f, BDD g, BDD h) +{ + BddCacheData *entry; + BDD res; + + if (ISONE(f)) + return g; + if (ISZERO(f)) + return h; + if (g == h) + return g; + if (ISONE(g) && ISZERO(h)) + return f; + if (ISZERO(g) && ISONE(h)) + return not_rec(f); + + entry = BddCache_lookup(&itecache, ITEHASH(f,g,h)); + if (entry->a == f && entry->b == g && entry->c == h) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + if (LEVEL(f) == LEVEL(g)) + { + if (LEVEL(f) == LEVEL(h)) + { + PUSHREF( ite_rec(LOW(f), LOW(g), LOW(h)) ); + PUSHREF( ite_rec(HIGH(f), HIGH(g), HIGH(h)) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + } + else + if (LEVEL(f) < LEVEL(h)) + { + PUSHREF( ite_rec(LOW(f), LOW(g), h) ); + PUSHREF( ite_rec(HIGH(f), HIGH(g), h) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + } + else /* f > h */ + { + PUSHREF( ite_rec(f, g, LOW(h)) ); + PUSHREF( ite_rec(f, g, HIGH(h)) ); + res = bdd_makenode(LEVEL(h), READREF(2), READREF(1)); + } + } + else + if (LEVEL(f) < LEVEL(g)) + { + if (LEVEL(f) == LEVEL(h)) + { + PUSHREF( ite_rec(LOW(f), g, LOW(h)) ); + PUSHREF( ite_rec(HIGH(f), g, HIGH(h)) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + } + else + if (LEVEL(f) < LEVEL(h)) + { + PUSHREF( ite_rec(LOW(f), g, h) ); + PUSHREF( ite_rec(HIGH(f), g, h) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + } + else /* f > h */ + { + PUSHREF( ite_rec(f, g, LOW(h)) ); + PUSHREF( ite_rec(f, g, HIGH(h)) ); + res = bdd_makenode(LEVEL(h), READREF(2), READREF(1)); + } + } + else /* f > g */ + { + if (LEVEL(g) == LEVEL(h)) + { + PUSHREF( ite_rec(f, LOW(g), LOW(h)) ); + PUSHREF( ite_rec(f, HIGH(g), HIGH(h)) ); + res = bdd_makenode(LEVEL(g), READREF(2), READREF(1)); + } + else + if (LEVEL(g) < LEVEL(h)) + { + PUSHREF( ite_rec(f, LOW(g), h) ); + PUSHREF( ite_rec(f, HIGH(g), h) ); + res = bdd_makenode(LEVEL(g), READREF(2), READREF(1)); + } + else /* g > h */ + { + PUSHREF( ite_rec(f, g, LOW(h)) ); + PUSHREF( ite_rec(f, g, HIGH(h)) ); + res = bdd_makenode(LEVEL(h), READREF(2), READREF(1)); + } + } + + POPREF(2); + + entry->a = f; + entry->b = g; + entry->c = h; + entry->r.res = res; + + return res; +} + + +/*=== RESTRICT =========================================================*/ + +/* +NAME {* bdd\_restrict *} +SECTION {* operator *} +SHORT {* restric a set of variables to constant values *} +PROTO {* BDD bdd_restrict(BDD r, BDD var) *} +DESCR {* This function restricts the variables in {\tt r} to constant + true or false. How this is done + depends on how the variables are included in the variable set + {\tt var}. If they + are included in their positive form then they are restricted to + true and vice versa. Unfortunately it is not possible to + insert variables in their negated form using {\tt bdd\_makeset}, + so the variable set has to be build manually as a + conjunction of the variables. Example: Assume variable 1 should be + restricted to true and variable 3 to false. + \begin{verbatim} + bdd X = make_user_bdd(); + bdd R1 = bdd_ithvar(1); + bdd R2 = bdd_nithvar(3); + bdd R = bdd_addref( bdd_apply(R1,R2, bddop_and) ); + bdd RES = bdd_addref( bdd_restrict(X,R) ); +\end{verbatim} + *} +RETURN {* The restricted bdd. *} +ALSO {* bdd\_makeset, bdd\_exist, bdd\_forall *} +*/ +BDD bdd_restrict(BDD r, BDD var) +{ + BDD res; + firstReorder = 1; + + CHECKa(r,bddfalse); + CHECKa(var,bddfalse); + + if (var < 2) /* Empty set */ + return r; + + again: + if (setjmp(bddexception) == 0) + { + if (varset2svartable(var) < 0) + return bddfalse; + + INITREF; + miscid = (var << 3) | CACHEID_RESTRICT; + + if (!firstReorder) + bdd_disable_reorder(); + res = restrict_rec(r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static int restrict_rec(int r) +{ + BddCacheData *entry; + int res; + + if (ISCONST(r) || LEVEL(r) > quantlast) + return r; + + entry = BddCache_lookup(&misccache, RESTRHASH(r,miscid)); + if (entry->a == r && entry->c == miscid) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + if (INSVARSET(LEVEL(r))) + { + if (quantvarset[LEVEL(r)] > 0) + res = restrict_rec(HIGH(r)); + else + res = restrict_rec(LOW(r)); + } + else + { + PUSHREF( restrict_rec(LOW(r)) ); + PUSHREF( restrict_rec(HIGH(r)) ); + res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); + POPREF(2); + } + + entry->a = r; + entry->c = miscid; + entry->r.res = res; + + return res; +} + + +/*=== GENERALIZED COFACTOR =============================================*/ + +/* +NAME {* bdd\_constrain *} +SECTION {* operator *} +SHORT {* generalized cofactor *} +PROTO {* BDD bdd_constrain(BDD f, BDD c) *} +DESCR {* Computes the generalized cofactor of {\tt f} with respect to + {\tt c}. *} +RETURN {* The constrained BDD *} +ALSO {* bdd\_restrict, bdd\_simplify *} +*/ +BDD bdd_constrain(BDD f, BDD c) +{ + BDD res; + firstReorder = 1; + + CHECKa(f,bddfalse); + CHECKa(c,bddfalse); + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + miscid = CACHEID_CONSTRAIN; + + if (!firstReorder) + bdd_disable_reorder(); + res = constrain_rec(f, c); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD constrain_rec(BDD f, BDD c) +{ + BddCacheData *entry; + BDD res; + + if (ISONE(c)) + return f; + if (ISCONST(f)) + return f; + if (c == f) + return BDDONE; + if (ISZERO(c)) + return BDDZERO; + + entry = BddCache_lookup(&misccache, CONSTRAINHASH(f,c)); + if (entry->a == f && entry->b == c && entry->c == miscid) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + if (LEVEL(f) == LEVEL(c)) + { + if (ISZERO(LOW(c))) + res = constrain_rec(HIGH(f), HIGH(c)); + else if (ISZERO(HIGH(c))) + res = constrain_rec(LOW(f), LOW(c)); + else + { + PUSHREF( constrain_rec(LOW(f), LOW(c)) ); + PUSHREF( constrain_rec(HIGH(f), HIGH(c)) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + POPREF(2); + } + } + else + if (LEVEL(f) < LEVEL(c)) + { + PUSHREF( constrain_rec(LOW(f), c) ); + PUSHREF( constrain_rec(HIGH(f), c) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + POPREF(2); + } + else + { + if (ISZERO(LOW(c))) + res = constrain_rec(f, HIGH(c)); + else if (ISZERO(HIGH(c))) + res = constrain_rec(f, LOW(c)); + else + { + PUSHREF( constrain_rec(f, LOW(c)) ); + PUSHREF( constrain_rec(f, HIGH(c)) ); + res = bdd_makenode(LEVEL(c), READREF(2), READREF(1)); + POPREF(2); + } + } + + entry->a = f; + entry->b = c; + entry->c = miscid; + entry->r.res = res; + + return res; +} + + +/*=== REPLACE ==========================================================*/ + +/* +NAME {* bdd\_replace *} +SECTION {* operator *} +SHORT {* replaces variables with other variables *} +PROTO {* BDD bdd_replace(BDD r, bddPair *pair) *} +DESCR {* Replaces all variables in the BDD {\tt r} with the variables + defined by {\tt pair}. Each entry in {\tt pair} consists of a + old and a new variable. Whenever the old variable is found in + {\tt r} then a new node with the new variable is inserted instead. + *} +ALSO {* bdd\_newpair, bdd\_setpair, bdd\_setpairs *} +RETURN {* The result of the operation. *} +*/ +BDD bdd_replace(BDD r, bddPair *pair) +{ + BDD res; + firstReorder = 1; + + CHECKa(r, bddfalse); + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + replacepair = pair->result; + replacelast = pair->last; + replaceid = (pair->id << 2) | CACHEID_REPLACE; + + if (!firstReorder) + bdd_disable_reorder(); + res = replace_rec(r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD replace_rec(BDD r) +{ + BddCacheData *entry; + BDD res; + + if (ISCONST(r) || LEVEL(r) > replacelast) + return r; + + entry = BddCache_lookup(&replacecache, REPLACEHASH(r)); + if (entry->a == r && entry->c == replaceid) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + PUSHREF( replace_rec(LOW(r)) ); + PUSHREF( replace_rec(HIGH(r)) ); + + res = bdd_correctify(LEVEL(replacepair[LEVEL(r)]), READREF(2), READREF(1)); + POPREF(2); + + entry->a = r; + entry->c = replaceid; + entry->r.res = res; + + return res; +} + + +static BDD bdd_correctify(int level, BDD l, BDD r) +{ + BDD res; + + if (level < LEVEL(l) && level < LEVEL(r)) + return bdd_makenode(level, l, r); + + if (level == LEVEL(l) || level == LEVEL(r)) + { + bdd_error(BDD_REPLACE); + return 0; + } + + if (LEVEL(l) == LEVEL(r)) + { + PUSHREF( bdd_correctify(level, LOW(l), LOW(r)) ); + PUSHREF( bdd_correctify(level, HIGH(l), HIGH(r)) ); + res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); + } + else + if (LEVEL(l) < LEVEL(r)) + { + PUSHREF( bdd_correctify(level, LOW(l), r) ); + PUSHREF( bdd_correctify(level, HIGH(l), r) ); + res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); + } + else + { + PUSHREF( bdd_correctify(level, l, LOW(r)) ); + PUSHREF( bdd_correctify(level, l, HIGH(r)) ); + res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); + } + POPREF(2); + + return res; /* FIXME: cache ? */ +} + + +/*=== COMPOSE ==========================================================*/ + +/* +NAME {* bdd\_compose *} +SECTION {* operator *} +SHORT {* functional composition *} +PROTO {* BDD bdd_compose(BDD f, BDD g, int var) *} +DESCR {* Substitutes the variable {\tt var} with the BDD {\tt g} in + the BDD {\tt f}: result $= f[g/var]$. *} +RETURN {* The composed BDD *} +ALSO {* bdd\_veccompose, bdd\_replace, bdd\_restrict *} +*/ +BDD bdd_compose(BDD f, BDD g, int var) +{ + BDD res; + firstReorder = 1; + + CHECKa(f, bddfalse); + CHECKa(g, bddfalse); + if (var < 0 || var >= bddvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + composelevel = bddvar2level[var]; + replaceid = (composelevel << 2) | CACHEID_COMPOSE; + + if (!firstReorder) + bdd_disable_reorder(); + res = compose_rec(f, g); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD compose_rec(BDD f, BDD g) +{ + BddCacheData *entry; + BDD res; + + if (LEVEL(f) > composelevel) + return f; + + entry = BddCache_lookup(&replacecache, COMPOSEHASH(f,g)); + if (entry->a == f && entry->b == g && entry->c == replaceid) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + if (LEVEL(f) < composelevel) + { + if (LEVEL(f) == LEVEL(g)) + { + PUSHREF( compose_rec(LOW(f), LOW(g)) ); + PUSHREF( compose_rec(HIGH(f), HIGH(g)) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + } + else + if (LEVEL(f) < LEVEL(g)) + { + PUSHREF( compose_rec(LOW(f), g) ); + PUSHREF( compose_rec(HIGH(f), g) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + } + else + { + PUSHREF( compose_rec(f, LOW(g)) ); + PUSHREF( compose_rec(f, HIGH(g)) ); + res = bdd_makenode(LEVEL(g), READREF(2), READREF(1)); + } + POPREF(2); + } + else + /*if (LEVEL(f) == composelevel) changed 2-nov-98 */ + { + res = ite_rec(g, HIGH(f), LOW(f)); + } + + entry->a = f; + entry->b = g; + entry->c = replaceid; + entry->r.res = res; + + return res; +} + + +/* +NAME {* bdd\_veccompose *} +SECTION {* operator *} +SHORT {* simultaneous functional composition *} +PROTO {* BDD bdd_veccompose(BDD f, bddPair *pair) *} +DESCR {* Uses the pairs of variables and BDDs in {\tt pair} to make + the simultaneous substitution: $f[g_1/V_1, \ldots, g_n/V_n]$. + In this way one or more BDDs + may be substituted in one step. The BDDs in + {\tt pair} may depend on the variables they are substituting. + {\tt bdd\_compose} may be used instead of + {\tt bdd\_replace} but is not as efficient when $g_i$ is a + single variable, the same applies to {\tt bdd\_restrict}. + Note that simultaneous substitution is not necessarily the same + as repeated substitution. Example: + $(x_1 \disj x_2)[x_3/x_1,x_4/x_3] = (x_3 \disj x_2) \neq + ((x_1 \disj x_2)[x_3/x_1])[x_4/x_3] = (x_4 \disj x_2)$. *} +RETURN {* The composed BDD *} +ALSO {* bdd\_compose, bdd\_replace, bdd\_restrict *} +*/ +BDD bdd_veccompose(BDD f, bddPair *pair) +{ + BDD res; + firstReorder = 1; + + CHECKa(f, bddfalse); + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + replacepair = pair->result; + replaceid = (pair->id << 2) | CACHEID_VECCOMPOSE; + replacelast = pair->last; + + if (!firstReorder) + bdd_disable_reorder(); + res = veccompose_rec(f); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD veccompose_rec(BDD f) +{ + BddCacheData *entry; + register BDD res; + + if (LEVEL(f) > replacelast) + return f; + + entry = BddCache_lookup(&replacecache, VECCOMPOSEHASH(f)); + if (entry->a == f && entry->c == replaceid) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + PUSHREF( veccompose_rec(LOW(f)) ); + PUSHREF( veccompose_rec(HIGH(f)) ); + res = ite_rec(replacepair[LEVEL(f)], READREF(1), READREF(2)); + POPREF(2); + + entry->a = f; + entry->c = replaceid; + entry->r.res = res; + + return res; +} + + +/*=== SIMPLIFY =========================================================*/ + +/* +NAME {* bdd\_simplify *} +SECTION {* operator *} +SHORT {* coudert and Madre's restrict function *} +PROTO {* BDD bdd_simplify(BDD f, BDD d) *} +DESCR {* Tries to simplify the BDD {\tt f} by restricting it to the + domaine covered by {\tt d}. No checks are done to see if the + result is actually smaller than the input. This can be done + by the user with a call to {\tt bdd\_nodecount}. *} +ALSO {* bdd\_restrict *} +RETURN {* The simplified BDD *} +*/ +BDD bdd_simplify(BDD f, BDD d) +{ + BDD res; + firstReorder = 1; + + CHECKa(f, bddfalse); + CHECKa(d, bddfalse); + + again: + if (setjmp(bddexception) == 0) + { + INITREF; + applyop = bddop_or; + + if (!firstReorder) + bdd_disable_reorder(); + res = simplify_rec(f, d); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static BDD simplify_rec(BDD f, BDD d) +{ + BddCacheData *entry; + BDD res; + + if (ISONE(d) || ISCONST(f)) + return f; + if (d == f) + return BDDONE; + if (ISZERO(d)) + return BDDZERO; + + entry = BddCache_lookup(&applycache, APPLYHASH(f,d,bddop_simplify)); + + if (entry->a == f && entry->b == d && entry->c == bddop_simplify) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + if (LEVEL(f) == LEVEL(d)) + { + if (ISZERO(LOW(d))) + res = simplify_rec(HIGH(f), HIGH(d)); + else + if (ISZERO(HIGH(d))) + res = simplify_rec(LOW(f), LOW(d)); + else + { + PUSHREF( simplify_rec(LOW(f), LOW(d)) ); + PUSHREF( simplify_rec(HIGH(f), HIGH(d)) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + POPREF(2); + } + } + else + if (LEVEL(f) < LEVEL(d)) + { + PUSHREF( simplify_rec(LOW(f), d) ); + PUSHREF( simplify_rec(HIGH(f), d) ); + res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); + POPREF(2); + } + else /* LEVEL(d) < LEVEL(f) */ + { + PUSHREF( apply_rec(LOW(d), HIGH(d)) ); /* Exist quant */ + res = simplify_rec(f, READREF(1)); + POPREF(1); + } + + entry->a = f; + entry->b = d; + entry->c = bddop_simplify; + entry->r.res = res; + + return res; +} + + +/*=== QUANTIFICATION ===================================================*/ + +/* +NAME {* bdd\_exist *} +SECTION {* operator *} +SHORT {* existential quantification of variables *} +PROTO {* BDD bdd_exist(BDD r, BDD var) *} +DESCR {* Removes all occurences in {\tt r} of variables in the set + {\tt var} by existential quantification. *} +ALSO {* bdd\_forall, bdd\_unique, bdd\_makeset *} +RETURN {* The quantified BDD. *} +*/ +BDD bdd_exist(BDD r, BDD var) +{ + BDD res; + firstReorder = 1; + + CHECKa(r, bddfalse); + CHECKa(var, bddfalse); + + if (var < 2) /* Empty set */ + return r; + + again: + if (setjmp(bddexception) == 0) + { + if (varset2vartable(var) < 0) + return bddfalse; + + INITREF; + quantid = (var << 3) | CACHEID_EXIST; /* FIXME: range */ + applyop = bddop_or; + + if (!firstReorder) + bdd_disable_reorder(); + res = quant_rec(r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +/* +NAME {* bdd\_forall *} +SECTION {* operator *} +SHORT {* universal quantification of variables *} +PROTO {* BDD bdd_forall(BDD r, BDD var) *} +DESCR {* Removes all occurences in {\tt r} of variables in the set + {\tt var} by universal quantification. *} +ALSO {* bdd\_exist, bdd\_unique, bdd\_makeset *} +RETURN {* The quantified BDD. *} +*/ +BDD bdd_forall(BDD r, BDD var) +{ + BDD res; + firstReorder = 1; + + CHECKa(r, bddfalse); + CHECKa(var, bddfalse); + + if (var < 2) /* Empty set */ + return r; + + again: + if (setjmp(bddexception) == 0) + { + if (varset2vartable(var) < 0) + return bddfalse; + + INITREF; + quantid = (var << 3) | CACHEID_FORALL; + applyop = bddop_and; + + if (!firstReorder) + bdd_disable_reorder(); + res = quant_rec(r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +/* +NAME {* bdd\_unique *} +SECTION {* operator *} +SHORT {* unique quantification of variables *} +PROTO {* BDD bdd_unique(BDD r, BDD var) *} +DESCR {* Removes all occurences in {\tt r} of variables in the set + {\tt var} by unique quantification. This type of quantification + uses a XOR operator instead of an OR operator as in the + existential quantification, and an AND operator as in the + universal quantification. *} +ALSO {* bdd\_exist, bdd\_forall, bdd\_makeset *} +RETURN {* The quantified BDD. *} +*/ +BDD bdd_unique(BDD r, BDD var) +{ + BDD res; + firstReorder = 1; + + CHECKa(r, bddfalse); + CHECKa(var, bddfalse); + + if (var < 2) /* Empty set */ + return r; + + again: + if (setjmp(bddexception) == 0) + { + if (varset2vartable(var) < 0) + return bddfalse; + + INITREF; + quantid = (var << 3) | CACHEID_UNIQUE; + applyop = bddop_xor; + + if (!firstReorder) + bdd_disable_reorder(); + res = quant_rec(r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static int quant_rec(int r) +{ + BddCacheData *entry; + int res; + + if (r < 2 || LEVEL(r) > quantlast) + return r; + + entry = BddCache_lookup(&quantcache, QUANTHASH(r)); + if (entry->a == r && entry->c == quantid) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + PUSHREF( quant_rec(LOW(r)) ); + PUSHREF( quant_rec(HIGH(r)) ); + + if (INVARSET(LEVEL(r))) + res = apply_rec(READREF(2), READREF(1)); + else + res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); + + POPREF(2); + + entry->a = r; + entry->c = quantid; + entry->r.res = res; + + return res; +} + + +/*=== APPLY & QUANTIFY =================================================*/ + +/* +NAME {* bdd\_appex *} +SECTION {* operator *} +SHORT {* apply operation and existential quantification *} +PROTO {* BDD bdd_appex(BDD left, BDD right, int opr, BDD var) *} +DESCR {* Applies the binary operator {\tt opr} to the arguments + {\tt left} and {\tt right} and then performs an existential + quantification of the variables from the variable set + {\tt var}. This is done in a bottom up manner such that both the + apply and quantification is done on the lower nodes before + stepping up to the higher nodes. This makes the {\tt bdd\_appex} + function much more efficient than an apply operation followed + by a quantification. If the operator is a conjunction then this + is similar to the relational product of the two BDDs. + \index{relational product} *} +ALSO {* bdd\_appall, bdd\_appuni, bdd\_apply, bdd\_exist, bdd\_forall, bdd\_unique, bdd\_makeset *} +RETURN {* The result of the operation. *} +*/ +BDD bdd_appex(BDD l, BDD r, int opr, BDD var) +{ + BDD res; + firstReorder = 1; + + CHECKa(l, bddfalse); + CHECKa(r, bddfalse); + CHECKa(var, bddfalse); + + if (opr<0 || opr>bddop_invimp) + { + bdd_error(BDD_OP); + return bddfalse; + } + + if (var < 2) /* Empty set */ + return bdd_apply(l,r,opr); + + again: + if (setjmp(bddexception) == 0) + { + if (varset2vartable(var) < 0) + return bddfalse; + + INITREF; + applyop = bddop_or; + appexop = opr; + appexid = (var << 5) | (appexop << 1); /* FIXME: range! */ + quantid = (appexid << 3) | CACHEID_APPEX; + + if (!firstReorder) + bdd_disable_reorder(); + res = appquant_rec(l, r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +/* +NAME {* bdd\_appall *} +SECTION {* operator *} +SHORT {* apply operation and universal quantification *} +PROTO {* BDD bdd_appall(BDD left, BDD right, int opr, BDD var) *} +DESCR {* Applies the binary operator {\tt opr} to the arguments + {\tt left} and {\tt right} and then performs an universal + quantification of the variables from the variable set + {\tt var}. This is done in a bottom up manner such that both the + apply and quantification is done on the lower nodes before + stepping up to the higher nodes. This makes the {\tt bdd\_appall} + function much more efficient than an apply operation followed + by a quantification. *} +ALSO {* bdd\_appex, bdd\_appuni, bdd\_apply, bdd\_exist, bdd\_forall, bdd\_unique, bdd\_makeset *} +RETURN {* The result of the operation. *} +*/ +BDD bdd_appall(BDD l, BDD r, int opr, BDD var) +{ + BDD res; + firstReorder = 1; + + CHECKa(l, bddfalse); + CHECKa(r, bddfalse); + CHECKa(var, bddfalse); + + if (opr<0 || opr>bddop_invimp) + { + bdd_error(BDD_OP); + return bddfalse; + } + + if (var < 2) /* Empty set */ + return bdd_apply(l,r,opr); + + again: + if (setjmp(bddexception) == 0) + { + if (varset2vartable(var) < 0) + return bddfalse; + + INITREF; + applyop = bddop_and; + appexop = opr; + appexid = (var << 5) | (appexop << 1) | 1; /* FIXME: range! */ + quantid = (appexid << 3) | CACHEID_APPAL; + + if (!firstReorder) + bdd_disable_reorder(); + res = appquant_rec(l, r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +/* +NAME {* bdd\_appuni *} +SECTION {* operator *} +SHORT {* apply operation and unique quantification *} +PROTO {* BDD bdd_appuni(BDD left, BDD right, int opr, BDD var) *} +DESCR {* Applies the binary operator {\tt opr} to the arguments + {\tt left} and {\tt right} and then performs a unique + quantification of the variables from the variable set + {\tt var}. This is done in a bottom up manner such that both the + apply and quantification is done on the lower nodes before + stepping up to the higher nodes. This makes the {\tt bdd\_appuni} + function much more efficient than an apply operation followed + by a quantification. *} +ALSO {* bdd\_appex, bdd\_appall, bdd\_apply, bdd\_exist, bdd\_unique, bdd\_forall, bdd\_makeset *} +RETURN {* The result of the operation. *} +*/ +BDD bdd_appuni(BDD l, BDD r, int opr, BDD var) +{ + BDD res; + firstReorder = 1; + + CHECKa(l, bddfalse); + CHECKa(r, bddfalse); + CHECKa(var, bddfalse); + + if (opr<0 || opr>bddop_invimp) + { + bdd_error(BDD_OP); + return bddfalse; + } + + if (var < 2) /* Empty set */ + return bdd_apply(l,r,opr); + + again: + if (setjmp(bddexception) == 0) + { + if (varset2vartable(var) < 0) + return bddfalse; + + INITREF; + applyop = bddop_xor; + appexop = opr; + appexid = (var << 5) | (appexop << 1) | 1; /* FIXME: range! */ + quantid = (appexid << 3) | CACHEID_APPUN; + + if (!firstReorder) + bdd_disable_reorder(); + res = appquant_rec(l, r); + if (!firstReorder) + bdd_enable_reorder(); + } + else + { + bdd_checkreorder(); + + if (firstReorder-- == 1) + goto again; + res = BDDZERO; /* avoid warning about res being uninitialized */ + } + + checkresize(); + return res; +} + + +static int appquant_rec(int l, int r) +{ + BddCacheData *entry; + int res; + + switch (appexop) + { + case bddop_and: + if (l == 0 || r == 0) + return 0; + if (l == r) + return quant_rec(l); + if (l == 1) + return quant_rec(r); + if (r == 1) + return quant_rec(l); + break; + case bddop_or: + if (l == 1 || r == 1) + return 1; + if (l == r) + return quant_rec(l); + if (l == 0) + return quant_rec(r); + if (r == 0) + return quant_rec(l); + break; + case bddop_xor: + if (l == r) + return 0; + if (l == 0) + return quant_rec(r); + if (r == 0) + return quant_rec(l); + break; + case bddop_nand: + if (l == 0 || r == 0) + return 1; + break; + case bddop_nor: + if (l == 1 || r == 1) + return 0; + break; + } + + if (ISCONST(l) && ISCONST(r)) + res = oprres[appexop][(l<<1) | r]; + else + if (LEVEL(l) > quantlast && LEVEL(r) > quantlast) + { + int oldop = applyop; + applyop = appexop; + res = apply_rec(l,r); + applyop = oldop; + } + else + { + entry = BddCache_lookup(&appexcache, APPEXHASH(l,r,appexop)); + if (entry->a == l && entry->b == r && entry->c == appexid) + { +#ifdef CACHESTATS + bddcachestats.opHit++; +#endif + return entry->r.res; + } +#ifdef CACHESTATS + bddcachestats.opMiss++; +#endif + + if (LEVEL(l) == LEVEL(r)) + { + PUSHREF( appquant_rec(LOW(l), LOW(r)) ); + PUSHREF( appquant_rec(HIGH(l), HIGH(r)) ); + if (INVARSET(LEVEL(l))) + res = apply_rec(READREF(2), READREF(1)); + else + res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); + } + else + if (LEVEL(l) < LEVEL(r)) + { + PUSHREF( appquant_rec(LOW(l), r) ); + PUSHREF( appquant_rec(HIGH(l), r) ); + if (INVARSET(LEVEL(l))) + res = apply_rec(READREF(2), READREF(1)); + else + res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); + } + else + { + PUSHREF( appquant_rec(l, LOW(r)) ); + PUSHREF( appquant_rec(l, HIGH(r)) ); + if (INVARSET(LEVEL(r))) + res = apply_rec(READREF(2), READREF(1)); + else + res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); + } + + POPREF(2); + + entry->a = l; + entry->b = r; + entry->c = appexid; + entry->r.res = res; + } + + return res; +} + + +/************************************************************************* + Informational functions +*************************************************************************/ + +/*=== SUPPORT ==========================================================*/ + +/* +NAME {* bdd\_support *} +SECTION {* info *} +SHORT {* returns the variable support of a BDD *} +PROTO {* BDD bdd_support(BDD r) *} +DESCR {* Finds all the variables that {\tt r} depends on. That is + the support of {\tt r}. *} +ALSO {* bdd\_makeset *} +RETURN {* A BDD variable set. *} +*/ +BDD bdd_support(BDD r) +{ + static int supportSize = 0; + int n; + int res=1; + + CHECKa(r, bddfalse); + + if (r < 2) + return bddfalse; + + /* On-demand allocation of support set */ + if (supportSize < bddvarnum) + { + if ((supportSet=(int*)malloc(bddvarnum*sizeof(int))) == NULL) + { + bdd_error(BDD_MEMORY); + return bddfalse; + } + memset(supportSet, 0, bddvarnum*sizeof(int)); + supportSize = bddvarnum; + supportID = 0; + } + + /* Update global variables used to speed up bdd_support() + * - instead of always memsetting support to zero, we use + * a change counter. + * - and instead of reading the whole array afterwards, we just + * look from 'min' to 'max' used BDD variables. + */ + if (supportID == 0x0FFFFFFF) + { + /* We probably don't get here -- but let's just be sure */ + memset(supportSet, 0, bddvarnum*sizeof(int)); + supportID = 0; + } + ++supportID; + supportMin = LEVEL(r); + supportMax = supportMin; + + support_rec(r, supportSet); + bdd_unmark(r); + + bdd_disable_reorder(); + + for (n=supportMax ; n>=supportMin ; --n) + if (supportSet[n] == supportID) + { + register BDD tmp; + bdd_addref(res); + tmp = bdd_makenode(n, 0, res); + bdd_delref(res); + res = tmp; + } + + bdd_enable_reorder(); + + return res; +} + + +static void support_rec(int r, int* support) +{ + BddNode *node; + + if (r < 2) + return; + + node = &bddnodes[r]; + if (LEVELp(node) & MARKON || LOWp(node) == -1) + return; + + support[LEVELp(node)] = supportID; + + if (LEVELp(node) > supportMax) + supportMax = LEVELp(node); + + LEVELp(node) |= MARKON; + + support_rec(LOWp(node), support); + support_rec(HIGHp(node), support); +} + + +/*=== ONE SATISFYING VARIABLE ASSIGNMENT ===============================*/ + +/* +NAME {* bdd\_satone *} +SECTION {* operator *} +SHORT {* finds one satisfying variable assignment *} +PROTO {* BDD bdd_satone(BDD r) *} +DESCR {* Finds a BDD with at most one variable at each level. This BDD + implies {\tt r} and is not false unless {\tt r} is + false. *} +ALSO {* bdd\_allsat bdd\_satoneset, bdd\_fullsatone, bdd\_satcount, bdd\_satcountln *} +RETURN {* The result of the operation. *} +*/ +BDD bdd_satone(BDD r) +{ + BDD res; + + CHECKa(r, bddfalse); + if (r < 2) + return r; + + bdd_disable_reorder(); + + INITREF; + res = satone_rec(r); + + bdd_enable_reorder(); + + checkresize(); + return res; +} + + +static BDD satone_rec(BDD r) +{ + if (ISCONST(r)) + return r; + + if (ISZERO(LOW(r))) + { + BDD res = satone_rec(HIGH(r)); + return PUSHREF( bdd_makenode(LEVEL(r), BDDZERO, res) ); + } + else + { + BDD res = satone_rec(LOW(r)); + return PUSHREF( bdd_makenode(LEVEL(r), res, BDDZERO) ); + } +} + + +/* +NAME {* bdd\_satoneset *} +SECTION {* operator *} +SHORT {* finds one satisfying variable assignment *} +PROTO {* BDD bdd_satoneset(BDD r, BDD var, BDD pol) *} +DESCR {* Finds a minterm in {\tt r}. The {\tt var} argument is a + variable set that defines a set of variables that {\em must} be + mentioned in the result. The polarity of these variables in + result---in case they are undefined in {\tt r}---are defined + by the {\tt pol} parameter. If {\tt pol} is the false BDD then + the variables will be in negative form, and otherwise they will + be in positive form. *} +ALSO {* bdd\_allsat bdd\_satone, bdd\_fullsatone, bdd\_satcount, bdd\_satcountln *} +RETURN {* The result of the operation. *} +*/ +BDD bdd_satoneset(BDD r, BDD var, BDD pol) +{ + BDD res; + + CHECKa(r, bddfalse); + if (ISZERO(r)) + return r; + if (!ISCONST(pol)) + { + bdd_error(BDD_ILLBDD); + return bddfalse; + } + + bdd_disable_reorder(); + + INITREF; + satPolarity = pol; + res = satoneset_rec(r, var); + + bdd_enable_reorder(); + + checkresize(); + return res; +} + + +static BDD satoneset_rec(BDD r, BDD var) +{ + if (ISCONST(r) && ISCONST(var)) + return r; + + if (LEVEL(r) < LEVEL(var)) + { + if (ISZERO(LOW(r))) + { + BDD res = satoneset_rec(HIGH(r), var); + return PUSHREF( bdd_makenode(LEVEL(r), BDDZERO, res) ); + } + else + { + BDD res = satoneset_rec(LOW(r), var); + return PUSHREF( bdd_makenode(LEVEL(r), res, BDDZERO) ); + } + } + else if (LEVEL(var) < LEVEL(r)) + { + BDD res = satoneset_rec(r, HIGH(var)); + if (satPolarity == BDDONE) + return PUSHREF( bdd_makenode(LEVEL(var), BDDZERO, res) ); + else + return PUSHREF( bdd_makenode(LEVEL(var), res, BDDZERO) ); + } + else /* LEVEL(r) == LEVEL(var) */ + { + if (ISZERO(LOW(r))) + { + BDD res = satoneset_rec(HIGH(r), HIGH(var)); + return PUSHREF( bdd_makenode(LEVEL(r), BDDZERO, res) ); + } + else + { + BDD res = satoneset_rec(LOW(r), HIGH(var)); + return PUSHREF( bdd_makenode(LEVEL(r), res, BDDZERO) ); + } + } + +} + + +/*=== EXACTLY ONE SATISFYING VARIABLE ASSIGNMENT =======================*/ + +/* +NAME {* bdd\_fullsatone *} +SECTION {* operator *} +SHORT {* finds one satisfying variable assignment *} +PROTO {* BDD bdd_fullsatone(BDD r) *} +DESCR {* Finds a BDD with exactly one variable at all levels. This BDD + implies {\tt r} and is not false unless {\tt r} is + false. *} +ALSO {* bdd\_allsat bdd\_satone, bdd\_satoneset, bdd\_satcount, bdd\_satcountln *} +RETURN {* The result of the operation. *} +*/ +BDD bdd_fullsatone(BDD r) +{ + BDD res; + int v; + + CHECKa(r, bddfalse); + if (r == 0) + return 0; + + bdd_disable_reorder(); + + INITREF; + res = fullsatone_rec(r); + + for (v=LEVEL(r)-1 ; v>=0 ; v--) + { + res = PUSHREF( bdd_makenode(v, res, 0) ); + } + + bdd_enable_reorder(); + + checkresize(); + return res; +} + + +static int fullsatone_rec(int r) +{ + if (r < 2) + return r; + + if (LOW(r) != 0) + { + int res = fullsatone_rec(LOW(r)); + int v; + + for (v=LEVEL(LOW(r))-1 ; v>LEVEL(r) ; v--) + { + res = PUSHREF( bdd_makenode(v, res, 0) ); + } + + return PUSHREF( bdd_makenode(LEVEL(r), res, 0) ); + } + else + { + int res = fullsatone_rec(HIGH(r)); + int v; + + for (v=LEVEL(HIGH(r))-1 ; v>LEVEL(r) ; v--) + { + res = PUSHREF( bdd_makenode(v, res, 0) ); + } + + return PUSHREF( bdd_makenode(LEVEL(r), 0, res) ); + } +} + + +/*=== ALL SATISFYING VARIABLE ASSIGNMENTS ==============================*/ + +/* +NAME {* bdd\_allsat *} +SECTION {* operator *} +SHORT {* finds all satisfying variable assignments *} +PROTO {* BDD bdd_satone(BDD r, bddallsathandler handler) *} +DESCR {* Iterates through all legal variable assignments (those + that make the BDD come true) for the bdd {\tt r} and + calls the callback handler {\tt handler} for each of them. + The array passed to {\tt handler} contains one entry for + each of the globaly defined variables. Each entry is either + 0 if the variable is false, 1 if it is true, and -1 if it + is a don't care. + + The following is an example of a callback handler that + prints 'X' for don't cares, '0' for zero, and '1' for one: + \begin{verbatim} +void allsatPrintHandler(char* varset, int size) +{ + for (int v=0; v=0 ; --v) + allsatProfile[bddlevel2var[v]] = -1; + + allsatHandler = handler; + INITREF; + + allsat_rec(r); + + free(allsatProfile); +} + + +static void allsat_rec(BDD r) +{ + if (ISONE(r)) + { + allsatHandler(allsatProfile, bddvarnum); + return; + } + + if (ISZERO(r)) + return; + + if (!ISZERO(LOW(r))) + { + int v; + + allsatProfile[bddlevel2var[LEVEL(r)]] = 0; + + for (v=LEVEL(LOW(r))-1 ; v>LEVEL(r) ; --v) + { + allsatProfile[bddlevel2var[v]] = -1; + } + + allsat_rec(LOW(r)); + } + + if (!ISZERO(HIGH(r))) + { + int v; + + allsatProfile[bddlevel2var[LEVEL(r)]] = 1; + + for (v=LEVEL(HIGH(r))-1 ; v>LEVEL(r) ; --v) + { + allsatProfile[bddlevel2var[v]] = -1; + } + + allsat_rec(HIGH(r)); + } +} + + +/*=== COUNT NUMBER OF SATISFYING ASSIGNMENT ============================*/ + +/* +NAME {* bdd\_satcount *} +EXTRA {* bdd\_setcountset *} +SECTION {* info *} +SHORT {* calculates the number of satisfying variable assignments *} +PROTO {* double bdd_satcount(BDD r) +double bdd_satcountset(BDD r, BDD varset) *} +DESCR {* Calculates how many possible variable assignments there exists + such that {\tt r} is satisfied (true). All defined + variables are considered in the first version. In the + second version, only the variables in the variable + set {\tt varset} are considered. This makes the function a + {\em lot} slower. *} +ALSO {* bdd\_satone, bdd\_fullsatone, bdd\_satcountln *} +RETURN {* The number of possible assignments. *} +*/ +double bdd_satcount(BDD r) +{ + double size=1; + + CHECKa(r, 0.0); + + miscid = CACHEID_SATCOU; + size = pow(2.0, (double)LEVEL(r)); + + return size * satcount_rec(r); +} + + +double bdd_satcountset(BDD r, BDD varset) +{ + double unused = bddvarnum; + BDD n; + + if (ISCONST(varset) || ISZERO(r)) /* empty set */ + return 0.0; + + for (n=varset ; !ISCONST(n) ; n=HIGH(n)) + unused--; + + unused = bdd_satcount(r) / pow(2.0,unused); + + return unused >= 1.0 ? unused : 1.0; +} + + +static double satcount_rec(int root) +{ + BddCacheData *entry; + BddNode *node; + double size, s; + + if (root < 2) + return root; + + entry = BddCache_lookup(&misccache, SATCOUHASH(root)); + if (entry->a == root && entry->c == miscid) + return entry->r.dres; + + node = &bddnodes[root]; + size = 0; + s = 1; + + s *= pow(2.0, (float)(LEVEL(LOWp(node)) - LEVELp(node) - 1)); + size += s * satcount_rec(LOWp(node)); + + s = 1; + s *= pow(2.0, (float)(LEVEL(HIGHp(node)) - LEVELp(node) - 1)); + size += s * satcount_rec(HIGHp(node)); + + entry->a = root; + entry->c = miscid; + entry->r.dres = size; + + return size; +} + + +/* +NAME {* bdd\_satcountln *} +EXTRA {* bdd\_setcountlnset *} +SECTION {* info *} +SHORT {* calculates the log. number of satisfying variable assignments *} +PROTO {* double bdd_satcountln(BDD r) +double bdd_satcountlnset(BDD r, BDD varset)*} +DESCR {* Calculates how many possible variable assignments there + exists such that {\tt r} is satisfied (true) and returns + the logarithm of this. The result is calculated in such a + manner that it is practically impossible to get an + overflow, which is very possible for {\tt bdd\_satcount} if + the number of defined variables is too large. All defined + variables are considered in the first version. In the + second version, only the variables in the variable + set {\tt varset} are considered. This makes the function + a {\em lot} slower! *} +ALSO {* bdd\_satone, bdd\_fullsatone, bdd\_satcount *} +RETURN {* The logarithm of the number of possible assignments. *} */ +double bdd_satcountln(BDD r) +{ + double size; + + CHECKa(r, 0.0); + + miscid = CACHEID_SATCOULN; + size = satcountln_rec(r); + + if (size >= 0.0) + size += LEVEL(r); + + return size; +} + + +double bdd_satcountlnset(BDD r, BDD varset) +{ + double unused = bddvarnum; + BDD n; + + if (ISCONST(varset)) /* empty set */ + return 0.0; + + for (n=varset ; !ISCONST(n) ; n=HIGH(n)) + unused--; + + unused = bdd_satcountln(r) - unused; + + return unused >= 0.0 ? unused : 0.0; +} + + +static double satcountln_rec(int root) +{ + BddCacheData *entry; + BddNode *node; + double size, s1,s2; + + if (root == 0) + return -1.0; + if (root == 1) + return 0.0; + + entry = BddCache_lookup(&misccache, SATCOUHASH(root)); + if (entry->a == root && entry->c == miscid) + return entry->r.dres; + + node = &bddnodes[root]; + + s1 = satcountln_rec(LOWp(node)); + if (s1 >= 0.0) + s1 += LEVEL(LOWp(node)) - LEVELp(node) - 1; + + s2 = satcountln_rec(HIGHp(node)); + if (s2 >= 0.0) + s2 += LEVEL(HIGHp(node)) - LEVELp(node) - 1; + + if (s1 < 0.0) + size = s2; + else if (s2 < 0.0) + size = s1; + else if (s1 < s2) + size = s2 + log1p(pow(2.0,s1-s2)) / M_LN2; + else + size = s1 + log1p(pow(2.0,s2-s1)) / M_LN2; + + entry->a = root; + entry->c = miscid; + entry->r.dres = size; + + return size; +} + + +/*=== COUNT NUMBER OF ALLOCATED NODES ==================================*/ + +/* +NAME {* bdd\_nodecount *} +SECTION {* info *} +SHORT {* counts the number of nodes used for a BDD *} +PROTO {* int bdd_nodecount(BDD r) *} +DESCR {* Traverses the BDD and counts all distinct nodes that are used + for the BDD. *} +RETURN {* The number of nodes. *} +ALSO {* bdd\_pathcount, bdd\_satcount, bdd\_anodecount *} +*/ +int bdd_nodecount(BDD r) +{ + int num=0; + + CHECK(r); + + bdd_markcount(r, &num); + bdd_unmark(r); + + return num; +} + + +/* +NAME {* bdd\_anodecount *} +SECTION {* info *} +SHORT {* counts the number of shared nodes in an array of BDDs *} +PROTO {* int bdd_anodecount(BDD *r, int num) *} +DESCR {* Traverses all of the BDDs in {\tt r} and counts all distinct nodes + that are used in the BDDs--if a node is used in more than one + BDD then it only counts once. The {\tt num} parameter holds the + size of the array. *} +RETURN {* The number of nodes *} +ALSO {* bdd\_nodecount *} +*/ +int bdd_anodecount(BDD *r, int num) +{ + int n; + int cou=0; + + for (n=0 ; na == r && entry->c == miscid) + return entry->r.dres; + + size = bdd_pathcount_rec(LOW(r)) + bdd_pathcount_rec(HIGH(r)); + + entry->a = r; + entry->c = miscid; + entry->r.dres = size; + + return size; +} + + +/************************************************************************* + Other internal functions +*************************************************************************/ + +static int varset2vartable(BDD r) +{ + BDD n; + + if (r < 2) + return bdd_error(BDD_VARSET); + + quantvarsetID++; + + if (quantvarsetID == INT_MAX) + { + memset(quantvarset, 0, sizeof(int)*bddvarnum); + quantvarsetID = 1; + } + + for (n=r ; n > 1 ; n=HIGH(n)) + { + quantvarset[LEVEL(n)] = quantvarsetID; + quantlast = LEVEL(n); + } + + return 0; +} + + +static int varset2svartable(BDD r) +{ + BDD n; + + if (r < 2) + return bdd_error(BDD_VARSET); + + quantvarsetID++; + + if (quantvarsetID == INT_MAX/2) + { + memset(quantvarset, 0, sizeof(int)*bddvarnum); + quantvarsetID = 1; + } + + for (n=r ; !ISCONST(n) ; ) + { + if (ISZERO(LOW(n))) + { + quantvarset[LEVEL(n)] = quantvarsetID; + n = HIGH(n); + } + else + { + quantvarset[LEVEL(n)] = -quantvarsetID; + n = LOW(n); + } + quantlast = LEVEL(n); + } + + return 0; +} + + +/* EOF */ diff --git a/buddy/src/bddtest.cxx b/buddy/src/bddtest.cxx new file mode 100644 index 000000000..e2ab42b4d --- /dev/null +++ b/buddy/src/bddtest.cxx @@ -0,0 +1,110 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +#include +#include "bdd.h" +#include "bvec.h" + +using namespace std; + + +#define ERROR(msg) fail(msg, __FILE__, __LINE__) + +static void fail(const string msg, const char* file, int lineNum) +{ + cout << "Error in " << file << "(" << lineNum << "): " << msg << endl; + exit(1); +} + + +static void testSupport(void) +{ + bdd even = bdd_ithvar(0) | bdd_ithvar(2) | bdd_ithvar(4); + bdd odd = bdd_ithvar(1) | bdd_ithvar(3) | bdd_ithvar(5); + + cout << "Testing support\n"; + + bdd s1 = bdd_support(even); + bdd s2 = bdd_support(odd); + + if (s1 != (bdd_ithvar(0) & bdd_ithvar(2) & bdd_ithvar(4))) + ERROR("Support of 'even' failed\n"); + if (s2 != (bdd_ithvar(1) & bdd_ithvar(3) & bdd_ithvar(5))) + ERROR("Support of 'odd' failed\n"); + + /* Try many time in order check that the internal support ID + * is set correctly */ + for (int n=0 ; n<500 ; ++n) + { + s1 = bdd_support(even); + s2 = bdd_support(odd); + + if (s1 != (bdd_ithvar(0) & bdd_ithvar(2) & bdd_ithvar(4))) + ERROR("Support of 'even' failed"); + if (s2 != (bdd_ithvar(1) & bdd_ithvar(3) & bdd_ithvar(5))) + ERROR("Support of 'odd' failed"); + } +} + + +void testBvecIte() +{ + cout << "Testing ITE for vector\n"; + + bdd a = bdd_ithvar(0); + bvec b = bvec_var(3, 1, 2); + bvec c = bvec_var(3, 2, 2); + + bvec res = bvec_ite(a,b,c); + + bdd r0 = bdd_ite( bdd_ithvar(0), bdd_ithvar(1), bdd_ithvar(2) ); + bdd r1 = bdd_ite( bdd_ithvar(0), bdd_ithvar(3), bdd_ithvar(4) ); + bdd r2 = bdd_ite( bdd_ithvar(0), bdd_ithvar(5), bdd_ithvar(6) ); + + if (res[0] != r0) + ERROR("Bit 0 failed."); + if (res[1] != r1) + ERROR("Bit 1 failed."); + if (res[2] != r2) + ERROR("Bit 2 failed."); +} + + +int main(int ac, char** av) +{ + bdd_init(1000,1000); + + bdd_setvarnum(10); + + testSupport(); + testBvecIte(); + + bdd_done(); + return 0; +} diff --git a/buddy/src/bddtree.h b/buddy/src/bddtree.h new file mode 100644 index 000000000..a7f3c49ef --- /dev/null +++ b/buddy/src/bddtree.h @@ -0,0 +1,60 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/bddtree.h,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: tree.h + DESCR: Trees for BDD variables + AUTH: Jorn Lind + DATE: (C) march 1998 +*************************************************************************/ + +#ifndef _TREE_H +#define _TREE_H + +typedef struct s_BddTree +{ + int first, last; /* First and last variable in this block */ + int pos; /* Sifting position */ + int *seq; /* Sequence of first...last in the current order */ + char fixed; /* Are the sub-blocks fixed or may they be reordered */ + int id; /* A sequential id number given by addblock */ + struct s_BddTree *next, *prev; + struct s_BddTree *nextlevel; +} BddTree; + +BddTree *bddtree_new(int); +void bddtree_del(BddTree *); +BddTree *bddtree_addrange(BddTree *, int, int, int, int); +void bddtree_print(FILE *, BddTree *, int); + +#endif /* _TREE_H */ + + +/* EOF */ diff --git a/buddy/src/bvec.c b/buddy/src/bvec.c new file mode 100644 index 000000000..6f7a8d8ee --- /dev/null +++ b/buddy/src/bvec.c @@ -0,0 +1,1352 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/bvec.c,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: bvec.c + DESCR: Boolean vector arithmetics using BDDs + AUTH: Jorn Lind + DATE: (C) may 1999 +*************************************************************************/ +#include +#include "kernel.h" +#include "bvec.h" + +#define DEFAULT(v) { v.bitnum=0; v.bitvec=NULL; } + +/************************************************************************* +*************************************************************************/ + +static bvec bvec_build(int bitnum, int isTrue) +{ + bvec vec; + int n; + + vec.bitvec = NEW(BDD,bitnum); + vec.bitnum = bitnum; + if (!vec.bitvec) + { + bdd_error(BDD_MEMORY); + vec.bitnum = 0; + return vec; + } + + for (n=0 ; n 0) + { + val >>= 1; + bitnum++; + } + + return bitnum; +} +#endif + +/* +NAME {* bvec\_copy *} +SECTION {* bvec *} +SHORT {* create a copy of a bvec *} +PROTO {* bvec bvec_copy(bvec src) *} +DESCR {* Returns a copy of {\tt src}. The result is reference counted. *} +ALSO {* bvec\_con *} +*/ +bvec bvec_copy(bvec src) +{ + bvec dst; + int n; + + if (src.bitnum == 0) + { + DEFAULT(dst); + return dst; + } + + dst = bvec_build(src.bitnum,0); + + for (n=0 ; n> 1; + } + + return v; +} + + +/* +NAME {* bvec\_var *} +SECTION {* bvec *} +SHORT {* build a boolean vector with BDD variables *} +PROTO {* bvec bvec_var(int bitnum, int offset, int step) *} +DESCR {* Builds a boolean vector with the BDD variables $v_1, \ldots, + v_n$ as the elements. Each variable will be the the variabled + numbered {\tt offset + N*step} where {\tt N} ranges from 0 to + {\tt bitnum}-1.*} +RETURN {* The boolean vector (which is already reference counted) *} +ALSO {* bvec\_true, bvec\_false, bvec\_con *} +*/ +bvec bvec_var(int bitnum, int offset, int step) +{ + bvec v; + int n; + + v = bvec_build(bitnum,0); + + for (n=0 ; n=0 ; n--) + if (ISONE(e.bitvec[n])) + val = (val << 1) | 1; + else if (ISZERO(e.bitvec[n])) + val = val << 1; + else + return 0; + + return val; +} + + +/*======================================================================*/ + +/* +NAME {* bvec\_free *} +SECTION {* bvec *} +SHORT {* frees all memory used by a boolean vector *} +PROTO {* void bvec_free(bvec v) *} +DESCR {* Use this function to release any unused boolean vectors. The + decrease of the reference counts on the BDDs in {\tt v} is done + by {\tt bvec\_free}. *} +*/ +void bvec_free(bvec v) +{ + bvec_delref(v); + free(v.bitvec); +} + + +/* +NAME {* bvec\_addref *} +SECTION {* bvec *} +SHORT {* increase reference count of a boolean vector *} +PROTO {* bvec bvec_addref(bvec v) *} +DESCR {* Use this function to increase the reference count of all BDDs + in a {\tt v}. Please note that all boolean vectors returned + from BuDDy are reference counted from the beginning. *} +RETURN {* The boolean vector {\tt v} *} +ALSO {* bvec\_delref *} +*/ +bvec bvec_addref(bvec v) +{ + int n; + + for (n=0 ; n>1); + + if (c & 0x1) + { + res = bvec_add(e, rest); + bvec_free(rest); + } + else + res = rest; + + bvec_free(next); + + return res; +} + + +/* +NAME {* bvec\_mul *} +SECTION {* bvec *} +SHORT {* builds a boolean vector for multiplication *} +PROTO {* bvec bvec_mul(bvec l, bvec r) *} +DESCR {* Builds a boolean vector representing the multiplication + of {\tt l} and {\tt r}. *} +RETURN {* The result of the multiplication (which is already reference counted) *} +ALSO {* bvec\_mulfixed, bvec\_div, bvec\_add, bvec\_shl *} +*/ +bvec bvec_mul(bvec left, bvec right) +{ + int n; + int bitnum = left.bitnum + right.bitnum; + bvec res; + bvec leftshifttmp; + bvec leftshift; + + if (left.bitnum == 0 || right.bitnum == 0) + { + DEFAULT(res); + return res; + } + + res = bvec_false(bitnum); + leftshifttmp = bvec_copy(left); + leftshift = bvec_coerce(bitnum, leftshifttmp); + + /*bvec_delref(leftshifttmp);*/ + bvec_free(leftshifttmp); + + for (n=0 ; n=1 ; m--) + leftshift.bitvec[m] = leftshift.bitvec[m-1]; + leftshift.bitvec[0] = bddfalse; + + /*bvec_delref(added);*/ + bvec_free(added); + } + + /*bvec_delref(leftshift);*/ + bvec_free(leftshift); + + return res; +} + +static void bvec_div_rec(bvec divisor, bvec *remainder, bvec *result, int step) +{ + int n; + BDD isSmaller = bdd_addref( bvec_lte(divisor, *remainder) ); + bvec newResult = bvec_shlfixed( *result, 1, isSmaller ); + bvec zero = bvec_build(divisor.bitnum, bddfalse); + bvec newRemainder, tmp, sub = bvec_build(divisor.bitnum, bddfalse); + + for (n=0 ; nbitvec[divisor.bitnum-1]); + + if (step > 1) + bvec_div_rec( divisor, &newRemainder, &newResult, step-1 ); + + bvec_free(tmp); + bvec_free(sub); + bvec_free(zero); + bdd_delref(isSmaller); + + bvec_free(*remainder); + bvec_free(*result); + *result = newResult; + *remainder = newRemainder; +} + + +/* +NAME {* bvec\_divfixed *} +SECTION {* bvec *} +SHORT {* builds a boolean vector for division by a constant *} +PROTO {* int bvec_div(bvec e, int c, bvec *res, bvec *rem) *} +DESCR {* Builds a new boolean vector representing the integer division + of {\tt e} with {\tt c}. The result of the division will be stored + in {\tt res} and the remainder of the division will be stored in + {\tt rem}. Both vectors should be initialized as the function + will try to release the nodes used by them. If an error occurs then + the nodes will {\em not} be freed. *} +RETURN {* Zero on success or a negative error code on error. *} +ALSO {* bvec\_div, bvec\_mul, bvec\_add, bvec\_shl *} +*/ +int bvec_divfixed(bvec e, int c, bvec *res, bvec *rem) +{ + if (c > 0) + { + bvec divisor = bvec_con(e.bitnum, c); + bvec tmp = bvec_build(e.bitnum, 0); + bvec tmpremainder = bvec_shlfixed(tmp, 1, e.bitvec[e.bitnum-1]); + bvec result = bvec_shlfixed(e, 1, bddfalse); + bvec remainder; + + bvec_div_rec(divisor, &tmpremainder, &result, divisor.bitnum); + remainder = bvec_shrfixed(tmpremainder, 1, bddfalse); + + bvec_free(tmp); + bvec_free(tmpremainder); + bvec_free(divisor); + + *res = result; + *rem = remainder; + + return 0; + } + + return bdd_error(BVEC_DIVZERO); +} + +#if 0 +void p(bvec x) +{ + int n; + for (n=0 ; n 0) + res.bitvec[right.bitnum-n] = divLteRem; + + /* Shift 'div' one bit right */ + bdd_delref(div.bitvec[0]); + for (m=0 ; m= 0) + tmp1 = bdd_addref( bdd_and(rEquN, l.bitvec[m-n]) ); + else + tmp1 = bdd_addref( bdd_and(rEquN, c) ); + tmp2 = bdd_addref( bdd_or(res.bitvec[m], tmp1) ); + bdd_delref(tmp1); + + bdd_delref(res.bitvec[m]); + res.bitvec[m] = tmp2; + } + + bdd_delref(rEquN); + /*bvec_delref(val);*/ + bvec_free(val); + } + + /* At last make sure 'c' is shiftet in for r-values > l-bitnum */ + val = bvec_con(r.bitnum, l.bitnum); + rEquN = bvec_gth(r, val); + tmp1 = bdd_addref( bdd_and(rEquN, c) ); + + for (m=0 ; m l-bitnum */ + val = bvec_con(r.bitnum, l.bitnum); + rEquN = bvec_gth(r, val); + tmp1 = bdd_addref( bdd_and(rEquN, c) ); + + for (m=0 ; m y$ *} +PROTO {* bdd bvec_gth(bvec l, bvec r) *} +DESCR {* Returns the BDD representing {\tt l > r} + ({\em not} reference counted). Both vectors must have the + same number of bits. *} +ALSO {* bvec\_lth, bvec\_lte, bvec\_gte, bvec\_equ, bvec\_neq *} +*/ +bdd bvec_gth(bvec l, bvec r) +{ + BDD tmp = bdd_addref( bvec_lte(l,r) ); + BDD p = bdd_not(tmp); + bdd_delref(tmp); + return p; +} + + +/* +NAME {* bvec\_gte *} +SECTION {* bvec *} +SHORT {* calculates the truth value of $x \geq y$ *} +PROTO {* bdd bvec_gte(bvec l, bvec r) *} +DESCR {* Returns the BDD representing {\tt l}$\geq${\tt r} + ({\em not} reference counted). Both vectors must have the + same number of bits. *} +ALSO {* bvec\_lth, bvec\_gth, bvec\_gth, bvec\_equ, bvec\_neq *} +*/ +bdd bvec_gte(bvec l, bvec r) +{ + BDD tmp = bdd_addref( bvec_lth(l,r) ); + BDD p = bdd_not(tmp); + bdd_delref(tmp); + return p; +} + + +/* +NAME {* bvec\_equ *} +SECTION {* bvec *} +SHORT {* calculates the truth value of $x = y$ *} +PROTO {* bdd bvec_equ(bvec l, bvec r) *} +DESCR {* Returns the BDD representing {\tt l = r} + ({\em not} reference counted). Both vectors must have the + same number of bits. *} +ALSO {* bvec\_lth, bvec\_lte, bvec\_gth, bvec\_gte, bvec\_neq *} +*/ +bdd bvec_equ(bvec l, bvec r) +{ + BDD p = bddtrue; + int n; + + if (l.bitnum == 0 || r.bitnum == 0) + return bddfalse; + + if (l.bitnum != r.bitnum) + { + bdd_error(BVEC_SIZE); + return p; + } + + for (n=0 ; n>(int a) const { return bvec_shrfixed(*this,a,bddfalse); } + bvec operator>>(const bvec &a) const { return bvec_shr(*this,a,bddfalse); } + bvec operator+(const bvec &a) const { return bvec_add(*this, a); } + bvec operator-(const bvec &a) const { return bvec_sub(*this, a); } + bvec operator*(int a) const { return bvec_mulfixed(*this, a); } + bvec operator*(const bvec a) const { return bvec_mul(*this, a); } + bdd operator<(const bvec &a) const { return bvec_lth(*this, a); } + bdd operator<=(const bvec &a) const { return bvec_lte(*this, a); } + bdd operator>(const bvec &a) const { return bvec_gth(*this, a); } + bdd operator>=(const bvec &a) const { return bvec_gte(*this, a); } + bdd operator==(const bvec &a) const { return bvec_equ(*this, a); } + bdd operator!=(const bvec &a) const { return bvec_neq(*this, a); } +}; + +std::ostream &operator<<(std::ostream &, const bvec &); + +inline bvec bvec_truepp(int bitnum) +{ return bvec_true(bitnum); } + +inline bvec bvec_falsepp(int bitnum) +{ return bvec_false(bitnum); } + +inline bvec bvec_conpp(int bitnum, int val) +{ return bvec_con(bitnum, val); } + +inline bvec bvec_varpp(int bitnum, int offset, int step) +{ return bvec_var(bitnum, offset, step); } + +inline bvec bvec_varfddpp(int var) +{ return bvec_varfdd(var); } + +inline bvec bvec_varvecpp(int bitnum, int *var) +{ return bvec_varvec(bitnum, var); } + +inline bvec bvec_coerce(int bitnum, const bvec &v) +{ return bvec_coerce(bitnum, v.roots); } + +inline int bvec_isconst(const bvec &e) +{ return bvec_isconst(e.roots); } + +inline int bvec_val(const bvec &e) +{ return bvec_val(e.roots); } + +inline bvec bvec_copy(const bvec &v) +{ return bvec_copy(v.roots); } + +inline bvec bvec_add(const bvec &left, const bvec &right) +{ return bvec_add(left.roots, right.roots); } + +inline bvec bvec_sub(const bvec &left, const bvec &right) +{ return bvec_sub(left.roots, right.roots); } + +inline bvec bvec_mulfixed(const bvec &e, int c) +{ return bvec_mulfixed(e.roots, c); } + +inline bvec bvec_mul(const bvec &left, const bvec &right) +{ return bvec_mul(left.roots, right.roots); } + +inline int bvec_divfixed(const bvec &e, int c, bvec &res, bvec &rem) +{ return bvec_divfixed(e.roots, c, &res.roots, &rem.roots); } + +inline int bvec_div(const bvec &l, const bvec &r, bvec &res, bvec &rem) +{ return bvec_div(l.roots, r.roots, &res.roots, &rem.roots); } + +inline bvec bvec_ite(const bdd& a, const bvec& b, const bvec& c) +{ return bvec_ite(a.root, b.roots, c.roots); } + +inline bvec bvec_shlfixed(const bvec &e, int pos, const bdd &c) +{ return bvec_shlfixed(e.roots, pos, c.root); } + +inline bvec bvec_shl(const bvec &left, const bvec &right, const bdd &c) +{ return bvec_shl(left.roots, right.roots, c.root); } + +inline bvec bvec_shrfixed(const bvec &e, int pos, const bdd &c) +{ return bvec_shrfixed(e.roots, pos, c.root); } + +inline bvec bvec_shr(const bvec &left, const bvec &right, const bdd &c) +{ return bvec_shr(left.roots, right.roots, c.root); } + +inline bdd bvec_lth(const bvec &left, const bvec &right) +{ return bvec_lth(left.roots, right.roots); } + +inline bdd bvec_lte(const bvec &left, const bvec &right) +{ return bvec_lte(left.roots, right.roots); } + +inline bdd bvec_gth(const bvec &left, const bvec &right) +{ return bvec_gth(left.roots, right.roots); } + +inline bdd bvec_gte(const bvec &left, const bvec &right) +{ return bvec_gte(left.roots, right.roots); } + +inline bdd bvec_equ(const bvec &left, const bvec &right) +{ return bvec_equ(left.roots, right.roots); } + +inline bdd bvec_neq(const bvec &left, const bvec &right) +{ return bvec_neq(left.roots, right.roots); } + + + /* Hack to allow for overloading */ +#define bvec_var(a,b,c) bvec_varpp(a,b,c) +#define bvec_varfdd(a) bvec_varfddpp(a) +#define bvec_varvec(a,b) bvec_varvecpp(a,b) +#define bvec_true(a) bvec_truepp(a) +#define bvec_false(a) bvec_falsepp(a) +#define bvec_con(a,b) bvec_conpp((a),(b)) + + +#endif /* CPLUSPLUS */ + +#endif /* _BVEC_H */ + +/* EOF */ diff --git a/buddy/src/cache.c b/buddy/src/cache.c new file mode 100644 index 000000000..a286b4bdb --- /dev/null +++ b/buddy/src/cache.c @@ -0,0 +1,97 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/cache.c,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: cache.c + DESCR: Cache class for caching apply/exist etc. results in BDD package + AUTH: Jorn Lind + DATE: (C) june 1997 +*************************************************************************/ +#include +#include "kernel.h" +#include "cache.h" +#include "prime.h" + +/************************************************************************* +*************************************************************************/ + +int BddCache_init(BddCache *cache, int size) +{ + int n; + + size = bdd_prime_gte(size); + + if ((cache->table=NEW(BddCacheData,size)) == NULL) + return bdd_error(BDD_MEMORY); + + for (n=0 ; ntable[n].a = -1; + cache->tablesize = size; + + return 0; +} + + +void BddCache_done(BddCache *cache) +{ + free(cache->table); + cache->table = NULL; + cache->tablesize = 0; +} + + +int BddCache_resize(BddCache *cache, int newsize) +{ + int n; + + free(cache->table); + + newsize = bdd_prime_gte(newsize); + + if ((cache->table=NEW(BddCacheData,newsize)) == NULL) + return bdd_error(BDD_MEMORY); + + for (n=0 ; ntable[n].a = -1; + cache->tablesize = newsize; + + return 0; +} + + +void BddCache_reset(BddCache *cache) +{ + register int n; + for (n=0 ; ntablesize ; n++) + cache->table[n].a = -1; +} + + +/* EOF */ diff --git a/buddy/src/cache.h b/buddy/src/cache.h new file mode 100644 index 000000000..4ebe2aa48 --- /dev/null +++ b/buddy/src/cache.h @@ -0,0 +1,70 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/cache.h,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: cache.h + DESCR: Cache class for caching apply/exist etc. results + AUTH: Jorn Lind + DATE: (C) june 1997 +*************************************************************************/ + +#ifndef _CACHE_H +#define _CACHE_H + +typedef struct +{ + union + { + double dres; + int res; + } r; + int a,b,c; +} BddCacheData; + + +typedef struct +{ + BddCacheData *table; + int tablesize; +} BddCache; + + +extern int BddCache_init(BddCache *, int); +extern void BddCache_done(BddCache *); +extern int BddCache_resize(BddCache *, int); +extern void BddCache_reset(BddCache *); + +#define BddCache_lookup(cache, hash) (&(cache)->table[hash % (cache)->tablesize]) + + +#endif /* _CACHE_H */ + + +/* EOF */ diff --git a/buddy/src/cppext.cxx b/buddy/src/cppext.cxx new file mode 100644 index 000000000..403390c93 --- /dev/null +++ b/buddy/src/cppext.cxx @@ -0,0 +1,624 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/cppext.cxx,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: cppext.cxx + DESCR: C++ extension of BDD package + AUTH: Jorn Lind + DATE: (C) august 1997 +*************************************************************************/ +#include +#include +#include +#include "kernel.h" +#include "bvec.h" + +using namespace std; + + /* Formatting objects for iostreams */ +#define IOFORMAT_SET 0 +#define IOFORMAT_TABLE 1 +#define IOFORMAT_DOT 2 +#define IOFORMAT_ALL 3 +#define IOFORMAT_FDDSET 4 + +int bdd_ioformat::curformat = IOFORMAT_SET; +bdd_ioformat bddset(IOFORMAT_SET); +bdd_ioformat bddtable(IOFORMAT_TABLE); +bdd_ioformat bdddot(IOFORMAT_DOT); +bdd_ioformat bddall(IOFORMAT_ALL); +bdd_ioformat fddset(IOFORMAT_FDDSET); + + /* Constant true and false extension */ +const bdd bddtruepp = bdd_true(); +const bdd bddfalsepp = bdd_false(); + + /* Internal prototypes */ +static void bdd_printset_rec(ostream&, int, int*); +static void bdd_printdot_rec(ostream&, int); +static void fdd_printset_rec(ostream &, int, int *); + + +static bddstrmhandler strmhandler_bdd; +static bddstrmhandler strmhandler_fdd; + + // Avoid calling C++ version of anodecount +#undef bdd_anodecount + +/************************************************************************* + Setup (and shutdown) +*************************************************************************/ + +#undef bdd_init + +int bdd_cpp_init(int n, int c) +{ + int ok = bdd_init(n,c); + + strmhandler_bdd = NULL; + strmhandler_fdd = NULL; + + return ok; +} + + +/************************************************************************* + BDD C++ functions +*************************************************************************/ + +bdd bdd_buildcube(int val, int width, const bdd *variables) +{ + BDD *var = NEW(BDD,width); + BDD res; + int n; + + // No need for ref.cou. since variables[n] holds the reference + for (n=0 ; n 0) + { + if (!first) + o << ", "; + first = 0; + if (strmhandler_bdd) + strmhandler_bdd(o,bddlevel2var[n]); + else + o << bddlevel2var[n]; + o << ":" << (set[n]==2 ? 1 : 0); + } + } + + o << ">"; + } + else + { + set[LEVEL(r)] = 1; + bdd_printset_rec(o, LOW(r), set); + + set[LEVEL(r)] = 2; + bdd_printset_rec(o, HIGH(r), set); + + set[LEVEL(r)] = 0; + } +} + + +static void bdd_printdot_rec(ostream& o, int r) +{ + if (ISCONST(r) || MARKED(r)) + return; + + o << r << "[label=\""; + if (strmhandler_bdd) + strmhandler_bdd(o,bddlevel2var[LEVEL(r)]); + else + o << bddlevel2var[LEVEL(r)]; + o << "\"];\n"; + o << r << " -> " << LOW(r) << "[style=dotted];\n"; + o << r << " -> " << HIGH(r) << "[style=filled];\n"; + + SETMARK(r); + + bdd_printdot_rec(o, LOW(r)); + bdd_printdot_rec(o, HIGH(r)); +} + + +static void fdd_printset_rec(ostream &o, int r, int *set) +{ + int n,m,i; + int used = 0; + int *binval; + int ok, first; + + if (r == 0) + return; + else + if (r == 1) + { + o << "<"; + first=1; + int fdvarnum = fdd_domainnum(); + + for (n=0 ; n"; + } + else + { + set[bddlevel2var[LEVEL(r)]] = 1; + fdd_printset_rec(o, LOW(r), set); + + set[bddlevel2var[LEVEL(r)]] = 2; + fdd_printset_rec(o, HIGH(r), set); + + set[bddlevel2var[LEVEL(r)]] = 0; + } +} + + +/*=[ FDD I/O functions ]================================================*/ + +/* +NAME {* fdd\_strm\_hook *} +SECTION {* fdd *} +SHORT {* Specifies a printing callback handler *} +PROTO {* bddstrmhandler fdd_strm_hook(bddstrmhandler handler) *} +DESCR {* A printing callback handler for use with FDDs is used to + convert the FDD integer identifier into something readable by the + end user. Typically the handler will print a string name + instead of the identifier. A handler could look like this: + \begin{verbatim} +void printhandler(ostream &o, int var) +{ + extern char **names; + o << names[var]; +} +\end{verbatim} + + \noindent + The handler can then be passed to BuDDy like this: + {\tt fdd\_strm\_hook(printhandler)}. + + No default handler is supplied. The argument {\tt handler} may be + NULL if no handler is needed. *} +RETURN {* The old handler *} +ALSO {* fdd\_printset, bdd\_file\_hook *} +*/ +bddstrmhandler fdd_strm_hook(bddstrmhandler handler) +{ + bddstrmhandler old = strmhandler_fdd; + strmhandler_fdd = handler; + return old; +} + + +/************************************************************************* + bvec functions +*************************************************************************/ + +bvec bvec::operator=(const bvec &src) +{ + if (&src != this) + { + bvec_free(roots); + roots = bvec_copy(src.roots); + } + return *this; +} + + +void bvec::set(int bitnum, const bdd &b) +{ + bdd_delref(roots.bitvec[bitnum]); + roots.bitvec[bitnum] = b.root; + bdd_addref(roots.bitvec[bitnum]); +} + + +/*======================================================================*/ + +bvec bvec_map1(const bvec &a, + bdd (*fun)(const bdd &)) +{ + bvec res; + int n; + + res = bvec_false(a.bitnum()); + for (n=0 ; n < a.bitnum() ; n++) + res.set(n, fun(a[n])); + + return res; +} + + +bvec bvec_map2(const bvec &a, const bvec &b, + bdd (*fun)(const bdd &, const bdd &)) +{ + bvec res; + int n; + + if (a.bitnum() != b.bitnum()) + { + bdd_error(BVEC_SIZE); + return res; + } + + res = bvec_false(a.bitnum()); + for (n=0 ; n < a.bitnum() ; n++) + res.set(n, fun(a[n], b[n])); + + return res; +} + + +bvec bvec_map3(const bvec &a, const bvec &b, const bvec &c, + bdd (*fun)(const bdd &, const bdd &, const bdd &)) +{ + bvec res; + int n; + + if (a.bitnum() != b.bitnum() || b.bitnum() != c.bitnum()) + { + bdd_error(BVEC_SIZE); + return res; + } + + res = bvec_false(a.bitnum()); + for (n=0 ; n < a.bitnum() ; n++) + res.set(n, fun(a[n], b[n], c[n]) ); + + return res; +} + + +ostream &operator<<(ostream &o, const bvec &v) +{ + for (int i=0 ; i +#include +#include "kernel.h" +#include "fdd.h" + + +static void fdd_printset_rec(FILE *, int, int *); + +/*======================================================================*/ +/* NOTE: ALL FDD operations works with LSB in top of the variable order */ +/* and in index zero of the domain tables */ +/*======================================================================*/ + +typedef struct s_Domain +{ + int realsize; /* The specified domain (0...N-1) */ + int binsize; /* The number of BDD variables representing the domain */ + int *ivar; /* Variable indeces for the variable set */ + BDD var; /* The BDD variable set */ +} Domain; + + +static void Domain_allocate(Domain*, int); +static void Domain_done(Domain*); + +static int firstbddvar; +static int fdvaralloc; /* Number of allocated domains */ +static int fdvarnum; /* Number of defined domains */ +static Domain *domain; /* Table of domain sizes */ + +static bddfilehandler filehandler; + +/************************************************************************* + Domain definition +*************************************************************************/ + +void bdd_fdd_init(void) +{ + domain = NULL; + fdvarnum = fdvaralloc = 0; + firstbddvar = 0; +} + + +void bdd_fdd_done(void) +{ + int n; + + if (domain != NULL) + { + for (n=0 ; n fdvaralloc) + { + fdvaralloc += (num > fdvaralloc) ? num : fdvaralloc; + + domain = (Domain*)realloc(domain, sizeof(Domain)*fdvaralloc); + if (domain == NULL) + return bdd_error(BDD_MEMORY); + } + } + + /* Create bdd variable tables */ + for (n=0 ; n bddvarnum) + bdd_setvarnum(firstbddvar + extravars); + + /* Set correct variable sequence (interleaved) */ + for (bn=0,more=1 ; more ; bn++) + { + more = 0; + + for (n=0 ; n= fdvarnum || v2 < 0 || v2 >= fdvarnum) + return bdd_error(BDD_VAR); + + if (fdvarnum + 1 > fdvaralloc) + { + fdvaralloc += fdvaralloc; + + domain = (Domain*)realloc(domain, sizeof(Domain)*fdvaralloc); + if (domain == NULL) + return bdd_error(BDD_MEMORY); + } + + d = &domain[fdvarnum]; + d->realsize = domain[v1].realsize * domain[v2].realsize; + d->binsize = domain[v1].binsize + domain[v2].binsize; + d->ivar = (int *)malloc(sizeof(int)*d->binsize); + + for (n=0 ; nivar[n] = domain[v1].ivar[n]; + for (n=0 ; nivar[domain[v1].binsize+n] = domain[v2].ivar[n]; + + d->var = bdd_makeset(d->ivar, d->binsize); + bdd_addref(d->var); + + return fdvarnum++; +} + + +/* +NAME {* fdd\_clearall *} +SECTION {* fdd *} +SHORT {* clear all allocated FDD blocks *} +PROTO {* void fdd_clearall(void) *} +DESCR {* Removes all defined finite domain blocks defined by + {\tt fdd\_extdomain()} and {\tt fdd\_overlapdomain()} *} +*/ +void fdd_clearall(void) +{ + bdd_fdd_done(); + bdd_fdd_init(); +} + + +/************************************************************************* + FDD helpers +*************************************************************************/ + +/* +NAME {* fdd\_domainnum *} +SECTION {* fdd *} +SHORT {* number of defined finite domain blocks *} +PROTO {* int fdd_domainnum(void) *} +DESCR {* Returns the number of finite domain blocks define by calls to + {\tt bdd\_extdomain}. *} +RETURN {* The number of defined finite domain blocks + or a negative error code *} +ALSO {* fdd\_domainsize, fdd\_extdomain *} +*/ +int fdd_domainnum(void) +{ + if (!bddrunning) + return bdd_error(BDD_RUNNING); + + return fdvarnum; +} + + +/* +NAME {* fdd\_domainsize *} +SECTION {* fdd *} +SHORT {* real size of a finite domain block *} +PROTO {* int fdd_domainsize(int var) *} +DESCR {* Returns the size of the domain for the finite domain + block {\tt var}. *} +RETURN {* The size or a negative error code *} +ALSO {* fdd\_domainnum *} +*/ +int fdd_domainsize(int v) +{ + if (!bddrunning) + return bdd_error(BDD_RUNNING); + + if (v < 0 || v >= fdvarnum) + return bdd_error(BDD_VAR); + return domain[v].realsize; +} + + +/* +NAME {* fdd\_varnum *} +SECTION {* fdd *} +SHORT {* binary size of a finite domain block *} +PROTO {* int fdd_varnum(int var) *} +DESCR {* Returns the number of BDD variables used for the finite domain + block {\tt var}. *} +RETURN {* The number of variables or a negative error code *} +ALSO {* fdd\_vars *} +*/ +int fdd_varnum(int v) +{ + if (!bddrunning) + return bdd_error(BDD_RUNNING); + + if (v >= fdvarnum || v < 0) + return bdd_error(BDD_VAR); + return domain[v].binsize; +} + + +/* +NAME {* fdd\_vars *} +SECTION {* fdd *} +SHORT {* all BDD variables associated with a finite domain block *} +PROTO {* int *fdd_vars(int var) *} +DESCR {* Returns an integer array containing the BDD variables used to + define the finite domain block {\tt var}. The size of the array + is the number of variables used to define the finite domain block. + The array will have the Least Significant Bit at pos 0. The + array must {\em not} be deallocated. *} +RETURN {* Integer array contaning the variable numbers or NULL if + {\tt v} is an unknown block. *} +ALSO {* fdd\_varnum *} +*/ +int *fdd_vars(int v) +{ + if (!bddrunning) + { + bdd_error(BDD_RUNNING); + return NULL; + } + + if (v >= fdvarnum || v < 0) + { + bdd_error(BDD_VAR); + return NULL; + } + + return domain[v].ivar; +} + + + +/************************************************************************* + FDD primitives +*************************************************************************/ + +/* +NAME {* fdd\_ithvar *} +SECTION {* fdd *} +SHORT {* the BDD for the i'th FDD set to a specific value *} +PROTO {* BDD fdd_ithvar(int var, int val) *} +DESCR {* Returns the BDD that defines the value {\tt val} for the + finite domain block {\tt var}. The encoding places the + Least Significant Bit at the top of the BDD tree + (which means they will have the lowest variable index). + The returned BDD will be $V_0 \conj V_1 \conj \ldots + \conj V_N$ where each $V_i$ will be in positive or negative form + depending on the value of {\tt val}. *} +RETURN {* The correct BDD or the constant false BDD on error. *} +ALSO {* fdd\_ithset *} +*/ +BDD fdd_ithvar(int var, int val) +{ + int n; + int v=1, tmp; + + if (!bddrunning) + { + bdd_error(BDD_RUNNING); + return bddfalse; + } + + if (var < 0 || var >= fdvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + + if (val < 0 || val >= domain[var].realsize) + { + bdd_error(BDD_RANGE); + return bddfalse; + } + + for (n=0 ; n>= 1; + } + + return v; +} + + +/* +NAME {* fdd\_scanvar *} +SECTION {* fdd *} +SHORT {* Finds one satisfying value of a FDD variable *} +PROTO {* int fdd_scanvar(BDD r, int var) *} +DESCR {* Finds one satisfying assignment of the FDD variable {\tt var} in the + BDD {\tt r} and returns this value. *} +RETURN {* The value of a satisfying assignment of {\tt var}. If {\tt r} is + the trivially false BDD, then a negative value is returned. *} +ALSO {* fdd\_scanallvar *} +*/ +int fdd_scanvar(BDD r, int var) +{ + int *allvar; + int res; + + CHECK(r); + if (r == bddfalse) + return -1; + if (var < 0 || var >= fdvarnum) + return bdd_error(BDD_VAR); + + allvar = fdd_scanallvar(r); + res = allvar[var]; + free(allvar); + + return res; +} + + +/* +NAME {* fdd\_scanallvar *} +SECTION {* fdd *} +SHORT {* Finds one satisfying value of all FDD variables *} +PROTO {* int* fdd_scanallvar(BDD r) *} +DESCR {* Finds one satisfying assignment in {\tt r} of all the defined + FDD variables. Each value is stored in an array which is + returned. The size of this array is exactly the number of + FDD variables defined. It is the user's responsibility to + free this array using {\tt free()}. *} +RETURN {* An array with all satisfying values. If {\tt r} is the trivially + false BDD, then NULL is returned. *} +ALSO {* fdd\_scanvar *} +*/ +int* fdd_scanallvar(BDD r) +{ + int n; + char *store; + int *res; + BDD p = r; + + CHECKa(r,NULL); + if (r == bddfalse) + return NULL; + + store = NEW(char,bddvarnum); + for (n=0 ; n=0 ; m--) + if ( store[domain[n].ivar[m]] ) + val = val*2 + 1; + else + val = val*2; + + res[n] = val; + } + + free(store); + + return res; +} + +/* +NAME {* fdd\_ithset *} +SECTION {* fdd *} +SHORT {* the variable set for the i'th finite domain block *} +PROTO {* BDD fdd_ithset(int var) *} +DESCR {* Returns the variable set that contains the variables used to + define the finite domain block {\tt var}. *} +RETURN {* The variable set or the constant false BDD on error. *} +ALSO {* fdd\_ithvar *} +*/ +BDD fdd_ithset(int var) +{ + if (!bddrunning) + { + bdd_error(BDD_RUNNING); + return bddfalse; + } + + if (var < 0 || var >= fdvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + + return domain[var].var; +} + +/* +NAME {* fdd\_domain *} +SECTION {* fdd *} +SHORT {* BDD encoding of the domain of a FDD variable *} +PROTO {* BDD fdd_domain(int var) *} +DESCR {* Returns what corresponds to a disjunction of all possible + values of the variable {\tt var}. + This is more efficient than doing + {\tt fdd\_ithvar(var,0) OR fdd\_ithvar(var,1) ...} explicitely + for all values in the domain of {\tt var}. *} +RETURN {* The encoding of the domain*} +*/ +BDD fdd_domain(int var) +{ + int n,val; + Domain *dom; + BDD d; + + if (!bddrunning) + { + bdd_error(BDD_RUNNING); + return bddfalse; + } + + if (var < 0 || var >= fdvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + + /* Encode V<=X-1. V is the variables in 'var' and X is the domain size */ + + dom = &domain[var]; + val = dom->realsize-1; + d = bddtrue; + + for (n=0 ; nbinsize ; n++) + { + BDD tmp; + + if (val & 0x1) + tmp = bdd_apply( bdd_nithvar(dom->ivar[n]), d, bddop_or ); + else + tmp = bdd_apply( bdd_nithvar(dom->ivar[n]), d, bddop_and ); + + val >>= 1; + + bdd_addref(tmp); + bdd_delref(d); + d = tmp; + } + + return d; +} + + +/* +NAME {* fdd\_equals *} +SECTION {* fdd *} +SHORT {* returns a BDD setting two FD. blocks equal *} +PROTO {* BDD fdd_equals(int f, int g) *} +DESCR {* Builds a BDD which is true for all the possible assignments to + the variable blocks {\tt f} and {\tt g} that makes the blocks + equal. This is more or less just a shorthand for calling + {\tt fdd\_equ()}. *} +RETURN {* The correct BDD or the constant false on errors. *} +*/ +BDD fdd_equals(int left, int right) +{ + BDD e = bddtrue, tmp1, tmp2; + int n; + + if (!bddrunning) + { + bdd_error(BDD_RUNNING); + return bddfalse; + } + + if (left < 0 || left >= fdvarnum || right < 0 || right >= fdvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + if (domain[left].realsize != domain[right].realsize) + { + bdd_error(BDD_RANGE); + return bddfalse; + } + + for (n=0 ; n"); + } + else + { + set[bddlevel2var[LEVEL(r)]] = 1; + fdd_printset_rec(ofile, LOW(r), set); + + set[bddlevel2var[LEVEL(r)]] = 2; + fdd_printset_rec(ofile, HIGH(r), set); + + set[bddlevel2var[LEVEL(r)]] = 0; + } +} + + +/*======================================================================*/ + +/* +NAME {* fdd\_scanset *} +SECTION {* fdd *} +SHORT {* scans a variable set *} +PROTO {* int fdd_scanset(BDD r, int **varset, int *varnum) *} +DESCR {* Scans the BDD {\tt r} to find all occurences of FDD variables + and then stores these in {\tt varset}. {\tt varset} will be set + to point to an array of size {\tt varnum} which will contain + the indices of the found FDD variables. It is the users + responsibility to free {\tt varset} after use. *} +RETURN {* Zero on success or a negative error code on error. *} +ALSO {* fdd\_makeset *} +*/ +int fdd_scanset(BDD r, int **varset, int *varnum) +{ + int *fv, fn; + int num,n,m,i; + + if (!bddrunning) + return bdd_error(BDD_RUNNING); + + if ((n=bdd_scanset(r, &fv, &fn)) < 0) + return n; + + for (n=0,num=0 ; n= fdvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + + for (n=0 ; n last || first < 0 || last >= fdvarnum) + return bdd_error(BDD_VARBLK); + + for (n=first ; n<=last ; n++) + { + bdd_addref(res); + tmp = bdd_apply(domain[n].var, res, bddop_and); + bdd_delref(res); + res = tmp; + } + + err = bdd_addvarblock(res, fixed); + + bdd_delref(res); + return err; +} + + +/* +NAME {* fdd\_setpair *} +SECTION {* fdd *} +SHORT {* defines a pair for two finite domain blocks *} +PROTO {* int fdd_setpair(bddPair *pair, int p1, int p2) *} +DESCR {* Defines each variable in the finite domain block {\tt p1} to + be paired with the corresponding variable in {\tt p2}. The result + is stored in {\tt pair} which must be allocated using + {\tt bdd\_makepair}. *} +RETURN {* Zero on success or a negative error code on error. *} +ALSO {* fdd\_setpairs *} +*/ +int fdd_setpair(bddPair *pair, int p1, int p2) +{ + int n,e; + + if (!bddrunning) + return bdd_error(BDD_RUNNING); + + if (p1<0 || p1>=fdvarnum || p2<0 || p2>=fdvarnum) + return bdd_error(BDD_VAR); + + if (domain[p1].binsize != domain[p2].binsize) + return bdd_error(BDD_VARNUM); + + for (n=0 ; n=fdvarnum || p2[n]<0 || p2[n]>=fdvarnum) + return bdd_error(BDD_VAR); + + for (n=0 ; nivar); + bdd_delref(d->var); +} + + +static void Domain_allocate(Domain* d, int range) +{ + int calcsize = 2; + + if (range <= 0 || range > INT_MAX/2) + { + bdd_error(BDD_RANGE); + return; + } + + d->realsize = range; + d->binsize = 1; + + while (calcsize < range) + { + d->binsize++; + calcsize <<= 1; + } + + d->ivar = (int *)malloc(sizeof(int)*d->binsize); + d->var = bddtrue; +} + + +int *fdddec2bin(int var, int val) +{ + int *res; + int n = 0; + + res = (int *)malloc(sizeof(int)*domain[var].binsize); + memset(res, 0, sizeof(int)*domain[var].binsize); + + while (val > 0) + { + if (val & 0x1) + res[n] = 1; + val >>= 1; + n++; + } + + return res; +} + + +/* EOF */ diff --git a/buddy/src/fdd.h b/buddy/src/fdd.h new file mode 100644 index 000000000..b9d89d931 --- /dev/null +++ b/buddy/src/fdd.h @@ -0,0 +1,173 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/fdd.h,v 1.1 2003/05/05 10:57:56 aduret Exp $ + FILE: fdd.h + DESCR: Finite domain data with BDDs + AUTH: Jorn Lind + DATE: (C) february 1999 +*************************************************************************/ + +#ifndef _FDD_H +#define _FDD_H + +#include "bdd.h" + + +#ifdef CPLUSPLUS +extern "C" { +#endif + +/* In file fdd.c */ + +extern int fdd_extdomain(int*, int); +extern int fdd_overlapdomain(int, int); +extern void fdd_clearall(void); +extern int fdd_domainnum(void); +extern int fdd_domainsize(int); +extern int fdd_varnum(int); +extern int* fdd_vars(int); +extern BDD fdd_ithvar(int, int); +extern int fdd_scanvar(BDD, int); +extern int* fdd_scanallvar(BDD); +extern BDD fdd_ithset(int); +extern BDD fdd_domain(int); +extern BDD fdd_equals(int, int); +extern bddfilehandler fdd_file_hook(bddfilehandler); +#ifdef CPLUSPLUS +extern bddstrmhandler fdd_strm_hook(bddstrmhandler); +#endif +extern void fdd_printset(BDD); +extern void fdd_fprintset(FILE*, BDD); +extern int fdd_scanset(BDD, int**, int*); +extern BDD fdd_makeset(int*, int); +extern int fdd_intaddvarblock(int, int, int); +extern int fdd_setpair(bddPair*, int, int); +extern int fdd_setpairs(bddPair*, int*, int*, int); + +#ifdef CPLUSPLUS +} +#endif + +/************************************************************************* + If this file is included from a C++ compiler then the following + classes, wrappers and hacks are supplied. +*************************************************************************/ +#ifdef CPLUSPLUS + + /* FDD extensions */ + +inline bdd fdd_ithvarpp(int var, int val) +{ return fdd_ithvar(var, val); } + +inline bdd fdd_ithsetpp(int var) +{ return fdd_ithset(var); } + +inline bdd fdd_domainpp(int var) +{ return fdd_domain(var); } + +inline int fdd_scanvar(const bdd &r, int var) +{ return fdd_scanvar(r.root, var); } + +inline int* fdd_scanallvar(const bdd &r) +{ return fdd_scanallvar(r.root); } + +inline bdd fdd_equalspp(int left, int right) +{ return fdd_equals(left, right); } + +inline void fdd_printset(const bdd &r) +{ fdd_printset(r.root); } + +inline void fdd_fprintset(FILE* ofile, const bdd &r) +{ fdd_fprintset(ofile, r.root); } + +inline int fdd_scanset(const bdd &r, int *&v, int &n) +{ return fdd_scanset(r.root, &v, &n); } + +inline bdd fdd_makesetpp(int *v, int n) +{ return fdd_makeset(v,n); } + +#if 0 +inline bdd* fdd_conpp(int bitnum, int var) +{ return fdd_transfer( bitnum, fdd_con(bitnum, var) ); } + +inline bdd* fdd_varpp(int bitnum, int var) +{ return fdd_transfer( bitnum, fdd_var(bitnum, var) ); } + +extern int fdd_isconst(int bitnum, bdd *e); +extern int fdd_val(int bitnum, bdd *e); + +inline bdd* fdd_add(int bitnum, bdd *left, bdd *right) +{ return fdd_termopr(bitnum, left, right,bdd::fddAdd); } + +inline bdd* fdd_sub(int bitnum, bdd *left, bdd *right) +{ return fdd_termopr(bitnum, left, right,bdd::fddSub); } + +inline bdd* fdd_shl(int bitnum, bdd *expr, bdd c) +{ return fdd_shift(bitnum, expr, c, bdd::fddShl); } + +inline bdd* fdd_shr(int bitnum, bdd *expr, bdd c) +{ return fdd_shift(bitnum, expr, c, bdd::fddShr); } + +inline bdd fdd_lth(int bitnum, bdd *left, bdd *right) +{ return fdd_relopr(bitnum, left, right, bdd::fddLth); } + +inline bdd fdd_lte(int bitnum, bdd *left, bdd *right) +{ return fdd_relopr(bitnum, left, right, bdd::fddLte); } + +inline bdd fdd_gth(int bitnum, bdd *left, bdd *right) +{ return fdd_relopr(bitnum, left, right, bdd::fddGth); } + +inline bdd fdd_gte(int bitnum, bdd *left, bdd *right) +{ return fdd_relopr(bitnum, left, right, bdd::fddGte); } + +inline bdd fdd_equ(int bitnum, bdd *left, bdd *right) +{ return fdd_relopr(bitnum, left, right, bdd::fddEqu); } + +inline bdd fdd_neq(int bitnum, bdd *left, bdd *right) +{ return fdd_relopr(bitnum, left, right, bdd::fddNeq); } +#endif + + /* Hacks to allow for overloading of return-types only */ +#define fdd_ithvar fdd_ithvarpp +#define fdd_ithset fdd_ithsetpp +#define fdd_domain fdd_domainpp +#define fdd_equals fdd_equalspp +#define fdd_makeset fdd_makesetpp +#define fdd_con fdd_conpp +#define fdd_var fdd_varpp + + +#endif /* CPLUSPLUS */ + +#endif /* _FDD_H */ + + +/* EOF */ diff --git a/buddy/src/imatrix.c b/buddy/src/imatrix.c new file mode 100644 index 000000000..eb21ea49e --- /dev/null +++ b/buddy/src/imatrix.c @@ -0,0 +1,149 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + FILE: imatrix.cc + DESCR: Interaction matrix + AUTH: Jorn Lind + DATE: (C) february 2000 +*************************************************************************/ +#include +#include +#include +#include "kernel.h" +#include "imatrix.h" + +/************************************************************************* +*************************************************************************/ + +imatrix* imatrixNew(int size) +{ + imatrix *mtx = NEW(imatrix,1); + int n,m; + + if (!mtx) + return NULL; + + if ((mtx->rows=NEW(char*,size)) == NULL) + { + free(mtx); + return NULL; + } + + for (n=0 ; nrows[n]=NEW(char,size/8+1)) == NULL) + { + for (m=0 ; mrows[m]); + free(mtx); + return NULL; + } + + memset(mtx->rows[n], 0, size/8+1); + } + + mtx->size = size; + + return mtx; +} + + +void imatrixDelete(imatrix *mtx) +{ + int n; + + for (n=0 ; nsize ; n++) + free(mtx->rows[n]); + free(mtx->rows); + free(mtx); +} + + +/*======================================================================*/ + +void imatrixFPrint(imatrix *mtx, FILE *ofile) +{ + int x,y; + + fprintf(ofile, " "); + for (x=0 ; xsize ; x++) + fprintf(ofile, "%c", x < 26 ? (x+'a') : (x-26)+'A'); + fprintf(ofile, "\n"); + + for (y=0 ; ysize ; y++) + { + fprintf(ofile, "%2d %c", y, y < 26 ? (y+'a') : (y-26)+'A'); + for (x=0 ; xsize ; x++) + fprintf(ofile, "%c", imatrixDepends(mtx,y,x) ? 'x' : ' '); + fprintf(ofile, "\n"); + } +} + + +void imatrixPrint(imatrix *mtx) +{ + imatrixFPrint(mtx, stdout); +} + + +void imatrixSet(imatrix *mtx, int a, int b) +{ + mtx->rows[a][b/8] |= 1<<(b%8); +} + + +void imatrixClr(imatrix *mtx, int a, int b) +{ + mtx->rows[a][b/8] &= ~(1<<(b%8)); +} + + +int imatrixDepends(imatrix *mtx, int a, int b) +{ + return mtx->rows[a][b/8] & (1<<(b%8)); +} + + +/*======================================================================*/ + +#if 0 +void main(void) +{ + imatrix *m = imatrixNew(16); + + imatrixSet(m,0,2); + imatrixSet(m,8,8); + imatrixSet(m,15,15); + + imatrixPrint(m); +} +#endif + +/* EOF */ diff --git a/buddy/src/imatrix.h b/buddy/src/imatrix.h new file mode 100644 index 000000000..bca711e92 --- /dev/null +++ b/buddy/src/imatrix.h @@ -0,0 +1,59 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + FILE: imatrix.h + DESCR: Interaction matrix + AUTH: Jorn Lind + DATE: (C) february 2000 +*************************************************************************/ + +#ifndef _IMATRIX_H +#define _IMATRIX_H + +typedef struct _imatrix +{ + char **rows; + int size; +} imatrix; + + +extern imatrix* imatrixNew(int); +extern void imatrixDelete(imatrix*); +extern void imatrixFPrint(imatrix*,FILE *); +extern void imatrixPrint(imatrix*); +extern void imatrixSet(imatrix*,int,int); +extern void imatrixClr(imatrix*,int,int); +extern int imatrixDepends(imatrix*,int,int); + + +#endif /* _IMATRIX_H */ + + +/* EOF */ diff --git a/buddy/src/kernel.c b/buddy/src/kernel.c new file mode 100644 index 000000000..b06a46f0f --- /dev/null +++ b/buddy/src/kernel.c @@ -0,0 +1,1492 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/kernel.c,v 1.1 2003/05/05 10:57:57 aduret Exp $ + FILE: kernel.c + DESCR: implements the bdd kernel functions. + AUTH: Jorn Lind + DATE: (C) june 1997 + + WARNING: Do not use pointers to nodes across makenode calls, + as makenode may resize/move the nodetable. + +*************************************************************************/ +#include +#include +#include +#include +#include + +#include "kernel.h" +#include "cache.h" +#include "prime.h" + +/************************************************************************* + Various definitions and global variables +*************************************************************************/ + +/*=== EXTERNAL VARIABLES FOR PACKAGE USERS =============================*/ + +/* +NAME {* bddtrue *} +SECTION {* kernel *} +SHORT {* the constant true bdd *} +PROTO {* extern const BDD bddtrue; *} +DESCR {* This bdd holds the constant true value *} +ALSO {* bddfalse, bdd\_true, bdd\_false *} +*/ +const BDD bddtrue=1; /* The constant true bdd */ + +/* +NAME {* bddfalse*} +SECTION {* kernel *} +SHORT {* the constant false bdd *} +PROTO {* extern const BDD bddfalse; *} +DESCR {* This bdd holds the constant false value *} +ALSO {* bddtrue, bdd\_true, bdd\_false *} +*/ +const BDD bddfalse=0; /* The constant false bdd */ + + +/*=== INTERNAL DEFINITIONS =============================================*/ + +/* Min. number of nodes (%) that has to be left after a garbage collect + unless a resize should be done. */ +static int minfreenodes=20; + + +/*=== GLOBAL KERNEL VARIABLES ==========================================*/ + +int bddrunning; /* Flag - package initialized */ +int bdderrorcond; /* Some error condition */ +int bddnodesize; /* Number of allocated nodes */ +int bddmaxnodesize; /* Maximum allowed number of nodes */ +int bddmaxnodeincrease; /* Max. # of nodes used to inc. table */ +BddNode* bddnodes; /* All of the bdd nodes */ +int bddfreepos; /* First free node */ +int bddfreenum; /* Number of free nodes */ +long int bddproduced; /* Number of new nodes ever produced */ +int bddvarnum; /* Number of defined BDD variables */ +int* bddrefstack; /* Internal node reference stack */ +int* bddrefstacktop; /* Internal node reference stack top */ +int* bddvar2level; /* Variable -> level table */ +int* bddlevel2var; /* Level -> variable table */ +jmp_buf bddexception; /* Long-jump point for interrupting calc. */ +int bddresized; /* Flag indicating a resize of the nodetable */ + +bddCacheStat bddcachestats; + + +/*=== PRIVATE KERNEL VARIABLES =========================================*/ + +static BDD* bddvarset; /* Set of defined BDD variables */ +static int gbcollectnum; /* Number of garbage collections */ +static int cachesize; /* Size of the operator caches */ +static long int gbcclock; /* Clock ticks used in GBC */ +static int usednodes_nextreorder; /* When to do reorder next time */ +static bddinthandler err_handler; /* Error handler */ +static bddgbchandler gbc_handler; /* Garbage collection handler */ +static bdd2inthandler resize_handler; /* Node-table-resize handler */ + + + /* Strings for all error mesages */ +static char *errorstrings[BDD_ERRNUM] = +{ "Out of memory", "Unknown variable", "Value out of range", + "Unknown BDD root dereferenced", "bdd_init() called twice", + "File operation failed", "Incorrect file format", + "Variables not in ascending order", "User called break", + "Mismatch in size of variable sets", + "Cannot allocate fewer nodes than already in use", + "Unknown operator", "Illegal variable set", + "Bad variable block operation", + "Trying to decrease the number of variables", + "Trying to replace with variables already in the bdd", + "Number of nodes reached user defined maximum", + "Unknown BDD - was not in node table", + "Bad size argument", + "Mismatch in bitvector size", + "Illegal shift-left/right parameter", + "Division by zero" }; + + +/*=== OTHER INTERNAL DEFINITIONS =======================================*/ + +#define NODEHASH(lvl,l,h) (TRIPLE(lvl,l,h) % bddnodesize) + + +/************************************************************************* + BDD misc. user operations +*************************************************************************/ + +/* +NAME {* bdd\_init *} +SECTION {* kernel *} +SHORT {* initializes the BDD package *} +PROTO {* int bdd_init(int nodesize, int cachesize) *} +DESCR {* This function initiates the bdd package and {\em must} be called + before any bdd operations are done. The argument {\tt nodesize} + is the initial number of nodes in the nodetable and {\tt cachesize} + is the fixed size of the internal caches. Typical values for + {\tt nodesize} are 10000 nodes for small test examples and up to + 1000000 nodes for large examples. A cache size of 10000 seems to + work good even for large examples, but lesser values should do it + for smaller examples. + + The number of cache entries can also be set to depend on the size + of the nodetable using a call to {\tt bdd\_setcacheratio}. + + The initial number of nodes is not critical for any bdd operation + as the table will be resized whenever there are to few nodes left + after a garbage collection. But it does have some impact on the + efficency of the operations. *} +RETURN {* If no errors occur then 0 is returned, otherwise + a negative error code. *} +ALSO {* bdd\_done, bdd\_resize\_hook *} +*/ +int bdd_init(int initnodesize, int cs) +{ + int n, err; + + if (bddrunning) + return bdd_error(BDD_RUNNING); + + bddnodesize = bdd_prime_gte(initnodesize); + + if ((bddnodes=(BddNode*)malloc(sizeof(BddNode)*bddnodesize)) == NULL) + return bdd_error(BDD_MEMORY); + + bddresized = 0; + + for (n=0 ; n MAXVAR) + { + bdd_error(BDD_RANGE); + return bddfalse; + } + + if (num < bddvarnum) + return bdd_error(BDD_DECVNUM); + if (num == bddvarnum) + return 0; + + if (bddvarset == NULL) + { + if ((bddvarset=(BDD*)malloc(sizeof(BDD)*num*2)) == NULL) + return bdd_error(BDD_MEMORY); + if ((bddlevel2var=(int*)malloc(sizeof(int)*(num+1))) == NULL) + { + free(bddvarset); + return bdd_error(BDD_MEMORY); + } + if ((bddvar2level=(int*)malloc(sizeof(int)*(num+1))) == NULL) + { + free(bddvarset); + free(bddlevel2var); + return bdd_error(BDD_MEMORY); + } + } + else + { + if ((bddvarset=(BDD*)realloc(bddvarset,sizeof(BDD)*num*2)) == NULL) + return bdd_error(BDD_MEMORY); + if ((bddlevel2var=(int*)realloc(bddlevel2var,sizeof(int)*(num+1))) == NULL) + { + free(bddvarset); + return bdd_error(BDD_MEMORY); + } + if ((bddvar2level=(int*)realloc(bddvar2level,sizeof(int)*(num+1))) == NULL) + { + free(bddvarset); + free(bddlevel2var); + return bdd_error(BDD_MEMORY); + } + } + + if (bddrefstack != NULL) + free(bddrefstack); + bddrefstack = bddrefstacktop = (int*)malloc(sizeof(int)*(num*2+4)); + + for(bdv=bddvarnum ; bddvarnum < num; bddvarnum++) + { + bddvarset[bddvarnum*2] = PUSHREF( bdd_makenode(bddvarnum, 0, 1) ); + bddvarset[bddvarnum*2+1] = bdd_makenode(bddvarnum, 1, 0); + POPREF(1); + + if (bdderrorcond) + { + bddvarnum = bdv; + return -bdderrorcond; + } + + bddnodes[bddvarset[bddvarnum*2]].refcou = MAXREF; + bddnodes[bddvarset[bddvarnum*2+1]].refcou = MAXREF; + bddlevel2var[bddvarnum] = bddvarnum; + bddvar2level[bddvarnum] = bddvarnum; + } + + LEVEL(0) = num; + LEVEL(1) = num; + bddvar2level[num] = num; + bddlevel2var[num] = num; + + bdd_pairs_resize(oldbddvarnum, bddvarnum); + bdd_operator_varresize(); + + bdd_enable_reorder(); + + return 0; +} + + +/* +NAME {* bdd\_extvarnum *} +SECTION {* kernel *} +SHORT {* add extra BDD variables *} +PROTO {* int bdd_extvarnum(int num) *} +DESCR {* Extends the current number of allocated BDD variables with + {\tt num} extra variables. *} +RETURN {* The old number of allocated variables or a negative error code. *} +ALSO {* bdd\_setvarnum, bdd\_ithvar, bdd\_nithvar *} +*/ +int bdd_extvarnum(int num) +{ + int start = bddvarnum; + + if (num < 0 || num > 0x3FFFFFFF) + return bdd_error(BDD_RANGE); + + bdd_setvarnum(bddvarnum+num); + return start; +} + + +/* +NAME {* bdd\_error\_hook *} +SECTION {* kernel *} +SHORT {* set a handler for error conditions *} +PROTO {* bddinthandler bdd_error_hook(bddinthandler handler) *} +DESCR {* Whenever an error occurs in the bdd package a test is done to + see if an error handler is supplied by the user and if such exists + then it will be called + with an error code in the variable {\tt errcode}. The handler may + then print any usefull information and return or exit afterwards. + + This function sets the handler to be {\tt handler}. If a {\tt NULL} + argument is supplied then no calls are made when an error occurs. + Possible error codes are found in {\tt bdd.h}. The default handler + is {\tt bdd\_default\_errhandler} which will use {\tt exit()} to + terminate the program. + + Any handler should be defined like this: + \begin{verbatim} +void my_error_handler(int errcode) +{ + ... +} +\end{verbatim} *} +RETURN {* The previous handler *} +ALSO {* bdd\_errstring *} +*/ +bddinthandler bdd_error_hook(bddinthandler handler) +{ + bddinthandler tmp = err_handler; + err_handler = handler; + return tmp; +} + + +/* +NAME {* bdd\_clear\_error *} +SECTION {* kernel *} +SHORT {* clears an error condition in the kernel *} +PROTO {* void bdd_clear_error(void) *} +DESCR {* The BuDDy kernel may at some point run out of new ROBDD nodes if + a maximum limit is set with {\tt bdd\_setmaxnodenum}. In this case + the current error handler is called and an internal error flag + is set. Further calls to BuDDy will always return {\tt bddfalse}. + From here BuDDy must either be restarted or {\tt bdd\_clear\_error} + may be called after action is taken to let BuDDy continue. This may + not be especially usefull since the default error handler exits + the program - other needs may of course exist.*} +ALSO {* bdd\_error\_hook, bdd\_setmaxnodenum *} +*/ +void bdd_clear_error(void) +{ + bdderrorcond = 0; + bdd_operator_reset(); +} + + +/* +NAME {* bdd\_gbc\_hook *} +SECTION {* kernel *} +SHORT {* set a handler for garbage collections *} +PROTO {* bddgbchandler bdd_gbc_hook(bddgbchandler handler) *} +DESCR {* Whenever a garbage collection is required, a test is done to + see if a handler for this event is supplied by the user and if such + exists then it is called, both before and after the garbage collection + takes places. This is indicated by an integer flag {\tt pre} passed to + the handler, which will be one before garbage collection and zero + after garbage collection. + + This function sets the handler to be {\tt handler}. If a {\tt + NULL} argument is supplied then no calls are made when a + garbage collection takes place. The argument {\tt pre} + indicates pre vs. post garbage collection and the argument + {\tt stat} contains information about the garbage + collection. The default handler is {\tt bdd\_default\_gbchandler}. + + Any handler should be defined like this: + \begin{verbatim} +void my_gbc_handler(int pre, bddGbcStat *stat) +{ + ... +} +\end{verbatim} *} +RETURN {* The previous handler *} +ALSO {* bdd\_resize\_hook, bdd\_reorder\_hook *} */ +bddgbchandler bdd_gbc_hook(bddgbchandler handler) +{ + bddgbchandler tmp = gbc_handler; + gbc_handler = handler; + return tmp; +} + + +/* +NAME {* bdd\_resize\_hook *} +SECTION {* kernel *} +SHORT {* set a handler for nodetable resizes *} +PROTO {* bdd2inthandler bdd_resize_hook(bdd2inthandler handler) *} +DESCR {* Whenever it is impossible to get enough free nodes by a garbage + collection then the node table is resized and a test is done to see + if a handler is supllied by the user for this event. If so then + it is called with {\tt oldsize} being the old nodetable size and + {\tt newsize} being the new nodetable size. + + This function sets the handler to be {\tt handler}. If a {\tt NULL} + argument is supplied then no calls are made when a table resize + is done. No default handler is supplied. + + Any handler should be defined like this: + \begin{verbatim} +void my_resize_handler(int oldsize, int newsize) +{ + ... +} +\end{verbatim} *} +RETURN {* The previous handler *} +ALSO {* bdd\_gbc\_hook, bdd\_reorder\_hook, bdd\_setminfreenodes *} +*/ +bdd2inthandler bdd_resize_hook(bdd2inthandler handler) +{ + bdd2inthandler tmp = handler; + resize_handler = handler; + return tmp; +} + + +/* +NAME {* bdd\_setmaxincrease *} +SECTION {* kernel *} +SHORT {* set max. number of nodes used to increase node table *} +PROTO {* int bdd_setmaxincrease(int size) *} +DESCR {* The node table is expanded by doubling the size of the table + when no more free nodes can be found, but a maximum for the + number of new nodes added can be set with {\tt bdd\_maxincrease} + to {\tt size} nodes. The default is 50000 nodes (1 Mb). *} +RETURN {* The old threshold on succes, otherwise a negative error code. *} +ALSO {* bdd\_setmaxnodenum, bdd\_setminfreenodes *} +*/ +int bdd_setmaxincrease(int size) +{ + int old = bddmaxnodeincrease; + + if (size < 0) + return bdd_error(BDD_SIZE); + + bddmaxnodeincrease = size; + return old; +} + +/* +NAME {* bdd\_setmaxnodenum *} +SECTION {* kernel *} +SHORT {* set the maximum available number of bdd nodes *} +PROTO {* int bdd_setmaxnodenum(int size) *} +DESCR {* This function sets the maximal number of bdd nodes the package may + allocate before it gives up a bdd operation. The + argument {\tt size} is the absolute maximal number of nodes there + may be allocated for the nodetable. Any attempt to allocate more + nodes results in the constant false being returned and the error + handler being called until some nodes are deallocated. + A value of 0 is interpreted as an unlimited amount. + It is {\em not} possible to specify + fewer nodes than there has already been allocated. *} +RETURN {* The old threshold on succes, otherwise a negative error code. *} +ALSO {* bdd\_setmaxincrease, bdd\_setminfreenodes *} +*/ +int bdd_setmaxnodenum(int size) +{ + if (size > bddnodesize || size == 0) + { + int old = bddmaxnodesize; + bddmaxnodesize = size; + return old; + } + + return bdd_error(BDD_NODES); +} + + +/* +NAME {* bdd\_setminfreenodes *} +SECTION {* kernel *} +SHORT {* set min. no. of nodes to be reclaimed after GBC. *} +PROTO {* int bdd_setminfreenodes(int n) *} +DESCR {* Whenever a garbage collection is executed the number of free + nodes left are checked to see if a resize of the node table is + required. If $X = (\mathit{bddfreenum}*100)/\mathit{maxnum}$ + is less than or + equal to {\tt n} then a resize is initiated. The range of + {\tt X} is of course $0\ldots 100$ and has some influence + on how fast the package is. A low number means harder attempts + to avoid resizing and saves space, and a high number reduces + the time used in garbage collections. The default value is + 20. *} +RETURN {* The old threshold on succes, otherwise a negative error code. *} +ALSO {* bdd\_setmaxnodenum, bdd\_setmaxincrease *} +*/ +int bdd_setminfreenodes(int mf) +{ + int old = minfreenodes; + + if (mf<0 || mf>100) + return bdd_error(BDD_RANGE); + + minfreenodes = mf; + return old; +} + + +/* +NAME {* bdd\_getnodenum *} +SECTION {* kernel *} +SHORT {* get the number of active nodes in use *} +PROTO {* int bdd_getnodenum(void) *} +DESCR {* Returns the number of nodes in the nodetable that are + currently in use. Note that dead nodes that have not been + reclaimed yet + by a garbage collection are counted as active. *} +RETURN {* The number of nodes. *} +ALSO {* bdd\_getallocnum, bdd\_setmaxnodenum *} +*/ +int bdd_getnodenum(void) +{ + return bddnodesize - bddfreenum; +} + + +/* +NAME {* bdd\_getallocnum *} +SECTION {* kernel *} +SHORT {* get the number of allocated nodes *} +PROTO {* int bdd_getallocnum(void) *} +DESCR {* Returns the number of nodes currently allocated. This includes + both dead and active nodes. *} +RETURN {* The number of nodes. *} +ALSO {* bdd\_getnodenum, bdd\_setmaxnodenum *} +*/ +int bdd_getallocnum(void) +{ + return bddnodesize; +} + + +/* +NAME {* bdd\_isrunning *} +SECTION {* kernel *} +SHORT {* test whether the package is started or not *} +PROTO {* void bdd_isrunning(void) *} +DESCR {* This function tests the internal state of the package and returns + a status. *} +RETURN {* 1 (true) if the package has been started, otherwise 0. *} +ALSO {* bdd\_init, bdd\_done *} +*/ +int bdd_isrunning(void) +{ + return bddrunning; +} + + +/* +NAME {* bdd\_versionstr *} +SECTION {* kernel *} +SHORT {* returns a text string with version information *} +PROTO {* char* bdd_versionstr(void) *} +DESCR {* This function returns a text string with information about the + version of the bdd package. *} +ALSO {* bdd\_versionnum *} +*/ +char *bdd_versionstr(void) +{ + static char str[100]; + sprintf(str, "BuDDy - release %d.%d", VERSION/10, VERSION%10); + return str; +} + + +/* +NAME {* bdd\_versionnum *} +SECTION {* kernel *} +SHORT {* returns the version number of the bdd package *} +PROTO {* int bdd_versionnum(void) *} +DESCR {* This function returns the version number of the bdd package. The + number is in the range 10-99 for version 1.0 to 9.9. *} +ALSO {* bdd\_versionstr *} +*/ +int bdd_versionnum(void) +{ + return VERSION; +} + + +/* +NAME {* bdd\_stats *} +SECTION {* kernel *} +SHORT {* returns some status information about the bdd package *} +PROTO {* void bdd_stats(bddStat* stat) *} +DESCR {* This function acquires information about the internal state of + the bdd package. The status information is written into the + {\tt stat} argument. *} +ALSO {* bddStat *} +*/ +void bdd_stats(bddStat *s) +{ + s->produced = bddproduced; + s->nodenum = bddnodesize; + s->maxnodenum = bddmaxnodesize; + s->freenodes = bddfreenum; + s->minfreenodes = minfreenodes; + s->varnum = bddvarnum; + s->cachesize = cachesize; + s->gbcnum = gbcollectnum; +} + + + +/* +NAME {* bdd\_cachestats *} +SECTION {* kernel *} +SHORT {* Fetch cache access usage *} +PROTO {* void bdd_cachestats(bddCacheStat *s) *} +DESCR {* Fetches cache usage information and stores it in {\tt s}. The + fields of {\tt s} can be found in the documentaion for + {\tt bddCacheStat}. This function may or may not be compiled + into the BuDDy package - depending on the setup at compile + time of BuDDy. *} +ALSO {* bddCacheStat, bdd\_printstat *} +*/ +void bdd_cachestats(bddCacheStat *s) +{ + *s = bddcachestats; +} + + +/* +NAME {* bdd\_printstat *} +EXTRA {* bdd\_fprintstat *} +SECTION {* kernel *} +SHORT {* print cache statistics *} +PROTO {* void bdd_printstat(void) +void bdd_fprintstat(FILE *ofile) *} +DESCR {* Prints information about the cache performance on standard output + (or the supplied file). The information contains the number of + accesses to the unique node table, the number of times a node + was (not) found there and how many times a hash chain had to + traversed. Hit and miss count is also given for the operator + caches. *} +ALSO {* bddCacheStat, bdd\_cachestats *} +*/ +void bdd_fprintstat(FILE *ofile) +{ + bddCacheStat s; + bdd_cachestats(&s); + + fprintf(ofile, "\nCache statistics\n"); + fprintf(ofile, "----------------\n"); + + fprintf(ofile, "Unique Access: %ld\n", s.uniqueAccess); + fprintf(ofile, "Unique Chain: %ld\n", s.uniqueChain); + fprintf(ofile, "Unique Hit: %ld\n", s.uniqueHit); + fprintf(ofile, "Unique Miss: %ld\n", s.uniqueMiss); + fprintf(ofile, "=> Hit rate = %.2f\n", + (s.uniqueHit+s.uniqueMiss > 0) ? + ((float)s.uniqueHit)/((float)s.uniqueHit+s.uniqueMiss) : 0); + fprintf(ofile, "Operator Hits: %ld\n", s.opHit); + fprintf(ofile, "Operator Miss: %ld\n", s.opMiss); + fprintf(ofile, "=> Hit rate = %.2f\n", + (s.opHit+s.opMiss > 0) ? + ((float)s.opHit)/((float)s.opHit+s.opMiss) : 0); + fprintf(ofile, "Swap count = %ld\n", s.swapCount); +} + + +void bdd_printstat(void) +{ + bdd_fprintstat(stdout); +} + + +/************************************************************************* + Error handler +*************************************************************************/ + +/* +NAME {* bdd\_errstring *} +SECTION {* kernel *} +SHORT {* converts an error code to a string*} +PROTO {* const char *bdd_errstring(int errorcode) *} +DESCR {* Converts a negative error code {\tt errorcode} to a descriptive + string that can be used for error handling. *} +RETURN {* An error description string if {\tt e} is known, otherwise {\tt NULL}. *} +ALSO {* bdd\_err\_hook *} +*/ +const char *bdd_errstring(int e) +{ + e = abs(e); + if (e<1 || e>BDD_ERRNUM) + return NULL; + return errorstrings[e-1]; +} + + +void bdd_default_errhandler(int e) +{ + fprintf(stderr, "BDD error: %s\n", bdd_errstring(e)); + exit(1); +} + + +int bdd_error(int e) +{ + if (err_handler != NULL) + err_handler(e); + + return e; +} + + +/************************************************************************* + BDD primitives +*************************************************************************/ + +/* +NAME {* bdd\_true *} +SECTION {* kernel *} +SHORT {* returns the constant true bdd *} +PROTO {* BDD bdd_true(void) *} +DESCR {* This function returns the constant true bdd and can freely be + used together with the {\tt bddtrue} and {\tt bddfalse} + constants. *} +RETURN {* The constant true bdd *} +ALSO {* bdd\_false, bddtrue, bddfalse *} +*/ +BDD bdd_true(void) +{ + return 1; +} + + +/* +NAME {* bdd\_false *} +SECTION {* kernel *} +SHORT {* returns the constant false bdd *} +PROTO {* BDD bdd_false(void) *} +DESCR {* This function returns the constant false bdd and can freely be + used together with the {\tt bddtrue} and {\tt bddfalse} + constants. *} +RETURN {* The constant false bdd *} +ALSO {* bdd\_true, bddtrue, bddfalse *} +*/ +BDD bdd_false(void) +{ + return 0; +} + + +/* +NAME {* bdd\_ithvar *} +SECTION {* kernel *} +SHORT {* returns a bdd representing the I'th variable *} +PROTO {* BDD bdd_ithvar(int var) *} +DESCR {* This function is used to get a bdd representing the I'th + variable (one node with the childs true and false). The requested + variable must be in the range define by {\tt + bdd\_setvarnum} starting with 0 being the first. For ease + of use then the bdd returned from {\tt bdd\_ithvar} does + not have to be referenced counted with a call to {\tt + bdd\_addref}. The initial variable order is defined by the + the index {\tt var} that also defines the position in the + variable order -- variables with lower indecies are before + those with higher indecies. *} +RETURN {* The I'th variable on succes, otherwise the constant false bdd *} +ALSO {* bdd\_setvarnum, bdd\_nithvar, bddtrue, bddfalse *} */ +BDD bdd_ithvar(int var) +{ + if (var < 0 || var >= bddvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + + return bddvarset[var*2]; +} + + +/* +NAME {* bdd\_nithvar *} +SECTION {* kernel *} +SHORT {* returns a bdd representing the negation of the I'th variable *} +PROTO {* BDD bdd_nithvar(int var) *} +DESCR {* This function is used to get a bdd representing the negation of + the I'th variable (one node with the childs false and true). + The requested variable must be in the range define by + {\tt bdd\_setvarnum} starting with 0 being the first. For ease of + use then the bdd returned from {\tt bdd\_nithvar} does not have + to be referenced counted with a call to {\tt bdd\_addref}. *} +RETURN {* The negated I'th variable on succes, otherwise the constant false bdd *} +ALSO {* bdd\_setvarnum, bdd\_ithvar, bddtrue, bddfalse *} +*/ +BDD bdd_nithvar(int var) +{ + if (var < 0 || var >= bddvarnum) + { + bdd_error(BDD_VAR); + return bddfalse; + } + + return bddvarset[var*2+1]; +} + + +/* +NAME {* bdd\_varnum *} +SECTION {* kernel *} +SHORT {* returns the number of defined variables *} +PROTO {* int bdd_varnum(void) *} +DESCR {* This function returns the number of variables defined by + a call to {\tt bdd\_setvarnum}.*} +RETURN {* The number of defined variables *} +ALSO {* bdd\_setvarnum, bdd\_ithvar *} +*/ +int bdd_varnum(void) +{ + return bddvarnum; +} + + +/* +NAME {* bdd\_var *} +SECTION {* info *} +SHORT {* gets the variable labeling the bdd *} +PROTO {* int bdd_var(BDD r) *} +DESCR {* Gets the variable labeling the bdd {\tt r}. *} +RETURN {* The variable number. *} +*/ +int bdd_var(BDD root) +{ + CHECK(root); + if (root < 2) + return bdd_error(BDD_ILLBDD); + + return (bddlevel2var[LEVEL(root)]); +} + + +/* +NAME {* bdd\_low *} +SECTION {* info *} +SHORT {* gets the false branch of a bdd *} +PROTO {* BDD bdd_low(BDD r) *} +DESCR {* Gets the false branch of the bdd {\tt r}. *} +RETURN {* The bdd of the false branch *} +ALSO {* bdd\_high *} +*/ +BDD bdd_low(BDD root) +{ + CHECK(root); + if (root < 2) + return bdd_error(BDD_ILLBDD); + + return (LOW(root)); +} + + +/* +NAME {* bdd\_high *} +SECTION {* info *} +SHORT {* gets the true branch of a bdd *} +PROTO {* BDD bdd_high(BDD r) *} +DESCR {* Gets the true branch of the bdd {\tt r}. *} +RETURN {* The bdd of the true branch *} +ALSO {* bdd\_low *} +*/ +BDD bdd_high(BDD root) +{ + CHECK(root); + if (root < 2) + return bdd_error(BDD_ILLBDD); + + return (HIGH(root)); +} + + + +/************************************************************************* + Garbage collection and node referencing +*************************************************************************/ + +void bdd_default_gbchandler(int pre, bddGbcStat *s) +{ + if (!pre) + { + printf("Garbage collection #%d: %d nodes / %d free", + s->num, s->nodes, s->freenodes); + printf(" / %.1fs / %.1fs total\n", + (float)s->time/(float)(CLOCKS_PER_SEC), + (float)s->sumtime/(float)CLOCKS_PER_SEC); + } +} + + +static void bdd_gbc_rehash(void) +{ + int n; + + bddfreepos = 0; + bddfreenum = 0; + + for (n=bddnodesize-1 ; n>=2 ; n--) + { + register BddNode *node = &bddnodes[n]; + + if (LOWp(node) != -1) + { + register unsigned int hash; + + hash = NODEHASH(LEVELp(node), LOWp(node), HIGHp(node)); + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = n; + } + else + { + node->next = bddfreepos; + bddfreepos = n; + bddfreenum++; + } + } +} + + +void bdd_gbc(void) +{ + int *r; + int n; + long int c2, c1 = clock(); + + if (gbc_handler != NULL) + { + bddGbcStat s; + s.nodes = bddnodesize; + s.freenodes = bddfreenum; + s.time = 0; + s.sumtime = gbcclock; + s.num = gbcollectnum; + gbc_handler(1, &s); + } + + for (r=bddrefstack ; r 0) + bdd_mark(n); + bddnodes[n].hash = 0; + } + + bddfreepos = 0; + bddfreenum = 0; + + for (n=bddnodesize-1 ; n>=2 ; n--) + { + register BddNode *node = &bddnodes[n]; + + if ((LEVELp(node) & MARKON) && LOWp(node) != -1) + { + register unsigned int hash; + + LEVELp(node) &= MARKOFF; + hash = NODEHASH(LEVELp(node), LOWp(node), HIGHp(node)); + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = n; + } + else + { + LOWp(node) = -1; + node->next = bddfreepos; + bddfreepos = n; + bddfreenum++; + } + } + + bdd_operator_reset(); + + c2 = clock(); + gbcclock += c2-c1; + gbcollectnum++; + + if (gbc_handler != NULL) + { + bddGbcStat s; + s.nodes = bddnodesize; + s.freenodes = bddfreenum; + s.time = c2-c1; + s.sumtime = gbcclock; + s.num = gbcollectnum; + gbc_handler(0, &s); + } +} + + +/* +NAME {* bdd\_addref *} +SECTION {* kernel *} +SHORT {* increases the reference count on a node *} +PROTO {* BDD bdd_addref(BDD r) *} +DESCR {* Reference counting is done on externaly referenced nodes only + and the count for a specific node {\tt r} can and must be + increased using this function to avoid loosing the node in the next + garbage collection. *} +ALSO {* bdd\_delref *} +RETURN {* The BDD node {\tt r}. *} +*/ +BDD bdd_addref(BDD root) +{ + if (root < 2 || !bddrunning) + return root; + if (root >= bddnodesize) + return bdd_error(BDD_ILLBDD); + if (LOW(root) == -1) + return bdd_error(BDD_ILLBDD); + + INCREF(root); + return root; +} + + +/* +NAME {* bdd\_delref *} +SECTION {* kernel *} +SHORT {* decreases the reference count on a node *} +PROTO {* BDD bdd_delref(BDD r) *} +DESCR {* Reference counting is done on externaly referenced nodes only + and the count for a specific node {\tt r} can and must be + decreased using this function to make it possible to reclaim the + node in the next garbage collection. *} +ALSO {* bdd\_addref *} +RETURN {* The BDD node {\tt r}. *} +*/ +BDD bdd_delref(BDD root) +{ + if (root < 2 || !bddrunning) + return root; + if (root >= bddnodesize) + return bdd_error(BDD_ILLBDD); + if (LOW(root) == -1) + return bdd_error(BDD_ILLBDD); + + /* if the following line is present, fails there much earlier */ + if (!HASREF(root)) bdd_error(BDD_BREAK); /* distinctive */ + + DECREF(root); + return root; +} + + +/*=== RECURSIVE MARK / UNMARK ==========================================*/ + +void bdd_mark(int i) +{ + BddNode *node; + + if (i < 2) + return; + + node = &bddnodes[i]; + if (LEVELp(node) & MARKON || LOWp(node) == -1) + return; + + LEVELp(node) |= MARKON; + + bdd_mark(LOWp(node)); + bdd_mark(HIGHp(node)); +} + + +void bdd_mark_upto(int i, int level) +{ + BddNode *node = &bddnodes[i]; + + if (i < 2) + return; + + if (LEVELp(node) & MARKON || LOWp(node) == -1) + return; + + if (LEVELp(node) > level) + return; + + LEVELp(node) |= MARKON; + + bdd_mark_upto(LOWp(node), level); + bdd_mark_upto(HIGHp(node), level); +} + + +void bdd_markcount(int i, int *cou) +{ + BddNode *node; + + if (i < 2) + return; + + node = &bddnodes[i]; + if (MARKEDp(node) || LOWp(node) == -1) + return; + + SETMARKp(node); + *cou += 1; + + bdd_markcount(LOWp(node), cou); + bdd_markcount(HIGHp(node), cou); +} + + +void bdd_unmark(int i) +{ + BddNode *node; + + if (i < 2) + return; + + node = &bddnodes[i]; + + if (!MARKEDp(node) || LOWp(node) == -1) + return; + UNMARKp(node); + + bdd_unmark(LOWp(node)); + bdd_unmark(HIGHp(node)); +} + + +void bdd_unmark_upto(int i, int level) +{ + BddNode *node = &bddnodes[i]; + + if (i < 2) + return; + + if (!(LEVELp(node) & MARKON)) + return; + + LEVELp(node) &= MARKOFF; + + if (LEVELp(node) > level) + return; + + bdd_unmark_upto(LOWp(node), level); + bdd_unmark_upto(HIGHp(node), level); +} + + +/************************************************************************* + Unique node table functions +*************************************************************************/ + +int bdd_makenode(unsigned int level, int low, int high) +{ + register BddNode *node; + register unsigned int hash; + register int res; + +#ifdef CACHESTATS + bddcachestats.uniqueAccess++; +#endif + + /* check whether childs are equal */ + if (low == high) + return low; + + /* Try to find an existing node of this kind */ + hash = NODEHASH(level, low, high); + res = bddnodes[hash].hash; + + while(res != 0) + { + if (LEVEL(res) == level && LOW(res) == low && HIGH(res) == high) + { +#ifdef CACHESTATS + bddcachestats.uniqueHit++; +#endif + return res; + } + + res = bddnodes[res].next; +#ifdef CACHESTATS + bddcachestats.uniqueChain++; +#endif + } + + /* No existing node -> build one */ +#ifdef CACHESTATS + bddcachestats.uniqueMiss++; +#endif + + /* Any free nodes to use ? */ + if (bddfreepos == 0) + { + if (bdderrorcond) + return 0; + + /* Try to allocate more nodes */ + bdd_gbc(); + + if ((bddnodesize-bddfreenum) >= usednodes_nextreorder && + bdd_reorder_ready()) + { + longjmp(bddexception,1); + } + + if ((bddfreenum*100) / bddnodesize <= minfreenodes) + { + bdd_noderesize(1); + hash = NODEHASH(level, low, high); + } + + /* Panic if that is not possible */ + if (bddfreepos == 0) + { + bdd_error(BDD_NODENUM); + bdderrorcond = abs(BDD_NODENUM); + return 0; + } + } + + /* Build new node */ + res = bddfreepos; + bddfreepos = bddnodes[bddfreepos].next; + bddfreenum--; + bddproduced++; + + node = &bddnodes[res]; + LEVELp(node) = level; + LOWp(node) = low; + HIGHp(node) = high; + + /* Insert node */ + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = res; + + return res; +} + + +int bdd_noderesize(int doRehash) +{ + BddNode *newnodes; + int oldsize = bddnodesize; + int n; + + if (bddnodesize >= bddmaxnodesize && bddmaxnodesize > 0) + return -1; + + bddnodesize = bddnodesize << 1; + + if (bddnodesize > oldsize + bddmaxnodeincrease) + bddnodesize = oldsize + bddmaxnodeincrease; + + if (bddnodesize > bddmaxnodesize && bddmaxnodesize > 0) + bddnodesize = bddmaxnodesize; + + bddnodesize = bdd_prime_lte(bddnodesize); + + if (resize_handler != NULL) + resize_handler(oldsize, bddnodesize); + + newnodes = (BddNode*)realloc(bddnodes, sizeof(BddNode)*bddnodesize); + if (newnodes == NULL) + return bdd_error(BDD_MEMORY); + bddnodes = newnodes; + + if (doRehash) + for (n=0 ; n 1 ; n=HIGH(n)) + num++; + + if (((*varset) = (int *)malloc(sizeof(int)*num)) == NULL) + return bdd_error(BDD_MEMORY); + + for (n=r, num=0 ; n > 1 ; n=HIGH(n)) + (*varset)[num++] = bddlevel2var[LEVEL(n)]; + + *varnum = num; + + return 0; +} + + +/* +NAME {* bdd\_makeset *} +SECTION {* kernel *} +SHORT {* builds a BDD variable set from an integer array *} +PROTO {* BDD bdd_makeset(int *v, int n) *} +DESCR {* Reads a set of variable numbers from the integer array {\tt v} + which must hold exactly {\tt n} integers and then builds a BDD + representing the variable set. + + The BDD variable set is represented as the conjunction of + all the variables in their positive form and may just as + well be made that way by the user. The user should keep a + reference to the returned BDD instead of building it every + time the set is needed. *} +ALSO {* bdd\_scanset *} +RETURN {* A BDD variable set. *} */ +BDD bdd_makeset(int *varset, int varnum) +{ + int v, res=1; + + for (v=varnum-1 ; v>=0 ; v--) + { + BDD tmp; + bdd_addref(res); + tmp = bdd_apply(res, bdd_ithvar(varset[v]), bddop_and); + bdd_delref(res); + res = tmp; + } + + return res; +} + + +/* EOF */ diff --git a/buddy/src/kernel.h b/buddy/src/kernel.h new file mode 100644 index 000000000..6b27497d7 --- /dev/null +++ b/buddy/src/kernel.h @@ -0,0 +1,227 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/kernel.h,v 1.1 2003/05/05 10:57:57 aduret Exp $ + FILE: kernel.h + DESCR: Kernel specific definitions for BDD package + AUTH: Jorn Lind + DATE: (C) june 1997 +*************************************************************************/ + +#ifndef _KERNEL_H +#define _KERNEL_H + +/*=== Includes =========================================================*/ + +#include +#include +#include "bdd.h" + +/*=== SANITY CHECKS ====================================================*/ + + /* Make sure we use at least 32 bit integers */ +#if (INT_MAX < 0x7FFFFFFF) +#error The compiler does not support 4 byte integers! +#endif + + + /* Sanity check argument and return eventual error code */ +#define CHECK(r)\ + if (!bddrunning) return bdd_error(BDD_RUNNING);\ + else if ((r) < 0 || (r) >= bddnodesize) return bdd_error(BDD_ILLBDD);\ + else if (r >= 2 && LOW(r) == -1) return bdd_error(BDD_ILLBDD)\ + + /* Sanity check argument and return eventually the argument 'a' */ +#define CHECKa(r,a)\ + if (!bddrunning) { bdd_error(BDD_RUNNING); return (a); }\ + else if ((r) < 0 || (r) >= bddnodesize)\ + { bdd_error(BDD_ILLBDD); return (a); }\ + else if (r >= 2 && LOW(r) == -1)\ + { bdd_error(BDD_ILLBDD); return (a); } + +#define CHECKn(r)\ + if (!bddrunning) { bdd_error(BDD_RUNNING); return; }\ + else if ((r) < 0 || (r) >= bddnodesize)\ + { bdd_error(BDD_ILLBDD); return; }\ + else if (r >= 2 && LOW(r) == -1)\ + { bdd_error(BDD_ILLBDD); return; } + + +/*=== SEMI-INTERNAL TYPES ==============================================*/ + +typedef struct s_BddNode /* Node table entry */ +{ + unsigned int refcou : 10; + unsigned int level : 22; + int low; + int high; + int hash; + int next; +} BddNode; + + +/*=== KERNEL VARIABLES =================================================*/ + +#ifdef CPLUSPLUS +extern "C" { +#endif + +extern int bddrunning; /* Flag - package initialized */ +extern int bdderrorcond; /* Some error condition was met */ +extern int bddnodesize; /* Number of allocated nodes */ +extern int bddmaxnodesize; /* Maximum allowed number of nodes */ +extern int bddmaxnodeincrease; /* Max. # of nodes used to inc. table */ +extern BddNode* bddnodes; /* All of the bdd nodes */ +extern int bddvarnum; /* Number of defined BDD variables */ +extern int* bddrefstack; /* Internal node reference stack */ +extern int* bddrefstacktop; /* Internal node reference stack top */ +extern int* bddvar2level; +extern int* bddlevel2var; +extern jmp_buf bddexception; +extern int bddreorderdisabled; +extern int bddresized; +extern bddCacheStat bddcachestats; + +#ifdef CPLUSPLUS +} +#endif + + +/*=== KERNEL DEFINITIONS ===============================================*/ + +#define VERSION 22 + +#define MAXVAR 0x1FFFFF +#define MAXREF 0x3FF + + /* Reference counting */ +#define DECREF(n) if (bddnodes[n].refcou!=MAXREF && bddnodes[n].refcou>0) bddnodes[n].refcou-- +#define INCREF(n) if (bddnodes[n].refcourefcou!=MAXREF && n->refcou>0) n->refcou-- +#define INCREFp(n) if (n->refcourefcou++ +#define HASREF(n) (bddnodes[n].refcou > 0) + + /* Marking BDD nodes */ +#define MARKON 0x200000 /* Bit used to mark a node (1) */ +#define MARKOFF 0x1FFFFF /* - unmark */ +#define MARKHIDE 0x1FFFFF +#define SETMARK(n) (bddnodes[n].level |= MARKON) +#define UNMARK(n) (bddnodes[n].level &= MARKOFF) +#define MARKED(n) (bddnodes[n].level & MARKON) +#define SETMARKp(p) (node->level |= MARKON) +#define UNMARKp(p) (node->level &= MARKOFF) +#define MARKEDp(p) (node->level & MARKON) + + /* Hashfunctions */ + +#define PAIR(a,b) ((unsigned int)((((unsigned int)a)+((unsigned int)b))*(((unsigned int)a)+((unsigned int)b)+((unsigned int)1))/((unsigned int)2)+((unsigned int)a))) +#define TRIPLE(a,b,c) ((unsigned int)(PAIR((unsigned int)c,PAIR(a,b)))) + + + /* Inspection of BDD nodes */ +#define ISCONST(a) ((a) < 2) +#define ISNONCONST(a) ((a) >= 2) +#define ISONE(a) ((a) == 1) +#define ISZERO(a) ((a) == 0) +#define LEVEL(a) (bddnodes[a].level) +#define LOW(a) (bddnodes[a].low) +#define HIGH(a) (bddnodes[a].high) +#define LEVELp(p) ((p)->level) +#define LOWp(p) ((p)->low) +#define HIGHp(p) ((p)->high) + + /* Stacking for garbage collector */ +#define INITREF bddrefstacktop = bddrefstack +#define PUSHREF(a) *(bddrefstacktop++) = (a) +#define READREF(a) *(bddrefstacktop-(a)) +#define POPREF(a) bddrefstacktop -= (a) + +#define BDDONE 1 +#define BDDZERO 0 + +#ifndef CLOCKS_PER_SEC +#define CLOCKS_PER_SEC DEFAULT_CLOCK +#endif + +#define DEFAULTMAXNODEINC 50000 + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define NEW(t,n) ( (t*)malloc(sizeof(t)*(n)) ) + + +/*=== KERNEL PROTOTYPES ================================================*/ + +#ifdef CPLUSPLUS +extern "C" { +#endif + +extern int bdd_error(int); +extern int bdd_makenode(unsigned int, int, int); +extern int bdd_noderesize(int); +extern void bdd_checkreorder(void); +extern void bdd_mark(int); +extern void bdd_mark_upto(int, int); +extern void bdd_markcount(int, int*); +extern void bdd_unmark(int); +extern void bdd_unmark_upto(int, int); +extern void bdd_register_pair(bddPair*); +extern int *fdddec2bin(int, int); + +extern int bdd_operator_init(int); +extern void bdd_operator_done(void); +extern void bdd_operator_varresize(void); +extern void bdd_operator_reset(void); + +extern void bdd_pairs_init(void); +extern void bdd_pairs_done(void); +extern int bdd_pairs_resize(int,int); +extern void bdd_pairs_vardown(int); + +extern void bdd_fdd_init(void); +extern void bdd_fdd_done(void); + +extern void bdd_reorder_init(void); +extern void bdd_reorder_done(void); +extern int bdd_reorder_ready(void); +extern void bdd_reorder_auto(void); +extern int bdd_reorder_vardown(int); +extern int bdd_reorder_varup(int); + +extern void bdd_cpp_init(void); + +#ifdef CPLUSPLUS +} +#endif + +#endif /* _KERNEL_H */ + + +/* EOF */ diff --git a/buddy/src/makefile b/buddy/src/makefile new file mode 100644 index 000000000..9a95b1a21 --- /dev/null +++ b/buddy/src/makefile @@ -0,0 +1,49 @@ +# ============================================================== +# Makefile for BDD source +# - Do not touch +# ============================================================== + +# --- full object list +OBJ = bddio.o bddop.o bvec.o cache.o cppext.o fdd.o imatrix.o kernel.o \ + pairs.o prime.o reorder.o tree.o +CFILES = bddio.c bddop.c bvec.c cache.c fdd.c imatrix.c kernel.c \ + pairs.c prime.c reorder.c tree.c +CCFILES = cppext.cxx + +include ../config + +# -------------------------------------------------------------- +# Code generation +# -------------------------------------------------------------- + +.SUFFIXES: .cxx .c + +.cxx.o: + $(CPP) $(CFLAGS) $(DFLAGS) -c $< + +.c.o: + $(CC) $(CFLAGS) $(DFLAGS) -c $< + + +# -------------------------------------------------------------- +# The primary targets. +# -------------------------------------------------------------- + +libbdd.a: $(OBJ) ../config + ar r libbdd.a $(OBJ) + ranlib libbdd.a + +clean: + rm -f lib$(TARGET).a + rm -f *.o core *~ + rm -f libbdd.a + rm -f bddtest + +depend: + gcc -MM $(CFLAGS) $(DFLAGS) $(CFILES) > depend.inf + g++ -MM $(CFLAGS) $(DFLAGS) $(CCFILES) >> depend.inf + +bddtest: libbdd.a bddtest.cxx ../config + $(CPP) $(CFLAGS) $(DFLAGS) bddtest.cxx -o bddtest -L. -lbdd +### +include depend.inf diff --git a/buddy/src/pairs.c b/buddy/src/pairs.c new file mode 100644 index 000000000..269ae0d43 --- /dev/null +++ b/buddy/src/pairs.c @@ -0,0 +1,335 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/pairs.c,v 1.1 2003/05/05 10:57:57 aduret Exp $ + FILE: pairs.c + DESCR: Pair management for BDD package. + AUTH: Jorn Lind + DATE: february 1997 +*************************************************************************/ +#include +#include +#include "kernel.h" + +/*======================================================================*/ + +static int pairsid; /* Pair identifier */ +static bddPair* pairs; /* List of all replacement pairs in use */ + + +/************************************************************************* +*************************************************************************/ + +void bdd_pairs_init(void) +{ + pairsid = 0; + pairs = NULL; +} + + +void bdd_pairs_done(void) +{ + bddPair *p = pairs; + int n; + + while (p != NULL) + { + bddPair *next = p->next; + for (n=0 ; nresult[n] ); + free(p->result); + free(p); + p = next; + } +} + + +static int update_pairsid(void) +{ + pairsid++; + + if (pairsid == (INT_MAX >> 2)) + { + bddPair *p; + pairsid = 0; + for (p=pairs ; p!=NULL ; p=p->next) + p->id = pairsid++; + bdd_operator_reset(); + } + + return pairsid; +} + + +void bdd_register_pair(bddPair *p) +{ + p->next = pairs; + pairs = p; +} + + +void bdd_pairs_vardown(int level) +{ + bddPair *p; + + for (p=pairs ; p!=NULL ; p=p->next) + { + int tmp; + + tmp = p->result[level]; + p->result[level] = p->result[level+1]; + p->result[level+1] = tmp; + + if (p->last == level) + p->last++; + } +} + + +int bdd_pairs_resize(int oldsize, int newsize) +{ + bddPair *p; + int n; + + for (p=pairs ; p!=NULL ; p=p->next) + { + if ((p->result=(BDD*)realloc(p->result,sizeof(BDD)*newsize)) == NULL) + return bdd_error(BDD_MEMORY); + + for (n=oldsize ; nresult[n] = bdd_ithvar(bddlevel2var[n]); + } + + return 0; +} + + +/* +NAME {* bdd\_newpair *} +SECTION {* kernel *} +SHORT {* creates an empty variable pair table *} +PROTO {* bddPair *bdd_newpair(void) *} +DESCR {* Variable pairs of the type {\tt bddPair} are used in + {\tt bdd\_replace} to define which variables to replace with + other variables. This function allocates such an empty table. The + table can be freed by a call to {\em bdd\_freepair}. *} +RETURN {* Returns a new table of pairs. *} +ALSO {* bdd\_freepair, bdd\_replace, bdd\_setpair, bdd\_setpairs *} +*/ +bddPair *bdd_newpair(void) +{ + int n; + bddPair *p; + + if ((p=(bddPair*)malloc(sizeof(bddPair))) == NULL) + { + bdd_error(BDD_MEMORY); + return NULL; + } + + if ((p->result=(BDD*)malloc(sizeof(BDD)*bddvarnum)) == NULL) + { + free(p); + bdd_error(BDD_MEMORY); + return NULL; + } + + for (n=0 ; nresult[n] = bdd_ithvar(bddlevel2var[n]); + + p->id = update_pairsid(); + p->last = -1; + + bdd_register_pair(p); + return p; +} + + +/* +NAME {* bdd\_setpair *} +EXTRA {* bdd\_setbddpair *} +SECTION {* kernel *} +SHORT {* set one variable pair *} +PROTO {* int bdd_setpair(bddPair *pair, int oldvar, int newvar) +int bdd_setbddpair(bddPair *pair, BDD oldvar, BDD newvar) *} +DESCR {* Adds the pair {\tt (oldvar,newvar)} to the table of pairs + {\tt pair}. This results in {\tt oldvar} being substituted + with {\tt newvar} in a call to {\tt bdd\_replace}. In the first + version {\tt newvar} is an integer representing the variable + to be replaced with the old variable. + In the second version {\tt oldvar} is a BDD. + In this case the variable {\tt oldvar} is substituted with the + BDD {\tt newvar}. + The possibility to substitute with any BDD as {\tt newvar} is + utilized in bdd\_compose, whereas only the topmost variable + in the BDD is used in bdd\_replace. *} +RETURN {* Zero on success, otherwise a negative error code. *} +ALSO {* bdd\_newpair, bdd\_setpairs, bdd\_resetpair, bdd\_replace, bdd\_compose *} +*/ +int bdd_setpair(bddPair *pair, int oldvar, int newvar) +{ + if (pair == NULL) + return 0; + + if (oldvar < 0 || oldvar > bddvarnum-1) + return bdd_error(BDD_VAR); + if (newvar < 0 || newvar > bddvarnum-1) + return bdd_error(BDD_VAR); + + bdd_delref( pair->result[bddvar2level[oldvar]] ); + pair->result[bddvar2level[oldvar]] = bdd_ithvar(newvar); + pair->id = update_pairsid(); + + if (bddvar2level[oldvar] > pair->last) + pair->last = bddvar2level[oldvar]; + + return 0; +} + + +int bdd_setbddpair(bddPair *pair, int oldvar, BDD newvar) +{ + int oldlevel; + + if (pair == NULL) + return 0; + + CHECK(newvar); + if (oldvar < 0 || oldvar >= bddvarnum) + return bdd_error(BDD_VAR); + oldlevel = bddvar2level[oldvar]; + + bdd_delref( pair->result[oldlevel] ); + pair->result[oldlevel] = bdd_addref(newvar); + pair->id = update_pairsid(); + + if (oldlevel > pair->last) + pair->last = oldlevel; + + return 0; +} + + +/* +NAME {* bdd\_setpairs *} +EXTRA {* bdd\_setbddpairs *} +SECTION {* kernel *} +SHORT {* defines a whole set of pairs *} +PROTO {* int bdd_setpairs(bddPair *pair, int *oldvar, int *newvar, int size) +int bdd_setbddpairs(bddPair *pair, int *oldvar, BDD *newvar, int size) *} +DESCR {* As for {\tt bdd\_setpair} but with {\tt oldvar} and {\tt newvar} + being arrays of variables (BDDs) of size {\tt size}. *} +RETURN {* Zero on success, otherwise a negative error code. *} +ALSO {* bdd\_newpair, bdd\_setpair, bdd\_replace, bdd\_compose *} +*/ +int bdd_setpairs(bddPair *pair, int *oldvar, int *newvar, int size) +{ + int n,e; + if (pair == NULL) + return 0; + + for (n=0 ; nnext != p) + bp = bp->next; + + if (bp != NULL) + bp->next = p->next; + } + else + pairs = p->next; + + for (n=0 ; nresult[n] ); + free(p->result); + free(p); +} + + +/* +NAME {* bdd\_resetpair *} +SECTION {* kernel *} +SHORT {* clear all variable pairs *} +PROTO {* void bdd_resetpair(bddPair *pair) *} +DESCR {* Resets the table of pairs {\tt pair} by setting all substitutions + to their default values (that is no change). *} +ALSO {* bdd\_newpair, bdd\_setpair, bdd\_freepair *} +*/ +void bdd_resetpair(bddPair *p) +{ + int n; + + for (n=0 ; nresult[n] = bdd_ithvar(n); + p->last = 0; +} + + +/* EOF */ + diff --git a/buddy/src/prime.c b/buddy/src/prime.c new file mode 100644 index 000000000..af53106f8 --- /dev/null +++ b/buddy/src/prime.c @@ -0,0 +1,321 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/prime.c,v 1.1 2003/05/05 10:57:57 aduret Exp $ + FILE: prime.c + DESCR: Prime number calculations + AUTH: Jorn Lind + DATE: (C) feb 2001 +*************************************************************************/ +#include +#include +#include +#include "prime.h" + + +#define Random(i) ( (rand() % (i)) + 1 ) +#define isEven(src) (!((src) & 0x1)) +#define hasFactor(src,n) ( (((src)!=(n)) && ((src)%(n) == 0)) ) +#define BitIsSet(src,b) ( ((src) & (1<<(b))) != 0 ) + +#define CHECKTIMES 20 + +#if defined(BUDDYUINT64) + typedef BUDDYUINT64 UINT64; + #define BUILTIN64 +#elif defined(__GNUC__) || defined(__KCC) + typedef long long UINT64; + #define BUILTIN64 +#elif defined(_MSV_VER) + typedef unsigned _int64 UINT64; + #define BUILTIN64 +#else + typedef struct __UINT64 + { + unsigned int hi; + unsigned int lo; + } UINT64; + + #define MAX(a,b) ((a) > (b) ? (a) : (b)) + #define GETCARRY(a,b) ( ((a)+(b)) < MAX((a),(b)) ? 1 : 0 ) +#endif + + +#ifndef BUILTIN64 +/************************************************************************* + 64 bit unsigned int arithmetics +*************************************************************************/ + +static UINT64 u64_mul(unsigned int x, unsigned int y) +{ + UINT64 res; + unsigned int yh = 0; + unsigned int yl = y; + int i; + + res.lo = res.hi = 0; + + for (i=0 ; i<32 ; ++i) + { + if (x & 0x1) + { + unsigned int carry = GETCARRY(res.lo,yl); + res.lo += yl; + res.hi += yh + carry; + } + + yh = (yh << 1) | (yl & 0x80000000 ? 1 : 0); + yl = (yl << 1); + + x >>= 1; + } + + return res; +} + + +static void u64_shl(UINT64* a, unsigned int *carryOut) +{ + *carryOut = (*carryOut << 1) | (a->hi & 0x80000000 ? 0x1 : 0x0); + a->hi = (a->hi << 1) | (a->lo & 0x80000000 ? 0x1 : 0x0); + a->lo = (a->lo << 1); +} + + +static unsigned int u64_mod(UINT64 dividend, unsigned int divisor) +{ + unsigned int remainder = 0; + int i; + + u64_shl(÷nd, &remainder); + + for (i=0 ; i<64 ; ++i) + { + if (remainder >= divisor) + remainder -= divisor; + + u64_shl(÷nd, &remainder); + } + + return remainder >> 1; +} +#endif /* BUILTIN64 */ + +#ifdef BUILTIN64 +#define u64_mulmod(a,b,c) ((unsigned int)( ((UINT64)a*(UINT64)b)%(UINT64)c )); +#else +#define u64_mulmod(a,b,c) u64_mod( u64_mul((a),(b)), (c) ); +#endif + + +/************************************************************************* + Miller Rabin check +*************************************************************************/ + +static unsigned int numberOfBits(unsigned int src) +{ + unsigned int b; + + if (src == 0) + return 0; + + for (b=(sizeof(unsigned int)*8)-1 ; b>0 ; --b) + if (BitIsSet(src,b)) + return b+1; + + return 1; +} + + + +static int isWitness(unsigned int witness, unsigned int src) +{ + unsigned int bitNum = numberOfBits(src-1)-1; + unsigned int d = 1; + int i; + + for (i=bitNum ; i>=0 ; --i) + { + unsigned int x = d; + + d = u64_mulmod(d,d,src); + + if (d == 1 && x != 1 && x != src-1) + return 1; + + if (BitIsSet(src-1,i)) + d = u64_mulmod(d,witness,src); + } + + return d != 1; +} + + +static int isMillerRabinPrime(unsigned int src) +{ + int n; + + for (n=0 ; n +#include +#include +#include +#include +#include "kernel.h" +#include "bddtree.h" +#include "imatrix.h" +#include "prime.h" + +/* IMPORTANT: + * The semantics of the "level" field in the BddNode struct changes during + * variable reordering in order to make a fast variable swap possible when + * two variables are independent. Instead of refering to the level of the node + * it refers to the *variable* !!! + */ + + /* Change macros to reflect the above idea */ +#define VAR(n) (bddnodes[n].level) +#define VARp(p) (p->level) + + /* Avoid these - they are misleading! */ +#undef LEVEL +#undef LEVELp + + +#define __USERESIZE /* FIXME */ + + /* Current auto reord. method and number of automatic reorderings left */ +static int bddreordermethod; +static int bddreordertimes; + + /* Flag for disabling reordering temporarily */ +static int reorderdisabled; + + /* Store for the variable relationships */ +static BddTree *vartree; +static int blockid; + + /* Store for the ref.cou. of the external roots */ +static int *extroots; +static int extrootsize; + +/* Level data */ +typedef struct _levelData +{ + int start; /* Start of this sub-table (entry in "bddnodes") */ + int size; /* Size of this sub-table */ + int maxsize; /* Max. allowed size of sub-table */ + int nodenum; /* Number of nodes in this level */ +} levelData; + +static levelData *levels; /* Indexed by variable! */ + + /* Interaction matrix */ +static imatrix *iactmtx; + + /* Reordering information for the user */ +static int verbose; +static bddinthandler reorder_handler; +static bddfilehandler reorder_filehandler; +static bddsizehandler reorder_nodenum; + + /* Number of live nodes before and after a reordering session */ +static int usednum_before; +static int usednum_after; + + /* Kernel variables needed for reordering */ +extern int bddfreepos; +extern int bddfreenum; +extern int bddproduced; + + /* Flag telling us when a node table resize is done */ +static int resizedInMakenode; + + /* New node hashing function for use with reordering */ +#define NODEHASH(var,l,h) ((PAIR((l),(h))%levels[var].size)+levels[var].start) + + /* Reordering prototypes */ +static void blockdown(BddTree *); +static void addref_rec(int, char *); +static void reorder_gbc(); +static void reorder_setLevellookup(void); +static int reorder_makenode(int, int, int); +static int reorder_varup(int); +static int reorder_vardown(int); +static int reorder_init(void); +static void reorder_done(void); + +#define random(a) (rand() % (a)) + + /* For sorting the blocks according to some specific size value */ +typedef struct s_sizePair +{ + int val; + BddTree *block; +} sizePair; + + +/************************************************************************* + Initialize and shutdown +*************************************************************************/ + +void bdd_reorder_init(void) +{ + reorderdisabled = 0; + vartree = NULL; + + bdd_clrvarblocks(); + bdd_reorder_hook(bdd_default_reohandler); + bdd_reorder_verbose(0); + bdd_autoreorder_times(BDD_REORDER_NONE, 0); + reorder_nodenum = bdd_getnodenum; + usednum_before = usednum_after = 0; + blockid = 0; +} + + +void bdd_reorder_done(void) +{ + bddtree_del(vartree); + bdd_operator_reset(); + vartree = NULL; +} + + +/************************************************************************* + Reordering heuristics +*************************************************************************/ + +/*=== Reorder using a sliding window of size 2 =========================*/ + +static BddTree *reorder_win2(BddTree *t) +{ + BddTree *this=t, *first=t; + + if (t == NULL) + return t; + + if (verbose > 1) + printf("Win2 start: %d nodes\n", reorder_nodenum()); + fflush(stdout); + + while (this->next != NULL) + { + int best = reorder_nodenum(); + blockdown(this); + + if (best < reorder_nodenum()) + { + blockdown(this->prev); + this = this->next; + } + else + if (first == this) + first = this->prev; + + if (verbose > 1) + { + printf("."); + fflush(stdout); + } + } + + if (verbose > 1) + printf("\nWin2 end: %d nodes\n", reorder_nodenum()); + fflush(stdout); + + return first; +} + + +static BddTree *reorder_win2ite(BddTree *t) +{ + BddTree *this, *first=t; + int lastsize; + int c=1; + + if (t == NULL) + return t; + + if (verbose > 1) + printf("Win2ite start: %d nodes\n", reorder_nodenum()); + + do + { + lastsize = reorder_nodenum(); + + this = t; + while (this->next != NULL) + { + int best = reorder_nodenum(); + + blockdown(this); + + if (best < reorder_nodenum()) + { + blockdown(this->prev); + this = this->next; + } + else + if (first == this) + first = this->prev; + if (verbose > 1) + { + printf("."); + fflush(stdout); + } + } + + if (verbose > 1) + printf(" %d nodes\n", reorder_nodenum()); + c++; + } + while (reorder_nodenum() != lastsize); + + return first; +} + + +/*=== Reorder using a sliding window of size 3 =========================*/ +#define X(a) + +static BddTree *reorder_swapwin3(BddTree *this, BddTree **first) +{ + int setfirst = (this->prev == NULL ? 1 : 0); + BddTree *next = this; + int best = reorder_nodenum(); + + if (this->next->next == NULL) /* Only two blocks left -> win2 swap */ + { + blockdown(this); + + if (best < reorder_nodenum()) + { + blockdown(this->prev); + next = this->next; + } + else + { + next = this; + if (setfirst) + *first = this->prev; + } + } + else /* Real win3 swap */ + { + int pos = 0; + X(printf("%d: ", reorder_nodenum())); + blockdown(this); /* B A* C (4) */ + X(printf("A")); + pos++; + if (best > reorder_nodenum()) + { + X(printf("(%d)", reorder_nodenum())); + pos = 0; + best = reorder_nodenum(); + } + + blockdown(this); /* B C A* (3) */ + X(printf("B")); + pos++; + if (best > reorder_nodenum()) + { + X(printf("(%d)", reorder_nodenum())); + pos = 0; + best = reorder_nodenum(); + } + + this = this->prev->prev; + blockdown(this); /* C B* A (2) */ + X(printf("C")); + pos++; + if (best > reorder_nodenum()) + { + X(printf("(%d)", reorder_nodenum())); + pos = 0; + best = reorder_nodenum(); + } + + blockdown(this); /* C A B* (1) */ + X(printf("D")); + pos++; + if (best > reorder_nodenum()) + { + X(printf("(%d)", reorder_nodenum())); + pos = 0; + best = reorder_nodenum(); + } + + this = this->prev->prev; + blockdown(this); /* A C* B (0)*/ + X(printf("E")); + pos++; + if (best > reorder_nodenum()) + { + X(printf("(%d)", reorder_nodenum())); + pos = 0; + best = reorder_nodenum(); + } + + X(printf(" -> ")); + + if (pos >= 1) /* A C B -> C A* B */ + { + this = this->prev; + blockdown(this); + next = this; + if (setfirst) + *first = this->prev; + X(printf("a(%d)", reorder_nodenum())); + } + + if (pos >= 2) /* C A B -> C B A* */ + { + blockdown(this); + next = this->prev; + if (setfirst) + *first = this->prev->prev; + X(printf("b(%d)", reorder_nodenum())); + } + + if (pos >= 3) /* C B A -> B C* A */ + { + this = this->prev->prev; + blockdown(this); + next = this; + if (setfirst) + *first = this->prev; + X(printf("c(%d)", reorder_nodenum())); + } + + if (pos >= 4) /* B C A -> B A C* */ + { + blockdown(this); + next = this->prev; + if (setfirst) + *first = this->prev->prev; + X(printf("d(%d)", reorder_nodenum())); + } + + if (pos >= 5) /* B A C -> A B* C */ + { + this = this->prev->prev; + blockdown(this); + next = this; + if (setfirst) + *first = this->prev; + X(printf("e(%d)", reorder_nodenum())); + } + X(printf("\n")); + } + + return next; +} + + +static BddTree *reorder_win3(BddTree *t) +{ + BddTree *this=t, *first=t; + + if (t == NULL) + return t; + + if (verbose > 1) + printf("Win3 start: %d nodes\n", reorder_nodenum()); + fflush(stdout); + + while (this->next != NULL) + { + this = reorder_swapwin3(this, &first); + + if (verbose > 1) + { + printf("."); + fflush(stdout); + } + } + + if (verbose > 1) + printf("\nWin3 end: %d nodes\n", reorder_nodenum()); + fflush(stdout); + + return first; +} + + +static BddTree *reorder_win3ite(BddTree *t) +{ + BddTree *this=t, *first=t; + int lastsize; + + if (t == NULL) + return t; + + if (verbose > 1) + printf("Win3ite start: %d nodes\n", reorder_nodenum()); + + do + { + lastsize = reorder_nodenum(); + this = first; + + while (this->next != NULL && this->next->next != NULL) + { + this = reorder_swapwin3(this, &first); + + if (verbose > 1) + { + printf("."); + fflush(stdout); + } + } + + if (verbose > 1) + printf(" %d nodes\n", reorder_nodenum()); + } + while (reorder_nodenum() != lastsize); + + if (verbose > 1) + printf("Win3ite end: %d nodes\n", reorder_nodenum()); + + return first; +} + + +/*=== Reorder by sifting =============================================*/ + +/* Move a specific block up and down in the order and place at last in + the best position +*/ +static void reorder_sift_bestpos(BddTree *blk, int middlePos) +{ + int best = reorder_nodenum(); + int maxAllowed; + int bestpos = 0; + int dirIsUp = 1; + int n; + + if (bddmaxnodesize > 0) + maxAllowed = MIN(best/5+best, bddmaxnodesize-bddmaxnodeincrease-2); + else + maxAllowed = best/5+best; + + /* Determine initial direction */ + if (blk->pos > middlePos) + dirIsUp = 0; + + /* Move block back and forth */ + for (n=0 ; n<2 ; n++) + { + int first = 1; + + if (dirIsUp) + { + while (blk->prev != NULL && + (reorder_nodenum() <= maxAllowed || first)) + { + first = 0; + blockdown(blk->prev); + bestpos--; + + if (verbose > 1) + { + printf("-"); + fflush(stdout); + } + + if (reorder_nodenum() < best) + { + best = reorder_nodenum(); + bestpos = 0; + + if (bddmaxnodesize > 0) + maxAllowed = MIN(best/5+best, + bddmaxnodesize-bddmaxnodeincrease-2); + else + maxAllowed = best/5+best; + } + } + } + else + { + while (blk->next != NULL && + (reorder_nodenum() <= maxAllowed || first)) + { + first = 0; + blockdown(blk); + bestpos++; + + if (verbose > 1) + { + printf("+"); + fflush(stdout); + } + + if (reorder_nodenum() < best) + { + best = reorder_nodenum(); + bestpos = 0; + + if (bddmaxnodesize > 0) + maxAllowed = MIN(best/5+best, + bddmaxnodesize-bddmaxnodeincrease-2); + else + maxAllowed = best/5+best; + } + } + } + + if (reorder_nodenum() > maxAllowed && verbose > 1) + { + printf("!"); + fflush(stdout); + } + + dirIsUp = !dirIsUp; + } + + /* Move to best pos */ + while (bestpos < 0) + { + blockdown(blk); + bestpos++; + } + while (bestpos > 0) + { + blockdown(blk->prev); + bestpos--; + } +} + + +/* Go through all blocks in a specific sequence and find best + position for each of them +*/ +static BddTree *reorder_sift_seq(BddTree *t, BddTree **seq, int num) +{ + BddTree *this; + int n; + + if (t == NULL) + return t; + + for (n=0 ; n 1) + { + printf("Sift "); + if (reorder_filehandler) + reorder_filehandler(stdout, seq[n]->id); + else + printf("%d", seq[n]->id); + printf(": "); + } + + reorder_sift_bestpos(seq[n], num/2); + + if (verbose > 1) + printf("\n> %d nodes", reorder_nodenum()); + + c2 = clock(); + if (verbose > 1) + printf(" (%.1f sec)\n", (float)(c2-c1)/CLOCKS_PER_SEC); + } + + /* Find first block */ + for (this=t ; this->prev != NULL ; this=this->prev) + /* nil */; + + return this; +} + + +/* Compare function for sorting sifting sequence + */ +static int siftTestCmp(const void *aa, const void *bb) +{ + const sizePair *a = (sizePair*)aa; + const sizePair *b = (sizePair*)bb; + + if (a->val < b->val) + return -1; + if (a->val > b->val) + return 1; + return 0; +} + + +/* Find sifting sequence based on the number of nodes at each level + */ +static BddTree *reorder_sift(BddTree *t) +{ + BddTree *this, **seq; + sizePair *p; + int n, num; + + for (this=t,num=0 ; this!=NULL ; this=this->next) + this->pos = num++; + + if ((p=NEW(sizePair,num)) == NULL) + return t; + if ((seq=NEW(BddTree*,num)) == NULL) + { + free(p); + return t; + } + + for (this=t,n=0 ; this!=NULL ; this=this->next,n++) + { + int v; + + /* Accumulate number of nodes for each block */ + p[n].val = 0; + for (v=this->first ; v<=this->last ; v++) + p[n].val -= levels[v].nodenum; + + p[n].block = this; + } + + /* Sort according to the number of nodes at each level */ + qsort(p, num, sizeof(sizePair), siftTestCmp); + + /* Create sequence */ + for (n=0 ; n 1) + printf("Reorder %d\n", c++); + + lastsize = reorder_nodenum(); + first = reorder_sift(first); + } + while (reorder_nodenum() != lastsize); + + return first; +} + + +/*=== Random reordering (mostly for debugging and test ) =============*/ + +static BddTree *reorder_random(BddTree *t) +{ + BddTree *this; + BddTree **seq; + int n, num=0; + + if (t == NULL) + return t; + + for (this=t ; this!=NULL ; this=this->next) + num++; + seq = NEW(BddTree*,num); + for (this=t,num=0 ; this!=NULL ; this=this->next) + seq[num++] = this; + + for (n=0 ; n<4*num ; n++) + { + int blk = random(num); + if (seq[blk]->next != NULL) + blockdown(seq[blk]); + } + + /* Find first block */ + for (this=t ; this->prev != NULL ; this=this->prev) + /* nil */; + + free(seq); + + if (verbose) + printf("Random order: %d nodes\n", reorder_nodenum()); + return this; +} + + +/************************************************************************* + Swapping adjacent blocks +*************************************************************************/ + +static void blockdown(BddTree *left) +{ + BddTree *right = left->next; + int n; + int leftsize = left->last - left->first; + int rightsize = right->last - right->first; + int leftstart = bddvar2level[left->seq[0]]; + int *lseq = left->seq; + int *rseq = right->seq; + + /* Move left past right */ + while (bddvar2level[lseq[0]] < bddvar2level[rseq[rightsize]]) + { + for (n=0 ; n leftstart) + { + for (n=rightsize ; n>0 ; n--) + { + if (bddvar2level[rseq[n]]-1 != bddvar2level[rseq[n-1]] + && bddvar2level[rseq[n]] > leftstart) + { + reorder_varup(rseq[n]); + } + } + + if (bddvar2level[rseq[0]] > leftstart) + reorder_varup(rseq[0]); + } + + /* Swap left and right data in the order */ + left->next = right->next; + right->prev = left->prev; + left->prev = right; + right->next = left; + + if (right->prev != NULL) + right->prev->next = right; + if (left->next != NULL) + left->next->prev = left; + + n = left->pos; + left->pos = right->pos; + right->pos = n; +} + + +/************************************************************************* + Kernel reordering routines +*************************************************************************/ + +/*=== Garbage collection for reordering ================================*/ + +/* Note: Node may be marked + */ +static void addref_rec(int r, char *dep) +{ + if (r < 2) + return; + + if (bddnodes[r].refcou == 0) + { + bddfreenum--; + + /* Detect variable dependencies for the interaction matrix */ + dep[VAR(r) & MARKHIDE] = 1; + + /* Make sure the nodenum field is updated. Used in the initial GBC */ + levels[VAR(r) & MARKHIDE].nodenum++; + + addref_rec(LOW(r), dep); + addref_rec(HIGH(r), dep); + } + else + { + int n; + + /* Update (from previously found) variable dependencies + * for the interaction matrix */ + for (n=0 ; n 0) + { + SETMARK(n); + extrootsize++; + } + } + + if ((extroots=(int*)(malloc(sizeof(int)*extrootsize))) == NULL) + return bdd_error(BDD_MEMORY); + + iactmtx = imatrixNew(bddvarnum); + + for (n=2,extrootsize=0 ; nhash = 0; + } + + bddnodes[0].hash = 0; + bddnodes[1].hash = 0; + + free(dep); + return 0; +} + + +/* Now that all nodes are recursively reference counted we must make sure + that the new hashing scheme is used AND that dead nodes are removed. + This is also a good time to create the interaction matrix. +*/ +static void reorder_gbc(void) +{ + int n; + + bddfreepos = 0; + bddfreenum = 0; + + /* No need to zero all hash fields - this is done in mark_roots */ + + for (n=bddnodesize-1 ; n>=2 ; n--) + { + register BddNode *node = &bddnodes[n]; + + if (node->refcou > 0) + { + register unsigned int hash; + + hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = n; + + } + else + { + LOWp(node) = -1; + node->next = bddfreepos; + bddfreepos = n; + bddfreenum++; + } + } +} + + +static void reorder_setLevellookup(void) +{ + int n; + + for (n=0 ; n= 4) + levels[n].size = bdd_prime_lte(levels[n].size); + +#if 0 + printf("L%3d: start %d, size %d, nodes %d\n", n, levels[n].start, + levels[n].size, levels[n].nodenum); +#endif + } +} + + +static void reorder_rehashAll(void) +{ + int n; + + reorder_setLevellookup(); + bddfreepos = 0; + + for (n=bddnodesize-1 ; n>=0 ; n--) + bddnodes[n].hash = 0; + + for (n=bddnodesize-1 ; n>=2 ; n--) + { + register BddNode *node = &bddnodes[n]; + + if (node->refcou > 0) + { + register unsigned int hash; + + hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = n; + } + else + { + node->next = bddfreepos; + bddfreepos = n; + } + } +} + + +/*=== Unique table handling for reordering =============================*/ + +/* Note: rehashing must not take place during a makenode call. It is okay + to resize the table, but *not* to rehash it. + */ +static int reorder_makenode(int var, int low, int high) +{ + register BddNode *node; + register unsigned int hash; + register int res; + +#ifdef CACHESTATS + bddcachestats.uniqueAccess++; +#endif + + /* Note: We know that low,high has a refcou greater than zero, so + there is no need to add reference *recursively* */ + + /* check whether childs are equal */ + if (low == high) + { + INCREF(low); + return low; + } + + /* Try to find an existing node of this kind */ + hash = NODEHASH(var, low, high); + res = bddnodes[hash].hash; + + while(res != 0) + { + if (LOW(res) == low && HIGH(res) == high) + { +#ifdef CACHESTATS + bddcachestats.uniqueHit++; +#endif + INCREF(res); + return res; + } + res = bddnodes[res].next; + +#ifdef CACHESTATS + bddcachestats.uniqueChain++; +#endif + } + + /* No existing node -> build one */ +#ifdef CACHESTATS + bddcachestats.uniqueMiss++; +#endif + + /* Any free nodes to use ? */ + if (bddfreepos == 0) + { + if (bdderrorcond) + return 0; + + /* Try to allocate more nodes - call noderesize without + * enabling rehashing. + * Note: if ever rehashing is allowed here, then remember to + * update local variable "hash" */ + bdd_noderesize(0); + resizedInMakenode = 1; + + /* Panic if that is not possible */ + if (bddfreepos == 0) + { + bdd_error(BDD_NODENUM); + bdderrorcond = abs(BDD_NODENUM); + return 0; + } + } + + /* Build new node */ + res = bddfreepos; + bddfreepos = bddnodes[bddfreepos].next; + levels[var].nodenum++; + bddproduced++; + bddfreenum--; + + node = &bddnodes[res]; + VARp(node) = var; + LOWp(node) = low; + HIGHp(node) = high; + + /* Insert node in hash chain */ + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = res; + + /* Make sure it is reference counted */ + node->refcou = 1; + INCREF(LOWp(node)); + INCREF(HIGHp(node)); + + return res; +} + + +/*=== Swapping two adjacent variables ==================================*/ + +/* Go through var 0 nodes. Move nodes that depends on var 1 to a separate + * chain (toBeProcessed) and let the rest stay in the table. + */ +static int reorder_downSimple(int var0) +{ + int toBeProcessed = 0; + int var1 = bddlevel2var[bddvar2level[var0]+1]; + int vl0 = levels[var0].start; + int size0 = levels[var0].size; + int n; + + levels[var0].nodenum = 0; + + for (n=0 ; nnext; + + if (VAR(LOWp(node)) != var1 && VAR(HIGHp(node)) != var1) + { + /* Node does not depend on next var, let it stay in the chain */ + node->next = bddnodes[n+vl0].hash; + bddnodes[n+vl0].hash = r; + levels[var0].nodenum++; + } + else + { + /* Node depends on next var - save it for later procesing */ + node->next = toBeProcessed; + toBeProcessed = r; +#ifdef SWAPCOUNT + bddcachestats.swapCount++; +#endif + + } + + r = next; + } + } + + return toBeProcessed; +} + + +/* Now process all the var 0 nodes that depends on var 1. + * + * It is extremely important that no rehashing is done inside the makenode + * calls, since this would destroy the toBeProcessed chain. + */ +static void reorder_swap(int toBeProcessed, int var0) +{ + int var1 = bddlevel2var[bddvar2level[var0]+1]; + + while (toBeProcessed) + { + BddNode *node = &bddnodes[toBeProcessed]; + int next = node->next; + int f0 = LOWp(node); + int f1 = HIGHp(node); + int f00, f01, f10, f11, hash; + + /* Find the cofactors for the new nodes */ + if (VAR(f0) == var1) + { + f00 = LOW(f0); + f01 = HIGH(f0); + } + else + f00 = f01 = f0; + + if (VAR(f1) == var1) + { + f10 = LOW(f1); + f11 = HIGH(f1); + } + else + f10 = f11 = f1; + + /* Note: makenode does refcou. */ + f0 = reorder_makenode(var0, f00, f10); + f1 = reorder_makenode(var0, f01, f11); + node = &bddnodes[toBeProcessed]; /* Might change in makenode */ + + /* We know that the refcou of the grandchilds of this node + * is greater than one (these are f00...f11), so there is + * no need to do a recursive refcou decrease. It is also + * possible for the LOWp(node)/high nodes to come alive again, + * so deref. of the childs is delayed until the local GBC. */ + + DECREF(LOWp(node)); + DECREF(HIGHp(node)); + + /* Update in-place */ + VARp(node) = var1; + LOWp(node) = f0; + HIGHp(node) = f1; + + levels[var1].nodenum++; + + /* Rehash the node since it got new childs */ + hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = toBeProcessed; + + toBeProcessed = next; + } +} + + +/* Now go through the var 1 chains. The nodes live here have survived + * the call to reorder_swap() and may stay in the chain. + * The dead nodes are reclaimed. + */ +static void reorder_localGbc(int var0) +{ + int var1 = bddlevel2var[bddvar2level[var0]+1]; + int vl1 = levels[var1].start; + int size1 = levels[var1].size; + int n; + + for (n=0 ; nnext; + + if (node->refcou > 0) + { + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = r; + } + else + { + DECREF(LOWp(node)); + DECREF(HIGHp(node)); + + LOWp(node) = -1; + node->next = bddfreepos; + bddfreepos = r; + levels[var1].nodenum--; + bddfreenum++; + } + + r = next; + } + } +} + + + + +#ifdef USERESIZE + +static void reorder_swapResize(int toBeProcessed, int var0) +{ + int var1 = bddlevel2var[bddvar2level[var0]+1]; + + while (toBeProcessed) + { + BddNode *node = &bddnodes[toBeProcessed]; + int next = node->next; + int f0 = LOWp(node); + int f1 = HIGHp(node); + int f00, f01, f10, f11; + + /* Find the cofactors for the new nodes */ + if (VAR(f0) == var1) + { + f00 = LOW(f0); + f01 = HIGH(f0); + } + else + f00 = f01 = f0; + + if (VAR(f1) == var1) + { + f10 = LOW(f1); + f11 = HIGH(f1); + } + else + f10 = f11 = f1; + + /* Note: makenode does refcou. */ + f0 = reorder_makenode(var0, f00, f10); + f1 = reorder_makenode(var0, f01, f11); + node = &bddnodes[toBeProcessed]; /* Might change in makenode */ + + /* We know that the refcou of the grandchilds of this node + * is greater than one (these are f00...f11), so there is + * no need to do a recursive refcou decrease. It is also + * possible for the LOWp(node)/high nodes to come alive again, + * so deref. of the childs is delayed until the local GBC. */ + + DECREF(LOWp(node)); + DECREF(HIGHp(node)); + + /* Update in-place */ + VARp(node) = var1; + LOWp(node) = f0; + HIGHp(node) = f1; + + levels[var1].nodenum++; + + /* Do not rehash yet since we are going to resize the hash table */ + + toBeProcessed = next; + } +} + + +static void reorder_localGbcResize(int toBeProcessed, int var0) +{ + int var1 = bddlevel2var[bddvar2level[var0]+1]; + int vl1 = levels[var1].start; + int size1 = levels[var1].size; + int n; + + for (n=0 ; nnext; + + if (node->refcou > 0) + { + node->next = toBeProcessed; + toBeProcessed = r; + } + else + { + DECREF(LOWp(node)); + DECREF(HIGHp(node)); + + LOWp(node) = -1; + node->next = bddfreepos; + bddfreepos = r; + levels[var1].nodenum--; + bddfreenum++; + } + + r = next; + } + } + + /* Resize */ + if (levels[var1].nodenum < levels[var1].size) + levels[var1].size = MIN(levels[var1].maxsize, levels[var1].size/2); + else + levels[var1].size = MIN(levels[var1].maxsize, levels[var1].size*2); + + if (levels[var1].size >= 4) + levels[var1].size = bdd_prime_lte(levels[var1].size); + + /* Rehash the remaining live nodes */ + while (toBeProcessed) + { + BddNode *node = &bddnodes[toBeProcessed]; + int next = node->next; + int hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); + + node->next = bddnodes[hash].hash; + bddnodes[hash].hash = toBeProcessed; + + toBeProcessed = next; + } +} + +#endif /* USERESIZE */ + + +static int reorder_varup(int var) +{ + if (var < 0 || var >= bddvarnum) + return bdd_error(BDD_VAR); + if (bddvar2level[var] == 0) + return 0; + return reorder_vardown( bddlevel2var[bddvar2level[var]-1]); +} + + +#if 0 +static void sanitycheck(void) +{ + int n,v,r; + int cou=0; + + for (v=0 ; v 0) + { + assert(LEVEL(n) < LEVEL(LOW(n))); + assert(LEVEL(n) < LEVEL(HIGH(n))); + cou--; + } + } + + assert(cou == 0); +} +#endif + +static int reorder_vardown(int var) +{ + int n, level; + + if (var < 0 || var >= bddvarnum) + return bdd_error(BDD_VAR); + if ((level=bddvar2level[var]) >= bddvarnum-1) + return 0; + + resizedInMakenode = 0; + + if (imatrixDepends(iactmtx, var, bddlevel2var[level+1])) + { + int toBeProcessed = reorder_downSimple(var); +#ifdef USERESIZE + levelData *l = &levels[var]; + + if (l->nodenum < (l->size)/3 || + l->nodenum >= (l->size*3)/2 && l->size < l->maxsize) + { + reorder_swapResize(toBeProcessed, var); + reorder_localGbcResize(toBeProcessed, var); + } + else +#endif + { + reorder_swap(toBeProcessed, var); + reorder_localGbc(var); + } + } + + /* Swap the var<->level tables */ + n = bddlevel2var[level]; + bddlevel2var[level] = bddlevel2var[level+1]; + bddlevel2var[level+1] = n; + + n = bddvar2level[var]; + bddvar2level[var] = bddvar2level[ bddlevel2var[level] ]; + bddvar2level[ bddlevel2var[level] ] = n; + + /* Update all rename pairs */ + bdd_pairs_vardown(level); + + if (resizedInMakenode) + reorder_rehashAll(); + + return 0; +} + + +/************************************************************************* + User reordering interface +*************************************************************************/ + +/* +NAME {* bdd\_swapvar *} +SECTION {* reorder *} +SHORT {* Swap two BDD variables *} +PROTO {* int bdd_swapvar(int v1, int v2) *} +DESCR {* Use {\tt bdd\_swapvar} to swap the position (in the current + variable order) of the two BDD + variables {\tt v1} and {\tt v2}. There are no constraints on the + position of the two variables before the call. This function may + {\em not} be used together with user defined variable blocks. + The swap is done by a series of adjacent variable swaps and + requires the whole node table to be rehashed twice for each call + to {\tt bdd\_swapvar}. It should therefore not be used were + efficiency is a major concern. *} +RETURN {* Zero on succes and a negative error code otherwise. *} +ALSO {* bdd\_reorder, bdd\_addvarblock *} +*/ +int bdd_swapvar(int v1, int v2) +{ + int l1, l2; + + /* Do not swap when variable-blocks are used */ + if (vartree != NULL) + return bdd_error(BDD_VARBLK); + + /* Don't bother swapping x with x */ + if (v1 == v2) + return 0; + + /* Make sure the variable exists */ + if (v1 < 0 || v1 >= bddvarnum || v2 < 0 || v2 >= bddvarnum) + return bdd_error(BDD_VAR); + + l1 = bddvar2level[v1]; + l2 = bddvar2level[v2]; + + /* Make sure v1 is before v2 */ + if (l1 > l2) + { + int tmp = v1; + v1 = v2; + v2 = tmp; + l1 = bddvar2level[v1]; + l2 = bddvar2level[v2]; + } + + reorder_init(); + + /* Move v1 to v2's position */ + while (bddvar2level[v1] < l2) + reorder_vardown(v1); + + /* Move v2 to v1's position */ + while (bddvar2level[v2] > l1) + reorder_varup(v2); + + reorder_done(); + + return 0; +} + + +void bdd_default_reohandler(int prestate) +{ + static long c1; + + if (verbose > 0) + { + if (prestate) + { + printf("Start reordering\n"); + c1 = clock(); + } + else + { + long c2 = clock(); + printf("End reordering. Went from %d to %d nodes (%.1f sec)\n", + usednum_before, usednum_after, (float)(c2-c1)/CLOCKS_PER_SEC); + } + } +} + + +/* +NAME {* bdd\_disable\_reorder *} +SECTION {* reorder *} +SHORT {* Disable automatic reordering *} +PROTO {* void bdd_disable_reorder(void) *} +DESCR {* Disables automatic reordering until {\tt bdd\_enable\_reorder} + is called. Reordering is enabled by default as soon as any variable + blocks have been defined. *} +ALSO {* bdd\_enable\_reorder *} +*/ +void bdd_disable_reorder(void) +{ + reorderdisabled = 1; +} + + +/* +NAME {* bdd\_enable\_reorder *} +SECTION {* reorder *} +SHORT {* Enables automatic reordering *} +PROTO {* void bdd_enable_reorder(void) *} +DESCR {* Re-enables reordering after a call to {\tt bdd\_disable\_reorder}. *} +ALSO {* bdd\_disable\_reorder *} +*/ +void bdd_enable_reorder(void) +{ + reorderdisabled = 0; +} + + +int bdd_reorder_ready(void) +{ + if (bddreordermethod == BDD_REORDER_NONE || vartree == NULL || + bddreordertimes == 0 || reorderdisabled) + return 0; + return 1; +} + + +void bdd_reorder_auto(void) +{ + if (!bdd_reorder_ready) + return; + + if (reorder_handler != NULL) + reorder_handler(1); + + bdd_reorder(bddreordermethod); + bddreordertimes--; + + if (reorder_handler != NULL) + reorder_handler(0); +} + + +static int reorder_init(void) +{ + int n; + + if ((levels=NEW(levelData,bddvarnum)) == NULL) + return -1; + + for (n=0 ; n b) + return 1; + return 0; +} + + +static BddTree *reorder_block(BddTree *t, int method) +{ + BddTree *this; + + if (t == NULL) + return NULL; + + if (t->fixed == BDD_REORDER_FREE && t->nextlevel!=NULL) + { + switch(method) + { + case BDD_REORDER_WIN2: + t->nextlevel = reorder_win2(t->nextlevel); + break; + case BDD_REORDER_WIN2ITE: + t->nextlevel = reorder_win2ite(t->nextlevel); + break; + case BDD_REORDER_SIFT: + t->nextlevel = reorder_sift(t->nextlevel); + break; + case BDD_REORDER_SIFTITE: + t->nextlevel = reorder_siftite(t->nextlevel); + break; + case BDD_REORDER_WIN3: + t->nextlevel = reorder_win3(t->nextlevel); + break; + case BDD_REORDER_WIN3ITE: + t->nextlevel = reorder_win3ite(t->nextlevel); + break; + case BDD_REORDER_RANDOM: + t->nextlevel = reorder_random(t->nextlevel); + break; + } + } + + for (this=t->nextlevel ; this ; this=this->next) + reorder_block(this, method); + + if (t->seq != NULL) + qsort(t->seq, t->last-t->first+1, sizeof(int), varseqCmp); + + return t; +} + + +/* +NAME {* bdd\_reorder *} +SECTION {* reorder *} +SHORT {* start dynamic reordering *} +PROTO {* void bdd_reorder(int method) *} +DESCR {* This function initiates dynamic reordering using the heuristic + defined by {\tt method}, which may be one of the following + \begin{description} + \item {\tt BDD\_REORDER\_WIN2}\\ + Reordering using a sliding window of size 2. This algorithm + swaps two adjacent variable blocks and if this results in + more nodes then the two blocks are swapped back again. + Otherwise the result is kept in the variable order. This is + then repeated for all variable blocks. + \item {\tt BDD\_REORDER\_WIN2ITE}\\ + The same as above but the process is repeated until no further + progress is done. Usually a fast and efficient method. + \item {\tt BDD\_REORDER\_WIN3}\\ + The same as above but with a window size of 3. + \item {\tt BDD\_REORDER\_WIN2ITE}\\ + The same as above but with a window size of 3. + \item {\tt BDD\_REORDER\_SIFT}\\ + Reordering where each block is moved through all possible + positions. The best of these is then used as the new position. + Potentially a very slow but good method. + \item {\tt BDD\_REORDER\_SIFTITE}\\ + The same as above but the process is repeated until no further + progress is done. Can be extremely slow. + \item {\tt BDD\_REORDER\_RANDOM}\\ + Mostly used for debugging purpose, but may be usefull for + others. Selects a random position for each variable. + \end{description} + *} +ALSO {* bdd\_autoreorder, bdd\_reorder\_verbose, bdd\_addvarblock, bdd\_clrvarblocks *} +*/ +void bdd_reorder(int method) +{ + BddTree *top; + int savemethod = bddreordermethod; + int savetimes = bddreordertimes; + + bddreordermethod = method; + bddreordertimes = 1; + + if ((top=bddtree_new(-1)) == NULL) + return; + if (reorder_init() < 0) + return; + + usednum_before = bddnodesize - bddfreenum; + + top->first = 0; + top->last = bdd_varnum()-1; + top->fixed = 0; + top->next = NULL; + top->nextlevel = vartree; + + reorder_block(top, method); + vartree = top->nextlevel; + free(top); + + usednum_after = bddnodesize - bddfreenum; + + reorder_done(); + bddreordermethod = savemethod; + bddreordertimes = savetimes; +} + + +/* +NAME {* bdd\_reorder\_gain *} +SECTION {* reorder *} +SHORT {* Calculate the gain in size after a reordering *} +PROTO {* int bdd_reorder_gain(void) *} +DESCR {* Returns the gain in percent of the previous number of used + nodes. The value returned is + \[ (100 * (A - B)) / A \] + Where $A$ is previous number of used nodes and $B$ is current + number of used nodes. + *} +*/ +int bdd_reorder_gain(void) +{ + if (usednum_before == 0) + return 0; + + return (100*(usednum_before - usednum_after)) / usednum_before; +} + + +/* +NAME {* bdd\_reorder\_hook *} +SECTION {* reorder *} +SHORT {* sets a handler for automatic reorderings *} +PROTO {* bddinthandler bdd_reorder_hook(bddinthandler handler) *} +DESCR {* Whenever automatic reordering is done, a check is done to see + if the user has supplied a handler for that event. If so then + it is called with the argument {\tt prestate} being 1 if the + handler is called immediately {\em before} reordering and + {\tt prestate} being 0 if it is called immediately after. + The default handler is + {\tt bdd\_default\_reohandler} which will print information + about the reordering. + + A typical handler could look like this: + \begin{verbatim} +void reorderhandler(int prestate) +{ + if (prestate) + printf("Start reordering"); + else + printf("End reordering"); +} +\end{verbatim} *} +RETURN {* The previous handler *} +ALSO {* bdd\_reorder, bdd\_autoreorder, bdd\_resize\_hook *} +*/ +bddinthandler bdd_reorder_hook(bddinthandler handler) +{ + bddinthandler tmp = reorder_handler; + reorder_handler = handler; + return tmp; +} + + +/* +NAME {* bdd\_blockfile\_hook *} +SECTION {* reorder *} +SHORT {* Specifies a printing callback handler *} +PROTO {* bddfilehandler bdd_blockfile_hook(bddfilehandler handler) *} +DESCR {* A printing callback handler is used to convert the variable + block identifiers into something readable by the end user. Use + {\tt bdd\_blockfile\_hook} to pass a handler to BuDDy. A typical + handler could look like this: +\begin{verbatim} +void printhandler(FILE *o, int block) +{ + extern char **blocknames; + fprintf(o, "%s", blocknames[block]); +} +\end{verbatim} + \noindent + The handler is then called from {\tt bdd\_printorder} and + {\tt bdd\_reorder} (depending on the verbose level) with + the block numbers returned by {\tt bdd\_addvarblock} as arguments. + No default handler is supplied. The argument {\tt handler} may be + NULL if no handler is needed. *} +RETURN {* The old handler *} +ALSO {* bdd\_printorder *} +*/ +bddfilehandler bdd_blockfile_hook(bddfilehandler handler) +{ + bddfilehandler tmp = reorder_filehandler; + reorder_filehandler = handler; + return tmp; +} + + +/* +NAME {* bdd\_autoreorder *} +EXTRA {* bdd\_autoreorder\_times *} +SECTION {* reorder *} +SHORT {* enables automatic reordering *} +PROTO {* int bdd_autoreorder(int method) +int bdd_autoreorder_times(int method, int num) *} +DESCR {* Enables automatic reordering using {\tt method} as the reordering + method. If {\tt method} is {\tt BDD\_REORDER\_NONE} then + automatic reordering is disabled. Automatic + reordering is done every time the number of active nodes in the + node table has been doubled and works by interrupting the current + BDD operation, doing the reordering and the retrying the operation. + + In the second form the argument {\tt num} specifies the allowed + number of reorderings. So if for example a "one shot" reordering + is needed, then the {\tt num} argument would be set to one. + + Values for {\tt method} can be found under {\tt bdd\_reorder}. + *} +RETURN {* Returns the old value of {\tt method} *} +ALSO {* bdd\_reorder *} +*/ +int bdd_autoreorder(int method) +{ + int tmp = bddreordermethod; + bddreordermethod = method; + bddreordertimes = -1; + return tmp; +} + + +int bdd_autoreorder_times(int method, int num) +{ + int tmp = bddreordermethod; + bddreordermethod = method; + bddreordertimes = num; + return tmp; +} + + +/* +NAME {* bdd\_var2level *} +SECTION {* reorder *} +SHORT {* Fetch the level of a specific BDD variable *} +PROTO {* int bdd_var2level(int var) *} +DESCR {* Returns the position of the variable {\tt var} in the current + variable order. *} +ALSO {* bdd\_reorder, bdd\_level2var *} +*/ +int bdd_var2level(int var) +{ + if (var < 0 || var >= bddvarnum) + return bdd_error(BDD_VAR); + + return bddvar2level[var]; +} + + +/* +NAME {* bdd\_level2var *} +SECTION {* reorder *} +SHORT {* Fetch the variable number of a specific level *} +PROTO {* int bdd_level2var(int level) *} +DESCR {* Returns the variable placed at position {\tt level} in the + current variable order. *} +ALSO {* bdd\_reorder, bdd\_var2level *} +*/ +int bdd_level2var(int level) +{ + if (level < 0 || level >= bddvarnum) + return bdd_error(BDD_VAR); + + return bddlevel2var[level]; +} + + +/* +NAME {* bdd\_getreorder\_times *} +SECTION {* reorder *} +SHORT {* Fetch the current number of allowed reorderings *} +PROTO {* int bdd_getreorder_times(void) *} +DESCR {* Returns the current number of allowed reorderings left. This + value can be defined by {\tt bdd\_autoreorder\_times}. *} +ALSO {* bdd\_reorder\_times, bdd\_getreorder\_method *} +*/ +int bdd_getreorder_times(void) +{ + return bddreordertimes; +} + + +/* +NAME {* bdd\_getreorder\_method *} +SECTION {* reorder *} +SHORT {* Fetch the current reorder method *} +PROTO {* int bdd_getreorder_method(void) *} +DESCR {* Returns the current reorder method as defined by + {\tt bdd\_autoreorder}. *} +ALSO {* bdd\_reorder, bdd\_getreorder\_times *} +*/ +int bdd_getreorder_method(void) +{ + return bddreordermethod; +} + + +/* +NAME {* bdd\_reorder\_verbose *} +SECTION {* reorder *} +SHORT {* enables verbose information about reorderings *} +PROTO {* int bdd_reorder_verbose(int v) *} +DESCR {* With {\tt bdd\_reorder\_verbose} it is possible to set the level + of information which should be printed during reordering. A value + of zero means no information, a value of one means some information + and any greater value will result in a lot of reordering + information. The default value is zero. *} +RETURN {* The old verbose level *} +ALSO {* bdd\_reorder *} +*/ +int bdd_reorder_verbose(int v) +{ + int tmp = verbose; + verbose = v; + return tmp; +} + + +/* +NAME {* bdd\_reorder\_probe *} +SECTION {* reorder *} +SHORT {* Define a handler for minimization of BDDs *} +PROTO {* bddsizehandler bdd_reorder_probe(bddsizehandler handler) *} +DESCR {* Reordering is typically done to minimize the global number of + BDD nodes in use, but it may in some cases be usefull to minimize + with respect to a specific BDD. With {\tt bdd\_reorder\_probe} it + is possible to define a callback function that calculates the + size of a specific BDD (or anything else in fact). This handler + will then be called by the reordering functions to get the current + size information. A typical handle could look like this: +\begin{verbatim} +int sizehandler(void) +{ + extern BDD mybdd; + return bdd_nodecount(mybdd); +} +\end{verbatim} + No default handler is supplied. The argument {\tt handler} may be + NULL if no handler is needed. *} + *} +RETURN {* The old handler *} +ALSO {* bdd\_reorder *} +*/ +bddsizehandler bdd_reorder_probe(bddsizehandler handler) +{ + bddsizehandler old = reorder_nodenum; + if (handler == NULL) + return reorder_nodenum; + reorder_nodenum = handler; + return old; +} + + +/* +NAME {* bdd\_clrvarblocks *} +SECTION {* reorder *} +SHORT {* clears all variable blocks *} +PROTO {* void bdd_clrvarblocks(void) *} +DESCR {* Clears all the variable blocks that has been defined by calls + to bdd\_addvarblock. *} +ALSO {* bdd\_addvarblock *} +*/ +void bdd_clrvarblocks(void) +{ + bddtree_del(vartree); + vartree = NULL; + blockid = 0; +} + + +/* +NAME {* bdd\_addvarblock *} +EXTRA {* bdd\_intaddvarblock *} +SECTION {* reorder *} +SHORT {* adds a new variable block for reordering *} +PROTO {* int bdd_addvarblock(BDD var, int fixed) +int bdd_intaddvarblock(int first, int last, int fixed) *} +DESCR {* Creates a new variable block with the variables in the variable + set {\tt var}. The variables in {\tt var} must be contiguous. + In the second form the argument {\tt first} is the first variable + included in the block and {\tt last} is the last variable included + in the block. This order does not depend on current variable + order. + + The variable blocks are ordered as a tree, with the largest + ranges at top and the smallest at the bottom. Example: Assume + the block 0-9 is added as the first block and then the block 0-6. + This yields the 0-9 block at the top, with the 0-6 block as a + child. If now the block 2-4 was added, it would become a child + of the 0-6 block. A block of 0-8 would be a child of the 0-9 + block and have the 0-6 block as a child. Partially overlapping + blocks are not allowed. + + The {\tt fixed} parameter sets the block to be fixed (no + reordering of its child blocks is allowed) or free, using + the constants {\tt BDD\_REORDER\_FIXED} and {\tt + BDD\_REORDER\_FREE}. Reordering is always done on the top + most blocks first and then recursively downwards. + + The return value is an integer that can be used to identify + the block later on - with for example {\tt bdd\_blockfile\_hook}. + The values returned will be in the sequence $0,1,2,3,\ldots$. + *} +RETURN {* A non-negative identifier on success, otherwise a negative error code. *} +ALSO {* bdd\_varblockall, fdd\_intaddvarblock, bdd\_clrvarblocks *} */ +int bdd_addvarblock(BDD b, int fixed) +{ + BddTree *t; + int n, *v, size; + int first, last; + + if ((n=bdd_scanset(b, &v, &size)) < 0) + return n; + if (size < 1) + return bdd_error(BDD_VARBLK); + + first = last = v[0]; + + for (n=0 ; n last) + last = v[n]; + } + + if ((t=bddtree_addrange(vartree, first,last, fixed,blockid)) == NULL) + return bdd_error(BDD_VARBLK); + + vartree = t; + return blockid++; +} + + +int bdd_intaddvarblock(int first, int last, int fixed) +{ + BddTree *t; + + if (first < 0 || first >= bddvarnum || last < 0 || last >= bddvarnum) + return bdd_error(BDD_VAR); + + if ((t=bddtree_addrange(vartree, first,last, fixed,blockid)) == NULL) + return bdd_error(BDD_VARBLK); + + vartree = t; + return blockid++; +} + + +/* +NAME {* bdd\_varblockall *} +SECTION {* reorder *} +SHORT {* add a variable block for all variables *} +PROTO {* void bdd_varblockall(void) *} +DESCR {* Adds a variable block for all BDD variables declared so far. + Each block contains one variable only. More variable blocks + can be added later with the use of {\tt bdd\_addvarblock} -- + in this case the tree of variable blocks will have the blocks + of single variables as the leafs. *} +ALSO {* bdd\_addvarblock, bdd\_intaddvarblock *} +*/ +void bdd_varblockall(void) +{ + int n; + + for (n=0 ; n level) + reorder_varup(lowvar); + } + + reorder_done(); +} + + +static void print_order_rec(FILE *o, BddTree *t, int level) +{ + if (t == NULL) + return; + + if (t->nextlevel) + { + fprintf(o, "%*s", level*3, ""); + if (reorder_filehandler) + reorder_filehandler(o,t->id); + else + fprintf(o, "%3d", t->id); + fprintf(o, "{\n"); + + print_order_rec(o, t->nextlevel, level+1); + + fprintf(o, "%*s", level*3, ""); + if (reorder_filehandler) + reorder_filehandler(o,t->id); + else + fprintf(o, "%3d", t->id); + fprintf(o, "}\n"); + + print_order_rec(o, t->next, level); + } + else + { + fprintf(o, "%*s", level*3, ""); + if (reorder_filehandler) + reorder_filehandler(o,t->id); + else + fprintf(o, "%3d", t->id); + fprintf(o, "\n"); + + print_order_rec(o, t->next, level); + } +} + + + +void bdd_fprintorder(FILE *ofile) +{ + print_order_rec(ofile, vartree, 0); +} + + + +/* EOF */ diff --git a/buddy/src/tree.c b/buddy/src/tree.c new file mode 100644 index 000000000..961c97cb5 --- /dev/null +++ b/buddy/src/tree.c @@ -0,0 +1,222 @@ +/*======================================================================== + Copyright (C) 1996-2002 by Jorn Lind-Nielsen + All rights reserved + + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, reproduce, prepare derivative + works, distribute, and display this software and its documentation + for any purpose, provided that (1) the above copyright notice and + the following two paragraphs appear in all copies of the source code + and (2) redistributions, including without limitation binaries, + reproduce these notices in the supporting documentation. Substantial + modifications to this software may be copyrighted by their authors + and need not follow the licensing terms described here, provided + that the new terms are clearly indicated in all files where they apply. + + IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE + ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO + OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS. +========================================================================*/ + +/************************************************************************* + $Header: /Volumes/CVS/repository/spot/spot/buddy/src/tree.c,v 1.1 2003/05/05 10:57:57 aduret Exp $ + FILE: tree.c + DESCR: Trees for BDD variables + AUTH: Jorn Lind + DATE: (C) march 1998 +*************************************************************************/ +#include +#include +#include "kernel.h" +#include "bddtree.h" + +/************************************************************************* +*************************************************************************/ + +BddTree *bddtree_addrange_rec(BddTree *, BddTree *, int, int, int, int); + + +/*======================================================================*/ + +static void update_seq(BddTree *t) +{ + int n; + int low = t->first; + + for (n=t->first ; n<=t->last ; n++) + if (bddvar2level[n] < bddvar2level[low]) + low = n; + + for (n=t->first ; n<=t->last ; n++) + t->seq[bddvar2level[n]-bddvar2level[low]] = n; +} + + +BddTree *bddtree_new(int id) +{ + BddTree *t = NEW(BddTree,1); + if (t == NULL) + return NULL; + + t->first = t->last = -1; + t->fixed = 1; + t->next = t->prev = t->nextlevel = NULL; + t->seq = NULL; + t->id = id; + return t; +} + + +void bddtree_del(BddTree *t) +{ + if (t == NULL) + return; + + bddtree_del(t->nextlevel); + bddtree_del(t->next); + if (t->seq != NULL) + free(t->seq); + free(t); +} + + +BddTree *bddtree_addrange_rec(BddTree *t, BddTree *prev, + int first, int last, int fixed, int id) +{ + if (first < 0 || last < 0 || last < first) + return NULL; + + /* Empty tree -> build one */ + if (t == NULL) + { + if ((t=bddtree_new(id)) == NULL) + return NULL; + t->first = first; + t->fixed = fixed; + t->seq = NEW(int,last-first+1); + t->last = last; + update_seq(t); + t->prev = prev; + return t; + } + + /* Check for identity */ + if (first == t->first && last == t->last) + return t; + + /* Before this section -> insert */ + if (last < t->first) + { + BddTree *tnew = bddtree_new(id); + if (tnew == NULL) + return NULL; + tnew->first = first; + tnew->last = last; + tnew->fixed = fixed; + tnew->seq = NEW(int,last-first+1); + update_seq(tnew); + tnew->next = t; + tnew->prev = t->prev; + t->prev = tnew; + return tnew; + } + + /* After this this section -> go to next */ + if (first > t->last) + { + t->next = bddtree_addrange_rec(t->next, t, first, last, fixed, id); + return t; + } + + /* Inside this section -> insert in next level */ + if (first >= t->first && last <= t->last) + { + t->nextlevel = + bddtree_addrange_rec(t->nextlevel,NULL,first,last,fixed,id); + return t; + } + + /* Covering this section -> insert above this level */ + if (first <= t->first) + { + BddTree *tnew; + BddTree *this = t; + + while (1) + { + /* Partial cover ->error */ + if (last >= this->first && last < this->last) + return NULL; + + if (this->next == NULL || last < this->next->first) + { + tnew = bddtree_new(id); + if (tnew == NULL) + return NULL; + tnew->first = first; + tnew->last = last; + tnew->fixed = fixed; + tnew->seq = NEW(int,last-first+1); + update_seq(tnew); + tnew->nextlevel = t; + tnew->next = this->next; + tnew->prev = t->prev; + if (this->next != NULL) + this->next->prev = tnew; + this->next = NULL; + t->prev = NULL; + return tnew; + } + + this = this->next; + } + + } + + return NULL; +} + + +BddTree *bddtree_addrange(BddTree *t, int first, int last, int fixed,int id) +{ + return bddtree_addrange_rec(t,NULL,first,last,fixed,id); +} + + +#if 0 +int main(void) +{ + BddTree *t = NULL; + + t = bddtree_addrange(t, 8,10,1); + printf("A\n"); bddtree_print(stdout, t, 0); + t = bddtree_addrange(t, 2,99,1); + printf("B\n"); bddtree_print(stdout, t, 0); + t = bddtree_addrange(t, 11,50,1); + printf("C\n"); bddtree_print(stdout, t, 0); + t = bddtree_addrange(t, 5,7,1); + printf("D\n"); bddtree_print(stdout, t, 0); + t = bddtree_addrange(t, 5,10,1); + printf("E\n"); bddtree_print(stdout, t, 0); + t = bddtree_addrange(t, 100,150,1); + printf("F\n"); bddtree_print(stdout, t, 0); + t = bddtree_addrange(t, 60,65,1); + printf("G\n"); bddtree_print(stdout, t, 0); + t = bddtree_addrange(t, 3,200,1); + + printf("H\n"); bddtree_print(stdout, t, 0); + bddtree_del(t); + return 0; +} +#endif + +/* EOF */