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