$ od -c -N 50000 [Indigo]<Spruce>13>SpruceBand.bcpl!2
0000000    /   /           S   p   r   u   c   e   B   a   n   d   .   S
0000020    r       -       l   a   s   t       m   o   d   i   f   i   e
0000040    d   :           N   o   v   e   m   b   e   r       2   0   ,
0000060        1   9   7   8           7   :   0   6       A   M  \r  \r
0000100    /   /       B       A       N       D       -   -       B   a
0000120    n   d       m   a   n   a   g   e   m   e   n   t       f   o
0000140    r       s   c   a   n  \r   /   /               e   r   r   o
0000160    r   s       9   0   0  \r   g   e   t       "   S   p   r   u
0000200    c   e   .   d   "  \r   g   e   t       "   S   p   r   u   c
0000220    e   F   i   l   e   s   .   d   "  \r   g   e   t       "   A
0000240    l   l   o   c   .   D   e   c   l   "  \r   /   /       o   u
0000260    t   g   o   i   n   g       p   r   o   c   e   d   u   r   e
0000300    s  \r   e   x   t   e   r   n   a   l       /   /       d   e
0000320    f   i   n   e   d       h   e   r   e  \r  \t   [  \r  \t   B
0000340    a   n   d   I   n   i   t  \r  \t   B   a   n   d   C   l   o
0000360    s   e  \r  \t   B   a   n   d   B   e   g   i   n   P   a   g
0000400    e  \r  \t   B   a   n   d   E   n   d   P   a   g   e  \r  \t
0000420    B   a   n   d   F   l   u   s   h  \r  \t   F   l   u   s   h
0000440    B   u   f   f   e   r   s  \r  \t   P   a   g   e   D   a   t
0000460    a  \t  \t   /   /       R   e   a   d   /   W   r   i   t   e
0000500        s   c   a   n       p   a   s   s       s   u   m   m   a
0000520    r   y       (   ~   ~       s   /   b       i   n       C   h
0000540    e   c   k       f   o   r   m   a   t   !   )  \r  \t   w   i
0000560    n   V   e   c  \r  \t   ]  \r   /   /       i   n   c   o   m
0000600    i   n   g       p   r   o   c   e   d   u   r   e   s  \r   e
0000620    x   t   e   r   n   a   l       /   /       e   x   t   e   r
0000640    n   a   l  \r  \t   [  \r   /   /   W   I   N   D   O   W  \r
0000660   \t   C   u   r   P   o   s   i   t   i   o   n  \r  \t   P   a
0000700    g   e   T   o   P   o   s  \r  \t   W   i   n   d   o   w   C
0000720    r   e   a   t   e   S   t   r   e   a   m  \r  \t   W   i   n
0000740    d   o   w   C   o   p   y  \r  \t   W   i   n   d   o   w   F
0000760    l   u   s   h  \r  \t   W   i   n   d   o   w   G   e   t   B
0001000    o   u   n   d   s  \r  \t   W   i   n   d   o   w   G   e   t
0001020    P   o   s   i   t   i   o   n  \r  \t   W   i   n   d   o   w
0001040    N   e   x   t   P   a   g   e  \r  \t   W   i   n   d   o   w
0001060    P   o   s   i   t   i   o   n   P   t   r  \r  \t   W   i   n
0001100    d   o   w   R   e   a   d  \r  \t   W   i   n   d   o   w   R
0001120    e   a   d   B   l   o   c   k  \r  \t   W   i   n   d   o   w
0001140    S   e   t   B   o   u   n   d   s  \r  \t   W   i   n   d   o
0001160    w   S   e   t   P   a   g   e  \r  \t   W   i   n   d   o   w
0001200    S   e   t   P   o   s   i   t   i   o   n  \r  \t   W   i   n
0001220    d   o   w   W   r   i   t   e  \r  \t   W   i   n   d   o   w
0001240    W   r   i   t   e   B   l   o   c   k  \r  \t   P   u   t   E
0001260    o   f   E   r   r   o   r  \r  \r   /   /   S   P   R   U   C
0001300    E       U   t   i   l   i   t   i   e   s  \r  \t   E   m   e
0001320    r   g   e   n   c   y   O   v   e   r  \r  \t   S   p   r   u
0001340    c   e   C   o   n   d   i   t   i   o   n  \r  \t   S   p   r
0001360    u   c   e   E   r   r   o   r  \r  \t   F   S   G   e   t   R
0001400    e   l   e   a   s   e  \r  \t   F   S   G   e   t   X  \r  \t
0001420    F   S   G   e   t  \r  \t   F   S   P   u   t  \r  \t   M   i
0001440    n  \r  \t   U   s   c  \r  \r   /   /   S   P   R   U   C   E
0001460    M   L  \r  \t   U   g   t  \r  \t   D   o   u   b   l   e   A
0001500    d   d  \r  \t   D   o   u   b   l   e   C   o   p  \r  \r   /
0001520    /       S   p   r   u   c   e   B   a   n   d   M   l  \r  \t
0001540    F   l   u   s   h   C   h   a   r   s  \r   /   /   O   S  \r
0001560   \t   M   o   v   e   B   l   o   c   k  \r  \t   Z   e   r   o
0001600   \r  \t   C   a   l   l   S   w   a   t  \r  \t   C   l   o   s
0001620    e   s  \r  \r   /   /   M   E   T   E   R  \r  \t   M   e   t
0001640    e   r   B   l   o   c   k  \r  \r   /   /   C   U   R   S   O
0001660    R  \r  \t   C   u   r   s   o   r   T   o   g   g   l   e  \r
0001700    /   /       I   S   F  \r  \t   I   n   d   e   x   e   d   P
0001720    a   g   e   I   O  \r  \t   ]  \r   /   /       i   n   c   o
0001740    m   i   n   g       s   t   a   t   i   c   s  \r   e   x   t
0001760    e   r   n   a   l  \t   [  \r  \t   D   P   z   e   r   o  \t
0002000   \t  \t   /   /   D   o   u   b   l   e       p   r   e   c   i
0002020    s   i   o   n       z   e   r   o   .  \r  \t   B   a   n   d
0002040    F   i   l   e  \r  \t   B   a   n   d   W   i   n   d   o   w
0002060   \r  \t   e   m   e   r   g   e   n   c   y   S   t   o   r   a
0002100    g   e  \r  \t   n   V   i   s   i   b   l   e   B   a   n   d
0002120    s  \t  \t   /   /   N   u   m   b   e   r       o   f       b
0002140    a   n   d   s       r   e   q   u   i   r   e   d       f   o
0002160    r       t   h   i   s       d   e   v   i   c   e  \r  \t   n
0002200    L   e   a   d   i   n   g   B   a   n   d   s  \r  \t   n   T
0002220    r   a   i   l   i   n   g   B   a   n   d   s  \r  \t   R   e
0002240    p   o   r   t  \r  \t   D   o   E   t   h   e   r   R   e   p
0002260    o   r   t  \r  \t   D   o   M   e   t   e   r  \r  \t   D   e
0002300    b   u   g   S   y   s   t   e   m  \r  \t   o   n   l   y   O
0002320    n   C   o   p   y  \r  \t   O   v   e   r   l   a   y   T   o
0002340    p  \r  \t   P   e   r   m   a   n   e   n   t   B   o   t   t
0002360    o   m  \r  \t   S   p   r   u   c   e   Z   o   n   e  \r  \t
0002400    B   a   n   d   T   a   b   l   e  \r  \t   B   a   n   d   F
0002420    r   e   e  \r  \t   B   a   n   d   A   v   a   i   l  \r  \t
0002440    C   o   p   y   T   a   b   l   e  \r  \t   p   a   r   t   N
0002460    u   m   b   e   r  \r  \t   ]  \r   /   /       i   n   t   e
0002500    r   n   a   l       s   t   a   t   i   c   s  \r   s   t   a
0002520    t   i   c  \t  \t   [  \r  \t   B   a   n   d   B   u   f   L
0002540    i   s   t  \r  \t   B   a   n   d   B   u   f  \r  \t   B   a
0002560    n   d   B   u   f   S   i   z   e   T   o   t   a   l  \r  \t
0002600    B   a   n   d   S   e   g   m   e   n   t   s  \t  \t   /   /
0002620    N   u   m   b   e   r       o   f       "   d   u   m   p   s
0002640    "       o   n       d   i   s   k  \r  \t   b   a   n   d   O
0002660    u   t   P   o   s  \t  \t   /   /   S   a   v   e       p   o
0002700    s   i   t   i   o   n       o   f       "   m   a   i   n   "
0002720        b   a   n   d       o   u   t   p   u   t  \r  \t   f   i
0002740    r   s   t   M   e   r   g   e   P   a   g   e  \t  \t   /   /
0002760    f   i   r   s   t       p   a   g   e       u   s   e   d    
0003000    f   o   r       i   n   t   e   r   m   e   d   i   a   t   e
0003020        m   e   r   g   e       o   u   t   p   u   t  \r  \t   w
0003040    i   n   V   e   c  \r  \t   ]  \r   /   /       b   u   f   f
0003060    e   r       m   a   n   a   g   e   m   e   n   t       v   a
0003100    l   u   e   s  \r   m   a   n   i   f   e   s   t  \t   [  \r
0003120   \t   n   a   h   M   e   r   g   e   O   u   t       =       4
0003140   \t   /   /       o   u   t   p   u   t       f   i   l   e    
0003160    a   h   e   a   d       c   o   u   n   t  \r  \t   n   a   h
0003200    M   e   r   g   e   I   n       =       5  \t  \t   /   /    
0003220    i   n   p   u   t       f   i   l   e       d   i   t   t   o
0003240   \r   /   /       P   e   r   f   o   r   m   a   n   c   e   -
0003260    r   e   l   a   t   e   d       s   i   z   e   s   :  \r  \t
0003300    n   M   a   x   M   e   r   g   e   I   n   p   u   t   s   =
0003320    4  \t  \t  \t   /   /   M   a   x       n   u   m   b   e   r
0003340        o   f       b   a   n   d       s   e   g   m   e   n   t
0003360    s       t   o       m   e   r   g   e       a   t       o   n
0003400    c   e  \r  \t   l   n   M   a   x   M   e   r   g   e   I   n
0003420    p   u   t   s   =   2  \r  \t   B   a   n   d   B   u   f   S
0003440    i   z   e       =       1   0   2   4   +   m   i   n   L   e
0003460    n   S   P   r   u   c   e   P   a   g   e       /   /       M
0003500    a   x       S   P   r   u   c   e   P   a   g   e       s   i
0003520    z   e  \r  \t   M   U   D   o   n   e       =       0  \r  \t
0003540    M   U   C   a   n   t       =       1  \r  \t   ]  \r   /   /
0003560        B   a   n   d   I   n   i   t   (   )   ,                
0003600                B   a   n   d   C   l   o   s   e   (   )   ,    
0003620                            B   a   n   d   B   e   g   i   n   P
0003640    a   g   e   (   )  \r   l   e   t       B   a   n   d   I   n
0003660    i   t   (   )       b   e  \r   [  \r  \t   c   o   m   p   i
0003700    l   e   i   f       B   E   M   a   x   S   i   z   e       g
0003720    e       B   a   n   d   B   u   f   S   i   z   e       t   h
0003740    e   n       [       f   o   o   =   0       ]  \r  \r  \t   B
0003760    a   n   d   T   a   b   l   e   =   F   S   G   e   t   X   (
0004000    n   V   i   s   i   b   l   e   B   a   n   d   s   )  \r  \t
0004020    C   o   p   y   T   a   b   l   e   =   F   S   G   e   t   X
0004040    (   n   V   i   s   i   b   l   e   B   a   n   d   s   )  \r
0004060   \t   B   a   n   d   B   u   f   L   i   s   t       =       0
0004100    ;       R   e   l   e   a   s   e   B   a   n   d   B   u   f
0004120    s   (   t   r   u   e   )  \r   ]  \r  \r   a   n   d       B
0004140    a   n   d   C   l   o   s   e   (   )       b   e  \r   [  \r
0004160   \t   B   a   n   d   T   a   b   l   e       =       F   S   P
0004200    u   t   (   B   a   n   d   T   a   b   l   e   )  \r  \t   C
0004220    o   p   y   T   a   b   l   e       =       F   S   P   u   t
0004240    (   C   o   p   y   T   a   b   l   e   )  \r  \t   R   e   l
0004260    e   a   s   e   B   a   n   d   B   u   f   s   (   f   a   l
0004300    s   e   )  \r   ]  \r  \r   a   n   d       B   a   n   d   B
0004320    e   g   i   n   P   a   g   e   (   )       b   e       /   /
0004340        ~   ~       c   o   u   l   d       e   a   s   i   l   y
0004360        e   l   i   m   i   n   a   t   e  \r   [  \r  \t   B   a
0004400    n   d   S   e   g   m   e   n   t   s   =   0  \t  \t  \t   /
0004420    /   N   o   n   e       o   n       t   h   e       d   i   s
0004440    k   .  \r   ]  \r   /   /       B   a   n   d   E   n   d   P
0004460    a   g   e   (   p   a   g   e   )  \t  \t   S   e   g   m   e
0004500    n   t       M   e   r   g   i   n   g  \r   /   /  \t   U   n
0004520    l   e   s   s       t   h   e       e   n   t   i   r   e    
0004540    p   a   g   e   '   s       b   a   n   d       e   n   t   r
0004560    i   e   s       a   r   e       i   n       m   e   m   o   r
0004600    y   ,       w   e       m   u   s   t       n   o   w       m
0004620    e   r   g   e       a   l   l       t   h   e       s   e   g
0004640    m   e   n   t   s   .       T   h   e   r   e  \r   /   /    
0004660    a   r   e       B   a   n   d   S   e   g   m   e   n   t   s
0004700        s   e   g   m   e   n   t   s       t   o       m   e   r
0004720    g   e   ;       t   h   e       f   i   r   s   t       b   e
0004740    g   i   n   s       i   n       p   a   g   e       1       o
0004760    f       M   e   r   g   e   F   i   l   e   ,       t   h   e
0005000        2   d       i   n       p   a   g   e       2   ,       e
0005020    t   c   .  \r   /   /       E   a   c   h       t   h   e   n
0005040        c   o   n   t   i   n   u   e   s       a   t       n   M
0005060    a   x   M   e   r   g   I   n   p   u   t   s   -   p   a   g
0005100    e       i   n   t   e   r   v   a   l   s       u   n   t   i
0005120    l       i   t   s       e   n   t   r   i   e   s       a   r
0005140    e       e   x   h   a   u   s   t   e   d   .       A   l   l
0005160        s   e   g   m   e   n   t   s  \r   /   /       h   a   v
0005200    e       b   a   n   d   s       r   u   n   n   i   n   g    
0005220    f   r   o   m       0       t   o       n   V   i   s   i   b
0005240    l   e   B   a   n   d   s   -   1   .       T   h   e   y    
0005260    m   u   s   t       b   e       m   e   r   g   e   d       i
0005300    n   t   o       t   h   e       m   a   i   n       b   a   n
0005320    d       f   i   l   e   .       T   h   e   n  \r   /   /    
0005340    t   h   e       M   e   r   g   e   F   i   l   e       m   u
0005360    s   t       b   e       d   i   s   c   a   r   d   e   d   .
0005400        F   o   u   r       s   e   g   m   e   n   t   s       s
0005420    h   o   u   l   d       b   e       s   u   f   f   i   c   i
0005440    e   n   t       f   o   r       a   n   y       e   n   v   i
0005460    s   i   o   n   e   d       u   s   e   .  \r  \r   a   n   d
0005500        B   a   n   d   E   n   d   P   a   g   e   (   p   a   g
0005520    e   )       b   e  \r                   [  \r                
0005540    u   n   l   e   s   s       B   a   n   d   S   e   g   m   e
0005560    n   t   s       d   o       [       B   a   n   d   F   l   u
0005600    s   h   (   p   a   g   e   )   ;       r   e   t   u   r   n
0005620        ]       /   /       w   r   i   t   e       e   n   t   i
0005640    r   e       p   a   g   e   ,       r   e   t   u   r   n  \r
0005660   \r                   B   a   n   d   F   l   u   s   h   (   0
0005700    )  \t  \t  \t   /   /   G   o       h   a   n   d   l   e    
0005720    c   u   r   r   e   n   t       b   u   f   f   e   r   .  \r
0005740                    C   u   r   s   o   r   T   o   g   g   l   e
0005760    (   0   )  \r                   l   e   t       p   0   ,    
0006000    p   n       =       t   a   b   l   e       [       0   ;    
0006020    0       ]   ,       v   e   c       2  \r                   P
0006040    a   g   e   T   o   P   o   s   (   p   n   ,       f   i   r
0006060    s   t   M   e   r   g   e   P   a   g   e   ,       0   ,    
0006100    w   o   r   d   I   t   e   m   ,       B   a   n   d   F   i
0006120    l   e   )  \r                   W   i   n   d   o   w   S   e
0006140    t   B   o   u   n   d   s   (   B   a   n   d   W   i   n   d
0006160    o   w   ,       p   0   ,       p   n   )  \r                
0006200    B   a   n   d   W   i   n   d   o   w   >   >   S   S   .   s
0006220    t   e   p   S   i   z   e       =       1  \t   /   /       b
0006240    a   c   k       t   o       n   o   r   m   a   l       p   a
0006260    g   e   -   s   e   q   u   e   n   c   i   n   g  \r        
0006300            W   i   n   d   o   w   S   e   t   P   o   s   i   t
0006320    i   o   n   (   B   a   n   d   W   i   n   d   o   w   ,    
0006340    b   a   n   d   O   u   t   P   o   s   )  \r                
0006360    B   a   n   d   F   i   n   a   l   (   p   a   g   e   ,    
0006400    0   )  \r                   B   a   n   d   S   e   g   m   e
0006420    n   t   s       =       B   a   n   d   S   e   g   m   e   n
0006440    t   s   -   1  \r                   l   e   t       v       =
0006460        v   e   c       n   M   a   x   M   e   r   g   e   I   n
0006500    p   u   t   s   ;       w   i   n   V   e   c       =       v
0006520   \r                   f   o   r       s       =       0       t
0006540    o       B   a   n   d   S   e   g   m   e   n   t   s       d
0006560    o  \r  \t   [  \r  \t   l   e   t       p   o   s       =    
0006600    v   e   c       2  \r  \t   P   a   g   e   T   o   P   o   s
0006620    (   p   o   s   ,       f   i   r   s   t   M   e   r   g   e
0006640    P   a   g   e   +   s   ,       0   ,       w   o   r   d   I
0006660    t   e   m   ,       B   a   n   d   F   i   l   e   )  \r  \t
0006700    w   i   n   V   e   c   !   s       =  \r  \t                
0006720    W   i   n   d   o   w   C   r   e   a   t   e   S   t   r   e
0006740    a   m   (   B   a   n   d   F   i   l   e   ,       k   s   T
0006760    y   p   e   R   e   a   d   O   n   l   y   ,       0   ,    
0007000    n   a   h   M   e   r   g   e   I   n   ,       p   o   s   ,
0007020        0   ,       n   M   a   x   M   e   r   g   e   I   n   p
0007040    u   t   s   )  \r  \t   ]  \r                   /   /       B
0007060    a   n   d       B   u   f   f   e   r       a   s   s   e   r
0007100    t   e   d       p   o   i   s   e   d       f   o   r       n
0007120    e   x   t       p   a   g   e   ,       s   o       o   n   e
0007140        b   u   f   f   e   r       i   s       e   m   p   t   y
0007160        a   n   d       i   n   i   t   i   a   l   i   z   e   d
0007200   \r                   f   o   r       b       =       0       t
0007220    o       n   V   i   s   i   b   l   e   B   a   n   d   s   -
0007240    1       d   o  \r  \t   [  \r  \t   /   /       B   a   n   d
0007260    s       f   r   o   m       d   i   f   f   e   r   e   n   t
0007300        s   e   g   m   e   n   t   s       m   u   s   t       b
0007320    e       m   e   r   g   e   d       i   n       r   e   v   e
0007340    r   s   e       o   r   d   e   r  \r  \t   f   o   r       s
0007360    =   B   a   n   d   S   e   g   m   e   n   t   s       b   y
0007400        -   1       t   o       0       d   o  \r  \t            
0007420        [       /   /       e   L   e   n       i   s       l   e
0007440    n   g   t   h       o   f       (   e   n   d       o   f    
0007460    b   a   n   d   )       e   n   t   r   y       -   -       n
0007500    o   n   -   z   e   r   o       o   n   l   y       d   u   r
0007520    i   n   g       l   a   s   t       i   t   e   r   a   t   i
0007540    o   n  \r  \t                   l   e   t       s   t   r   ,
0007560        e   L   e   n   ,       l   e   n       =       w   i   n
0007600    V   e   c   !   s   ,       (   s       e   q       0   ?    
0007620    2   ,       0   )   ,       W   i   n   d   o   w   R   e   a
0007640    d   (   s   t   r   )   +   e   L   e   n  \r  \t            
0007660        i   f       B   a   n   d   A   v   a   i   l   +   l   e
0007700    n       g   e       0       %       e   m   e   r   g   e   n
0007720    c   y   S   t   o   r   a   g   e       e   q       0       t
0007740    h   e   n       F   l   u   s   h   M   e   r   g   e   B   u
0007760    f   f   e   r   s   (   t   r   u   e   )  \r  \t            
0010000        B   a   n   d   A   v   a   i   l       =       B   a   n
0010020    d   A   v   a   i   l   +   l   e   n   ;       i   f       B
0010040    a   n   d   A   v   a   i   l       g   e       0       t   h
0010060    e   n  \r  \t  \t   S   p   r   u   c   e   C   o   n   d   i
0010100    t   i   o   n   (   9   0   6   ,       E   C   F   i   l   e
0010120    T   e   r   m   i   n   a   t   e   ,       p   a   r   t   N
0010140    u   m   b   e   r   )  \r  \t                   i   f       l
0010160    e   n       t   h   e   n       W   i   n   d   o   w   R   e
0010200    a   d   B   l   o   c   k   (   s   t   r   ,       B   a   n
0010220    d   F   r   e   e   ,       l   e   n   -   e   L   e   n   )
0010240   \r  \t                   B   a   n   d   F   r   e   e       =
0010260        B   a   n   d   F   r   e   e   +   l   e   n  \r  \t    
0010300                i   f       e   L   e   n       t   h   e   n    
0010320    B   a   n   d   F   r   e   e   !   -   2   ,       B   a   n
0010340    d   F   r   e   e   !   -   1       =       B   E   E   n   d
0010360    H   ,       B   E   E   n   d   H       /   /       B   a   n
0010400    d   E   n   d       s   i   m   u   l   a   t   i   o   n  \r
0010420   \t                   ]  \r  \t   ]  \r                   F   l
0010440    u   s   h   M   e   r   g   e   B   u   f   f   e   r   s   (
0010460    f   a   l   s   e   )       /   /       f   i   n   a   l    
0010500    w   r   i   t   i   n   g  \r                   f   o   r    
0010520    s   =   0       t   o       B   a   n   d   S   e   g   m   e
0010540    n   t   s       d   o       C   l   o   s   e   s   (   w   i
0010560    n   V   e   c   !   s   )   ;       w   i   n   V   e   c    
0010600    =       0  \r                   W   i   n   d   o   w   G   e
0010620    t   P   o   s   i   t   i   o   n   (   B   a   n   d   W   i
0010640    n   d   o   w   ,       b   a   n   d   O   u   t   P   o   s
0010660    )  \r                   W   i   n   d   o   w   S   e   t   B
0010700    o   u   n   d   s   (   B   a   n   d   W   i   n   d   o   w
0010720    )  \r                   W   i   n   d   o   w   S   e   t   P
0010740    o   s   i   t   i   o   n   (   B   a   n   d   W   i   n   d
0010760    o   w   ,       b   a   n   d   O   u   t   P   o   s   )  \r
0011000                    B   a   n   d   F   i   n   a   l   (   p   a
0011020    g   e   ,       1   )  \r                   A   d   d   B   a
0011040    n   d   B   u   f   (   )       /   /       l   e   a   v   e
0011060        s   e   t       u   p       f   o   r       n   e   x   t
0011100        p   a   g   e  \r                   ]  \r  \r   a   n   d
0011120        F   l   u   s   h   M   e   r   g   e   B   u   f   f   e
0011140    r   s   (   g   e   t   A   n   o   t   h   e   r   )       b
0011160    e  \r  \t   [  \r  \t   /   /       r   e   l   e   a   s   e
0011200        a   l   l       b   u   f   f   e   r   e   d       p   a
0011220    g   e   s       f   o   r       i   n   p   u   t       s   t
0011240    r   e   a   m   s       t   o       m   a   k   e       r   o
0011260    o   m       f   o   r       o   u   t   p   u   t  \r  \t   l
0011300    e   t       p   o   s   n   s       =       v   e   c       n
0011320    M   a   x   M   e   r   g   e   I   n   p   u   t   s   *   2
0011340   \r  \t   f   o   r       s       =       0       t   o       B
0011360    a   n   d   S   e   g   m   e   n   t   s       d   o  \r  \t
0011400   \t   [  \r  \t  \t   l   e   t       s   t   r       =       w
0011420    i   n   V   e   c   !   s  \r  \t  \t   l   e   t       p   o
0011440    s       =       p   o   s   n   s   +   s       l   s   h   i
0011460    f   t       1  \r  \t  \t   /   /       ~   ~       i   f    
0011500    s   t   r   e   a   m       a   t       e   n   d       o   f
0011520        p   a   g   e   ,       t   h   e       G   e   t   P   o
0011540    s   i   t   i   o   n   /   S   e   t   P   o   s   i   t   i
0011560    o   n       p   a   i   r       c   o   u   l   d       a   d
0011600    v   a   n   c   e       t   o  \r  \t  \t   /   /       ~   ~
0011620        t   h   e       n   e   x   t       p   a   g   e       -
0011640    -       s   i   n   c   e       t   h   e   s   e       s   t
0011660    r   e   a   m   s       a   r   e       n   o   t       p   r
0011700    o   c   e   d   i   n   g       t   h   r   o   u   g   h    
0011720    s   e   q   u   e   n   t   i   a   l  \r  \t  \t   /   /    
0011740    ~   ~       p   a   g   e   s   ,       t   h   i   s       l
0011760    e   a   d   s       t   o       a   n       e   r   r   o   r
0012000    .       T   h   i   s       s   o   l   u   t   i   o   n    
0012020    i   s       u   g   l   y   .  \r  \t  \t   /   /       W   i
0012040    n   d   o   w   G   e   t   P   o   s   i   t   i   o   n   (
0012060    s   t   r   ,       p   o   s   )       /   /       ~   ~    
0012100    (   t   h   e       e   r   r   o   r       d   i   d       o
0012120    c   c   u   r   )  \r  \t  \t   p   o   s   !   0       =    
0012140    s   t   r   >   >   S   S   .   s   p   r   u   c   e   P   a
0012160    g   e   >   >   S   P   r   u   c   e   P   a   g   e   .   p
0012200    a   g   e   N   u   m   b   e   r       /   /       ~   ~    
0012220    n   e   e   d   s       a   b   s   t   r   a   c   t   i   o
0012240    n  \r  \t  \t   p   o   s   !   1       =       C   u   r   P
0012260    o   s   i   t   i   o   n   (   s   t   r   )  \r  \t  \t   W
0012300    i   n   d   o   w   F   l   u   s   h   (   s   t   r   ,    
0012320    t   r   u   e   )       /   /       r   e   l   e   a   s   e
0012340        t   h   e       c   u   r   r   e   n   t       p   a   g
0012360    e  \r  \t  \t   ]  \r  \t   F   l   u   s   h   B   u   f   f
0012400    e   r   s   (   g   e   t   A   n   o   t   h   e   r   )    
0012420    /   /       w   r   i   t   e       c   u   r   r   e   n   t
0012440        b   u   f   f   e   r       s   e   t  \r  \t   u   n   l
0012460    e   s   s       g   e   t   A   n   o   t   h   e   r       r
0012500    e   t   u   r   n  \r  \t   f   o   r       s       =       0
0012520        t   o       B   a   n   d   S   e   g   m   e   n   t   s
0012540        d   o  \r  \t  \t   [  \r  \t  \t   /   /       W   i   n
0012560    d   o   w   S   e   t   P   o   s   i   t   i   o   n   (   w
0012600    i   n   V   e   c   !   s   ,       p   o   s   n   s   +   s
0012620        l   s   h   i   f   t       1   )       /   /       ~   ~
0012640        o   t   h   e   r       h   a   l   f       o   f       e
0012660    r   r   o   r  \r  \t  \t   l   e   t       s   t   r   ,    
0012700    p   o   s       =       w   i   n   V   e   c   !   s   ,    
0012720    p   o   s   n   s   +   s       l   s   h   i   f   t       1
0012740   \r  \t  \t   W   i   n   d   o   w   S   e   t   P   a   g   e
0012760    (   s   t   r   ,       p   o   s   !   0   )  \r  \t  \t   W
0013000    i   n   d   o   w   P   o   s   i   t   i   o   n   P   t   r
0013020    (   s   t   r   ,       p   o   s   !   1   )  \r  \t  \t   ]
0013040   \r  \t   ]  \r   /   /       B   a   n   d   F   l   u   s   h
0013060    (       [   p   a   g   e   ]       )  \r   /   /       B   a
0013100    n   d   F   l   u   s   h       i   s       c   a   l   l   e
0013120    d       f   o   r       t   h   r   e   e       r   e   a   s
0013140    o   n   s   :  \r   /   /               B   a   n   d   F   l
0013160    u   s   h   (   )       c   a   l   l   e   d       w   h   e
0013200    n       b   a   n   d   s       o   v   e   r   f   l   o   w
0013220        d   u   r   i   n   g       o   u   t   p   u   t   .  \r
0013240    /   /               B   a   n   d   F   l   u   s   h   (   0
0013260    )       c   a   l   l   e   d       t   o       f   l   u   s
0013300    h       f   i   n   a   l       p   a   r   t   i   a   l    
0013320    o   u   t   p   u   t       b   e   f   o   r   e       m   e
0013340    r   g   e   r  \r   /   /               B   a   n   d   F   l
0013360    u   s   h   (   p   a   g   e   )       c   a   l   l   e   d
0013400        i   f       w   e       g   e   t       t   o       e   n
0013420    d       o   f       p   a   g   e       b   e   f   o   r   e
0013440        b   a   n   d       o   v   e   r   f   l   o   w  \r  \r
0013460    /   /       T   w   o       d   i   f   f   e   r   e   n   t
0013500        l   o   o   p   s   .           I   f       t   h   i   s
0013520        i   s       t   h   e       f   i   n   a   l       p   a
0013540    s   s   ,           w   e       c   a   n       s   i   m   p
0013560    l   y       w   r   i   t   e       t   h   e       b   a   n
0013600    d       l   i   s   t   s       o   u   t   .           I   f
0013620        t   h   i   s       i   s       n   o   t  \r   /   /    
0013640    t   h   e       f   i   n   a   l       p   a   s   s   ,    
0013660    w   e       f   i   r   s   t       c   o   u   n   t       t
0013700    h   e       n   u   m   b   e   r       o   f       w   o   r
0013720    d   s       i   n       t   h   e       b   a   n   d       e
0013740    n   t   r   y       (   n   o   t       c   o   u   n   t   i
0013760    n   g       t   h   e       E   n   d   H   )  \r  \r   a   n
0014000    d       B   a   n   d   F   l   u   s   h   (   p   a   g   e
0014020    ;       n   u   m   a   r   g   s       n   )       b   e  \r
0014040                    [  \r                   i   f       n       e
0014060    q       0       t   h   e   n       p   a   g   e   =   0  \r
0014100                    l   e   t       f   i   n   a   l   =       n
0014120        e   q       1       /   /       d   o   n   '   t       a
0014140    l   l   o   c   a   t   e       m   o   r   e       b   a   n
0014160    d   s       i   f       B   a   n   d   F   l   u   s   h   (
0014200    0   )  \r                   u   n   l   e   s   s       f   i
0014220    n   a   l   %   n   o   t       A   d   d   B   a   n   d   B
0014240    u   f   (   Y   e   s   )       r   e   t   u   r   n  \r    
0014260                f   i   n   a   l       =       p   a   g   e    
0014300    n   e       0       /   /       n   o   w       f   i   n   a
0014320    l       o   n   l   y       i   f       p   a   g   e       a
0014340    r   g   u   m   e   n   t       s   u   p   p   l   i   e   d
0014360   \r                   C   u   r   s   o   r   T   o   g   g   l
0014400    e   (   B   a   n   d   S   e   g   m   e   n   t   s   )  \r
0014420                    t   e   s   t       f   i   n   a   l       t
0014440    h   e   n       B   a   n   d   F   i   n   a   l   (   p   a
0014460    g   e   ,       0   )       o   r       S   e   t   u   p   M
0014500    e   r   g   e   F   i   l   e   (   )  \r                   f
0014520    o   r       b   =   0       t   o       n   V   i   s   i   b
0014540    l   e   B   a   n   d   s   -   1       d   o  \r  \t   [  \r
0014560   \t   /   /       c   o   m   p   u   t   e       b   a   n   d
0014600        s   i   z   e       l   o   o   p  \r  \t   /   /       *
0014620    *   *       p   ,       n   e   x   t   P   ,       a   n   d
0014640        l   e   f   t       m   u   s   t       r   e   m   a   i
0014660    n       c   o   n   t   i   g   u   o   u   s       -   -    
0014700    u   s   e   d       i   n       m   i   c   r   o   c   o   d
0014720    e       *   *   *  \r  \t   l   e   t       p   ,       n   e
0014740    x   t   P   ,       l   e   f   t       =       B   a   n   d
0014760    T   a   b   l   e   !   b   ,       n   i   l   ,       n   i
0015000    l  \r  \t   u   n   l   e   s   s       f   i   n   a   l    
0015020    d   o  \r  \t                   [      \r  \t                
0015040    l   e   t       l   e   n   =   0  \r  \t                   w
0015060    h   i   l   e       p       d   o  \r  \t  \t   [  \r  \t  \t
0015100    /   /       ~   ~       s   t   r   e   s   s   e   s       s
0015120    p   e   e   d   ;       m   u   s   t       a   d   j   u   s
0015140    t       w   h   e   n       n   e   w       t   y   p   e   s
0015160        a   d   d   e   d       -   -       k   n   o   w   s    
0015200    a   b   s   .       s   i   z   e   s       a   n   d       s
0015220    h   a   p   e   s  \r  \t  \t   l   e   t       t   y   p   e
0015240    W   d       =       @   p  \r  \t  \t   l   e   n   =   l   e
0015260    n   +   (   t   y   p   e   W   d   <   0   ?       2   ,    
0015300    t   y   p   e   W   d       e   q       B   E   R   e   c   t
0015320    a   n   g   l   e   H   ?       4   ,       2   )  \r  \t  \t
0015340    p   =   p   !   -   1  \r  \t  \t   ]  \r  \t                
0015360    u   n   l   e   s   s       f   i   n   a   l       t   h   e
0015400    n       W   i   n   d   o   w   W   r   i   t   e   (   B   a
0015420    n   d   W   i   n   d   o   w   ,       l   e   n   )  \r  \t
0015440                    p       =       B   a   n   d   T   a   b   l
0015460    e   !   b  \r  \t                   ]  \r  \r  \t   /   /    
0015500    W   r   i   t   e       b   a   n   d       e   n   t   r   i
0015520    e   s       l   o   o   p       (   m   i   c   r   o   c   o
0015540    d   e       l   i   n   k   a   g   e   )  \r  \t            
0015560        [  \r  \t                   u   n   l   e   s   s       p
0015600        b   r   e   a   k  \r  \t                   /   /       M
0015620    L       l   i   n   k   a   g   e       r   e   s   p   o   n
0015640    s   i   b   l   e       f   o   r       k   e   e   p   i   n
0015660    g       s   t   r   e   a   m       d   a   t   a       c   o
0015700    r   r   e   c   t  \r  \t                   /   /       F   l
0015720    u   s   h   C   h   a   r   s       u   p   d   a   t   e   s
0015740        p   ,       n   e   x   t   P   ,       a   n   d       l
0015760    e   f   t       (   n   e   x   t   P       n   o   t       a
0016000    l   w   a   y   s       d   e   r   i   v   a   b   l   e    
0016020    a   n   y       l   o   n   g   e   r   )  \r  \t            
0016040        /   /       l   e   f   t       i   s       #       w   o
0016060    r   d   s       l   e   f   t       t   o       w   r   i   t
0016100    e       i   n       e   n   t   r   y       i   n   d   i   c
0016120    a   t   e   d       b   y       p  \r  \t                   s
0016140    w   i   t   c   h   o   n       F   l   u   s   h   C   h   a
0016160    r   s   (   l   v       p   ,       l   v       B   a   n   d
0016200    W   i   n   d   o   w   >   >   F   S   .   f   s   p   )    
0016220    i   n   t   o  \r  \t  \t   [  \r  \t  \t   c   a   s   e    
0016240    M   U   C   a   n   t   :       /   /       w   r   i   t   e
0016260        c   u   r   r   e   n   t       e   n   t   r   y   ,    
0016300    m   a   y   b   e       o   v   e   r   l   a   p   p   e   d
0016320    ,       g   o       o   n       t   o       (   n   o   w    
0016340    n   o   n   -   e   m   p   t   y   )       n   e   x   t    
0016360    p   p   .  \r  \t  \t  \t   W   i   n   d   o   w   W   r   i
0016400    t   e   B   l   o   c   k   (   B   a   n   d   W   i   n   d
0016420    o   w   ,       p   ,       l   e   f   t   +   1   )   ;    
0016440    e   n   d   c   a   s   e  \r  \t  \t   c   a   s   e       M
0016460    U   D   o   n   e   :       b   r   e   a   k  \r  \t  \t   d
0016500    e   f   a   u   l   t   :       S   p   r   u   c   e   E   r
0016520    r   o   r   (   1   0   2   )  \r  \t  \t   ]  \r  \t        
0016540            p       =       n   e   x   t   P  \r  \t            
0016560        ]       r   e   p   e   a   t  \r  \t   /   /   N   o   w
0016600        w   r   i   t   e       e   n   d       c   o   d   e    
0016620    (   o   n   l   y       i   f       f   i   n   a   l       f
0016640    i   l   e   )  \r  \t   i   f       f   i   n   a   l       t
0016660    h   e   n       B   a   n   d   E   n   d   (   )  \r  \t   ]
0016700   \r  \r                   i   f       f   i   n   a   l       t
0016720    h   e   n       B   a   n   d   F   i   n   a   l   (   p   a
0016740    g   e   ,       1   )  \r  \r                   /   /       N
0016760    o   w       r   e   s   e   t       b   a   n   d       b   u
0017000    f   f   e   r       s   t   u   f   f  \r                   R
0017020    e   l   e   a   s   e   B   a   n   d   B   u   f   s   (   t
0017040    r   u   e   )  \r                   ]  \r   /   /       S   e
0017060    t   u   p   M   e   r   g   e   F   i   l   e   (   )        
0017100    B   a   n   d   F   i   n   a   l   (   p   a   g   e   ,    
0017120    l   a   s   t   )           B   a   n   d   E   n   d   (   )
0017140            A   d   d   B   a   n   d   B   u   f   (   )  \r   a
0017160    n   d       S   e   t   u   p   M   e   r   g   e   F   i   l
0017200    e   (   )       b   e       /   /       c   l   o   s   e    
0017220    m   a   i   n       B   a   n   d   W   i   n   d   o   w   ,
0017240        s   e   t       i   t       u   p       o   n       M   e
0017260    r   g   e   S   u   b   f   i   l   e   ,       p   o   s   i
0017300    t   i   o   n       a   p   p   r   o   p   r   i   a   t   e
0017320    l   y  \r                   [  \r                   l   e   t
0017340        t   1       =       B   a   n   d   F   i   l   e   >   >
0017360    S   P   r   u   c   e   F   i   l   e   .   l   n   P   a   g
0017400    e   S   i   z   e  \r                   i   f       B   a   n
0017420    d   S   e   g   m   e   n   t   s       e   q       0       t
0017440    h   e   n  \r  \t   [  \r  \t   b   a   n   d   O   u   t   P
0017460    o   s       =       t   a   b   l   e       [       0   ;    
0017500    0       ]  \r  \t   W   i   n   d   o   w   G   e   t   P   o
0017520    s   i   t   i   o   n   (   B   a   n   d   W   i   n   d   o
0017540    w   ,       b   a   n   d   O   u   t   P   o   s   )  \r  \t
0017560    l   e   t       t   2       =       B   a   n   d   B   u   f
0017600    S   i   z   e   T   o   t   a   l   +   n   V   i   s   i   b
0017620    l   e   B   a   n   d   s   +   2   5   0   0  \r  \t   t   1
0017640        =       (   t   2       r   s   h   i   f   t       (   t
0017660    1   -   l   n   M   a   x   M   e   r   g   e   I   n   p   u
0017700    t   s   )   )   +   n   M   a   x   M   e   r   g   e   I   n
0017720    p   u   t   s   -   1  \r  \t   l   e   t       n   u   m   P
0017740    a   g   e   s       =       B   a   n   d   F   i   l   e   >
0017760    >   S   P   r   u   c   e   F   i   l   e   .   n   u   m   P
0020000    a   g   e   s  \r  \t   l   e   t       r   e   m   P   a   g
0020020    e   s       =       n   u   m   P   a   g   e   s   -   B   a
0020040    n   d   W   i   n   d   o   w   >   >   S   S   .   s   p   r
0020060    u   c   e   P   a   g   e   >   >   S   P   r   u   c   e   P
0020100    a   g   e   .   p   a   g   e   N   u   m   b   e   r   -   1
0020120   \r  \t   t   1       =       M   i   n   (   t   1   ,       r
0020140    e   m   P   a   g   e   s   )  \r  \t   f   i   r   s   t   M
0020160    e   r   g   e   P   a   g   e       =       n   u   m   P   a
0020200    g   e   s   -   t   1  \r  \t   B   a   n   d   W   i   n   d
0020220    o   w   >   >   S   S   .   s   t   e   p   S   i   z   e    
0020240    =       n   M   a   x   M   e   r   g   e   I   n   p   u   t
0020260    s       /   /       i   n   t   e   r   l   a   c   e       a
0020300    l   l       i   n   t   p   u   t   s       t   o       m   e
0020320    r   g   e  \r  \t   ]  \r                   W   i   n   d   o
0020340    w   S   e   t   P   a   g   e   (   B   a   n   d   W   i   n
0020360    d   o   w   ,       f   i   r   s   t   M   e   r   g   e   P
0020400    a   g   e   +   B   a   n   d   S   e   g   m   e   n   t   s
0020420    )  \r                   B   a   n   d   S   e   g   m   e   n
0020440    t   s       =       B   a   n   d   S   e   g   m   e   n   t
0020460    s   +   1  \r                   i   f       B   a   n   d   S
0020500    e   g   m   e   n   t   s   >   n   M   a   x   M   e   r   g
0020520    e   I   n   p   u   t   s       t   h   e   n       S   p   r
0020540    u   c   e   C   o   n   d   i   t   i   o   n   (   9   0   0
0020560    ,       E   C   F   i   l   e   T   e   r   m   i   n   a   t
0020600    e   ,       p   a   r   t   N   u   m   b   e   r   )  \r    
0020620                ]  \r          \r   a   n   d       B   a   n   d
0020640    F   i   n   a   l   (   p   a   g   e   ,       l   a   s   t
0020660    )       b   e  \r   [  \r  \t   i   f       l   a   s   t    
0020700    t   h   e   n       f   o   r       i   =   1       t   o    
0020720    n   T   r   a   i   l   i   n   g   B   a   n   d   s       d
0020740    o       B   a   n   d   E   n   d   (   )  \r  \t   l   e   t
0020760        r   e   c   =   W   i   n   d   o   w   N   e   x   t   P
0021000    a   g   e   (   B   a   n   d   W   i   n   d   o   w   )  \r
0021020   \t   t   e   s   t       l   a   s   t       e   q       0    
0021040    t   h   e   n       p   a   g   e   >   >   P   a   g   e   G
0021060    .   b   a   n   d   P   o   s   =   r   e   c  \r  \t        
0021100        o   r       p   a   g   e   >   >   P   a   g   e   G   .
0021120    n   R   e   c   o   r   d   s   =   r   e   c   -   p   a   g
0021140    e   >   >   P   a   g   e   G   .   b   a   n   d   P   o   s
0021160   \r  \t   u   n   l   e   s   s       l   a   s   t       t   h
0021200    e   n       f   o   r       i   =   1       t   o       n   L
0021220    e   a   d   i   n   g   B   a   n   d   s       d   o       B
0021240    a   n   d   E   n   d   (   )  \r   ]  \r  \r   a   n   d    
0021260    B   a   n   d   E   n   d   (   )       b   e  \r  \t   f   o
0021300    r       i   =   0       t   o       1       d   o       W   i
0021320    n   d   o   w   W   r   i   t   e   (   B   a   n   d   W   i
0021340    n   d   o   w   ,       B   E   E   n   d   H   )  \r  \r   a
0021360    n   d       A   d   d   B   a   n   d   B   u   f   (   u   s
0021400    e   F   o   n   t   W   i   d   t   h   S   t   o   r   a   g
0021420    e   ;       n   u   m   a   r   g   s       n   a   )       =
0021440        v   a   l   o   f  \r  \t   [  \r  \t   i   f       n   a
0021460    <   1       t   h   e   n       u   s   e   F   o   n   t   W
0021500    i   d   t   h   S   t   o   r   a   g   e       =       N   o
0021520   \r  \t   u   n   l   e   s   s       e   m   e   r   g   e   n
0021540    c   y   S   t   o   r   a   g   e       r   e   s   u   l   t
0021560    i   s       f   a   l   s   e  \r  \t   l   e   t       b   b
0021600        =       F   S   G   e   t   (   B   a   n   d   B   u   f
0021620    S   i   z   e   )  \r  \t   i   f       n   o   t       b   b
0021640    &   u   s   e   F   o   n   t   W   i   d   t   h   S   t   o
0021660    r   a   g   e       t   h   e   n       [       F   S   G   e
0021700    t   R   e   l   e   a   s   e   (   0   )   ;       b   b    
0021720    =       F   S   G   e   t   (   B   a   n   d   B   u   f   S
0021740    i   z   e   )       ]  \r  \t   u   n   l   e   s   s       b
0021760    b       r   e   s   u   l   t   i   s       f   a   l   s   e
0022000   \r  \t   B   a   n   d   B   u   f   S   i   z   e   T   o   t
0022020    a   l       =       B   a   n   d   B   u   f   S   i   z   e
0022040    T   o   t   a   l   +   B   a   n   d   B   u   f   S   i   z
0022060    e  \r  \t   b   b   !   0       =       0  \r  \t   t   e   s
0022100    t       B   a   n   d   B   u   f       t   h   e   n       B
0022120    a   n   d   B   u   f   !   0       =       b   b       o   r
0022140        B   a   n   d   B   u   f   L   i   s   t       =       b
0022160    b  \r  \t   B   a   n   d   B   u   f       =       b   b  \r
0022200   \t   B   a   n   d   F   r   e   e   ,       B   a   n   d   A
0022220    v   a   i   l       =       B   a   n   d   B   u   f   +   2
0022240    ,       -   B   a   n   d   B   u   f   S   i   z   e   +   B
0022260    E   M   a   x   S   i   z   e   +   1  \r  \t   r   e   s   u
0022300    l   t   i   s       t   r   u   e  \r  \t   ]  \r  \r   a   n
0022320    d       R   e   l   e   a   s   e   B   a   n   d   B   u   f
0022340    s   (   r   e   I   n   i   t   i   a   l   i   z   e   )    
0022360    b   e  \r                   [  \r                   i   f    
0022400    B   a   n   d   T   a   b   l   e       t   h   e   n       Z
0022420    e   r   o   (   B   a   n   d   T   a   b   l   e   ,       n
0022440    V   i   s   i   b   l   e   B   a   n   d   s   )  \r        
0022460            l   e   t       n   e   x   t   B   u   f       =    
0022500    B   a   n   d   B   u   f   L   i   s   t  \r                
0022520    w   h   i   l   e       n   e   x   t   B   u   f       d   o
0022540   \r  \t   [       l   e   t       b   u   f       =       n   e
0022560    x   t   B   u   f   ;       n   e   x   t   B   u   f       =
0022600        @   n   e   x   t   B   u   f   ;       F   S   P   u   t
0022620    (   b   u   f   )       ]  \r                   B   a   n   d
0022640    B   u   f   L   i   s   t   ,       B   a   n   d   B   u   f
0022660    S   i   z   e   T   o   t   a   l   ,       B   a   n   d   B
0022700    u   f       =       0   ,       0   ,       0  \r            
0022720        E   m   e   r   g   e   n   c   y   O   v   e   r   (   )
0022740   \r                   i   f       r   e   I   n   i   t   i   a
0022760    l   i   z   e       t   h   e   n       A   d   d   B   a   n
0023000    d   B   u   f   (   )  \r                   ]  \r   /   /    
0023020    U   s   e   d       t   o       o   b   t   a   i   n       t
0023040    h   e   s   e       b   u   f   f   e   r   s       f   o   r
0023060        a   l   t   e   r   n   a   t   e       u   s   e   s    
0023100    d   u   r   i   n   g       m   e   r   g   i   n   g       a
0023120    n   d       f   o   n   t       c   o   p   y   i   n   g  \r
0023140   \r   a   n   d       F   l   u   s   h   B   u   f   f   e   r
0023160    s   (   g   e   t   A   n   o   t   h   e   r   )       b   e
0023200   \r  \t   [  \r  \t   i   f       B   a   n   d   B   u   f    
0023220    t   h   e   n       B   a   n   d   B   u   f   !   1       =
0023240        B   a   n   d   F   r   e   e   -   B   a   n   d   B   u
0023260    f   -   2  \r  \t   i   f       g   e   t   A   n   o   t   h
0023300    e   r   &   A   d   d   B   a   n   d   B   u   f   (   )    
0023320    r   e   t   u   r   n  \r  \t   l   e   t       n   e   x   t
0023340    B   u   f   ,       b   u   f       =       B   a   n   d   B
0023360    u   f   L   i   s   t   ,       n   i   l  \r  \t   w   h   i
0023400    l   e       n   e   x   t   B   u   f       d   o  \r  \t  \t
0023420    [  \r  \t  \t   b   u   f   ,       n   e   x   t   B   u   f
0023440        =       n   e   x   t   B   u   f   ,       @   n   e   x
0023460    t   B   u   f  \r  \t  \t   l   e   t       l   e   n       =
0023500        b   u   f   !   1  \r  \t  \t   i   f       l   e   n    
0023520    t   h   e   n       u   n   l   e   s   s       W   i   n   d
0023540    o   w   W   r   i   t   e   B   l   o   c   k   (   B   a   n
0023560    d   W   i   n   d   o   w   ,       b   u   f   +   2   ,    
0023600    l   e   n   )       e   q       l   e   n       d   o  \r  \t
0023620   \t  \t   P   u   t   E   o   f   E   r   r   o   r   (   B   a
0023640    n   d   W   i   n   d   o   w   )  \r  \t  \t   ]  \r  \t   R
0023660    e   l   e   a   s   e   B   a   n   d   B   u   f   s   (   g
0023700    e   t   A   n   o   t   h   e   r   )  \r  \t   ]  \r  \r   /
0023720    /       -   -   -   -   -   -   -   -   -   -   -   -   -   -
0023740    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0024000    -   -   -   -   -   -   -   -  \r   a   n   d       P   a   g
0024020    e   D   a   t   a   (   p   D   o   c   )       =       v   a
0024040    l   o   f       t   e   s   t       p   D   o   c       t   h
0024060    e   n       /   /       ~   ~       T   h   i   s       i   s
0024100        a   l   l       w   r   o   n   g   ,       g   i   v   e
0024120    n       c   p       e   x   i   s   t  \r   /   /       -   -
0024140    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0024220    -   -   -   -  \r   [  \r  \t   W   i   n   d   o   w   S   e
0024240    t   P   o   s   i   t   i   o   n   (   B   a   n   d   W   i
0024260    n   d   o   w   ,       D   P   z   e   r   o   )  \r  \t   W
0024300    i   n   d   o   w   W   r   i   t   e   B   l   o   c   k   (
0024320    B   a   n   d   W   i   n   d   o   w   ,       p   D   o   c
0024340    ,       s   i   z   e       D   o   c   G   /   1   6   )  \r
0024360   \t   W   i   n   d   o   w   W   r   i   t   e   B   l   o   c
0024400    k   (   B   a   n   d   W   i   n   d   o   w   ,       p   D
0024420    o   c   >   >   D   o   c   G   .   P   a   g   e   s   ,    
0024440    p   D   o   c   >   >   D   o   c   G   .   n   P   a   g   e
0024460    s   *   (   s   i   z   e       P   a   g   e   G   /   1   6
0024500    )   )  \r  \t   W   i   n   d   o   w   W   r   i   t   e   B
0024520    l   o   c   k   (   B   a   n   d   W   i   n   d   o   w   ,
0024540        p   D   o   c   >   >   D   o   c   G   .   F   o   n   t
0024560    s   ,       p   D   o   c   >   >   D   o   c   G   .   n   F
0024600    o   n   t   L   o   a   d   s   *   (   s   i   z   e       F
0024620    o   n   t   G   /   1   6   )   )  \r  \t   r   e   s   u   l
0024640    t   i   s       n   i   l  \r   ]  \r       o   r  \r   [  \r
0024660   \t   l   e   t       p   =   O   v   e   r   l   a   y   T   o
0024700    p  \r  \t   /   /       ~   ~       B   a   n   d   F   i   l
0024720    e       c   /   b       t   r   u   n   c   a   t   e   d   ,
0024740        o   r       r   e   p   l   a   c   e   d       b   y    
0024760    m   a   p       h   e   r   e  \r  \t   I   n   d   e   x   e
0025000    d   P   a   g   e   I   O   (   B   a   n   d   F   i   l   e
0025020    >   >   S   P   r   u   c   e   F   i   l   e   .   m   a   p
0025040    ,       1   ,       p   ,       4   ,       i   s   f   R   e
0025060    a   d   )  \r  \t   l   e   t       p   a   g   e   l   e   n
0025100    =   p   >   >   D   o   c   G   .   n   P   a   g   e   s   *
0025120    (   s   i   z   e       P   a   g   e   G   /   1   6   )  \r
0025140   \t   l   e   t       f   o   n   t   l   e   n   =   p   >   >
0025160    D   o   c   G   .   n   F   o   n   t   L   o   a   d   s   *
0025200    (   s   i   z   e       F   o   n   t   G   /   1   6   )  \r
0025220   \t   l   e   t       t   o   t   l   e   n   =   p   a   g   e
0025240    l   e   n   +   f   o   n   t   l   e   n   +   (   s   i   z
0025260    e       D   o   c   G   /   1   6   )  \r  \t   p   >   >   D
0025300    o   c   G   .   F   o   n   t   s   =   P   e   r   m   a   n
0025320    e   n   t   B   o   t   t   o   m   -   f   o   n   t   l   e
0025340    n  \r  \t   p   >   >   D   o   c   G   .   P   a   g   e   s
0025360    =   P   e   r   m   a   n   e   n   t   B   o   t   t   o   m
0025400    -   f   o   n   t   l   e   n   -   p   a   g   e   l   e   n
0025420   \r  \t   i   f       U   g   t   (   t   o   t   l   e   n   ,
0025440        4   *   2   5   6   )       t   h   e   n       S   p   r
0025460    u   c   e   E   r   r   o   r   (   1   0   0   )  \r  \t   P
0025500    e   r   m   a   n   e   n   t   B   o   t   t   o   m   =   P
0025520    e   r   m   a   n   e   n   t   B   o   t   t   o   m   -   t
0025540    o   t   l   e   n  \r  \t   M   o   v   e   B   l   o   c   k
0025560    (   P   e   r   m   a   n   e   n   t   B   o   t   t   o   m
0025600    ,       p   ,       t   o   t   l   e   n   )  \r  \t   r   e
0025620    s   u   l   t   i   s       P   e   r   m   a   n   e   n   t
0025640    B   o   t   t   o   m  \r   ]  \r   /   /       -   -   -   -
0025660    -   -   -       H   i   s   t   o   r   y       .       .    
0025700    .  \r  \r   /   /       D   C   S   ,       J   u   l   y    
0025720    2   7   ,       1   9   7   7           1   1   :   1   1    
0025740    P   M   ,       m   i   n   o   r       (   W   i   n   d   o
0025760    w       s   t   r   e   a   m   )       r   e   v   i   s   i
0026000    o   n   s  \r   /   /       A   u   g   u   s   t       4   ,
0026020        1   9   7   7           1   0   :   1   8       P   M   ,
0026040        r   e   m   o   v   e       u   n   u   s   e   d       5
0026060    0   0       w   o   r   d       v   e   c   t   o   r  \r   /
0026100    /       S   e   p   t   e   m   b   e   r       2   6   ,    
0026120    1   9   7   7           8   :   5   9       A   M   ,       h
0026140    a   n   d   l   e       "   o   n   l   y       o   n       c
0026160    o   p   y   "  \r   /   /       S   e   p   t   e   m   b   e
0026200    r       2   7   ,       1   9   7   7           1   0   :   3
0026220    8       A   M   ,       "   o   n   l   y       o   n       c
0026240    o   p   y   "       w   h   e   n       m   e   r   g   e   s
0026260        r   e   q   u   i   r   e   d  \r   /   /       S   e   p
0026300    t   e   m   b   e   r       2   8   ,       1   9   7   7    
0026320        1   0   :   1   4       A   M   ,       s   p   e   e   d
0026340        u   p       b   a   n   d       f   l   u   s   h  \r   /
0026360    /       O   c   t   o   b   e   r       9   ,       1   9   7
0026400    7           3   :   4   7       P   M   ,       r   e   p   a
0026420    i   r       m   a   n   y       B   r   a   n   c   h       r
0026440    e   l   o   c   .       p   r   o   b   l   e   m   s  \r   /
0026460    /       J   a   n   u   a   r   y       2   3   ,       1   9
0026500    7   8           9   :   5   3       A   M   ,       m   o   v
0026520    e       P   a   g   e   D   a   t   a       h   e   r   e   ,
0026540        a   t       l   e   a   s   t       f   o   r       t   h
0026560    e       p   r   e   s   e   n   t  \r   /   /       M   a   r
0026600    c   h       1   1   ,       1   9   7   8           1   :   5
0026620    1       P   M   ,       d   i   m   i   n   i   s   h       l
0026640    i   k   e   l   i   h   o   o   d       o   f       s   t   o
0026660    r   a   g   e       b   o   m   b   i   n   g  \r   /   /    
0026700    O   c   t   o   b   e   r       5   ,       1   9   7   8    
0026720        9   :   2   7       P   M   ,       m   a   k   e       w
0026740    i   n   V   e   c       s   t   a   t   i   c       f   o   r
0026760        e   x   t   e   r   n   a   l       m   o   n   i   t   o
0027000    r   i   n   g  \r   /   /       O   c   t   o   b   e   r    
0027020    1   5   ,       1   9   7   8           3   :   3   0       P
0027040    M   ,       m   o   d   i   f   y       b   u   f   f   e   r
0027060    i   n   g       f   o   r       f   a   s   t       f   i   l
0027100    e   s  \r   /   /       O   c   t   o   b   e   r       2   3
0027120    ,       1   9   7   8           1   2   :   0   4       P   M
0027140    ,       u   s   e       m   i   c   r   o   c   o   d   e    
0027160    (   v   i   a       a   s   m       c   o   d   e       i   n
0027200        S   p   r   u   c   e   B   a   n   d   M   l   )       f
0027220    o   r       b   u   f   f   e   r       f   l   u   s   h   i
0027240    n   g  \r   /   /       O   c   t   o   b   e   r       2   4
0027260    ,       1   9   7   8           8   :   0   4       A   M   ,
0027300        r   e   m   o   v   e       l   i   n   k   a   g   e    
0027320    m   e   t   h   o   d       f   o   r       o   n   l   y   -
0027340    o   n   -   c   o   p   y       b   r   a   n   c   h   i   n
0027360    g       -   -       u   s   e       C   o   p   y   T   a   b
0027400    l   e  \r   /   /       O   c   t   o   b   e   r       2   5
0027420    ,       1   9   7   8           7   :   3   3       A   M   ,
0027440        v   a   s   t   l   y       s   i   m   p   l   i   f   y
0027460        a   n   d       e   n   h   a   n   c   e       m   e   r
0027500    g   e       l   o   o   p       -   -       i   n   t   e   r
0027520    l   a   c   e   d       s   t   r   e   a   m   s  \r   /   /
0027540        O   c   t   o   b   e   r       2   6   ,       1   9   7
0027560    8           1   0   :   4   2       P   M   ,       c   a   c
0027600    h   e       m   e   r   g   e       i   n   p   u   t       i
0027620    n       l   a   r   g   e       b   u   f   f   e   r   s   ,
0027640        c   o   d   e       s   h   a   r   e   d       w   i   t
0027660    h       F   o   n   t   M   a   k   e  \r   /   /       N   o
0027700    v   e   m   b   e   r       3   ,       1   9   7   8        
0027720    1   0   :   3   2       A   M   ,       i   s   s   u   e    
0027740    e   n   d   -   o   f   -   b   a   n   d       e   n   t   r
0027760    y       o   n   l   y       a   f   t   e   r       a   l   l
0030000        s   e   g   m   e   n   t   s       m   e   r   g   e   d
0030020   \r   /   /       N   o   v   e   m   b   e   r       4   ,    
0030040    1   9   7   8           1   2   :   2   8       A   M   ,    
0030060    t   o   s   s       o   u   t       f   o   n   t   s       w
0030100    h   e   n       e   n   t   e   r   i   n   g       m   e   r
0030120    g   e       m   o   d   e   ,       t   o       m   i   n   i
0030140    m   i   z   e       m   e   r   g   e   s  \r   /   /       N
0030160    o   v   e   m   b   e   r       2   0   ,       1   9   7   8
0030200            7   :   0   6       A   M   ,       F   l   u   s   h
0030220    M   e   r   g   e   B   u   f   f   e   r   s       m   u   s
0030240    t       a   v   o   i   d       d   e   s   t   r   o   y   i
0030260    n   g       o   d   d       p   a   g   e       s   u   c   c
0030300    e   s   s   i   o   n       f   o   r  \r   /   /  \t   m   e
0030320    r   g   e       s   t   r   e   a   m   s  \r   /   /  \0  \0
0030340  032   (   6   3   5   )   \   5   2   9   2   v   1   1   V  \r
0030360