[comp.sources.x] v02i023: monitor X11 Server/Client communications, Part02/04

mikew@wyse.wyse.com (Mike Wexler) (11/29/88)

Submitted-by: peterson@sw.mcc.com (James Peterson)
Posting-number: Volume 2, Issue 23
Archive-name: xmonitor/part02

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 2 (of 4)."
# Contents:  Imakefile fd.h print11.c.Z.uue scope.c xscope.1
# Wrapped by mikew@wyse on Mon Nov 28 10:13:37 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Imakefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Imakefile'\"
else
echo shar: Extracting \"'Imakefile'\" \(205 characters\)
sed "s/^X//" >'Imakefile' <<'END_OF_FILE'
XLOCAL_LIBRARIES = 
XSRCS = prtype.c print11.c table11.c decode11.c server.c fd.c common.c scope.c
XOBJS = scope.o common.o fd.o server.o decode11.o table11.o print11.o prtype.o
X
XComplexProgramTarget(xscope)
END_OF_FILE
if test 205 -ne `wc -c <'Imakefile'`; then
    echo shar: \"'Imakefile'\" unpacked with wrong size!
fi
# end of 'Imakefile'
fi
if test -f 'fd.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fd.h'\"
else
echo shar: Extracting \"'fd.h'\" \(803 characters\)
sed "s/^X//" >'fd.h' <<'END_OF_FILE'
X/* **********************************************
X *						*
X * header file file descriptor (FD) code        *
X *						*
X *	James Peterson, 1987			*
X *	(c) Copyright MCC, 1987 		*
X *						*
X ********************************************** */
X
X
X/* 
X   the following structure remembers for each file descriptor its
X   state.  In particular, we need to know if it is busy or free
X   and if it is in use, by whom.
X*/
X
Xtypedef int FD;
X
Xstruct FDDescriptor
X{
X    Boolean Busy;
X    int     (*InputHandler)();
X};
X
Xstruct FDDescriptor *FDD /* array of FD descriptors */ ;
Xshort   MaxFD /* maximum number of FD's possible */ ;
X
Xshort   nFDsInUse /* number of FD's actually in use */ ;
X
Xlong    ReadDescriptors /* bit map of FD's in use -- for select  */ ;
Xshort   HighestFD /* highest FD in use -- for select */ ;
END_OF_FILE
if test 803 -ne `wc -c <'fd.h'`; then
    echo shar: \"'fd.h'\" unpacked with wrong size!
