From: cgf AT bbc DOT com (Christopher Faylor) Subject: Environ patch 7 Feb 1998 18:55:22 -0800 Message-ID: Reply-To: cygwin32-developers AT cygnus DOT com To: cygwin32-developers AT cygnus DOT com Highlights: - Moves all environment manipulation into environ.cc. - Switches to CYGWIN32 for settings: set CYGWIN32=[no]title [no]strip_title [no]binmode [no]glob strace=mask:cache,file [no]tty (set STRACE=whatever is still honored) - Propagates tty settings to all subprocesses regardless of unsetting of environment variable. - Moves strace mask into pinfo structure for easier future manipulation by external program. Moves strace_file into the vacated position for automatic use in forked processes. - Propagates old title to execed processes so that they can correctly restore the correct title when they exit. cgf patch from cgf AT bbc DOT com (Christopher Faylor) * console.cc: Use PID_USETTY setting in process_state so that tty state can be easily inherited. (set_console_title): New function to set console title. * syscalls.cc: Use PID_USETTY setting in process_state so that tty state can be easily inherited. * tty.cc: Ditto. * hinfo.cc: Ditto. (hinfo_vec::de_linearize_fd_array): Return last location in buffer for further potential processing. * dcrt0.cc: Add global variables for control of glob and title, set by environ_init. Mark some variables as NO_COPY. Remove routines and variables for dealing with environment. (dll_crt0_1): Move environment initialization into separate function. Honor 'noglob' CYGWIN32 setting. * environ.cc (environ_init): New function to initialize the environ table. Also scans for CYGWIN32 environment variable, setting appropriate values. (ucenv): New function. Upper cases an environment variable. (parse_options): New function. Parse CYGWIN_* environment variable. (posify): New function. Convert a Windows env path spec to cygwin. (env_sort): New function. Sort an environ block. (winenv): New function. Returns a windows style environment block. * fhandler.cc (fhandler_base::read): Reflect change to location of strace_mask. * fork.cc (cygwin_fork_helper1): Remove save/restore of some settings since this is automatic now with new dll data copy. Save PID_USETTY setting in child process_state. * strace.h: Cosmetic change. * pinfo.cc (pinfo_init): Call environ_init here since it may affect further processing in this function. Use old console title from "parent" process if execed process. Reflect change to location of strace_mask. * spawn.cc (spawn_guts): Remove environment manipulation code. Use new winenv function call instead. Save old title in block of memory copied to newly execed process if title is being displayed. * strace.cc: Changes to reflect new location for strace_mask and strace_file. These are now automatically inherited on fork. * winsup.h: Move strace_mask into pinfo to allow possible manipulation by other processes. Put u->strace_file in uptr structure so that it will be automatically duplicated on fork, removing the necessity of initializing strace in a forked process. Add functions/variables associated with environment manipulation and console title setting. begin 664 envfix.gz M'XL(```````"`\P\:5?;2+:?G5]1N%\'+[+QQNHF%ZX[%H.)WIN6A$HM&0 M=XX__C3%NW=W9UGC49C$5CI5>3Q\"W1;N]M=OR_\3 MKDQLSX^;HK9!&+1WK$Y;X"."C)==V%>C\4R(GUPY]@(IXNC7,$E@@Q4O&(=- M6'T03D5=Q$X4^OXPDE=>Y3!7F/:NG4V>Q'";)7!Q?7 AT X.!D>5R3R6_M AT 2 MY\O3PXL^;/$!MUD7"!,^8IGH98>)EP""%>?:CD2-+I`D]_!?""](1.3TZ3L- M&,W&[SJ;VQ_X5IQ$@3.=5^"N)6BJ)6+O/S(VM[R:LPNO2"*U^>C3Y*)Q$5`CZ@(F'>^)'%]*7 M=BS?T!(FVNJY*T>SJPPS1FC]YW@=EQ8,1P"WW.]2=->)DI:AYOIZF9+K9Z5+ M.V&=W0:UV^MU]C8757S9X%9GK],&D_#M"J[D5J"B34'BD3LRCL7IV?#P[/Q/ M49OUGZV)7\_.3E*%W1>O#DXNC_H\2=XE$L2Z?%A.K<2F%OPOPM1 AT 72^>^O9< M"7L*7#T%.?:F_&PXM9/KA0&V[X>WPRL_',&CP<7O2_`JTB'_2'1;5B\EPP-- M7X-U[<1S!&IB0KH&K`+"#UVP:CGYT.WQS\\^RB_ZUPO&`EG./3/)S,%"A$K\,X&;IR*@-7!FPZ$CM(XL(# M114P@*@>231S$E AT 3%6\5@*809#,%+8/6:>50L(\!J+$RB]K AT F<86F/QI./;0 ME/JA\TD$4KJQL`5P/@$D)B*>2L<;PPYG4Q`9<1M&+LE3MVOU=K0\K62.EJP? MQ:0OP?L&9L$/,2H5^-!W4_D^_?WDQ%@T70HGL)RC11X<#TZ.+H__]PB<:?O# MUWBM@?QXGG]AU;^)ZT5M_5;)(UW>ZED[.ZDN,]4`HPOVO<%L,H)EPK$`5S"1 M2#DO`'PF'H0K<3A.@"ES8)(,;H3OQ4F3Y AT O]>W`M11F>>5$8X&PQPEV5A8=[ M"F:^+\"N@'S8"3 AT O>H9+H04+KF(&44EN0QH:9V-%`G!I>%73/Q,/D$:X`,2' MDQCBCYOAC1W%$!*0J+(UB.Q;>,`<6%.1 AT 0>"UNJGETXX@]_IK=MK#UUCN\JL M5O.$\O4,[YT'40#,J,*S$@X`QTM AT ZO4^7YEC24JS\0AJ%$G[$PU]R,#C9/[* M-U501(#[FF6H]]LM:WS0G0$36=4L9$9R#8*(H5.,0`@`@DWG$92F M%F48ZX#O!`Z,920#<-#B?\X/!K^).!2W$IX%ZXEP0X8*W/%\@F&(/T,B>;0C MB8$KJ#%+,/'JU?$?;X[VQ-MKB$\`/3NZNGG7^H#:$DDP`-X-H,U+@AP'0!J+ MV$0T-5BL*!UY@"$0VD4N(,_^D>F*,E2P:TU+'33CHJU,-=C(3J;OWAS\,<2E M/RASS=(\:[RX5G1=(U%>IAX0=[ZA,:]`B4YIK6R>A=`MH<%7,Y4`X7"'\DXZ MHD)(T.%..C_`P32ONDL+. M(>W_'9 AT X&'%/ZY01VWU(2O"B!;\A.FDH?QO;X)7FA%L\#S!LD[!Y$E>25;1P MG>U=('F';=Q"J`X1!\;WP[:HF"%T;39-(F99M[=E=3=39T>I#XKDP=2+!^'9 MT1M(BOK,1\+I&%#R;!\R/10 AT VP%=MB-_#CM_`WRP_9 AT H[J6CT&`*T%,9,5EK M0B&!Q`0F*DLPQ!E--62#/ID^1EJJU:&^V?K05P^5*AUE]N3?=N1A?@VY%R/( M69?.6RD#$R]0G1I*'7G8D$,`3M`:I$S$A^*N4>0PCA!I'"&R""KD;%9%/_EP MH\D+('2,2'L]J]O;?CS?MK>L7KN;\0VA AT ZH[>/TDFJ]B M9>K,)A*MJ!=/FBD?\/XPPWTE3:0]S0(_O,HFJ="'M<''LLT^)MZ'X014R3V! M&PZR_<%Q,J@(>))"W8!XD.Q$A M=-"LS'F5TCW'%I4T/E:+?U&<5*P^&/Q93HLA&8"J,KE9?LMIY#>#14C+`1?] MA[(J4U@#B=//.18TZQ!<5!2<,J6^978AXO-G47Q^.;@X/B]7%Z,T6 AT 3DS5BE ME`9]].#Y+2"/\T_K'W=/ZPI_Z"5:@UB)J2/E"NT9-%O*#NRN,<0PAIM:!/2 M32)),UV0Q!(+U-F^#6!/\40 AT IDN<4"8T2XB[RF*O+5AL(S)=RRH(H+O+%6A( M*"[:-0C&C/)#.O0'BNTCO&"OMVWU-CN9%Z00":+!U5+Y53876+Q4'V(/0F5_ M(YZ--"C*H%!FT6N"_O4Z/:O7:V?ZMPRS'^40E0^X&) M2H4V41?M*I!!66,=&Q9P.%1QINM!XIN$$2:B6'2TT8MR%<()(Q?\F!UGE,=< M%VLL.L405*)8$]SD<8"*/R^Y[#>')8H"'(&]C1#&@Q MA^09]H8I=\P@A``!' MO"JQA6;H`@6(OO&<'J$6.5@&0D.QOX[+8LA*=\3ZVCH-PO^53!*J[P)\ZJ3/ MT')^\J9"U=T">9=@TJ`I4%JV.5BE7O<(1/89]--M/ZAOB^NV"K(]L?^#P>?< M$J<#,$)4,H3P$"CZ,6X?@`,N.0<@HB0Q8]NV2:HM< M[">:(?M\>P0H<44&$)U&).5HY,8S;+EPD(E$RP`!%"(@(*7[QU2`C4"OM*VG MTGZ,A AT M@7$4A%B=UD4=[Q+2$YKDHD>GE%%L:CZYT M)LV\^GQ%T]#]Y43*^X#>E7SJ_CJ[6/"L>7`&2(VH%_OA+5`!G&ZUFCT2"`N" MNI!IBD_[!4`/YH7Q["$GU1`!WLKU"(]EH(Q,P]B[HX)Q;"&QB?G4K4&I)#'2 M1$<)R,"^0U&9AB`?Z+B!0Q0LQA](X.1<3+RKZX03"1`FTA8VRJKNC.V`#!K9 M1EU?]R*%EOQKYMW8/E9FQ`)'X\:+"783FC26BW=3/!^0-W"K>5HR:,^C0!@_ M\LAB/?`C,/,C3!,91VBNLI\QG9HHLI\&>,HTH!'=%]J:+L+73JU44@%<@'I# M=8`83T$LSK`TW*HJ8C?HT`0,3+Q@)E-XP/0!]EYL%=5[B9R0TI`B4E77V?L% M/-Z+_B_@\UZ8?%`P!5$:_%[&D5 AT TN!68$#553*D`FBCA0("I:2(I4\) M1,%PY(2SE!GQ4A:\%*VZ:L%=ZC"#&`RY$7=/EA<]C#@E#4_0R=(4]OS`OE.E M"%,/&QN AT Y#4S_AP.=8F*X0/JV5ZT AT WH52;F8MT#ZG&J]D9D8.WMZ&[B1>I7;J[QMJ+O_E;3^B%K75V;:VNKVL&IHO AT UV2'H%538\W8&`*6AU.$SP> M&T:LNJK";XS;U[M-*Y=*X%75>F+'G\1S41E>#BX.#H_ AT X^!B\/NY^"STG8.3 M$Z.1)5:D1$CS/B;85>;ZSJ;5V^UF-52U'SQFFSNEH;!3-?._8:M:)_Z^_2ZP M.P1=Q1(TAOAXB AT OX%;2BJ]N]'UG M*ZRTI`_&,-73+_7!J(N71_I?'O`AC*9 AT I\'A.M>>[X*.")UL4[P'@2H10UF# MS=V6M;F[F;,&WT."7!=DH1)>6E)83F=DIN!QZ'\[FS=;UO9FJLLE%"(@+G:6 M:_`+TW7(49,F^O;$L-H.7&E.+!R3_YG*$['GTHGX&.)1<7G\^OZWW\^MP[/3 MP0/E)&H+=%)>8!ALA!4>3$MUP7-5,1I8LM7N6EOM;'[?B7L5 MD1AG[K,[RT[=9T]+`\@C7H*?[71%N[4'/QTZ=[]MGKLWAINOUK3P39Q>;_G) M^T.*AL%-^)XC`RJ_G9.ND;C/?)5Y\1G6':N]J:7'/+)/5NTG+Z"]BU\8G>;U M"WP=)[T;)Z[OC9;<=>48[Z[E[F+$S6/IW!)M<\?JIH9[]?)EO7SYT'/L@%,MW"SC:T0QMOI AT -6J%Z7>(='IA9DH\0IWQ+[PBT"\\*3;$5&_N<>?> MUK`'_EWGWG`&3WORR3>"LG#R[>S-$8;6.6`3/`(57TL\@XS7"M(M%1=&DB%Q M\95[_&\A_`QO8W4VFK(/HHJ!O^I0YL[14]B]Y`"=N!?E?<1LGU-[=:J?Y.^K M;ZQL6YWTD**HE?A<=PQQ'!@>,-9`.RX&V'$<.AX=Q*8N&X?#F'`$FU0@."8K`/'@:5D9R$-\!FK!&C'$57L[2;P*,W MN)OX14V AT D)^9\DQ7I_F,R2:^\J*CL__'=/RO4'&11D4Y5`V/W+%[!**B=_"@ M6]G[?]N[UD[^Z'H=+L=C(/AM MY"5TL!86L>`:(C0'FYKSM(I(XS7UZ96QUJ;5;J5O2SX2R[\/QR+!XQ7"8.6: M]#)BRPN5.DWCHX4Z5VCC7!RCDUC2GA*JD71M(78G6#8BFR M4SLBDV+OC]0;-EQ\HSX8MDB:2H/JVBNI]VMG#N^`6W66VH3\*WNS]DD]WOKJ M#F_]"?W=^H_H[M9_7&]7@=*?3^WKUI_"MP>^%E_\#8C AT Z22^VS941VFS&\40UWP&*1R]4ZU( MD=X'KSP)W2(8,)+F'8ZG$1,9S"9"[UM1]CZE,)YU04.;WO#B\2QPLFMX./*T M##RDKZ_/G&0!5F9Q^ND]B+W#`'=QSULA9M0(-;AZ^?;LXJ6HW:E+)&K-4Q?T M`DREAMA4=<^!'CWHW:B!Z5JYG5(!(D1S$`;]`HHIF5;CR9AI7)3?5LN3_XG? M=3[HZ0_B4Q#>!O0"2I$H]V46O;(E[D=[XGE!$!^LE`44J\$H$DR+CKD_/%@& M(!(3#2=77S&A/"]*VVJ`AO1IL$6!-""G$XTE%N5W]6HHDGJ9+.E;CCH^^2(I MDCF"N AT -01ET=3=`0-0\)PH*;HP>\9,1MD19E*O6$CC5 MOIXYCB2^1+%RQ$-FYC#.*>@BX:'>>>57!_1H13)]I#$C5?8'.?;7L^&%EK+J M'C.0:C9,+07;=&=3O7I\V>Q.&+/&$'+.?@'*0`TP>>C`^G?34G[ M>'I4Q;#4>%@M AT G5S/.G`Y6<-O$Y4&@-"`!T6&/Z M5\4_Z`^PI*.5E^*G,%GL0=R5J4K*P%5X*'MG($+HTX[5FK0\!^=8)JXM8'H' M-%R%T/]5=^U/;237^F?VKQB<\AI9 AT ZP9/1`B;(H%V5:"@>*QNX[+I1VDP4PL M)*U&,N;N[OW;;Y]'OV9ZA`0XN4DE%:/I]^/TZ=/?^0Z=K6MR#@KSXXH>PG3+ M$[*J>T';1'?HU:N%?:(S(=T_326^5`P'K48 AT Y5W-+BT;HC_N& MR.CG&FT>M8;6EUY$.9&T2Z0]]FKU72TL[61JE3/^L>YL)7TS2TA MQCN+W)O>A`:3A1=*0M+S:8!'Y,I#XS861WJ^FJ=`DK& M9H:')+/HO1 AT B%LB9J>=-]VS\]/W=#4!@XB\/RA,A[*4 M%]Q^Q7=X2-TPK^[RPB&^]>3%:IHAEC*@$ZR>#V^%!,,"=E3NS_&==SN-\"ZU MJW[9F,+C$?VS!(@NQNP<4^-E]V$J.#.FYUO]!JT:T_U*\52)P@@9UCD]/3[M MG5WL[W?.SN1AE+EBR9,/QI4!73A`-)J/Q+^"P>YIL*]8TG*X5\?\0D(`0?`M M!.[>OF>@+O5L*P,(HU0QK3'K=+)A)G6@*N1FAAR,=Y;X;P[$1ZC(DE0808Q- M/FP*A6:=\?]9Q4'507O>U&-R>HL;PGH/=+4L`5/%T%6B!E#(U;*T=.3:9J-X MZ>LF]-B\KRMHJ<*U26^60,-?O;(B-UL%P`JU9)&FB`O6T-+R AT B(SD$7=G-). M@=Q:!%Y4N$<<*QS&7?Z1?B/EF6"RII4EXQTIWS+0]B^FX'`L]$W8;LH.XS0) M`ABOS)9CRX'.DI+)3,M&WC2FIZJD,U+;Y$%^5V7M<@43ANC AT _MVG!+2-SVZY AT U3G:,I>YPJC+'H6Q[58F_S>%21C*HR.U:!:MQ AT ULL4@1( MY.?RLEIP+NF=C,D)&8>2P#Y".)$\CIZ)HJ+Y<%?Y/X"E6+O836\E-K/Q()['RLBYB9>O^X>.ECM:T\DP!\2XO>^KR M(WY$'R]?7DULP0TK.:=A&0XLW@^[8MOC;1[Z>)HF$367(E@^.RR MUI5A*8+UUQ,2\`N-#3]24$Z^4UENO".\"M)W92O8%3)XV[@.9A0@[&19I,B, M!M\J"OUFH"16*W#.RB#-7I;+(M_?0,%N`R+';*/;.,$SDK<^T(=R^:/B4RC? M!R%75M#"U9,42*Z58.?F&?5:W'9PLP'\D(`1OZ7CZ8Q>7Z8S2Q8SYUM>38,' M7#QP>IB'']*(B2F2#XCTYZ7[$'I)F\;\I>1%^:/CY6^.=)=*]FK+$*XD5`1_ MRW29X"1"\64$R*9BQ[,9\/2!JIXWQ,3E'@JY>7C4V<\<0N$0&HOOS88[1848.KK2>1A]WO)$64]K[B3.HTY=2,\NB6=IL2.(1*B;7 M"S%&4"G)%#RPN5F8IERFSR[9J+R\^NEDM(&9Q+[=?5:R;579D]^P%4&M&=4: M)#18/Y<^=1J,4 M(/W AT -DXB`"NU+OLO>4!S_L6H$GL!J\7LHT.B2:BQI,^Z-&.L0N7"_T`?M3V' MB9%%2JA:G'XT".I[41U:/G`5M&JI`V7/T)E=@\&F#C40D$O7^6DL1A84Y:EA M/U#S+Z;B+;IU2-=[$-O AT _C4`HJ2[>*:/==>0JIW#*;">MDHNEGE9.R!2PV#D M9Q0Q3MAH]B$/@\Z/%V_N=7I0UK^@*<[A)I^1B./G!BE AT SW(-NL<9XS&M M/IY63)U1]JPVJXVVHVF>_Y8.47"INMX.(FG AT 9H_@,(/HED$#\4&",R8 M/WK[!S,1D^*#Y\(,>)I AT 3!#N^!G^1;Y;B&C AT DOT X(FJ>-_41+8P9Q"O2BSQJS^ MILJHC:)E?6CX--[Y3DJ`KS2WU-@"?L/5NKW=\L-JS7)XR8A_:K,']`OBG AT W. M`N@=H']`)P'@FC,]!(A\#A+BW]JUX^W>T<%AQV.2H![L*A AT JDKX=A!]M?)]& M]-[O>_SXC]+9_]"/VQJ M*GODL&]67J&!M"2 AT XP%WV_O*-$[?R=OE5]8NE4,E,)\VMT7EAG?8DU9>6/6C M!JP65/U:8'GH42W$*=X;"P54G%#Q+"U]IQT^Y:2;P!%XC AT -XR-GQ_C\ZYV<` M$SG8,?B[BG.`*U=W[[#[S^[1FQU5"SH]0:[>S4TTP8U/@ZA]?&K5+='X,(_# M_`\UWOL#]P>_H&TX\37B8#`BP2S=W4=-D MJ`4"PVGO*ADEZ74\,%KI3@!/A_0AN^7)[K&I^5FTG+<%OW85MF2[3F>)>]/? M3=P>1Z AT HC\FYB\#7S:U`=+E.2V,US>H:0_YHM4K^[3J+Y;>\0A76Q2FR' M+JJW"K4IS-'[$OA!RWO7/&O)2(;L\8-Z(^N@=YF,)$,^\]OQ MD)?HN^>QF^FS5X/XRRO`A^W0%W+6QL AT _5'+&ERY?\H*81\O5]L@!V/:#1NV; M#`"5_!\=@,LY2`>I8&?`ZASX)O2#EG'ZF2PD]*J@:RUECA&+RM8SATC4_N%J M\+%R35GOSX_KRS3)V4TBNL9<%X+.P$C4>SX4/T,.,4TK>? M%(P`K`G!LYFCL#:8>.!U2ES:X3%KG2`FZS8F$)XA)4&8U!-DS8:>\`UJEIS) MNN['#=?VEM^H5NU#&S"J9(EPQANIDB4!^\S9+=WHGNS,GKNJ*8+]65^E=^DK MN@*+;<=GGNN;ZR!UI4.WY;]'(W%EA5MKN-4.MG*'JCMCSEQ1$#I,>Z&1(BUT M>+]>TUY-WH_)#"ZL]"HJ2K=X;M#[(Y&P%<_TX#7N^FO5K]6`PB>`U>XZ^I*` M/PR%T!'MW0T\9)Z1KZCH=9HMY_7AQ=E;*"FD4$3#>7H-JW(B%J:8MBMQ($17 MX'82?XG%"N4FNLOJ'KWMG';//5%:G50H21*0C,35.8'7V/0SP0KX5N AT LY^+M M,3:IA87,Q70"Y=9XZMW&R51<'*_CT?A&_&_DSG[V_FR?AB>HTO#>\<_JN>WR&_:RJ"L&^J2O#H$GC ME,FGW7WO'';VS['KNA0QMO-/X(X5#T$'1B_7450T?#^_6X->8W:B0K]EJ[-: MTAL4"])C.'WO5IR5[N9TW\`\M,S2B,L8/:]<9,;Y0CJ_=,\/+MZ=X&14JXX4 M^WO[;SM43U6%_>*P5R:'&U.[P\+5)#VPF>O:@_!)-C/LFFHU6'N*[4QEA6M/ MM:&IO/K:([\RFQC*"ZMI*VQHSA9CI$1L;2ZEC*0_>^SVAG)"HYR5-SA*=2K AT 2;8XE-Q`26*$4%R,)S&X M.X)B#KP#!,N[C:R3E(8`9DFTH&/=XFGP"!D&\\(YO1Q2T$)GW)LF@ MHHUT2![+0S(N$0D?1%T4&Y3\*N?3F!D5"'G\@A AT A*=:#I&H2?:S9 M%]"']/$4>D:!&A[6/0/098`T2_2&>(2,*?#.!0,)^+A(G`C]6CF^_ MT2`MMU2VMOQ6D+<:ITFE?WD:I_'T2SP(=8B?I#*<6#\3I$R,4S1)>E<1\`%L M/-M'+D9Y8ET-*!R&?=F21M7KFVA2<=ZB`-'@NCN7,LTP+OOS$3S#]K"K'`[# M"?D"@654+VYRWJ[W_"M:Z:V&B2_\\K+5 AT LB=.0OUMQ\HCNHC2=7DU=[;76H( M^_V?EFP*#8UX1_'.7D7?8Z]7XUGWQ=>U`=A AT 09K M=#,9(B+_5[+FOV`^IH2Y7I%3#)1(FR#$J$Z61X$!3.)8$+[ST0A9#23;G..9 MFFWLW]M/ZCM%3X3$)@]O AT Y-/\M_6S%@\9Y!&OC]6ZWX09*P1J\^`IZ,;.>4F M4BB2VLR'$`C#RUAH&RP)%?'>GT_:Q]44`933AB(@_W8I`O);7A&HYR$;*K&I M"(3MH-&N!04O#,J$/@.D8J+@XLEXQ.PGS:H?;-7S(30O9LD0HD'>"Q3%YQ\# M*+JY-%!4QJ1'9B4WJ>Y.+TW^&7\^GS\&4RJ%B"4@[8W_%K+B*((T+!8TI][$GQ([EG, M,8M,;"EX<@%M6W(#]\1^A"PBGQ$@7]&\6JS:`C>?CT`NDC,.'->F1I,"3G#' MXAZ&=3+K2Y%(N-*^`5.=]3_NB`1F^`>3J-\@E"!LEP68EUA)460Y+`J(8Z*W MJ`R?L:R0+5B4#1L_S(:12:?]Q/Q[D,X2X^E2XM$2PO^QCS/5_`%^_X AT X-"N` MQN]64)=K\KU"?@7BB%%T\5GTNRH3W`J[!P"`KQM4\?FH!^PW*692W,PW_R>> M"LT.J*4ELI*T04(-]L>3A&9]D,YT$T8,O-2!84(TA3.!W9URJ>`2 M,0_2.B816D.6-2^&08L3'6A"!:C((_<<>143OX.^)#@&)L,7-C,Q2WAU12X8P'P4E\&-LS+%W_\JY[F3$.M_QKD,H\3 M+GS'Q"EXLGE^D?YLG)`V!P8/.LBY_,F0%W(J.>T&"YVLOJ'L*G-(,L;(`$!9 MXY.SK/LO,<*AGG36<#``9`\I7-M2DPFWZWZX7822-#.@P2BL^XVP95^L\@^Q M%-T]<[4UGLL=PH\OB":Z%F]]]]]56;3_-8O.J]=:?ET_!RQL*VH(<*>EZ4&/ M/8NC&\!(<'KT3GK'/W5.#_?>>W]3LZBYN;TV4FZLWGWP>N7ZL\C#)QB.^^>U M5O4;M?JR\VI9,N3KLJ&]HG"1`1))?QVHFRH8DB6#*;/JI11L1%R"IZC(IG', M`(>F7V\TEIC"PI89`ZLC8:NI_L$+9.A1>7)NN(U'\BPT>=@SL93M#!]$\H^* M8N#)A^?^*6W6_(9)YUIOU?WZ=M49RP#>R@!MI!X/\AYR*"4M=P_#M4.ZR:%+ MW`X1OM)0T\UGE:6(U/J:=EX&B$/H,#V3D!6,;K)I]HW+R'(UC#ZE!&&6OKU( M;HD/72D%XAW?VH>(74)5I56QHZ;)E_B5]K"VTW^?)CY9G0,A*`-E!WS:7LB! M]T4Y3]SV>Z>G60W]9G7[OWAZS+\GB159!:Y4\70Z AT EO5+6V[:.8*>,0,#."\ M'H,71WP%SNVBP33Y85-(T\9_W>3G1D:ZD2+=A:SXJ4=L15,:07X,6YK\P6E, MDQ^7\D,ENPRP$0A\J?U_4>H_R5&A^]J6H:L; M\<.7B&YDT40&7(;#@\Z#S"/F)Q4FCXUNTA^#++SXXKKK=8]^VCOL'O3H8T_\ M<='94:8O43)'0\>R$RB5->=T-A!3+&U*VJXGRZ?O?(E#T*Q"07XTZ8%%3Y^[ MM''>.?-2=J%/H\KH,!Y]F@$@EN]5QK?AY"P6DB&9W1W$:7^:3(1,L&@+ M1)K++HDIOGWOHORRU*P*NL76;3-/R-+"36GZH%T)*'9]TCGI[AS_OO3\# M*0+^!BE<\%^(/3$<7P)=61SUK^E]1?N=7BLO(Z!6V?,VKD:^Y!]ZTSGJG';W M>S^+(>JH7S%TFU AT N9V_W3H'Q9>^@[1T"`QFN_AFBA=")D=6S?JSXC.2S"P;2 M2D:DL1ENL)@J4[CWA_F+W13PB)+_-OKO6T6IJ>T='9^^VSM47ZL&W=@U7$U< M^R'O(FNB7\7M_V*D7JY AT R='FQ\E\GOK,(<;[_YGO78T,)]GL!I:K0[O*,F&A MW8#,FMGUKHN+5,33LLP_2;6$P&LNYJ1?"?SQPGQ1P\O">"3Q7_PHWQ6Z-7.6 MB;2C#VV$AWS\X$.CP%KV,;?Q<8=2D#-?/X\8++46^[7$%3"F0#WF97Q9DU0J M`R9L AT E4!C-J6LOU6WG_PB8*/3["L`$**PIMRKC[NAQ3?^^>IF-5!/"A53(B% M)+_%=]WYE1MQG]G8KM4E"N"X27;:-_'L;#:0.__L_*!'O':4MX0OR?18:XD( M6SZLVVN"%\L]11ON5?GCA67[=N@'U;H6R*O-G\OU]__O)+H%M)JW_.<'3EU. MNJ\7[?9'3F#^-'9/'\8,:?I!+;1M&HJ4Q'A9-J=2DZBB!?W[B:\,.MD`XQ2F M,P;2N8SX%&:RQU$[^`M2>9E0 M AT 4:S_!=F_$*ME>&?#U=I,'M.I^'^9?09Z7CZ`(7&\%E=I-'(9,NH-#(ML+L; MJDR1#J.2FT"CZZ)S1D&/?I?_R!X+-+=[ZKP(?O;NHU-F"3&,=5/-,<[5O2Y AT BF5TP@!Z*I_/F(5%!RERC9AA^'R M*Y4*XX,:53]H&&\%PRB=]2`V$$2 AT H=XI2_L26F2>&26#PZ7G/"(='F$@<@GN MTH^_&$"JY0=-@QQ AT 4;ORFL^W:MJ#AWFK:?OV*E]=8Q_P]E`B5&A7<&B':):_SO&F)_2H9"!U M8QX(EC^JDZ_A;VCQC^AJDV9O&YX6XI;[]%:Y289" M1,9B:P[`0Z2D'PY7W%^K;R^%)[@!K89E=06/#>]&Q]2`KZ/\E:]H7]YL_D"\ M\_Q AT 37^7K'4AQQG>O\5W\Z02&FX<35[C*X`8`<90P&](A"]ZL'%X\M-Q]Z#D MW3#^5XR^'X9;%O_0T\_`4KOK09OKR>8A6]._=RJ6W2]@[S9A'VY'M9"/ZR9)!$/JMTA/I9H0&Z$T'GQ_N,YK-?\L+YM M.T_-$2I2X%V$HECT*0<"HR!%&\^!FON[^\Z[2](Z%ZI>#G='M] M1[A;-+*(*UO\M1]/9MXDGEY'$_3YI4A6>!NFY4"8J:NHK]#MT62B$&(68<"F M\7(E]IN%D&982M:Q0L*O_F0$VW?,7'<333]G>DQH_(1LCSAUK88?2F.I1KI< M/-)E>Z3+F9$V&?EYI-GAXV_.VUY;!JG"5X.5_37N4O2[,Y^9]4_.AV;]V?3% M`!:+H%UW/#47I*^U AT U:[4?#8W$>WXH$T=*;27Z,A;@K-9C5#`V0ZD^%=5.)T MY5&Z+KFY_OA#C6$?N;H`W5W25UC$1:62JD>LV6>\M[6BK-I@,_W)@L=-$6K;2PJ[6F7Z^:79TI+N85^YMN M_C"K&+E9$:4*C*XNK_CHJS78UFLVB_C7N,W*ZFM_0OJVW_$;H1%QBJ4QS M1QDA4P:Q6C@<"AEIEA9QS!4J+N#!H2:XT)7+-F'Y`5NR6=GAXTCQ&)M^RU AT H MZ7"\PI;(5FZN41H**E^ODZ+R']YAN\[5I!-)%,VR)/]V22CY;2G(DRMQ-6C7 MJHIZ*7<(#<5E'XYYR8Q,AU"UY0>!J0Z+I8ZXDYTU\M24E`K AT P#*^@CO51/&N ML&^M.+?%EUM`D)'K6Q\<;[KVTRH]?RG/VC-Q$[)XJ(B(@U%9]MLMZBOP%HM. MMN0D`$7B4XDLD%Y,OB01*B[*4W?.SH\4X8PBTF!QQ!B1BA-9M!!8.#WQKTB6 MM@'O@+/K>2J==0VS89J,^C&%Z7J!GF(-87BQ(275S[?C6R"&P2!NT1!: MP4%Q)+XAE00W$?CY0]2I%%R)TD2&E)+]@_KXX1G_3Q0(L0'9%]EN(O$=4.B= MB AT R/#HPUR4R61Z'9H)OHLQB)2NF2/$PH3E]C M`.B*MN:]M("=Y%!*04:>I)ONG:DXYZ1R*/0RVQ*&;BB+V`Q)O<1+A+2\`(#4 M31S AT IE[`R[6"7`2-;>TN^_!6,*5!04/HJU%S@>2"\2$UJR:N5W5#;1:CVA,W M&/%_.X9<.M'KV>"#(?IJZ8H&1G^R^*,\DCC2BKG.7V;<\/%PD,O@`M!*@_F4 M`S)^9NCEO\!0@^Z^,O(??A57L`G>K:9B'8JA(/PI:7;BIEPS+-:K]:FZ;(>< MT,HG[$:$;AIM)S MVC4K=8"I20H*239G7P](_\_C=S]V.W;R$),3C3I0$\7B_CT:2P%P&['41.+I M\^.3D\Z!G;^.^2&=#,QYUGVS?WQTKK()-:-[9&=JY3*Q0CH4319"RLQ[?&'E M#:K%>4G"JZ>=HW,K8XLR`@9=+%LURJDXA.C8!OM" M10_YR6'WO/>VLW=B%!)4K4)@3>))H'DD)N+<9ZL;).1SDL3U+3K>OYC1.D8W M"5U?YY?.OCU AT H:C,,UJ<(QK2;35XR57VNCN[6)4I>&4"];FQG`V:-+3_<4MKQTEN-*GNM]EIE\683NPW2=XS=5EFX MW<1^@PS[QGYK9_9;9?&&$SL DOT 2O AT YO^,JB[:JRS8=+#K"G/3KJLL MWG:P[Z"$=_?ON\JBC0<[#\HYR>^\RCU;#_:>]]B]!P1Z9BGW;#[OD;NO>N_V MJRS>?]4E-F!E\0ZL+K\%=4ETO5RSI98J!A<1F6)''-!3W("2E/[-]Y?4'$.X M;/.9B\HEW8HTA/7RSDP-%#LT/%`PZ:2RZS%2HKC5K>$83WU$8`@59`->U\Z[ M[SI"+1;:#UWUO7JCZ=>;RN$#_2(D4_=-]#GN39()L]4(77L0IQ_"C](?A AT W& MI AT T]RWCPD1U<_B)F"^DB>T>=L_/>\='Z+K"+2M+`9+3QM>3]GG6-1QN]6,G/ MT_;S`7,8]'KX2M AT 3_SCL'L$_(%R'-RB7=YB'N5'S1:\6&.W)QS)GB*(!:8B) M;51-2_VV*&_;?$GEKM[ADXLT!DL]F3Q)*+H$,9VS$_.&H9G+1P AT QI,/>=(Y$ MHQL,'N(_18$*DIMW"H22%H5&5)UIH1>D[0_%O"_9P)C<,#A=O'':F\$+[^_B M^]&Y#T.VW?")D0.`>".,9B_13\;+@C-\/Q)48_CV8+MXR] M3\S7(`QD9`2R()<$*C>E AT IEG*9$1H2G`+9 AT W2$[`NHIDQ!U)2H`W0ZZ#;85V M6!..6B4.OD:@E/PEAK4L AT 4NT%L8CY6Y,T',9JUNIX Solutions Boston Business Computing the real can be."