v02i023: monitor X11 Server/Client communications, Part02/04

Mike Wexler mikew at wyse.wyse.com
Tue Nov 29 04:20:53 AEST 1988


Submitted-by: peterson at 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 at 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+ at 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 at 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 at H!$
XM&6$0QI1Q;I at D$AUI&$6>?2"8U]%'=+Q at 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 at 826VX$@@Q.@?"G_7=%ZV#,HBTX6R$,;?C at V:\P08;;]Q!;+<WS?<C
XM&LFB`0(9;QSEQAMDX7836>:Q`6(:,N8Q6QUNE`F'3'341U9XC#89VPCH?FLO
XM2PB3 at 4(8+(C!PA at LD,%"&5NE at 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 at 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 at 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 at P`1<VX(-NG"Z]VU/?EP3"0[$!X+[Y6]__2,#``TCP#,04#ID`%$8
XM$'B?*BVP at 0^,(`XH*+SM38%!.<%!#)^VA1C(H`LB>8IAPI"AL:5!#_MR2 at OD
XMYJ+$L$%'!ZP at 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 at 2!K,U'DTQ at 9M@969'+:.QGQ,F at EV+73
XM,+T$P321:4@$IC)DA6E<#+0).3I(SG#PPV#KIN5.#^JO"#'PWPA%4,(3(L<\
XM07+*X6S#NSD at 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 at .+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 at -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 at C2X(HK3=5"Q7PU;2QX#2/>
XM]LBAO.<-UAS6 at -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- at 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 at 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 at 5O=Y(DDI!3]W/>E56KK8P\YV/T]=`55/EMJ!7 at 0H
XM,"$+;_]ZW.<>]I'[/0MWSXS-<8[SE\]<YC&ON<P8WWA<">0E,9F)WH at 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 at A/AXIO1Q.+TAN$E+U/]_:.%U/9__&WIUU
XM9WL!&'A2P'NC`G^%$7S#]S'X!`*"]3C)9U at 0!C$MQGTQ=A@<X1'45QA at 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 at 8M']H;.R(O=!6/`>!\@(H^'
XM4XR[.&U^2(N`2%HRB(T'>8/2V#S4N(@]B)'0-`0CTA1RX(U0 at WKBB']NM7^:
XM"'M0J(Y3*(6 at 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)+ at 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 at 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 at 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 at 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 at 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 at 1W\J[AV*?CZ:0,&Y=2&I/J
XM&8H&"+)FXJ\ORJCX.;#-.I at 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 at 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 at 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 at HX8'G,$;++23\F(?K#LI+,(</)&CA"!F<&U"
XM4`54('!3L`31AW9L.KPB at 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 at 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, at 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 at C,T at KA0B7MM)
XMDM6\J:R.2X9JW(F at 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+ at 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<. at BX&P*!]1%@`<#$R`]OY98K.)R3^P#->IV/]4R[OBE at N/)
XMZO?6*Y1:G_)<O_*^_?7++ at +FDH5SC=:5W>,179R&P>T]WI_?:BYDX!NE6L*R
XM+P*_04ACH=!HG1@``_-Q>P3:"0?L, at 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_ at OYH$W!^BQG)VI0C]O2P.B/??S
XM;M)`K&`U="`/L+WH]_-`%/4S at 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+ at 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 at M]*%7J(%@$=G
XMYV(^XVH3C3#A*!I#I5@&E"$?=`JJT3P\1=(C$JL at WQ)ZLM$N;L/::*C<0'XL
XM`_M1Z?5%WA at 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 at 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 at Z
XMQ+B4FX at 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 at SI,+'@2
XM.>A57(0KT8B>@?;I%]^G5XR?,S`X at 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 at UQ"*6"A(?0ZYZ*Y+*2$DA%&TC(P2<O%X8 at .
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 at 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 at .: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. at 7:Z1U]IXNOSJG"(O8DCX#[LX-4(`O<F at 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 at 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 at 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 at K;#5MYFT$%+<TWJ2L2\68C8 at M*YFP-X+G;$
XM09`6[QI<*'IY:VVT-;J`%^EB6U#S:0TOTT6\3O?;?M>;%5[)[<F]NNA6Y6K5
XM9LER at 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 at U1>3%E_&W\J9*_(@;S4/:S;5&<_G2V_U;:&]C1S3!<3?Z
XM2 at 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 at 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 at 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 at 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 at 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 at 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 at T]=,Q5V
XM_:/#=+'TMF2:0)EI8(VFB?6:5L at F@3ICU9+).0DWXY8B_)HVV.LS8(:K->;>
XM':UD#K2`,&`&:!S>AD)^[7O':^0 at 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 at 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 at 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 at 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;- at R`'0
XMV;BM-?<TW-E3)*ARQ!DSXU;1L`\7M*\&=)-]T\D`%?/:,]D0V^`2WJ(+54__
XMZ1'=50MH6-W, at _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 at 2_@B0?&
XM86\IO+I412'93MMMGK.Y$>6!#%S(D!OKEF-E)L$[H at 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 at 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- at 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 at U%)E0"?Y]*>CU
XM1\]\3;:G+@/&GE\H:C&OUT4UGLGT=`^1<WJRW=!S:K1']M0^KNOX34OJ$7B%
XMA]L7/L at S87<>I"D.5[_U'SV^V'D\7^F8 at 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 at 0G?D[R&!-+'F[Y+<WE.=. at 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 at 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 at 3]7Q:>3R8%B
XMGA=8_E%XYY^%-P;6:D6;&;CA"6G(6BJV^'ERJ8_\U1=497, at TY>">7=/GUA6
XMSD5]A0HDV`?R@"949Q2%Y#3^CFO3X<!_XE;8AZ"-??;=/(??G7U<',O7&2%/
XM>DV5PY<Q2_ at -ET.1(3)OSC<%=FT['MF>I(:L/KG at C@1V`8.'VQE2PN!^ZDX;
XMEJH$?,=/4F#<L`\$(!S(XCF#LHU30`%6 at 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 at _?<.EDASP'T!\T%M
XMSUJ)!!UD,/&@)_C?1!]BH=@5>Y!=;.$8P-E`$TDA3U at 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 at ..(7`'E`1PP!^*$[A)J"$G,@:(:
XM#1#QX8&GFB*W"+F&JN$F"!4FAHO='UCJ^7CH'SIX"A*!AR`*T-FI at 9\=E#(G
XM-3)AH5R8%FZ&Q=%9.!8:4#=?-E64M(43F2]X'<J%Q2")\@H52V(A1M;C:&3-
XM80L at 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 at P6:_-3NI8&)X-*6!+IR=`"*B!\*
XMB'KAVL5;]850WU^("2*$2:*+N"3"B`QAR`<A2H at 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 at H@5$H=;81C!(<8M@:*9T23J84B330/>)7%2
XM7SVV"$6*D<CG%QF.B1I at F9@*EGVG6)K8"FJ&"EQZAD8T%ZN-XN.(/`$5DQN0
XMEW!)3MI>R)5):62(VP4KK at 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 at 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 at H_(LA
XM8Q`62WV*T8K8)RI&A&<:"K!SR1:T!6XQ`Z@`NP4KN`8>1P3-S<0\?`X`Q\6"
XM7D@(T(&*95+ at 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 at UTB$*$#7N"Z*<=*!V- at V/@$?EI/A0FQO)X;T.&>L`::"WF`2
XM/APV at +DAF?U0_T;#:#F^=*D3F?`1M!MK'/IX)9`1:P#'8?A\'%P!VT at V/@$-
XMC>!X$X0++J$"@)81*VE)K(+9/8$\XY16,692!V2LTO at 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?- at AJF+%(Y583.V at 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 at 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 at H0@<*H at 8G:KG
XMSBUGT:+S%IVI?!X>((G--4`S!A1A%+!^- at OD"*S1:=J90W$=##6F64BH0T80
XMC-FYV+_U:2AA9`0B:&82'$@P2X:1)%L11[H=<5$BTC at E+D+$Y`<),$*-8E$>
XM.376%-2CM%BL26>8X1\YO66$X,WDB!S@:9AC8L:GD83 at Q@9'=$@!)Z$/]45L
XM%1!E/!D@(GE!B&]0&X0+#"2N.)KED at W'+!E2H@$CY8L`X\F.V!X*A/?I at 012
XM/SD'K)0M)0 at 9^"F3@]_`6$+.;4'B4P5#1I,TY#3Y*,96V.2VT5':D>R$-XEA
XM*!0!!+ at H'6 at 1Y*1A84YJCCQ$. at 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 at 15`$
XM>80C8<!);(?E7`E2)I8M)3/1/SB60`UB*5(NEM=$8TG+48*W9%XA5P"-TEP4
XMXEIT&>%DAX&G312P0O at 6$@)O?25360J"BE)C4)F^:(1SF=6(6\P63L:P5E0:
XM:_F=*P@=AHW^X[X#0#(;9Z/<^&6-DL3&VC at 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 at H;6.)3C)!H042*8$R4/D;"I<2#!
XM17E%KH\;Y6,19Q:0 at 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 at 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 at 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(. at 9-=8U5&11J`1C"T"[5(.. at 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 at JZK/F=
XM)J?]*1>2CBAGWUERSHSO(4D*!*6<4,ARM(R^H"[2*5,>XJ.&"(U4BXB%W>%P
XM at 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 at 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+ at J1&B#8:;H0CH9^7BE&
XM*HS::K!IP#&;$H8_(?.G,FZ;3R7L^7;BD'N:$"IE#*+%Z4=ZDKZE at B=+2L at 4
XMGG4I3-J)IHNAZ!LW,U&GCX5UZHB4ID7#&7"X;*=&W&::25&H98"%FB at 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 at 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- at 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 at 2JSCJK%CNUJI^JH):$]:.1.K3"<;VJ&@&L3J at 9PMPB.#RM$ZN6&K@&"QV"
XMJ'8#-*29ZFB:M1ZN(E376GZ>K-9JR at J'.IR9C,"AJ]D\XUH[:C\\B\):XB!-
XMJJ!FJ[)V_>4'K,*C5$"@KH)KXEIL=0IL at J!A)/26X(*X0"ZL/KQ!8D"W9`AO
XMQ)W&`J05S$*OL23\"'J(U2`3%`:^@8\`;!2&O(%T at +JV5BX">0`LX)>/Z*L@
XM'0!C%463$!10`<J!H)&X!@M)PKQ`%C`+TFL;0+W6+04$]AJ^&0 at MDW*`'?@3
XM\4'JZF"LKMTKX at I:\@0OE?>R%(P624B0$/`@*7?`'*`#!#PSP;AF*@@!N$:G
XM"'X8L%4"%I`%\)QCPF^05 at 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 at 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 at MC"!5&K6I['DU at -5K(Z&F
XMJ:X!D='4>F5/@74453X57Q6AX*R[B462LPEK9=I%QBHZQ.;)6TFLA2NE*M at B
XMD&M!QAJ:-J[.:CPK$)2F at 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 at 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 at 7K>[9F?;FGZVA>#Z:5O*9;@E#[J=";+BQF^)KKE5<T9W
XM^UJ0M at 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 at 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 at 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 at 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 at 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 at 2%+$CZ5Y*P1FQC,3,JK^G;R at L$\S#>>$U,>16 at J]P
XMIA at +4[\BL1Q`$O/#BMW3N`-'C3TP]_OX0I7?;S"\?@[#1D4Q'&8<PWRLYEO>
XM,L/%'1'L7"1%&2V=YPT+J3Y-4 at P&+V at XYN[`?"J>G:^@.J at 1JM+I]V8$@\-Q
XM2[(K$[C#KNBMV(`R83EG$R/HVL'2UU1 at 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 at ZP[@*3GC'39!SSOZVO:`RJ!L1B:QR:&_-/[`Y at 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 at 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 at 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 at 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 at 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 at +"[_(!%(#74-GT"$S at 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 at 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 at 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, at 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 at SE7A9LP1FM0:M]C;/>G34U2 at .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 at 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 at XY`77P(8R8+DY<.$6/%?P!C*Q&7 at SQB$]Y[$?$IXQN(%\?"0P/;]3(#
XM%+PPON78-#:%J5^AD-K-G#5D?P1%]J=B(G)P%39F+2Z at 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 at S92M-AC9!. at K)PJN!`J7KPRZU9.R-%E0QXW:;D"IO6$+
XMSV1V9[T(K=H^C:M=8N/1#[*:FF*;8I$PG"Q=LM@)[3YC(4 at H-[8(<-L1"'00
XM"-#I?@%9@/O"/5VP"T9W4A\,"],1"P-%*]M/`+/M;`\1`&QQMHZFHLW at WL!J
XME]I<MKA=:[];="!,=8 at DN@WUN\OYB=KG]@X(:)-_F^T&S68CV&XV1GU:^]%(
XMXA0P;J/;=_88^8[IV=$FG^UOQ]OG'?G9[`;:^K;]3&@7U14G$`P,)]H2B9 at 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 at QDIIUWV2^S]"].L5H*XJ%K7?GOTDJ\)U+S`$:=BXM
XM at +&[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 at 0D\+]W0$V_;U6$T at Y^`SNQ*6AZ%WU'3!.Q_ZW0!QU
XMZZ<KMGD,#Y9VK[=,"R1+CI?O3BL_"L6!**!\2$ZSS@''=B3GJB"R2R>M#>'!
XMJDR at +!S<'0ZY/7SGG&8XO/5ORX#*=X?-6=??C.Y9,HR at X:0VNLU_5ZY)>'4\
XM$$>(IL0`#GXWW'!VA(VJLDU=MI at 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 at O4DS4\7%D_XM/XWPUK3^(#MC>(C=O4^5LP_H$JWLMS
XM_WUBD^"$^)`8>7-MTC at X?@;DX at 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 at _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 at 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



More information about the Comp.sources.x mailing list