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