fi
# end of 'fd.h'
fi
if test -f 'print11.c.Z.uue' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'print11.c.Z.uue'\"
else
echo shar: Extracting \"'print11.c.Z.uue'\" \(32728 characters\)
sed "s/^X//" >'print11.c.Z.uue' <<'END_OF_FILE'
Xbegin 666 print11.c.Z
XM'YV0+U2`4$&PH,&#"!,J7'APH(*!"2)*!$&QHHJ'`D%(*1.G3IDY=%AH+`.'
XM31Z11>R4<1,21!$Y<M[(`0%%3AJ6-\\DJ&@1H\2)/!U"5!*FS4>:9>B4D3/G
XMC1N1,7+@P`&4YT6(*,:D`#'D#9P\-L^@H0.BR9`A4*7B`!$QJ%`5/]L&O2J0
XMH=V[>`T.?*%`P8B;8]C4(5,&A(@Y8[R6<8%&A%_`@@D;QA,C!F/'?0,.S,NY
XM<]Z]"@+&E:B"K^C1"4J'KNNYM>N&JE<_!)'$#0@X-G&Z.0."#IK"B5FNI#,'
XMQ!LSO7^#,).F#!LRQ8\G+XRE\NTP8]8DG2.RJ='9S)U#!Q%&3F'I;\382?.F
XM3G$[8027$1G&#1GCOI<6+W\>.9N/<RP%`GSRN4`1%6_,%AP=,;$Q'7EMM,>2
XM<<BU1P<<=;1T1V%GK+14&$H95\=,%F)(%G:)R4%&3K/1\<:#_ZGDH'16+"7&
XM&P&VX`:`R8$(PAUA%!?@?V,H=9\8>3SHWE(N]$51C7+<&"`(/8```Y55@H!$
XM&6$0QI1Q;I@D$AUI&$6>?2"8U]%'=+Q@7DEYO.#"G""X4=1'3<X&I92%51D#
XMED\NE>229M3AX(+#+=?<<W/D&6B4./8)@@R`@A`$&Q&"!$(9*LF1AV\Y.0K"
XMGI%2"<(,E:8D*`ASY/0?"&*D<2*:2"J59VP!S88@>6G<=Q,(;82Q1DX/CH'&
XM&VF,49@826VX$@@Q.@?"G_7=%ZV#,HBTX6R$,;?C@V:\P08;;]Q!;+<WS?<C
XM&LFB`0(9;QSEQAMDX7836>:Q`6(:,N8Q6QUNE`F'3'341U9XC#89VPCH?FLO
XM2PB3@4(8+(C!PA@LD,%"&5NE@1P*I$[IP[1;U72O$8M*3+'%&&O,<5^K;?;:
XMS)Z!=MIHJMT<5\ZLT>PS7J`I8#)+4R15!1Q-`!A&ARB(48<9*<Q6$<"MGK'C
XM?<:6-Y#39NR@P!ZSS7&L'&11Y(;7%(E-<$5D>#W;<$OA]H:R9(Q8!@HB#$U'
XMT70<G?0<<RQ=A@@IH`V"QR"`;&.I/)`L=9I)C7CV;'S71AA+3'#J'`I02)&$
XM$U0,P40218!>^&QZHRQ>TT^+!`-4(@F1!15%-/$$$46()$*M9;0@DY>$&YYZ
XMRJR;(5*VDXHT1!!2$!&##;H'JX9,+73:JE/!HYX;':H_5[Q(-!RO///.0V]8
XM&S=1;SU[;F1/T<-T1/P]".8C3X0503!111$RH.!&"KK[SVY\0Z$ZW<E]=3)5
XM$J8P-CJ@P`1<VX(-NG"Z]VU/?EP3"0[$!X+[Y6]__2,#``TCP#,04#ID`%$8
XM$'B?*BVP@0^,(`XH*+SM38%!.<%!#)^VA1C(H`LB>8IAPI"AL:5!#_MR2@OD
XMYJ+$L$%'!ZP@36R(P]WH$((\A$.74(`"<NTF!2CP(0A64*<4I`"([](=$7TC
XMDR,FT0U+C$D3Q=6"%!8L>WWHB][X=K2-P*EX40L*U=)@M3)@#0U:4P'7O`8V
XMBL!-#G*CF]WPMD>CP<&/)D%@Y>PSG,S)B'.>`]T4BB`%*Y!2BHA#01*$\*F[
XM8=$,6X`!!0-9D3W680S*`ERAV,#'2Y+$)(`TG',"]+C4A2$-_R%#+S&9AV`J
XM((]"VYX1CIG,9?ZRF5RCY=3<4+6K@2!K,U'DTQ@9M@969'+:.QGQ,F@EV+73
XM,+T$P321:4@$IC)DA6E<#+0).3I(SG#PPV#KIN5.#^JO"#'PWPA%4,(3(L<\
XM07+*X6S#NSD@T#8N9*52=@C+&-`PG2SIGL38B3SD+:]YSXM>&*8GA^KIAWT(
XM'-[JV!F^Y'&%?"D]7_I:NC[L23&@ZQQH_41B4!!RT39DA,-67@`"&BRTH>Y"
XMH0IC2L7<G.&*,D2C$$4`T::T[W30M"4N`;1+:_XQFX\#P2`+><A$+O)KY5P;
XM1>Q@.+61[9QU-2=%VN`VBMQS<5/2)S_-XT\Y3(XB,O4>23EXTO+ICHESHZ/T
XMU/=2G]90G3,=:$U-BE/SB0"R3FP!^N;%T\I^%:`7#*KQZ,?!HO(/!6LAHPQ4
XM@-3$V6&,M\%M&Y;:U*>NQ(1118X=5RC%Q(YTH!MLZOB:-P/D<=4Y7,J1&^K0
XM!F;)@:J85>Q`?0B^Y1*AN;HS3U-&I*P6]*H%8@C2X(HK3=5"Q7PU;2QX#2/>
XM]LBAO.<-UAS6@-V0NG=2KU/N39GKW`B128E<,\-26M`J/:P7M?<2Z&IEL%FB
XMXN^@_;.#;P<8W`&M!%[7E>)M7<A`@G%T"Q3^J`4C_%\9#'7`CCU?&/!0)NJV
XM0$T>`4D+H(I`H&9VPLF-@7>3*X+I5E=`THD)O2PJQ38H4*.NC*`,9OC3U/[X
XM>#DHZ(7WE]#_Z<[(UBT@'-*`AV#!H07ADD.PB'/1)[?RQ#+(@8JGF-WCKG8&
XM`18R"&1'NR<TCY2Z*Y/@T-M*WZEH*?WEWG]GH&<]\[D(?L:=%'07*SJ8&<TR
XM63-Z965HX+&WSO.;KYX;2^1*7SK-FD9,?=B0KA8`3%:)%FFH9^!.4E-:5J?.
XM-(@8/(95MUJ+9(CUHFNJYR44(0M#N%WN=`I'[>0A,801]I5/50-W&AO9RE8I
XM'EK@;&@_&*1[J^)53TP#68K$#KI3B7UDDF@FI`$D)P8V%[UX!C"6&[<:/J-(
XMNNB4>@O1"'YN0A"H\%@RYUK-(&+R93'W;@>^<@ORYO<747!O,FH8MVL1R/_0
XM*/%ZMT$D4QB"%(I0NO"^8<EXA)EF?L9RN]@,+JCA&6I28YJ>M?SF>HD-2/8U
XMAF\B,IPCC\+^ID`%)!0A")(VE0CFQ/2F,SWH0Z>""+RV<S+U')P#*8(I06=T
XMI)-2Z4X/.].U7CJI4[U@5O=Y(DDI!3]W/>E56KK8P\YV/T]=`55/EMJ!7@0H
XM,"$+;_]ZW.<>]I'[/0MWSXS-<8[SE\]<YC&ON<P8WWA<">0E,9F)WH@524/:
XMK3BQV<B:0()YF0`RK6OU)M;%V36X(K:]TVXT2J30]DF[A/9N/[JDERH0T>>8
XM+*4!@>'^"JG`.HXGA/WG;'RLW0DSMK.Z"]":W*"L.E'7NM)NO@:?CU+/CE8F
XMQH&#M[-O9ZCD><@J96GXQP_6OE@A/AXIO1Q.+TAN$E+U/]_:.%U/9__&WIUU
XM9WL!&'A2P'NC`G^%$7S#]S'X!`*"]3C)9U@0!C$MQGTQ=A@<X1'45QA@AFB?
XMYG_:)V`U]3E4,%^[TR4#@H#D-S_)Q5G=%ST[M7YO$&T?J&BQ=WXP1F2312+B
XM-X/?!DU7<!/P<@?R1W\\D7J&M'?ZUWJ-U'\V&(*R=WNU-WNU1X`&&(3K=@=[
XM(7RS07Q\XH#'5Q$1>%BW864A6%+>E5,8.'W5UX$AMG!/6'XBZ%TFF%[W45_D
XM51B]LH+LU()IZ'TQZ!7L!X>RQDXQ@(.V)F/J)X@^F')"8W!A``=%B%;UUTU)
XMN'IOU83&-3]1&(!4F'M>5X`@H!E0`(EPL(4+F#@-^(#(%SD2N'QF*(=H"&-J
XM*'T:V(;7YX&$^%\U%5_D4X<HB(?WI8?!5H.%B%P6J(;?QX.#"&['N%J'6&OD
XMHX,K!7Z,2(->`TU!X")M,(E/PT]J97]LI82L1TZO!VJ&"("X)X#K:(6C*!#;
XM^`9.IH!=R("`E4]A2!%C.('Q4X$VU5BUF($K@8M']H;.R(O=!6/`>!\@(H^'
XM4XR[.&U^2(N`2%HRB(T'>8/2V#S4N(@]B)'0-`0CTA1RX(U0@WKBB']NM7^:
XM"'M0J(Y3*(6@N'OOR!4C"7[TZ%?V6'SXN$\0Z(IDR'RRF(R>98L#R8&Y:)#G
XM"()RV(MTZ%QV"#GC-8P/R8?(^(_0QVS6^)'?MI1QR(F(.(WIMY7-"$U&X!1T
XM8)+@B(1M%4Z9F)$O25`RR8Y5J'NG5)-G.2$Y>3@[^86L*(9`R8\2QD$N>(%&
XMN8'65Y!6N5I.J9!0&8P?85_5MX?&^%\3"9`529:-6)D:*9>)*`([>)$_V!=-
XM`"+&HI8H:8EMN83FZ(3/Z$YZYHESZ8Z:49IT8"RH6(^J>(]@Z).M6%A!&8OS
XM,XN8&7T"B9ANN)C;AY4OJ)7,N)D1"85AR9%C^9P@V1=$(`=A`"1B\!^H68GW
XM=XGY5X[\MXGI*)>R.8!V*8J:D9W;&0;=F8!,E8J*PY.].5B!"8LL-FW$F95K
XM>(M(J9B<&8*-*5^/>8>1F8=5.:!R>)G^N8RBJ9S3,IU$T)&:>9T*$`1C!3C?
XM>80I*9XKR81P*8>=N(Z?*`6T"8\;"GKSJ9OUZ9?YV$_*MV(4R)]$:9QL&*#8
XMQZ`L>*/.&:$\:H@4:J'6.9H9.BYSTZ';I)KD^)9>^9IR&9LF.IOK:8"70BX]
XMMY=>R#@QNH_Z6:-GZ*/_>92)N:/1V:!B"J'7V)6N^5_1Z)EBJ8@7:J1=02X(
XM)XDP87J4Z*%,BHDL.:*<")-^=J(IRA7BHFNGJ*5]R:6^"9C`*9C^6)@!F:-E
XMJHN`2E,)::"4!IE3.9D0>:E7*:F96:02^J:C%J>@68VDVGX*<`1=(1QXD)9Y
XM.G][NJ3AN9KDV9+HN%V"2I<S>9>:X:IH60:QFILZN9OV^9?ZF)\TVH\VRIR&
XM>9P$:::@RIB9^HL'*I6228P2ZJ#-"9J!R)6E.J35":39V!=)0`1#<"S)4@9*
XM2A%LV:1_^J1NVJN$6J4UF:[KBBS5IZC("J.-NJR/^J7.&J;0.JD`6JE*V:;3
XM5J#8NJD(VJG<&J2A^H<P:)%K.JX;6:'EFK&LZ@1W\J[AV*?CZ:0,&Y=2&I/J
XM&8H&"+)FXJ\ORJCX.;#-.I@V):HXFK#)2;&KY:T7J*;BRK/FM[%$:J[/U!>9
XMPV$B&Z]^*J+T^G_H.:4K2Y.:D;3`9:Q\^:\R^Y,T6X;[:;`X:QB'.:V6^K0A
XMZ+/*&*[-:+8D2JYRNJKGJ@!)T`8E409&P1)OM+0?BJLF:YZ\&K4JVX[XJAES
XM6[=WBW;L@[5;:GP!*Z.O6+.1:K%B*ZTZ6K8GBZ8'.ZI&R[9@2;0=&[1QNW*4
XMQWB.%WFK\7B2-[JD:WDNH6YDL7F[489SXWGB%31+4`9Y4!,`HBHL882V.HY-
XMVYI^NUHX2':@@Q);5W2#*Q"WF[OBQ:)<>*PQR[@S.Z.7&ZAR>6W)ACNZ0Q@%
XM@TP])IR+E;DY2Z8[>Z;STYA4D`1-4`1$%P1-``6Z0R9&T:T)>06?0P1/<`4F
XM1R^EBCPUA;].H+_\:QB:PQ*E"E\B(<`$K#O&@DR?RKDD%6#(0X)JJ&1TT`)X
XM(*$R,(L6[%D8W`)YP,$51AN@HX8'G,$;++23\F(?K#LI+,(</)&CA"!F<&U"
XM4`54('!3L`31AW9L.KPB@6?N)`1/\`1,$'UWPFOFL1*.V+P;\1_JQ;L.5*OP
XMNK?RZK37RT[%F[S(6W:%"L70I5Z*NZC4R[76*\11*A+:FVV&X;W4%+Y?.Y3D
XM.[F4>K[5FI`UM;[M^[[Q.[]E$L0NB;D!G+_[V[]T\+_W:\@%+`(IG,"+/,"'
XM;!@/_!P<3,$B\<+T=7(JS,$>?,(@S,DRS,(4QD&:[,BNJ\$<[,*@#,.I/,*D
XM3,-%8,,XK,,\[,-B"\022L1R:<1(K,1&P<1EX,2L*@09XB)NH+L<ZKJ^>\4D
XM&Z+".\CST\5E]\5<M[Q[=LQ.H<S02Y^KV*7,NL5_ZV@Z3`5/X`3=FQ1Q7&5S
XM/)QB.K:5N[!JK+[LZ[Y4`+_R:QCT*\B[VK.1W,";[+\LS%T"QL"3C,K#`<D%
XMS<@.S"Z63,J8;,)4<,&BO,+H2U*?/-&A3"^C?-$#5<HV=<HQ;-%YW,*FW,H&
XM_,HSS$$U?!RUO,-!T,,_#"+\S)2AAH.^G,1BN\2(T<2G=;0*8,QT@,Q1'%WN
XMRLQ6/+*WFL71W,^N`X!>[!+)6ZA"3=1C/"4P^\V-ZZ42/,ZQ4\[GG,[?RP9R
XM#*9T'+9CBIQ)*:'TW,?W_,?Z',CVN]"2W,@8K,AT#=`(C<`#K<`@8-"-7,D1
XM+,X3%M&G',(DW=43EM$4S=&P[-$35L(BG<J)3=C'P\H:[<K#T=$E/64L/<LN
XM?6PY#-,RG<LTO<LX?<0Z?1@\/08^[8A-0"_LXP2R;09Y0,7-K-3`6[+S:MGO
XM%)M1;;S*R[(U&=L'Y@:T32:V7<9:>\:_F<;2?)YZ9COK>\ZX<\])L-IP#+[L
XM;-;N7,=I3;;R'-V:E9!\;,_X#,CUR\+)5<AUC<AX[=YZ_<A]_<\'+=B7?-*9
XM'="=3,J,O=$9_-B=+=DHO=?]#=F7K=\HK-*Q_-FT+-JV'-.X?!BZS,*\[&BJ
XM#<R]T]/#_-/05`3"(0?)[3&WC=3?F)I+';SE2=[$"]75+-5@C,T@KA0B7MM)
XMDM6\J:R.2X9JW(F@0TK7'039+=;K#*G/BM;PK+!L;=[U[,?Y+`+[/-?R?=!W
XM/=``O,`,G=()7=]Y?=\./=AJ+`.&7>"([<D*#N"<K=C'0^#[;>"J3,J8O>";
XM+>!J/BFR_.!9,-JW/--*@=I%#-9.8#O<>S[06=*,YDXA-W*E`W!#4`53H.'"
XMO!(B$2YCX!Z.F#EAH!(C;MNXG=1,R]M:K,;4?+PP?LW$7;5<HNDVSMS3VY/5
XM^[B^[>.T\V?8K=WJS-U&#K:2&][QO.0"=MY.KMXU_95]:-]VS<GQC>7OK>5\
XMC>#3XM>`W=`0G-\A3>85;>;5WN8A3.>^#=(57.`CO<IGKMDLD>;=?N>AG><1
XM7MH4?MH6CM.`+NC+!IJ%7N>'+I>)3G).P.B.#ND<+NG+,3>6SJIG6>ES4!N=
XM?N+@N=O0O.)._=O63'"E/MQ4*Q`%[QZUP>I:_>H\SN*PB1(_3NM";NMC7=8%
XM>]:[GN1X7.>-&>W,GLCL_>=48,Z![L;TCJ$7/P=/D"$)?Y(+KY)NV=NB[N*D
XM+MR%FO,[#WPM*KT;C\:PWN,`&/)!/N1O?.MDW=TG_]U(3KE*SL(MG^4&/M?D
XM///G+._14^C0U+QFMNDE/ARY_>D-KZLVS<5$+_%&C\UJ'XELK_$Y#LY=JS=0
XM-@<GYE'[1F\I<.@BX&P*!]1%@`<#$R`]OY98K.)R3^P#->IV/]4R[OBE@N/)
XMZO?6*Y1:G_)<O_*^_?7++@+FDH5SC=:5W>,179R&P>T]WI_?:BYDX!NE6L*R
XM+P*_04ACH=!HG1@``_-Q>P3:"0?L,@9ST/B/;S>1C^(,'_2A[O$0/_$17ZC(
XM'XG+W_R</P=VP_>?O]7A+/KCN_5WO-9>GY!$(`5!<`5!(`1,,.]DH)W<^1^M
XMO^NO;_UOBM:TS_^V[P+A/MTWT'B??_I]8L'XE;2<@M:6D>\`70L0;7D6XM?L
XM.IO;2E4LY0&6I;Y`VYP?CH!^)L[G\:D4!^J:VMR[?'4O^V&S#OC]PI_G`U@<
XM+]>A/(I4OM2:@')VC:G]O;_X-_^ZE_V#3_@OYH$W!^BQG)VI0C]O2P.B/??S
XM;M)`K&`U="`/L+WH]_-`%/4S@9:OQ:&GX*;Y3IU`L`)-\`G*"BFXZE[@UGIN
XML,[\?;1W5OK4'PXT=KIC]0TAL2<2K,`"624]T+3U.58U!""*4IB"(5#R/;,K
XMZ/!.H!8$;B_N[GE!KN`'R\#>,X/.S5&%/O&U!L&;RG.#)0WUZ34M8AXJ8)UK
XM;\I.K\G!<H'7OEV;VW\/+P:P.37T_U+AB^E]`[`Q##0)J#L08/"#:&+J1AR:
XMEA(+L1V&^V6&X0UT"IM`&&Z,(4D#YJ%(."(BP"9B`AE4;FVO=WFZR5<""V$6
XM?&I;,!%VP8K709KA&WB&)$[\P4"G%YS:V?DC?>GO!F9"./CRI%PH/&BC\`XX
XMHBK@!M:>C:."(W#ZL29K"*4PGPI<A/30'D)#<7@&)6$:I(3.QQ*V077(\MAA
XMV!."4ZZ1Q4.\]@M7FQF("6V@!00'YG`&[`9LTWOW,!!*/Z"W#RM?/TR!$Z]0
XME28X\`B77M9J=?>)',K`T4<#[9C.PH0-L<LU,OKF[$#A7P-[$]'*%;$,%PR'
XM8:_H'>9A121#!0A-5J+O81/X\'>1Q%Q5TOQA2L1F3E$@:0I(Z.ID(L&R60$0
XM89DOG'CZ'"(GW'(]T2$&Q;CE1_@#2P"$;F\:#L*26!51HB+DAFVQ$]*!EAB]
XM7F+30X/ET+N=PYK(Z[K>&]2)Y$X!?D*U*(1(H5!$C(;A+'K"6!?G/`LJ-(10
XM82*=LE:(&0',4`2&(D`8+@5BB!2/X5)T1*^*(]H-N"@-%5X^G(I]R_I9Q;L(
XMK`1":B0DJ[$,NL3%U14!XTP<C+WO$C+$L@@9'V):+(YK<0%>N9^8^N"3:&0P
XM3I#5[`;AE\D*W&6\AM-",Q8XSH@=Q9R8ZH7^34S90L78[0S@M]*%7J(%@$=G
XMYV(^XVH3C3#A*!I#I5@&E"$?=`JJT3P\1=(C$JL@WQ)ZLM$N;L/::*C<0'XL
XM`_M1Z?5%WA@3?>,"1'3W;`@L`;-GVK*#:*EW7DLP5D+T=Q.'XSPSBVZ1/*HQ
XMG^CR5%]CE(>/,2)&G^B8$ZBC1%-#UQ%*Q0#MV.:X(Y3RCN!M/7:VL.A9QB,)
XMRX6_8\'HR#K7'O_1.3,"2>`(5(&1\P6$0!(@;1..0'@$T1(D^`NKVG[K(0JR
XMQBKF&J6B%:2+=6XV#DCV)!"PY!CDB]ZL[Y&_KJ4&$R*''(L>TOIIPH/&$TL:
XMB02*)[(45L=3N/O&W>QS1!NAP2!(K9B6^N-K_))4,4P*R!BW"`/E$1F4HT=!
XMILGQ%P._8N0BC,*16N5$%6D8DN-BS)&]@@`:P=AW`,L`\&.*?6$((,-*IR_^
XM8$B,BUW2F9'`N%<7LV'1&Y,&2%7>%T-!T]"DB_J+!C$P9CW@Z)\RI>7ZD,6Q
XM3GY*3FDB65^*?(>-3#**2/YG/D9-$I`"[TOB?19]H2Q0XZKDE4HA049%6:D/
XM$Z5O$Y.,DAOJ2E9)TQ(D08R$`FL2FL,-B0X[I*8DCLQ26KI#YB@*\R27LY;8
XM\IYIRY*`'8Q435`,9`,<<CI#Z27_8_5[>.C2U''#@PD'EH*6U(T+THSUQF#Y
XM&^DEIER(]Q)9,DM/Z=M\XL!Y`DU`C7"C9`<"@-U;>W)1[E^*A,[Q!*#`$$`"
XM0<`)'(%Y5W6,5-$@$L=M"$BQDL0PR25L!)`0<U%*3`+Y,^MCT!R:[W)CQLN#
XM."_=9+V$DR%33C(YMY;>XMIZ.X[,LESLB/&6"I?CR4R9DPMHPA16U32+!/L0
XMET53MQW-A]D9(R;%8YK0Q6TZ!7?)%1LDQ[241^YJVL"L^?#:&GJ#:U!.KD%$
XM:*D[Q.:Q!(`.$<>P"7;#Y6K*V31.:M.R6,"$=#GU67GH$-/RX8$TRVG.T.9G
XMB0D5,V$ZHK9YW+;DVZ.&M%)1VLK,ER[Q9N9$;AAS4HY#!PFY`N?'3(>$LS,:
XMSF#G-8<=E+J3J4]R@@3*:03-9NG$G$YS;1I!O]8YH=SG3`K4CG2BS,>".BVF
XM@`M)A^I.N4ZY."L)H4G\+W:S4-4I1.4KF9Z:K)2]4]?]3GOY.`LG8W268%-Y
XM(+&`$P2>G!-!5!0Q=A#%(E,&4*01I#6>2>#83)RI,WEFA8M;0K,YL(2_$3@Z
XMQ+B4FX@R-B;-V?D/U26K&0X45'!$3;\Y-3M>*O1<A@'5@`B3!Q;9(/"LG\+S
XM?L[!Q6DIGJ<^RP,5,]$$OL'W0PI?OTD!WE$$#)>/"`?&S&X8G[$2@SI,+'@2
XM.>A57(0KT8B>@?;I%]^G5XR?,S`X@DP8BAV)C4A0H$]`""B!(C`$M*7R#)V=
XML=IDKV.SO>8=<V`*&:S;8$@U5BV1H`B@@*@R9JBNRE-S4-?I,EVB:X^RG*"A
XM&=QEM1@)<,()<9Z8($EJ5VSH@UQ"*6"A(?0ZYZ*Y+*2$DA%&TC(P2<O%X8@.
XM7&E:@`;9J6>@CCT3"::4Z*C/1MA)M5#?U'%<K8K:IY'1N#;1%!`"6G`$@0X3
XM9"P-TH.$4]2IZL$!40DXY:=KZ1^QI8R$ETS*8]8?<J1,^9-?'C1]^1A-(8SL
XMD]F.%;I(6!@J9:$1I(6&P4?B0O"&'H5D-\5VR`.PB8Z8]N@HF;X`'#]2P-C!
XM*5`%\H>^2C?OI@[$AY6F$YODD]QSAD%*]@[]8B7AT/N1#X+OX4P9-!(1_2F4
XM%`D/I[F@$1$@4'=,PT&-B&0W<-(3N8UPB--0"H*/?)9+DX5)(R57R*@=HI5V
XM5)OP48_"NQ%-DV*4GDMWDDHE7DU5GRAUHV:AE>H$,\11>*6@#]8Q2%K*3VPI
XM+L6&NK0$.9=>FCV*Z0P\IB@`59`1+T-?F.EO(::;DG%V2G\930&;0P6H%!4!
XM4<G]DF@.:HXY,3/$V'U5"0=1(X@/F:@5E=6`!$=T!)*"2AUJ+-6GAM0D"O?,
XMYVPHJ;\'!-15.G!7/:I>_:0P%56H!E**2HN`T#FE&L&Q1AWM9U<Y*E[MJ2!U
XMA,+2<#948Y11S:5[DI=N45^*16EBLG$"1*=_R("%<D:AQ57UINOPF>)/H#98
XM"VM>!:G,I)*63S!YO:3`4;U^AN?O--;#0UD)JV4UK)D5J*Y)Z'9">UD0D)!$
XMQ\_,N_22'7("@W$1YH&%7DHM^D(75IO48_H3M5(!&A!56>LU<:T<9E_.TWHZ
XM.H@`/@5_^[2:0LMU.@7:Z1U]IXNOSJG"(O8DCX#[LX-4(`O<F@QV!K13EK21
XM;DJ-ZAD!YE^#`(`5L%L5CA383#<&%9HO(C";JKKNAB6B+W9$?NUV`>;"?I?'
XMI&'/P!(A,\XAGE9$):827`TG(9N=408H6`$*&B_-NS$OW*1@C(MZ`N?<B0+-
XMEO/NTO1,#G8#W&/C-(K%,"DB0Z?)3^/+_I0""M2!A4\SL\N68TLS`\)-C8R+
XM%A##".J'56,SP*]=V2P[^^P+ETUE!)6M1;0KBSOLX!`@.5%-B+X!'<'1Y(86
XM.0,T;:P65*#&#$&",VRENG6D]C;`RB:ZH9_]AJT4L:ZIIB)3AYY<JJF-];&J
XM4FS69QD$HCV1FC6HDJ'.6DNEV2T%K1)-M';7IEI:@>,Y2ZTH8+4N4Y/:3`_C
XMR.2J?-8;YH$I4`?$0#S<JR*P83(U_D-H-46E=8:TUM:>R.+P4A=M#6BT`?+1
XM2E;(>E,IK:P-MK<VTRY7H:HQ00!1+2:>]K>&V-"Z5$<KJ<V0P])CGE94JVJK
XM*JM]K;[NU<[6D)13IT"F*P-\(]#.S=;4:\G"NJH/'<+=J@2^H6A#J0U`MANT
XME"Y;HA-I)RLVN[<:5=_"VZ0@;>&G+/U"UY8G?%:DRFUKH'C[ME!/+GV.*?`%
XM<,=JBQ`8J=2*VU-+!52K>3VWZ=69JML9RA9)0H@$M")UWO+:WI-)\^)P2+3%
XM-I3>`(!;-VGJP+6I/[=0V5R6D&B5J\/EM$4UVX):$B1JZ2=I!;<MU$B*U_[A
XM5%9M8&VUL77E.L:N"O:H:?/TDR(@1KJI5>A9OB=IBD0PEZ_"3K]*$>IM64"[
XMF#;G>AL0D''X`F.-K)(6Z.9=E0AWLU##O:(/MU1$W%JB="ENJ.VVH_9T.%73
XM2G)-KM4MM%@WJTI3B0AKFV(D@K;#5MYFT$%+<TWJ2L2\68C8@M*YFP-X+G;$
XM09`6[QI<*'IY:VVT-;J`%^EB6U#S:0TOTT6\3O?;?M>;%5[)[<F]NNA6Y6K5
XM9LER@5I`[+N4-.9N7BWF=H\O',"YH]<'32C3VT0%;MXMN/:L4#G?HKL;J^UF
XM[5JR5^(6WG>25)LNUK14B]?43MU4^WLA;_!UM<,W.4(3YPMZAQ"N%82[]9)V
XMWL!*?UWOL.VW<]<Z+-:9JFROK^K-OMBL_PK;T/MW>6?@%1F>=?QNV\-K<7N=
XMXA6Y5I,K-%[V^W@U1>3%E_&W\J9*_(@;S4/:S;5&<_G2V_U;:&]C1S3!<3?Z
XM2@8Q,H`=K?6-.MAWTBY"%VPWN&_&;&Y2<\?I3L$;@6FOMDU(M[<"&T8G`74O
XM)525JLK4W`+?E`M_)V\<A+6?TJ0<R22Y)(O`6F5W%37-UB"S^A'0*AK1PON.
XM"S-))_E00<##>:OI1JS*U3RZ+L&E3DV^:M>2DE06K"GJ<*N\PYY4[DK?&*!8
XM[2X!OL',-N@>W&_YAWWP$(:70OA7\J;!R[EJ+_FMN#;Q_#[=C`LP*:007;)Z
XM\Z=A8,+4>TLN!Y;"[I<*9]T0O&[[PF"MJ_(H*7@*S;M$9^Y(,*FON`S$8@:1
XM)`3Q#*8!U!=]^EP#W&P782[>Q9ZB`?]-]SE+B[!-L\03.`EGXL&)?D<Q[]7`
XMZ[?</A>4"US2+5%Q?_!/_M&_'QB?Z&I2@,5&@1?G5N5;B\_GZO"MAW"X"M?(
XM2ERQV3%.Q\D8]CI@3FQ'"<,PA:W6F$<J8=.W>PL4R26O,,"\)M(//"(C)[*3
XMKR_2,F)3:UIVMZE_&I*Q#ISZ/E.9`*D=6BNGO/"<LJHHX!$\!15H8K1XUS8A
XMMTN2!<5)'F8`>!`?VQJ<;!$QP3W`.I@;MF23W,24<0E]Q(6!$E\O:(R$=RGN
XMU<2Z%R&28FSL>SLP66#(6E.V%E]HLI/SP$L>E&<E#^=?DV57RD:=0%_P&!L*
XMW,,CCP$/-JO*5]DG1^*`[$)S+]:S63EPRQ0!\DI5G\M"?K]VTB$+M*];'+UN
XM^MTN+P:JUF4W5$`$6R=L,R0&AKSA"5*#W`V\B:@]-'$8/B%2(@TS,8M;M8'&
XMN8%XU`92,N6+*W?%;!@.MYN9E\)FYD8Q>0;_6YH<<'.PWEV]W+`T&Q;.K)9C
XM:?@EO$9XZ1KE@8P)?^F*#89A(@^8%S/`96D,2/BPNW<6055*04;\!VY1*J.H
XMMSAE]-J-WS)"LBF"><-<+>E@)[[F;,`HM*'$D`UR,V?VB+C!*CPDK=:)+Q-%
XM,'.(.\WR:!UK94%+-[]26`:N?6<>!U>SO`AE,WR>1]T7")/0M=R$?2=W=<L=
XMTUH)F'$[7E%`0EZF=UD5+TN14#T;4ALPQW2`,[NLN\&.5?)?Y<-D8;!JZ#N1
XMF@M##-BYK+GG%F`<C)/O)ID4K$EA1+^L``T3OZ_UNLV5^`@+&&E<&/'87\[`
XM#-KQHF(/C)<E;X5>F5<R1G.C#2V?4;`2]=!I0Z]\94!UGU%O?H:P^[FXRFCY
XM](-KM*9-T$OY0"-EZ]RPV)]<)J_..:GPEJI;52-T=0;3=+>UR.7^49>A2@'I
XMSFP*/+\0$_-PJ`P<NB%6!3W#$HD:1-BS=V:W^+8,4$SOZ9FK81.B-SR!#'7E
XM;2(K#`>DK@A1L&+VE9KD+A%NAUC4";-$9\=@/&VL-#%6Q#LXIX+J*%B;.6NU
XM%<H3]Q)3X&E\<2]PK*LU#'1G>F*0RZ:2LYS^(*_EWS;GV@*=F0J;WL93^$VO
XM8BL<88OOA*ZAVS,R=D_5^2RAM>G,U&P*6RL0)M!O>&AYII8H5`2H4/+X:LA"
XM1GDSBYF"1&<<`*=QI(@U079:JMP1*:*GN?5N@#.R!)5\#&W=`ZH$HZE)?I98
XME(:D>R\`=0Z!,S1`JPR$<"0KNM=4D2+#I`S,7I:P0Q5JP@XB"[M<.^QY';>8
XMX7]0"JL:F\QGF;N2070W_-B*>EJS:E]LHDMOBCZ]PYA%%V-NZ+&30LI&F*Q:
XM'R_C!QR4G?%7(LH[>C?3:@N\J7VUU$6U,Z#]$FD)#8*9-?'=NGE9P%1/.^L]
XM,73(;M2QDU-GTL$:LD6UF"/5(<A4RVQ4S0VYMLJ^<30:6/YD2=R,.VUNMKU"
XMNT?W9OUJ9*L>RM:N!GH#VP"E_92+=-,ND22S(4MM&WHZ<3:"C3W.$V5J2VQM
XM89]2`.DWOL,,F($`01Z3\P365"0$<F-=:&*V#7>3QK_TN35=:M$,FKURN;;4
XM_88G8.M-O8FJM,\ER_3X[Q37KJVSUS;=!J8<*X7J&G(=,,PU;8`R@T]=,Q5V
XM_:/#=+'TMF2:0)EI8(VFB?6:5L@F@3ICU9+).0DWXY8B_)HVV.LS8(:K->;>
XM':UD#K2`,&`&:!S>AD)^[7O':^0@4!&S]N[6Z5I?)PY^[:__A&8(V+%K8$_L
XM<!.H3PRA3B`"06,'5!4$L=D`,1&_]Z)B1Y#_;1L">.^.P_+ATC6<5=T<[N](
XM5,&VV%TZ9CI`P5VJ#"X,,N!/O.SJZYI=<Z':X!V\F['MW;FS<?10UM'E]RA3
XMXZ=KM-%P4Q[2?9MIBTQ6/)61U@17V17\<U_P=ERZ\0J5UM%C63]?Z1/^PW%V
XM!6_5;%(I7V,Q/<//=U-:W@>%+D/O)/&!=^]$RLY?)BD5$`O]8?6T>'8X6:4Q
XM-QS_'9D[3@H0(D=:'BT^:,(W6"?[>`)W8&QB;;:KM4UJ'<^;QPV/CTVO32E&
XMN#!>T8EX[V*S/WX[!;F`J-T$VH7'ZF@<MYFJK:[AI9CJ\FWI#9#_-MASG#`6
XM.YI,PCTDHJ?FU*_+T65VS<1YJ%UQ4K#C3L&1TZJ1C<%+]BT.K(,5EKL!6>ZU
XM"W&MM,FO&0$;XU<.R.]X'G_D:=N*.F!)+H&+LE+ES>JP>$_Q#:R-6RM4MI^#
XM.UICH-N)H76Y+!?B_A%*]U8D7I;+<G'UYL<\G"1S2@EX,?G\'--PVB"+5X2\
XMQ3GYOBR1H!PU.H5.L3>*N5/8X[S5[;XJ?J[+O38P-N2E.F8G<MA,(`>ZQ2SH
XMD-PVOVJ?+6N`=@R'YM1*FA,GO;W)KWD,+8YGE'E&;>UI.DMY*&:9U;-@R`'0
XMV;BM-?<TW-E3)*ARQ!DSXU;1L`\7M*\&=)-]T\D`%?/:,]D0V^`2WJ(+54__
XMZ1'=50MH6-W,@_8S']I+V#?3V-5F9Y>&NVO7C&4#5X:.[K=W^.1UKU4/)-R$
XM-[(OQVR<[;)5$J_-%^$&<*!L8J2KVDD,0`%D$>(`NOZ]Y85V^\EUND[CO/9J
XM%NHUF:C/;`*IU^?ZO4#F75IM1_*)[K:?,0S'Q'([FM_NWQP:T_F9'0[(68IO
XM]/6[MZ>S1^^B#G'"B@'UB(6IMTVYLE#@"9`@4D)FW9P8'I7N!`HL@2_@B0?&
XM86\IO+I412'93MMMGK.Y$>6!#%S(D!OKEF-E)L$[H@6XB);>Z+#EH*)D-RF4
XMW\@)/--AIN(\?G'=L(<X<'XHB3CG<MW*%G9G:7N<W?DZ8@?*`SJ6\F/!ZOZ$
XM0+;D<P,/JRO$Q!O/,]5!=M#U?'/W!7HHVK4[C;/K>QBO:PK^7MYON]=&T8"]
XM-;=H$YZ`=T.!#W%0_$8S=H+MV'7S4X_L&9TM'VU37,VMJ@Z/RGNLR;U,80?7
XMX5-5^^<=^C.W79.MUT^\;6#9=@YLRR&QO="%>=F.ZRX^PE/;I4[1B8=%A^R6
XMG'7SO[I=V<?F96<)F;UJAFF.[MF[.H@?OJ*=M,_6+`QR0)L92.VK?>2<=32;
XMU@<:#N+MM=V\X_8YRO]V^VSWQ+_]#03WX6X\W91Q!WL;L=4L]\JI/);D%'CN
XM=S2Z4[NQ1_."`*719J*XV\VB*WMMP"K(]1C-@2G,0P=OX@$]@.>\`IXL$/A&
XM/]0D"HR/,S)^FBGTFSS87_2D%P,Y/JF#WPF_OROZ8Y_5&+X:W^I>!NC\O&'X
XMJ,C,BC/>]9NTF_R'Q^;,,LH';NN'[F[8L3'T,PC1ZP>,FJ@U%)E0"?Y]*>CU
XM1\]\3;:G+@/&GE\H:C&OUT4UGLGT=`^1<WJRW=!S:K1']M0^KNOX34OJ$7B%
XMA]L7/L@S87<>I"D.5[_U'SV^V'D\7^F8@DA_UM6=Q$-DU*[:0UYK1^MD]4K&
XM]>8%W%4$LU_!D5ZP#GS<5?!]Q0<_%2(\P:MH8,[@C?'"SP,-?]RC=Z;^MF4U
XMCU;W4GW/#%!0?N393/+.HAOX6%MS)X_KH7Q<E_+.VK2'>*Y)TZ^[<HSM9][F
XMV?80Q^9+%0+5,V#>MS-\-:\B>K[`AT\$G^B3`>ZN:U7\.(_'L1M++W'RCO2'
XM?G#7^"&_P;IW@0G?D[R&!-+'F[Y+<WE.=.@YA([>^ET!?/JD']P/?@;/I&O?
XMZJL(:U_()3[,UO;!/"<3R+B/\94^UF?&$+?'KXX?C^I!OH:WX1S^W2MKR9OO
XMBV>)%P/-R^W;<G>IUYN7M??E=S?U=GH#5/EQU]_GV=96\'L/PO_QD;>0;ZZ4
XMG>2G,*\?;H%TRE?\T]NKETA=7]H%-_(@]+^>K1*Z%1$>%+V7MS9L5-FX^L2'
XMNW0[SN_M@^ZSB'FCSY>!?LY/_FE^S>=V5L7W)?^'3OA\W]H?=+M/PA=\46_P
XMHMWRBWH)S^,;^\\^]:5?[(?\-H8[AK^SD?7J%VG#_DXN^\$>[9_RIOWV6_E"
XMK_MOGK#W_7'+E5(N4#$67#CG]+E=`B`1XKJ(7HE54/?+"7;<WHN6`!*`GQ\S
XMU_%1<NF>Z<>$K7?"S:Z&(;%[U-S\YXVU3"+>*E?3T59Q7=$@!W0*UM^*E_#I
XM=2I@IV#M_74/H/>W^=4D,.!2(`..?SL>3,3QG7L>7R6G`6IT6=WZM4_8>LK:
XM_,7HB0$QX%+0`O9Q_-<2V`3.!##>#(#@U8":7P1H@'QZ4V`%6.[A9D`@!FA^
XM57&7G&97!*):1R`.9\^-9"59[B+F/8$L61N8[%&!#]\,4'=A@3]7Q:>3R8%B
XMGA=8_E%XYY^%-P;6:D6;&;CA"6G(6BJV^'ERJ8_\U1=497,@TY>">7=/GUA6
XMSD5]A0HDV`?R@"949Q2%Y#3^CFO3X<!_XE;8AZ"-??;=/(??G7U<',O7&2%/
XM>DV5PY<Q2_@-ET.1(3)OSC<%=FT['MF>I(:L/KG@C@1V`8.'VQE2PN!^ZDX;
XMEJH$?,=/4F#<L`\$(!S(XCF#LHU30`%6@2X;]W?(47S?WS!'!SR#UN`"Z`?Z
XM@**?Q$#Z"8'JW^&7R;E[2&#L]^0Y;;O>P^,3-7[M#MG`,M&#RQ,<@*&!@VX`
XM`2@)/FE.W^C6"=IGY%S49\[98]3@<4,!<H+RW9M$!M9W`H9K05[-%G79FX#V
XM^6U>'!:W/VAQ85Q!4D"L?NY;=@._I7%PR`;'QFD5,ET]DVQ$&HG1'-<7G&3U
XMP1SPAW4%O\-8!U))@PD?3,A-S(0GAXI@$WIP,-6]@="%;9M>WN>B&2`ZH4Q(
XMT]"$/J&=D%RM<RR<[0;Z_8"!(+HW"!)MZYXAB/AI<NT@_?<.EDASP'T!\T%M
XMSUJ)!!UD,/&@)_C?1!]BH=@5>Y!=;.$8P-E`$TDA3U@3.H4?P3^HTYE+K5M!
XMN)\=A(M07;@4]H0K`EZHP@%^!9%4N-Z!@CM-,//O!'KLGBD(SZ&""]I]]Z"U
XM:1<AO"?*.42U(%]V"[XQ.H9;"(7`A:!A@..(7`'E`1PP!^*$[A)J"$G,@:(:
XM#1#QX8&GFB*W"+F&JN$F"!4FAHO='UCJ^7CH'SIX"A*!AR`*T-FI@9\=E#(G
XM-3)AH5R8%FZ&Q=%9.!8:4#=?-E64M(43F2]X'<J%Q2")\@H52V(A1M;C:&3-
XM80L@3K%'8TZ;(QV*AK+(6E@:SH5]P29A(N0\K&$F)1]F"#E/;%CWT89CFVW(
XM#=V'W(/`<QB"?C9:#]B`4(6FGB`HPQ&"&^"0)Y?P.U-`$+`SD3K/!3^GW+T!
XMI*#K1^N)@,+7Y.4$V![BFH"X+]&#)R#GEA34!O.A@%@?XF(GHAN0(AH\L2'F
XM=XA!@/XA8=<BOHCNP3AX():#*,`YF`&F@P6:_-3NI8&)X-*6!+IR=`"*B!\*
XMB'KAVL5;]850WU^("2*$2:*+N"3"B`QAR`<A2H@O3H5H,5V(&:+Q]JVH>]88
XMV=>@789V66:X"`IN$=&'J#M0.O$=4%.5Y3UPP(H86,V)N(N9$1MN?_QAC:?W
XMO6AX8AZ@)V:)B"$$9OXEB%;A@H@5$H=;81C!(<8M@:*9T23J84B330/>)7%2
XM7SVV"$6*D<CG%QF.B1I@F9@*EGVG6)K8"FJ&"EQZAD8T%ZN-XN.(/`$5DQN0
XMEW!)3MI>R)5):62(VP4KK@2S8FSH`&9^>6`WR`WMBK(B6J(C3F(\HH]X%49U
XMZF`',:=%5;A%FG8;/&]=X0@(<%"(X4*Y`TU)<U_<LUBGO59W6GOVG2D09USW
XM]J>=9]Y:H688X&FH$;D0(,R*=F(+YBZ6`;TBC$<#T(#`8FW(T+UH0E.DT"L2
XMBE-ALA@<_HC#8;/8[G5XW)@[V/+)$^>,MI0MYE%5&;R8XCEJUY^[%#$:B_;B
XM%9@O]H?[H@%R,>HENR$D)M'YAN9>51@$$HR3(:.X#B*,R9K"&.^)!-?B/2..
XMO8EHB2/R,=(!D^)6UMM,:J0;13"Z`0NH6^Q"$:P!IY^EZ!=>:8#A'B@H_(LA
XM8Q`62WV*T8K8)RI&A&<:"K!SR1:T!6XQ`Z@`NP4KN`8>1P3-S<0\?`X`Q\6"
XM7D@(T(&*95+@3*%$V2AC;!LW`L"0-GH]I-*W,EIH1#^'H4%H*`4R`%LCD+V-
XM>&-YH#?R#GVCUV,>72#=`A'!!F0PX$28V%0$9M[B0D&820<Q(\T$!91QY*)B
XM%D'<B]]:X11D$!77$AFE+=4_VTD=`8H=-VQ-EH&[Z2`WP=Y8!L0`$DH-<`$%
XM"W!C*P$[LC`UP"<X0,4'3P0X(;X1*Q<5[N@>AHCE3I"@+$Q&:DP-0!H2CQD,
XM88`8H$727`W@UTB$*$#7N"Z*<=*!V-@V/@$?EI/A0FQO)X;T.&>L`::"WF`2
XM/APV@+DAF?U0_T;#:#F^=*D3F?`1M!MK'/IX)9`1:P#'8?A\'%P!VT@V/@$-
XMC>!X$X0++J$"@)81*VE)K(+9/8$\XY16,692!V2LTO@H!4A>;'@';HQ^XE%8
XMDT20"20%21P<BVT;((@HGHS+HH]FC>F.H-$,8BV\5C^`XZB</8O,6>)`$3YG
XMU")RZ+>!9ZI$N:A0J6LMP*2P%0@$P!A3(0/0)ZO$R<$&!&]FQ.-@&[0`?D(5
XM%C/R0&Y4S5B#&&R[P?-@AJF+%(Y583.V@50``CE!8G8Y8^C&#Q$/E^(E.-YM
XMBERD%ZE`5I``XWI'!(2.990/5#K21R?=R6=:288/(67H9*F":*)%>"JNB;P>
XMV/4PCF_/(_+(_Z2':L@@Z3P>CV@4=D30?(:A4:?`.Q*2C&1V&)$=61_"EK5(
XM0H_ZE5_#H\%'DZ1X:/VX:Y`=*+EE_0?E6SQUT15%F>03$1;<0G'+!C<K%H#=
XMG3C70.:*)ILLB98P@(L6#9`-]HG;7HWXHNF2;&33F-XI=>3@H0@<*H@8G:KG
XMSBUGT:+S%IVI?!X>((G--4`S!A1A%+!^-@OD"*S1:=J90W$=##6F64BH0T80
XMC-FYV+_U:2AA9`0B:&82'$@P2X:1)%L11[H=<5$BTC@E+D+$Y`<),$*-8E$>
XM.376%-2CM%BL26>8X1\YO66$X,WDB!S@:9AC8L:GD83@Q@9'=$@!)Z$/]45L
XM%1!E/!D@(GE!B&]0&X0+#"2N.)KED@W'+!E2H@$CY8L`X\F.V!X*A/?I@012
XM/SD'K)0M)0@9^"F3@]_`6$+.;4'B4P5#1I,TY#3Y*,96V.2VT5':D>R$-XEA
XM*!0!!+@H'6@1Y*1A84YJCCQ$.@EN4)'C!CN)15*5\"2K8E/BE`;2&T!/UG)%
XMW!VP_*`!12-!F$^*=U,?/YE2[I)D9;C0<!%H:F6[X&9L%&_8G)%*Y)6X20A0
XM)21DCT,3PA.,E;("2UE6,A,)139A./`$MPM)P`0$"3CC->'\.$V&!`H@15`$
XM>80C8<!);(?E7`E2)I8M)3/1/SB60`UB*5(NEM=$8TG+48*W9%XA5P"-TEP4
XMXEIT&>%DAX&G312P0O@6$@)O?25360J"BE)C4)F^:(1SF=6(6\P63L:P5E0:
XM:_F=*P@=AHW^X[X#0#(;9Z/<^&6-DL3&VC@V6I?:1G9I'VR7A5/=^+.TCN#$
XMX-A*%(XXT-^8JFP;Z27U0#BR-8>C&I(X&@J,X\_A.-Z+O]I3:3T6&=@C<E`Y
XMMAV7(P+A/89G6"4LP3EZ/9]C!P%'CH[VC^FX%$E/F9#J>*H$4^`*',$[W([.
XMCNP8KM&.KB.'6=+DCD3>).D[%F?!8X<Y/`Z2QB,GZ=LHCX(D6E)'?`25).Z8
XMOCTLF&$%9Q[>"_3C8X9.JH]N'/\X8-9,\*/%5,$E&EREH"9!W(]TU\+6!K23
XM18:X"$VHEHIEN&!:/H'K'8.64*")[U0&XT=.%"M"KX%=N9!MV60X4)9BY-4-
XM$%VJ8G1<4C`K0@$@`AI04LZ6N&3"QS>\F7&FJ)8[QI3YI+YHX^%-'R4'EV<"
XMC!9@&.C,_922G7$Y&$&3SJ6:9E16B\*E@H;6.)3C)!H042*8$R4/D;"I<2#!
XM17E%KH\;Y6,19Q:0@Q6>Z1O$BYI"J8F6P)D$Q$NY'V*0P63'B`.ZF:OFH&E,
XM%HCD'LD(!IJ,8J"BR"QV.V>@*48D6G,I)FU%:[($K"8:<%;"EB8E/FD)&H3[
XM9-EV;`J:!,0_J14*3@SBF>DL,F]'Q7.)4)J*7R.W**90FE2EI7E59IJPA)]6
XM438<GB9DIC^RCZ*F;U!`0E(T32E29D0BJ*:]U0C9FWKB2RDC#G4VH!98D]";
XM()LIHE,283SEZ.=3^IHFY*IW8>9N0A1)L%!>FTR9*49-)HQ>X<((!20!6$"4
XM%1F9(N8%F!-(1H3@&!0I1]X_;1[B]AV)9$90?=DC<62P)%!C!#0Q_":^.3%F
XM;6[7S#G,U)RGR$O))\*:1N'10W,:G(3F%YBC,9-07<,)`F9C1Z7DM7%VG/U3
XMP7%OZH-\4"/DJN2;FA1-XZKHF;_BC!AP"I.YDM4Y!!R<AJ((N4PFBLTD#4=Q
XM0E7`V%35=#9MKDK#6`1@`=K2A*7\)`L:T;`2JX2<^Y(.%([E04(4.18$S8(B
XM@:ORA45)8M5K!VZ080F56Q69U12&)QL&4*5K$-R4-(<1>QK5U7ES\G$"74ZU
XM=;Z4^*+7F06"G0.GYSEV%IVZYM&)=B:=0.4S^2Q"815A->DR@G8"1MSYX]"=
XMNL,9,`;L2Y'G/]7_A6%=GD&%@#2>JF)"TGNV86]89!96R0<6U5QU'WT%FN=K
XM*<X)=%Y!'O!Y/GPU@,8H>@:+-Z!FT!5`GZ?GK?FEK7`(I]G94R*=J9[:J>1-
XM<^O7Q=DR9IPOHV!U6M$.N*?8(A;JGKSG_#EWCHXZ!OY9K1V?8!7PR0P"-7P#
XM$1`D_`:T9--',49I=.9):6<F!0:HV``4&EL7Y/;I9_Z)!D@!>H#^5.+GM)5K
XM)I/FI\*)?AI^BJ;'](01E8XF=`EI5F&V)_U9=^Z>0A!:DT*(#9';Y(8]19I#
XM"W86.4:5'$8!,8,BH.?F>/:&Y6MP2*K84;1QDYG#)H$6D'Q#!.5+%`GXUG^0
XM@$Z"MF2S^4#Z<4F!$[H10*&[@12J9_Z20"=-^:(UH:S&$UHP=*$<:&*GS+5P
XM1N<+-X(.@9-=8U5&11J`1C"T"[5(..@U=H)BC;$GQNF^Y9`))HK!0YX*O,40
XMN:RUH/MG[@F#'D>09&"0!IP9VT8;<0;<!!J+=>C`E*$BC*%!2%"BG"8:QT/`
XM8:"FOR&'WC,Z$^"Y%$6A\R/!T\1$G[6BDWC7N4LZ9QEP?<)4Z2.?^6R.GK*F
XM9A"+;IVH)PCZ&YZ?JV?ZF92MGYO=#5<DYG#69/R)B-:?(H#_"4$-34$`1(%U
XM"DU<@AP0C7()HIH-,!N&H<)B0P>-0A1D9\^6<)J#"V?:B7$YB)0=L?+\B!=D
XM9G'H?BJ"LZ=R*$.1A?F?=J@[L(>=BR7Z)T%DW%3N`W\ZDBYG+01STF'5YS4:
XM!DRC!2DX"N/9`*^F!<HQ_IG\8D**C?:B.^(XVB.6HZQGHKETHEIJY@JZK/F=
XM)J?]*1>2CBAGWUERSHSO(4D*!*6<4,ARM(R^H"[2*5,>XJ.&"(U4BXB%W>%P
XM@DAZ%NLA.F6/OH<Y*4D1D&Y5_JBX`]Z<AT#-]YF[=%@<FO1Y`#I[U2<4P)1F
XMH_]F8/=UYJ*V450ZE5*DR*)%JBPRG*TGQ=GNX0!OIU<'DJ*DAX%8J)*68S34
XM60IX2H=KZ>!9'4*>^B<SZHPN0)517!@,ZE<VZ79H[H0Y.VGW$AKZI)<D4!I/
XMH36BI.CT'7XK2"F1Y!-];Y4&AU4?&$SB@AMX+\R9H=F4Y@*Z2W.=2>#?9:,_
XMIT.:018JG:EE"C*JH>S<,M>&3G*')EB::&:91PR49?,D!G=AGC7]-806QC<)
XM+;J='JG98"H`HNBF(+H5])!)6Q7FEHYC[PE;&DV]I(IHC^F)'J'O9JA)$_1[
XM`Q-?5T"6IN[&CH"9>F5U)F=:F6:G>LC#9P-TG0`G+@J1&B#8:;H0CH9^7BE&
XM*HS::K!IP#&;$H8_(?.G,FZ;3R7L^7;BD'N:$"IE#*+%Z4=ZDKZE@B=+2L@4
XMGG4I3-J)IHNAZ!LW,U&GCX5UZHB4ID7#&7"X;*=&W&::25&H98"%FB@LI*%G
XM><I]"IRD2&5:H1XNZRF">':2D*YIAE>"9F![Z*1`6^RGOVE_^IP*IR``<5J(
XM&J<#*G):DM)0S*EA<)=Z)>>CXQF=BJ(@P"AQ!+0O%&*`X*$B>1-J9;J%GJ%G
XMP'^`H?:,4&"A59I.J:AH-JI]BJ@7J`99HIH$7"H:FJ(*C&\HD.AZZJ90&$5(
XMHU8)P*E_RD/\$,,I(1J=&:*2UW%Z<JZD^:?<:9<NHNNFC_F)(J'P9F151N5,
XM1X`IZC2AHM=I91J-C@%7JF::I6H*I>FCFHU6H&#J0XJ!UB25ZGUQIK:G:6K!
XM^*(N93'JUMB'OI]_J(T*9P"HO,4,P*/N0&AI7&J@]BBU9X+:G"ZHR>>1ZJ!:
XM"E(`6C!$W!<%),HP+I2FD6IWFDD)JVQ`:9J-@J&B::QYGN(ER$2R6IE^JB$H
XM.1JJIHS-(MN)6YRJ\&@GQY^>DW/J(.I4O*I_IX_*IP*IMJJ0"JBB<K$=$I,%
XM3`$X$Q3`,R$2.=1`\_/I3_)I\D>;-H6V*9EW+Q2IG^@$H5$BJ5@>A;CSF7QQ
XM2VF*K):I56I3VHI2BEI,;'F%!E8*:[3*L+X*,-X-<"4,A3->42B&HJ>5Z<*Z
XMJ)JI7&D(^8N*H,$H";JFYJ?+Y8S:FR80<*JJND/6J4G;G4JNAJ2!9W(JESYK
XM06HSNJXZ(0`K=#JP[JHCQZ%:BLX[IR@:VJB:!,CJHUJL.J#>*=,:K5JJ&>LV
XMVJP&G=A,Q3HN6*HEZTY9K5ZDUVH>>9^6JBZK#<FT?:N!*)V:H]JI3(6K*J#"
XMJ@2JSCJK%CNUJI^JH):$]:.1.K3"<;VJ&@&L3J@9PMPB.#RM$ZN6&K@&"QV"
XMJ'8#-*29ZFB:M1ZN(E376GZ>K-9JR@J'.IR9C,"AJ]D\XUH[:C\\B\):XB!-
XMJJ!FJ[)V_>4'K,*C5$"@KH)KXEIL=0IL@J!A)/26X(*X0"ZL/KQ!8D"W9`AO
XMQ)W&`J05S$*OL23\"'J(U2`3%`:^@8\`;!2&O(%T@+JV5BX">0`LX)>/Z*L@
XM'0!C%463$!10`<J!H)&X!@M)PKQ`%C`+TFL;0+W6+04$]AJ^&0@MDW*`'?@3
XM\4'JZF"LKMTKX@I:\@0OE?>R%(P624B0$/`@*7?`'*`#!#PSP;AF*@@!N$:G
XM"'X8L%4"%I`%\)QCPF^05@A*B%4740:4;TL$"D)&Q$);P19P'=P'T:OYNCA6
XMK_T!K)#`GAFJ1ICP:Z`@%Y$\DE:8%=%;%_`N\`M'$>VZ%D2OH%-OF5GM,\7!
XM>-0;!#+%@3]&0*09!.R:D594"5H`!-L;"`O(JW(@Q+H+A]3P*BOT!B^"MP#"
XM*@>5AOB6.IU8>("T4"U,L+V&"IO<`1L@P"2J;O"63D$)B[K"L$D"[@`%%!V0
XM0XH`'1@(L9!0P!-DL4O$@C%F=+$.`AD;PIZOUBMRD,)*1[T#&;LBK`>2`9+0
XM9.*P#%=%D5;PL""`#PO)/K'R!/C1*M`MK,88,`9I"\4K:5$8\([)P4MU2*D!
XM[@%9L"0\LLK!RM>#1J\H`'R4`L2N:T836QA0L,YK_1JY\@7C8LP*KL(2:FL/
XMN;<M;#3`S1JK%JA]ZNUYMU:'B"G+N0`-I1O9J123%C@]Z2P$=DF'0>E'<P&A
XMDAD,L,'!1"&?R1.K0X5O")NNNE4,44E:DFB_8IV#5>L:GL)4-T!5JN"9IYMJ
XML'(BVJ_4*N4*MEJN0.)ZQ[YPB9Y8YYJ'%J.F6`U0EKZ#>NH;0\S&H#]IV%6)
XM0I+5+#3B7B:FGB`SVYA21M<*AA49,:5Z%H:FSBZ;XMS/B$Y\=T<C7*DI2IOF
XM["V+FD:%!%J6B:IXL_]LF2E0CJIS"'ZZ$7:;*>BW^65B7:?KBT"UR0'1F^YJ
XM(LBRY$&1H$\Y"+0L<H"Z>J_JPH80R;Y;5"SD8!1XA/E!6E'''E(^K$!5'+2P
XM3L;S2BBQKT$`GG43<+*)@RL+R](TAP-QD%;8:5@MC"!5&K6I['DU@-5K(Z&F
XMJ:X!D='4>F5/@74453X57Q6AX*R[B462LPEK9=I%QBHZQ.;)6TFLA2NE*M@B
XMD&M!QAJ:-J[.:CPK$)2F@RT=4'>=M+SAR.B+EHPC9*]ICI:!Q&A_:52TG:*K
XMM_F.&HG3&]H:G/:RO04P*\S&K3_J<IJN^JQZ4F&JT!9`8!=W5-EN<$KF\P!E
XMR@IVR])JE2&05J1A:RXAMAJJ2479$K?_5L9*GEJE\*R8.MDNMK'*\U#/<K8K
XMJF>;D;JH*^MHBX).BX]FZ9K:UJB[+([:0SH5KNW;6J[NJ<KI2(>@VJVWJF>8
XMT-*DV\7RJ-LBD!N<%4EYKF>&`7#;!A20ZFQE6]@ZI0LHJ]!L)K>!58#+V"JN
XM(2IT.Z*2GH2+_2K@7K>[9F?;FGZVA>#Z:5O*9;@E#[J=";+BQF^)KKE5<T9W
XM^UJ0M@9E#7F,AIMY:H_*WNZL,M][:\S&M\CL?&M);D9()KJXWVX5^-L9X(@H
XMN-6M#4"X(KB%%I!+!UBW&>N7ZN"&J86*D6O=2JYEISW[E6*X6:&&JV4`:QTN
XM";'6L@HA+KVV5T89GVB)NW8^BRCN#%G3GK;(:#QZG1&4+JY!*[<6LRXHC<NN
XMZJ.W;<N9V^:X5H5^ZU8)K/QM%HF'0E"-T/ITITRC@>Z4U2EFK)CJDJNI2K=9
XMIU(@Z`Z*'>C1M9HV=:OD>]I6RDCN1/[`!/@93L`Y,^_PCG.#Y[H.HKDL;M.6
XM;&RZ4%;42<F$3U32F;$MEH5X$OY7^R0D=FU[]5X-M8Y(+/KHVIP$+LYILNFZ
XMAF[/^?#=`,PJ9(NU+D+`KIT"Z6*V(B,R69%^K5/N=NM,BJ4AX,OJU9VZ_)/_
XM1&4]GWG`K@L'!`'V02R*D'X%WBZX2P;$HJ(:#K"Q:H,)W4S9C4:DY&ZP:^ZB
XMNU"N.`KMNJ<J*[6[(5J[[R"VF^KZ3ZRNC25RRH/V':KK<::E<N$8L.VZ9SO'
XMN.#M8IVU0</+!GB[Z:[5:NQ^K/E*CL4[4KSU+GMZ[X:M#.)]>C`.M`NCOWOP
XM*KR1R*)W$TB\#Z]Q&^"Y2_30RJMC3;S!;KK+N"JZCBM`%#!HO`YOS=OQJJC`
XM*(M*Y8J\U:YX^X_*HY6AP:OJWE$+;VK9<$2\,Z\AX>U.H0!A@>MV;7!0+^\H
XM]0:[O&0HA0.XLQ,?C8B5@@!8+\^;3$R]%*[J*?1*N^KGU[?D,9W\[L((N(E@
XM"D#9*_%NO<IN)#('<+1.G\0*TKZ52MQ(6U,^O68OWHNH#(@,$JZ)F[YS+VU!
XMAEQRA`EEJ<M0?JZZZ6`68'X39L:E*;-2E$1JWLI#_&]NG!!A\BZ]*"\<4$`*
XM@&.`H(MUHKZ";KK[V.*\D2VCR_J&3VFO&XK/BJH;J<5)\L:?HZ^VF_(BM(11
XM4K30[CH%UBC(C_HGW8E'X(C,OG8*WUO@0HFWJ#YY1G)#S"].$NFV<V(I'IEM
XMPK1FHMD7^2:'EHF8(OS^?N!-\7N9U;B$4?([MP)F%>V()76F6*P*ZKNAD0&J
XMK\N[,QZXDRI9(/_>"?0O[0OCX0#/[3O[X(Z]^Z]1T/_:*;4O:^K4(9K<[9C+
XMIGZW!R6I"_Z6:4EOMNO`-+W66+=8^>:6X:)WYIM*E')JNMDY$@TZKM[:Y[*+
XM\2^2,@;,OX*N\YNU0;_XF4@KNV$S!;#AJ\XQNTYC^9/]$I>GH+;)H'F_X.8$
XM?+:TOR;('@O_RK>$$;'ROLY'EF3OHP07"2V`^1OH]3B+Z07R!&<PZF^IHI&M
XM!_"5*\ECH8=B"A<\U$;!KTUX!-Z(P?$!>A'!I<!8BJ`[!#@'!MSJJP*[P7!P
XMUSMWX0`-K@#,Y-+`<W#X]`:/"XBO]S5^%HKVKI2+[UZNB^$`M2#@1NT!-[E=
XM;6"UGM$[`O:^%_#ORXCN.O\3`+@`F9=J",'D82V_?;"=\@<;<"XP'^?W&KBS
XM)5]A3X(`1*.S&0,'OC/P(E3]R@&C<"`LH"F^(J_VBQ5JF]1C;?%?WK08H12G
XM`3^5EJ]'.%6B6`9<$'JCJILG9$0#5?V7E*:796!FCL'I(3(^EH_;0]"Z!8"^
XM2:AC\OXFP[CJ`A=#YH]#*__XO4G#;/#<(.A*I9,IU6LK0GKNTBS,#GM8Z:Z2
XMJP<ONH6*/,R4VL)>F@>Z\:&IMR^VBKF*?*#1(MP1-<*B;L7)%4K"'2(E3,E@
XMP/4H890)DY>>("<,PA@2%+$CZ5Y*P1FQC,3,JK^G;R@L$\S#>>$U,>16@J]P
XMIA@+4[\BL1Q`$O/#BMW3N`-'C3TP]_OX0I7?;S"\?@[#1D4Q'&8<PWRLYEO>
XM,L/%'1'L7"1%&2V=YPT+J3Y-4@P&+V@XYN[`?"J>G:^@.J@1JM+I]V8$@\-Q
XM2[(K$[C#KNBMV(`R83EG$R/HVL'2UU1@B^)G>S"R:Q:'3S#Q&BH5%IJ\YH7+
XM]@ZC;J\>^GINJV\JIAD"F[>G0A7F$#.]EK![NQ1O2Y.I4QRHWJB@:.CKN'V<
XM0?'JA%V5`6?Q2>QVW1#'ZUF<[A:[L.^Q^Q].QIKQSPL0K[V6;I6;%[^0NFD,
XM::KVQ7'JC<K:KE;1F=LJ>0W&I:]S^FDZQAH8JOLDU0Z!AE+PWTK&QRL+'#Y9
XMQCS=9"P<(\`P7@ZP[@*3GC'39!SSOZVO:`RJ!L1B:QR:&_-/[`Y@Z2Y,Q"UD
XM2ZN#ZJ8H[NAJT\J>1^^:JS\IO;XOU1E-:<7(L./X2.:FQ#`'S)V)BQ^P7\P8
XMTZGJY,&VXQIJ1DI55AG;OQ$K_AL'"@J:<7)L\7;&&*]FX!_#Q0DPI0OD7:XF
XMKFK%%[^L9ES:.HCBJ:;NDW7R0L3FH^<K`N^MC_%G@0P7D`NRG;+WFL0`<FMR
XM"L/`5IH,S)\IC9Y":'S].F``95$2*MK$5".WZ:9ZC5V<,"S:OA8^,9*!'$S$
XMRK"YN!AGE`VJ$"$%'`%"@)1E(E\Z)\<:4`?``?5OKVL*"\BY9)0\);>^R?'-
XM>P_GO-P0M_8&2,E4,NTK'7^\U''(FZWNQ8TF>$NZKKA"\!57`?^[E;!Z+&Y^
XMQ_&QARM.HL"&0X4<G!+%YMDZ:0)SE%(FTJ(EE\G-+XIL)3^)TDP9"6U.OS7E
XMH1P=S\@[6XU,Y?K`EN&:F8Q"AVC-%<P$D[^=,AZP!$O!M:T3+"I#P5DP;GL&
XMZ[5>\,#K"5;!:@@:_$20RM+LJMP%J\'*;]6Y28DD]MXL][#JC,U>PD=P4L;1
XMG:B6`X"]=Q\WV'W:1H%NL7PF&\(@[Z)H,&Y@9&G<R_O.>R!BO4>2\)TTU--Y
XM\$HL+).WO/12Q10M>)-FE$:NLB.ID9W+9+#Q^Q2C->QRJLP>N9?4U1KP*;-'
XM'S%V8"_3RNP1K.Q9U,NX\OH+9(@I].V=81'K#F:7`C`L'P$F@?+#*Y,DA.XF
XMQ3#C4&C`PPQ^),>O[Y<<^ZY2$G/#7#$[RY3R7#SI7H!V<6E,]*Y?U3)#+!AC
XMRPY,=,<M1U,Q8_2QK6`:AF39E)#$S#+&?D$S-Y(RDK\L,^<A@:-TYZ9H9`15
XMT-P+$D;L\O@[+XLI[#*_/.`PS<=KP&R4?F3Z\KW<V6AD`+/3;.\<S*]>U2PO
XMRYQF<72'=>JZQ7)R'`"'O5?ILZJ+ALV]<H-,,B_`+>JT&]H6ARQCMSH)L\S0
XM7:\,*-5'?K#8G"*_?2;5%MHWM\W)<1Z,-D>W0A??+`J#S#CP,3GJI9ZV+VF<
XM[\[-C:)`:RW3GO*><Y<MZWG`;^^3-'_!FS#4;!ZTR^?OG`LO1\U?LWZ5+UM(
XM2C->F@M5S5IS1O8Z6TA?,U76!@H!;,(4\"AAG549[MQIJJ[)L3U\.`_`:K-`
XMT#OGSJKKLXS=!KW:K<EL'8=18U0915_95X%!D.`(YVW[KLJLWN*LLFK^0QA!
XMM(XDU]S,=F1LH*#@.^\-CU(IS"B#&HZRE`@I`XJW,_(\OUJ;E#.VN0OCR'LD
XMJ=A'GE=Q,JV:S!:EH/*N@Y3:SH+"%VE_H'B+\G&+)2=\59D!?3V\>`^?5+`6
XMTW@;\UG6!CK0B8OR7.%FMR7SY'P:_\@2<IL<`;^=CB^>W!/+QP\E?0RSVL?D
XMV119`A>?)W"A;$!>T&OD`ZT^\X6-<D@+"[_(!%(#74-GT"$S@68IW\5Y:/>[
XM"N;$FN'Q1.3A!A^!BZG&6)AVU`ZB!!%WL$^X]D;I&,I2K,/-HBI7=`8S&HET
XM4V;#@4$[!6`QQ(KP:7!B]`]-1AO+G+'&W!P/DVDT!?E`Q\6I*1L*.2O`E:X'
XMW?J]O6C@41E&DQYJ-#=Q0XO%F>E'BQ*WR#LT$P=(R]'L`QV-TLK$5N[JV!&&
XM&4MEG_SE(I&++Q6W_9;0!&75F.*&MT&P=&E14@$8I5^;)//'\V9.Q?:I"%%4
XM3G`2-Y"J,)';AZG2<A\9T$K'+C#>(;(<<Z/+\DF5J*W2MG0D(D6YS88FW#ST
XM6L>W)4Y,_#T;/DC>6?R(N'PEB>L=4[Y/90Q9#^V^M&>Q$?PE?UTTMX&[K"TO
XMYI5[4"04_Z7B(RAJL0N&'$7<'9BKQ(C+0]0`(S`=H`VK9VZ<<R806(_7QA20
XM!9A.YO1O7,X"T[<T]_8W3WY;6U(`4`O3Q$(N#0,<R&YT@EPF&=2U=$!-3-?%
XMQC01G>%^T'0S-HWT:M/8!C>-#.D8ZK3`+!+,6#F(E/5,_],1-4*]&PS2O8U'
XM"Y;IT"HQ#_VB#58'=1$EL`71ZATZ"A]S&<IT/XU.MQ0A=4*L2=_/G/1.G5RZ
XM`5RCICS>?H]QK8(93VO##!P;<VSHT_PT[C('G-.89X<`3+\JEM81.5`GMO86
XM+=WW!7=<=8,@JATB7O+PW!:K2V)UPU=6BPL3M85;43O/,"UJ7$U/R-JSY(7#
XM/`'DP^%9>0Y4P>?B.7R29PG)7MU72YZZGU<YP#&?ER=*/5:K"&^U5YU`O[P%
XM-1VP5:,E9K5"C2QW?X@SE7A9LP1FM0:M]C;/>G34U2@.F^0QAO99=]4L=7TF
XM:[3/TF]<2=*NUJ$U3AW.K'=/@!%@!'P!88V02BZD%T_$&C%GO0F1E%"M"R]A
XMF+(J:#DCT9NR$@T56[0,A2&A&,^Y#R>1X6QH1)FLO9PZU9@'5+C&+&Q9V[43
XMS?]\Q'#PB76;E,>QA\_\ZI77=8-V@CK6($8HBJ$^LHIJ1(8P7),$D50!B3N/
XM"UCG?NT@*-09LUJ-#V,S_G5<S4'/U22H/@LZ$!GA]624^_8/J+4?R@>I:F)>
XM9#V-4MBW761]5L,`9W.R+/86S[ZT1C4':MBB=>1,6D/(^J[\=SDCO9`DB@!=
XMN-?L@XY`77P(8R8+DY<.$6/%?P!C*Q&7@SQB$]Y[$?$IXQN(%\?"0P/;]3(#
XM%+PPON78-#:%J5^AD-K-G#5D?P1%]J=B(G)P%39F+2Z@LTG!B*UE_]</WR%B
XM.'O8:;-D"Z-AV1GVEVU@,\\=-(I=/RO$CJ)'>F5[V:"UN-!:,U%D)$R=--J(
XM:':(0V+;UE'<FSU4(]?X,YIY1(?2273X"]ZXV#KV&R%C&P7N-9!=12_:3/:.
XM#4?TV*-%0R(TJYS@S92M-AC9!.@K)PJN!`J7KPRZU9.R-%E0QXW:;D"IO6$+
XMSV1V9[T(K=H^C:M=8N/1#[*:FF*;8I$PG"Q=LM@)[3YC(4@H-[8(<-L1"'00
XM"-#I?@%9@/O"/5VP"T9W4A\,"],1"P-%*]M/`+/M;`\1`&QQMHZFHLW@WL!J
XME]I<MKA=:[];="!,=8@DN@WUN\OYB=KG]@X(:)-_F^T&S68CV&XV1GU:^]%(
XMXA0P;J/;=_88^8[IV=$FG^UOQ]OG'?G9[`;:^K;]3&@7U14G$`P,)]H2B9@B
XM;&<(PR]A=&SOM=6AGK%L-]OV%1.M8+04TK8;0&W[N/:J._%Q;]LB`*A[!WC;
XM'Q`[.F$G:D@`CD`<$,?"<DY5<Q]G&W8;+6"#R=T>S6US.]*9K;/;E:+)DC,B
XMK%.;,!R7QW7V$'<1<JH%`:NXJFQS?9WI&4C`$T!T&`'P2W8#88EK10$RP>WL
XM7NIU=-V#2@==0OT#(!3)Z&,\'5_3T]UPRTT&J-WPE%C9<.S<-_=7G6J3O7?W
XMT'U6'R(3M,?J;M<D&QS>370OW/3VLPLMI\G2<ET=;$+8_';=VW<?9P%W$[(B
XMY]"`;TRM2-,!AO?GYT8N$%]`R;'[]6HS<4"Y24MQ<1FW:1N\R1/W(CCY[CJ4
XMYK%PG+'=G"_0ZB%OPU@QDIIUWV2^S]"].L5H*XJ%K7?GOTDJ\)U+S`$:=BXM
XM@+&[1*&[VTOS#1K*\?UG-\ZX,"'L\2[>27<^NW2_D1R7Z'WSD-Z"ME87>9.A
XMD0(1(#;%-H0!UDE^!PCF=QZ'?J^SBU9ED%;'VL2SF;U^EP'MMQOP?J_9*&OV
XM+:IFF9ON*.$!0MV[-N0M9_<%2T"T&D'!2K^R&$E0FU0)N,/[04T(RO=FO0U^
XMV&9V!#[Q3N"2DL*=`S_.]?9HW6;KVN$WW)M7-VTCQYVW)+U9Z<HR!2ZS*E(`
XMO5!O`G%EV/!]"KM=,3@0D\+]W0$V_;U6$T@Y^`SNQ*6AZ%WU'3!.Q_ZW0!QU
XMZZ<KMGD,#Y9VK[=,"R1+CI?O3BL_"L6!**!\2$ZSS@''=B3GJB"R2R>M#>'!
XMJDR@+!S<'0ZY/7SGG&8XO/5ORX#*=X?-6=??C.Y9,HR@X:0VNLU_5ZY)>'4\
XM$$>(IL0`#GXWW'!VA(VJLDU=MI@74./<[A+?,`=*U,KWF#V'_^!C:")^VTG4
XMM[:#7/CEVWOT&B.%9[EF]X<++!3&]7$['4V'N=.T40UA3]V@=-4]>\;7%]LI
XMG:K8R6UFGTWC!-25MRN,2&O>BYPE'N)@XO/VT[-T!TP#1[^C!\6)!N-Q39"A
XMWJ/BF:A4PU9SMB*N4@O4DS4\7%D_XM/XWPUK3^(#MC>(C=O4^5LP_H$JWLMS
XM_WUBD^"$^)`8>7-MTC@X?@;DX@QH(?U29]Y[]DSMB]_BV3C]G!=ON%BN,KV^
XMC>)V<BD.7$K3F;0R3A9!W`6E>$Q-NFFO>%\K#HNS+,`L_GM_@\%>[[>(V^`+
XM="-.#?)^B1XD'F;/2(&W\TVB"@1\`_K]_P'CU/<@?(0CW>?X_[U]<[@]]3?M
XM@_S4P]W_!TV#N1V%F/MF0U5_`A^*3</BN,7&6B=`Y"(``^$QD`4A=48,E),1
XM(MQ0#B*+`-Q:=L`*R^3.XS=[$SX<I&TAYY3+XAIV4FZ5EV%8N=:XL+D!1#GZ
XM_2=XY?"U0ZYIXA8'W5;N&(L`Z#>E@);SM5?YYHA;S&1N>1(*E\\@J,)<#FXL
XMY?3#6%Z6SR#`F%_NE0#F*%I>#F_NY63`L>67U^(FN44^C</CA_3KEDCWXA0Y
XM1[X4H.1%N$J^WA'C5(`QWN[X$]>SD&B0#T<0]P]\:+?>Q-25'9EWY--XN?V:
XM;^;9N/+M<_O@W3A).YO+`9RY!^XX)]Y'-_;=DBOA!7B<K3V[YA4Y;.Z.4^:7
XM-_M,<+_/[W9F?I+GX^*X$21.\]1U65*>QXYYFOG"HJ<-Y*AX0<X#FYF%MA0^
XM$9:MB/:F#%7GWKLJ^S?O/.8<T!NP*UK:6"=M,Y_WKKFT#+"-7^!E-J-KGZ=.
X2O6LF_C;GT9RX:;T.&N)V<_L!
X`
Xend
END_OF_FILE
if test 32728 -ne `wc -c <'print11.c.Z.uue'`; then
    echo shar: \"'print11.c.Z.uue'\" unpacked with wrong size!
fi
# end of 'print11.c.Z.uue'
fi
if test -f 'scope.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'scope.c'\"
else
echo shar: Extracting \"'scope.c'\" \(14921 characters\)
sed "s/^X//" >'scope.c' <<'END_OF_FILE'
X/* ******************************************************
X *						      	*
X *  A spy program to reveal X11  traffic	    	*
X *						      	*
X *	James Peterson, 1988	       			*
X *	(c) Copyright MCC, 1988 			*
X *							*
X ***************************************************** */
X
X#include "scope.h"
X
X
X/* ********************************************** */
X/*                                                */
X/* ********************************************** */
X
X#define DefaultPort 6000
X
Xchar    ServerHostName[255];
Xlong    ServerBasePort = DefaultPort;
Xlong    ServerInPort = 1;
Xlong    ServerOutPort = 0;
Xlong    ServerDisplay = 0;
X
X
X/* ********************************************** */
X/*                                                */
X/*                                                */
X/* ********************************************** */
X
Xshort     GetServerport ()
X{
X  short     port;
X
X  enterprocedure("GetServerport");
X
X  port = ServerBasePort + ServerOutPort + ServerDisplay;
X  debug(4,(stderr, "Server service is on port %d\n", port));
X  return(port);
X}
X
Xshort     GetScopePort ()
X{
X  short     port;
X
X  enterprocedure("GetScopePort");
X
X  port = ServerBasePort + ServerInPort + ServerDisplay;
X  debug(4,(stderr, "scope service is on port %d\n", port));
X  return(port);
X}
X
X/* ********************************************** */
X/*                                                */
X/* ********************************************** */
X
XUsage()
X{
X  fprintf(stderr, "Usage: xscope\n");
X  fprintf(stderr, "              [-h<server-host>]\n");
X  fprintf(stderr, "              [-i<in-port>]\n");
X  fprintf(stderr, "              [-o<out-port>]\n");
X  fprintf(stderr, "              [-d<display-number>]\n");
X  fprintf(stderr, "              [-v<n>]  -- verbose output\n");
X  fprintf(stderr, "              [-q]  -- quiet output\n");
X  fprintf(stderr, "              [-D<debug-level>]\n");
X  exit(1);
X}
X
X
Xchar *OfficialName()  /* forward type declaration */;
X
XScanArgs(argc, argv)
X     int     argc;
X     char  **argv;
X{
X  Verbose = 1 /* default verbose-ness level */;
X
X  /* Scan argument list */
X  while (--argc > 0)
X    {
X      ++argv;
X      if (**argv == '-')
X	switch (*++*argv)
X	  {
X	    /*
X	      debug levels:
X	      	2 - trace each procedure entry
X	      	4 - I/O, connections
X	      	8 - Scope internals
X	      	16 - Message protocol
X		32 - 64 - malloc
X		128 - 256 - really low level
X	    */
X	  case 'D':
X	    debuglevel = atoi(++*argv);
X	    if (debuglevel == 0)
X	      debuglevel = 255;
X	    debuglevel |= 1;
X	    Verbose = 7;
X	    debug(1,(stderr, "debuglevel = %d\n", debuglevel));
X	    break;
X
X	  case 'q': /* quiet mode */
X	    Verbose = 0;
X	    debug(1,(stderr, "Verbose = %d\n", Verbose));
X	    break;
X
X	  case 'v': /* verbose mode */
X	    Verbose = atoi(++*argv);
X	    debug(1,(stderr, "Verbose = %d\n", Verbose));
X	    break;
X
X	  case 'o':
X	    ServerOutPort = atoi(++*argv);
X	    if (ServerOutPort <= 0)
X	      ServerOutPort = 0;
X	    debug(1,(stderr, "ServerOutPort = %d\n", ServerOutPort));
X	    break;
X
X	  case 'd':
X	    ServerDisplay = atoi(++*argv);
X	    if (ServerDisplay <= 0)
X	      ServerDisplay = 0;
X	    debug(1,(stderr, "ServerDisplay=%d\n", ServerDisplay));
X	    break;
X
X	  case 'i':
X	    ServerInPort = atoi(++*argv);
X	    if (ServerInPort <= 0)
X	      ServerInPort = 0;
X	    debug(1,(stderr, "ServerInPort = %d\n", ServerInPort));
X	    break;
X
X	  case 'h':
X	    if (++*argv != NULL && **argv != '\0')
X	      strcpy(ServerHostName, OfficialName(*argv));
X	    debug(1,(stderr, "ServerHostName=%s\n", ServerHostName));
X	    break;
X
X	  default:
X	    fprintf(stderr, "Unknown option %c\n", **argv);
X	    Usage();
X	    break;
X
X	  }
X      else
X	{
X	  /* file argument to scope -- error */
X	  Usage();
X	}
X    }
X
X  /* check for different port numbers or different machines */
X  if (ServerInPort == ServerOutPort)
X    if (ServerHostName[0] == '\0')
X      {
X	fprintf(stderr, "Can't have xscope on same port as server (%d)\n",
X		ServerInPort);
X	Usage();
X      }
X
X}
X
X
X/* ********************************************** */
X/*                                                */
X/* ********************************************** */
X
Xmain(argc, argv)
X     int     argc;
X     char  **argv;
X{
X  ScanArgs(argc, argv);
X  InitializeFD();
X  InitializeX11();
X  SetUpStdin();
X  SetUpConnectionSocket(GetScopePort());
X  SetSignalHandling();
X
X  MainLoop();
X}
X
XTimerExpired()
X{
X  debug(16,(stderr, "Timer tick\n"));
X}
X
X/* ********************************************** */
X/*                                                */
X/* ********************************************** */
X
X/*
X  here is where we would add code to allow control from
X  the keyboard.  We would want to read a command and
X  interpret it.  Possibilties:
X
X  (a) verbose level setting
X  (b) reset time
X  (c) save X requests to a file.
X  (d) replay X requests from a file.
X  (e) allow fake events, errors to be generated.
X*/
X
XReadStdin(fd)
X     FD fd;
X{
X  char    buf[2048];
X  long    n;
X
X  enterprocedure("ReadStdin");
X  n = read(fd, buf, 2048);
X  debug(4,(stderr, "read %d bytes from stdin\n", n));
X}
X
XSetUpStdin()
X{
X  enterprocedure("SetUpStdin");
X  UsingFD(fileno(stdin), ReadStdin);
X}
X
X/* ************************************************************ */
X/*								*/
X/*								*/
X/* ************************************************************ */
X
X/*
X  xscope is really meant to look at one client at a time.  However,
X  it can easily handle multiple clients and servers.  To do so,
X  we need to have a pair of FDs: one for the client and one for the
X  server for that client.  If either goes away, so does the other.
X  We need to be able to identify the other FD of a pair, so that if
X  we get input from one, we can write it to the other.
X*/
X
Xstruct fdinfo
X{
X  Boolean Server;
X  long    ClientNumber;
X  FD pair;
X};
X
Xstatic long ClientNumber = 0;
Xstruct fdinfo   FDinfo[StaticMaxFD];
X
XSetUpPair(client, server)
X     FD client;
X     FD server;
X{
X  if (client >= 0)
X    {
X      ClientNumber += 1;
X      FDinfo[client].Server = false;
X      FDinfo[client].pair = server;
X      FDinfo[client].ClientNumber = ClientNumber;
X      if (server >= 0)
X	{
X	  FDinfo[server].Server = true;
X	  FDinfo[server].pair = client;
X	  FDinfo[server].ClientNumber = FDinfo[client].ClientNumber;
X	}
X    }
X  else if (server >= 0)
X      {
X	close(server);
X	NotUsingFD(server);
X      }
X}
X
X
XCloseConnection(fd)
X     FD fd;
X{
X  debug(4,(stderr, "close %d and %d\n", fd, FDPair(fd)));
X  StopClientConnection(ServerHalf(fd));
X  StopServerConnection(ClientHalf(fd));
X
X  close(fd);
X  NotUsingFD(fd);
X  close(FDPair(fd));
X  NotUsingFD(FDPair(fd));
X}
X
X/* ************************************************************ */
X
XFD FDPair(fd)
X     FD fd;
X{
X  return(FDinfo[fd].pair);
X}
X
XFD ClientHalf(fd)
X     FD fd;
X{
X  if (FDinfo[fd].Server)
X    return(FDinfo[fd].pair);
X  return(fd);
X}
X
XFD ServerHalf(fd)
X     FD fd;
X{
X  if (FDinfo[fd].Server)
X    return(fd);
X  return(FDinfo[fd].pair);
X}
X
Xchar   *ClientName (fd)
X     FD fd;
X{
X  static char name[12];
X
X  if (ClientNumber <= 1)
X    return("");
X  sprintf(name, " %d", FDinfo[fd].ClientNumber);
X  return(name);
X}
X
X
X/* ********************************************** */
X/*                                                */
X/* ********************************************** */
X
X/* when we get data from a client, we read it in, copy it to the
X   server for this client, then dump it to the client. Note, we don't
X   have to have a server, if there isn't one. */
X
XDataFromClient(fd)
X     FD fd;
X{
X  unsigned char    buf[2048];
X  long    n;
X  FD ServerFD;
X
X  enterprocedure("DataFromClient");
X  n = read(fd, (char *)buf, 2048);
X  debug(4,(stderr, "read %d bytes from Client%s\n", n, ClientName(fd)));
X  if (n < 0)
X    {
X      PrintTime();
X      perror("Client --> read error:");
X      CloseConnection(fd);
X      return;
X    }
X  if (n == 0)
X    {
X      PrintTime();
X      fprintf(stdout, "Client%s --> EOF\n", ClientName(fd));
X      CloseConnection(fd);
X      return;
X    }
X
X  ServerFD = FDPair(fd);
X  if (ServerFD < 0)
X    {
X      ServerFD = ConnectToServer(false);
X      SetUpPair(fd, ServerFD);
X    }
X
X  /* write bytes from client to server, allow for server to fail */
X  if (ServerFD >= 0)
X    {
X      long    BytesToWrite = n;
X      unsigned char   *p = buf;
X
X      while (BytesToWrite > 0)
X	{
X	  int     n1 = write (ServerFD, (char *)p, (int)BytesToWrite);
X	  debug(4,(stderr, "write %d bytes to Server%s\n", n1, ClientName(fd)));
X	  if (n1 > 0)
X	    {
X	      BytesToWrite -= n1;
X	      p += n1;
X	    }
X	  else
X	    {
X			    perror("Error on write to Server");
X	      CloseConnection(fd);
X	      BytesToWrite = 0;
X	    }
X	}
X    }
X
X  /* also report the bytes to standard out */
X  ReportFromClient(fd, buf, n);
X}
X
X/* ********************************************** */
X/*                                                */
X/* ********************************************** */
X
X/* similar situation for the server, but note that if there is no client,
X   we close the connection down -- don't need a server with no client. */
X
XDataFromServer(fd)
X     FD fd;
X{
X  unsigned char    buf[2048];
X  long    n;
X  FD ClientFD;
X
X  enterprocedure("DataFromServer");
X  n = read(fd, (char *)buf, 2048);
X  debug(4,(stderr, "read %d bytes from Server%s\n", n, ClientName(fd)));
X  if (n < 0)
X    {
X      PrintTime();
X      perror("read error <- Server");
X      CloseConnection(fd);
X      return;
X    }
X  if (n == 0)
X    {
X      PrintTime();
X      fprintf(stdout, "EOF <-- Server%s\n", ClientName(fd));
X      CloseConnection(fd);
X      return;
X    }
X
X  ClientFD = FDPair(fd);
X  if (ClientFD < 0)
X    {
X      CloseConnection(fd);
X      return;
X    }
X
X  /* write bytes from server to client, allow for client to fail */
X  {
X    long    BytesToWrite = n;
X    unsigned char   *p = buf;
X    while (BytesToWrite > 0)
X      {
X	int     n1 = write (ClientFD, (char *)p, (int)BytesToWrite);
X	debug(4,(stderr, "write %d bytes to Client%s\n", n1, ClientName(fd)));
X	if (n1 > 0)
X	  {
X	    BytesToWrite -= n1;
X	    p += n1;
X	  }
X	else
X	  {
X			perror("Error on write to Client");
X	    CloseConnection(fd);
X	    BytesToWrite = 0;
X	  }
X      }
X  }
X
X  /* also report the bytes to standard out */
X  ReportFromServer(fd, buf, n);
X}
X
X
X
X/* ************************************************************ */
X/*								*/
X/*     Create New Connection to a client program and to Server  */
X/*								*/
X/* ************************************************************ */
X
X#include <sys/types.h>	       /* needed by sys/socket.h and netinet/in.h */
X#include <sys/uio.h>	       /* for struct iovec, used by socket.h */
X#include <sys/socket.h>	       /* for AF_INET, SOCK_STREAM, ... */
X#include <sys/ioctl.h>	       /* for FIONCLEX, FIONBIO, ... */
X#include <netinet/in.h>	       /* struct sockaddr_in */
X#include <netdb.h>	       /* struct servent * and struct hostent * */
X#include <errno.h>	       /* for EINTR, EADDRINUSE, ... */
Xextern int  errno;
X
Xstatic int  ON = 1 /* used in ioctl */ ;
X
XNewConnection(fd)
X     FD fd;
X{
X  FD ServerFD = -1;
X  FD ClientFD = -1;
X
X  ClientFD = ConnectToClient(fd);
X  ServerFD = ConnectToServer(true);
X  SetUpPair(ClientFD, ServerFD);
X}
X
X
X/* ************************************************************ */
X
XFD ConnectToClient(ConnectionSocket)
X     FD ConnectionSocket;
X{
X  FD ClientFD;
X  struct sockaddr_in  from;
X  int    len = sizeof (from);
X
X  enterprocedure("ConnectToClient");
X
X  ClientFD = accept(ConnectionSocket, (struct sockaddr *)&from, &len);
X  debug(4,(stderr, "Connect To Client: FD %d\n", ClientFD));
X  if (ClientFD < 0 && errno == EWOULDBLOCK)
X    {
X      debug(4,(stderr, "Almost blocked accepting FD %d\n", ClientFD));
X      panic("Can't connect to Client");
X    }
X  if (ClientFD < 0)
X    {
X      debug(4,(stderr, "NewConnection: error %d\n", errno));
X      panic("Can't connect to Client");
X    }
X
X  UsingFD(ClientFD, DataFromClient);
X  ioctl(ClientFD, FIOCLEX, 0);
X  ioctl(ClientFD, FIONBIO, &ON);
X  StartClientConnection(ClientFD);
X  return(ClientFD);
X}
X
X
X
X/* ************************************************************ */
X/*								*/
X/*								*/
X/* ************************************************************ */
X
X
X
XFD ConnectToServer(report)
X     Boolean report;
X{
X  FD ServerFD;
X  struct sockaddr_in  sin;
X  struct hostent *hp;
X
X  enterprocedure("ConnectToServer");
X
X  /* establish a socket to the name server for this host */
X  bzero((char *)&sin, sizeof(sin));
X  ServerFD = socket(AF_INET, SOCK_STREAM, 0);
X  if (ServerFD < 0)
X    {
X      perror("socket() to Server failed");
X      debug(1,(stderr, "socket failed\n"));
X      panic("Can't open connection to Server");
X    }
X  (void) setsockopt(ServerFD, SOL_SOCKET, SO_REUSEADDR,  (char *) NULL, 0);
X  (void) setsockopt(ServerFD, SOL_SOCKET, SO_USELOOPBACK,(char *) NULL, 0);
X  (void) setsockopt(ServerFD, SOL_SOCKET, SO_DONTLINGER, (char *) NULL, 0);
X
X  /* determine the host machine for this process */
X  if (ServerHostName[0] == '\0')
X    (void) gethostname(ServerHostName, sizeof (ServerHostName));
X  debug(4,(stderr, "try to connect on %s\n", ServerHostName));
X
X  hp = gethostbyname(ServerHostName);
X  if (hp == 0)
X    {
X      perror("gethostbyname failed");
X      debug(1,(stderr, "gethostbyname failed for %s\n", ServerHostName));
X      panic("Can't open connection to Server");
X    }
X
X  sin.sin_family = AF_INET;
X  bcopy((char *)hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
X  sin.sin_port = GetServerport();
X
X  if ((sin.sin_port == ScopePort) 
X      && strcmp(ServerHostName, ScopeHost) == 0)
X    {
X      char error_message[100];
X      sprintf(error_message, "Trying to attach to myself: %s,%d\n",
X	      ServerHostName, sin.sin_port);
X      panic(error_message);
X    }
X
X  /* ******************************************************** */
X  /* try to connect to Server */
X
X  if (connect(ServerFD, (struct sockaddr *)&sin, sizeof(sin)) < 0)
X    {
X      debug(4,(stderr, "connect returns errno of %d\n", errno));
X      if (errno != 0)
X	if (report)
X	  perror("connect");
X      switch (errno)
X	{
X	case ECONNREFUSED:
X	  /* experience says this is because there is no Server
X	     to connect to */
X	  close(ServerFD);
X	  debug(1,(stderr, "No Server\n"));
X	  if (report)
X	    warn("Can't open connection to Server");
X	  return(-1);
X
X	default:
X	  close(ServerFD);
X	  panic("Can't open connection to Server");
X	}
X    }
X
X  debug(4,(stderr, "Connect To Server: FD %d\n", ServerFD));
X  if (ServerFD >= 0)
X    {
X      UsingFD(ServerFD, DataFromServer);
X      StartServerConnection(ServerFD);
X    }
X  return(ServerFD);
X}
X
X
X/* ********************************************** */
X/*                                                */
X/* ********************************************** */
X
Xchar *OfficialName(name)
Xchar *name;
X{
X  struct hostent *HostEntry;
X
X  HostEntry = gethostbyname(name);
X  if (HostEntry == NULL)
X    {
X      perror("gethostbyname");
X      exit(-1);
X    }
X  debug(4,(stderr, "Official name of %s is %s\n", name, HostEntry->h_name));
X  return(HostEntry->h_name);
X}
X
END_OF_FILE
if test 14921 -ne `wc -c <'scope.c'`; then
    echo shar: \"'scope.c'\" unpacked with wrong size!
fi
# end of 'scope.c'
fi
if test -f 'xscope.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xscope.1'\"
else
echo shar: Extracting \"'xscope.1'\" \(3140 characters\)
sed "s/^X//" >'xscope.1' <<'END_OF_FILE'
X.TH XSCOPE 1 "8 Sept 1988" "X Version 11"
X.SH NAME
Xxscope - X Window Protocol Viewer
X.SH SYNOPSIS
X.B xscope
X[ option ] ...
X.SH DESCRIPTION
X.I Xscope
Xsits in-between an X11 client and an X11 server and prints the contents
Xof each request, reply, error, or event that is communicated between them.
XThis information can be useful in debugging and performance
Xtuning of X11 servers and clients.
X.PP
XTo operate, \fIxscope\fP must know the host, port, and display to use
Xto connect to the X11 server.  In addition, it must know the port on
Xwhich it should listen for X11 clients.  Two cases are common:
X.PP
X.TP 5
X(1) The X11 server is on the same host as \fIxscope\fP.
XIn this case, the input port for \fIxscope\fP should be selected as an
XX11 server on a different display, and the client DISPLAY argument
Xadjusted to select \fIxscope\fP .  For example, if the X11 server is
Xon port 6000, display 1, then \fIxscope\fP can use port 6002 as its
Xinput port.  The client can use display 1 for direct access to X11 or
Xdisplay 2 for access to \fIxscope\fP.
X.PP
X.TP 5
X(2) The X11 server is on a different host than \fIxscope\fP.
XIn this case the same input and output ports can be used, and the host
Xcomponent of the DISPLAY is used to select \fIxscope\fP or X11.
X.SH ARGUMENTS
X.PP
X.TP 10
X.B \-i<input-port>
XSpecify the port that \fIxscope\fP will use to take requests from clients
X(defaults to 1).
XFor X11, this port is automatically biased by 6000.
X.PP
X.TP 10
X.B \-o<output-port>
XDetermines the port that 
X\fIxscope\fP will use to connect to X11 (defaults to 0). 
XFor X11, this port is automatically biased by 6000.
X.PP
X.TP 10
X.B \-h<host>
XDetermines the host that  \fIxscope\fP will use to find its X11 server.
X.PP
X.TP 10
X.B \-d<display>
XDefines the display number.  The display number is added to the input
Xand output port to give the actual ports which are used by  \fIxscope\fP.
X.PP
X.TP 10
X.B \-q
XQuiet output mode.  Gives only the names of requests, replies, errors, and 
Xevents, but does not indicate contents.
X.PP
X.TP 10
X.B \-v<print-level>
XDetermines the level of printing which \fIxscope\fP will provide.  The
Xprint-level can be 0 (same as quiet mode), 1, 2, 3, 4.  The larger
Xnumbers give more and more output.  For example, a successful setup
Xreturns a string which is the name of the vendor of the X11 server.
XAt level 1, the explicit field giving the length of the string is
Xsuppressed since it can be inferred from the string.  At level 2 and
Xabove the length is explicitly printed.
X.SH EXAMPLES
X.LP
Xxscope -v4 -hcleo -d0 -o0 -i1
X.PP
XThis command would have xscope communicate with an X11 server on host
X``cleo'', display 0;  xscope itself would be available on the current
Xhost as display 1 (display of 0 plus the 1 of -i1). Verbose level 4.
X.LP
Xxscope -q -d1 -o1 -o3
X.PP
XThe X11 server for the current host, display 2 (1 for -d1 plus 1 for -o1)
Xwould be used by xscope which would run as display 4 (1 for -d1 plus 3 for
X-o3). Quite mode (verbose level 0).
X.SH SEE ALSO
XX(1), X11 Protocol document (doc/Protocol/X11.protocol)
X.SH AUTHOR
X.PP
XJames L. Peterson (MCC)
X.PP
XCopyright 1988, MCC
X.SH BUGS
XCode has only been tested on Sun3's.
END_OF_FILE
if test 3140 -ne `wc -c <'xscope.1'`; then
    echo shar: \"'xscope.1'\" unpacked with wrong size!
fi
# end of 'xscope.1'
fi
echo shar: End of archive 2 \(of 4\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 4 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330
Moderator of comp.sources.x