$ od -c -N 50000 [_CD6_]<sil>ANALYZESOURCES.DM!1
0000000  377  \0  \0   a   n   a   .   d   e   f   s  \0 376 001  \0 351
0000020  026   /   /   a   n   a   .   d   e   f   s               d   e
0000040    f   i   n   i   t   i   o   n   s       f   o   r       a   n
0000060    a   l   y   z   e  \r  \r   /   /       l   a   s   t       m
0000100    o   d   i   f   i   e   d       b   y       E   .       M   c
0000120    C   r   e   i   g   h   t   ,       N   o   v   e   m   b   e
0000140    r       1   5   ,       1   9   7   7           4   :   0   1
0000160        P   M  \r  \r   m   a   n   i   f   e   s   t  \r   [  \r
0000200    B   l   a   c   k   =   0   ;       R   e   d   =   1   ;    
0000220    Y   e   l   l   o   w   =   2   ;       G   r   e   e   n   =
0000240    3   ;       C   y   a   n   =   4   ;       V   i   o   l   e
0000260    t   =   5   ;       M   a   g   e   n   t   a   =   6   ;    
0000300    W   h   i   t   e   =   7  \r   B   r   o   w   n   =   #   1
0000320    0   ;       O   r   a   n   g   e   =   #   1   1   ;       L
0000340    i   m   e   =   #   1   2   ;       T   u   r   q   u   o   i
0000360    s   e   =   #   1   3   ;       A   q   u   a   =   #   1   4
0000400    ;       U   l   t   r   a   V   i   o   l   e   t   =   #   1
0000420    5 376 001  \0   2   5   ;       P   i   n   k   =   #   1   6
0000440    ;       S   m   o   k   e   =   #   1   7  \r   h   t   s   i
0000460    z   e       =       6   4  \r   N   M   f   o   n   t   s    
0000500    =       6       /   /   n   u   m   b   e   r       o   f    
0000520    m   a   c   r   o       f   o   n   t   s       (   4   -   9
0000540    )  \r   M   t   s   i   z   e       =       N   M   f   o   n
0000560    t   s   *   1   2   8       /   /   m   a   c   r   o       t
0000600    a   b   l   e       s   i   z   e  \r   D   i   r   P   r   e
0000620    a   m   b   l   e   S   i   z   e   =   6  \r   k   s   T   y
0000640    p   e   R   e   a   d   O   n   l   y   =   1  \r   k   s   T
0000660    y   p   e   W   r   i   t   e   O   n   l   y   =   2  \r   k
0000700    s   T   y   p   e   R   e   a   d   W   r   i   t   e   =   3
0000720   \r   v   e   r   L   a   t   e   s   t   C   r   e   a   t   e
0000740    =   #   4   0   0   0   0   +   2  \r  \r   /   /   c   o   n
0000760    n   e   c   t   i   o   n       p   o   i   n   t       c   h
0001000    a   r   a   c   t   e   r   s       (   f   o   n   t       3
0001020    )  \r   c   h   T   c 376 001  \0 017 205   o   n       =    
0001040    $   Q  \r   c   h   B   c   o   n       =       $   S  \r   c
0001060    h   L   c   o   n       =       $   R  \r   c   h   R   c   o
0001100    n       =       $   T  \r  \r   /   /   s   p   e   c   i   a
0001120    l       c   h   a   r   a   c   t   e   r   s       f   o   r
0001140        s   i   n   g   l   e   -   c   h   a   r   a   c   t   e
0001160    r       s   y   m   b   o   l   s       (   f   o   n   t    
0001200    3   )  \r   c   h   E   p   i   n       =       $   P  \r   c
0001220    h   C   p   i   n       =       $   p  \r   c   h   G   n   d
0001240        =       $   n  \r   c   h   P   s   e   u   d       =    
0001260    $   x  \r   c   h   B   l   o   b       =       $   .  \r  \r
0001300    /   /   s   y   m   b   o   l       t   y   p   e   s  \r   s
0001320    t   C   o   m   p       =       1           /   /   u   s   e
0001340    d       f   o   r       c   o   m   p   o   n   e   n   t    
0001360    n   a   m   e       i   n       p   i   c   t   u   r   e  \r
0001400    s   t   P   i   n       =       2  \r   s   t   S   i   g    
0001420    =       3  \r   s   t   R   c   o   m   p 376 001  \0 274   K
0001440    =       4       /   /   u   s   e   d       f   o   r       r
0001460    e   a   l       c   o   m   p   o   n   e   n   t       n   a
0001500    m   e  \r   s   t   B   r   d   l   o   c       =       5  \r
0001520   \r   ]  \r  \r   e   x   t   e   r   n   a   l       /   /   s
0001540    t   a   t   i   c   s  \r   [  \r  \r   /   /   l   i   s   t
0001560        h   e   a   d   e   r   s  \r   @   C   o   m   p   s  \r
0001600    @   V   l   i   n   e   s  \r   @   H   l   i   n   e   s  \r
0001620    @   S   t   r   i   n   g   s  \r   @   N   u   m   b   e   r
0001640    s  \r   @   L   o   c   g   r   o   u   p   s  \r   @   S   c
0001660    h   a   r   s  \r   @   B   a   d   I   t   e   m   s  \r  \r
0001700    /   /   S   p   e   c   i   a   l       s   y   m   b   o   l
0001720        t   a   b   l   e       p   o   i   n   t   e   r   s  \r
0001740    @   I   n   s   t   p  \r   @   O   u   t   s   t   p  \r   @
0001760    G   n   d   s   t   p  \r   @   P   s   e   u   d   s   t   p
0002000   \r  \r   @   p   s   f   i   l   e  \r   @   p   a   g   e  \r
0002020    @   p   r   e   s   c   a   n  \r   @   d   e   b   u   g   s
0002040  376 001  \0 317   *   w   i   t   c   h  \r   @   h   a   s   h
0002060    t   a   b  \r   @   E   r   F   i   l   e  \r   @   O   u   t
0002100    F   i   l   e  \r   @   F   i   l   e   N   a   m   e  \r  \r
0002120    @   G   e   n   N   a   m   e   S   t   r   i   n   g  \r   @
0002140    G   e   n   N   a   m   e   C   o   u   n   t  \r  \r   @   L
0002160    p   r   v   e   c           /   /   v   e   c   t   o   r    
0002200    o   f       l   i   b   r   a   r   y       f   i   l   e    
0002220    p   o   i   n   t   e   r   s  \r   @   D   p   r   v   e   c
0002240            /   /   v   e   c   t   o   r       o   f       d   i
0002260    c   t   i   o   n   a   r   y       f   i   l   e       p   o
0002300    i   n   t   e   r   s  \r   @   f   p   D   i   c   t        
0002320        /   /   f   i   l   e       p   o   i   n   t   e   r    
0002340    o   f       c   u   r   r   e   n   t       (   s   u   p   p
0002360    o   s   e   d   l   y       o   p   e   n   )       d   i   c
0002400    t   i   o   n   a   r   y       f   i   l   e  \r   @   d   i
0002420    c   t      \t   /   /   d   i   c   t   i   o   n   a   r   y
0002440        s   t   r   e 376 001  \0   *   i   a   m  \r   @   S   i
0002460    l   Z   o   n   e  \r   @   M   a   c   t  \r   @   N   e   w
0002500    I   t   e   m  \r   @   S   p   a   c   e  \t   /   /   s   i
0002520    z   e       o   f       o   b   j   e   c   t       s   p   a
0002540    c   e  \r   @   S   p   a   c   e   B   a   s   e       /   /
0002560    b   a   s   e       o   f       s   p   a   c   e  \r   @   S
0002600    p   a   c   e   T   o   p  \r   @   M   e   s   s   a   g   e
0002620   \r  \r   @   w   o   r   s   t   E   r   r   o   r   L   e   v
0002640    e   l  \r   ]  \r  \r   m   a   n   i   f   e   s   t       /
0002660    /       e   r   r   o   r       l   e   v   e   l   s  \r   [
0002700   \r   n   o   E   r   r   o   r       =       0  \r   w   a   r
0002720    n   i   n   g       =       1  \r   s   e   r   i   o   u   s
0002740        =       2  \r   d   i   s   a   s   t   e   r       =    
0002760    3  \r   ]  \r  \r   e   x   t   e   r   n   a   l       /   /
0003000    a   n   a       p   r   o   c   e   d   u   r   e   s  \r   [
0003020   \r   O   u   t   S   y   m   b   o   l   s  \r   P   r   e   S
0003040    c   a   n   O   u   t  \r   P   i   n 376 001  \0 320   P   C
0003060    h   e   c   k  \r   F   l   u   s   h   L   i   n   e  \r   D
0003100    e   f   a   u   l   t   T   y   p   e   N   a   m   e   s  \r
0003120    D   o   O   u   t   p   u   t  \r   C   o   n   n   e   c   t
0003140    V   l   i   n   e   s  \r   C   o   n   n   e   c   t   H   l
0003160    i   n   e   s  \r   F   i   x   O   v   e   r   l   a   p  \r
0003200    D   o   S   c   h   a   r   s  \r   D   o   C   o   m   p   o
0003220    n   e   n   t   s  \r   D   o   S   i   g   n   a   m   e   s
0003240   \r   A   d   d   C   o   m   p   s  \r   G   e   t   C   o   m
0003260    p   N   a   m   e   s  \r   P   r   i   n   t   S   t   r   u
0003300    c   t   s  \r   C   h   e   c   k   F   i   t  \r   E   r   r
0003320    2  \r   E   r   r   x   y  \r   E   r   r  \r   G   e   t   F
0003340    i   l   e  \r   M   a   k   e   F   i   l   e   N   a   m   e
0003360   \r   D   e   f   i   n   e   S   y   m   b   o   l  \r   L   o
0003400    o   k   u   p  \r   A   p   p   e   n   d   B  \r   S   t   E
0003420    q  \r  \r   D   o   c   o   m   p   o   n   e   n   t  \r   D
0003440    o   u   s   e   r   m   a   c   r   o  \r   D   o   r   e 376
0003460  001  \0 265 312   c   t   a   n   g   l   e  \r   D   o   f   o
0003500    n   t   3   s   t   r   i   n   g  \r   D   o   f   o   n   t
0003520    1   s   t   r   i   n   g  \r   A   d   d   B   a   d   I   t
0003540    e   m  \r   F   i   n   d   D   i   c   t   L   i   b   r   a
0003560    r   i   e   s  \r   L   i   b   U   p   d   a   t   e  \r   P
0003600    a   r   s   e   T   i   t   l   e  \r  \r   /   /   N   S   i
0003620    l   U   t   i   l  \r   A   d   d   T   o   L   i   s   t    
0003640   \r   L   e   n   g   t   h  \r   A   p   p   e   n   d   S  \r
0003660    A   p   p   e   n   d   N  \r   A   p   p   e   n   d   C  \r
0003700    ]  \r  \r  \r  \r   e   x   t   e   r   n   a   l  \t  \t   /
0003720    /   O   .   S   .       p   r   o   c   e   d   u   r   e   s
0003740        a   n   d       s   t   a   t   i   c   s  \r   [  \r   R
0003760    e   s   e   t   s  \r   O   p   e   n   F   i   l   e   F   r
0004000    o   m   F   p  \r   G   e   t   C   o   m   p   l   e   t   e
0004020    F   a  \r   J   u   m   p   T   o   F   a  \r   f   p   U   s
0004040    e   r   C   m  \r   f   p   S   y   s   D   i   r  \r   f   p
0004060    C   o   m   C 376 001  \0 337   +   m  \r   f   p   R   e   m
0004100    C   m  \r   U   s   c  \r   I   n   i   t   i   a   l   i   z
0004120    e   Z   o   n   e  \r   O   p   e   n   F   i   l   e  \r   D
0004140    e   l   e   t   e   F   i   l   e  \r   F   i   l   e   P   o
0004160    s  \r   P   u   t   s  \r   W   s   s  \r   C   l   o   s   e
0004200    s  \r   M   o   v   e   B   l   o   c   k  \r   G   e   t   s
0004220   \r   Z   e   r   o  \r   S   e   t   B   l   o   c   k  \r   C
0004240    a   l   l   S   w   a   t  \r   E   n   d   o   f   s  \r   k
0004260    e   y   s  \r   A   l   l   o   c   a   t   e  \r   F   r   e
0004300    e  \r   J   u   n   t   a  \r   C   o   u   n   t   e   r   J
0004320    u   n   t   a  \r   R   e   a   d   U   s   e   r   C   m   I
0004340    t   e   m       /   /   P   .       D   e   u   t   s   c   h
0004360        p   a   c   k   a   g   e       f   r   o   m       <   a
0004400    l   t   o   >  \r   L   o   o   k   U   p   E   n   t   r   i
0004420    e   s       /   /   f   r   o   m       M   D   I  \r   T   r
0004440    u   n   c   a   t   e   D   i   s   k   S   t   r   e   a   m
0004460   \r   ]  \r  \r  \r   s   t   r   u 376 001  \0 265 223   c   t
0004500    u   r   e       s   t   r   :  \r   [ 032   (   6   3   5   )
0004520   \r   l   e   n   g   t   h       b   y   t   e  \r   c   h   a
0004540    r   ^   1   ,   2   5   5       b   y   t   e 032   l   4   2
0004560    6   8  \r   ]  \r  \r   s   t   r   u   c   t   u   r   e    
0004600    b   y   t   e   s   :  \r   [ 032  \r   b   i   t   e   ^   0
0004620    ,   2   5   6  \t   b   y   t   e 032   l   4   2   6   8  \r
0004640    ]  \r  \r   s   t   r   u   c   t   u   r   e       s   t   r
0004660    e   c   :  \r   [ 032  \r   l   i   n   k       w   o   r   d
0004700   \r   t   y   p   e       b   y   t   e   ;       p   i   n   s
0004720    d   n       b   i   t   ;       u   c   n   t       b   i   t
0004740        7  \r   r   n   a   m   e       w   o   r   d       /   /
0004760    r   e   a   l       n   a   m   e       f   o   r       c   o
0005000    m   p   o   n   e   n   t  \r   s   t       @   s   t   r 032
0005020    l   4   2   6   8  \r   ]  \r  \r   s   t   r   u   c   t   u
0005040    r   e       i   t   e   m   :  \r   [ 032  \r   l   i   n   k
0005060        w   o   r   d  \r   s   t   a   t   e       b   i 376 001
0005100   \0 345 207   t       3   ;       x   m   i   n       b   i   t
0005120        1   3  \r   y   m   i   n       w   o   r   d  \r   c   o
0005140    l   o   r       b   i   t       4   ;           x   m   a   x
0005160        b   i   t       1   2  \r   [       f   o   n   t       b
0005200    i   t       4   ;       b   l   a   n   k       b   i   t    
0005220    1   ;       y   m   a   x       b   i   t       1   1       ]
0005240   \r  \t   =   [  \r  \t   f   u   l   l   f   o   n   t       b
0005260    i   t       5  \r  \t   =   [       t   x   t   f   o   n   t
0005300        b   i   t       3   ;       b   o   l   d       b   i   t
0005320    ;       i   t   a   l   i   c       b   i   t       ]  \r  \t
0005340    b   l   a   n   k       b   i   t       1   1  \r  \t   ]  \r
0005360    s   t   r   i   n   g   :       @   s   t   r 032   l   4   2
0005400    6   8  \r   ]  \r  \r  \r   s   t   r   u   c   t   u   r   e
0005420        c   o   m   p   :       /   /   c   o   m   p   o   n   e
0005440    n   t   s  \r   [ 032  \r   l   i   n   k       w   o   r   d
0005460   \r   t   y   p   e       b   i   t       3   ;       x   m   i
0005500    n       b 376 001  \0 275 315   i   t       1   3  \r   y   m
0005520    i   n       w   o   r   d  \r   c   o   l   o   r       b   i
0005540    t       4   ;           x   m   a   x       b   i   t       1
0005560    2  \r   y   m   a   x       w   o   r   d  \r   p   i   n   s
0005600    d   o   n   e       b   i   t       4   ;           b   l   o
0005620    u   t       b   i   t   ;       m   i   n   d   e   x       b
0005640    i   t       1   1       /   /   =       (   f   o   n   t   -
0005660    8   )   *   1   2   8       +       c   h   a   r  \r  \r   c
0005700    o   n   p   o   i   n   t   s       w   o   r   d       /   /
0005720    p   o   i   n   t   e   r       t   o       c   o   n   n   e
0005740    c   t   i   o   n       p   o   i   n   t       b   l   o   c
0005760    k 032   l   4   2   6   8  \r   ]  \r  \r   s   t   r   u   c
0006000    t   u   r   e       c   o   n   p   o   i   n   t   :  \r   [
0006020  032  \r   p   i   n       b   i   t       6       /   /   p   i
0006040    n       n   u   m   b   e   r       f   o   r       t   h   i
0006060    s       p   i   n  \r   x       b   i   t       1   0  \r  \r
0006100    m   a   r   k   e   d       b 376 001  \0   K   [   i   t    
0006120    1       /   /   e   n   c   o   u   n   t   e   r   e   d    
0006140    i   n       t   r   a   c   e  \r   d   e   f   d       b   i
0006160    t       1       /   /   p   i   n       n   u   m   b   e   r
0006200        i   s       d   e   f   i   n   e   d       i   n       d
0006220    r   a   w   i   n   g  \r   c   p   t       b   i   t       3
0006240   \r   b   l   o   b       b   i   t       1       /   /   i   n
0006260    d   i   c   a   t   e   s       t   h   i   s       c   o   n
0006300    p   o   i   n   t       h   a   s       a       b   l   o   b
0006320   \r   /   /   (   d   o   n   '   t       w   o   r   r   y    
0006340    t   h   a   t       i   t   '   s       n   o   t       c   o
0006360    n   n   e   c   t   e   d       t   o       a   n   y   t   h
0006400    i   n   g  \r  \r   y       b   i   t       1   0  \r  \r   p
0006420    i   n   n   a   m   e       w   o   r   d       /   /   s   t
0006440    p       f   o   r       n   a   m   e  \r   c   o   n   n    
0006460    w   o   r   d       /   /   p   o   i   n   t   e   r       t
0006500    o       c   o   n   n   e   c   t   e   d       o 376 001  \0
0006520  226 320   b   j   e   c   t 032   l   4   2   6   8  \r   ]  \r
0006540    m   a   n   i   f   e   s   t       /   /   c   o   n   n   e
0006560    c   t   i   o   n       p   o   i   n   t       t   y   p   e
0006600    s  \r   [  \r   c   p   t   T   o   p       =       1  \r   c
0006620    p   t   B   o   t       =       2  \r   c   p   t   L   e   f
0006640    t       =       3  \r   c   p   t   R   i   g   h   t       =
0006660        4  \r   ]  \r  \r   s   t   r   u   c   t   u   r   e    
0006700    c   o   m   p   b   l   o   c   k   :  \r   [ 032  \r   c   o
0006720    m   p   t   y   p   e       w   o   r   d       /   /   s   y
0006740    m   b   o   l       t   a   b   l   e       p   o   i   n   t
0006760    e   r   ,       N   O   T       p   o   i   n   t   e   r    
0007000    t   o       n   o   d   e  \r  \r   b   o   a   r   d   l   o
0007020    c       w   o   r   d       /   /       s   y   m   b   o   l
0007040        t   a   b   l   e       p   o   i   n   t   e   r  \r   n
0007060    u   m   c   p   o   i   n   t   s       b   i   t       6  \r
0007100    g   r   o   u   p       b   i   t       1   0  \r  \r   @   c
0007120    o   n 376 001  \0 344   6   p   o   i   n   t   ^   1   ,   6
0007140    4 032   l   4   2   6   8  \r   ]  \r  \r  \r   s   t   r   u
0007160    c   t   u   r   e       l   e   n   d   :       /   /   l   i
0007200    n   e       e   n   d   p   o   i   n   t   s  \r   [ 032  \r
0007220    l   i   n   k       w   o   r   d  \r  \r   t   y   p   e    
0007240    b   i   t       3  \r   h   a   s   s   i   g       b   i   t
0007260        1       /   /   t   h   i   s       l   i   n   e       h
0007300    a   s       a       s   i   g   n   a   l       n   a   m   e
0007320        a   s   s   o   c   i   a   t   e   d  \r   x       b   i
0007340    t       1   2  \r  \r   m   a   r   k   e   d       b   i   t
0007360   \r   y       b   i   t       1   5  \r  \r   c   p   ^   0   ,
0007400    2       w   o   r   d       /   /   p   o   i   n   t   e   r
0007420    s       t   o       t   h   i   n   g   s       c   o   n   n
0007440    e   c   t   e   d       t   o       t   h   i   s       e   n
0007460    d   p   o   i   n   t  \r 032   l   4   2   6   8  \r   ]  \r
0007500   \r   s   t   r   u   c   t   u   r   e       n   o   d   e   :
0007520        /   /   u   s   e   d 376 001  \0 347 227       f   o   r
0007540        s   t   r   i   n   g   s   ,       n   u   m   b   e   r
0007560    s   ,       l   o   c   g   r   o   u   p   s   ,   a   n   d
0007600        s   c   h   a   r   s  \r   [ 032  \r   l   i   n   k    
0007620    w   o   r   d      \r   t   y   p   e       b   i   t       3
0007640   \r   x       b   i   t       1   3       /   /   c   o   o   r
0007660    d   i   n   a   t   e   s       o   f       t   h   e       c
0007700    e   n   t   e   r       o   f       t   h   e       o   b   j
0007720    e   c   t  \r   a   s   s   o   c       w   o   r   d       /
0007740    /   p   o   i   n   t   e   r       t   o       a   s   s   o
0007760    c   i   a   t   e   d       o   b   j   e   c   t  \r   u   s
0010000    e   d       b   i   t  \r   y       b   i   t       1   5  \r
0010020    v   a   l       w   o   r   d       /   /       w   h   e   n
0010040        u   s   e   d       f   o   r       s   t   r   i   n   g
0010060    s   (   v   a   l       i   s       a   n       s   t   p   )
0010100    ,   n   u   m   b   e   r   s   ,       a   n   d       s   c
0010120    h   a   r   s  \r       =   b   l   o   c     376 001  \0 264
0010140  266   w   o   r   d       /   /       p   o   i   n   t   s    
0010160    t   o       s   y   m   b   o   l       t   a   b   l   e 032
0010200    l   4   2   6   8  \r   v   a   l   2       w   o   r   d    
0010220    =       g   r   o   u   p       w   o   r   d 032   l   4   2
0010240    6   8  \r   ]  \r  \r  \r   m   a   n   i   f   e   s   t  \r
0010260    [ 032  \r   /   /   b   l   o   c   k       t   y   p   e   s
0010300   \r   b   t   C   o   m   p       =       1  \r   b   t   L   e
0010320    n   d       =       2  \r   b   t   S   t   r   i   n   g    
0010340    =       3  \r   b   t   N   u   m       =       4  \r   b   t
0010360    L   o   c   g   r   o   u   p   s       =       5  \r   b   t
0010400    S   c   h   a   r       =       6      \r  \r   /   /   b   l
0010420    o   c   k   l   e   n   g   t   h   s  \r   b   l   C   o   m
0010440    p       =       (   s   i   z   e       c   o   m   p   )   /
0010460    1   6  \r   b   l   L   e   n   d       =       (   s   i   z
0010500    e       l   e   n   d   )   /   1   6  \r   b   l   B   a   s
0010520    i   c   N   o   d   e       =       (   o   f   f   s   e   t
0010540      376  \0 213 254 356   n   o   d   e   .   v   a   l   2   )
0010560    /   1   6  \r   b   l   F   u   l   l   N   o   d   e       =
0010600        (   s   i   z   e       n   o   d   e   )   /   1   6  \r
0010620    b   l   S   t   r   i   n   g       =       b   l   B   a   s
0010640    i   c   N   o   d   e  \r   b   l   N   u   m       =       b
0010660    l   B   a   s   i   c   N   o   d   e  \r   b   l   S   c   h
0010700    a   r       =       b   l   B   a   s   i   c   N   o   d   e
0010720   \r   b   l   L   o   c   g   r   o   u   p   s       =       b
0010740    l   F   u   l   l   N   o   d   e  \r   ]  \r     032  \r 032
0010760   \r 377  \0  \0   a   n   a   .   b   c   p   l  \0 376 001  \0
0011000  024   E   /   /   a   n   a   .   b   c   p   l  \r   /   /   n
0011020    e   w       a   n   a   l   y   z   e   r       f   o   r    
0011040    s   i   l       f   i   l   e   s  \r  \r   /   /       l   a
0011060    s   t       m   o   d   i   f   i   e   d       b   y       E
0011100    .       M   c   C   r   e   i   g   h   t   ,       N   o   v
0011120    e   m   b   e   r       2   3   ,       1   9   7   7        
0011140    9   :   3   6       A   M  \r  \r   g   e   t       "   s   y
0011160    s   d   e   f   s   .   d   "  \r   g   e   t       "   a   n
0011200    a   .   d   e   f   s   "  \r  \r   s   t   a   t   i   c  \r
0011220    [  \r  \r   C   o   l   o   r   C   o   u   n   t  \r   /   /
0011240    l   i   s   t       h   e   a   d   e   r   s  \r   C   o   m
0011260    p   s       =       0   ;       V   l   i   n   e   s       =
0011300        0   ;       H   l   i   n   e   s       =       0   ;    
0011320    S   t   r   i   n   g   s       =       0   ;       N   u   m
0011340    b   e   r   s       =       0   ;       L   o   c   g   r   o
0011360    u   p   s       =       0   ;       S   c   h   a   r   s    
0011400    =     376 001  \0 350 251   0  \r   B   a   d   I   t   e   m
0011420    s       =       0  \r  \r   /   /   S   p   e   c   i   a   l
0011440        s   y   m   b   o   l       t   a   b   l   e       p   o
0011460    i   n   t   e   r   s  \r   I   n   s   t   p   ;       O   u
0011500    t   s   t   p   ;       G   n   d   s   t   p   ;       P   s
0011520    e   u   d   s   t   p  \r  \r   p   a   g   e       =       0
0011540    ;       l   a   s   t   T   i   t   l   e   P   a   g   e   =
0011560    -   1  \r   O   u   t   F   i   l   e   =   0   ;       E   r
0011600    F   i   l   e       =       0   ;       F   i   l   e   N   a
0011620    m   e   ;       w   o   r   s   t   E   r   r   o   r   L   e
0011640    v   e   l       =       n   o   E   r   r   o   r   ;       p
0011660    r   e   s   c   a   n       =       f   a   l   s   e   ;    
0011700    p   s   f   i   l   e  \r  \r   G   e   n   N   a   m   e   S
0011720    t   r   i   n   g   ;       G   e   n   N   a   m   e   C   o
0011740    u   n   t  \r  \r   L   p   r   v   e   c   ;       D   p   r
0011760    v   e   c   ;       f   p   D   i   c   t   =   0   ;       d
0012000    i   c   t       =       0 376 001  \0 327 374  \r   S   i   l
0012020    Z   o   n   e   ;       M   a   c   t   ;       h   a   s   h
0012040    t   a   b   ;       N   e   w   I   t   e   m  \r   S   p   a
0012060    c   e  \t   /   /   s   i   z   e       o   f       o   b   j
0012100    e   c   t       s   p   a   c   e  \r   S   p   a   c   e   B
0012120    a   s   e       /   /   b   a   s   e       o   f       s   p
0012140    a   c   e  \r   S   p   a   c   e   T   o   p   ;       M   e
0012160    s   s   a   g   e       =       0  \r   d   e   b   u   g   s
0012200    w   i   t   c   h       =       f   a   l   s   e  \r   ]  \r
0012220   \r   e   x   t   e   r   n   a   l  \r   [  \r   L   o   a   d
0012240    R   a   m   ;       I   n   i   t   B   c   p   l   R   u   n
0012260    t   i   m   e   ;       R   a   m   I   m   a   g   e  \r   W
0012300    s   ;       W   n   s   ;       d   s   p  \r   I   n   i   t
0012320    C   u   r   s   o   r   ;       W   r   i   t   e   C   u   r
0012340    s   o   r 032   (   6   3   5   )  \r   ]  \r  \r   l   e   t
0012360        M   a   i   n   (   )       b   e  \r   [ 032  \r   @   #
0012400    4   2   0       =       0       /   /   t   u 376 001  \0   }
0012420  253   r   n       o   f   f       d   i   s   p   l   a   y    
0012440    f   o   r       s   p   e   e   d  \r   i   f       L   o   a
0012460    d   R   a   m   (   R   a   m   I   m   a   g   e   )       e
0012500    q       0       t   h   e   n       I   n   i   t   B   c   p
0012520    l   R   u   n   t   i   m   e   (   )  \r   I   n   i   t   A
0012540    n   a   (   )           /   /   J   u   n   t   a   (   l   e
0012560    v   K   e   y   b   o   a   r   d   ,   I   n   i   t   A   n
0012600    a   ) 032   l   4   2   6   8  \r   ]  \r  \r  \r   a   n   d
0012620        I   n   i   t   A   n   a   (   a   r   g   )       b   e
0012640   \r   [  \r  \r 032  \r   l   e   t       v       =       v   e
0012660    c       5   0  \r   I   n   i   t   C   u   r   s   o   r   (
0012700    v   ,   5   0   ,   0   ,   0   )  \r   W   r   i   t   e   C
0012720    u   r   s   o   r   (   W   s   s   ,   "   p   g   "   )  \r
0012740   \r   /   /   i   n   i   t   i   a   l   i   z   e       a    
0012760    z   o   n   e       f   o   r       t   h   e       f   i   l
0013000    e       s   y   s   t   e   m  \r   l   e   t       v       =
0013020      376 001  \0 275 310   v   e   c       2   5   0   0  \r   S
0013040    i   l   Z   o   n   e       =       I   n   i   t   i   a   l
0013060    i   z   e   Z   o   n   e   (   v   ,   2   5   0   0   )  \r
0013100   \r   /   /   i   n   i   t   i   a   l   i   z   e       t   h
0013120    e       M   a   c   r   o       D   e   f   i   n   i   t   i
0013140    o   n       T   a   b   l   e  \r   l   e   t       v       =
0013160        v   e   c       M   t   s   i   z   e  \r   M   a   c   t
0013200        =       v  \r  \r   /   /   s   y   m   b   o   l       t
0013220    a   b   l   e  \r   l   e   t       v       =       v   e   c
0013240        h   t   s   i   z   e  \r   h   a   s   h   t   a   b    
0013260    =       v  \r  \r   l   e   t       v   =   v   e   c       2
0013300    0  \r   G   e   n   N   a   m   e   S   t   r   i   n   g   =
0013320    v  \r  \r   /   /   u   s   e       r   e   m   a   i   n   i
0013340    n   g       s   p   a   c   e       f   o   r       t   h   e
0013360        o   b   j   e   c   t   s  \r   @   #   3   3   5       =
0013400        L   o   a   d   R   a   m       /   /       r   e   c   l
0013420    a   i   m       o   n 376 001  \0   x 232   c   e   -   o   n
0013440    l   y       c   o   d   e  \r   S   p   a   c   e       =    
0013460    (   (   l   v       a   r   g   )       -       @   #   3   3
0013500    5   )   -   2   0   0   0           /   /   l   e   a   v   e
0013520        1   0   0   0       w   o   r   d   s       f   o   r    
0013540    t   h   e       s   t   a   c   k  \r   i   f       U   s   c
0013560    (   S   p   a   c   e   ,   2   0   0   0   )       l   s    
0013600    0           t   h   e   n       C   a   l   l   S   w   a   t
0013620    (   "   I   n   s   u   f   f   i   c   i   e   n   t       O
0013640    b   j   e   c   t       S   t   o   r   a   g   e   "   )  \r
0013660    S   p   a   c   e   B   a   s   e       =       @   #   3   3
0013700    5       /   /   E   n   d   C   o   d   e  \r   @   #   3   3
0013720    5       =       (   @   #   3   3   5   )   +   S   p   a   c
0013740    e       /   /   s   e   t       E   n   d   C   o   d   e  \r
0013760    S   p   a   c   e   T   o   p       =       (   @   #   3   3
0014000    5   )   -   1   2   8       /   /   l   e   a   v   e       m
0014020    a   r   g   i   n       f   o   r       e 376 001  \0   8 272
0014040    r   r   o   r  \r   A   n   a   M   a   i   n   (   )  \t   /
0014060    /   n   e   v   e   r       r   e   t   u   r   n   s 032   l
0014100    4   2   6   8  \r   ]  \r  \r  \f  \r  \r   a   n   d       A
0014120    n   a   M   a   i   n   (   )       b   e  \r   [ 032  \r   l
0014140    e   t       D   i   c   t   N   a   m   e   =   v   e   c    
0014160    2   0  \r   F   i   n   d   D   i   c   t   L   i   b   r   a
0014200    r   i   e   s   (   D   i   c   t   N   a   m   e   )  \r  \r
0014220    l   e   t       c   o   m   c   m       =       O   p   e   n
0014240    F   i   l   e   (   "   C   O   M   .   C   M   "   ,   k   s
0014260    T   y   p   e   R   e   a   d   O   n   l   y   ,   1   ,   0
0014300    ,   f   p   C   o   m   C   m   ,   0   ,   S   i   l   Z   o
0014320    n   e   )       /   /   b   y   t   e   s  \r   i   f       c
0014340    o   m   c   m       e   q       0       t   h   e   n       C
0014360    a   l   l   S   w   a   t   (   "   C   a   n   '   t       o
0014400    p   e   n       C   O   M   .   C   M   "   )  \r   l   e   t
0014420        f   n       =       v   e   c       1   2   8  \r   F   i
0014440  376 001  \0 347   Q   l   e   N   a   m   e       =       f   n
0014460   \r   R   e   a   d   N   e   x   t   (   c   o   m   c   m   ,
0014500    f   n   )       /   /   t   h   r   o   w       a   w   a   y
0014520        n   a   m   e       "   A   N   A   L   Y   Z   E   .   R
0014540    U   N   "  \r   l   e   t       N   e   w   O   n   l   y    
0014560    =       f   a   l   s   e  \r  \r   l   e   t       f   n   l
0014600        =       f   n   >   >   s   t   r   .   l   e   n   g   t
0014620    h       /   /   b   u   t       l   o   o   k       f   o   r
0014640        s   w   i   t   c   h       /   d  \r   l   e   t       l
0014660    c       =       f   n   >   >   s   t   r   .   c   h   a   r
0014700    ^   f   n   l  \r   i   f       (   (   l   c       e   q    
0014720    $   d   )   %   (   l   c       e   q       $   D   )   )   &
0014740    (   f   n   >   >   s   t   r   .   c   h   a   r   ^   (   f
0014760    n   l   -   1   )       e   q       $   /   )       t   h   e
0015000    n       d   e   b   u   g   s   w   i   t   c   h       =    
0015020    t   r   u   e  \r   i   f       (   (   l   c       e   q    
0015040    $   n   )   %   ( 376 001  \0 367 337   l   c       e   q    
0015060    $   N   )   )   &   (   f   n   >   >   s   t   r   .   c   h
0015100    a   r   ^   (   f   n   l   -   1   )       e   q       $   /
0015120    )       t   h   e   n       N   e   w   O   n   l   y       =
0015140        t   r   u   e  \r   i   f       (   (   l   c       e   q
0015160        $   p   )   %   (   l   c       e   q       $   P   )   )
0015200    &   (   f   n   >   >   s   t   r   .   c   h   a   r   ^   (
0015220    f   n   l   -   1   )       e   q       $   /   )       t   h
0015240    e   n      \r   [ 032   l   4   2   6   8  \r   p   r   e   s
0015260    c   a   n       =       t   r   u   e  \r   p   s   f   i   l
0015300    e       =       O   p   e   n   F   i   l   e   (   "   S   w
0015320    a   t   e   e   "   ,   k   s   T   y   p   e   R   e   a   d
0015340    W   r   i   t   e   ,   0   ,   v   e   r   L   a   t   e   s
0015360    t   C   r   e   a   t   e   ,   0   ,   0   ,   S   i   l   Z
0015400    o   n   e   )  \r   P   u   t   s   (   p   s   f   i   l   e
0015420    ,   -   1   ) 032   l   5   5   3   8  \r   ]  \r  \r   /   /
0015440    f   p   D   i   c   t       =       D 376 001  \0   M   a   p
0015460    r   v   e   c   +   1  \r   /   /   d   i   c   t       =    
0015500    O   p   e   n   F   i   l   e   (   0   ,   k   s   T   y   p
0015520    e   R   e   a   d   O   n   l   y   ,   1   ,   0   ,   f   p
0015540    D   i   c   t   ,   0   ,   S   i   l   Z   o   n   e   )  \r
0015560    /   /   i   f       d   i   c   t       e   q       0       t
0015600    h   e   n       C   a   l   l   S   w   a   t   (   "   C   a
0015620    n   '   t       o   p   e   n       f   i   r   s   t       D
0015640    i   c   t   i   o   n   a   r   y       f   i   l   e   "   )
0015660   \r   l   e   t       e   f   n       =       v   e   c       1
0015700    2   8   ;       e   f   n   !   0       =       0  \r  \r  \r
0015720    [ 032   l   4   2   6   8  \r   i   f       n   o   t       R
0015740    e   a   d   N   e   x   t   (   c   o   m   c   m   ,   f   n
0015760    )       t   h   e   n       b   r   e   a   k       /   /   n
0016000    o       m   o   r   e       f   i   l   e   s  \r   W   r   i
0016020    t   e   C   u   r   s   o   r   (   W   s   s   ,   "   p   g
0016040    "   )  \r   W   r   i   t   e   C   u   r   s   o   r   ( 376
0016060  001  \0 246 037   $   i   )  \r   I   n   i   t   S   t   o   r
0016100    a   g   e   (   )  \r   f   n   l       =       f   n   >   >
0016120    s   t   r   .   l   e   n   g   t   h  \r   l   c       =    
0016140    f   n   >   >   s   t   r   .   c   h   a   r   ^   f   n   l
0016160   \r   i   f       (   f   n   l       g   r       2   )   &   (
0016200    (   l   c       e   q       $   e   )   %   (   l   c       e
0016220    q       $   E   )   )   &   (   f   n   >   >   s   t   r   .
0016240    c   h   a   r   ^   (   f   n   l   -   1   )       e   q    
0016260    $   /   )       t   h   e   n  \r   [       /   /       e   r
0016300    r   o   r       f   i   l   e       s   p   e   c   i   f   i
0016320    e   d 032   l   5   5   3   8  \r   f   n   >   >   s   t   r
0016340    .   l   e   n   g   t   h       =       f   n   l   -   2  \r
0016360    O   p   e   n   E   r   F   i   l   e   (   f   n   )  \r   M
0016400    o   v   e   B   l   o   c   k   (   e   f   n   ,       f   n
0016420    ,       1   2   8   )  \r   l   o   o   p 032   l   6   8   0
0016440    8  \r   ]  \r   i   f       E   r   F   i   l   e       e   q
0016460        0       t 376 001  \0   x 035   h   e   n  \r   [ 032   l
0016500    5   5   3   8  \r   M   a   k   e   F   i   l   e   N   a   m
0016520    e   (   e   f   n   ,       f   n   ,       p   r   e   s   c
0016540    a   n   ?       "   .   p   e   "   ,   "   .   e   r   "   )
0016560   \r   O   p   e   n   E   r   F   i   l   e   (   e   f   n   )
0016600  032   l   6   8   0   8  \r   ]  \r   t   e   s   t       p   r
0016620    e   s   c   a   n  \r   i   f   s   o 032   l   5   5   3   8
0016640   \r   [ 032   l   5   5   3   8  \r   l   e   t       R   e   f
0016660    F   i   l   e       =       F   i   l   e   I   n   (   f   n
0016700    )  \r   i   f       R   e   f   F   i   l   e       t   h   e
0016720    n       l   o   o   p   /   /           m   a   r   k   e   d
0016740        a   s       f   i   l   e       f   o   r       r   e   f
0016760    e   r   e   n   c   e       o   n   l   y      \r   W   r   i
0017000    t   e   C   u   r   s   o   r   (   W   n   s   ,   p   a   g
0017020    e   )  \r   G   e   t   C   o   m   p   N   a   m   e   s   (
0017040    0   ,   D   i   c   t   N   a   m   e   )  \r   O   u   t   S
0017060    y   m   b   o   l   s   (   ) 032 376 001  \0   m   f   l   6
0017100    8   0   8  \r   ]  \r   i   f   n   o   t  \r   [ 032   l   5
0017120    5   3   8  \r  \r   /   /   O   u   t   F   i   l   e       =
0017140        G   e   t   F   i   l   e   (   f   n   ,   "   .   n   l
0017160    "   ,   1   )       /   /   /   n   o   d   e       l   i   s
0017200    t  \r   l   e   t       S   k   i   p   F   i   l   e       =
0017220        F   i   l   e   I   n   (   f   n   ,   N   e   w   O   n
0017240    l   y   )       /   /   r   e   a   d       t   h   e       i
0017260    n   p   u   t       f   i   l   e  \r   W   r   i   t   e   C
0017300    u   r   s   o   r   (   W   n   s   ,   p   a   g   e   )  \r
0017320    i   f       S   k   i   p   F   i   l   e       t   h   e   n
0017340        l   o   o   p       /   /       B   U   I   L   T   &   "
0017360    /   N   "       o   r       m   a   r   k   e   d       a   s
0017400        f   i   l   e       a   s       "   R   e   f   e   r   e
0017420    n   c   e   "  \r   l   e   t       n   u   m   D   i   c   t
0017440    s       =       G   e   t   C   o   m   p   N   a   m   e   s
0017460    (   0   ,   D   i   c   t   N   a   m   e   )       / 376 001
0017500   \0   )   m   /   r   e   a   d       d   i   c   t   i   o   n
0017520    a   r   y       h   e   a   d   e   r   s  \r   A   d   d   C
0017540    o   m   p   s   (   )       /   /   b   u   i   l   d       c
0017560    o   m   p   o   n   e   n   t       t   e   m   p   l   a   t
0017600    e   s       a   n   d       a   d   d       t   o       c   o
0017620    m   p   s  \r   F   i   x   O   v   e   r   l   a   p   (   )
0017640        /   /   c   o   a   l   e   s   c   e       o   v   e   r
0017660    l   a   p   p   i   n   g       l   i   n   e   s  \r   D   o
0017700    S   c   h   a   r   s   (   )  \r   D   o   S   i   g   n   a
0017720    m   e   s   (   )  \r   D   o   C   o   m   p   o   n   e   n
0017740    t   s   (   )  \r   C   o   n   n   e   c   t   V   l   i   n
0017760    e   s   (   )  \r   C   o   n   n   e   c   t   H   l   i   n
0020000    e   s   (   )  \r   D   e   f   a   u   l   t   T   y   p   e
0020020    N   a   m   e   s   (   )   /   /   d   e   f   a   u   l   t
0020040        m   i   s   s   i   n   g       c   o   m   p   o   n   e
0020060    n   t       n   a   m   e   s       w   h   e   r   e       p
0020100    o   s   s 376 001  \0 356 354   i   b   l   e  \r   f   o   r
0020120        i       =       0       t   o       n   u   m   D   i   c
0020140    t   s       d   o  \r   [  \r  \t   i   f       P   i   n   C
0020160    h   e   c   k   (   i   )       t   h   e   n       b   r   e
0020200    a   k           /   /   a   l   l       c   o   m   p   o   n
0020220    e   n   t   s       h   a   v   e       b   e   e   n       f
0020240    o   u   n   d  \r  \t   i   f       i       e   q       n   u
0020260    m   D   i   c   t   s       &       w   o   r   s   t   E   r
0020300    r   o   r   L   e   v   e   l       g   e       s   e   r   i
0020320    o   u   s       t   h   e   n  \r  \t  \t   E   r   r   2   (
0020340    "   *   n   N   o   t       a   l   l       c   o   m   p   o
0020360    n   e   n   t   s       w   e   r   e       f   o   u   n   d
0020400        i   n       y   o   u   r       D   i   c   t   i   o   n
0020420    a   r   y   (   s   )   "   )  \r   ]      \r   W   r   i   t
0020440    e   C   u   r   s   o   r   (   $   o   )  \r   D   o   O   u
0020460    t   p   u   t   (   )  \r   i   f       d   e   b   u   g   s
0020500    w   i   t   c   h       t   h 376 001  \0 221   =   e   n    
0020520    P   r   i   n   t   S   t   r   u   c   t   s   (   )  \r   i
0020540    f       w   o   r   s   t   E   r   r   o   r   L   e   v   e
0020560    l       g   e       2       t   h   e   n       i   f       C
0020600    o   l   o   r   C   o   u   n   t       g   r       0       d
0020620    o  \r   [  \r  \t   l   e   t       m   s   g       =       v
0020640    e   c       4   0   ;       m   s   g   !   0       =       0
0020660   \r  \t   A   p   p   e   n   d   S   (   "   *   n   R   e   m
0020700    i   n   d   r   :       "   ,   m   s   g   )   ;       A   p
0020720    p   e   n   d   N   (   C   o   l   o   r   C   o   u   n   t
0020740    ,   m   s   g   )  \r  \t   E   r   r   2   (   m   s   g   ,
0020760        "       i   t   e   m   s       w   i   t   h       M   a
0021000    g   e   n   t   a       c   o   l   o   r       w   e   r   e
0021020        s   k   i   p   p   e   d   "   )  \r   ]  \r   C   l   o
0021040    s   e   s   (   O   u   t   F   i   l   e   )  \r   i   f    
0021060    d   e   b   u   g   s   w   i   t   c   h       t   h   e   n
0021100        C   a   l   l   S   w   a   t   (   "   d   o 376 001  \0
0021120   \f   F   n   e       w   i   t   h       "   ,   f   n   ) 032
0021140    l   6   8   0   8  \r   ]  \r  \r 032   l   5   5   3   8  \r
0021160    ]       r   e   p   e   a   t  \r   i   f       p   r   e   s
0021200    c   a   n       t   h   e   n  \r   [ 032   l   4   2   6   8
0021220   \r   W   r   i   t   e   C   u   r   s   o   r   (   $   o   )
0021240   \r   N   e   w   I   t   e   m       =       S   p   a   c   e
0021260    B   a   s   e  \r   Z   e   r   o   (   h   a   s   h   t   a
0021300    b   ,   h   t   s   i   z   e   )  \r   P   u   t   s   (   p
0021320    s   f   i   l   e   ,   -   1   )           /   /   f   l   a
0021340    g   s       s   t   r   e   a   m       a   s       d   o   n
0021360    e  \r   R   e   s   e   t   s   (   p   s   f   i   l   e   )
0021400   \r   M   a   k   e   F   i   l   e   N   a   m   e   (   e   f
0021420    n   ,       e   f   n   ,       "   .   p   s   "   )  \r   P
0021440    r   e   S   c   a   n   O   u   t   (   e   f   n   ) 032   l
0021460    5   5   3   8  \r   ]  \r   W   r   i   t   e   C   u   r   s
0021500    o   r   (   W   s   s   ,   "   d   n   "   )  \r  \r   W   s
0021520    (   " 376 001  \0   e   >   *   n   *   n   *   n   *   n   *
0021540    n   A   N   A   L   Y   Z   E       o   f       J   u   l   y
0021560        1   0   ,       1   9   7   9           -   -           [
0021600    "   )  \r   W   n   s   (   d   s   p   ,   w   o   r   s   t
0021620    E   r   r   o   r   L   e   v   e   l   )  \r   W   s   (   "
0021640    ]       =       w   o   r   s   t       e   r   r   o   r    
0021660    s   e   v   e   r   i   t   y   "   )  \r   C   l   o   s   e
0021700    E   r   F   i   l   e   (   )      \r   f   i   n   i   s   h
0021720  032   l   4   2   6   9  \r   /   /   S   p   e   a   k   V   e
0021740    r   s   i   o   n   (   )           /   /   C   o   u   n   t
0021760    e   r   J   u   n   t   a   (   S   p   e   a   k   V   e   r
0022000    s   i   o   n   ) 032   l   4   2   6   8  \r  \r   ]     032
0022020   \r  \r   /   /   a   n   d       S   p   e   a   k   V   e   r
0022040    s   i   o   n   (   )       b   e  \r   /   /   [ 032  \r   /
0022060    /   W   s   (   "   *   n   *   n   *   n   *   n   *   n   A
0022100    N   A   L   Y   Z   E       J   u   n   e       2   1   ,    
0022120    1   9   7   9   "   )  \r 376 001  \0   #   )   /   /   f   i
0022140    n   i   s   h 032   l   4   2   6   9  \r   /   /   ]  \r  \r
0022160    a   n   d       I   n   i   t   S   t   o   r   a   g   e   (
0022200    )       b   e  \r   [ 032  \r   C   o   m   p   s       =    
0022220    0  \r   V   l   i   n   e   s       =       0  \r   H   l   i
0022240    n   e   s       =       0  \r   S   t   r   i   n   g   s    
0022260    =       0  \r   N   u   m   b   e   r   s       =       0  \r
0022300    L   o   c   g   r   o   u   p   s       =       0  \r   S   c
0022320    h   a   r   s       =       0  \r   B   a   d   I   t   e   m
0022340    s       =       0  \r   C   o   l   o   r   C   o   u   n   t
0022360        =       0  \r   N   e   w   I   t   e   m   =       S   p
0022400    a   c   e   B   a   s   e  \r   Z   e   r   o   (   M   a   c
0022420    t   ,   M   t   s   i   z   e   )  \r   Z   e   r   o   (   h
0022440    a   s   h   t   a   b   ,   h   t   s   i   z   e   )  \r   I
0022460    n   s   t   p       =       D   e   f   i   n   e   S   y   m
0022500    b   o   l   (   "   I   N   "   ,   s   t   P   i   n   )  \r
0022520    O   u   t   s   t   p       =       D   e   f 376 001  \0   O
0022540  357   i   n   e   S   y   m   b   o   l   (   "   O   U   T   "
0022560    ,   s   t   P   i   n   )  \r   G   n   d   s   t   p       =
0022600        D   e   f   i   n   e   S   y   m   b   o   l   (   "   G
0022620    n   d   "   ,   s   t   S   i   g   )  \r   P   s   e   u   d
0022640    s   t   p       =       D   e   f   i   n   e   S   y   m   b
0022660    o   l   (   "   +   "   ,   s   t   S   i   g   )  \r  \r 032
0022700    l   4   2   6   8  \r   ]  \r  \r   a   n   d       R   e   a
0022720    d   N   e   x   t   (   s   t   r   e   a   m   ,   s   t   r
0022740    i   n   g   )       =       v   a   l   o   f  \r   [ 032  \r
0022760    l   e   t       c   h       =       $   *   s  \r   i   f    
0023000    E   n   d   o   f   s   (   s   t   r   e   a   m   )       t
0023020    h   e   n       r   e   s   u   l   t   i   s       f   a   l
0023040    s   e  \r   u   n   t   i   l       (   E   n   d   o   f   s
0023060    (   s   t   r   e   a   m   )   %   (   c   h       g   r    
0023100    $   *   s   )   )   d   o       c   h       =       G   e   t
0023120    s   (   s   t   r   e   a   m   )  \r   i   f       c   h    
0023140    l 376 001  \0  \t 315   e       $   *   s       t   h   e   n
0023160        r   e   s   u   l   t   i   s       f   a   l   s   e  \r
0023200   \r   s   t   r   i   n   g   >   >   s   t   r   .   l   e   n
0023220    g   t   h       =       1  \r   s   t   r   i   n   g   >   >
0023240    s   t   r   .   c   h   a   r   ^   1       =       c   h  \r
0023260   \r   [ 032   l   4   2   6   8  \r   i   f       E   n   d   o
0023300    f   s   (   s   t   r   e   a   m   )       t   h   e   n    
0023320    b   r   e   a   k  \r   c   h       =       G   e   t   s   (
0023340    s   t   r   e   a   m   )  \r   i   f       c   h       l   e
0023360        $   *   s       t   h   e   n       b   r   e   a   k  \r
0023400    l   e   t       s   l       =       s   t   r   i   n   g   >
0023420    >   s   t   r   .   l   e   n   g   t   h   +   1  \r   s   t
0023440    r   i   n   g   >   >   s   t   r   .   c   h   a   r   ^   s
0023460    l       =       c   h  \r   s   t   r   i   n   g   >   >   s
0023500    t   r   .   l   e   n   g   t   h       =       s   l 032   l
0023520    5   5   3   8  \r   ]       r   e   p   e   a   t  \r   r   e
0023540    s   u   l   t   i   s 376 001  \0  \t 354       t   r   u   e
0023560  032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       O   p
0023600    e   n   E   r   F   i   l   e   (   n   a   m   e   )       b
0023620    e  \r   [ 032  \r   i   f       E   r   F   i   l   e       n
0023640    e       0       t   h   e   n       C   l   o   s   e   E   r
0023660    F   i   l   e   (   )  \r   E   r   F   i   l   e       =    
0023700    O   p   e   n   F   i   l   e   (   n   a   m   e   ,   k   s
0023720    T   y   p   e   R   e   a   d   W   r   i   t   e   ,   1   ,
0023740    0   ,   0   ,   0   ,   S   i   l   Z   o   n   e   )  \r   W
0023760    s   s   (   E   r   F   i   l   e   ,       "   [   0   ]    
0024000    =       w   o   r   s   t       e   r   r   o   r       s   e
0024020    v   e   r   i   t   y   *   n   "   ) 032   l   4   2   6   9
0024040   \r   ]  \r  \r   a   n   d       C   l   o   s   e   E   r   F
0024060    i   l   e   (   )       b   e  \r   [ 032  \r   i   f       E
0024100    r   F   i   l   e       e   q       0       t   h   e   n    
0024120    r   e   t   u   r   n  \r   T   r   u   n   c   a   t   e   D
0024140    i   s   k   S   t   r   e   a   m   (   E 376 001  \0 250 221
0024160    r   F   i   l   e   )  \r   R   e   s   e   t   s   (   E   r
0024200    F   i   l   e   )  \r   G   e   t   s   (   E   r   F   i   l
0024220    e   )       /   /       o   v   e   r       t   h   e       i
0024240    n   i   t   i   a   l       "   [   "  \r   P   u   t   s   (
0024260    E   r   F   i   l   e   ,       $   0   +   w   o   r   s   t
0024300    E   r   r   o   r   L   e   v   e   l   )  \r   C   l   o   s
0024320    e   s   (   E   r   F   i   l   e   )  \r   w   o   r   s   t
0024340    E   r   r   o   r   L   e   v   e   l       =       n   o   E
0024360    r   r   o   r  \r   E   r   F   i   l   e       =       0 032
0024400    l   4   2   6   9  \r   ]  \r  \r   a   n   d       E   r   r
0024420    o   r   A   t   S   e   v   e   r   i   t   y   (   s   )    
0024440    b   e  \r   [ 032  \r   i   f       s       g   r       w   o
0024460    r   s   t   E   r   r   o   r   L   e   v   e   l       t   h
0024500    e   n       w   o   r   s   t   E   r   r   o   r   L   e   v
0024520    e   l       =       s 032   l   4   2   6   9  \r   ]  \r  \f
0024540   \r   a   n   d       F   i   l   e   I   n   (   f   n   ,   N
0024560  376 001  \0 230   _   e   w   O   n   l   y   ;       n   u   m
0024600    a   r   g   s       a   r   g   u   m   e   n   t   s   )    
0024620    =   v   a   l   o   f  \r   [ 032  \r   i   f       a   r   g
0024640    u   m   e   n   t   s       l   s       2       t   h   e   n
0024660        N   e   w   O   n   l   y       =       f   a   l   s   e
0024700   \r   l   e   t       s       =       O   p   e   n   F   i   l
0024720    e   (   f   n   ,   k   s   T   y   p   e   R   e   a   d   O
0024740    n   l   y   ,   0   ,   0   ,   0   ,   0   ,   S   i   l   Z
0024760    o   n   e   )  \r   i   f       s       e   q       0       t
0025000    h   e   n  \r   [ 032   l   4   2   6   8  \r   C   a   l   l
0025020    S   w   a   t   (   "   C   a   n   '   t       O   p   e   n
0025040        I   n   p   u   t       F   i   l   e   :       "   ,   f
0025060    n   )  \r   f   i   n   i   s   h 032   l   5   5   3   8  \r
0025100    ]  \r  \r   l   e   t       p   w       =       G   e   t   s
0025120    (   s   )  \r   i   f       p   w       n   e       #   3   4
0025140    5   6   2       &       p   w       n   e       #   3   4   5
0025160    6   3       t   h 376 001  \0   |   M   e   n       C   a   l
0025200    l   S   w   a   t   (   f   n   ,       "   i   s       n   o
0025220    t       a       v   a   l   i   d       S   I   L       f   i
0025240    l   e   "   )  \r   i   f       p   w       e   q       #   3
0025260    4   5   6   3       &       N   e   w   O   n   l   y       e
0025300    q       t   r   u   e       t   h   e   n       [       C   l
0025320    o   s   e   s   (   s   )   ;       r   e   s   u   l   t   i
0025340    s       t   r   u   e       ]           /   /   m   a   r   k
0025360    e   d       B   U   I   L   T  \r   i   f       a   r   g   u
0025400    m   e   n   t   s       e   q       2       t   h   e   n    
0025420    O   u   t   F   i   l   e       =       G   e   t   F   i   l
0025440    e   (   f   n   ,   "   .   n   l   "   ,   1   )       /   /
0025460    /   n   o   d   e       l   i   s   t       f   o   r       n
0025500    o   r   m   a   l       m   o   d   e  \r   l   e   t       t
0025520    i   t   l   e   v   =   v   e   c       2   0   0  \r   P   a
0025540    r   s   e   T   i   t   l   e   (   0   ,       t   i   t   l
0025560    e   v   ,       2   0   0   )  \t  \t 376 001  \0 220 323   /
0025600    /   I   n   i   t   i   a   l   i   z   e       f   o   r    
0025620    t   i   t   l   e       p   a   r   s   i   n   g  \r   l   e
0025640    t       t   e   m   p   v       =       v   e   c       1   3
0025660    5       /   /   t   e   m   p   o   r   a   r   y       v   e
0025700    c   t   o   r       f   o   r       o   b   j   e   c   t  \r
0025720    E   r   r   2   (   "   *   n   R   e   a   d   i   n   g    
0025740    "   ,   f   n   ,   n   o   E   r   r   o   r   )  \r   u   n
0025760    t   i   l       E   n   d   o   f   s   (   s   )       d   o
0026000        /   /   r   e   a   d       f   i   l   e      \r   [ 032
0026020    l   4   2   6   8  \r   l   e   t       m   n   a   m   e    
0026040    =       G   e   t   s   (   s   )  \r   f   o   r       i    
0026060    =       1       t   o       4       d   o       t   e   m   p
0026100    v   !   i       =       G   e   t   s   (   s   )  \r   l   e
0026120    t       f   o   n   t       =       t   e   m   p   v   >   >
0026140    i   t   e   m   .   f   o   n   t  \r   i   f       f   o   n
0026160    t       l   s       1   4       t   h   e   n       /   / 376
0026200  001  \0 274 221   r   e   a   d       i   n       t   h   e    
0026220    s   t   r   i   n   g  \r   [ 032   l   5   5   3   8  \r   t
0026240    e   m   p   v   !   5       =       G   e   t   s   (   s   )
0026260   \r   i   f       t   e   m   p   v   >   >   i   t   e   m   .
0026300    s   t   r   i   n   g   .   l   e   n   g   t   h       g   r
0026320        1       t   h   e   n  \r   f   o   r       j       =    
0026340    1       t   o       (   t   e   m   p   v   >   >   i   t   e
0026360    m   .   s   t   r   i   n   g   .   l   e   n   g   t   h   )
0026400    /   2       d   o  \r   t   e   m   p   v   !   (   5   +   j
0026420    )       =       G   e   t   s   (   s   )     032   l   6   8
0026440    0   8  \r   ]  \r  \r   l   e   t       F   o   n   t   4   c
0026460    o   m   p   o   n   e   n   t       =       f   a   l   s   e
0026500   \r   l   e   t       c       =       t   e   m   p   v   >   >
0026520    i   t   e   m   .   s   t   r   i   n   g   .   c   h   a   r
0026540    ^   1  \r   i   f       (   f   o   n   t       e   q       8
0026560    )   &   (   c       g   e       $   0   )   &   (   c       l
0026600    e   $   9   ) 376 001  \0 314   _       t   h   e   n       F
0026620    o   n   t   4   c   o   m   p   o   n   e   n   t       =    
0026640    t   r   u   e  \r   t   e   s   t       m   n   a   m   e    
0026660    e   q       -   1  \r   i   f   s   o           /   /   t   h
0026700    i   s       i   s       a       p   i   c   t   u   r   e    
0026720    e   l   e   m   e   n   t   .      \r   [ 032   l   5   5   3
0026740    8  \r  \r   i   f       t   e   m   p   v   >   >   i   t   e
0026760    m   .   c   o   l   o   r       e   q       M   a   g   e   n
0027000    t   a       t   h   e   n       [       C   o   l   o   r   C
0027020    o   u   n   t   =   C   o   l   o   r   C   o   u   n   t   +
0027040    1   ;       l   o   o   p       ]  \r   i   f       f   o   n
0027060    t       l   s       8       t   h   e   n       f   o   n   t
0027100        =       f   o   n   t   /   2  \r   s   w   i   t   c   h
0027120    o   n       f   o   n   t       i   n   t   o 032   l   6   8
0027140    0   8  \r   [ 032   l   6   8   0   8  \r  \t   c   a   s   e
0027160        1   :       i   f       t   e   m   p   v   >   >   i   t
0027200    e   m   .   i   t   a   l   i   c 376 001  \0   2 256       e
0027220    q       0       t   h   e   n       [       D   o   f   o   n
0027240    t   1   s   t   r   i   n   g   (   t   e   m   p   v   ,   0
0027260    ,   0   )   ;   l   o   o   p       ]  \r  \t   /   /   P   a
0027300    r   s   e   T   i   t   l   e       g   e   t   s       c   a
0027320    l   l   e   d       i   f       f   o   n   t   1       i   t
0027340    a   l   i   c  \r  \t   c   a   s   e       0   :       c   a
0027360    s   e       2   :       P   a   r   s   e   T   i   t   l   e
0027400    (   1   ,       t   i   t   l   e   v   ,       t   e   m   p
0027420    v   )   ;       l   o   o   p  \r  \t   c   a   s   e       3
0027440    :       i   f       t   e   m   p   v   >   >   i   t   e   m
0027460    .   i   t   a   l   i   c       e   q       0       t   h   e
0027500    n       D   o   f   o   n   t   3   s   t   r   i   n   g   (
0027520    t   e   m   p   v   ,   0   ,   0   )   ;   l   o   o   p  \r
0027540   \t   c   a   s   e       1   4   :       D   o   r   e   c   t
0027560    a   n   g   l   e   (   t   e   m   p   v   ,   0   ,   0   )
0027600    ;   l   o   o   p  \r  \t   c   a   s   e       8   : 376 001
0027620   \0   w   s       u   n   l   e   s   s       F   o   n   t   4
0027640    c   o   m   p   o   n   e   n   t       d   o       [       D
0027660    o   u   s   e   r   m   a   c   r   o   (   t   e   m   p   v
0027700    ,   0   ,   0   )   ;   l   o   o   p       ]  \r  \t   c   a
0027720    s   e       9   :  \r  \t   c   a   s   e       1   0   :  \r
0027740   \t   c   a   s   e       1   1   :  \r  \t   c   a   s   e    
0027760    1   2   :  \r  \t   c   a   s   e       1   3   :       D   o
0030000    c   o   m   p   o   n   e   n   t   (   t   e   m   p   v   ,
0030020    0   ,   0   )   ;   l   o   o   p  \r  \t   d   e   f   a   u
0030040    l   t   :       l   o   o   p 032   l   6   8   0   8  \r   ]
0030060   \r 032   l   6   8   0   8  \r   ]  \r  \r   /   /   t   h   i
0030100    s       b   l   o   c   k       i   s       p   a   r   t    
0030120    o   f       a       m   a   c   r   o       d   e   f   i   n
0030140    i   t   i   o   n       i   n       t   h   e       u   s   e
0030160    r   '   s       p   r   i   v   a   t   e       m   a   c   r
0030200    o   s  \r   /   /   p   u   t       i   t       i   n   t   o
0030220        M   a 376 001  \0 303 327   c   t       f   o   r       l
0030240    a   t   e   r       e   x   p   a   n   s   i   o   n  \r   i
0030260    f   n   o   t       u   n   l   e   s   s       (   m   n   a
0030300    m   e       g   e       $   0   )   &   (   m   n   a   m   e
0030320        l   e   $   9   )       d   o          \r   [ 032   l   5
0030340    5   3   8  \r   i   f       (   m   n   a   m   e       &    
0030360    #   1   7   7   6   0   0   )       n   e       0       t   h
0030400    e   n  \r  \t   C   a   l   l   S   w   a   t   (   "   S   c
0030420    r   e   w   e   d       u   p       p   a   r   s   i   n   g
0030440        F   o   n   t       4       m   a   c   r   o       d   e
0030460    f   i   n   i   t   i   o   n   s   !   !   !   "   )  \r   l
0030500    e   t       l       =       L   e   n   g   t   h   (   t   e
0030520    m   p   v   )  \r   C   h   e   c   k   F   i   t   (   l   )
0030540   \r  \r   M   o   v   e   B   l   o   c   k   (   N   e   w   I
0030560    t   e   m   ,   t   e   m   p   v   ,   l   )       /   /   c
0030600    o   p   y       t   e   m   p   v       i   n   t   o       t
0030620    h   e       l   i   s   t  \r 376 001  \0 304 331   N   e   w
0030640    I   t   e   m   >   >   i   t   e   m   .   l   i   n   k    
0030660    =       M   a   c   t   !   m   n   a   m   e  \r   M   a   c
0030700    t   !   m   n   a   m   e       =       N   e   w   I   t   e
0030720    m  \r   N   e   w   I   t   e   m   =   N   e   w   I   t   e
0030740    m   +   l 032   l   6   8   0   8  \r   ] 032   l   5   5   3
0030760    8  \r 032   l   5   5   3   8  \r      \r  \r  \r   ]  \r   R
0031000    e   s   e   t   s   (   s   )   ;       L   i   b   U   p   d
0031020    a   t   e   (   8   ,   s   )           /   /   s   t   r   e
0031040    a   m       i   s       c   l   o   s   e   d       b   y    
0031060    L   i   b   U   p   d   a   t   e  \r   /   /   i   f   n   o
0031100    t       C   l   o   s   e   s   (   s   )  \r   /   /   u   p
0031120    d   a   t   e       a   n   y       l   i   b   r   a   r   i
0031140    e   s       r   e   q   u   i   r   e   d  \r   f   o   r    
0031160    i       =       9       t   o       1   3       d   o       L
0031200    i   b   U   p   d   a   t   e   (   i   ,   0   )  \r   t   e
0031220    m   p   v   !   0   =   0  \t  \t   /   /   F   o 376 001  \0
0031240  237 354   r       a       s   t   r   i   n   g  \r  \r   /   /
0031260    f   i   r   s   t       l   o   o   k       f   o   r       a
0031300        p   a   g   e       n   u   m   b   e   r       a   n   d
0031320        u   s   e       i   t       i   f       f   o   u   n   d
0031340   \r   P   a   r   s   e   T   i   t   l   e   (   2   ,       t
0031360    i   t   l   e   v   ,       4   ,       t   e   m   p   v   )
0031400   \t   /   /   M   a   k   e       c   o   m   m   e   n   t    
0031420    s   t   r   i   n   g  \r   l   e   t       T   i   t   l   e
0031440    P   a   g   e       =       G   e   t   N   u   m   (   t   e
0031460    m   p   v   )           /   /   r   e   t   u   r   n   s    
0031500    -   1       i   f       n   o       n   u   m   b   e   r    
0031520    i   s       f   o   u   n   d  \r   i   f       (   T   i   t
0031540    l   e   P   a   g   e       e   q       l   a   s   t   T   i
0031560    t   l   e   P   a   g   e   )       &       (   T   i   t   l
0031600    e   P   a   g   e       g   r       0   )       t   h   e   n
0031620        T   i   t   l   e   P   a   g   e       =       -   2  \r
0031640    p   a 376 001  \0 236   x   g   e       =           T   i   t
0031660    l   e   P   a   g   e       g   r       0   ?       T   i   t
0031700    l   e   P   a   g   e   ,       p   a   g   e   +   1  \r   l
0031720    a   s   t   T   i   t   l   e   P   a   g   e       =        
0031740    T   i   t   l   e   P   a   g   e      \r  \r   /   /   n   o
0031760    w       l   o   o   k       f   o   r       a   l   l       e
0032000    n   t   r   i   e   s       i   n       t   h   e       t   i
0032020    t   l   e       b   l   o   c   k  \r   l   e   t       f   n
0032040    t   i   t   l   e   =   P   a   r   s   e   T   i   t   l   e
0032060    (   2   ,       t   i   t   l   e   v   ,       1   )  \r   t
0032100    e   m   p   v   !   0   =   0  \t  \t   /   /   F   o   r    
0032120    a       s   t   r   i   n   g  \r   A   p   p   e   n   d   S
0032140    (   "   *   n   ;   "   ,       t   e   m   p   v   )  \r   P
0032160    a   r   s   e   T   i   t   l   e   (   2   ,       t   i   t
0032200    l   e   v   ,       5   ,       t   e   m   p   v   )  \t   /
0032220    /   M   a   k   e       c   o   m   m   e   n   t       s   t
0032240    r   i   n   g  \r   l   e 376 001  \0 346 214   t       R   e
0032260    f   O   n   l   y       =           P   a   r   s   e   T   i
0032300    t   l   e   (   4   ,   t   i   t   l   e   v   )           /
0032320    /   s   e   e       i   f       t   h   i   s       i   s    
0032340    j   u   s   t       a       r   e   f   e   r   e   n   c   e
0032360        d   o   c   u   m   e   n   t  \r   i   f       p   w    
0032400    e   q       #   3   4   5   6   3       t   h   e   n       A
0032420    p   p   e   n   d   S   (   "       M   A   R   K   E   D    
0032440    B   U   I   L   T       "   ,       t   e   m   p   v   )  \r
0032460    i   f       t   e   m   p   v   >   >   s   t   r   .   l   e
0032500    n   g   t   h       g   r       2       t   h   e   n        
0032520    /   /   d   o   n   '   t       m   a   k   e       c   o   m
0032540    p   l   a   i   n   t   s       i   f       t   h   e   r   e
0032560        i   s   n   '   t       a       t   i   t   l   e       b
0032600    l   o   c   k  \r   [ 032   l   4   2   6   8  \r   P   a   r
0032620    s   e   T   i   t   l   e   (   3   ,       t   i   t   l   e
0032640    v   ,       E   r   F   i   l   e   )  \t   / 376 001  \0 222
0032660  203   /   C   o   m   p   l   a   i   n       i   f       n   o
0032700    t       p   a   r   s   e   d       c   o   r   r   e   c   t
0032720    l   y  \r   E   r   r   (   t   e   m   p   v   ,   n   o   E
0032740    r   r   o   r   )   ;  \r   i   f       O   u   t   F   i   l
0032760    e       t   h   e   n  \r   [  \r  \t   W   s   s   (   O   u
0033000    t   F   i   l   e   ,       t   e   m   p   v   )  \t   /   /
0033020    P   u   t       i   n       o   u   t   p   u   t       a   s
0033040        c   o   m   m   e   n   t  \r  \t   i   f       R   e   f
0033060    O   n   l   y       t   h   e   n       W   s   s   (   O   u
0033100    t   F   i   l   e   ,       "   *   n   @   *   n   "   )  \t
0033120    /   /   m   a   k   e       t   h   e       .   n   l       f
0033140    i   l   e       c   o   s   h   e   r  \r   ]  \r   u   n   l
0033160    e   s   s       S   t   E   q   (   f   n   ,       f   n   t
0033200    i   t   l   e   ,       n   i   l   )       t   h   e   n    
0033220    E   r   r   (   "   *   n   F   i   l   e       n   a   m   e
0033240        c   i   t   e   d       i   n       S   I   L       t   i
0033260    t 376 001  \0 022 002   l   e       r   e   g   i   o   n    
0033300    d   o   e   s       n   o   t       m   a   t   c   h       t
0033320    r   u   e       f   i   l   e   n   a   m   e   .   "   ,    
0033340   \t   w   a   r   n   i   n   g   )  \r   i   f       T   i   t
0033360    l   e   P   a   g   e       e   q       -   1       t   h   e
0033400    n       E   r   r   (   "   *   n   C   a   n   '   t       f
0033420    i   n   d       v   a   l   i   d       p   a   g   e       n
0033440    u   m   b   e   r       i   n       S   I   L       t   i   t
0033460    l   e       r   e   g   i   o   n   .   "   ,   w   a   r   n
0033500    i   n   g   ) 032   l   5   5   3   8  \r   i   f       T   i
0033520    t   l   e   P   a   g   e       e   q       -   2       t   h
0033540    e   n       E   r   r   (   "   *   n   P   a   g   e       n
0033560    u   m   b   e   r       c   i   t   e   d       i   n       S
0033600    I   L       t   i   t   l   e       r   e   g   i   o   n    
0033620    i   s       n   o   t       i   n   c   r   e   m   e   n   t
0033640    e   d       f   r   o   m       f   o   r   m   e   r       f
0033660    i   l   e   s   .   " 376 001  \0 310   f   ,   w   a   r   n
0033700    i   n   g   ) 032   l   5   5   3   8  \r   ]  \r  \r   M   o
0033720    v   e   B   l   o   c   k   (   G   e   n   N   a   m   e   S
0033740    t   r   i   n   g   ,   f   n   t   i   t   l   e   ,   2   0
0033760    )  \r   G   e   n   N   a   m   e   C   o   u   n   t   =   f
0034000    n   t   i   t   l   e   ?       1   ,   0  \r   i   f       R
0034020    e   f   O   n   l   y       t   h   e   n           /   /   r
0034040    e   t   u   r   n       i   f       f   i   l   e       i   s
0034060        m   a   r   k   e   d       a   s       r   e   f   e   r
0034100    e   n   c   e  \r   [  \r  \t   i   f       a   r   g   u   m
0034120    e   n   t   s       e   q       2       t   h   e   n       C
0034140    l   o   s   e   s   (   O   u   t   F   i   l   e   )        
0034160    /   /   c   l   o   s   e       o   u   t   p   u   t       o
0034200    f       n   o   t       P   r   e   s   c   a   n  \r  \t   r
0034220    e   s   u   l   t   i   s       t   r   u   e  \r   ]  \r   l
0034240    e   t       L       =       B   a   d   I   t   e   m   s    
0034260        /   /   n   o   w       r   e   p   o 376 001  \0   5 316
0034300    r   t       a   n   y       a   r   r   o   r   s       f   o
0034320    u   n   d       w   h   i   l   e       r   e   a   d   i   n
0034340    g       f   i   l   e       i   n  \r   [  \r  \t   i   f    
0034360    L       e   q       0       t   h   e   n       b   r   e   a
0034400    k  \r  \t   s   w   i   t   c   h   o   n       L   >   >   n
0034420    o   d   e   .   t   y   p   e       i   n   t   o  \r  \t   [
0034440   \r  \t  \t   c   a   s   e       3   :       E   r   r   x   y
0034460    (   L   >   >   n   o   d   e   .   x   ,   L   >   >   n   o
0034500    d   e   .   y   ,   "   M   a   l   f   o   r   m   e   d    
0034520    f   o   n   t       3       s   t   r   i   n   g   "   )  \r
0034540   \t  \t   e   n   d   c   a   s   e  \r  \r  \t  \t   c   a   s
0034560    e       4   :       E   r   r   x   y   (   L   >   >   n   o
0034600    d   e   .   x   ,   L   >   >   n   o   d   e   .   y   ,   "
0034620    F   o   n   t       4       s   t   r   i   n   g       m   o
0034640    r   e       t   h   a   n       o   n   e       c   h   a   r
0034660    a   c   t   e   r       l   o   n   g   "   )  \r  \t  \t   e
0034700  376 001  \0   U 231   n   d   c   a   s   e  \r  \r  \t  \t   c
0034720    a   s   e       5   :       E   r   r   x   y   (   L   >   >
0034740    n   o   d   e   .   x   ,   L   >   >   n   o   d   e   .   y
0034760    ,   "   C   o   m   p   o   n   e   n   t       m   o   r   e
0035000        t   h   a   n       o   n   e       c   h   a   r   a   c
0035020    t   e   r       l   o   n   g   "   )  \r  \t  \t   e   n   d
0035040    c   a   s   e 032   l   4   2   6   8  \r  \t   ]  \r  \t   L
0035060        =       L   >   >   i   t   e   m   .   l   i   n   k 032
0035100    l   4   2   6   8  \r   ]       r   e   p   e   a   t  \r   r
0035120    e   s   u   l   t   i   s       0  \r 032   l   4   2   6   8
0035140   \r  \r   ]  \r  \f  \r   a   n   d       D   o   u   s   e   r
0035160    m   a   c   r   o   (   o   b   j   ,   x   0   ,   y   0   )
0035200        b   e       /   /   e   x   p   a   n   d       a       u
0035220    s   e   r       m   a   c   r   o  \r   [ 032  \r   /   /   t
0035240    h   e       d   e   f   i   n   i   t   i   o   n       c   o
0035260    n   t   a   i   n   s       r   e   l   a   t   i   v   i   z
0035300    e   d       c   o 376 001  \0   # 342   o   r   d   i   n   a
0035320    t   e   s   .           E   x   p   a   n   d  \r   /   /   a
0035340    t       t   h   e       p   o   i   n   t       x   ,   y   :
0035360   \r   l   e   t       x       =       x   0       +       o   b
0035400    j   >   >   i   t   e   m   .   x   m   i   n  \r   l   e   t
0035420        y       =       y   0       +       o   b   j   >   >   i
0035440    t   e   m   .   y   m   i   n  \r  \r   /   /   t   h   e    
0035460    s   t   r   i   n   g       m   u   s   t       b   e       e
0035500    x   a   c   t   l   y       o   n   e       c   h   a   r   a
0035520    c   t   e   r       l   o   n   g  \r   i   f       o   b   j
0035540    >   >   i   t   e   m   .   s   t   r   i   n   g   .   l   e
0035560    n   g   t   h       n   e       1       t   h   e   n  \r   [
0035600  032   l   4   2   6   8  \r   A   d   d   B   a   d   I   t   e
0035620    m   (   x   ,   y   ,   4   )  \r   r   e   t   u   r   n 032
0035640    l   5   5   3   8  \r   ]  \r  \r   l   e   t       c   h    
0035660    =       o   b   j   >   >   i   t   e   m   .   s   t   r   i
0035700    n   g   .   c   h   a   r   ^   1  \r 376 001  \0   = 307   l
0035720    e   t       l   i   n   k       =       M   a   c   t   !   c
0035740    h  \r  \r   /   /   t   h   e       m   a   c   r   o       m
0035760    u   s   t       b   e       d   e   f   i   n   e   d  \r   i
0036000    f       l   i   n   k       e   q       0       t   h   e   n
0036020   \r   [ 032   l   4   2   6   8  \r   E   r   r   x   y   (   x
0036040    ,   y   ,   "   F   o   n   t       4       m   a   c   r   o
0036060        h   a   s       n   o       d   e   f   i   n   i   t   i
0036100    o   n   "   )  \r   r   e   t   u   r   n 032   l   5   5   3
0036120    8  \r   ]  \r  \r  \r   u   n   t   i   l       l   i   n   k
0036140        e   q       0       d   o       /   /   g   r   i   n   d
0036160        d   o   w   n       t   h   e       d   e   f   i   n   i
0036200    t   i   o   n  \r   [ 032   l   4   2   6   8  \r   l   e   t
0036220        t   l       =       l   i   n   k   ;       l   i   n   k
0036240        =       l   i   n   k   >   >   i   t   e   m   .   l   i
0036260    n   k  \r   l   e   t       f   o   n   t       =       t   l
0036300    >   >   i   t   e   m   .   f   o   n   t  \r   i   f     376
0036320  001  \0   T 365   f   o   n   t       l   s       8       t   h
0036340    e   n       [       f   o   n   t       =       f   o   n   t
0036360    /   2   ;       i   f       t   l   >   >   i   t   e   m   .
0036400    i   t   a   l   i   c       t   h   e   n       f   o   n   t
0036420        =       2       ]  \r   s   w   i   t   c   h   o   n    
0036440    f   o   n   t       i   n   t   o  \r   [ 032   l   5   5   3
0036460    8  \r   c   a   s   e       1   :       D   o   f   o   n   t
0036500    1   s   t   r   i   n   g   (   t   l   ,   x   ,   y   )   ;
0036520    l   o   o   p  \r   c   a   s   e       3   :       D   o   f
0036540    o   n   t   3   s   t   r   i   n   g   (   t   l   ,   x   ,
0036560    y   )   ;   l   o   o   p  \r   c   a   s   e       1   4   :
0036600        D   o   r   e   c   t   a   n   g   l   e   (   t   l   ,
0036620    x   ,   y   )   ;   l   o   o   p  \r   c   a   s   e       8
0036640    :       D   o   u   s   e   r   m   a   c   r   o   (   t   l
0036660    ,   x   ,   y   )   ;   l   o   o   p  \r   c   a   s   e    
0036700    9   :  \r   c   a   s   e       1   0   :  \r   c   a   s   e
0036720        1   1   : 376 001  \0   b   }  \r   c   a   s   e       1
0036740    2   :  \r   c   a   s   e       1   3   :       D   o   c   o
0036760    m   p   o   n   e   n   t   (   t   l   ,   x   ,   y   )   ;
0037000    l   o   o   p  \r   d   e   f   a   u   l   t   :       l   o
0037020    o   p  \r 032   l   6   8   0   8  \r   ] 032   l   5   5   3
0037040    8  \r   ]  \r  \r 032   l   4   2   6   8  \r   ]  \r  \r   a
0037060    n   d       E   r   r   x   y   (   x   ,   y   ,   s   t   r
0037100    ,   s   t   r   2   ,   s   e   v   e   r   i   t   y   ;    
0037120    n   u   m   a   r   g   s       n   a   )       b   e  \r   [
0037140  032  \r   i   f       n   a       l   s       5       t   h   e
0037160    n       s   e   v   e   r   i   t   y       =       s   e   r
0037200    i   o   u   s  \r   l   e   t       v       =       v   e   c
0037220        1   2   8   ;       v   !   0       =       0  \r   A   p
0037240    p   e   n   d   S   (   "   *   n   (   "   ,   v   )  \r   A
0037260    p   p   e   n   d   N   (   x   ,   v   )  \r   A   p   p   e
0037300    n   d   C   (   $   ,   ,   v   )  \r   A   p   p   e   n   d
0037320    N   (   y   ,   v   )  \r   A   p 376 001  \0   # 332   p   e
0037340    n   d   S   (   "   )           "   ,   v   )  \r   A   p   p
0037360    e   n   d   S   (   s   t   r   ,   v   )  \r   i   f       n
0037400    a       g   r       3       t   h   e   n       A   p   p   e
0037420    n   d   S   (   s   t   r   2   ,   v   )  \r   E   r   r   (
0037440    v   ,       s   e   v   e   r   i   t   y   )  \r   ]  \r  \r
0037460    a   n   d       E   r   r   2   (   s   1   ,   s   2   ,   s
0037500    e   v   e   r   i   t   y   ;       n   u   m   a   r   g   s
0037520        n   a   )       b   e  \r   [ 032  \r   i   f       n   a
0037540        l   s       3       t   h   e   n       s   e   v   e   r
0037560    i   t   y       =       s   e   r   i   o   u   s  \r   E   r
0037600    r   (   s   1   ,       s   e   v   e   r   i   t   y   )  \r
0037620    E   r   r   (   s   2   ,       s   e   v   e   r   i   t   y
0037640    ) 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       E
0037660    r   r   (   s   1   ,       s   e   v   e   r   i   t   y   ;
0037700        n   u   m   a   r   g   s       n   a   )       b   e  \r
0037720    [ 032  \r   i   f       n   a       l   s       2     376 001
0037740   \0   A   ?   t   h   e   n       s   e   v   e   r   i   t   y
0037760        =       s   e   r   i   o   u   s  \r   W   s   s   (   E
0040000    r   F   i   l   e   ,       s   1   )  \r   E   r   r   o   r
0040020    A   t   S   e   v   e   r   i   t   y   (   s   e   v   e   r
0040040    i   t   y   ) 032   l   4   2   6   9  \r   ]  \r 032  \r   a
0040060    n   d       M   a   k   e   F   i   l   e   N   a   m   e   (
0040100    v   ,       f   n   a   m   e   ,       e   x   t   )       b
0040120    e  \r   [ 032  \r   M   o   v   e   B   l   o   c   k   (   v
0040140    ,       f   n   a   m   e   ,       1   0   0   )  \r   l   e
0040160    t       j       =       0  \r   f   o   r       i   =   1    
0040200    t   o       f   n   a   m   e   >   >   s   t   r   .   l   e
0040220    n   g   t   h       d   o       [       i   f       f   n   a
0040240    m   e   >   >   s   t   r   .   c   h   a   r   ^   i       e
0040260    q       $   .       t   h   e   n       b   r   e   a   k   ;
0040300        j   =   i       ]  \r   v   >   >   s   t   r   .   l   e
0040320    n   g   t   h       =       j  \r   A   p   p   e   n   d   S
0040340    (   e   x 376 001  \0   ^   U   t   ,   v   )       /   /   a
0040360    d   d       t   h   e       e   x   t   e   n   s   i   o   n
0040400  032   l   4   2   6   9  \r   ]  \r  \r   a   n   d       G   e
0040420    t   F   i   l   e   (   f   n   a   m   e   ,   e   x   t   ,
0040440    b   y   t   e   w   o   r   d   )       =       v   a   l   o
0040460    f       /   /   1       f   o   r       b   y   t   e   s   ,
0040500    0       f   o   r       w   o   r   d   s  \r   [ 032  \r   l
0040520    e   t       v       =       v   e   c       1   2   8  \r   M
0040540    a   k   e   F   i   l   e   N   a   m   e   (   v   ,       f
0040560    n   a   m   e   ,       e   x   t   )  \r   l   e   t       s
0040600    t   r   e   a   m       =       O   p   e   n   F   i   l   e
0040620    (   v   ,   k   s   T   y   p   e   W   r   i   t   e   O   n
0040640    l   y   ,   b   y   t   e   w   o   r   d   ,   0   ,   0   ,
0040660    0   ,   S   i   l   Z   o   n   e   )  \r   i   f       s   t
0040700    r   e   a   m       e   q       0       t   h   e   n       C
0040720    a   l   l   S   w   a   t   (   "   C   a   n   '   t       O
0040740    p   e   n       "   ,   v   ) 376 001  \0 323   T  \r   r   e
0040760    s   u   l   t   i   s       s   t   r   e   a   m 032   l   4
0041000    2   6   8  \r   ]  \r  \r   a   n   d       G   e   t   N   u
0041020    m   (   s   t   r   )       =   v   a   l   o   f  \r   [ 032
0041040   \r   i   f       s   t   r   >   >   s   t   r   .   l   e   n
0041060    g   t   h       e   q       0       t   h   e   n       r   e
0041100    s   u   l   t   i   s       t   r   u   e  \r   l   e   t    
0041120    v   a   l   ,   c   n   t   =   0   ,   0  \r   f   o   r    
0041140    p   t   r       =       1       t   o       s   t   r   >   >
0041160    s   t   r   .   l   e   n   g   t   h       d   o  \r   [ 032
0041200    l   4   2   6   9  \r   l   e   t       c   h   a   r       =
0041220    s   t   r   >   >   s   t   r   .   c   h   a   r   ^   p   t
0041240    r      \r   i   f       c   h   a   r       g   e       $   0
0041260        &       c   h   a   r       l   e       $   9       t   h
0041300    e   n       [       v   a   l       =       v   a   l   *   1
0041320    0       +       c   h   a   r       -       $   0   ;       c
0041340    n   t   =   c   n   t   +   1       ] 032   l   5 376  \0   b
0041360    B   H   5   3   9  \r   ]  \r   i   f       c   n   t       e
0041400    q       0       t   h   e   n       r   e   s   u   l   t   i
0041420    s       t   r   u   e  \r   r   e   s   u   l   t   i   s    
0041440    v   a   l       &       #   7   7   7   7   7           /   /
0041460    m   a   k   e       s   u   r   e       m   y       i   s    
0041500    p   o   s   i   t   i   v   e 032   l   4   2   6   9  \r   ]
0041520   \r  \r 032  \r 377  \0  \0   a   n   b   .   b   c   p   l  \0
0041540  376 001  \0 221   3   /   /   a   n   b   .   b   c   p   l  \r
0041560    /   /   n   e   w       a   n   a   l   y   z   e   r       f
0041600    o   r       s   i   l       f   i   l   e   s  \r  \r   /   /
0041620        l   a   s   t       m   o   d   i   f   i   e   d       b
0041640    y       E   .       M   c   C   r   e   i   g   h   t       N
0041660    o   v   e   m   b   e   r       2   3   ,       1   9   7   7
0041700            9   :   3   3       A   M  \r  \r   g   e   t       "
0041720    S   y   s   D   e   f   s   .   d   "  \r   g   e   t       "
0041740    A   l   t   o   F   i   l   e   S   y   s   .   d   "  \r   g
0041760    e   t       "   A   n   a   .   d   e   f   s   "  \r  \r   /
0042000    /       S       Y       M       B       O       L            
0042020    T       A       B       L       E           S       T       U
0042040        F       F      \r  \r   l   e   t       D   e   f   i   n
0042060    e   S   y   m   b   o   l   (   s   t   r   ,   t   y   p   e
0042100    )       =       v   a   l   o   f       /   /   r   e   t   u
0042120    r   n   s       p   o   i   n   t   e   r       t   o       s
0042140    t   r   e   c  \r 376 001  \0 376   ]   [ 032   (   6   3   5
0042160    )  \r   l   e   t       s   t   p       =       L   o   o   k
0042200    u   p   (   s   t   r   )  \r   i   f       s   t   p       n
0042220    e       0       d   o  \r   [ 032   l   4   2   6   8  \r   i
0042240    f       s   t   p   >   >   s   t   r   e   c   .   t   y   p
0042260    e       n   e       t   y   p   e       t   h   e   n  \r   E
0042300    r   r   2   (   "   *   n   M   u   l   t   i   p   l   e    
0042320    d   e   f   i   n   i   t   i   o   n       f   o   r       s
0042340    y   m   b   o   l   :       "   ,   s   t   r   )  \r   s   t
0042360    p   >   >   s   t   r   e   c   .   u   c   n   t       =    
0042400    s   t   p   >   >   s   t   r   e   c   .   u   c   n   t    
0042420    +       1  \r   r   e   s   u   l   t   i   s       s   t   p
0042440  032   l   5   5   3   8  \r   ]  \r  \r   l   e   t       h    
0042460    =       H   a   s   h   (   s   t   r   )       /   /   p   l
0042500    a   c   e       i   n       s   y   m   b   o   l       t   a
0042520    b   l   e       f   o   r       t   h   i   s       s   t   r
0042540    i   n   g  \r  \r   l   e   t       l 376 001  \0 261 345    
0042560    =       s   t   r   >   >   s   t   r   .   l   e   n   g   t
0042600    h  \r   l   e   t       s   z       =       (   o   f   f   s
0042620    e   t       s   t   r   e   c   .   s   t   )   /   1   6    
0042640    +       l   /   2       +   1  \r   C   h   e   c   k   F   i
0042660    t   (   s   z   )       /   /   s   e   e       i   f       t
0042700    h   e   r   e       i   s       e   n   o   u   g   h       r
0042720    o   o   m  \r  \r   N   e   w   I   t   e   m   >   >   s   t
0042740    r   e   c   .   l   i   n   k       =       @   h  \r   @   h
0042760        =       N   e   w   I   t   e   m  \r  \r   N   e   w   I
0043000    t   e   m   >   >   s   t   r   e   c   .   t   y   p   e    
0043020    =       t   y   p   e  \r   N   e   w   I   t   e   m   >   >
0043040    s   t   r   e   c   .   r   n   a   m   e       =       0  \r
0043060    N   e   w   I   t   e   m   >   >   s   t   r   e   c   .   u
0043100    c   n   t       =       1  \r   N   e   w   I   t   e   m   >
0043120    >   s   t   r   e   c   .   p   i   n   s   d   n       =    
0043140    0  \r   N   e   w   I   t   e   m   >   >   s   t   r   e 376
0043160  001  \0 325   0   c   .   s   t   .   l   e   n   g   t   h    
0043200    =       l  \r   f   o   r       i       =       1       t   o
0043220        l       d   o       N   e   w   I   t   e   m   >   >   s
0043240    t   r   e   c   .   s   t   .   c   h   a   r   ^   i       =
0043260        s   t   r   >   >   s   t   r   .   c   h   a   r   ^   i
0043300   \r   N   e   w   I   t   e   m   =       N   e   w   I   t   e
0043320    m   +   s   z  \r   r   e   s   u   l   t   i   s       @   h
0043340  032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       L   o
0043360    o   k   u   p   (   s   t   r   )       =       v   a   l   o
0043400    f       /   /   r   e   t   u   r   n   s       s   t   p    
0043420    i   f       d   e   f   i   n   e   d   ,       e   l   s   e
0043440        0  \r   [ 032  \r   l   e   t       l   i   n   k       =
0043460        H   a   s   h   (   s   t   r   )  \r   u   n   t   i   l
0043500        l   i   n   k       e   q       0       d   o  \r   [ 032
0043520    l   4   2   6   8  \r   i   f       S   t   E   q   (   s   t
0043540    r   ,   l   v   (   l   i   n   k   >   >   s   t   r   e   c
0043560    .   s   t   ) 376 001  \0 033   A   )       t   h   e   n    
0043600    r   e   s   u   l   t   i   s       l   i   n   k  \r   l   i
0043620    n   k       =       l   i   n   k   >   >   s   t   r   e   c
0043640    .   l   i   n   k 032   l   5   5   3   8  \r   ]  \r   r   e
0043660    s   u   l   t   i   s       0 032   l   4   2   6   8  \r   ]
0043700   \r  \r   a   n   d       H   a   s   h   (   s   t   r   )    
0043720    =       v   a   l   o   f  \r   [ 032  \r   l   e   t       r
0043740        =       0  \r   f   o   r       i       =       1       t
0043760    o       s   t   r   >   >   s   t   r   .   l   e   n   g   t
0044000    h       d   o       r       =       r   +   (   s   t   r   >
0044020    >   s   t   r   .   c   h   a   r   ^   i   )  \r   r   e   s
0044040    u   l   t   i   s       h   a   s   h   t   a   b       +    
0044060    (   r       r   e   m       h   t   s   i   z   e   )  \r 032
0044100    l   4   2   6   8  \r   ]  \r  \r   a   n   d       S   t   E
0044120    q   (   s   1   ,   s   2   ,   u   l   E   q   u   a   l   ;
0044140        n   u   m   a   r   g   s       n   a   )       =       v
0044160    a   l   o   f       /   /   s   t 376 001  \0 222   Q   r   i
0044200    n   g       c   o   m   p   a   r   e  \r   [ 032  \r   i   f
0044220        s   1   >   >   s   t   r   .   l   e   n   g   t   h    
0044240    n   e       s   2   >   >   s   t   r   .   l   e   n   g   t
0044260    h       t   h   e   n       r   e   s   u   l   t   i   s    
0044300    f   a   l   s   e  \r   u   l   E   q   u   a   l   =   (   n
0044320    a       n   e       2   )   ?       1   7   7   7   3   7   b
0044340    ,   -   1  \r   f   o   r       i       =       1       t   o
0044360        s   1   >   >   s   t   r   .   l   e   n   g   t   h    
0044400    d   o  \r   i   f       (   (   s   1   >   >   s   t   r   .
0044420    c   h   a   r   ^   i       x   o   r       s   2   >   >   s
0044440    t   r   .   c   h   a   r   ^   i   )   &   u   l   E   q   u
0044460    a   l   )       n   e       0       t   h   e   n       r   e
0044500    s   u   l   t   i   s       f   a   l   s   e  \r   r   e   s
0044520    u   l   t   i   s       t   r   u   e 032   l   4   2   6   8
0044540   \r   ]  \r 032  \r   a   n   d       A   p   p   e   n   d   B
0044560    (   n   u   m   ,       s   t   r   )       b   e  \t 376 001
0044600   \0 223 344   /   /   o   c   t   a   l       n   u   m   b   e
0044620    r   ,       n   o       z   e   r   o       s   u   p   p   r
0044640    e   s   s   i   o   n  \r   [ 032  \r   f   o   r       i    
0044660    =       1   5       t   o       0       b   y       -   3    
0044700    d   o  \r   A   p   p   e   n   d   C   (   (   (   n   u   m
0044720        r   s   h   i   f   t       i   )   &   7   )   +   $   0
0044740    ,   s   t   r   ) 032   l   4   2   6   9  \r   ]  \r  \r  \r
0044760    /   /       P       R       O       C       E       S       S
0045000            V       A       R       I       O       U       S    
0045020        I       N       P       U       T           B       L    
0045040    O       C       K       S      \r  \r   a   n   d       D   o
0045060    r   e   c   t   a   n   g   l   e   (   o   b   j   ,   x   ,
0045100    y   )       b   e  \r   [ 032  \r   l   e   t       d   e   l
0045120    x       =       o   b   j   >   >   i   t   e   m   .   x   m
0045140    a   x   -   o   b   j   >   >   i   t   e   m   .   x   m   i
0045160    n  \r   l   e   t       d   e   l   y       =       o   b   j
0045200    >   >   i 376 001  \0   G   1   t   e   m   .   y   m   a   x
0045220    -   o   b   j   >   >   i   t   e   m   .   y   m   i   n  \r
0045240    l   e   t       l   i   s   t       =       0  \r   i   f    
0045260    d   e   l   x       e   q       1       t   h   e   n       l
0045300    i   s   t       =       l   v       V   l   i   n   e   s  \r
0045320    i   f       d   e   l   y       e   q       1       t   h   e
0045340    n       l   i   s   t       =       l   v       H   l   i   n
0045360    e   s  \r   i   f       l   i   s   t       e   q       0    
0045400    t   h   e   n       r   e   t   u   r   n       /   /   r   e
0045420    j   e   c   t       l   i   n   e   w   i   d   t   h   s    
0045440    #       1  \r   A   d   d   L   E   (   l   i   s   t   ,   x
0045460    +   o   b   j   >   >   i   t   e   m   .   x   m   i   n   ,
0045500    y   +   o   b   j   >   >   i   t   e   m   .   y   m   i   n
0045520    ,   N   e   w   I   t   e   m   +   b   l   L   e   n   d   ,
0045540    0   ,   0   )  \r   A   d   d   L   E   (   l   i   s   t   ,
0045560    x   +   o   b   j   >   >   i   t   e   m   .   x   m   a   x
0045600    ,   y   +   o   b   j   >   > 376 001  \0   m   @   i   t   e
0045620    m   .   y   m   a   x   ,   N   e   w   I   t   e   m   -   b
0045640    l   L   e   n   d   ,   0   ,   0   )  \r 032   l   4   2   6
0045660    8  \r   ]  \r  \r   a   n   d       A   d   d   L   E   (   l
0045700    i   s   t   ,   x   ,   y   ,   c   p   0   ,   c   p   1   ,
0045720    c   p   2   )       b   e       /   /   a   d   d       b   l
0045740    o   c   k       f   o   r       l   i   n   e       e   n   d
0045760    p   o   i   n   t  \r   [ 032  \r   C   h   e   c   k   F   i
0046000    t   (   b   l   L   e   n   d   )       /   /   p   u   n   t
0046020        i   f       n   o   t       e   n   o   u   g   h       s
0046040    p   a   c   e  \r  \r   N   e   w   I   t   e   m   >   >   l
0046060    e   n   d   .   l   i   n   k       =       @   l   i   s   t
0046100   \r   @   l   i   s   t       =       N   e   w   I   t   e   m
0046120   \r  \r   N   e   w   I   t   e   m   >   >   l   e   n   d   .
0046140    t   y   p   e       =       b   t   L   e   n   d  \r   N   e
0046160    w   I   t   e   m   >   >   l   e   n   d   .   x       =    
0046200    x  \r   N   e   w   I   t   e   m   >   >   l   e 376 001  \0
0046220  346 033   n   d   .   y       =       y  \r   N   e   w   I   t
0046240    e   m   >   >   l   e   n   d   .   m   a   r   k   e   d    
0046260    =       0  \r   N   e   w   I   t   e   m   >   >   l   e   n
0046300    d   .   h   a   s   s   i   g       =       0  \r   N   e   w
0046320    I   t   e   m   >   >   l   e   n   d   .   c   p   ^   0    
0046340    =       c   p   0  \r   N   e   w   I   t   e   m   >   >   l
0046360    e   n   d   .   c   p   ^   1       =       c   p   1  \r   N
0046400    e   w   I   t   e   m   >   >   l   e   n   d   .   c   p   ^
0046420    2       =       c   p   2  \r  \r   N   e   w   I   t   e   m
0046440        =       N   e   w   I   t   e   m   +   b   l   L   e   n
0046460    d 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       D
0046500    o   f   o   n   t   1   s   t   r   i   n   g   (   o   b   j
0046520    ,   x   ,   y   )       b   e  \r   [ 032  \r   l   e   t    
0046540    s   l       =       o   b   j   >   >   i   t   e   m   .   s
0046560    t   r   i   n   g   .   l   e   n   g   t   h  \r   l   e   t
0046600        s   p       =       l   v   (   o   b   j   >   >   i   t
0046620    e   m 376 001  \0   c 216   .   s   t   r   i   n   g   )  \r
0046640    l   e   t       b   o   a   r   d   l   o   c       =       0
0046660   \r   l   e   t       g   o   t   n   u   m       =       t   r
0046700    u   e  \r  \r   /   /   t   r   y       t   o       i   n   t
0046720    e   r   p   r   e   t       t   h   e       s   t   r   i   n
0046740    g       a   s       a       n   u   m   b   e   r  \r   f   o
0046760    r       i       =       1       t   o       s   l       d   o
0047000   \r   [ 032   l   4   2   6   8  \r   l   e   t       c   h    
0047020    =       s   p   >   >   s   t   r   .   c   h   a   r   ^   i
0047040   \r   i   f       (   c   h       l   s       $   0   )   %   (
0047060    c   h       g   r       $   9   )       t   h   e   n  \r   [
0047100  032   l   5   5   3   8  \r   g   o   t   n   u   m       =    
0047120    f   a   l   s   e  \r   b   r   e   a   k 032   l   6   8   0
0047140    8  \r   ]  \r   b   o   a   r   d   l   o   c       =       b
0047160    o   a   r   d   l   o   c   *   1   0   +   (   c   h   -   $
0047200    0   )  \r 032   l   5   5   3   8  \r   ]  \r  \r   i   f    
0047220    g   o   t   n   u   m     376 001  \0 326 376   t   h   e   n
0047240        [       A   d   d   N   o   d   e   (   l   v       N   u
0047260    m   b   e   r   s   ,   o   b   j   ,   x   ,   y   ,   b   t
0047300    N   u   m   ,   b   o   a   r   d   l   o   c   )   ;       r
0047320    e   t   u   r   n       ]      \r  \r   b   o   a   r   d   l
0047340    o   c       =       0  \r   /   /   t   r   y       t   o    
0047360    i   n   t   e   r   p   r   e   t       t   h   e       s   t
0047400    r   i   n   g       a   s       a       b   o   a   r   d   l
0047420    o   c   /   g   r   o   u   p       o   f       t   h   e    
0047440    f   o   r   m       l   n   l       (   s   m   a   l   l    
0047460    l   e   t   t   e   r   s  \r   /   /   a   n   d       n   u
0047500    m   b   e   r   s   )   .           I   f       t   h   e    
0047520    f   i   n   a   l       l   e   t   t   e   r       (   t   h
0047540    e       g   r   o   u   p       l   e   t   t   e   r   )    
0047560    i   s       a   b   s   e   n   t   ,       i   t       i   s
0047600        d   e   f   a   u   l   t   e   d  \r   /   /   t   o    
0047620    '   a   '   ,       w   h   i   c   h       i 376 001  \0 026
0047640   \v   s       u   s   e   d       w   h   e   n       a   n    
0047660    i   c       c   o   n   s   i   s   t   s       o   f       o
0047700    n   l   y       o   n   e       g   r   o   u   p   .       A
0047720    n   y       s   t   r   i   n   g  \r   /   /   b   e   g   i
0047740    n   n   i   n   g       w   i   t   h       "   #   "       i
0047760    s       a   l   s   o       d   e   f   i   n   e   d       a
0050000    s       a       b   o   a   r   d   l   o   c   ,       i   n
0050020        w   h   i   c   h       c   a   s   e       t   h   e    
0050040    f   i   n   a   l  \r   /   /   c   h   a   r   a   c   t   e
0050060    r   ,       i   f       a   l   p   h   a   b   e   t   i   c
0050100    ,       i   s       t   a   k   e   n       a   s       t   h
0050120    e       g   r   o   u   p   .  \r  \r   i   f       (   s   l
0050140        g   r       1   )       t   h   e   n       w   h   i   l
0050160    e       t   r   u   e       d   o  \r   [ 032   l   4   2   6
0050200    8  \r   l   e   t       b   o   a   r   d   l   o   c   s   t
0050220    r       =       v   e   c       1   3   0  \r   f   o   r    
0050240    i 376 001  \0   } 215   =   1       t   o       s   l       d
0050260    o       b   o   a   r   d   l   o   c   s   t   r   >   >   s
0050300    t   r   .   c   h   a   r   ^   i       =       s   p   >   >
0050320    s   t   r   .   c   h   a   r   ^   i  \r   l   e   t       l
0050340    e   n       =       s   l  \r   l   e   t       g   r   o   u
0050360    p       =       1       /   /       d   e   f   a   u   l   t
0050400        =       g   r   o   u   p       "   a   "  \r   i   f    
0050420    l   e   n       g   r       1       t   h   e   n  \r   [ 032
0050440    l   5   5   3   8  \r   l   e   t       f   i   n   a   l   c
0050460    h   a   r       =       b   o   a   r   d   l   o   c   s   t
0050500    r   >   >   s   t   r   .   c   h   a   r   ^   l   e   n  \r
0050520    i   f       L   e   t   V   a   l   (   f   i   n   a   l   c
0050540    h   a   r   )       g   e       0       t   h   e   n  \r   [
0050560  032   l   6   8   0   8  \r   g   r   o   u   p       =       L
0050600    e   t   V   a   l   (   f   i   n   a   l   c   h   a   r   )
0050620   \r   l   e   n       =       l   e   n   -   1 032   l   8   0
0050640    7   8  \r   ] 032   l 376 001  \0   r 345   6   8   0   8  \r
0050660    ]  \r  \r   i   f       s   p   >   >   s   t   r   .   c   h
0050700    a   r   ^   1       n   e       $   #       t   h   e   n  \r
0050720    [ 032   l   5   5   3   8  \r   i   f       L   e   t   V   a
0050740    l   (   s   p   >   >   s   t   r   .   c   h   a   r   ^   1
0050760    )       l   s       0       t   h   e   n       b   r   e   a
0051000    k  \r   l   e   t       i   =   2  \r   w   h   i   l   e    
0051020    (   N   u   m   V   a   l   (   s   p   >   >   s   t   r   .
0051040    c   h   a   r   ^   i   )       g   e       0   )   &   (   i
0051060        l   e       l   e   n   )       d   o       i   =   i   +
0051100    1  \r   i   f       (   i       e   q       2   )   %   (   i
0051120        l   e       l   e   n   )       t   h   e   n       b   r
0051140    e   a   k  \r  \r   w   h   i   l   e       l   e   n       l
0051160    s       3       d   o  \r   [       /   /       f   o   r   c
0051200    e       a   t       l   e   a   s   t       t   w   o       d
0051220    i   g   i   t   s       b   y       a   d   d   i   n   g    
0051240    l   e   a   d   i   n   g       z   e   r 376 001  \0   L 304
0051260    o   s 032   l   6   8   0   8  \r   f   o   r       i   =   l
0051300    e   n       t   o       2       d   o  \r       b   o   a   r
0051320    d   l   o   c   s   t   r   >   >   s   t   r   .   c   h   a
0051340    r   ^   (   i   +   1   )       =       b   o   a   r   d   l
0051360    o   c   s   t   r   >   >   s   t   r   .   c   h   a   r   ^
0051400    i  \r   b   o   a   r   d   l   o   c   s   t   r   >   >   s
0051420    t   r   .   c   h   a   r   ^   2       =       $   0  \r   l
0051440    e   n       =       l   e   n   +   1 032   l   8   0   7   8
0051460   \r   ]  \r   i   f       l   e   n       g   r       3       t
0051500    h   e   n       b   r   e   a   k       /   /       n   o   t
0051520        l   e   g   a   l       b   o   a   r   d       p   o   s
0051540    i   t   i   o   n 032   l   6   8   0   8  \r   ]  \r  \r   b
0051560    o   a   r   d   l   o   c   s   t   r   >   >   s   t   r   .
0051600    l   e   n   g   t   h       =       l   e   n  \r   A   d   d
0051620    N   o   d   e   (   l   v       L   o   c   g   r   o   u   p
0051640    s   ,   o   b   j   ,   x   ,   y   ,   b   t   L   o   c   g
0051660  376 001  \0   t 353   r   o   u   p   s   ,   D   e   f   i   n
0051700    e   S   y   m   b   o   l   (   b   o   a   r   d   l   o   c
0051720    s   t   r   ,  \r       s   t   B   r   d   l   o   c   )   ,
0051740    g   r   o   u   p   )  \r   r   e   t   u   r   n 032   l   5
0051760    5   3   8  \r   ]  \r  \r   /   /   w   e       h   a   v   e
0052000        a       t   e   x   t       s   t   r   i   n   g   .    
0052020        p   u   t       i   t       i   n       t   h   e       s
0052040    y   m   b   o   l       t   a   b   l   e       w   i   t   h
0052060        t   y   p   e  \r   /   /   s   i   g   n   a   l       n
0052100    a   m   e   ,       a   l   t   h   o   u   g   h       i   t
0052120        m   a   y       l   a   t   e   r       b   e       c   h
0052140    a   n   g   e   d       t   o       a   n       i   c       t
0052160    y   p   e       n   a   m   e  \r  \r   A   d   d   N   o   d
0052200    e   (   l   v       S   t   r   i   n   g   s   ,   o   b   j
0052220    ,   x   ,   y   ,   b   t   S   t   r   i   n   g   ,   D   e
0052240    f   i   n   e   S   y   m   b   o   l   (   s   p   ,   s   t
0052260    S   i   g   )   ) 376 001  \0 324   K       /   /   a   d   d
0052300        a       n   o   d   e       f   o   r       i   t 032   l
0052320    4   2   6   8  \r   ]  \r  \r   a   n   d       L   e   t   V
0052340    a   l   (   a   r   g   )   =       v   a   l   o   f  \r   [
0052360  032  \r   i   f       (   a   r   g       l   s       $   a   )
0052400    %   (   a   r   g       g   r       $   z   )       t   h   e
0052420    n       r   e   s   u   l   t   i   s       -   1  \r   r   e
0052440    s   u   l   t   i   s       (   a   r   g   -   $   a   +   1
0052460    ) 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       N
0052500    u   m   V   a   l   (   a   r   g   )   =       v   a   l   o
0052520    f  \r   [ 032  \r   i   f       (   a   r   g       l   s    
0052540    $   0   )   %   (   a   r   g       g   r       $   9   )    
0052560    t   h   e   n       r   e   s   u   l   t   i   s       -   1
0052600   \r   r   e   s   u   l   t   i   s       (   a   r   g   -   $
0052620    0   ) 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d    
0052640    D   o   f   o   n   t   3   s   t   r   i   n   g   (   o   b
0052660    j   ,   x   ,   y   )       b   e  \r 376 001  \0   ( 333   [
0052700  032  \r   /   /   c   h   e   c   k       f   o   r       s   i
0052720    n   g   l   e       s   p   e   c   i   a   l       c   h   a
0052740    r   a   c   t   e   r  \r   i   f       o   b   j   >   >   i
0052760    t   e   m   .   s   t   r   i   n   g   .   l   e   n   g   t
0053000    h       e   q       1       t   h   e   n  \r   [ 032   l   4
0053020    2   6   8  \r   l   e   t       c   h       =       o   b   j
0053040    >   >   i   t   e   m   .   s   t   r   i   n   g   .   c   h
0053060    a   r   ^   1  \r   i   f       s   e   l   e   c   t   o   n
0053100        c   h       i   n   t   o  \r   [ 032   l   5   5   3   8
0053120   \r   c   a   s   e       c   h   B   l   o   b   :  \r   c   a
0053140    s   e       c   h   E   p   i   n   :  \r   c   a   s   e    
0053160    c   h   C   p   i   n   :  \r   c   a   s   e       c   h   G
0053200    n   d   :  \r   c   a   s   e       c   h   P   s   e   u   d
0053220    :       t   r   u   e  \r   d   e   f   a   u   l   t   :    
0053240    f   a   l   s   e 032   l   6   8   0   8  \r   ]  \r   t   h
0053260    e   n 032   l   5   5   3   8  \r   [ 032   l   5   5   3 376
0053300  001  \0 262   7   8  \r   i   f       c   h       e   q       c
0053320    h   B   l   o   b       t   h   e   n       x   =   x   +   1
0053340            /   /   f   u   g   e       s   o       c   e   n   t
0053360    e   r       o   f       b   l   o   b       i   s       c   o
0053400    r   r   e   c   t  \r   A   d   d   N   o   d   e   (   l   v
0053420        S   c   h   a   r   s   ,   o   b   j   ,   x   ,   y   ,
0053440    b   t   S   c   h   a   r   ,   c   h   )  \r   r   e   t   u
0053460    r   n 032   l   6   8   0   8  \r   ]  \r 032   l   5   5   3
0053500    8  \r   ]  \r  \r   /   /   t   r   y       t   o       m   a
0053520    k   e       t   h   e       s   t   r   i   n   g       i   n
0053540    t   o       a       n   u   m   b   e   r  \r   l   e   t    
0053560    v   0       =       0  \r   f   o   r       i       =       1
0053600        t   o       o   b   j   >   >   i   t   e   m   .   s   t
0053620    r   i   n   g   .   l   e   n   g   t   h       d   o  \r   [
0053640  032   l   4   2   6   8  \r   l   e   t       n       =       o
0053660    b   j   >   >   i   t   e   m   .   s   t   r   i   n   g   .
0053700    c   h   a   r 376 001  \0   :   j   ^   i       -       $   0
0053720   \r   i   f       (   n       l   s       0   )       %       (
0053740    n       g   r       9   )       d   o  \r   [ 032   l   5   5
0053760    3   8  \r   A   d   d   B   a   d   I   t   e   m   (   x   +
0054000    (   o   b   j   >   >   i   t   e   m   .   x   m   i   n   )
0054020    ,   y   +   (   o   b   j   >   >   i   t   e   m   .   y   m
0054040    i   n   )   ,   3   )  \r   r   e   t   u   r   n 032   l   6
0054060    8   0   8  \r   ]  \r   v   0       =       (   v   0   *   1
0054100    0   )   +   n 032   l   5   5   3   8  \r   ]  \r   A   d   d
0054120    N   o   d   e   (   l   v       N   u   m   b   e   r   s   ,
0054140    o   b   j   ,   x   ,   y   ,   b   t   N   u   m   ,   v   0
0054160    ) 032   l   4   2   6   8  \r   ]  \r  \r 032  \r  \r  \r   a
0054200    n   d       A   d   d   N   o   d   e   (   l   i   s   t   ,
0054220    o   b   j   ,   x   ,   y   ,   b   t   y   p   e   ,   v   a
0054240    l   ,   v   a   l   2   ;       n   u   m   a   r   g   s    
0054260    n   a   )       b   e  \r   [ 032  \r   l   e   t       n   o
0054300    d   e   L   e   n       =       ( 376 001  \0  \v   W   n   a
0054320        g   r       6   )   ?   b   l   F   u   l   l   N   o   d
0054340    e   ,   b   l   B   a   s   i   c   N   o   d   e  \r  \r   C
0054360    h   e   c   k   F   i   t   (   n   o   d   e   L   e   n   )
0054400   \r  \r   N   e   w   I   t   e   m   >   >   n   o   d   e   .
0054420    l   i   n   k       =       @   l   i   s   t  \r   @   l   i
0054440    s   t       =       N   e   w   I   t   e   m  \r  \r   N   e
0054460    w   I   t   e   m   >   >   n   o   d   e   .   t   y   p   e
0054500        =       b   t   y   p   e  \r   N   e   w   I   t   e   m
0054520    >   >   n   o   d   e   .   u   s   e   d       =       0  \r
0054540    N   e   w   I   t   e   m   >   >   n   o   d   e   .   a   s
0054560    s   o   c       =       0       /   /   n   o   t       u   s
0054600    e   d       o   r       c   o   n   n   e   c   t   e   d    
0054620    t   o       a   n   y   t   h   i   n   g       y   e   t  \r
0054640    N   e   w   I   t   e   m   >   >   n   o   d   e   .   v   a
0054660    l       =       v   a   l  \r   i   f       n   a       g   r
0054700        6       t   h   e   n       N   e   w   I   t   e 376 001
0054720   \0   Y   n   m   >   >   n   o   d   e   .   v   a   l   2    
0054740    =       v   a   l   2  \r  \r   l   e   t       h       =    
0054760    (   o   b   j   >   >   i   t   e   m   .   y   m   a   x    
0055000    -       o   b   j   >   >   i   t   e   m   .   y   m   i   n
0055020    )   /   2  \r   l   e   t       w       =       (   o   b   j
0055040    >   >   i   t   e   m   .   x   m   a   x       -       o   b
0055060    j   >   >   i   t   e   m   .   x   m   i   n   )   /   2  \r
0055100   \r   N   e   w   I   t   e   m   >   >   n   o   d   e   .   x
0055120        =       o   b   j   >   >   i   t   e   m   .   x   m   i
0055140    n   +   x   +   w  \r   N   e   w   I   t   e   m   >   >   n
0055160    o   d   e   .   y       =       o   b   j   >   >   i   t   e
0055200    m   .   y   m   i   n   +   y   +   h  \r  \r   N   e   w   I
0055220    t   e   m   =   N   e   w   I   t   e   m   +   n   o   d   e
0055240    L   e   n 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d
0055260        A   d   d   B   a   d   I   t   e   m   (   x   ,   y   ,
0055300    t   y   p   e   )       b   e  \r   [ 032  \r   C   h   e   c
0055320    k   F   i 376 001  \0 340   k   t   (   b   l   B   a   s   i
0055340    c   N   o   d   e   )  \r  \r   N   e   w   I   t   e   m   >
0055360    >   n   o   d   e   .   l   i   n   k       =       B   a   d
0055400    I   t   e   m   s  \r   B   a   d   I   t   e   m   s       =
0055420        N   e   w   I   t   e   m  \r  \r   N   e   w   I   t   e
0055440    m   >   >   n   o   d   e   .   t   y   p   e       =       t
0055460    y   p   e  \r   N   e   w   I   t   e   m   >   >   n   o   d
0055500    e   .   x       =       x  \r   N   e   w   I   t   e   m   >
0055520    >   n   o   d   e   .   y       =       y  \r   N   e   w   I
0055540    t   e   m   =   N   e   w   I   t   e   m   +   b   l   B   a
0055560    s   i   c   N   o   d   e 032   l   4   2   6   8  \r   ]  \r
0055600   \r   a   n   d       C   h   e   c   k   F   i   t   (   w   r
0055620    d   s   )       b   e  \r   [ 032  \r   l   e   t       l    
0055640    =       N   e   w   I   t   e   m   +   w   r   d   s  \r   i
0055660    f       U   s   c   (   l   ,   S   p   a   c   e   T   o   p
0055700    )       g   r       0       t   h   e   n  \r   [ 032   l   4
0055720    2   6   8  \r   C   a   l   l 376 001  \0 201 260   S   w   a
0055740    t   (   "   S   p   a   c   e       E   x   h   a   u   s   t
0055760    e   d   "   )  \r   f   i   n   i   s   h 032   l   5   5   3
0056000    8  \r   ] 032   l   4   2   6   8  \r   ]  \r  \r  \r   a   n
0056020    d       D   o   c   o   m   p   o   n   e   n   t   (   o   b
0056040    j   ,   x   ,   y   )       b   e       /   /   w   e       h
0056060    a   v   e       a       l   i   b   r   a   r   y       m   a
0056100    c   r   o       c   a   l   l  \r   [ 032  \r   /   /   i   t
0056120        m   u   s   t       b   e       e   x   a   c   t   l   y
0056140        o   n   e       c   h   a   r   a   c   t   e   r       l
0056160    o   n   g  \r   i   f       o   b   j   >   >   i   t   e   m
0056200    .   s   t   r   i   n   g   .   l   e   n   g   t   h       n
0056220    e       1       t   h   e   n  \r   [ 032   l   4   2   6   8
0056240   \r   A   d   d   B   a   d   I   t   e   m   (   x   +   (   o
0056260    b   j   >   >   i   t   e   m   .   x   m   i   n   )   ,   y
0056300    +   (   o   b   j   >   >   i   t   e   m   .   y   m   i   n
0056320    )   ,   5   )  \r   r   e   t   u   r   n 032   l 376 001  \0
0056340  021 356   5   5   3   8  \r   ]  \r  \r   l   e   t       m   i
0056360    n   d   e   x       =       (   (   o   b   j   >   >   i   t
0056400    e   m   .   f   o   n   t   )   -   8   )   *   1   2   8    
0056420    +       o   b   j   >   >   i   t   e   m   .   s   t   r   i
0056440    n   g   .   c   h   a   r   ^   1  \r  \r   M   a   c   t   !
0056460    m   i   n   d   e   x       =       -   1       /   /   i   n
0056500    d   i   c   a   t   e       a       n   e   e   d       f   o
0056520    r       t   h   e       d   e   f   i   n   i   t   i   o   n
0056540   \r  \r   /   /   a   d   d       t   h   e       f   i   r   s
0056560    t       h   a   l   f       o   f       t   h   e       c   o
0056600    m   p   o   n   e   n   t       d   e   s   c   r   i   p   t
0056620    o   r       t   o       t   h   e       l   i   s   t  \r  \r
0056640    C   h   e   c   k   F   i   t   (   b   l   C   o   m   p   )
0056660   \r  \r   N   e   w   I   t   e   m   >   >   c   o   m   p   .
0056700    l   i   n   k       =       C   o   m   p   s  \r   C   o   m
0056720    p   s       =       N   e   w   I   t   e   m  \r  \r   N   e
0056740    w   I 376 001  \0 025   *   t   e   m   >   >   c   o   m   p
0056760    .   t   y   p   e       =       b   t   C   o   m   p  \r   N
0057000    e   w   I   t   e   m   >   >   c   o   m   p   .   x   m   i
0057020    n       =       x   +   o   b   j   >   >   i   t   e   m   .
0057040    x   m   i   n  \r   N   e   w   I   t   e   m   >   >   c   o
0057060    m   p   .   y   m   i   n       =       y   +   o   b   j   >
0057100    >   i   t   e   m   .   y   m   i   n  \r   N   e   w   I   t
0057120    e   m   >   >   c   o   m   p   .   x   m   a   x       =    
0057140    x   +   o   b   j   >   >   i   t   e   m   .   x   m   a   x
0057160   \r   N   e   w   I   t   e   m   >   >   c   o   m   p   .   y
0057200    m   a   x       =       y   +   o   b   j   >   >   i   t   e
0057220    m   .   y   m   a   x  \r   N   e   w   I   t   e   m   >   >
0057240    c   o   m   p   .   c   o   l   o   r       =       o   b   j
0057260    >   >   i   t   e   m   .   c   o   l   o   r  \r   N   e   w
0057300    I   t   e   m   >   >   c   o   m   p   .   m   i   n   d   e
0057320    x       =       m   i   n   d   e   x  \r   N   e   w   I   t
0057340    e   m   >   >   c   o   m 376 001  \0 207   A   p   .   p   i
0057360    n   s   d   o   n   e       =       0       /   /   u   s   e
0057400    d       t   o       k   n   o   w       w   h   e   n       t
0057420    o       s   t   o   p       r   e   a   d   i   n   g       d
0057440    i   c   t   i   o   n   a   r   y  \r   N   e   w   I   t   e
0057460    m   >   >   c   o   m   p   .   b   l   o   u   t       =    
0057500    0       /   /   u   s   e   d       t   o       a   v   o   i
0057520    d       s   e   n   d   i   n   g       t   y   p   e       n
0057540    a   m   e       f   o   r       e   a   c   h       g   r   o
0057560    u   p       d   u   r   i   n   g       o   u   t   p   u   t
0057600   \r   N   e   w   I   t   e   m   >   >   c   o   m   p   .   c
0057620    o   n   p   o   i   n   t   s       =       0       /   /   n
0057640    o       c   o   n   n   e   c   t   i   o   n       p   o   i
0057660    n   t   s       y   e   t  \r  \r   N   e   w   I   t   e   m
0057700        =       N   e   w   I   t   e   m   +   b   l   C   o   m
0057720    p  \r 032   l   4   2   6   8  \r   ]  \r  \r  \r  \r  \r   a
0057740    n   d       L   i   b   U   p   d   a   t   e 376 001  \0 235
0057760  206   (   f   o   n   t   ,   s   )       =       v   a   l   o
0060000    f       /   /   r   e   a   d       f   r   o   m       l   i
0060020    b   r   a   r   i   e   s       r   e   f   e   r   e   n   c
0060040    e   d       i   n       i   n   f   i   l   e  \r   [ 032  \r
0060060    l   e   t       m   b   a   s   e       =       (   (   f   o
0060100    n   t   -   8   )   *   1   2   8   )       +       M   a   c
0060120    t       /   /   s   t   a   r   t   i   n   g       l   o   c
0060140        i   n       M   a   c   t       f   o   r       t   h   i
0060160    s       f   o   n   t  \r   l   e   t       n   e   e   d    
0060200    =       f   a   l   s   e  \r   f   o   r       i       =    
0060220    0       t   o       1   2   7       d   o       i   f       (
0060240    m   b   a   s   e   !   i   )       e   q       -   1       t
0060260    h   e   n       n   e   e   d       =       t   r   u   e    
0060300   \r   u   n   l   e   s   s       n   e   e   d       t   h   e
0060320    n       /   /   t   h   i   s       f   o   n   t       d   i
0060340    d   '   n   t       h   a   v   e       a   n   y       u   n
0060360    d 376 001  \0 301   N   e   f   i   n   e   d       m   a   c
0060400    r   o   s  \r  \t   [       i   f       s       n   e       0
0060420        t   h   e   n       C   l   o   s   e   s   (   s   )   ;
0060440        r   e   s   u   l   t   i   s       f   a   l   s   e    
0060460    ]  \r  \r   i   f       s       e   q       0       t   h   e
0060500    n  \r   [  \r  \t   s       =       O   p   e   n   F   i   l
0060520    e   (   0   ,   k   s   T   y   p   e   R   e   a   d   O   n
0060540    l   y   ,   0   ,   0   ,   L   p   r   v   e   c   +   D   i
0060560    r   P   r   e   a   m   b   l   e   S   i   z   e   *   (   f
0060600    o   n   t   -   9   )   +   1   ,   0   ,   S   i   l   Z   o
0060620    n   e   )  \r  \t   i   f       s       e   q       0       t
0060640    h   e   n  \r  \t   [ 032   l   4   2   6   8  \r   l   e   t
0060660        m   s   g       =       "   C   a   n   '   t       O   p
0060700    e   n       L   i   b   r   a   r   y       n   u   m   b   e
0060720    r       N   ?   "  \r   m   s   g   >   >   s   t   r   .   c
0060740    h   a   r   ^   (   m   s   g   >   >   s   t   r   .   l   e
0060760    n   g   t   h   )     376 001  \0 006 223   =       f   o   n
0061000    t   -   4   +   $   0  \r   C   a   l   l   S   w   a   t   (
0061020    m   s   g   ) 032   l   5   5   3   8  \r  \t   ]  \r   ]  \r
0061040   \r   l   e   t       p   w       =       G   e   t   s   (   s
0061060    )   ;       i   f       (   p   w       n   e       #   3   4
0061100    5   6   2   )       &       (   p   w       n   e       #   3
0061120    4   5   6   3   )       t   h   e   n  \r   [  \r  \t   l   e
0061140    t       m   s   g       =       "   B   a   d       P   a   s
0061160    s   w   o   r   d       i   n       f   i   l   e       S   i
0061200    l   .   l   b   ?   "   ;       m   s   g   >   >   s   t   r
0061220    .   c   h   a   r   ^   (   m   s   g   >   >   s   t   r   .
0061240    l   e   n   g   t   h   )       =       f   o   n   t   -   4
0061260    +   $   0  \r  \t   C   a   l   l   S   w   a   t   (   m   s
0061300    g   )  \r   ]  \r  \r   l   e   t       t   v   e   c       =
0061320        v   e   c       1   2   8  \r   u   n   t   i   l       E
0061340    n   d   o   f   s   (   s   )       d   o      \r   [ 032   l
0061360    4   2   6   8  \r   l   e   t       m   n 376 001  \0   `   #
0061400    a   m   e       =       G   e   t   s   (   s   )  \r   i   f
0061420        m   n   a   m   e       e   q       -   1       t   h   e
0061440    n       b   r   e   a   k       /   /   p   a   s   t       t
0061460    h   e       m   a   c   r   o       d   e   f   i   n   i   t
0061500    i   o   n   s       =       d   o   n   e  \r   f   o   r    
0061520    i       =       1       t   o       4       d   o       t   v
0061540    e   c   !   i       =       G   e   t   s   (   s   )  \r   l
0061560    e   t       f   n   t       =       t   v   e   c   >   >   i
0061600    t   e   m   .   f   o   n   t  \r   i   f       f   n   t    
0061620    n   e       1   4       t   h   e   n           /   /   r   e
0061640    a   d       t   h   e       s   t   r   i   n   g  \r   [ 032
0061660    l   5   5   3   8  \r   t   v   e   c   !   5       =       G
0061700    e   t   s   (   s   )  \r   l   e   t       s   l       =    
0061720    (   t   v   e   c   !   5   )       r   s   h   i   f   t    
0061740    8  \r   i   f       s   l       g   r       1       t   h   e
0061760    n       f   o   r       i   =   1       t   o       s   l   /
0062000  376 001  \0   Z   e   2       d   o       t   v   e   c   !   (
0062020    5   +   i   )       =       G   e   t   s   (   s   ) 032   l
0062040    6   8   0   8  \r   ]  \r   /   /   w   e       w   i   l   l
0062060        u   s   e       t   h   i   s       m   a   c   r   o    
0062100    o   n   l   y       i   f       (   a   )       m   b   a   s
0062120    e   !   m   n   a   m   e       i   s       n   o   n   z   e
0062140    r   o  \r   /   /   i   .   e   .       w   e       w   a   n
0062160    t       t   h   i   s       d   e   f   i   n   i   t   i   o
0062200    n   ,       a   n   d       (   b   )  \r   /   /   t   h   e
0062220        o   b   j   e   c   t       i   s       a       f   o   n
0062240    t       1       s   t   r   i   n   g       o   r       a    
0062260    s   i   n   g   l   e       c   h   a   r   a   c   t   e   r
0062300   \r   /   /   f   o   n   t       3       s   t   r   i   n   g
0062320        w   h   i   c   h       i   s       a       c   o   n   n
0062340    e   c   t   i   o   n       p   o   i   n   t   .  \r   /   /
0062360    i   f       w   e       w   a   n   t       t   h   e       d
0062400    e   f   i   n   i 376 001  \0   @ 215   t   i   o   n   ,    
0062420    w   e       a   d   d       a       n   o   d   e       t   o
0062440        m   b   a   s   e   !   m   n   a   m   e  \r  \r   i   f
0062460        m   b   a   s   e   !   m   n   a   m   e       e   q    
0062500    0       t   h   e   n       l   o   o   p       /   /   d   o
0062520    n   '   t       w   a   n   t       t   h   i   s       d   e
0062540    f  \r  \r   i   f       (   f   n   t       e   q       2   )
0062560    &   (   t   v   e   c   >   >   i   t   e   m   .   i   t   a
0062600    l   i   c       e   q       0   )       t   h   e   n       /
0062620    /   a   d   d       f   o   n   t       1       s   t   r   i
0062640    n   g   s       t   o       l   i   s   t  \r   [ 032   l   5
0062660    5   3   8  \r   l   e   t       s   t   p       =       L   o
0062700    o   k   u   p   (   l   v       t   v   e   c   >   >   i   t
0062720    e   m   .   s   t   r   i   n   g   )  \r   t   e   s   t    
0062740    s   t   p       e   q       0      \r  \r   i   f   s   o    
0062760    s   t   p       =       D   e   f   i   n   e   S   y   m   b
0063000    o   l   (   l   v       t   v   e   c 376 001  \0 333 317   >
0063020    >   i   t   e   m   .   s   t   r   i   n   g   ,   s   t   P
0063040    i   n   )  \r  \r   i   f   n   o   t       s   t   p   >   >
0063060    s   t   r   e   c   .   t   y   p   e       =       s   t   P
0063100    i   n       /   /   c   h   a   n   g   e       s   y   m   b
0063120    o   l       t   y   p   e       t   o       p   i   n  \r  \r
0063140        /   /   a   d   d       t   o       l   i   s   t  \r   A
0063160    d   d   N   o   d   e   (   l   v       (   m   b   a   s   e
0063200    !   m   n   a   m   e   )   ,   t   v   e   c   ,   0   ,   0
0063220    ,   b   t   S   t   r   i   n   g   ,   s   t   p   )  \r   l
0063240    o   o   p 032   l   6   8   0   8  \r   ]  \r  \r   i   f    
0063260    (   f   n   t       e   q       6   )   &   (   t   v   e   c
0063300    >   >   i   t   e   m   .   i   t   a   l   i   c       e   q
0063320        0   )       t   h   e   n       /   /   a   d   d       a
0063340    n       s   c   h   a   r       i   f       t   h   e       s
0063360    t   r   i   n   g       f   o   n   t       3  \r   [ 032   l
0063400    5   5   3   8  \r   i   f       t   v   e   c   >   >   i 376
0063420  001  \0 366 337   t   e   m   .   s   t   r   i   n   g   .   l
0063440    e   n   g   t   h       n   e       1       t   h   e   n    
0063460    l   o   o   p  \r   l   e   t       c   h       =       t   v
0063500    e   c   >   >   i   t   e   m   .   s   t   r   i   n   g   .
0063520    c   h   a   r   ^   1  \r   i   f       s   e   l   e   c   t
0063540    o   n       c   h       i   n   t   o  \r   [ 032   l   6   8
0063560    0   8  \r   c   a   s   e       c   h   T   c   o   n   :  \r
0063600    c   a   s   e       c   h   B   c   o   n   :  \r   c   a   s
0063620    e       c   h   L   c   o   n   :  \r   c   a   s   e       c
0063640    h   R   c   o   n   :       t   r   u   e  \r   d   e   f   a
0063660    u   l   t   :       f   a   l   s   e 032   l   8   0   7   8
0063700   \r   ]           t   h   e   n       A   d   d   N   o   d   e
0063720    (   l   v       (   m   b   a   s   e   !   m   n   a   m   e
0063740    )   ,   t   v   e   c   ,   0   ,   0   ,   b   t   S   c   h
0063760    a   r   ,   c   h   ) 032   l   6   8   0   8  \r   ]  \r  \r
0064000  032   l   5   5   3   8  \r   ]  \r   C   l   o   s   e   s   (
0064020    s   )  \r 032 376 001  \0 254 200   l   4   2   6   8  \r  \r
0064040    ]  \r  \r   a   n   d       F   i   n   d   D   i   c   t   L
0064060    i   b   r   a   r   i   e   s   (   D   i   c   t   N   a   m
0064100    e   )       b   e       /   /   g   e   t       f   p   '   s
0064120        f   o   r       S   I   L   .   L   B   5       t   o    
0064140    S   I   L   .   L   B   9      \r   [ 032  \r   l   e   t    
0064160    L       =       5   *   D   i   r   P   r   e   a   m   b   l
0064200    e   S   i   z   e       +       1   0   *   (   l   C   F   A
0064220    +   1   )  \r   L   p   r   v   e   c       =       A   l   l
0064240    o   c   a   t   e   (   S   i   l   Z   o   n   e   ,       L
0064260    )   ;       Z   e   r   o   (   L   p   r   v   e   c   ,   L
0064300    )  \r   D   p   r   v   e   c       =       L   p   r   v   e
0064320    c       +       5   *   D   i   r   P   r   e   a   m   b   l
0064340    e   S   i   z   e  \r  \r   /   /   f   i   r   s   t       g
0064360    e   t       t   h   e       l   i   b   r   a   r   y       f
0064400    i   l   e       p   o   i   n   t   e   r   s       f   r   o
0064420    m       S   i   l   .   f   p   s 376 001  \0 332   |  \r   l
0064440    e   t       S       =       O   p   e   n   F   i   l   e   (
0064460    "   S   i   l   .   f   p   s   "   ,   k   s   T   y   p   e
0064500    R   e   a   d   O   n   l   y   )  \r   i   f       S       e
0064520    q       0       d   o       C   a   l   l   S   w   a   t   (
0064540    "   C   a   n   '   t       g   e   t       L   i   b   r   a
0064560    r   y       f   i   l   e       p   o   i   n   t   e   r   s
0064600    !   !   !       -       p   l   e   a   s   e       r   u   n
0064620        S   i   l   /   I   .   "   )  \r  \r   f   o   r       i
0064640        =       0       t   o       4   *   D   i   r   P   r   e
0064660    a   m   b   l   e   S   i   z   e   -   1       d   o       G
0064700    e   t   s   (   S   )   /   /   r   e   a   d       p   a   s
0064720    t       t   h   e       f   o   n   t       f   p   '   s  \r
0064740    f   o   r       i       =       0       t   o       5   *   D
0064760    i   r   P   r   e   a   m   b   l   e   S   i   z   e   -   1
0065000        d   o       L   p   r   v   e   c   !   i       =       G
0065020    e   t   s   (   S   )   /   /       r   e   a   d     376 001
0065040   \0   - 345   t   h   e       L   i   b   r   a   r   y       f
0065060    p   '   s  \r   C   l   o   s   e   s   (   S   ) 032   l   4
0065100    2   6   8  \r   /   /   e   n   t   r   i   e   s       n   o
0065120    t       f   o   u   n   d       w   i   l   l       g   e   n
0065140    e   r   a   t   e       a   p   p   r   o   p   r   i   a   t
0065160    e       e   r   r   o   r   s       l   a   t   e   r       i
0065200    f       t   h   e       l   i   b   r   a   r   i   e   s    
0065220    w   e   r   e       n   e   e   d   e   d  \r  \r   /   /   n
0065240    o   w       g   e   t       t   h   e       f   i   r   s   t
0065260        d   i   c   t   i   o   n   a   r   y       n   a   m   e
0065300        b   y       l   o   o   k   i   n   g       i   n       u
0065320    s   e   r   .   c   m  \r   S       =       O   p   e   n   F
0065340    i   l   e   (   "   U   s   e   r   .   c   m   "   ,   k   s
0065360    T   y   p   e   R   e   a   d   O   n   l   y   ,   1   ,   0
0065400    ,   f   p   U   s   e   r   C   m   ,   0   ,   S   i   l   Z
0065420    o   n   e   )       /   /   o   p   e   n       f   o   r    
0065440    b   y   t 376 001  \0 276 305   e   s  \r   i   f       S    
0065460    e   q       0       t   h   e   n       C   a   l   l   S   w
0065500    a   t   (   "   C   a   n   '   t       o   p   e   n       U
0065520    s   e   r   .   c   m   "   )  \r  \r   l   e   t       s   t
0065540    r       =       v   e   c       1   2   8  \r   l   e   t    
0065560    g   o   t   s   i   l   ,   g   o   t   A       =       f   a
0065600    l   s   e   ,   f   a   l   s   e  \r   [ 032   l   4   2   6
0065620    8  \r   s   w   i   t   c   h   o   n       R   e   a   d   U
0065640    s   e   r   C   m   I   t   e   m   (   S   ,   s   t   r   )
0065660        i   n   t   o  \r   [ 032   l   5   5   3   8  \r   c   a
0065700    s   e       $   N   :           g   o   t   s   i   l       =
0065720        S   t   E   q   (   s   t   r   ,   "   S   I   L   "   ,
0065740    n   i   l   )  \r   e   n   d   c   a   s   e  \r  \r   c   a
0065760    s   e       $   L   :          \r   u   n   l   e   s   s    
0066000    g   o   t   s   i   l       t   h   e   n       e   n   d   c
0066020    a   s   e  \r   i   f       s   t   r   >   >   s   t   r   .
0066040    l   e   n   g   t   h       g 376 001  \0 337 336   r       1
0066060        t   h   e   n       e   n   d   c   a   s   e  \r   i   f
0066100        s   t   r   >   >   s   t   r   .   c   h   a   r   ^   1
0066120        e   q       $   A       t   h   e   n       g   o   t   A
0066140        =       t   r   u   e           /   /   f   o   u   n   d
0066160        A   n   a   l   y   s   e       e   n   t   r   y  \r   i
0066200    f       s   t   r   >   >   s   t   r   .   c   h   a   r   ^
0066220    1       e   q       $   a       t   h   e   n       g   o   t
0066240    A       =       t   r   u   e           /   /   f   o   u   n
0066260    d       A   n   a   l   y   s   e       e   n   t   r   y  \r
0066300    e   n   d   c   a   s   e  \r  \r   c   a   s   e       $   P
0066320    :       i   f       g   o   t   A       e   q       0       t
0066340    h   e   n       e   n   d   c   a   s   e          \r   c   a
0066360    s   e       $   E   :           C   l   o   s   e   s   (   S
0066400    )   ;   b   r   e   a   k       /   /   e   n   d       o   f
0066420        s   t   r   e   a   m       o   r       d   o   n   e  \r
0066440   \r   ] 032   l   5   5   3   8  \r   ]       r   e 376  \0 355
0066460  252   m   p   e   a   t  \r  \r  \r   D   i   c   t   N   a   m
0066500    e   !   0       =       0  \r   i   f       (   g   o   t   A
0066520        e   q       f   a   l   s   e   )       %       (   s   t
0066540    r   >   >   s   t   r   .   l   e   n   g   t   h       l   e
0066560        2   )       d   o  \r  \t   [       A   p   p   e   n   d
0066600    S   (   "   D   i   c   t   .   A   n   a   l   y   z   e   "
0066620    ,   D   i   c   t   N   a   m   e   )   ;       r   e   t   u
0066640    r   n       ]  \r   f   o   r       i       =       1       t
0066660    o       s   t   r   >   >   s   t   r   .   l   e   n   g   t
0066700    h       d   o  \r  \t   [  \r  \t   l   e   t       c       =
0066720        s   t   r   >   >   s   t   r   .   c   h   a   r   ^   i
0066740   \r  \t   i   f       c       l   e       $   *   s       t   h
0066760    e   n       b   r   e   a   k  \r  \t   A   p   p   e   n   d
0067000    C   (   c   ,   D   i   c   t   N   a   m   e   )  \r  \t   ]
0067020   \r 032   l   4   2   6   8  \r   ]  \r 032  \r  \r 032  \r 377
0067040   \0  \0   a   n   c   .   b   c   p   l  \0 376 001  \0 303   C
0067060    /   /   a   n   c   .   b   c   p   l  \r   /   /   n   e   w
0067100        a   n   a   l   y   z   e   r       f   o   r       s   i
0067120    l       f   i   l   e   s  \r  \r   /   /       l   a   s   t
0067140        m   o   d   i   f   i   e   d       b   y       M   c   C
0067160    r   e   i   g   h   t   ,       N   o   v   e   m   b   e   r
0067200        1   5   ,       1   9   7   7           1   0   :   5   0
0067220        A   M  \r   g   e   t       "   s   y   s   d   e   f   s
0067240    .   d   "  \r   g   e   t       "   a   n   a   .   d   e   f
0067260    s   "  \r  \r   /   /       P       R       I       N       T
0067300            I       N       T       E       R       N       A    
0067320    L           D       A       T       A           S       T    
0067340    R       U       C       T       U       R       E       S  \r
0067360   \r  \r   s   t   a   t   i   c  \r   [  \r   p   r   i   n   t
0067400    s   y   m   s       =       f   a   l   s   e       /   /   t
0067420    h   e   s   e       t   h   i   n   g   s       a   r   e    
0067440    n   o   r   m   a   l   l   y       u   s   e   d       a   n
0067460  376 001  \0 327   g   d       g   e   n   e   r   a   t   e    
0067500    m   u   c   h  \r   /   /   p   r   i   n   t   i   n   g   .
0067520            t   h   e   y       m   a   y       b   e       t   u
0067540    r   n   e   d       o   n       u   s   i   n   g       S   w
0067560    a   t  \r   p   r   i   n   t   l   i   b   s       =       f
0067600    a   l   s   e  \r   ]  \r  \r   l   e   t       P   r   i   n
0067620    t   S   t   r   u   c   t   s   (   )       b   e  \r   [ 032
0067640    (   6   3   5   )  \r   /   /   f   i   r   s   t   ,       p
0067660    r   i   n   t       a   l   l       t   h   e       m   a   c
0067700    r   o       n   a   m   e   s       w   h   i   c   h       a
0067720    r   e       u   s   e   d  \r   W   s   s   (   E   r   F   i
0067740    l   e   ,   "   *   n   *   n   M   A   C   R   O   S       U
0067760    S   E   D   :   "   )  \r   f   o   r       i       =       8
0070000        t   o       1   3       d   o       P   r   i   n   t   M
0070020    a   c   s   (   i   )  \r  \r   /   /   p   r   i   n   t    
0070040    t   h   e       d   e   f   i   n   i   t   i   o   n   s    
0070060    i   n       t   h 376 001  \0  \r 222   e       l   i   b   r
0070100    a   r   y       f   o   n   t   s  \r   i   f       p   r   i
0070120    n   t   l   i   b   s       t   h   e   n  \r   [ 032   l   4
0070140    2   6   8  \r   W   s   s   (   E   r   F   i   l   e   ,   "
0070160    *   n   *   n   L   I   B   R   A   R   Y       M   A   C   R
0070200    O       D   E   F   I   N   I   T   I   O   N   S   :   "   )
0070220   \r   f   o   r       i       =   8       t   o       1   3    
0070240    d   o       P   r   i   n   t   L   i   b   D   e   f   s   (
0070260    i   ) 032   l   5   5   3   8  \r   ]  \r  \r   /   /   p   r
0070300    i   n   t       t   h   e       c   o   n   t   e   n   t   s
0070320        o   f       t   h   e       s   y   m   b   o   l       t
0070340    a   b   l   e  \r   i   f       p   r   i   n   t   s   y   m
0070360    s       t   h   e   n  \r   [ 032   l   4   2   6   8  \r   W
0070400    s   s   (   E   r   F   i   l   e   ,   "   *   n   *   n   S
0070420    Y   M   B   O   L       T   A   B   L   E   :   "   )  \r   f
0070440    o   r       i       =       0       t   o       h   t   s   i
0070460    z   e   -   1       d   o  \r   [ 032 376 001  \0   ~ 370   l
0070500    5   5   3   8  \r   l   e   t       l   i   n   k       =    
0070520    h   a   s   h   t   a   b   !   i  \r   u   n   t   i   l    
0070540    l   i   n   k       e   q       0       d   o  \r   [ 032   l
0070560    6   8   0   8  \r   P   r   i   n   t   S   t   r   e   c   (
0070600    l   i   n   k   )  \r   l   i   n   k       =       @   l   i
0070620    n   k 032   l   6   8   0   8  \r   ] 032   l   6   8   0   8
0070640   \r   ]  \r 032   l   5   5   3   8  \r   ]  \r  \r   /   /   c
0070660    o   m   p   o   n   e   n   t   s  \r   P   r   i   n   t   T
0070700    h   i   n   g   s   (   "   C   O   M   P   O   N   E   N   T
0070720    S   :   "   ,   P   r   i   n   t   C   o   m   p   ,   C   o
0070740    m   p   s   )  \r  \r   /   /   v   e   r   t   i   c   a   l
0070760        l   i   n   e   s  \r   P   r   i   n   t   T   h   i   n
0071000    g   s   (   "   V   E   R   T   I   C   A   L       L   I   N
0071020    E   S   :   "   ,   P   r   i   n   t   L   i   n   e   ,   V
0071040    l   i   n   e   s   )  \r  \r   /   /   h   o   r   i   z   o
0071060    n   t   a   l       l   i   n   e   s  \r   P   r   i   n 376
0071100  001  \0 366 206   t   T   h   i   n   g   s   (   "   H   O   R
0071120    I   Z   O   N   T   A   L       L   I   N   E   S   :   "   ,
0071140    P   r   i   n   t   L   i   n   e   ,   H   l   i   n   e   s
0071160    )  \r  \r   /   /   s   t   r   i   n   g   s  \r   P   r   i
0071200    n   t   T   h   i   n   g   s   (   "   S   T   R   I   N   G
0071220    S   :   "   ,   P   r   i   n   t   N   o   d   e   ,   S   t
0071240    r   i   n   g   s   )  \r  \r   /   /   n   u   m   b   e   r
0071260    s  \r   P   r   i   n   t   T   h   i   n   g   s   (   "   N
0071300    U   M   B   E   R   S   :   "   ,   P   r   i   n   t   N   o
0071320    d   e   ,   N   u   m   b   e   r   s   )  \r  \r   /   /   b
0071340    o   a   r   d       l   o   c   a   t   i   o   n   s       a
0071360    n   d       g   r   o   u   p   s  \r   P   r   i   n   t   T
0071400    h   i   n   g   s   (   "   B   O   A   R   D       L   O   C
0071420    A   T   I   O   N   S       A   N   D       P   A   C   K   A
0071440    G   E       G   R   O   U   P   S   :   "   ,   P   r   i   n
0071460    t   N   o   d   e   ,   L   o   c   g   r   o   u   p   s   )
0071500   \r  \r   /   / 376 001  \0   , 207   s   p   e   c   i   a   l
0071520        f   o   n   t   3       c   h   a   r   a   c   t   e   r
0071540    s  \r   P   r   i   n   t   T   h   i   n   g   s   (   "   S
0071560    P   E   C   I   A   L       C   H   A   R   A   C   T   E   R
0071600    S   :   "   ,   P   r   i   n   t   N   o   d   e   ,   S   c
0071620    h   a   r   s   )  \r 032   l   4   2   6   8  \r   ]  \r  \r
0071640    a   n   d       P   r   i   n   t   M   a   c   s   (   f   o
0071660    n   t   )       b   e  \r   [ 032  \r   l   e   t       v    
0071700    =       v   e   c       1   2   8   ;       v   !   0       =
0071720        0  \r   A   p   p   e   n   d   C   (   $   *   n   ,   v
0071740    )  \r   A   p   p   e   n   d   N   (   f   o   n   t   -   4
0071760    ,   v   )       /   /   u   s   e   r       f   o   n   t    
0072000    n   u   m   b   e   r  \r   A   p   p   e   n   d   S   (   "
0072020    :       "   ,   v   )  \r   l   e   t       m   b   a   s   e
0072040        =       M   a   c   t   +       1   2   8   *   (   f   o
0072060    n   t   -   8   )  \r   f   o   r       i       =       0    
0072100    t   o       1   2   7       d   o 376 001  \0   t   *       i
0072120    f       m   b   a   s   e   !   i       n   e       0       t
0072140    h   e   n  \r   [ 032   l   4   2   6   8  \r   i   f       i
0072160        l   s       #   4   0       t   h   e   n       /   /   s
0072200    h   o   u   l   d   n   '   t       b   e       a   n   y    
0072220    c   o   n   t   r   o   l       c   h   a   r   .       m   a
0072240    c   r   o   s  \r   [ 032   l   5   5   3   8  \r   A   p   p
0072260    e   n   d   C   (   $   ^   ,   v   )  \r   A   p   p   e   n
0072300    d   C   (   $   A   +   i   ,   v   )  \r   l   o   o   p 032
0072320    l   6   8   0   8  \r   ]  \r   A   p   p   e   n   d   C   (
0072340    i   ,   v   ) 032   l   5   5   3   8  \r   ]  \r   W   s   s
0072360    (   E   r   F   i   l   e   ,   v   ) 032   l   4   2   6   8
0072400   \r   ]  \r  \r   a   n   d       P   r   i   n   t   L   i   b
0072420    D   e   f   s   (   f   o   n   t   )       b   e  \r   [ 032
0072440   \r   l   e   t       m   b   a   s   e       =       M   a   c
0072460    t   +   1   2   8   *   (   f   o   n   t   -   8   )       /
0072500    /   i   n   t   e   r   n   a   l       f   o   n   t 376 001
0072520   \0 017 300       n   u   m   b   e   r  \r   f   o   r       i
0072540        =       0       t   o       1   2   7       d   o  \r   [
0072560  032   l   4   2   6   8  \r   i   f       m   b   a   s   e   !
0072600    i       e   q       0       t   h   e   n       l   o   o   p
0072620   \r   l   e   t       v       =       v   e   c       1   2   8
0072640    ;   v   !   0   =   0  \r   A   p   p   e   n   d   S   (   "
0072660    *   n   *   n   F   o   n   t   :       "   ,   v   )  \r   A
0072700    p   p   e   n   d   N   (   f   o   n   t   -   4   ,   v   )
0072720   \r   A   p   p   e   n   d   S   (   "       C   h   a   r   :
0072740        "   ,   v   )  \r   i   f       i       l   s       #   4
0072760    0       t   h   e   n       A   p   p   e   n   d   C   (   $
0073000    ^   ,   v   )  \r   A   p   p   e   n   d   C   (   i       l
0073020    s       #   4   0   ?   i   +   $   A   ,   i   ,   v   )  \r
0073040    A   p   p   e   n   d   S   (   "       L   i   n   k   =   "
0073060    ,   v   )  \r   l   e   t       l   i   n   k       =       m
0073100    b   a   s   e   !   i  \r   A   p   p   e   n   d   B   (   l
0073120    i   n   k 376 001  \0 006   M   ,   v   )  \r   W   s   s   (
0073140    E   r   F   i   l   e   ,   v   )  \r  \r   u   n   t   i   l
0073160        (   l   i   n   k       e   q       0   )   %   (   l   i
0073200    n   k       e   q       -   1   )       d   o       /   /   p
0073220    o   s   s   i   b   l   e       t   h   a   t       d   e   f
0073240    i   n   i   t   i   o   n       i   s       n   o   t       t
0073260    h   e   r   e  \r   [ 032   l   5   5   3   8  \r   l   e   t
0073300        b   t   y   p   e       =       l   i   n   k   >   >   n
0073320    o   d   e   .   t   y   p   e  \r   i   f       (   b   t   y
0073340    p   e       e   q       b   t   S   t   r   i   n   g   )   %
0073360    (   b   t   y   p   e       e   q       b   t   S   c   h   a
0073400    r   )       t   h   e   n       P   r   i   n   t   N   o   d
0073420    e   (   l   i   n   k   )  \r  \r   l   i   n   k       =    
0073440    @   l   i   n   k 032   l   6   8   0   8  \r   ]  \r 032   l
0073460    5   5   3   8  \r   ] 032   l   4   2   6   8  \r   ]  \r  \r
0073500   \r  \r   a   n   d       P   r   i   n   t   S   t   r   e   c
0073520    (   s   t   p   )       b   e 376 001  \0 302 303  \r   [ 032
0073540   \r   l   e   t       v       =       v   e   c       1   2   8
0073560    ;       v   !   0       =       0  \r   A   p   p   e   n   d
0073600    C   (   $   *   n   ,   v   )  \r   A   p   p   e   n   d   B
0073620    (   s   t   p   ,   v   )  \r   l   e   t       s       =    
0073640    s   e   l   e   c   t   o   n       s   t   p   >   >   s   t
0073660    r   e   c   .   t   y   p   e       i   n   t   o  \r   [ 032
0073700    l   4   2   6   8  \r   c   a   s   e       s   t   C   o   m
0073720    p   :       "   :       C   o   m   p   o   n   e   n   t    
0073740    p   r   i   n   t       n   a   m   e   :       '   "  \r   c
0073760    a   s   e       s   t   P   i   n   :       "   :       P   i
0074000    n       N   a   m   e   :       '   "  \r   c   a   s   e    
0074020    s   t   S   i   g   :       "   :       S   i   g   n   a   l
0074040        N   a   m   e   :       '   "  \r   c   a   s   e       s
0074060    t   R   c   o   m   p   :       "   :       C   o   m   p   o
0074100    n   e   n   t       r   e   a   l       n   a   m   e   :    
0074120    '   "  \r   c   a   s   e       s   t   B   r   d 376 001  \0
0074140  253   O   l   o   c   :       "   :       B   o   a   r   d    
0074160    l   o   c   a   t   i   o   n   :       '   "  \r   d   e   f
0074200    a   u   l   t   :       "   :       E   R   R   O   R   :    
0074220    '   " 032   l   5   5   3   8  \r   ]  \r  \r   A   p   p   e
0074240    n   d   S   (   s   ,   v   )  \r   A   p   p   e   n   d   S
0074260    (   l   v   (   s   t   p   >   >   s   t   r   e   c   .   s
0074300    t   )   ,   v   )  \r   A   p   p   e   n   d   C   (   $   '
0074320    ,   v   )  \r   W   s   s   (   E   r   F   i   l   e   ,   v
0074340    ) 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       P
0074360    r   i   n   t   T   h   i   n   g   s   (   h   d   r   s   ,
0074400    p   r   i   n   t   f   n   ,   l   i   s   t   )   b   e  \r
0074420    [ 032  \r   W   s   s   (   E   r   F   i   l   e   ,   "   *
0074440    n   *   n   "   )  \r   W   s   s   (   E   r   F   i   l   e
0074460    ,   h   d   r   s   )  \r   l   e   t       l   i   n   k    
0074500    =       l   i   s   t  \r   u   n   t   i   l       l   i   n
0074520    k       e   q       0       d   o  \r   [ 032   l   4   2   6
0074540    8  \r 376 001  \0 241   \   p   r   i   n   t   f   n   (   l
0074560    i   n   k   )  \r   l   i   n   k       =       @   l   i   n
0074600    k 032   l   5   5   3   8  \r   ] 032   l   4   2   6   8  \r
0074620    ]  \r  \r   a   n   d       P   r   i   n   t   L   i   n   e
0074640    (   p   t   r   )       b   e  \r   [ 032  \r   l   e   t    
0074660    v       =       v   e   c       1   2   8   ;   v   !   0   =
0074700    0  \r   A   p   p   e   n   d   C   (   $   *   n   ,   v   )
0074720   \r   A   p   p   e   n   d   B   (   p   t   r   ,   v   )  \r
0074740    A   p   p   e   n   d   S   (   "   :       (   "   ,   v   )
0074760   \r   A   p   p   e   n   d   N   (   p   t   r   >   >   l   e
0075000    n   d   .   x   ,   v   )  \r   A   p   p   e   n   d   C   (
0075020    $   ,   ,   v   )  \r   A   p   p   e   n   d   N   (   p   t
0075040    r   >   >   l   e   n   d   .   y   ,   v   )  \r   A   p   p
0075060    e   n   d   S   (   p   t   r   >   >   l   e   n   d   .   m
0075100    a   r   k   e   d       e   q       0   ?   "   )       n   o
0075120    m   a   r   k   ,       "   ,   "   )       m   a   r   k   e
0075140    d   ,       "   ,   v   ) 376 001  \0   / 305  \r   A   p   p
0075160    e   n   d   S   (   p   t   r   >   >   l   e   n   d   .   h
0075200    a   s   s   i   g       e   q       0   ?   "   n   o   "   ,
0075220    "   h   a   s   "   ,   v   )  \r   A   p   p   e   n   d   S
0075240    (   "       s   i   g   ,       c   p   0   -   2   :   "   ,
0075260    v   )  \r   f   o   r       i       =       0       t   o    
0075300    2       d   o  \r   [ 032   l   4   2   6   8  \r   A   p   p
0075320    e   n   d   C   (   $   *   s   ,   v   )  \r   A   p   p   e
0075340    n   d   B   (   p   t   r   >   >   l   e   n   d   .   c   p
0075360    ^   i   ,   v   ) 032   l   5   5   3   8  \r   ]  \r   W   s
0075400    s   (   E   r   F   i   l   e   ,   v   )  \r 032   l   4   2
0075420    6   8  \r   ]  \r  \r   a   n   d       P   r   i   n   t   N
0075440    o   d   e   (   p   t   r   )       b   e  \r   [ 032  \r   l
0075460    e   t       v       =       v   e   c       1   2   8   ;   v
0075500    !   0   =   0   ;   A   p   p   e   n   d   C   (   $   *   n
0075520    ,   v   )  \r   A   p   p   e   n   d   B   (   p   t   r   ,
0075540    v   )  \r   A   p   p   e   n   d   S   (   p 376 001  \0   S
0075560  346   t   r   >   >   n   o   d   e   .   u   s   e   d       e
0075600    q       0   ?   "   :       f   r   e   e           "   ,   "
0075620    :       u   s   e   d           "   ,       v   )  \r   A   p
0075640    p   e   n   d   B   (   p   t   r   >   >   n   o   d   e   .
0075660    a   s   s   o   c   ,   v   )  \r   A   p   p   e   n   d   S
0075700    (   "       (   "   ,   v   )  \r   A   p   p   e   n   d   N
0075720    (   p   t   r   >   >   n   o   d   e   .   x   ,   v   )  \r
0075740    A   p   p   e   n   d   C   (   $   ,   ,   v   )  \r   A   p
0075760    p   e   n   d   N   (   p   t   r   >   >   n   o   d   e   .
0076000    y   ,   v   )  \r  \r   /   /   t   h   e       w   a   y    
0076020    t   h   e       v   a   l   u   e       i   s       p   r   i
0076040    n   t   e   d       d   e   p   e   n   d   s       o   n    
0076060    t   h   e       t   y   p   e       o   f       t   h   e    
0076100    n   o   d   e  \r   s   w   i   t   c   h   o   n       p   t
0076120    r   >   >   n   o   d   e   .   t   y   p   e       i   n   t
0076140    o  \r   [ 032   l   4   2   6   8  \r   c   a   s   e       b
0076160    t 376 001  \0 355   Q   S   t   r   i   n   g   :  \r   [ 032
0076200    l   5   5   3   8  \r   A   p   p   e   n   d   S   (   "   )
0076220        S   t   r   :       (   "   ,   v   )  \r   l   e   t    
0076240    v   a   l       =       p   t   r   >   >   n   o   d   e   .
0076260    v   a   l  \r   A   p   p   e   n   d   B   (   v   a   l   ,
0076300    v   )  \r   A   p   p   e   n   d   S   (   "   )       T   y
0076320    p   e   =   "   ,   v   )  \r   l   e   t       s   t   y   p
0076340    e       =       s   e   l   e   c   t   o   n       v   a   l
0076360    >   >   s   t   r   e   c   .   t   y   p   e       i   n   t
0076400    o  \r   [ 032   l   6   8   0   8  \r  \r   c   a   s   e    
0076420    s   t   C   o   m   p   :       "   C   o   m   p   n   a   m
0076440    e   :       '   "  \r   c   a   s   e       s   t   P   i   n
0076460    :       "   P   i   n   N   a   m   e   :       '   "  \r   c
0076500    a   s   e       s   t   S   i   g   :       "   S   i   g   N
0076520    a   m   e   :       '   "  \r   c   a   s   e       s   t   R
0076540    c   o   m   p   :       "   C   o   m   p   R   n   a   m   e
0076560    :       '   "  \r   d 376 001  \0   =   W   e   f   a   u   l
0076600    t   :       "   E   R   R   O   R   :       '   "  \r 032   l
0076620    8   0   7   8  \r   ]  \r   A   p   p   e   n   d   S   (   s
0076640    t   y   p   e   ,   v   )  \r   A   p   p   e   n   d   S   (
0076660    l   v       v   a   l   >   >   s   t   r   e   c   .   s   t
0076700    ,   v   )  \r   A   p   p   e   n   d   C   (   $   '   ,   v
0076720    )  \r 032   l   6   8   0   8  \r   ]  \r   e   n   d   c   a
0076740    s   e  \r  \r   c   a   s   e       b   t   N   u   m   :  \r
0076760    [ 032   l   5   5   3   8  \r   A   p   p   e   n   d   S   (
0077000    "   )       N   u   m   b   e   r   :       "   ,   v   )  \r
0077020    A   p   p   e   n   d   N   (   p   t   r   >   >   n   o   d
0077040    e   .   v   a   l   ,   v   ) 032   l   6   8   0   8  \r   ]
0077060   \r   e   n   d   c   a   s   e  \r  \r   c   a   s   e       b
0077100    t   L   o   c   g   r   o   u   p   s   :  \r   [ 032   l   5
0077120    5   3   8  \r   A   p   p   e   n   d   S   (   "   )       B
0077140    l   o   c   /   G   r   p   :       "   ,   v   )  \r   A   p
0077160    p   e   n   d   S   (   l   v       (   p 376 001  \0 245   ~
0077200    t   r   >   >   n   o   d   e   .   b   l   o   c   )   >   >
0077220    s   t   r   e   c   .   s   t   ,       v   )  \r   A   p   p
0077240    e   n   d   C   (   p   t   r   >   >   n   o   d   e   .   g
0077260    r   o   u   p   +   $   a   -   1   ,   v   ) 032   l   6   8
0077300    0   8  \r   ]  \r   e   n   d   c   a   s   e  \r  \r   c   a
0077320    s   e       b   t   S   c   h   a   r   :  \r   [ 032   l   5
0077340    5   3   8  \r   A   p   p   e   n   d   S   (   "   )       S
0077360    c   h   a   r       (   f   o   n   t   3   )   :       "   ,
0077400    v   )  \r   A   p   p   e   n   d   C   (   p   t   r   >   >
0077420    n   o   d   e   .   v   a   l   ,   v   ) 032   l   6   8   0
0077440    8  \r   ]  \r   e   n   d   c   a   s   e  \r  \r   d   e   f
0077460    a   u   l   t   : 032   l   5   5   3   8  \r   [ 032   l   5
0077500    5   3   8  \r   A   p   p   e   n   d   S   (   "   )       E
0077520    R   R   O   R   :       v   a   l       i   s       #   "   ,
0077540    v   )  \r   A   p   p   e   n   d   B   (   p   t   r   >   >
0077560    n   o   d   e   .   v   a   l   ,   v   ) 032   l   6   8   0
0077600  376 001  \0 017   S   8  \r   ] 032   l   5   5   3   8  \r   ]
0077620   \r  \r   W   s   s   (   E   r   F   i   l   e   ,   v   ) 032
0077640    l   4   2   6   8  \r   ]  \r  \r   a   n   d       P   r   i
0077660    n   t   C   o   m   p   (   p   t   r   )       b   e  \r   [
0077700  032  \r   l   e   t       v       =       v   e   c       1   2
0077720    8   ;   v   !   0       =       0  \r   l   e   t       c   p
0077740    s       =       p   t   r   >   >   c   o   m   p   .   c   o
0077760    n   p   o   i   n   t   s  \r   A   p   p   e   n   d   S   (
0100000    "   *   n   *   n   "   ,   v   )  \r   A   p   p   e   n   d
0100020    B   (   p   t   r   ,   v   )  \r   A   p   p   e   n   d   S
0100040    (   "   :       (   "   ,   v   )  \r   A   p   p   e   n   d
0100060    N   (   p   t   r   >   >   c   o   m   p   .   x   m   i   n
0100100    ,   v   )  \r   A   p   p   e   n   d   C   (   $   *   s   ,
0100120    v   )  \r   A   p   p   e   n   d   N   (   p   t   r   >   >
0100140    c   o   m   p   .   y   m   i   n   ,   v   )  \r   A   p   p
0100160    e   n   d   C   (   $   *   s   ,   v   )  \r   A   p   p   e
0100200    n   d   N   (   p 376 001  \0 317   V   t   r   >   >   c   o
0100220    m   p   .   x   m   a   x   ,   v   )  \r   A   p   p   e   n
0100240    d   C   (   $   *   s   ,   v   )  \r   A   p   p   e   n   d
0100260    N   (   p   t   r   >   >   c   o   m   p   .   y   m   a   x
0100300    ,   v   )  \r   A   p   p   e   n   d   S   (   "   )        
0100320    F   o   n   t   :       "   ,   v   )  \r   A   p   p   e   n
0100340    d   N   (   (   (   p   t   r   >   >   c   o   m   p   .   m
0100360    i   n   d   e   x   )   /   1   2   8   )   +   4   ,   v   )
0100400   \r   A   p   p   e   n   d   S   (   "       C   h   a   r   :
0100420        "   ,   v   )  \r   A   p   p   e   n   d   C   (   (   p
0100440    t   r   >   >   c   o   m   p   .   m   i   n   d   e   x   )
0100460    r   e   m       1   2   8   ,   v   )  \r   A   p   p   e   n
0100500    d   S   (   "               "   ,   v   )  \r   A   p   p   e
0100520    n   d   B   (   c   p   s   ,   v   )  \r   W   s   s   (   E
0100540    r   F   i   l   e   ,   v   )  \r   i   f       c   p   s    
0100560    n   e       0       t   h   e   n       /   /   p   r   i   n
0100600    t       t   h   e       c   o   n   n 376 001  \0  \v 260   e
0100620    c   t   i   o   n       p   o   i   n   t       b   l   o   c
0100640    k  \r   [ 032   l   4   2   6   8  \r   v   !   0       =    
0100660    0  \r   A   p   p   e   n   d   S   (   "   *   n   *   t   "
0100700    ,   v   )  \r   t   e   s   t       c   p   s   >   >   c   o
0100720    m   p   b   l   o   c   k   .   c   o   m   p   t   y   p   e
0100740        e   q       0  \r   i   f   s   o       A   p   p   e   n
0100760    d   S   (   "   N   o   t   y   p   e   "   ,   v   )  \r   i
0101000    f   n   o   t  \r   [ 032   l   5   5   3   8  \r   A   p   p
0101020    e   n   d   S   (   l   v       (   (   c   p   s   >   >   c
0101040    o   m   p   b   l   o   c   k   .   c   o   m   p   t   y   p
0101060    e   )   >   >   s   t   r   e   c   .   s   t   )   ,   v   )
0101100   \r   A   p   p   e   n   d   S   (   "       (   "   ,   v   )
0101120   \r   A   p   p   e   n   d   S   (   l   v   (   (   (   c   p
0101140    s   >   >   c   o   m   p   b   l   o   c   k   .   c   o   m
0101160    p   t   y   p   e   )   >   >   s   t   r   e   c   .   r   n
0101200    a   m   e   )   >   >   s   t   r   e   c   .   s   t   ) 376
0101220  001  \0   : 256   ,   v   )  \r   A   p   p   e   n   d   S   (
0101240    "   )   "   ,   v   ) 032   l   6   8   0   8  \r   ]  \r   A
0101260    p   p   e   n   d   C   (   $   *   s   ,   v   )  \r   A   p
0101300    p   e   n   d   S   (   l   v       (   c   p   s   >   >   c
0101320    o   m   p   b   l   o   c   k   .   b   o   a   r   d   l   o
0101340    c   )   >   >   s   t   r   e   c   .   s   t   ,       v   )
0101360   \r   A   p   p   e   n   d   C   (   (   c   p   s   >   >   c
0101400    o   m   p   b   l   o   c   k   .   g   r   o   u   p   )   +
0101420    $   a   -   1   ,   v   )  \r   W   s   s   (   E   r   F   i
0101440    l   e   ,   v   )  \r   f   o   r       i       =       1    
0101460    t   o       c   p   s   >   >   c   o   m   p   b   l   o   c
0101500    k   .   n   u   m   c   p   o   i   n   t   s       d   o  \r
0101520    [ 032   l   5   5   3   8  \r   v   !   0   =   0  \r   A   p
0101540    p   e   n   d   S   (   "   *   n   *   t   "   ,   v   )  \r
0101560    A   p   p   e   n   d   N   (   c   p   s   >   >   c   o   m
0101600    p   b   l   o   c   k   .   p   i   n   ^   i   ,   v   )  \r
0101620    A   p   p   e 376 001  \0 024   -   n   d   S   (   "   :    
0101640    (   "   ,   v   )  \r   A   p   p   e   n   d   N   (   c   p
0101660    s   >   >   c   o   m   p   b   l   o   c   k   .   x   ^   i
0101700    ,   v   )  \r   A   p   p   e   n   d   C   (   $   ,   ,   v
0101720    )  \r   A   p   p   e   n   d   N   (   c   p   s   >   >   c
0101740    o   m   p   b   l   o   c   k   .   y   ^   i   ,   v   )  \r
0101760    A   p   p   e   n   d   S   (   "   )       '   "   ,   v   )
0102000   \r   l   e   t       p   n       =       c   p   s   >   >   c
0102020    o   m   p   b   l   o   c   k   .   p   i   n   n   a   m   e
0102040    ^   i  \r   t   e   s   t       p   n       e   q       0  \r
0102060    i   f   s   o       A   p   p   e   n   d   S   (   "   n   o
0102100    p   i   n   n   a   m   e   "   ,   v   )  \r   i   f   n   o
0102120    t       A   p   p   e   n   d   S   (   l   v   (   p   n   >
0102140    >   s   t   r   e   c   .   s   t   )   ,   v   )  \r   A   p
0102160    p   e   n   d   S   (   "   '       "   ,   v   )  \r   A   p
0102200    p   e   n   d   S   (   s   e   l   e   c   t   o   n       c
0102220    p   s   >   >   c   o   m   p   b 376  \0 341 206 314   l   o
0102240    c   k   .   c   p   t   ^   i       i   n   t   o  \r   [ 032
0102260    l   6   8   0   8  \r   c   a   s   e       c   p   t   T   o
0102300    p   :       "   t   o   p       "  \r   c   a   s   e       c
0102320    p   t   B   o   t   :       "   b   o   t   t   o   m   "  \r
0102340    c   a   s   e       c   p   t   L   e   f   t   :       "   l
0102360    e   f   t       "  \r   c   a   s   e       c   p   t   R   i
0102400    g   h   t   :       "   r   i   g   h   t       "  \r   d   e
0102420    f   a   u   l   t   :       "   b   a   d       c   p       t
0102440    y   p   e       " 032   l   8   0   7   8  \r   ]  \r   ,   v
0102460    )  \r   A   p   p   e   n   d   B   (   c   p   s   >   >   c
0102500    o   m   p   b   l   o   c   k   .   c   o   n   n   ^   i   ,
0102520    v   )  \r   W   s   s   (   E   r   F   i   l   e   ,   v   )
0102540  032   l   6   8   0   8  \r   ] 032   l   5   5   3   8  \r   ]
0102560   \r  \r 032   l   4   2   6   8  \r   ]  \r  \r  \r 032  \r 377
0102600   \0  \0   a   n   d   .   b   c   p   l  \0 376 001  \0 363   z
0102620    /   /   a   n   d   .   b   c   p   l  \r   /   /   n   e   w
0102640        a   n   a   l   y   z   e   r       f   o   r       s   i
0102660    l       f   i   l   e   s  \r  \r   g   e   t       "   s   y
0102700    s   d   e   f   s   .   d   "  \r   g   e   t       "   a   l
0102720    t   o   f   i   l   e   s   y   s   .   d   "  \r   g   e   t
0102740        "   a   n   a   .   d   e   f   s   "  \r  \r  \r  \r   /
0102760    /   R       E       A       D           C       O       M    
0103000    P       O       N       E       N       T           D       I
0103020        C       T       I       O       N       A       R       Y
0103040   \r  \r   l   e   t       G   e   t   C   o   m   p   N   a   m
0103060    e   s   (   d   i   c   t   c   n   t   ,   f   n   a   m   e
0103100    )       =   v   a   l   o   f  \r   [ 032   (   6   3   5   )
0103120   \r   l   e   t       n   e   w   f   p   D   i   c   t       =
0103140        D   p   r   v   e   c       +       d   i   c   t   c   n
0103160    t   *   (   l   C   F   A   +   1   )   +   1  \r   i   f    
0103200    n   e   w   f   p   D   i   c   t   !   -   1       e   q    
0103220  376 001  \0   B 213   -   1       t   h   e   n       r   e   s
0103240    u   l   t   i   s       d   i   c   t   c   n   t           /
0103260    /   f   i   l   e       n   o   t       p   r   e   s   e   n
0103300    t  \r   t   e   s   t       n   e   w   f   p   D   i   c   t
0103320        e   q       f   p   D   i   c   t 032   l   4   2   6   8
0103340   \r   i   f   s   o       R   e   s   e   t   s   (   d   i   c
0103360    t   )  \r   i   f   n   o   t  \r   [ 032   l   5   5   3   8
0103400   \r   i   f       d   i   c   t       n   e       0       t   h
0103420    e   n       C   l   o   s   e   s   (   d   i   c   t   )  \r
0103440    f   p   D   i   c   t       =       n   e   w   f   p   D   i
0103460    c   t  \r   d   i   c   t       =       O   p   e   n   F   i
0103500    l   e   (   f   n   a   m   e   ,   k   s   T   y   p   e   R
0103520    e   a   d   O   n   l   y   ,   1   ,   0   ,   f   p   D   i
0103540    c   t   ,   0   ,   S   i   l   Z   o   n   e   )  \r   i   f
0103560        d   i   c   t       e   q       0       t   h   e   n    
0103600    t   e   s   t       d   i   c   t   c   n   t       e   q    
0103620    0  \r  \t   i   f 376 001  \0 362 317   s   o       [       C
0103640    a   l   l   S   w   a   t   (   "   C   a   n   '   t       o
0103660    p   e   n       f   i   r   s   t       D   i   c   t   i   o
0103700    n   a   r   y   :   "   ,   f   n   a   m   e   )   ;       r
0103720    e   s   u   l   t   i   s       0       ]  \r  \t   i   f   n
0103740    o   t  \r  \t  \t   [  \r  \t  \t   E   r   r   2   (   "   *
0103760    n   C   o   u   l   d   n   '   t       o   p   e   n       D
0104000    i   c   t   i   o   n   a   r   y       f   i   l   e       "
0104020    ,   f   n   a   m   e   ,   n   o   E   r   r   o   r   )  \r
0104040   \t  \t   f   p   D   i   c   t   !   -   1       =       -   1
0104060    /   /   m   a   r   k       s   o       w   e       w   o   n
0104100    '   t       t   r   y       a   g   a   i   n  \r  \t  \t   r
0104120    e   s   u   l   t   i   s       d   i   c   t   c   n   t  \r
0104140   \t  \t   ] 032   l   6   8   0   8  \r   ] 032   l   5   5   3
0104160    8  \r  \r   l   e   t       p   n   a   m   e       =       v
0104200    e   c       3   2   ;   l   e   t       r   n   a   m   e    
0104220    =       v   e   c       3   2       / 376 001  \0   G 330   /
0104240    p   r   i   n   t       n   a   m   e   s       a   n   d    
0104260    r   e   a   l       n   a   m   e   s  \r   l   e   t       c
0104300    o   m   p   c   n   t       =       0  \r   w   h   i   l   e
0104320        R   e   a   d   H   d   r   (   p   n   a   m   e   ,   r
0104340    n   a   m   e   ,   d   i   c   t   )       d   o       /   /
0104360    u   n   u   s   u   a   l       t   e   r   m   i   n   a   t
0104400    i   o   n       o   n       @       o   r       e   o   f  \r
0104420    [ 032   l   4   2   6   8  \r   i   f       S   t   E   q   (
0104440    "   g   e   t   "   ,   p   n   a   m   e   )       t   h   e
0104460    n           /   /       g   e   t       a       n   e   w    
0104500    d   i   c   t   i   o   n   a   r   y  \r   [ 032   l   5   5
0104520    3   8  \r   i   f       d   i   c   t   c   n   t       e   q
0104540        8       t   h   e   n  \r  \t   [       E   r   r   2   (
0104560    "   *   n   T   o       m   a   n   y       D   i   c   t   i
0104600    o   n   a   r   y       f   i   l   e   s   ,       s   k   i
0104620    p   p   e   d       "   ,   r   n   a   m   e   ,   n   o 376
0104640  001  \0   ^ 346   E   r   r   o   r   )   ;       l   o   o   p
0104660        ]  \r   G   e   t   C   o   m   p   l   e   t   e   F   a
0104700    (   d   i   c   t   ,   f   p   D   i   c   t   )           /
0104720    /   s   a   v   e       c   u   r   r   e   n   t       f   i
0104740    l   e       p   o   s   i   t   i   o   n  \r   d   i   c   t
0104760    c   n   t       =       G   e   t   C   o   m   p   N   a   m
0105000    e   s   (   d   i   c   t   c   n   t   +   1   ,   r   n   a
0105020    m   e   )  \r   i   f       d   i   c   t       n   e       0
0105040        t   h   e   n       C   l   o   s   e   s   (   d   i   c
0105060    t   )           /   /   d   i   c   t       e   q       0    
0105100    i   f       n   e   w       d   i   c   t       i   s       n
0105120    o   t       p   r   e   s   e   n   t  \r   f   p   D   i   c
0105140    t       =       n   e   w   f   p   D   i   c   t           /
0105160    /   n   o   w       r   e   s   t   o   r   e       f   i   l
0105200    e       p   o   s   i   t   i   o   n       a   n   d       p
0105220    r   o   c   e   e   d  \r   d   i   c   t       =       O   p
0105240    e   n   F   i 376 001  \0 257   $   l   e   (   0   ,   k   s
0105260    T   y   p   e   R   e   a   d   O   n   l   y   ,   1   ,   0
0105300    ,   f   p   D   i   c   t   ,   0   ,   S   i   l   Z   o   n
0105320    e   )  \r   J   u   m   p   T   o   F   a   (   d   i   c   t
0105340    ,   l   v       f   p   D   i   c   t   >   >   C   F   A   .
0105360    f   a   )  \r   l   o   o   p 032   l   6   8   0   8  \r   ]
0105400   \r   l   e   t       p   s   t   p   =   L   o   o   k   u   p
0105420    (   p   n   a   m   e   )  \r   i   f       p   s   t   p    
0105440    e   q       0       t   h   e   n       l   o   o   p       /
0105460    /   t   h   i   s       c   o   m   p   o   n   e   n   t    
0105500    n   o   t       u   s   e   d  \r   /   /   c   h   a   n   g
0105520    e       t   h   e       t   y   p   e       f   i   e   l   d
0105540        i   n       t   h   e       s   y   m   b   o   l       t
0105560    a   b   l   e       t   o       t   y   p   e       s   t   C
0105600    o   m   p  \r   c   o   m   p   c   n   t       =       c   o
0105620    m   p   c   n   t   +   1  \r   p   s   t   p   >   >   s   t
0105640    r   e   c   .   t   y   p   e     376 001  \0 315 004   =    
0105660    s   t   C   o   m   p  \r   l   e   t       r   s   t   p    
0105700    =       L   o   o   k   u   p   (   r   n   a   m   e   )    
0105720    /   /   c   o   m   p   o   n   e   n   t   '   s       r   e
0105740    a   l       n   a   m   e  \r   t   e   s   t       r   s   t
0105760    p       e   q       0  \r   i   f   n   o   t  \r   [ 032   l
0106000    5   5   3   8  \r   l   e   t       t   y   p   e       =    
0106020    r   s   t   p   >   >   s   t   r   e   c   .   t   y   p   e
0106040   \r   i   f       (   t   y   p   e       n   e       s   t   C
0106060    o   m   p   )       &       (   t   y   p   e       n   e    
0106100    s   t   R   c   o   m   p   )       t   h   e   n  \r   E   r
0106120    r   2   (   "   *   n   C   o   m   p   o   n   e   n   t    
0106140    r   e   a   l       n   a   m   e       c   o   n   f   l   i
0106160    c   t   s       w   i   t   h       o   t   h   e   r       s
0106200    y   m   b   o   l       t   y   p   e   :       "   ,   r   n
0106220    a   m   e   )       /   /   t   h   i   s       i   s       n
0106240    o   t       f   a   t   a   l  \r 032   l   6   8   0 376 001
0106260   \0   2 322   8  \r   ]  \r  \r   i   f   s   o       r   s   t
0106300    p       =       D   e   f   i   n   e   S   y   m   b   o   l
0106320    (   r   n   a   m   e   ,   s   t   R   c   o   m   p   )  \r
0106340    p   s   t   p   >   >   s   t   r   e   c   .   r   n   a   m
0106360    e       =       r   s   t   p 032   l   5   5   3   8  \r   ]
0106400   \r   G   e   t   C   o   m   p   l   e   t   e   F   a   (   d
0106420    i   c   t   ,   f   p   D   i   c   t   )           /   /   t
0106440    h   i   s       s   a   v   e   s       a       f   i   l   e
0106460        p   o   i   n   t   e   r       t   o       t   h   e    
0106500    f   i   r   s   t       "   @   "       i   n       t   h   e
0106520        f   i   l   e  \r   f   p   D   i   c   t   !   -   1    
0106540    =       c   o   m   p   c   n   t           /   /   i   f    
0106560    0       t   h   e   n       t   h   i   s       d   i   c   t
0106600        i   s       n   o   t       u   s   e   d  \r   r   e   s
0106620    u   l   t   i   s       d   i   c   t   c   n   t 032   l   4
0106640    2   6   8  \r   ]  \r  \r  \r   a   n   d       R   e   a   d
0106660    H   d   r 376 001  \0 312 221   (   s   1   ,   s   2   ,   s
0106700    t   r   e   a   m   )       =       v   a   l   o   f  \r   [
0106720  032  \r   i   f       E   n   d   o   f   s   (   s   t   r   e
0106740    a   m   )       t   h   e   n       r   e   s   u   l   t   i
0106760    s       f   a   l   s   e  \r   s   1   !   0       =       0
0107000    ;       s   2   !   0       =       0  \r   l   e   t       t
0107020    c   1       =       R   e   a   d   N   a   m   e   (   s   1
0107040    ,   s   t   r   e   a   m   )  \r   i   f       (   t   c   1
0107060        n   e       $   =   )       &       (   t   c   1       n
0107100    e       $   _   )       t   h   e   n  \r   [ 032   l   4   2
0107120    6   8  \r   i   f       t   c   1       e   q       $   @    
0107140    t   h   e   n       r   e   s   u   l   t   i   s       f   a
0107160    l   s   e  \r   i   f       (   t   c   1       e   q       $
0107200    ;   )       %       (   t   c   1       e   q       $   |   )
0107220        d   o       [       F   l   u   s   h   L   i   n   e   (
0107240    s   t   r   e   a   m   )   ;       l   o   o   p       ]    
0107260    /   /   c   o   m   m   e   n 376 001  \0   1   <   t       l
0107300    i   n   e  \r  \r   i   f       t   c   1       e   q       $
0107320    *   n       t   h   e   n       l   o   o   p       /   /   b
0107340    l   a   n   k       l   i   n   e  \r  \r   /   /   s   o   m
0107360    e       t   y   p   e       o   f       e   r   r   o   r  \r
0107400    A   p   p   e   n   d   C   (   t   c   1   ,   s   1   )  \r
0107420    u   n   t   i   l       E   n   d   o   f   s   (   s   t   r
0107440    e   a   m   )   %   (   t   c   1       e   q       $   *   n
0107460    )       d   o  \r   [ 032   l   5   5   3   8  \r   t   c   1
0107500        =       G   e   t   s   (   s   t   r   e   a   m   )  \r
0107520    A   p   p   e   n   d   C   (   t   c   1   ,   s   1   ) 032
0107540    l   6   8   0   8  \r   ]  \r  \r   E   r   r   2   (   "   *
0107560    N   S   t   r   a   n   g   e       e   n   t   r   y       i
0107600    n       d   i   c   t   i   o   n   a   r   y       h   e   a
0107620    d   e   r   :       "   ,   s   1   )  \r   l   o   o   p    
0107640    /   /   t   h   r   o   w       a   w   a   y       t   h   i
0107660    s       l   i   n   e       a   n   d       g   o 376 001  \0
0107700  246 210       o   n       t   o       t   h   e       n   e   x
0107720    t 032   l   5   5   3   8  \r   ]  \r  \r   /   /   g   o   t
0107740        p   r   i   n   t       n   a   m   e   ,       g   e   t
0107760        r   e   a   l       n   a   m   e       n   o   w  \r   l
0110000    e   t       t   c   2       =       R   e   a   d   N   a   m
0110020    e   (   s   2   ,   s   t   r   e   a   m   )  \r   s   w   i
0110040    t   c   h   o   n       t   c   2       i   n   t   o  \r   [
0110060  032   l   4   2   6   8  \r   c   a   s   e       $   ;   :    
0110100    /   /   l   i   n   e       e   n   d   s       i   n       a
0110120        c   o   m   m   e   n   t  \r  \t   F   l   u   s   h   L
0110140    i   n   e   (   s   t   r   e   a   m   )  \r  \t   r   e   s
0110160    u   l   t   i   s       t   r   u   e  \r  \r   c   a   s   e
0110200        $   >   :          \t  \t   /   /   p   s   e   u   d   o
0110220        c   a   r   r   a   g   e       r   e   t   u   r   n  \r
0110240    c   a   s   e       $   *   n   :           r   e   s   u   l
0110260    t   i   s       t   r   u   e  \r  \r   d   e   f   a   u   l
0110300    t   : 376 001  \0 233   1           /   /   s   o   m   e    
0110320    f   u   n   n   y  \r   [ 032   l   5   5   3   8  \r   A   p
0110340    p   e   n   d   C   (   t   c   1   ,   s   1   )  \r   A   p
0110360    p   e   n   d   S   (   s   2   ,   s   1   )  \r   A   p   p
0110400    e   n   d   C   (   t   c   2   ,   s   1   )  \r   u   n   t
0110420    i   l       E   n   d   o   f   s   (   s   t   r   e   a   m
0110440    )   %   (   t   c   2       e   q       $   *   n   )       d
0110460    o  \r   [ 032   l   6   8   0   8  \r   t   c   2       =    
0110500    G   e   t   s   (   s   t   r   e   a   m   )  \r   A   p   p
0110520    e   n   d   C   (   t   c   2   ,   s   1   ) 032   l   8   0
0110540    7   8  \r   ]  \r  \r   E   r   r   2   (   "   *   n   S   t
0110560    r   a   n   g   e       e   n   t   r   y       i   n       d
0110600    i   c   t   i   o   n   a   r   y       h   e   a   d   e   r
0110620    :       "   ,   s   1   )  \r   l   o   o   p       /   /   d
0110640    i   s   c   a   r   d       f   u   n   n   y       l   i   n
0110660    e 032   l   6   8   0   8  \r   ] 032   l   5   5   3   8  \r
0110700    ] 032   l   4   2   6   8 376 001  \0 267 334  \r   ]       r
0110720    e   p   e   a   t  \r  \r  \r  \r   a   n   d       R   e   a
0110740    d   N   a   m   e   (   s   t   r   i   n   g   ,   s   t   r
0110760    e   a   m   )       =       v   a   l   o   f  \r   [ 032  \r
0111000    l   e   t       c       =       G   e   t   s   (   s   t   r
0111020    e   a   m   )  \r   i   f       c       e   q       #   3   2
0111040        t   h   e   n       c       =       $   ;           /   /
0111060    ^   Z   :       c   o   n   v   e   r   t       B   r   a   v
0111100    o       f   o   r   m   a   t       i   n   t   o       a    
0111120    c   o   m   m   e   n   t  \r   i   f       (   c       e   q
0111140        $   *   n   )   %   (   c       e   q       $   =   )   %
0111160    (   c       e   q       $   @   )   %   (   c       e   q    
0111200    $   ;   )   %   (   c       e   q       $   |   )   %   (   c
0111220        e   q       $   >   )       t   h   e   n       r   e   s
0111240    u   l   t   i   s       c  \r   i   f       c       l   e    
0111260    $   *   s       t   h   e   n       l   o   o   p       /   /
0111300    c   o   n   t   r   o   l       c   h   a   r 376  \0   x   7
0111320  307   a   c   t   e   r  \r   A   p   p   e   n   d   C   (   c
0111340    ,   s   t   r   i   n   g   ) 032   l   4   2   6   8  \r   i
0111360    f       s   t   r   i   n   g   >   >   s   t   r   .   l   e
0111400    n   g   t   h       g   r       6   0       d   o       C   a
0111420    l   l   S   w   a   t   (   "   N   a   m   e       i   n    
0111440    D   i   c   t       t   o       l   o   n   g   :   "   ,   s
0111460    t   r   i   n   g   ) 032   l   4   2   6   8  \r   ]       r
0111500    e   p   e   a   t  \r  \r 032  \r 377  \0  \0   a   n   e   .
0111520    b   c   p   l  \0 376 001  \0 251   2   /   /   a   n   e   .
0111540    b   c   p   l  \r   /   /   n   e   w       a   n   a   l   y
0111560    z   e   r       f   o   r       s   i   l       f   i   l   e
0111600    s  \r  \r   g   e   t       "   s   y   s   d   e   f   s   .
0111620    d   "  \r   g   e   t       "   a   n   a   .   d   e   f   s
0111640    "  \r  \r  \r   /   /   B       U       I       L       D    
0111660        C       O       M       P       O       N       E       N
0111700        T           B       L       O       C       K       S    
0111720        F       R       O       M           M       A       C    
0111740    T  \r  \r   l   e   t       A   d   d   C   o   m   p   s   (
0111760    )       b   e      \r   [ 032   (   6   3   5   )  \r   f   o
0112000    r       c   h   a   r       =       $   0       t   o       $
0112020    9       d   o       B   u   i   l   d   T   e   m   p   l   a
0112040    t   e   (   8   ,   c   h   a   r   )  \r   f   o   r       f
0112060    o   n   t       =       9       t   o       1   3       d   o
0112100   \r   [ 032   l   4   2   6   8  \r   f   o   r       c   h   a
0112120    r       =       0       t   o       1 376 001  \0   C 200   2
0112140    7       d   o       B   u   i   l   d   T   e   m   p   l   a
0112160    t   e   (   f   o   n   t   ,   c   h   a   r   ) 032   l   5
0112200    5   3   8  \r   ] 032   l   4   2   6   8  \r   ]  \r  \r   a
0112220    n   d       B   u   i   l   d   T   e   m   p   l   a   t   e
0112240    (   f   o   n   t   ,   c   h   a   r   )       b   e 032  \r
0112260    [ 032  \r   /   /       m   a   k   e       a       t   e   m
0112300    p   l   a   t   e       f   o   r       t   h   e       m   a
0112320    c   r   o       d   e   f   i   n   e   d       a   t       f
0112340    o   n   t   ,   c   h   a   r  \r   l   e   t       p   t   r
0112360        =       @   (   M   a   c   t   +   (   f   o   n   t   -
0112400    8   )   *   1   2   8   +   c   h   a   r   )  \r   i   f    
0112420    p   t   r       e   q       0       t   h   e   n       r   e
0112440    t   u   r   n  \r  \r   l   e   t       m   f   a   t   a   l
0112460        =       f   a   l   s   e  \r   l   e   t       n   u   m
0112500    t   n   a   m   e   s       =       0  \r   l   e   t       n
0112520    u   m   c   p   o   i   n   t   s       =       0  \r   l 376
0112540  001  \0   2   Q   e   t       n   u   m   p   n   a   m   e   s
0112560        =       0  \r  \r   /   /   f   i   r   s   t   ,       c
0112600    o   u   n   t       t   h   e       n   u   m   b   e   r    
0112620    o   f       t   y   p   e       n   a   m   e       s   t   r
0112640    i   n   g   s       i   n       t   h   e       d   e   f   i
0112660    n   i   t   i   o   n  \r   /   /   a   n   d       t   h   e
0112700        n   u   m   b   e   r       o   f       c   o   n   n   e
0112720    c   t   i   o   n       p   o   i   n   t   s       a   n   d
0112740        p   i   n       n   a   m   e   s   .  \r   /   /   a   l
0112760    s   o       c   h   e   c   k       f   o   r       o   v   e
0113000    r   l   a   p   p   i   n   g       c   o   n   n   e   c   t
0113020    i   o   n       p   o   i   n   t   s  \r  \r   l   e   t    
0113040    l   i   n   k       =       p   t   r   ;       u   n   t   i
0113060    l       (   l   i   n   k       e   q       0   )   %   (   l
0113100    i   n   k       e   q       -   1   )       d   o  \r   [ 032
0113120    l   4   2   6   8  \r   l   e   t       b   t   y   p   e    
0113140    =       l   i 376 001  \0 005 214   n   k   >   >   n   o   d
0113160    e   .   t   y   p   e  \r   i   f       b   t   y   p   e    
0113200    e   q       b   t   S   t   r   i   n   g       t   h   e   n
0113220   \r   [ 032   l   5   5   3   8  \r   l   e   t       s   t   p
0113240        =       l   i   n   k   >   >   n   o   d   e   .   v   a
0113260    l       /   /   s   y   m   b   o   l       t   a   b   l   e
0113300        p   t   r  \r   l   e   t       s   t   t   y   p   e    
0113320    =       s   t   p   >   >   s   t   r   e   c   .   t   y   p
0113340    e       /   /   s   y   m   b   o   l       t   y   p   e  \r
0113360    s   w   i   t   c   h   o   n       s   t   t   y   p   e    
0113400    i   n   t   o  \r   [ 032   l   6   8   0   8  \r   c   a   s
0113420    e       s   t   R   c   o   m   p   :  \r   c   a   s   e    
0113440    s   t   C   o   m   p   :      \r   l   i   n   k   >   >   n
0113460    o   d   e   .   u   s   e   d       =       1   ;   n   u   m
0113500    t   n   a   m   e   s       =       n   u   m   t   n   a   m
0113520    e   s   +   1   ;   e   n   d   c   a   s   e       /   /   m
0113540    a   r   k       t   h   e       n 376 001  \0   K   {   o   d
0113560    e       u   s   e   d       s   o       t   h   a   t  \r   /
0113600    /   i   t       w   o   n   '   t       b   e       c   o   n
0113620    s   i   d   e   r   e   d       a   s       a       p   i   n
0113640        n   a   m   e       b   y       F   i   n   d   B   e   s
0113660    t   N   a   m   e  \r  \r   c   a   s   e       s   t   P   i
0113700    n   :       n   u   m   p   n   a   m   e   s       =       n
0113720    u   m   p   n   a   m   e   s   +   1   ;       e   n   d   c
0113740    a   s   e  \r  \r   d   e   f   a   u   l   t   :  \r   E   r
0113760    r   M   (   "   *   n   N   a   m   e       i   n       c   o
0114000    m   p   d   e   f       h   a   s       w   r   o   n   g    
0114020    s   y   m   b   o   l       t   y   p   e   :   "   ,   f   o
0114040    n   t   ,   c   h   a   r   ,   l   v       (   s   t   p   >
0114060    >   s   t   r   e   c   .   s   t   )   ,   l   i   n   k   )
0114100  032   l   8   0   7   8  \r   ] 032   l   6   8   0   8  \r   ]
0114120   \r  \r   i   f       (   b   t   y   p   e       e   q       b
0114140    t   S   c   h   a   r   )   &   (   l   i   n   k   > 376 001
0114160   \0 274   &   >   n   o   d   e   .   u   s   e   d       e   q
0114200        0   )       t   h   e   n       /   /   n   o   n   -   d
0114220    u   p   l   i   c   a   t   e       c   o   n   n   e   c   t
0114240    i   o   n       p   o   i   n   t  \r   [ 032   l   5   5   3
0114260    8  \r   n   u   m   c   p   o   i   n   t   s       =       n
0114300    u   m   c   p   o   i   n   t   s   +   1  \r   /   /   l   o
0114320    o   k       f   o   r   w   a   r   d       t   h   r   o   u
0114340    g   h       t   h   e       l   i   s   t       a   n   d    
0114360    s   e   a   r   c   h       f   o   r       d   u   p   l   i
0114400    c   a   t   e  \r   /   /   c   p   o   i   n   t   s   .    
0114420        M   a   r   k       t   h   e   m       u   s   e   d    
0114440    a   n   d       c   o   m   p   l   a   i   n  \r   l   e   t
0114460        x       =       l   i   n   k   >   >   n   o   d   e   .
0114500    x  \r   l   e   t       y       =       l   i   n   k   >   >
0114520    n   o   d   e   .   y  \r   l   e   t       l   2       =    
0114540    @   l   i   n   k   ;       u   n   t   i   l       (   l   2
0114560        e   q 376 001  \0 234 355       0   )   %   (   l   2    
0114600    e   q       -   1   )       d   o  \r   [ 032   l   6   8   0
0114620    8  \r   l   e   t       t   l       =       l   2   ;   l   2
0114640        =       @   l   2  \r   i   f       t   l   >   >   n   o
0114660    d   e   .   t   y   p   e       e   q       b   t   S   t   r
0114700    i   n   g       t   h   e   n       l   o   o   p  \r   i   f
0114720        t   l   >   >   n   o   d   e   .   u   s   e   d       t
0114740    h   e   n       l   o   o   p       /   /   a   l   r   e   a
0114760    d   y       a       d   u   p   l   i   c   a   t   e  \r   i
0115000    f       (   t   l   >   >   n   o   d   e   .   x       e   q
0115020        x   )   &   (   t   l   >   >   n   o   d   e   .   y    
0115040    e   q       y   )       t   h   e   n  \r   [ 032   l   8   0
0115060    7   8  \r   E   r   r   M   (   "   *   n   C   o   m   p   d
0115100    e   f       c   o   n   t   a   i   n   s       o   v   e   r
0115120    l   a   p   p   i   n   g       c   o   n   n   e   c   t   i
0115140    o   n       p   o   i   n   t   s   :   "   ,   f   o   n   t
0115160    ,   c   h   a   r   ,   0   ) 376 001  \0 001 331  \r   t   l
0115200    >   >   n   o   d   e   .   u   s   e   d       =       1 032
0115220    l   9   3   4   8  \r   ] 032   l   8   0   7   8  \r   ] 032
0115240    l   6   8   0   8  \r   ]  \r   l   i   n   k       =       @
0115260    l   i   n   k 032   l   5   5   3   8  \r   ]  \r  \r   /   /
0115300    d   o       s   o   m   e       c   h   e   c   k   s       o
0115320    n       t   h   e       r   e   a   s   o   n   a   b   l   e
0115340    n   e   s   s       o   f       t   h   e       d   e   f   i
0115360    n   i   t   i   o   n  \r   i   f       n   u   m   t   n   a
0115400    m   e   s       g   r       1       t   h   e   n  \r   [ 032
0115420    l   4   2   6   8  \r   E   r   r   M   (   "   *   n   C   o
0115440    m   p   d   e   f       h   a   s       m   o   r   e       t
0115460    h   a   n       o   n   e       t   y   p   e       n   a   m
0115500    e   "   ,   f   o   n   t   ,   c   h   a   r   ,   0   )  \r
0115520    m   f   a   t   a   l       =       t   r   u   e 032   l   5
0115540    5   3   8  \r   ]  \r  \r   i   f       n   u   m   p   n   a
0115560    m   e   s       g   r       n   u   m   c   p   o 376 001  \0
0115600  373 027   i   n   t   s       t   h   e   n      \r   [ 032   l
0115620    4   2   6   8  \r   E   r   r   M   (   "   *   n   C   o   m
0115640    p   d   e   f       h   a   s       m   o   r   e       p   i
0115660    n       n   a   m   e   s       t   h   a   n       c   o   n
0115700    n   e   c   t   i   o   n       p   o   i   n   t   s   :   "
0115720    ,   f   o   n   t   ,   c   h   a   r   ,   0   )  \r   m   f
0115740    a   t   a   l       =       t   r   u   e 032   l   5   5   3
0115760    8  \r   ]  \r  \r   i   f       n   u   m   c   p   o   i   n
0116000    t   s       e   q       0       t   h   e   n 032   l   4   2
0116020    6   8  \r   [ 032   l   4   2   6   8  \r   E   r   r   M   (
0116040    "   *   n   C   o   m   p   d   e   f       h   a   s       n
0116060    o       c   o   n   n   e   c   t   i   o   n       p   o   i
0116100    n   t   s   :   "   ,   f   o   n   t   ,   c   h   a   r   ,
0116120    0   )  \r   m   f   a   t   a   l       =       t   r   u   e
0116140  032   l   5   5   3   8  \r   ]  \r  \r   i   f       m   f   a
0116160    t   a   l       t   h   e   n       r   e   t   u   r   n    
0116200        / 376 001  \0 276 377   /   d   o   n   '   t       t   r
0116220    y       t   o       b   u   i   l   d       t   e   m   p   l
0116240    a   t   e  \r  \r   /   /   t   h   e       d   e   f   i   n
0116260    i   t   i   o   n       s   e   e   m   s       r   e   a   s
0116300    o   n   a   b   l   e   -       b   u   i   l   d       t   h
0116320    e       c   o   m   p   o   n   e   n   t       d   e   f   i
0116340    n   i   t   i   o   n       t   e   m   p   l   a   t   e   .
0116360   \r   /   /   t   h   e       n   u   m   b   e   r       o   f
0116400        e   n   t   r   i   e   s       i   n       t   h   e    
0116420    d   e   f   i   n   i   t   i   o   n       b   l   o   c   k
0116440        i   s       t   h   e       n   u   m   b   e   r       o
0116460    f       c   o   n   n   e   c   t   i   o   n       p   o   i
0116500    n   t   s  \r  \r   l   e   t       t   e   m   p   l       =
0116520        v   e   c       2   5   6       /   /   s   p   a   c   e
0116540        f   o   r       t   e   m   p   l   a   t   e  \r   Z   e
0116560    r   o   (   t   e   m   p   l   ,   2   5   6   )  \r   l   e
0116600    t       c   o   n   p   o 376 001  \0 375 256   i   n   t   i
0116620    n   d   e   x       =       1  \r   l   e   t       l   i   n
0116640    k       =       p   t   r   ;       u   n   t   i   l       (
0116660    l   i   n   k       e   q       0   )   %   (   l   i   n   k
0116700        e   q       -   1   )       d   o  \r   [ 032   l   4   2
0116720    6   8  \r   l   e   t       t   l       =       l   i   n   k
0116740    ;       l   i   n   k       =       @   l   i   n   k  \r   l
0116760    e   t       b   t   y   p   e       =       t   l   >   >   n
0117000    o   d   e   .   t   y   p   e  \r   i   f       b   t   y   p
0117020    e       e   q       b   t   S   t   r   i   n   g       t   h
0117040    e   n       /   /   p   i   n       n   a   m   e       o   r
0117060        c   o   m   p   o   n   e   n   t       n   a   m   e  \r
0117100    [ 032   l   5   5   3   8  \r   l   e   t       s   t   t   y
0117120    p   e       =       (   t   l   >   >   n   o   d   e   .   v
0117140    a   l   )   >   >   s   t   r   e   c   .   t   y   p   e  \r
0117160    i   f       (   s   t   t   y   p   e       e   q       s   t
0117200    C   o   m   p   )   %   (   s   t   t   y   p 376 001  \0   J
0117220  250   e       e   q       s   t   R   c   o   m   p   )       t
0117240    h   e   n  \r   [ 032   l   6   8   0   8  \r   t   e   m   p
0117260    l   >   >   c   o   m   p   b   l   o   c   k   .   c   o   m
0117300    p   t   y   p   e       =       t   l   >   >   n   o   d   e
0117320    .   v   a   l  \r 032   l   8   0   7   8  \r   ]  \r   l   o
0117340    o   p       /   /   g   o       o   n       t   o       n   e
0117360    x   t       b   l   o   c   k 032   l   6   8   0   8  \r   ]
0117400   \r   /   /   t   h   e       n   o   d   e       i   s       a
0117420        c   o   n   n   e   c   t   i   o   n       p   o   i   n
0117440    t  \r   l   e   t       p   i   n   n   a   m   e       =    
0117460    F   i   n   d   B   e   s   t   N   a   m   e   (   t   l   ,
0117500    p   t   r   )  \r   t   e   s   t       p   i   n   n   a   m
0117520    e       e   q       0  \r  \r   i   f   n   o   t       p   i
0117540    n   n   a   m   e       =       p   i   n   n   a   m   e   >
0117560    >   n   o   d   e   .   v   a   l       /   /   h   e   r   e
0117600        w   e       w   a   n   t       t   h   e       s   t   p
0117620    , 376 001  \0   7 350       n   o   t       t   h   e       b
0117640    l   o   c   k       p   o   i   n   t   e   r  \r  \r   i   f
0117660    s   o       i   f       n   u   m   c   p   o   i   n   t   s
0117700        g   r       n   u   m   p   n   a   m   e   s       t   h
0117720    e   n       p   i   n   n   a   m   e       =       D   e   f
0117740    a   u   l   t   P   i   n   (   t   l   )  \r   /   /   d   o
0117760    n   '   t       d   e   f   a   u   l   t       p   i   n    
0120000    i   f       t   h   e   r   e       a   r   e       e   n   o
0120020    u   g   h       n   a   m   e   s  \r   i   f       p   i   n
0120040    n   a   m   e       e   q       0       t   h   e   n  \r   [
0120060  032   l   5   5   3   8  \r   E   r   r   M   (   "   *   n   C
0120100    a   n   '   t       f   i   n   d       n   a   m   e       f
0120120    o   r       c   o   n   p   o   i   n   t       i   n       c
0120140    o   m   p   d   e   f   :   "   ,   f   o   n   t   ,   c   h
0120160    a   r   ,   0   )  \r   m   f   a   t   a   l       =       t
0120200    r   u   e 032   l   6   8   0   8  \r   ]  \r   M   a   k   e
0120220    C   p   o   i   n   t 376 001  \0 031   %   (   c   o   n   p
0120240    o   i   n   t   i   n   d   e   x   ,   t   e   m   p   l   ,
0120260    t   l   ,   p   i   n   n   a   m   e   )       /   /   c   o
0120300    p   y       i   n   t   o       t   e   m   p   l  \r  \r   c
0120320    o   n   p   o   i   n   t   i   n   d   e   x       =       c
0120340    o   n   p   o   i   n   t   i   n   d   e   x   +   1 032   l
0120360    5   5   3   8  \r   ]  \r  \r  \r   /   /   c   h   e   c   k
0120400        t   h   a   t       a   l   l       s   t   r   i   n   g
0120420    s       i   n       t   h   e       d   e   f   i   n   i   t
0120440    i   o   n       h   a   v   e       b   e   e   n       u   s
0120460    e   d  \r   l   e   t       l   i   n   k       =       p   t
0120500    r   ;       u   n   t   i   l       (   l   i   n   k       e
0120520    q       0   )   %   (   l   i   n   k       e   q       -   1
0120540    )       d   o  \r   [ 032   l   4   2   6   8  \r   i   f    
0120560    (   l   i   n   k   >   >   n   o   d   e   .   t   y   p   e
0120600        e   q       b   t   S   t   r   i   n   g   )       &    
0120620    (   l   i   n   k   >   >   n   o   d   e 376 001  \0 352  \a
0120640    .   u   s   e   d       n   e       1   )       t   h   e   n
0120660   \r   [ 032   l   5   5   3   8  \r   E   r   r   M   (   "   *
0120700    n   C   a   n   '   t       a   s   s   i   g   n       s   t
0120720    r   i   n   g       i   n       c   o   m   p   d   e   f   :
0120740    "   ,   f   o   n   t   ,   c   h   a   r   ,   l   v   (   (
0120760    l   i   n   k   >   >   n   o   d   e   .   v   a   l   )   >
0121000    >   s   t   r   e   c   .   s   t   )   )  \r   m   f   a   t
0121020    a   l       =       t   r   u   e 032   l   6   8   0   8  \r
0121040    ]  \r   l   i   n   k       =       @   l   i   n   k 032   l
0121060    5   5   3   8  \r   ]  \r  \r   i   f       m   f   a   t   a
0121100    l       t   h   e   n       r   e   t   u   r   n       /   /
0121120    d   o   n   '   t       t   r   y       t   o       u   s   e
0121140        t   h   e       t   e   m   p   l   a   t   e  \r  \r   /
0121160    /   f   i   n   i   s   h       t   h   e       t   e   m   p
0121200    l   a   t   e  \r   t   e   m   p   l   >   >   c   o   m   p
0121220    b   l   o   c   k   .   b   o   a   r   d   l   o   c       =
0121240  376 001  \0   ?  \n       0  \r   t   e   m   p   l   >   >   c
0121260    o   m   p   b   l   o   c   k   .   g   r   o   u   p       =
0121300        0  \r   t   e   m   p   l   >   >   c   o   m   p   b   l
0121320    o   c   k   .   n   u   m   c   p   o   i   n   t   s       =
0121340        n   u   m   c   p   o   i   n   t   s  \r  \r   /   /   t
0121360    h   e       t   e   m   p   l   a   t   e       i   s       n
0121400    o   w       c   o   m   p   l   e   t   e   .           W   e
0121420        g   o       t   h   r   o   u   g   h       a   l   l    
0121440    t   h   e      \r   /   /   c   o   m   p   o   n   e   n   t
0121460    s   ,       a   n   d       a   d   d       a   n       i   n
0121500    s   t   a   n   c   e       o   f       t   h   e       t   e
0121520    m   p   l   a   t   e       e   v   e   r   y  \r   /   /   p
0121540    l   a   c   e       t   h   e       c   o   m   p   o   n   e
0121560    n   t       a   p   p   e   a   r   s  \r  \r   l   e   t    
0121600    t   e   m   l   e   n   g   t   h       =       n   u   m   c
0121620    p   o   i   n   t   s   *   (   s   i   z   e       c   o   n
0121640    p   o   i   n   t 376 001  \0   `   ,   )   /   1   6       +
0121660        (   o   f   f   s   e   t       c   o   m   p   b   l   o
0121700    c   k   .   g   r   o   u   p   )   /   1   6       +   1    
0121720    /   /   l   e   n   g   t   h       o   f       t   e   m   p
0121740    l   a   t   e  \r  \r   l   e   t       m   i   n   d   e   x
0121760        =       (   f   o   n   t   -   8   )   *   1   2   8    
0122000    +       c   h   a   r  \r   l   e   t       n   l   i   n   k
0122020        =       C   o   m   p   s   ;       u   n   t   i   l    
0122040    n   l   i   n   k       e   q       0       d   o  \r   [ 032
0122060    l   4   2   6   8  \r   i   f       n   l   i   n   k   >   >
0122100    c   o   m   p   .   m   i   n   d   e   x       e   q       m
0122120    i   n   d   e   x       t   h   e   n       A   d   d   C   o
0122140    m   p   (   n   l   i   n   k   ,   t   e   m   p   l   ,   t
0122160    e   m   l   e   n   g   t   h   )  \r   n   l   i   n   k    
0122200    =       @   n   l   i   n   k 032   l   5   5   3   8  \r   ]
0122220   \r 032   l   4   2   6   8  \r   ]  \r  \r  \r   a   n   d    
0122240    E   r   r   M   (   s   t   1   ,   f 376 001  \0 270   i   o
0122260    n   t   ,   c   h   a   r   ,   s   t   2   ,   j   u   n   k
0122300    )       b   e  \r   [ 032  \r   l   e   t       v       =    
0122320    v   e   c       1   2   8   ;       v   !   0       =       0
0122340   \r   A   p   p   e   n   d   S   (   s   t   1   ,   v   )  \r
0122360    A   p   p   e   n   d   S   (   "       F   o   n   t   :    
0122400    "   ,   v   )  \r   A   p   p   e   n   d   N   (   f   o   n
0122420    t   -   4   ,   v   )  \r   A   p   p   e   n   d   S   (   "
0122440        C   h   a   r   :       "   ,   v   )  \r   A   p   p   e
0122460    n   d   C   (   c   h   a   r   ,   v   )  \r   A   p   p   e
0122500    n   d   C   (   $   *   s   ,   v   )  \r   i   f       s   t
0122520    2       n   e       0       t   h   e   n       A   p   p   e
0122540    n   d   S   (   s   t   2   ,   v   )  \r   E   r   r   (   v
0122560    ) 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       F
0122600    i   n   d   B   e   s   t   N   a   m   e   (   p   n   o   d
0122620    e   ,   s   e   a   r   c   h   l   i   s   t   )       =   v
0122640    a   l   o   f  \r   [ 032  \r   /   /   p   n   o   d   e 376
0122660  001  \0 322 362       p   o   i   n   t   s       t   o       a
0122700        p   i   n       n   o   d   e       (   i   n       s   e
0122720    a   r   c   h   l   i   s   t   )  \r   /   /   f   i   n   d
0122740        t   h   e       c   l   o   s   e   s   t       u   n   u
0122760    s   e   d       s   t   r   i   n   g       i   n       s   e
0123000    a   r   c   h   l   i   s   t  \r   /   /   i   f       t   h
0123020    e   r   e       i   s       n   o   n   e   ,       o   r    
0123040    i   f       t   h   e   r   e       i   s       a       p   i
0123060    n       c   l   o   s   e   r  \r   /   /   t   o       t   h
0123100    e       c   a   n   d   i   d   a   t   e       t   h   a   n
0123120        p   n   o   d   e   ,       r   e   t   u   r   n       0
0123140    ,       o   t   h   e   r   w   i   s   e  \r   /   /   m   a
0123160    r   k       t   h   e       n   a   m   e       u   s   e   d
0123200        a   n   d       r   e   t   u   r   n       i   t  \r  \r
0123220    l   e   t       p   x       =       p   n   o   d   e   >   >
0123240    n   o   d   e   .   x  \r   l   e   t       p   y       =    
0123260    p   n   o   d 376 001  \0   {   [   e   >   >   n   o   d   e
0123300    .   y  \r   l   e   t       c   a   n   d       =       0    
0123320    /   /   p   o   i   n   t   e   r       t   o       c   a   n
0123340    d   i   d   a   t   e       n   o   d   e  \r   l   e   t    
0123360    d   c   a   n   d       =       1   0   0   0   0           /
0123400    /   d   i   s   t   a   n   c   e       t   o       c   a   n
0123420    d   i   d   a   t   e       n   o   d   e  \r   l   e   t    
0123440    p   t   r       =       s   e   a   r   c   h   l   i   s   t
0123460        ;       u   n   t   i   l       (   p   t   r       e   q
0123500        0   )   %   (   p   t   r       e   q       -   1   )    
0123520    d   o  \r   [ 032   l   4   2   6   8  \r   l   e   t       t
0123540    l       =       p   t   r   ;       p   t   r       =       p
0123560    t   r   >   >   n   o   d   e   .   l   i   n   k  \r   i   f
0123600        t   l   >   >   n   o   d   e   .   u   s   e   d       e
0123620    q       1       t   h   e   n       l   o   o   p  \r   i   f
0123640        t   l   >   >   n   o   d   e   .   t   y   p   e       n
0123660    e       b   t   S   t   r   i   n 376 001  \0   E 307   g    
0123700    t   h   e   n       l   o   o   p  \r   l   e   t       d   i
0123720    s   t       =       N   d   i   s   t   (   p   x   ,   p   y
0123740    ,   t   l   )  \r   i   f       d   i   s   t       l   s    
0123760    d   c   a   n   d       t   h   e   n  \r   [ 032   l   5   5
0124000    3   8  \r   c   a   n   d       =       t   l  \r   d   c   a
0124020    n   d       =       d   i   s   t 032   l   6   8   0   8  \r
0124040    ] 032   l   5   5   3   8  \r   ]  \r  \r   i   f       c   a
0124060    n   d       e   q       0       t   h   e   n       r   e   s
0124100    u   l   t   i   s       0  \r  \r   /   /   c   h   e   c   k
0124120        t   h   a   t       t   h   e   r   e       i   s       n
0124140    o       p   i   n       c   l   o   s   e   r       t   o    
0124160    t   h   e       c   a   n   d   i   d   a   t   e       s   t
0124200    r   i   n   g       t   h   a   n  \r   /   /   d   c   a   n
0124220    d  \r  \r   p   x       =       c   a   n   d   >   >   n   o
0124240    d   e   .   x  \r   p   y       =       c   a   n   d   >   >
0124260    n   o   d   e   .   y  \r   p   t   r   =   s   e   a 376 001
0124300   \0 266 260   r   c   h   l   i   s   t   ;       u   n   t   i
0124320    l       (   p   t   r       e   q       0   )   %   (   p   t
0124340    r       e   q       -   1   )       d   o  \r   [ 032   l   4
0124360    2   6   8  \r   l   e   t       t   l       =       p   t   r
0124400    ;       p   t   r       =       p   t   r   >   >   n   o   d
0124420    e   .   l   i   n   k  \r   i   f       t   l   >   >   n   o
0124440    d   e   .   t   y   p   e       n   e       b   t   S   c   h
0124460    a   r       t   h   e   n       l   o   o   p       /   /   n
0124500    o   t       a       c   o   n   n   e   c   t   i   o   n    
0124520    p   o   i   n   t  \r   i   f       N   d   i   s   t   (   p
0124540    x   ,   p   y   ,   t   l   )       l   s       d   c   a   n
0124560    d       t   h   e   n       r   e   s   u   l   t   i   s    
0124600    0       /   /   t   h   e   r   e       i   s       a       c
0124620    l   o   s   e   r       c   o   n   n   e   c   t   i   o   n
0124640        p   o   i   n   t 032   l   5   5   3   8  \r   ]  \r   c
0124660    a   n   d   >   >   n   o   d   e   .   u   s   e   d       =
0124700        1     376 001  \0   v   j   /   /   m   a   r   k       t
0124720    h   e       c   a   n   d   i   d   a   t   e       s   t   r
0124740    i   n   g       u   s   e   d  \r   r   e   s   u   l   t   i
0124760    s       c   a   n   d       /   /   a   n   d       r   e   t
0125000    u   r   n       i   t  \r 032   l   4   2   6   8  \r   ]  \r
0125020   \r   a   n   d       N   d   i   s   t   (   x   ,   y   ,   n
0125040    o   d   e   )       =       v   a   l   o   f       /   /   m
0125060    a   n   h   a   t   t   a   n       d   i   s   t   a   n   c
0125100    e  \r   [ 032  \r   l   e   t       n   x       =       n   o
0125120    d   e   >   >   n   o   d   e   .   x  \r   l   e   t       n
0125140    y       =       n   o   d   e   >   >   n   o   d   e   .   y
0125160   \r   r   e   s   u   l   t   i   s       (   n   x       g   r
0125200        x   ?   n   x   -   x   ,   x   -   n   x   )   +   (   n
0125220    y       g   r       y   ?   n   y   -   y   ,   y   -   n   y
0125240    ) 032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       D
0125260    e   f   a   u   l   t   P   i   n   (   n   o   d   e   p   t
0125300    r   )       =       v   a   l 376 001  \0 207 245   o   f 032
0125320   \r   [ 032  \r   r   e   s   u   l   t   i   s       s   e   l
0125340    e   c   t   o   n       n   o   d   e   p   t   r   >   >   n
0125360    o   d   e   .   v   a   l       i   n   t   o  \r   [ 032   l
0125400    4   2   6   8  \r   c   a   s   e       c   h   L   c   o   n
0125420    :           I   n   s   t   p  \r   c   a   s   e       c   h
0125440    R   c   o   n   :       O   u   t   s   t   p  \r   d   e   f
0125460    a   u   l   t   :       0 032   l   5   5   3   8  \r   ]  \r
0125500  032   l   4   2   6   8  \r   ]  \r  \r   a   n   d       M   a
0125520    k   e   C   p   o   i   n   t   (   c   p   i   ,   t   e   m
0125540    p   l   ,   t   l   ,   p   n   a   m   e   )       b   e  \r
0125560    [ 032  \r   t   e   m   p   l   >   >   c   o   m   p   b   l
0125600    o   c   k   .   x   ^   c   p   i       =       t   l   >   >
0125620    n   o   d   e   .   x  \r   t   e   m   p   l   >   >   c   o
0125640    m   p   b   l   o   c   k   .   c   p   t   ^   c   p   i    
0125660    =       s   e   l   e   c   t   o   n       t   l   >   >   n
0125700    o   d   e   .   v   a   l       i   n   t   o  \r 376 001  \0
0125720    6 003   [ 032   l   4   2   6   8  \r   c   a   s   e       c
0125740    h   T   c   o   n   :       c   p   t   T   o   p  \r   c   a
0125760    s   e       c   h   B   c   o   n   :       c   p   t   B   o
0126000    t  \r   c   a   s   e       c   h   L   c   o   n   :       c
0126020    p   t   L   e   f   t  \r   c   a   s   e       c   h   R   c
0126040    o   n   :       c   p   t   R   i   g   h   t 032   l   5   5
0126060    3   8  \r   ]  \r   t   e   m   p   l   >   >   c   o   m   p
0126100    b   l   o   c   k   .   y   ^   c   p   i       =       t   l
0126120    >   >   n   o   d   e   .   y  \r   t   e   m   p   l   >   >
0126140    c   o   m   p   b   l   o   c   k   .   p   i   n   n   a   m
0126160    e   ^   c   p   i       =       p   n   a   m   e  \r   /   /
0126200    a   l   l       o   t   h   e   r       f   i   e   l   d   s
0126220        w   i   l   l       b   e       z   e   r   o   ,       s
0126240    i   n   c   e       t   e   m   p   l       w   a   s       c
0126260    l   e   a   r   e   d       i   n   i   t   i   a   l   l   y
0126300  032   l   4   2   6   8  \r   ]  \r 032  \r  \r  \r 032   l   4
0126320    2   6 376 001  \0 246 312   8  \r   a   n   d       A   d   d
0126340    C   o   m   p   (   p   l   a   c   e   ,   t   e   m   p   l
0126360    ,   t   e   m   l   e   n   g   t   h   )       b   e  \r   [
0126400  032  \r   /   /   a   d   d       a   n       i   n   s   t   a
0126420    n   c   e       o   f       t   h   e       t   e   m   p   l
0126440        t   o       t   h   e       c   o   m   p   o   n   e   n
0126460    t       a   t       p   l   a   c   e  \r   C   h   e   c   k
0126500    F   i   t   (   t   e   m   l   e   n   g   t   h   )       /
0126520    /   m   a   k   e       s   u   r   e       t   h   e       t
0126540    e   m   p   l   a   t   e       w   i   l   l       f   i   t
0126560   \r  \r   M   o   v   e   B   l   o   c   k   (   N   e   w   I
0126600    t   e   m   ,   t   e   m   p   l   ,   t   e   m   l   e   n
0126620    g   t   h   )       /   /   a   d   d       t   h   e       t
0126640    e   m   p   l   a   t   e  \r   l   e   t       p       =    
0126660    N   e   w   I   t   e   m   ;       N   e   w   I   t   e   m
0126700    =   N   e   w   I   t   e   m   +   t   e   m   l   e   n   g
0126720    t   h  \r  \r   p   l   a 376 001  \0 370   ;   c   e   >   >
0126740    c   o   m   p   .   c   o   n   p   o   i   n   t   s       =
0126760        p       /   /   p   o   i   n   t       t   o       t   h
0127000    e       c   o   m   p   b   l   o   c   k  \r  \r   /   /   m
0127020    u   s   t       f   i   x       u   p       t   h   e       c
0127040    o   n   n   e   c   t   i   o   n       p   o   i   n   t    
0127060    c   o   r   d   i   n   a   t   e   s  \r   l   e   t       x
0127100        =       p   l   a   c   e   >   >   c   o   m   p   .   x
0127120    m   i   n  \r   l   e   t       y       =       p   l   a   c
0127140    e   >   >   c   o   m   p   .   y   m   i   n  \r  \r   f   o
0127160    r       i       =       1       t   o       p   >   >   c   o
0127200    m   p   b   l   o   c   k   .   n   u   m   c   p   o   i   n
0127220    t   s       d   o  \r   [ 032   l   4   2   6   8  \r   p   >
0127240    >   c   o   m   p   b   l   o   c   k   .   x   ^   i       =
0127260        (   p   >   >   c   o   m   p   b   l   o   c   k   .   x
0127300    ^   i   )       +       x  \r   p   >   >   c   o   m   p   b
0127320    l   o   c   k   .   y   ^   i       =       ( 376  \0   '   c
0127340    g   p   >   >   c   o   m   p   b   l   o   c   k   .   y   ^
0127360    i   )   +   y 032   l   5   5   3   8  \r   ]  \r 032   l   4
0127400    2   6   8  \r   ]  \r 032  \r 377  \0  \0   a   n   f   .   b
0127420    c   p   l  \0 376 001  \0 372   <   /   /   a   n   f   .   b
0127440    c   p   l  \r   /   /   n   e   w       a   n   a   l   y   z
0127460    e   r       f   o   r       s   i   l       f   i   l   e   s
0127500   \r  \r   g   e   t       "   s   y   s   d   e   f   s   .   d
0127520    "  \r   g   e   t       "   a   n   a   .   d   e   f   s   "
0127540   \r  \r   /   /       G       R       I       N       D        
0127560    U       P           T       H       E           I       N    
0127600    T       E       R       N       A       L           S       T
0127620        R       U       C       T       U       R       E       S
0127640   \r   l   e   t       D   o   S   c   h   a   r   s   (   )    
0127660    b   e  \r   [ 032   (   6   3   5   )  \r   /   /   g   o    
0127700    t   h   r   o   u   g   h       c   p   i   n   s   ,       e
0127720    p   i   n   s   ,       g   r   o   u   n   d   s       a   n
0127740    d       p   s   e   u   d   o   n   e   t       c   h   a   r
0127760    s  \r   /   /   a   n   d       t   r   y       t   o       a
0130000    s   s   i   g   n       t   h   e   m       t   o       l   i
0130020    n   e       e   n   d   s   .     376 001  \0 205   "       A
0130040    l   s   o       a   s   s   i   g   n       n   u   m   b   e
0130060    r   s  \r   /   /   t   o       c   p   i   n   s       a   n
0130100    d       e   p   i   n   s  \r  \r   l   e   t       r   p   t
0130120    r       =       S   c   h   a   r   s   ;       u   n   t   i
0130140    l       r   p   t   r       e   q       0       d   o  \r   [
0130160  032   l   4   2   6   8  \r   l   e   t       p   t   r       =
0130200    r   p   t   r   ;       r   p   t   r       =       @   r   p
0130220    t   r  \r   l   e   t       x       =       p   t   r   >   >
0130240    n   o   d   e   .   x  \r   l   e   t       y       =       p
0130260    t   r   >   >   n   o   d   e   .   y  \r   s   w   i   t   c
0130300    h   o   n       p   t   r   >   >   n   o   d   e   .   v   a
0130320    l       i   n   t   o  \r   [ 032   l   5   5   3   8  \r   c
0130340    a   s   e       c   h   C   p   i   n   :  \r   c   a   s   e
0130360        c   h   E   p   i   n   :  \r   [ 032   l   6   8   0   8
0130400   \r   l   e   t       l   i   n   e       =       F   i   n   d
0130420    L   E   (   H   l   i   n   e   s   ,   1   2   ,   3 376 001
0130440   \0 332 360   ,   x   ,   y   )       /   /   f   i   n   d    
0130460    l   i   n   e       e   n   d      \r   /   /   f   o   r    
0130500    t   h   i   s       p   i   n   .           c   p   ^   1    
0130520    m   u   s   t       b   e       0  \r  \r   l   e   t       p
0130540    n   u   m       =       F   i   n   d   N   o   d   e   (   N
0130560    u   m   b   e   r   s   ,   4   ,   4   ,   x   ,   y   )    
0130600    /   /   f   i   n   d       a      \r   /   /   p   i   n   n
0130620    u   m   b   e   r       f   o   r       t   h   e       p   i
0130640    n  \r  \r   i   f       l   i   n   e       e   q       0    
0130660    d   o  \r   [ 032   l   8   0   7   8  \r   E   r   r   x   y
0130700    (   x   ,   y   ,   "   C   a   n   '   t       f   i   n   d
0130720        l   i   n   e       f   o   r       p   i   n   "   )  \r
0130740    i   f       p   n   u   m       n   e       0       t   h   e
0130760    n       p   n   u   m   >   >   n   o   d   e   .   u   s   e
0131000    d       =       1  \r   /   /   r   e   m   o   v   e       t
0131020    h   e       n   u   m   b   e   r       f   r   o   m       f
0131040    u   r   t 376 001  \0 323 036   h   e   r       c   o   n   s
0131060    i   d   e   r   a   t   i   o   n  \r   l   o   o   p 032   l
0131100    9   3   4   8  \r   ]  \r  \r   i   f       p   n   u   m    
0131120    e   q       0       d   o  \r   [ 032   l   8   0   7   8  \r
0131140    E   r   r   x   y   (   x   ,   y   ,   "   C   a   n   '   t
0131160        f   i   n   d       n   u   m   b   e   r       f   o   r
0131200        p   i   n   "   )  \r   l   o   o   p 032   l   9   3   4
0131220    8  \r   ]  \r  \r   /   /   m   a   r   k       t   h   e    
0131240    p   i   n       n   u   m   b   e   r       u   s   e   d   ,
0131260        a   n   d       a   s   s   i   g   n       i   t       t
0131300    o       t   h   e       l   i   n   e  \r   l   i   n   e   >
0131320    >   l   e   n   d   .   c   p   ^   1       =       p   t   r
0131340        /   /   p   o   i   n   t   s       t   o       t   h   e
0131360        s   c   h   a   r       (   s   o       w   e       k   n
0131400    o   w       c   p   i   n   s       f   r   o   m       e   p
0131420    i   n   s   )  \r   l   i   n   e   >   >   l   e   n   d   .
0131440    c   p   ^   2       =       - 376 001  \0   a 317   1       /
0131460    /   r   e   m   o   v   e       f   r   o   m       f   u   r
0131500    t   h   e   r       c   o   n   n   e   c   t   i   o   n    
0131520    c   o   n   s   i   d   e   r   a   t   i   o   n  \r   p   t
0131540    r   >   >   n   o   d   e   .   u   s   e   d       =       1
0131560   \r   p   t   r   >   >   n   o   d   e   .   a   s   s   o   c
0131600        =       p   n   u   m       /   /   p   o   i   n   t   s
0131620        t   o       t   h   e       n   u   m   b   e   r  \r   p
0131640    n   u   m   >   >   n   o   d   e   .   u   s   e   d       =
0131660        1  \r   p   n   u   m   >   >   n   o   d   e   .   a   s
0131700    s   o   c       =       l   i   n   e       /   /   p   o   i
0131720    n   t   s       t   o       t   h   e       l   i   n   e  \r
0131740   \r   l   o   o   p  \r 032   l   8   0   7   8  \r   ]  \r  \r
0131760    c   a   s   e       c   h   G   n   d   :       /   /   g   r
0132000    o   u   n   d   s       c   o   n   n   e   c   t       t   o
0132020        v   e   r   t   i   c   a   l       l   i   n   e   s    
0132040    o   n   l   y  \r   [ 032   l   6   8   0   8  \r 376 001  \0
0132060  254 036   l   e   t       l   i   n   e       =       F   i   n
0132100    d   L   E   (   V   l   i   n   e   s   ,   2   ,   6   ,   x
0132120    ,   y   )  \r   i   f       l   i   n   e       e   q       0
0132140        t   h   e   n  \r   [ 032   l   8   0   7   8  \r   E   r
0132160    r   x   y   (   x   ,   y   ,   "   C   a   n   '   t       f
0132200    i   n   d       l   i   n   e       f   o   r       g   r   o
0132220    u   n   d   "   )  \r   l   o   o   p 032   l   9   3   4   8
0132240   \r   ]  \r  \r   /   /   g   r   o   u   n   d   s       s   h
0132260    o   u   l   d       b   e       c   o   n   n   e   c   t   e
0132300    d       o   n   l   y       t   o       t   h   e       y   m
0132320    a   x       e   n   d  \r   /   /   o   f       v   e   r   t
0132340    i   c   a   l       l   i   n   e   s  \r   l   e   t       t
0132360    y       =       l   i   n   e   >   >   l   e   n   d   .   y
0132400   \r   l   e   t       u   y       =       (   l   i   n   e   >
0132420    >   l   e   n   d   .   c   p   ^   0   )   >   >   l   e   n
0132440    d   .   y  \r   i   f       t   y       l   s       u   y    
0132460    t   h 376 001  \0 005   K   e   n  \r   [ 032   l   8   0   7
0132500    8  \r   E   r   r   x   y   (   x   ,   y   ,   "   G   r   o
0132520    u   n   d       a   p   p   e   a   r   s       c   o   n   n
0132540    e   c   t   e   d       t   o       t   o   p       o   f    
0132560    l   i   n   e   ?   "   )  \r   l   o   o   p 032   l   9   3
0132600    4   8  \r   ]  \r  \r   p   t   r   >   >   n   o   d   e   .
0132620    a   s   s   o   c       =       l   i   n   e  \r   p   t   r
0132640    >   >   n   o   d   e   .   u   s   e   d       =       1  \r
0132660    l   i   n   e   >   >   l   e   n   d   .   c   p   ^   1    
0132700    =       p   t   r  \r   l   i   n   e   >   >   l   e   n   d
0132720    .   c   p   ^   2       =       -   1       /   /   n   o   t
0132740    h   i   n   g       e   l   s   e       m   a   y       b   e
0132760        l   e   g   a   l   l   y       c   o   n   n   e   c   t
0133000    e   d  \r   l   i   n   e   >   >   l   e   n   d   .   h   a
0133020    s   s   i   g       =       1       /   /   R   e   a   l   l
0133040    y       t   h   e       s   i   g   n   a   l       n   a   m
0133060    e       G   N   D  \r   l 376 001  \0 341 212   o   o   p 032
0133100    l   8   0   7   8  \r   ]  \r  \r   c   a   s   e       c   h
0133120    P   s   e   u   d   :           /   /   t   h   e   s   e    
0133140    m   a   y       c   o   n   n   e   c   t       t   o       e
0133160    i   t   h   e   r       e   n   d       o   f  \r   /   /   v
0133200    l   i   n   e   s       o   r       h   l   i   n   e   s  \r
0133220    [ 032   l   6   8   0   8  \r   l   e   t       l   i   n   e
0133240        =       F   i   n   d   L   E   (   H   l   i   n   e   s
0133260    ,   4   ,   4   ,   x   ,   y   )   /   /   t   r   y       h
0133300    l   i   n   e   s  \r   i   f       l   i   n   e       e   q
0133320        0       t   h   e   n       l   i   n   e       =       F
0133340    i   n   d   L   E   (   V   l   i   n   e   s   ,   4   ,   4
0133360    ,   x   ,   y   )  \r   i   f       l   i   n   e       e   q
0133400        0       t   h   e   n  \r   [ 032   l   8   0   7   8  \r
0133420    E   r   r   x   y   (   x   ,   y   ,   "   C   a   n   '   t
0133440        f   i   n   d       l   i   n   e       f   o   r       p
0133460    s   e   u   d   o   n   e   t       p   o   i 376 001  \0   D
0133500  204   n   t   "   )  \r   l   o   o   p 032   l   9   3   4   8
0133520   \r   ]  \r   p   t   r   >   >   n   o   d   e   .   a   s   s
0133540    o   c       =       l   i   n   e  \r   p   t   r   >   >   n
0133560    o   d   e   .   u   s   e   d       =       1  \r   l   i   n
0133600    e   >   >   l   e   n   d   .   c   p   ^   1       =       p
0133620    t   r  \r   l   i   n   e   >   >   l   e   n   d   .   c   p
0133640    ^   2       =       -   1  \r   l   o   o   p 032   l   8   0
0133660    7   8  \r   ] 032   l   6   8   0   8  \r   ] 032   l   5   5
0133700    3   8  \r   ] 032   l   4   2   6   8  \r   ]  \r  \r  \r   a
0133720    n   d       F   i   n   d   L   E   (   l   i   s   t   ,   x
0133740    d   i   s   t   ,   y   d   i   s   t   ,   x   ,   y   )    
0133760    =       v   a   l   o   f  \r   [ 032  \r   l   e   t       d
0134000    i   s   t       =       1   0   0   0   0  \r   l   e   t    
0134020    c   a   n   d       =       0  \r   u   n   t   i   l       l
0134040    i   s   t       e   q       0       d   o  \r   [ 032   l   4
0134060    2   6   8  \r   l   e   t       p   t   r       =       l   i
0134100    s 376 001  \0 350 021   t  \r   l   i   s   t       =       @
0134120    l   i   s   t  \r   i   f       p   t   r   >   >   l   e   n
0134140    d   .   c   p   ^   1       n   e       0       t   h   e   n
0134160        l   o   o   p       /   /   l   i   n   e       e   n   d
0134200        a   l   r   e   a   d   y       u   s   e   d  \r   l   e
0134220    t       x   l       =       p   t   r   >   >   l   e   n   d
0134240    .   x  \r   l   e   t       d   e   l   x       =       (   x
0134260    l       g   r       x   ?   x   l   -   x   ,   x   -   x   l
0134300    )  \r   i   f       d   e   l   x       g   r       x   d   i
0134320    s   t       t   h   e   n       l   o   o   p  \r   l   e   t
0134340        y   l       =       p   t   r   >   >   l   e   n   d   .
0134360    y  \r   l   e   t       d   e   l   y       =       (   y   l
0134400        g   r       y   ?   y   l   -   y   ,   y   -   y   l   )
0134420   \r   i   f       d   e   l   y       g   r       y   d   i   s
0134440    t       t   h   e   n       l   o   o   p  \r   i   f       (
0134460    d   e   l   x   +   d   e   l   y   )       l   s       d   i
0134500    s   t       t   h   e 376 001  \0   h 354   n  \r   [ 032   l
0134520    5   5   3   8  \r   c   a   n   d       =       p   t   r  \r
0134540    d   i   s   t       =       d   e   l   x   +   d   e   l   y
0134560   \r 032   l   6   8   0   8  \r   ] 032   l   5   5   3   8  \r
0134600    ]  \r   r   e   s   u   l   t   i   s       c   a   n   d 032
0134620    l   4   2   6   8  \r   ]  \r  \r  \r   a   n   d       F   i
0134640    n   d   N   o   d   e   (   l   i   s   t   ,   x   d   i   s
0134660    t   ,   y   d   i   s   t   ,   x   ,   y   )       =       v
0134700    a   l   o   f  \r   [ 032  \r   l   e   t       d   i   s   t
0134720        =       1   0   0   0   0  \r   l   e   t       c   a   n
0134740    d       =       0  \r   u   n   t   i   l       l   i   s   t
0134760        e   q       0       d   o  \r   [ 032   l   4   2   6   8
0135000   \r   l   e   t       p   t   r       =       l   i   s   t  \r
0135020    l   i   s   t       =       @   l   i   s   t  \r   i   f    
0135040    p   t   r   >   >   n   o   d   e   .   u   s   e   d       n
0135060    e       0       t   h   e   n       l   o   o   p       /   /
0135100    n   o   d   e       a   l   r   e   a   d 376 001  \0   7   +
0135120    y       u   s   e   d  \r   l   e   t       x   l       =    
0135140    p   t   r   >   >   n   o   d   e   .   x  \r   l   e   t    
0135160    d   e   l   x       =       (   x   l       g   r       x   ?
0135200    x   l   -   x   ,   x   -   x   l   )  \r   i   f       d   e
0135220    l   x       g   r       x   d   i   s   t       t   h   e   n
0135240        l   o   o   p  \r   l   e   t       y   l       =       p
0135260    t   r   >   >   n   o   d   e   .   y  \r   l   e   t       d
0135300    e   l   y       =       (   y   l       g   r       y   ?   y
0135320    l   -   y   ,   y   -   y   l   )  \r   i   f       d   e   l
0135340    y       g   r       y   d   i   s   t       t   h   e   n    
0135360    l   o   o   p  \r   i   f       (   d   e   l   x   +   d   e
0135400    l   y   )       l   s       d   i   s   t       t   h   e   n
0135420   \r   [ 032   l   5   5   3   8  \r   c   a   n   d       =    
0135440    p   t   r  \r   d   i   s   t       =       d   e   l   x   +
0135460    d   e   l   y  \r 032   l   6   8   0   8  \r   ] 032   l   5
0135500    5   3   8  \r   ]  \r   r   e   s   u   l   t   i   s       c
0135520  376 001  \0 331   >   a   n   d 032   l   4   2   6   8  \r   ]
0135540   \r  \r   a   n   d       D   o   S   i   g   n   a   m   e   s
0135560    (   )       b   e  \r   [ 032  \r   /   /   f   o   r       e
0135600    a   c   h       s   i   g   n   a   l       n   a   m   e   ,
0135620        f   i   n   d       t   h   e       c   l   o   s   e   s
0135640    t       l   i   n   e       w   h   i   c   h       i   s    
0135660    b   e   l   o   w  \r   /   /   t   h   e       n   a   m   e
0135700    ,       a   n   d       w   h   i   c   h       h   a   s    
0135720    x   m   i   n   <   x   n   a   m   e   <   x   m   a   x   .
0135740   \r   /   /   i   f       t   h   e   r   e       i   s       a
0135760    n   o   t   h   e   r       n   a   m   e       c   l   o   s
0136000    e   r       t   o       t   h   e       l   i   n   e       t
0136020    h   a   n       t   h   e       c   a   n   d   i   d   a   t
0136040    e   ,  \r   /   /   c   o   m   p   l   a   i   n   .        
0136060    I   f       n   o   t   ,       a   s   s   o   c   i   a   t
0136100    e       t   h   e       s   i   g   n   a   l       n   a   m
0136120    e       w   i   t 376 001  \0   T 337   h       t   h   e    
0136140    l   i   n   e   ,       a   n   d  \r   /   /   m   a   r   k
0136160        i   t       u   s   e   d   .  \r  \r   l   e   t       p
0136200    t   r       =       S   t   r   i   n   g   s  \r   u   n   t
0136220    i   l       p   t   r       e   q       0       d   o  \r   [
0136240  032   l   4   2   6   8  \r   l   e   t       r   p   t   r    
0136260    =       p   t   r  \r   p   t   r       =       @   p   t   r
0136300   \r   i   f       (   (   r   p   t   r   >   >   n   o   d   e
0136320    .   v   a   l   )   >   >   s   t   r   e   c   .   t   y   p
0136340    e   )   n   e       s   t   S   i   g       t   h   e   n    
0136360    l   o   o   p       /   /   n   o   t       a       s   i   g
0136400    n   a   m   e  \r  \r   l   e   t       x       =       r   p
0136420    t   r   >   >   n   o   d   e   .   x  \r   l   e   t       y
0136440        =       r   p   t   r   >   >   n   o   d   e   .   y  \r
0136460   \r   l   e   t       l   i   n   e       =       F   i   n   d
0136500    L   i   n   e   F   o   r   S   i   g   (   x   ,   y   )  \r
0136520    i   f       l   i   n   e       e   q 376 001  \0 005 327    
0136540    0       t   h   e   n  \r   [ 032   l   5   5   3   8  \r   E
0136560    r   r   x   y   (   x   ,   y   ,   "   C   a   n   '   t    
0136600    f   i   n   d       l   i   n   e       f   o   r       s   i
0136620    g   n   a   l       n   a   m   e   "   )  \r   l   o   o   p
0136640  032   l   6   8   0   8  \r   ]  \r  \r   l   e   t       l   y
0136660        =       l   i   n   e   >   >   l   e   n   d   .   y  \r
0136700    l   e   t       l   x   2       =       l   i   n   e   >   >
0136720    l   e   n   d   .   x       /   /   t   h   i   s       i   s
0136740        x   m   a   x   ,       b   e   c   a   u   s   e       o
0136760    f       t   h   e       w   a   y       l   i   n   e  \r   /
0137000    /   e   n   d   s       w   e   r   e       p   u   t       i
0137020    n   t   o       t   h   e       l   i   s   t       b   y    
0137040    A   d   d   L   E  \r  \r   l   e   t       l   x   1       =
0137060        (   @   l   i   n   e   )   >   >   l   e   n   d   .   x
0137100        /   /   x       o   f       o   t   h   e   r       e   n
0137120    d       =       x   m   i   n  \r  \r   i   f       N   o 376
0137140  001  \0 347 261   S   i   g   F   o   r   L   i   n   e   (   r
0137160    p   t   r   ,   l   y   ,   l   x   1   ,   l   x   2   )    
0137200    t   h   e   n       /   /   r   e   t   u   r   n   s       t
0137220    r   u   e  \r   /   /   i   f       t   h   e       c   l   o
0137240    s   e   s   t       s   i   g   n   a   l       n   a   m   e
0137260        t   o       t   h   e       l   i   n   e       i   s    
0137300    N   O   T       r   p   t   r  \r  \r   [ 032   l   5   5   3
0137320    8  \r   E   r   r   x   y   (   x   ,   y   ,   "   C   a   n
0137340    '   t       f   i   n   d       l   i   n   e       f   o   r
0137360        s   i   g   n   a   l       n   a   m   e   "   )  \r   l
0137400    o   o   p 032   l   6   8   0   8  \r   ]  \r  \r   l   i   n
0137420    e   >   >   l   e   n   d   .   h   a   s   s   i   g       =
0137440        1  \r   r   p   t   r   >   >   n   o   d   e   .   u   s
0137460    e   d       =       1  \r   r   p   t   r   >   >   n   o   d
0137500    e   .   a   s   s   o   c       =       l   i   n   e 032   l
0137520    5   5   3   8  \r   ] 032   l   4   2   6   8  \r   ]  \r    
0137540   \r   a   n   d 376 001  \0 245   O       F   i   n   d   L   i
0137560    n   e   F   o   r   S   i   g   (   x   ,   y   )       =    
0137600    v   a   l   o   f  \r   [ 032  \r   l   e   t       d   i   s
0137620    t       =       3   0       /   /   d   o   n   '   t       a
0137640    s   s   o   c   i   a   t   e       a       l   i   n   e    
0137660    w   i   t   h       a       s   i   g   n   a   m   e       i
0137700    f       m   o   r   e       t   h   a   n       3   0  \r   /
0137720    /   s   c   r   e   e   n       u   n   i   t   s       a   w
0137740    a   y  \r   l   e   t       c   a   n   d       =       0  \r
0137760    l   e   t       l   i   s   t       =       H   l   i   n   e
0140000    s  \r   u   n   t   i   l       l   i   s   t       e   q    
0140020    0       d   o  \r   [ 032   l   4   2   6   8  \r   l   e   t
0140040        p   t   r       =       l   i   s   t   ;       l   i   s
0140060    t       =       @   (   @   l   i   s   t   )       /   /   l
0140100    i   n   e       e   n   d   p   o   i   n   t   s       a   r
0140120    e       p   a   i   r   e   d       (   2       e   n   d   s
0140140    )  \r  \r   l   e   t       y   l 376 001  \0  \n 331       =
0140160        p   t   r   >   >   l   e   n   d   .   y  \r   i   f    
0140200    y   l       l   e       y       t   h   e   n       l   o   o
0140220    p       /   /   l   i   n   e       i   s       a   b   o   v
0140240    e       s   i   g   n   a   l       n   a   m   e  \r   l   e
0140260    t       x   m   a   x       =       p   t   r   >   >   l   e
0140300    n   d   .   x  \r   l   e   t       x   m   i   n       =    
0140320    (   @   p   t   r   )   >   >   l   e   n   d   .   x  \r   i
0140340    f       (   x       g   e       x   m   a   x   )   %   (   x
0140360        l   e       x   m   i   n   )       t   h   e   n       l
0140400    o   o   p  \r   l   e   t       d   e   l   y       =       y
0140420    l   -   y  \r   i   f       d   e   l   y       g   r       d
0140440    i   s   t       t   h   e   n       l   o   o   p  \r   c   a
0140460    n   d       =       p   t   r       /   /   w   e       h   a
0140500    v   e       a       n   e   w       c   a   n   d   i   d   a
0140520    t   e  \r   d   i   s   t       =       d   e   l   y 032   l
0140540    5   5   3   8  \r   ]  \r   r   e   s   u   l   t   i 376 001
0140560   \0 273 377   s       c   a   n   d 032   l   4   2   6   8  \r
0140600    ]  \r  \r   a   n   d       N   o   S   i   g   F   o   r   L
0140620    i   n   e   (   r   p   t   r   ,   y   ,   x   m   i   n   ,
0140640    x   m   a   x   )       =       v   a   l   o   f  \r   [ 032
0140660   \r   l   e   t       c   a   n   d       =       0  \r   l   e
0140700    t       d   i   s   t       =       1   0   0   0   0  \r   l
0140720    e   t       l   i   s   t       =       S   t   r   i   n   g
0140740    s  \r   u   n   t   i   l       l   i   s   t       e   q    
0140760    0       d   o  \r   [ 032   l   4   2   6   8  \r   l   e   t
0141000        p   t   r       =       l   i   s   t  \r   l   i   s   t
0141020        =       @   l   i   s   t  \r   i   f       p   t   r   >
0141040    >   n   o   d   e   .   u   s   e   d       n   e       0    
0141060    t   h   e   n       l   o   o   p       /   /   n   o   d   e
0141100        u   s   e   d       a   l   r   e   a   d   y  \r   i   f
0141120        (   (   p   t   r   >   >   n   o   d   e   .   v   a   l
0141140    )   >   >   s   t   r   e   c   .   t   y   p   e   )       n
0141160    e       s 376 001  \0 253   Q   t   S   i   g       t   h   e
0141200    n       l   o   o   p       /   /   n   o   t       a       s
0141220    i   g   n   a   m   e  \r  \r   l   e   t       x   s       =
0141240        p   t   r   >   >   n   o   d   e   .   x  \r   i   f    
0141260    (   x   s       g   e       x   m   a   x   )   %   (   x   s
0141300        l   e       x   m   i   n   )       t   h   e   n       l
0141320    o   o   p       /   /   s   t   r   i   n   g       o   u   t
0141340        i   n       x  \r  \r   l   e   t       y   s       =    
0141360    p   t   r   >   >   n   o   d   e   .   y  \r   i   f       y
0141400    s       g   r       y       t   h   e   n       l   o   o   p
0141420        /   /   s   t   r   i   n   g       i   s       b   e   l
0141440    o   w       l   i   n   e  \r   l   e   t       d   e   l   y
0141460        =       y   -   y   s  \r   i   f       d   e   l   y    
0141500    g   r       d   i   s   t       t   h   e   n       l   o   o
0141520