home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / lang / c / 16607 < prev    next >
Encoding:
Text File  |  1992-11-16  |  24.5 KB  |  504 lines

  1. Path: sparky!uunet!hela.iti.org!cs.widener.edu!icf.hrb.com!els
  2. From: els@icf.hrb.com (Eric L. Schott)
  3. Newsgroups: comp.lang.c
  4. Subject: <None>
  5. Message-ID: <1992Nov13.082435.19755@icf.hrb.com>
  6. Date: 13 Nov 92 08:24:35 EST
  7. References: <1992Nov10.220743.4479@quintro.uucp>
  8. Organization: HRB Systems, Inc.
  9. Lines: 493
  10.  
  11. In article <1992Nov10.220743.4479@quintro.uucp>, reb@quintro.uucp (Roger E. Benz) writes:
  12. > I would like to setup a Makefile that would allow me to create two
  13. > different targets from the same source files.  Our primary target is
  14. > a 68k embedded system for which we use a cross compiler.  During
  15. > development, however, we find it useful to build test version using
  16. > the native compiler.  Currently, I have to edit my Makefile to switch
  17. > compilers and then run: make clean.  If anyone knows of an easier way to
  18. > accomplish this, I would be most thankful.
  19.  
  20. Attached is a tar save set which does just that.  It contains
  21. five files:
  22.   MakeInit:    Only file user creates.  This contains directives
  23.         to build executables/libraries for sun, 040, and
  24.         860 from one set of source files.  This is the only
  25.         file users copy to their source director(ies)
  26.   Makefile    Standard make file.  Store in $JPRR/lib/
  27.   make.part-1    ditto
  28.   make.part-2    ditto
  29.   make.c    Enhanced "make" to process above.  Put in path BEFORE
  30.         standard make.  This program chases links in an interesting
  31.         manner.  See the source for details.
  32.  
  33. Also, attached are two COMPLEX MakeInit's (the only file users create).
  34. Actually, if there was ever an obfuscated Make contest,  this would be my
  35. entry. (You will see why when you try to understand make.part-2.)  This
  36. is still work inprogress.  
  37.  
  38. In the code, you should use structures such as
  39.   #if defined(CPU_SUN)
  40.     ....
  41.   #elif defined(CPU_68K)
  42.     ....
  43.   #elif defined(CPU_860)
  44.     ....
  45.   #else
  46.   #error Undefined CPU
  47.   #endif
  48.  
  49. -------------------------  Begin sample MakeInit  --------------------------
  50. #
  51. ###############################################################################
  52. #                                          #
  53. #                       GLOBAL TARGET DEFINITIONS                             #
  54. #                                          #
  55. ###############################################################################
  56. #
  57. # This file specifies the information for the JPRR makefiles to
  58. # build one or more targets.  These targets can include both
  59. # libraries and executables (i.e. processes or programs).
  60.  
  61. # Define the libraries and/or executables (programs, processes, or 
  62. # tasks) to build.  For libraries, the make procedures automatically
  63. # add the ".cpu.a" extensions.  For executables, the make procecudures
  64. # automatically add the ".cpu" extensions.  If you are building both
  65. # libraries and executables which use those libraries, define the
  66. # libraries first.
  67. TARGETS = liba prgma prgmd subdir/test
  68.  
  69. # Define the additional CPP flags used to compile all source files.
  70. CPPFLAGS = -DOUR_TEST
  71.  
  72. # Define the additional C flags used to compile all source files.
  73. CFLAGS = -g
  74.  
  75. # Define the libraries to link with all executables.  This does 
  76. # not apply to libraries as targets.
  77. LIBRARIES = 
  78.  
  79. # Define files to remove with the "clean" target
  80. CLEAN_EXTRA = subdir/*~ subdir/core subdir/a.out subdir/b.out
  81.  
  82.  
  83. ###############################################################################
  84. #                                          #
  85. #                      SPECIFIC TARGET DEFINITIONS                            #
  86. #                                          #
  87. ###############################################################################
  88.  
  89. # Define source files (without trailing ".c" or ".s" extensions) which
  90. # comprise the target.
  91.             OBJS_liba = b c
  92. # Define the target type with the "library" or "executable" string.
  93.             TYPE_liba = library
  94. # Define the target CPU with either "68k," "sun," or "860."
  95.              CPU_liba = 68k sun
  96.  b.68k.o := CPPFLAGS += -DSPECIAL_CASE
  97.  
  98.  
  99. #            OBJS_libd = b c
  100. #            TYPE_libd = library
  101. #             CPU_libd = sun
  102.  
  103.  
  104.            OBJS_prgma = a
  105.            TYPE_prgma = executable
  106.             CPU_prgma = 68k
  107. # Even additonal compile flags when building target "prgma"
  108. #    prgma :=  CPPFLAGS += -DPRGMA
  109. #    prgma :=    CFLAGS += -O
  110. # Define additional libraries used to build target.
  111. prgma.68k :=  LIBRARIES_prgma = liba.68k.a
  112.  
  113.  
  114.            OBJS_prgmd = d
  115.            TYPE_prgmd = executable
  116.             CPU_prgmd = sun
  117. prgmd.sun :=  LIBRARIES_prgmd = liba.sun.a
  118.  
  119.      OBJS_subdir/test = subdir/e
  120.      TYPE_subdir/test = executable
  121.       CPU_subdir/test = sun
  122. LIBRARIES_subdir/test = libd.sun.a
  123. -------------------------  Begin sample MakeInit  --------------------------
  124. #
  125. ###############################################################################
  126. #                                          #
  127. #                       GLOBAL TARGET DEFINITIONS                             #
  128. #                                          #
  129. ###############################################################################
  130. #
  131. # This file specifies the information for the JPRR makefiles to
  132. # build one or more targets.  These targets can include both
  133. # libraries and executables (i.e. processes or programs).
  134.  
  135. # Define the libraries and/or executables (programs, processes, or 
  136. # tasks) to build.  For libraries, the make procedures automatically
  137. # add the ".cpu.a" extensions.  For executables, the make procecudures
  138. # automatically add the ".cpu" extensions.  If you are building both
  139. # libraries and executables which use those libraries, define the
  140. # libraries first.
  141. TARGETS = libJP_JCOMLIB libJP_JCOM68K libJP_JCOM860 \
  142.       JPxxCM_Init JPxxCM_Close \
  143.       JPxxCM_Remote_Receive JPxxCM_Remote_Send \
  144.           JPxxCM_860_Receive JPxxCM_860_Comm_ISR
  145.  
  146.  
  147. # Define the additional CPP flags used to compile all source files.
  148. CPPFLAGS =  -I. -Iinc -I$(JPRR)/inc -I$(PROJINC)
  149.  
  150. # Define library search path for the shared object library, so the 
  151. # shared object library can be found by executables.
  152. MakeCWD = $(JPRR)/JPx/JPxx/JPxxC/tmp
  153. #MakeCWD = $(JPRR)/kls/JPxxC/tmp  ---  FOR KLS TESTING
  154.  
  155. libJP_JCOM860 := CPPFLAGS += -I/usr/mc860/os/include \
  156.                                  -I/usr/mc860/c/include -I/usr/vw/h
  157.  
  158. JPxxCM_860_Receive := CPPFLAGS += -I/usr/mc860/os/include \
  159.                                  -I/usr/mc860/c/include -I/usr/vw/h
  160.  
  161. JPxxCM_860_Comm_ISR := CPPFLAGS += -I/usr/mc860/os/include \
  162.                                  -I/usr/mc860/c/include -I/usr/vw/h
  163.  
  164. # Define the additional C flags used to compile all source files.
  165. CFLAGS = -g
  166. JPxxCM_Init.sun := SYSLIBS.sun += -ldl
  167. JPxxCM_Remote_Send.sun := SYSLIBS.sun += -dc -dp -ldl
  168. JPxxCM_Remote_Receive.sun := SYSLIBS.sun += -dc -dp -ldl
  169.  
  170. # Define the libraries to link with all executables.  This does 
  171. # not apply to libraries as targets.
  172. LIBRARIES = 
  173. SYSLIBS.68k = $(JPRR)/JPx/JPxx/JPxxC/JPxxCT/tmp/JPxxCT.68k.a
  174. # Define files to remove with the "clean" target
  175.   CLEAN_EXTRA = 
  176.  
  177.  
  178. ###############################################################################
  179. #                                          #
  180. #                      SPECIFIC TARGET DEFINITIONS                            #
  181. #                                          #
  182. ###############################################################################
  183.  
  184.             DATA_libJP_JCOMLIB = JPxxC_JEXTVAR_External_Variables
  185.             OBJS_libJP_JCOMLIB = ../JPxxCM/tmp/JPxxCM \
  186.                                  ../JPxxCM/tmp/JPxxCM_Util \
  187.                                  ../JPxxCM/tmp/JPxxCM_List \
  188.                                  ../JPxxCM/tmp/JPxxCM_VQ \
  189.                  ../JPxxCM/tmp/JPxxCM_Get_Local_Inet_Adrs \
  190.                                  ../JPxxCD/tmp/JPxxCD \
  191.                                  ../JPxxCD/tmp/JPxxCD_Util
  192.             TYPE_libJP_JCOMLIB = shared-library
  193.              CPU_libJP_JCOMLIB = sun
  194. ../JPxxCM/tmp/JPxxCM_Get_Local_Inet_Adrs.sun.o := CC.sun = cc
  195. ../JPxxCM/tmp/JPxxCM_Get_Local_Inet_Adrs.sun.o := PROJ.sun.CFLAGS = 
  196. ../JPxxCM/tmp/JPxxCM_Get_Local_Inet_Adrs.sun.o := PROJ.sun.CPPFLAGS = \
  197.   -DJP_PROJECT_$(PROJ_SYSTEM) -DCPU_SUN -DSRC_FILE=$(@:%.sun.o=%) -DE_32="enum"
  198.  
  199.  
  200.             DATA_libJP_JCOM68K = JPxxC_JEXTVAR_External_Variables
  201.             OBJS_libJP_JCOM68K = ../JPxxCM/tmp/JPxxCM \
  202.                                  ../JPxxCM/tmp/JPxxCM_Util \
  203.                                  ../JPxxCM/tmp/JPxxCM_List \
  204.                                  ../JPxxCM/tmp/JPxxCM_VQ \
  205.                                  ../JPxxCM/tmp/qsort \
  206.                                  ../JPxxCM/tmp/JPxxCM_040_860_Receive \
  207.                                  ../JPxxCM/tmp/bsearch \
  208.                                  ../JPxxCD/tmp/JPxxCD \
  209.                                  ../JPxxCD/tmp/JPxxCD_Util \
  210.                  ../JPxxCM/tmp/JPxxCM_Init \
  211.                  ../JPxxCM/tmp/JPxxCM_Close \
  212.                  ../JPxxCM/tmp/JPxxCM_Remote_Receive \
  213.                  ../JPxxCM/tmp/JPxxCM_Remote_Send \
  214.                  ../JPxxCM/tmp/JPxxCM_Get_Local_Inet_Adrs \
  215.                                  ../JPxxCM/tmp/JPxxCM_860_Comm_Util \
  216.                                  ../JPxxCM/tmp/JPxxCM_860_Process_Table
  217.             TYPE_libJP_JCOM68K = executable
  218.              CPU_libJP_JCOM68K = 68k
  219. libJP_JCOM68K.68k := CPPFLAGS += -I/usr/vw/h/68k -I/usr/vw/h \
  220.                                  -I/usr/vw/h/drv -I/usr/mc860/os/include
  221.  
  222.  
  223. OBJS_libJP_JCOM860 =  ../JPxxCM/tmp/JPxxCM_860_Comm_Util \
  224.                       ../JPxxCM/tmp/JPxxCM_860_Process_Table \
  225.                       ../JPxxCM/tmp/JPxxCM_860_Map_Ext_Mem \
  226.                       ../JPxxCM/tmp/JPxxCM_860 \
  227.                       ../JPxxCD/tmp/JPxxCD_860_Create_Pool \
  228.                       ../JPxxCD/tmp/JPxxCD \
  229.                       ../JPxxCD/tmp/JPxxCD_Util \
  230.                       ../JPxxCM/tmp/JPxxCM \
  231.                       ../JPxxCM/tmp/JPxxCM_Util \
  232.                       ../JPxxCM/tmp/JPxxCM_List \
  233.                       ../JPxxCM/tmp/JPxxCM_VQ
  234. TYPE_libJP_JCOM860 = library
  235. CPU_libJP_JCOM860 = 860
  236.  
  237.  
  238.             OBJS_JPxxCM_Init = ../JPxxCM/tmp/JPxxCM_Init
  239.             TYPE_JPxxCM_Init = executable
  240.              CPU_JPxxCM_Init = sun
  241. JPxxCM_Init.sun := LIBRARIES_JPxxCM_Init += \
  242.   $(MakeCWD)/libJP_JCOMLIB.sun.sa.1.1 $(MakeCWD)/libJP_JCOMLIB.sun.so.1.1 
  243.  
  244.             OBJS_JPxxCM_Close = ../JPxxCM/tmp/JPxxCM_Close
  245.             TYPE_JPxxCM_Close = executable
  246.              CPU_JPxxCM_Close = sun
  247. JPxxCM_Close.sun := LIBRARIES_JPxxCM_Close += \
  248.   $(MakeCWD)/libJP_JCOMLIB.sun.sa.1.1 $(MakeCWD)/libJP_JCOMLIB.sun.so.1.1
  249.  
  250.             OBJS_JPxxCM_Remote_Receive = ../JPxxCM/tmp/JPxxCM_Remote_Receive
  251.             TYPE_JPxxCM_Remote_Receive = executable
  252.              CPU_JPxxCM_Remote_Receive = sun
  253. JPxxCM_Remote_Receive.sun := LIBRARIES_JPxxCM_Remote_Receive += \
  254.   $(JPRR)/JPx/JPxx/JPxxC/JPxxCT/tmp/JPxxCT.sun.a \
  255.   $(JPRR)/JPx/JPxx/JPxxS/JPxxST/tmp/JPxxST.sun.a \
  256.   $(MakeCWD)/libJP_JCOMLIB.sun.so.1.1 $(MakeCWD)/libJP_JCOMLIB.sun.sa.1.1
  257.  
  258.             OBJS_JPxxCM_Remote_Send = ../JPxxCM/tmp/JPxxCM_Remote_Send
  259.             TYPE_JPxxCM_Remote_Send = executable
  260.              CPU_JPxxCM_Remote_Send = sun
  261. JPxxCM_Remote_Send.sun := LIBRARIES_JPxxCM_Remote_Send += \
  262.   $(JPRR)/JPx/JPxx/JPxxC/JPxxCT/tmp/JPxxCT.sun.a \
  263.   $(JPRR)/JPx/JPxx/JPxxS/JPxxST/tmp/JPxxST.sun.a \
  264.   $(MakeCWD)/libJP_JCOMLIB.sun.so.1.1 $(MakeCWD)/libJP_JCOMLIB.sun.sa.1.1
  265.  
  266.  
  267.  OBJS_JPxxCM_860_Receive = ../JPxxCM/tmp/JPxxCM_860_Receive  
  268.  TYPE_JPxxCM_860_Receive = executable
  269.  CPU_JPxxCM_860_Receive = 860
  270. JPxxCM_860_Receive.860 := LIBRARIES_JPxxCM_860_Receive += \
  271.   $(MakeCWD)/libJP_JCOM860.860.a
  272.  
  273.  OBJS_JPxxCM_860_Comm_ISR = ../JPxxCM/tmp/JPxxCM_860_Comm_ISR
  274.  TYPE_JPxxCM_860_Comm_ISR = executable
  275.  CPU_JPxxCM_860_Comm_ISR = 860
  276. JPxxCM_860_Comm_ISR.860 := LIBRARIES_JPxxCM_860_Comm_ISR += \
  277.   $(MakeCWD)/libJP_JCOM860.860.a
  278. ---------------------------  End Sample ------------------------------------
  279.  
  280. -- 
  281.  
  282. Eric L. Schott,    HRB Systems, Inc.    814/238-4311     els@icf.hrb.com
  283.   "As we acquire more knowledge, things do not become more comprehensible
  284.    but more mysterious."                  Albert Schweitzer, "Paris Notes"
  285.  
  286. begin 664 make.tar.Z
  287. M'YV0;-*(>0&@H,&#"!,J7,BPH<.'$!&"F'CC1@T0 $#$F'$#!@V,$T/" !FR
  288. MY,21(&K,@ 'CAHP9-F*&I&$CAHV,$7/JW,FSI\^?0(,*'4JTJ-&C#P,.;!)F
  289. M39DD;M+004JUZ$P:'S-N[)C5Y,B,)E/:D"%CHDJ6+F74@!$CI(T9&W%6G4NW
  290. MKMV[>//JI3I"P8B_@ ,+'DRXL.'#B!/W'9&@L6/'81>'G4QYXA$F3X0$80*"
  291. M2A I1XI0 4&DB)$D3I)02?+$R93*L&$O?DP[LE_%N'/KW@W8K]_.:-+, 6$F
  292. M#9LR(.; *3,F3?$RP^F@09[&C9DW<MJ$H9/FC1OBV$%(1ZX$BA0I(+0[+7X\
  293. M^AL08NH8)_/;._+P;; CIQ-&SIDR= QWG1P@V%<@@?G)@5Q_8P1'!W-TU*'@
  294. M'"Y,1,5T<^S7WW\!_C9&&-]5-P8;=9"!G!AO2 >"4G+TEP9T((!(!@AEX,%<
  295. M'?R)T1X(**3A0AD5PB''&V- E^%PV/TFY!MGM-C&'"FXX-L(I)51G!O[3;>B
  296. M0"W*\>)P,KX07HTWYK@C"DLV&<:3+("P9)%S'-EF>+_Q-\<:4(KW7GSS50B"
  297. M$>&QZ")T;8Z77E/(O5D&&1+"& :.;VC'W8=LL)'';V&0,:.A(K@P!AQUN!"&
  298. M"#3B\: ;<W2'JI^ $DCF&#B&H2.AXFFI7J)#%@DKHQ-B"JFD:5!J:8R:UHI<
  299. MIY_606J-IZ;J'843)6$&"'F\44>,"L(G'QMD5'<&?"FB\9N@7CKJQHROQCKK
  300. M<'<$UR (=618ZQORDOMEFR9>F649XW(YJ(!IR#$''5)Z!IIHK_6PI1AAN.F?
  301. M=@Z?T<:,<]0A1K=RO/#@P K\1H25U>U+;+?<>1<&&R , 044Q+$1QAG#Q;NH
  302. MGB",$2D<QBU8:7+6RE$D<3E3J(#*4!C!1!!') Q""T0\48447U!1Q!2CM9 $
  303. M"2B8]X02J V10L=4?JROL2-+I>K)*;?\<LP9;OJ>S6W@?%R,.\_1\\_L02?E
  304. M$$8CK70+9X!=Y=B&V@LC'>\%Y,8:(-PA%1ITHYRNF7I;&-QP9+P!HQLI8@H'
  305. M',,BOG"77\88W88 0@L<=,@9#F:VRC'GW(LSAC'';V;4L3,<VT'NQIHPH@#D
  306. M&16*@+762C"1A! IO* 4'B[8@,,:HH)PO!1;*\^\\P+E$?WTHHH0Y6],^%ON
  307. M<+$W]]R,8N11JW"'NH$E@?U1Y\:()<Y<'=DF+G<NB&.X%)4:Q!P\@8= AIJ<
  308. MK-HC)>U)X3-)F)H+*O8=A2G @1"4H/08IS J72][RVO>\[Y'O89],'DAY%[[
  309. M2"BJ"R[O@5*(X!1<@ ,;C,2"'@,9ELI6LM^A; YY&%@9VC"Z_@219HICG..D
  310. MXZ<+L:Z(Y\,6OZC$.3J 8'^&ZE\9_G<_]P5D8%*:0A:FH+T94A $'5P:$[#V
  311. M!"@4P0E70 T2GM"$(HA0($MC Q9B$ ,%B)&,RYOA!M$( C^.L8PTM"$A!1>$
  312. M8HF."410&\PN2 06]BUI(%A!&EO0!,&)+60\/!O*\N8>$"@H/W9 SA(AQZD1
  313. ME0%$I.*/?P T-"84(0A.^$(1L$"%!Q)R8W1X@0K\(![H!--FV0+F"\+@ FM9
  314. M49EB:":..G8;WECSFM?T"VT>8QLJQ08V4W#C$))PFB%TYC.A&4UI3I.:U;3F
  315. M-=^,YT1FL\W&=!.;^,QG8CRI0^3834)X"QJ/5NE,\;3(.-X" ;)(%9Y.S6%9
  316. MIMJBLU"5@L:Y2UP#O)F7Y&4H67)(2M_,C!*F\ 6E-$QA8JA9#@FG)8\"2#QY
  317. M6$[C'D<V$9 K#RP@E0@4.*N<'N@W(I@#&NI'AA;<E%0#\Y(;B#>1H Y5044]
  318. M:HP^%Q 8>2=T[QG/;Z90A^]LT0X!\TX;MDBPB2C@FU3(@AM+*I"30E& @P-E
  319. M1U%G19558:8J*L/CRD @$6S0IT'MJD\;6D,8N$ $9_VF7=G*,$(.DH)GC>8&
  320. MFPD"'2B,:)=\C2:71H1P%F&<F_G"$((PA2)0,S8B):F0).;6,"2V,FE=ZVHA
  321. MIC">'N>UE5GL;-VZP96",E,D$R442R<SMVEK/N*A*TA-@L$83NT+NR6D25GH
  322. MVHZA5@@CA>[#9J0P^L0FMD70KL2X6ZHR+9!?BH5"%<0[,4)"-BS-E2%[R3M=
  323. M"K;0NB5)[1<J=K& :<R8[K48QEZ WI* =[\"]B\P"6G; I=DL?P=\((5!MGX
  324. M/C?""@:PPNK;U1:RP2 ( $9!P"$( $    .@P[E S P4(Z$&)D8Q&=AP!Q!C
  325. MHR XV$*,!Z"&.XP!Q.0H"!:"L&,R3 S$\"@().*PXS;080T@Y@< !  )0NQ8
  326. M#640@T$2@   !   4MBQ4E[ E/7D;"]HELA$L-*5K7B$)"*!LTEL<(./I&0E
  327. M+7E)36S@EAG(( 9R2;.@!TWH0AOZT%59C#X7S>C>,*:>">BF/&'3-! XX0FC
  328. M*0(15-,9)"3A-:>QY:1'#0)ZUO.>C4XU/J<TD2*0K*9E?DI4Z$"JO%WQ.]*!
  329. M'\8@A!WO=:P\Y_E"K*$B%4*Z@,R((C8=%" B$IG(>B@ MA3N.)!;N8!W<J!#
  330. M"_K8[/Q!6]K"3O:LO];M9V--VM1^@;6QK6T9*,!<Z+(1K"@WG![]*$BY,I)5
  331. MY:"D(:GI2>.3S"=W6#B$5AM1U^Z/M@&-:+I<I<T<>3-8XCSQDL"D!F6Y,UK(
  332. MLI:+3"0F' ETPT=.\I*;_.15^0T4%%Z@';YA6H:"6WZ^<RN@S6U(. K9[:C0
  333. M!"A\(=3A=4(5FJ #H?: .6AX#PE(@-_<#H&$A!S#&'H[$>2QD&]'PZ3"6@"B
  334. M5"WM"B=C@P*L/EG,9OUO1"C/%Y#W62I\X81?^*/4FE!1IBU6>DO@K%U[T(0A
  335. M2,\C(V':%*0PA)\GP98]P!H0=% "%KZA!R6H>VF^X.<>[-0-=6@#J:SV@GAE
  336. MS YW>(&X8D-:J"O,=E2'#21-OR(RI#XDJY]L9@G9 GZ37@JL[\_K)_(92YZ=
  337. MD#ZK VY#\D G:(_U+7*#4J1W6M@,X>EG/+W4$VMU^V+=;[3'0L-:8(<QC!U[
  338. M2IA@A\V._:VGW>=L'X+;X2[W(M!=[^J->Q6<P-G!%Q[HB4?!XAMOW\='GK/A
  339. M57F7EWF;EP2=-P<9XS)+]0)3, 0QX (PL$RHD@9?4&[(P7F>YSP@<@8,Z( 0
  340. M^ (6.'QA47K19SHBR%R55()A,'TH*'YNX *S9T&WYX*$U!_#UWOV%8.F!"LG
  341. M6'S'5X+)IQ0G&!)D!'U=)5W>181,8(0OJ(,M0 9PL#1D, 9+8SL9DFUNTB@M
  342. M\""F,H03048I>(2G9WM*&(9-^'L*$WQ-1QF%M6GHH3 'F#%M, :%Y843\7R)
  343. M=$,@@ 9T:$/4!WYYZ +7IW5+@P1=EP9+8P:ILE1STP)S0$!)2#1?4%AQ)TY)
  344. ML!FT1P1C4('WXVQET ,6R%F5^!GFQ#3R1W^F^ 6>=@1(4'A?L#17@P)MF 33
  345. M]@)C (*=Z&U6@S6S6(OT@HOX\VR[*(LVY(;-DR%I (R>"(N\6(RT>(PGHXRZ
  346. M:( 9&()65UB"N#).>'YK!WYM]W99 WYQ-T9S)WF+55CU1WB&AWB*QWB!Z'^2
  347. M%X R8'ELX!W?LD4$"(MQJ&Y]&(&W&(*D-T/H>'IS4(>QL7H#N8?].'P(:4,P
  348. MB(:%-(,)V1\&61*]AXTZZ#,]B$O'EY!!*!#4Y )34 5&<!I8,#4ZH  B29(F
  349. MB9(@X'@OV7\OB8U*AP(C69))<))3\#4J22&3]08IF0!84WH;5'=*!P36PP,=
  350. M,T$NV$Q!.91FU%5&:3U(20)*V9/O^)0H4'J%-94D4)57Z2F.IY5X6)301GY)
  351. M4U$G='7:>'9J&8Y;<W69]9:#N)-+0X4M<)1)N91CT)1 J0!"B0)X2$%TV99^
  352. M\Y;5-WZ&F9;0EI@O6)=T.9=WN31Z:95\F96 B35XV)5GN9AVN9;8B):?"9?A
  353. M%YJ2J9F2V0)X69E*F0!(N8^@]P(41 ,DI$(O< 92IYJ?TYD^1XF>!5I,4)A%
  354. MXY:-"8BAZ9EJR0,@X ,O8")V\ *85RD= T^D5AFFMDVHIFJ",6;KIG M( ,H
  355. M9Q0/!Q)NUA4E\163$1,N819XEA8=YQ8V0 ,PAA'A69_V>9_X:7*2$6LVMQ][
  356. MLBTSXCHQ<B[E-6_G=47:\1]"TQ<-U@,*<%,]T$)"151&93YY$*%VXP(/V$<C
  357. M,*%05:%BT"5YH)IO8"(8^@8:JJ%^X:&+ J(B^H3;$088RDP;NI1+4 1%X'-4
  358. M$P12DY(*$'8Z$)@&DTX[V3$F$A]G$*0H0 )#BC \B35-2@4[&:1+)YCQMW3[
  359. MEWA?Z0(E4*55>F!8F@)BVC%0BDX(PWB0UY09NJ$595DI,WN;U0(XXWT*4*8'
  360. M(Z5HRG\=MJ8:F@(Z8#U80P0\&@1OUXYZ^H)\&@.0YZ<ED*;]5U%< )CV-!%5
  361. MJE]5NG]JBJ(;NJAYZI=?$YA@Z()O&:HY2)R&FJDIJJB'.D$TVJ?0)JB> 8Z8
  362. M:E^)RJF-NJIO\*E8XX/+(ZK0-JM[JJD:ZJA[VJHQH*LVN82^BC5%V)2I69DH
  363. M8*GZYXZT*JRJRJC$^H*Y2J8H$*53T*F3%09^"JC1BETD=:GN&*ZVFJ8_B:R]
  364. M9Y9#B7NR9ZI56:[9=:KJ&GG@"C[;6J?=:J9X>JM-*:Y_6JGF6JC3NJHRJJ\"
  365. M^ZB9N96X1YC0AH,==IKU*JW ^H(+BZVXBJR\*@3+"@3<ZJV=BHT$2ZZ6>JHF
  366. MNZZ-1Y/NBGN<&:^!:+'0AK'NN+(,FZ8N*SA88V%V"3]O( 9V<QP/HBU6=!QF
  367. M8$7[,R#PL8)K< ?],2-PPSO<(08(10>7XJ\D*[!%6;!L=+#HVG@;Q+*.]Y8^
  368. M:[8OE$&"-#UJV;-IZUSGBJ_3LZC(&GML"VUV2SW/2I4U"[8)2T)DVZYX^[8R
  369. MA+9" $,R1$*&B[C/);=K0+?0]D>(5)0C"[#?VK!2Z;7V&K=_2T%D^ZB#>[AJ
  370. MN[AJNZQN*[IPB[ 92[</NWH2V[-F^)"'29E\^[7WVKE=];D=EJNAR[BCZ;/+
  371. MB@(^*ZO4FKN1-ZJ'%$BB6KEW>KDZ:T/C:K#WJK(V1+8NV[NCB[UPFX=M*[R$
  372. MV[C4"P.L&Y@-"0-F6TD829QY6;N;2[PM6[TY^[Z&Q;NGZ[NDN[TQZ[VH*U_A
  373. M"[G,FKQ"()#02TW5,3! *J26^ZE(B73O005T!0)<( (%S!^5$L$@4$4U(R$*
  374. MX@9T,"SY$C)DP 4[ ,&2VF"O8S\9+ <;;$6[-@:((P>^I@"N!")4^J_-BZ9#
  375. M8$NX%'F F1V)&"/29$715%#(A!S#! (J4 (O:6T&7+0N@"IE\ 7]4QW7<98Z
  376. MG$N[U$M!\*0V3*0X?,7Z2JF:>:7MF,.WY 2WBJUFC$M<Z@+HNL9H/+X^W +3
  377. M,L;K5<9@O*YX?,9IS*58 Z5J%5Y[O,-T.Z9::[E??,8LI*\]3$1T#&V#[ 2+
  378. MW /Z%;]ER[Q>W*APW)2,G !S7,=+.JV;;%^-6LD<ZZF0+,I7S,D] *N$:LD.
  379. M>\@WK,FKC(V=_,FIO'B;;,N4?+"6O+._<01;Q%?;L2!;XG+38C//9C-=13 /
  380. M2B0UO+4] '13P,.NV0(U4X]4" 8?8D4:$S<O *4]MXY!-W0I0,<"Q0<&I5#L
  381. M? )<P!8R< (@H,YV@X5/N#1U  : "038C,O?# ?AW*WC#'1?('1TA\[M(3C"
  382. M/#_%O"4#4R#3@G/<@27#L3]=)16V>#/VP<%2(M$A4Z$#4[!=?*:-2LW6S,\.
  383. MK6T>3=$@P,W; 0+_'- \YW,$;=#G3$KSO,XZ!0+N#,_R3,_8847WW +YO,_]
  384. M[,C3$M/B3-.'5\X'34H*/<PM4K0-\R!Q@QU&U)]X!3D-\T56]'(\ U#(@=/%
  385. M=6L@$&MY(R54XD2F!!VZ8T6VIAWN,U2I! *, CK!TM"_,U9"8Z>9/,U-7<U^
  386. M:M0TTB UV8XFW<O99<EC\):('=B-ZLI?P-@5Y0,^ --T ,Y+3<X%;<X(#1W4
  387. M]$\^4P8M$*)O< =7*-+2;-(*C,W=C-F:+=!,;4N=_=3IK-/M_,XQ$,\Y7<]"
  388. M/2-$W=LSTP+(<0)S0 %>P 4HX (JP 4IL'04X!P@L 4_S 5MT04C/![?L8)X
  389. M^1KKJ]2RS=DV_=D4,AR.F%)C/)RSNY9EAYR1*P2B67?:MS3=!\$Q,,+%00$_
  390. M#=-6ZP:RB5'77#,O#=XS+=Z>34K;EM/G9AZU.&;<?=Z3^=V9#=#0\QX0GMZG
  391. M29ILJ=Z,R:SPC9R$[<,_3. #W=2U?=,"1>*S[=0HWAX)KN(&;ML,=#MP$ @[
  392. M)@8/8A /ZF7P, E%%@9JH.-XX&68\ 8[1@<Q$ 8Z;F4 @ FQL&-W<&0%H0"0
  393. M,&5P0 DW7AT$D9]5$1(5<1%:$7'F27&P@1)GD6<7UQ9K5A/@29]<_N9P'N=R
  394. M+A3]K6X(]V-S[A/C&>9<(6<@@)XFL1%DD7%G[I[R&1(U\.4BE^>,WNB.#N?"
  395. M=%8J !SP S^&(FTOX, "(QPO\!GAU-:@LX)#1%8'I%#61BJ4/AQIXB22GAQ)
  396. MISOL@QS",C,B<"ND(B/P@<*&0K60(P96HA_3'8==\ )U;FVM[D3?T2Y;%"/P
  397. M<H57%"=U<#A:(G.X7NN(XE.&<AV5<MH)I6OVD9)('!(/&"TP-QW9 C\-(P)T
  398. MC%1+]"ZB8R@U1^WG4BC3\1URT%6M'A;[6.R(LM5D,P?MCB%N8H4S\^Z7<RA.
  399. M 5*3/A$RX"=%P ;(6.Y\11U@TM9GH#O]<2#)D0=M@"(!085)=,' @RY[12"2
  400. M'FE!%2D $AQ+Y0*:I_$B,&RS1BI8-.T:3.HM_,(X92QN</*F=(3[KN4UMTID
  401. MHRAQDE!5-#.^7H]WH/ A,0,.#_'(<>_?$?3^/?0T92@ +Q4$I.H$;URY-AS&
  402. MCL2MWBH"+B\H( ,5)2MOD$KT#C]8OS,ULB9RI25V,U:YUO)$%!XR+Q6M;FLU
  403. M/]9OL.V.LU3Q,S_@OO :X0*1=B%PW^]"8B5\54HRP^RV=O<K[RTN7R"I1#]:
  404. MW??.'.X,S_@@("WO S!S@^X;W_&#'RS'O 9O+_;]+@)C0 ;&'4M9-1T^G_.]
  405. MEAS+H3ZT Q_N4W"+ R\<;!S,KB 7[S($ OBW@\21IB!F,/'W,S,H0+3#(2RG
  406. MKU#*WP*W4AU2(3Y./Q%0W_@'7W/:_?.H M,9R.].X>^&\@9PT$//KP(H_\@D
  407. M@.ECAM8Y P+@!OH]H/M]OYDWH+R+XBL)AN*4A 'P9_CD'_T;>'&BX.6^QY?P
  408. M)-VQ.WCH;F>8B%1Q!K $Q7@/,D-@0#2R(6T0WE@3*!_B._ );K'5G$FKHVL)
  409. M)=WQO^-PZPA4"C2!Q&%($)&&T2W,P/1;878M8/ :&%8K0(2Q:'6P0H7A/"'H
  410. MPGJ-GY@"94!DY#\&]P)<@!5\ >4!#^"!NT('%(3@<Q5X8$V #KTAZ5Z 7PA%
  411. M/&!@S!B!X +0@ \X@[GHV:3!+JCYW" <#$;((0T&$8T14_2&'1P!:!"(S '9
  412. MQ!\(QA\,A'L08[3!-P@(XV >%(2=)RJHP45X!LW N; 29RT(W"B_\,%V2!/0
  413. MA$5 H5@].^<4$,L(V"(]D!/V$__'X!2*M#&%G9 \,+A/>*-$X?Y#%'D#%JY"
  414. M6E@$4 .GB7GB)ORIPK'Q_T"A+QP-(N#_!4,Z8'F&(2CAA;J$ER@4EZ<+QP8Z
  415. ML0)3( EH@5 8 V" #* !SG"'$+3?] 5L"?V1 1X!!U 3[; _4,"&& ,L8$/8
  416. M 1;P5>  N>%@V (W[0 9]E20F J0ARQ !:B >K@/]T!BJ0Y6Q&>P@#2P [B)
  417. M,$D.A3!>M(GJ8"+P !(S@Q,!(1(',^ RSD /@ $-$3(\Q)$@W3B'0EEW&J\M
  418. M2#<)9@9(A0K B+?&B@Q J? 10V*D&8E79%J81-"G$7+B65N&%_$@XL-N00:^
  419. M0(/ 3)$XZE9C,T #&L&L&XB4*Q:\V_^1 39R*;H)>7,6)T" RG@J  _3"
  420. M*#Z5?3@1DDH=<&$0\:7%!Q](%M/BI*@9_5 -" DY, /+P!88A^*D'+X1[)98
  421. MFICKZXH$0BZJ,-!W%TT<.32'?+$L%L*_V ]5 ): 6O[!#FR!:Y@-MV%BA(L9
  422. MC_?!L,)(VP[C7FR+@#$]4*"\L=?L(E[\+'K1"5Q&-X3$H%!;-(MH,>>UQH"Q
  423. M#Q/+0ZQ';X!Q,*U'MO7HP+OP#F1#^QD\"@@D@N)$8%H]H@?<MRO" ][A"$L#
  424. M*V %?(V28!!+@G1# 4GE?L0-%* "W&%D7 %I( 7DE'7' M0>&E$8YDL$54>3
  425. MX ,[HG)LBR4A1+V2-0 ?0T(?P"WW\2!."Q00 MKCRT@!W 2W/$0GDBV@UG P
  426. MB>JN)2:'@-=R!-S.&(ZR+^%9CHDW(,H "SA!N)%Q- P@POH^WNO3>+:&Z$'#
  427. M+%8JFH6J,&M:93(D02"H&;V'<0P)ZU$Q^@PXX#Y00!L8C3FC-+( 7G@,4T!#
  428. MA&F33FP\"C:@M+[#AY 7.Q$41L/18&NDHG7<CQQB#-P!,H "6B0+.(V%QQQ6
  429. ME!Z@,(0.$PA.ZE$$+0<5%AY0@ B  U-2?-3'B5 CB@T*.%9K$@3<QR?)(ZID
  430. M%%(8\@\5!HPJR01UGI@ZCY:F"GS)Z6@28F1(&)-#@D"8R3QY+@*&FA1!;=**
  431. MO$D?*8+F9$@H U(O3(:%=M'_4 "?)!!IZ)5HBCT)A?YD".B2@A),)@"#F "N
  432. M(\9H 3Z@*%:']W J_]RGF@BL,B/NQT\)*XOB7CL.W\$'4)@N""Q1P(CD)7_2
  433. M!)@ P!06L&,7' /;T03PRECY!4KC%GB5U/)7+CMLEE2*Y;&D BF@"XA'2642
  434. MON661(]C*M+ 2&89$AXBH.@JM2,3WJ@EV9^>8!BH:U+A0 */ E@JB@UNC$)2
  435. M45W*R$^1!VPDC@26P(,%8$M?"3PHI<"$#PJB*>S#AWD?U67%M)0E8430BT5!
  436. M*NUAG,R/)>$A!H%G<O# (D)L$W< .= U?_)2;N07((W[4G3HE?& 0+1$:1R!
  437. MKF4RV!H]:?A$I)(DD>'!X"&'?#$DX5J.W)?&TABVDR@1D<*"$SAM- )5-(HB
  438. M:#3G1IL<&&"BXBD_C-?\<H:?,'W%1O5Q2(\7+#!D=8!]/ \$G('W@.LR9*E+
  439. M@&5@^64\6R/]J%^18!_#3TLDD0KA)$,"IYP;-A)1@#\KPB5MI:8T"3Y#NC0Q
  440. M@_DRC^9880$F8"V: 4H9%JYCXJR5YJN0)("'. 2L!0O$8!"O$+:U'[A%[F:]
  441. M;#5XP%^^ ?G'+S,'L[L5[+(%XHAFEU PG:9+%8/0T[&,N@@M J9\E)B04NKY
  442. M1)OT!3Z-%"@"1P %2,X)0@>^0'XP$>F25;K+_J?ZMB;STVJX+F7NH7MY+&H?
  443. M[@N.V$%!H,505R2DA,"$"MVBFZD2E<D]7Z?@G#78DT!%RA6Q.J.0Z'"=#</:
  444. M!,4$,!,)IT:8F+^3/@(FC'DIA>=U)"F?A@DX@26@/.N #V2>SK-$E8'HV<.H
  445. M4*C,%$F$<<+,QVDEL61J=)B6DPKQ '3)+@/HQ,24&8)=YDJ(.",+ILO<H!:R
  446. M1?I(( D"@@"T&RL?<J@<R/?0(O?G1&B16\!G=(&D>!,GG1/0'2CC062'ZM#0
  447. MM!X=;'D^M-0E1Y^Q;9ZCL 2)5Z0%M   24.G@"RQ(B\-%?)+M\FT B9UC)W#
  448. M$XBF@2X *$_ "S@!M[)0HM&!22,UJ..TD-)2C:Z &" N'698T*-\E)" Q#FZ
  449. M@Z*.4R25?;+7^,@B^A.=@K)Y=J_O3]4^8Y$MS*A)"*'+B80V!E:9 (BB6'R*
  450. M"N.^V9.'B#[S6M$BBC5C1@3,!% QPP(*Y1>;5%(A2NQ@)CLGK+M@*2*5T@R>
  451. MV"(?96-0$!%"#KB!23DQ62DA-:%*$004@=19).<'_62=EK0DM%+[R"XO9O!,
  452. MH:L2,$W/U+=#K<C8;'T@[VQJ/.LY-[TFZE2=K!/7Q4[\B0,)RNR,%[63"MY.
  453. M3J<[&RG(8"#[TX0.4!%4*?%C\WF(4-"*U($H5',V1.8A=5XM*":6QR@/MX #
  454. ME /1D8TJ#&M7"D,B#34" >.A&=2Q@@_AQZI;$R(/A_;-Z]@?.>++  '*T@0.
  455. M3@#)2$T?@D2)V5/PP4L:4?)BA*2"#"&!)X:'S=<D82*NQ"W7,4I.R4\Y!'&*
  456. M!]62(*!6>DDP&18,Y400$@AQ/P+#][<_2@"[H"E6E0NX 1%P(1_F#TVD,(P%
  457. MO- [2CE- @%EJ)'1H5;%B$I($J0(L*@/$;C\L-[X+OHF'2V8@I$NXL*<P0(X
  458. MQ%>)-@Q.3-7'I-+-4$!>K8LL0-KPPK(Z$=#J&9",#Y6M*HS#NE>/PX^,J\5B
  459. M"IX'9&-FYH9=9:$$T[#.1="76!F<L%&:JH&Q@M;M(%H'XS(4JP=SBS3,^NA8
  460. M(>M:70$2%0105D<Z:R[KI).KRI"WTL2>ZD^/8YE, ^^1.3K'*Q(=62H-M1DT
  461. MLJVQPZA@^#8J61D.G[6VJM4N&%%[0'>4A^"QK&K7R(I;>\!2K8T3(7'6%GEC
  462. M!W@$+V0!M761,E(BD/N00\V1BO<QTH4[)D DT(8=<!'G90XDOIIQ,W(&B6H#
  463. MVN%<_"G:AY>^Q?JJ.=9F#""6<%<$%&P9?#><,;QX1M78%EFC"G"-?;$+GD46
  464. MUB=GHQQ KS24C(8'WL@@@6/,"3LT(^R90+X)$Y$C<EV.:: Y^H<Q\!R;*VXQ
  465. ME-<Q.T)+., =O>-C#:_CL266QW-I.)NJ"/*/'O&^B2!]&A8(*,@<GB6U([)4
  466. M>R(@)QV!5"6V Y>>1 5)5R$'<!2.$S!"%L?5(?WTPX6<#&YS0W(\LAE.BU]X
  467. M")$TY5N6R#+PZ/JLG_VS@#;0"MI!2V@+K:$]M'FNSB':AN#E+ )Y$G-^#M!1
  468. M!C/7GO1,#5!S(( F[+9%MV@[K:==M.X/2."Y3KOG- *DK3A_SL^9VD''GC:.
  469. M6CAT9D'1N;E/2VMKK:#5KUX6 T8'+6$[^P/N['12X-,I"/(YZO ATZ*H0 +5
  470. M.3Y5YV]87;@3*IXSUCG(XS CD&T-E+:!;^"I"%]7(8.=YQEVH=;I(3N+LNP:
  471. M1@A\=A5#VLFZ2)%@J^VMP'9:0MLQO6Z'.;Y=OEM\Y(Z24CQFYU87)-=C)?45
  472. M!\H[,D#OEAW5N[<AL_T)O7Y']+1>P(,1O","@KWSAW#N;<-K-5)/NM',?=LP
  473. MR"F!" _?U$.&O-)(\FAF1+)_"@7SY3WB\?(:"NBC>;C&YBG!H0A6=YYV\WE4
  474. MC_TA(&*W<-]?P]421F\1?8ND%^N8WO@# 5 /X\J+G#L*L9Z*<+C_%N)^O1A+
  475. M<2L@V0MW9N]((H>TM_90A-O;?G%/<H3!&TEP[)[*6[F;C^\MP[]'/6.NX"-\
  476. M"27!(KY[^X#,'W%T&))/!(J.RM<P+M_997DLE_/Q%<O7_T#?T6UXD<;TR5CG
  477. MQ^Q"KNM+(K$/!](^V_=0J"YZ0;D]-'W,#J67-UN'.&UFR*_CQDVNJ=6$ \[-
  478. MNZ73^F&_:;O]1(  ?)_A;WR(/J1+^I8M#DQ_5&\X-%V&F_6TA -4%?7O_M4Q
  479. M_2<0..L]E87!!@"^7J<P.*\MP@T)<'.Z)I3?^RP@8-N@NL11X5W 2@<F-"!T
  480. M2 ,=<&;8C68W^4;@I6N%-0>GW< 5."/<Z;()=S"PNBJ4NGAM!1S-Z7=F0 <R
  481. MNQY(.FFN^-1Y1=#M(L&;YW^+ZA.,@F1#LTJ!*G@%L^ 6-"@(F&G-O;C!0"YL
  482. M(\2#(& .KL%H<@@=809.*G60$2+"08BUE@.%Z, 86 \.PB9&"2_P,E+!S2E@
  483. MM. 1' F% QT@ S/8$N8+>6E:1D LY,&B4.%>/41A"O6D&0B'R!<])$,&5PU!
  484. MB6(%A;:P^-)?),R#C^'\789->(<4PQMEA9=P\EV&S= '[\*?*0T[A>:API11
  485. M&W)#;P@.Q?#8.*IO! 2@0QJ@#CO&=.41[S >1D9ZZ ;L@#UD-OC0.?)#K_@/
  486. M][! )(@*8#UJ1(7($!WBI&MB$O'65,07J1&A+!$=I9..).K$]]!OPP-35"C.
  487. MP27"1(W8/R\Q#=7$8I8G?F*>.%)I;E$\B@'#%#_$3PR+"43FV"&MF"IVP:T8
  488. M$[/B'.#%H?$KAD7 ^!I%+%IL8MJ"+8;8[< 8,]YN/;X9MA*A1L18C)DQ%0J-
  489. MSUC91.,->QG]XC5NC-HU#5M&T-@/@2@<YK"))32.580Y5K9Q7J3&B<7#@E@9
  490. M.6*#X/\UL2CV-JY.W;ABIT69;9 O]D&FV1G[(FUL<LVQRQ4Z2L<?"U3WHY#=
  491. MCM_U.X;'),M5S6/A3(].-BQ88BD;%JBL6?6G^I%'9-G_&"!#9JZ=>(TCS+Y4
  492. M,MMBC22,A9 $F<W^.@7Q9L-"G%U]=/9#WMG^YS/G)8ED%A+E1 :^$[0BE^#_
  493. M=8(O\J>6!,(:7>TH.[:0/')I^M;!433-FM9-Q6282?:_SQI4 824I)(=U#"^
  494. MXS?"9)<JH3RC86&6*LHSF295*YMDICP"3O93.NDIH1 A8908@Z@V01CV)PNG
  495. M63Z<)4$M\P@1@)<=I5ONEY)2+E=9W/)* ;/?# Z \U,"'U&9ETME15&JJ?)3
  496. ML4I7&3!Z)2>BE9KTIZK+ZS@M&68; ):9E(5ZRZR<+)>E5^41A#5:EN9J"3RN
  497. M96?.EFL"-7-+8KE%DJ9/1I;BLJMZ57,)*,U7'!7-)OE/6 L"U3#T;%K[0NTS
  498. M7X;4!2$_X?*_C*)WU2G+5@YZFTWS!)V8\3%B"E"*64WW:5C0F&VC8Q[F*SL1
  499. M1";)]*AOX&0V#O99US*$3(RM-U-FUE1#<3/!6L[4R/V/9WZ+GAQ>@"8"";A$
  500. M\ZWUIYOIFWOATJP0)^AIWH&H63&2R5"IFLCA:@8(TY'\1N_U?,ZE;UJ$S8KG
  501. E>+T/G#V;!?<[K,TQNH_?II;PN%JM;FXPT]D^R,;>3,H6I5-J!\ZE
  502.  
  503. end
  504.