digitalmars.D - D language lexer written in D - dlexer.d
- James Dunne (572/572) Dec 18 2004 Hello all,
- Matthew (4/22) Dec 18 2004 Excellent! I shall be checking this out in the new year.
- Ivan Senji (15/32) Dec 18 2004 would
- James Dunne (569/569) Dec 18 2004 I have updated the dlexer.d module, so please use this version.
- J C Calvarese (10/16) Dec 18 2004 It sounds like you want to check out dsource.org.
- Matthew (13/30) Dec 18 2004 James
- James Dunne (77/89) Dec 18 2004 Sure thing Matthew,
- James Dunne (733/733) Dec 18 2004 Hey all again,
- Vincent Risi (2/735) Dec 24 2004 Why not produce a Coco/R for D instead?
- ahiru (54/54) Jan 01 2005 The parser couldn't parse below code.
- James Dunne (5/59) Jan 02 2005 I never said it was complete ;) Thanks for the bugfix, but I dropped th...
- Simon Buchan (25/48) Dec 18 2004 Any particular reason you kept the whole TOK.TOK... naming system? Just ...
- James Dunne (31/41) Dec 19 2004 I kept the TOK.TOK naming scheme out of pure dumb ignorance on my part ;...
- James Dunne (2/10) Dec 19 2004 Lousy kharmic retribution... that's what I get for correcting someone el...
- Brad Anderson (13/17) Dec 20 2004 This may be a good idea. I'd say put them in the Bindings project,
- James Dunne (9/26) Dec 20 2004 As a temporary solution, that sounds great. But I have a few issues wit...
- James Dunne (8/8) Dec 21 2004 Anyone interested in my dlexer and dparser modules will take a look in t...
- Ivan Senji (21/29) Dec 22 2004 the
- James Dunne (32/47) Dec 22 2004 Glad to see someone besides me benefiting from my work! And since dlexe...
- Ivan Senji (25/80) Dec 23 2004 It
Hello all,
I thought as a nice Christmas present for you all working so hard on D, I would
contribute something some of you might find useful. I've been working hard on a
lexer (tokenizer) for the D language. Attached to this post is the lexer module
written in D!!
I began work on it for code-completion support for my D IDE called Orion (over
on dsource.org). Don't bother checking anything out there yet, as its all in
ruins right now. ;)
I tested this module somewhat, and it successfully lexes its own source code!
This module could be useful for a few things, like:
+ code-completion database for D modules
+ generating CTAGS for the D language
+ indent-like program for D
..and any other D source code tools you can think of.
Merry Christmas all, enjoy!
Regards,
James Dunne
begin 0644 dlexer.d
M;6]D=6QE"61L97AE<CL*"FEM<&]R=`ES=&0N<W1R96%M.PII;7!O<G0)<W1D
M+G-T<FEN9SL*:6UP;W)T"7-T9"YC='EP93L*"F5N=6T 5$]+('L*"51/2W)E
M<V5R=F5D+`H*"2\O($]T:&5R" E43TML<&%R96XL"51/2W)P87)E;BP*"51/
M2VQB<F%C:V5T+`E43TMR8G)A8VME="P*"51/2VQC=7)L>2P)5$]+<F-U<FQY
M+`H)5$]+8V]L;VXL"51/2VYE9RP*"51/2W-E;6EC;VQO;BP)5$]+9&]T9&]T
M9&]T+`H)5$]+96]F+`D)5$]+8V%S="P*"51/2VYU;&PL"51/2V%S<V5R="P*
M"51/2W1R=64L"51/2V9A;'-E+`H)5$]+87)R87DL"51/2V-A;&PL" E43TMA
M9&1R97-S+`E43TMT>7!E9&]T+`H)5$]+='EP92P)5$]+=&AR;W<L" E43TMN
M97<L"0E43TMD96QE=&4L" E43TMS=&%R+`E43TMS>6UO9F8L" E43TMV87(L
M"0E43TMD;W1V87(L" E43TMD;W1T:2P)5$]+9&]T97AP+`H)5$]+9&]T='EP
M92P)5$]+<VQI8V4L" E43TMA<G)A>6QE;F=T:"P)5$]+=F5R<VEO;BP*"51/
M2VUO9'5L92P)5$]+9&]L;&%R+`H)5$]+=&5M<&QA=&4L"51/2VEN<W1A;F-E
M+`H)5$]+9&5C;&%R871I;VXL"51/2W1Y<&5O9BP*"51/2W!R86=M82P)5$]+
M9'-Y;6)O;"P*"51/2W1Y<&5I9"P)5$]+=6%D9"P*" DO+R!/<&5R871O<G,*
M"51/2VQT+`D)5$]+9W0L" E43TML92P)"51/2V=E+`H)5$]+97%U86PL"51/
M2VYO=&5Q=6%L+`H)5$]+:61E;G1I='DL"51/2VYO=&ED96YT:71Y+`H)5$]+
M:6YD97 L" H)+R\ 3D-%1R!F;&]A=&EN9R!P;VEN="!C;VUP87)E<PH)+R\
M(3P^/2` ("` /#X ("` /#X]("` ("$^("` ("`A/CT ("`A/"` ("` (3P]
M("` (3P^" E43TMU;F]R9"Q43TML9RQ43TML96<L5$]+=6QE+%1/2W5L+%1/
M2W5G92Q43TMU9RQ43TMU92P*" E43TMS:&PL"0E43TMS:'(L" E43TMS:&QA
M<W,L"51/2W-H<F%S<RP*"51/2W5S:'(L"51/2W5S:')A<W,L" E43TMC870L
M"0E43TMC871A<W,L"2\O('X ?CT*"51/2V%D9"P)"51/2VUI;BP)"51/2V%D
M9&%S<RP)5$]+;6EN87-S+`H)5$]+;75L+`D)5$]+9&EV+`D)5$]+;6]D+`H)
M5$]+;75L87-S+`E43TMD:79A<W,L"51/2VUO9&%S<RP*"51/2V%N9"P)"51/
M2V]R+`D)5$]+>&]R+`H)5$]+86YD87-S+`E43TMO<F%S<RP)5$]+>&]R87-S
M+`H)5$]+87-S:6=N+`E43TMN;W0L"0E43TMT:6QD92P*"51/2W!L=7-P;'5S
M+`E43TMM:6YU<VUI;G5S+`H)5$]+9&]T+`D)5$]+87)R;W<L"51/2V-O;6UA
M+`H)5$]+<75E<W1I;VXL"51/2V%N9&%N9"P)5$]+;W)O<BP*" DO+R!.=6UE
M=BP 5$]+=6YS-C1V+`H)5$]+9FQO870S,G8L(%1/2V9L;V%T-C1V+"!43TMF
M3TMI;6%G:6YA<GDX,'8L" H)+R\ 0VAA<B!C;VYS=&%N=',*"51/2V-H87)V
M+"!43TMW8VAA<G8L(%1/2V1C:&%R=BP*" DO+R!,96%F(&]P97)A=&]R<PH)
M5$]+:61E;G1I9FEE<BP)5$]+<W1R:6YG+`H)5$]+=&AI<RP)5$]+<W5P97(L
M" H)+R\ 0F%S:6, ='EP97,*"51/2W9O:60L" E43TMI;G0X+"!43TMU;G,X
M+`H)5$]+:6YT,38L(%1/2W5N<S$V+`H)5$]+:6YT,S(L(%1/2W5N<S,R+`H)
M5$]+:6YT-C0L(%1/2W5N<S8T+`H)5$]+9FQO870S,BP 5$]+9FQO870V-"P
M5$]+9FQO870X,"P*"51/2VEM86=I;F%R>3,R+"!43TMI;6%G:6YA<GDV-"P
M3TMB:70L" H)+R\ 06=G<F5G871E<PH)5$]+<W1R=6-T+"!43TMC;&%S<RP
M5$]+:6YT97)F86-E+"!43TMU;FEO;BP 5$]+96YU;2P 5$]+:6UP;W)T+`H)
M5$]+='EP961E9BP 5$]+86QI87,L(%1/2V]V97)R:61E+"!43TMD96QE9V%T
M92P 5$]+9G5N8W1I;VXL" E43TMM:7AI;BP*" E43TMA;&EG;BP 5$]+97AT
M97)N+"!43TMP<FEV871E+"!43TMP<F]T96-T960L(%1/2W!U8FQI8RP 5$]+
M97AP;W)T+`H)5$]+<W1A=&EC+"`O*E1/2W9I<G1U86PL*B\ 5$]+9FEN86PL
M(%1/2V-O;G-T+"!43TMA8G-T<F%C="P 5$]+=F]L871I;&4L" E43TMD96)U
M9RP 5$]+9&5P<F5C871E9"P 5$]+:6XL(%1/2V]U="P 5$]+:6YO=70L" E4
M3TMA=71O+"!43TMP86-K86=E+`H*"2\O(%-T871E;65N=',*"51/2VEF+"!4
M3TME;'-E+"!43TMW:&EL92P 5$]+9F]R+"!43TMD;RP 5$]+<W=I=&-H+`H)
M5$]+8V%S92P 5$]+9&5F875L="P 5$]+8G)E86LL(%1/2V-O;G1I;G5E+"!4
M3TMW:71H+`H)5$]+<WEN8VAR;VYI>F5D+"!43TMR971U<FXL(%1/2V=O=&\L
M(%1/2W1R>2P 5$]+8V%T8V L(%1/2V9I;F%L;'DL" E43TMA<VTL(%1/2V9O
M<F5A8V L" H)+R\ 0V]N=')A8W1S" E43TMB;V1Y+"!43TMI;G9A<FEA;G0L
M" H)+R\ 5&5S=&EN9PH)5$]+=6YI='1E<W0L"GT*"G-T<G5C="!4;VME;B![
M" EC:&%R6UT):61E;G0[" E43TL)"71O:V5N.PI]" IC:&%R6UT)=&]K=&]S
M=');5$]++FUA>"LQ72`](%L*"51/2RY43TMR97-E<G9E9"`Z(")R97-E<G9E
M9"(L" H)+R\ 3W1H97(*"51/2RY43TML<&%R96X .B`B*"(L" E43TLN5$]+
M<G!A<F5N(#H (BDB+`H)5$]++E1/2VQB<F%C:V5T(#H (ELB+`H)5$]++E1/
M2W)B<F%C:V5T(#H (ETB+`H)5$]++E1/2VQC=7)L>2`Z(")[(BP*"51/2RY4
M3TMR8W5R;'D .B`B?2(L" E43TLN5$]+8V]L;VX .B`B.B(L" E43TLN5$]+
M;F5G(#H (BTB+`H)5$]++E1/2W-E;6EC;VQO;B`Z("([(BP*"51/2RY43TMD
M;W1D;W1D;W0 .B`B+BXN(BP*"51/2RY43TME;V8 .B`B14]&(BP*"51/2RY4
M3TMC87-T(#H (F-A<W0B+`H)5$]++E1/2VYU;&P .B`B;G5L;"(L" E43TLN
M5$]+87-S97)T(#H (F%S<V5R="(L" E43TLN5$]+=')U92`Z(")T<G5E(BP*
M"51/2RY43TMF86QS92`Z(")F86QS92(L" E43TLN5$]+87)R87D .B`B6UTB
M+`H)5$]++E1/2V-A;&P .B`B8V%L;"(L" E43TLN5$]+861D<F5S<R`Z("(C
M(BP*"51/2RY43TMT>7!E9&]T(#H (G1Y<&5D;W0B+`H)5$]++E1/2W1Y<&4
M.B`B='EP92(L" E43TLN5$]+=&AR;W< .B`B=&AR;W<B+`H)5$]++E1/2VYE
M=R`Z(")N97<B+`H)5$]++E1/2V1E;&5T92`Z(")D96QE=&4B+`H)5$]++E1/
M2W-T87( .B`B*B(L" E43TLN5$]+<WEM;V9F(#H (G-Y;6]F9B(L" E43TLN
M5$]+=F%R(#H (G9A<B(L" E43TLN5$]+9&]T=F%R(#H (F1O='9A<B(L" E4
M3TLN5$]+9&]T=&D .B`B9&]T=&DB+`H)5$]++E1/2V1O=&5X<"`Z(")D;W1E
M>'`B+`H)5$]++E1/2V1O='1Y<&4 .B`B9&]T='EP92(L" E43TLN5$]+<VQI
M8V4 .B`B+BXB+`H)5$]++E1/2V%R<F%Y;&5N9W1H(#H (F%R<F%Y;&5N9W1H
M(BP*"51/2RY43TMV97)S:6]N(#H (G9E<G-I;VXB+`H)5$]++E1/2VUO9'5L
M92`Z(")M;V1U;&4B+`H)5$]++E1/2V1O;&QA<B`Z("(D(BP*"51/2RY43TMT
M96UP;&%T92`Z(")T96UP;&%T92(L" E43TLN5$]+:6YS=&%N8V4 .B`B:6YS
M=&%N8V4B+`H)5$]++E1/2V1E8VQA<F%T:6]N(#H (F1E8VQA<F%T:6]N(BP*
M"51/2RY43TMT>7!E;V8 .B`B='EP96]F(BP*"51/2RY43TMP<F%G;6$ .B`B
M<')A9VUA(BP*"51/2RY43TMD<WEM8F]L(#H (F1S>6UB;VPB+`H)5$]++E1/
M2W1Y<&5I9"`Z(")T>7!E:60B+`H)5$]++E1/2W5A9&0 .B`B=6%D9"(L" H)
M+R\ 3W!E<F%T;W)S" E43TLN5$]+;'0 .B`B/"(L" E43TLN5$]+9W0 .B`B
M/B(L" E43TLN5$]+;&4 .B`B/#TB+`H)5$]++E1/2V=E(#H (CX](BP*"51/
M2RY43TME<75A;"`Z("(]/2(L" E43TLN5$]+;F]T97%U86P .B`B(3TB+`H)
M5$]++E1/2VED96YT:71Y(#H (CT]/2(L" E43TLN5$]+;F]T:61E;G1I='D
M.B`B(3T](BP*"51/2RY43TMI;F1E>"`Z(");72(L" H)+R\ 3D-%1R!F;&]A
M=&EN9R!P;VEN="!C;VUP87)E<PH)+R\ (3P^/2` ("` /#X ("` /#X]("`
M("$^("` ("`A/CT ("`A/"` ("` (3P]("` (3P^" E43TLN5$]+=6YO<F0
M.B`B(3P^/2(L" E43TLN5$]+=64 .B`B(3P^(BP*"51/2RY43TML9R`Z("(\
M/B(L" E43TLN5$]+;&5G(#H (CP^/2(L" E43TLN5$]+=6QE(#H (B$^(BP*
M"51/2RY43TMU;"`Z("(A/CTB+`H)5$]++E1/2W5G92`Z("(A/"(L" E43TLN
M5$]+=6< .B`B(3P](BP*" E43TLN5$]+<VAL(#H (CP\(BP*"51/2RY43TMS
M:'( .B`B/CXB+`H)5$]++E1/2W-H;&%S<R`Z("(\/#TB+`H)5$]++E1/2W-H
M<F%S<R`Z("(^/CTB+`H)5$]++E1/2W5S:'( .B`B/CX^(BP*"51/2RY43TMU
M<VAR87-S(#H (CX^/CTB+`H)5$]++E1/2V-A="`Z(")^(BP*"51/2RY43TMC
M871A<W, .B`B?CTB+`DO+R!^('X]" E43TLN5$]+861D(#H (BLB+`H)5$]+
M+E1/2VUI;B`Z("(M(BP*"51/2RY43TMA9&1A<W, .B`B*STB+`H)5$]++E1/
M2VUI;F%S<R`Z("(M/2(L" E43TLN5$]+;75L(#H (BHB+`H)5$]++E1/2V1I
M=B`Z("(O(BP*"51/2RY43TMM;V0 .B`B)2(L" E43TLN5$]+;75L87-S(#H
M(BH](BP*"51/2RY43TMD:79A<W, .B`B+STB+`H)5$]++E1/2VUO9&%S<R`Z
M("(E/2(L" E43TLN5$]+86YD(#H (B8B+`H)5$]++E1/2V]R(#H (GPB+`H)
M5$]++E1/2WAO<B`Z(")>(BP*"51/2RY43TMA;F1A<W, .B`B)CTB+`H)5$]+
M+E1/2V]R87-S(#H (GP](BP*"51/2RY43TMX;W)A<W, .B`B7CTB+`H)5$]+
M+E1/2V%S<VEG;B`Z("(](BP*"51/2RY43TMN;W0 .B`B(2(L" E43TLN5$]+
M=&EL9&4 .B`B?B(L" E43TLN5$]+<&QU<W!L=7, .B`B*RLB+`H)5$]++E1/
M2VUI;G5S;6EN=7, .B`B+2TB+`H)5$]++E1/2V1O="`Z("(N(BP*"51/2RY4
M3TMA<G)O=R`Z("(M/B(L" E43TLN5$]+8V]M;6$ .B`B+"(L" E43TLN5$]+
M<75E<W1I;VX .B`B/R(L" E43TLN5$]+86YD86YD(#H (B8F(BP*"51/2RY4
M3TMO<F]R(#H (GQ\(BP*" DO+R!.=6UE<FEC(&QI=&5R86QS" E43TLN5$]+
M:6YT,S)V(#H
M"51/2RY43TMI;G0V-'8 .B`B:6YT-C1V(BP 5$]++E1/2W5N<S8T=B`Z(")U
M;G,V-'8B+`H)5$]++E1/2V9L;V%T,S)V(#H (F9L;V%T,S)V(BP 5$]++E1/
M2V9L;V%T-C1V(#H
M(BP 5$]++E1/2VEM86=I;F%R>38T=B`Z(")I;6%G:6YA<GDV-'8B+"!43TLN
M;VYS=&%N=',*"51/2RY43TMC:&%R=B`Z(")C:&%R=B(L(%1/2RY43TMW8VAA
M<G8 .B`B=V-H87)V(BP 5$]++E1/2V1C:&%R=B`Z(")D8VAA<G8B+`H*"2\O
M($QE868 ;W!E<F%T;W)S" E43TLN5$]+:61E;G1I9FEE<B`Z(")I9&5N=&EF
M:65R(BP)5$]++E1/2W-T<FEN9R`Z(")S=')I;F<B+`H)5$]++E1/2W1H:7,
M.B`B=&AI<R(L"51/2RY43TMS=7!E<B`Z(")S=7!E<B(L" H)+R\ 0F%S:6,
M='EP97,*"51/2RY43TMV;VED(#H
M8GET92(L(%1/2RY43TMU;G,X(#H (G5B>71E(BP*"51/2RY43TMI;G0Q-B`Z
M(")S:&]R="(L(%1/2RY43TMU;G,Q-B`Z(")U<VAO<G0B+`H)5$]++E1/2VEN
M;G0V-"`Z(")L;VYG(BP 5$]++E1/2W5N<S8T(#H (G5L;VYG(BP*"51/2RY4
M,S( .B`B:69L;V%T(BP 5$]++E1/2VEM86=I;F%R>38T(#H (FED;W5B;&4B
M(F-H87(B+"!43TLN5$]+=V-H87( .B`B=V-H87(B+"!43TLN5$]+9&-H87(
M.B`B9&-H87(B+"!43TLN5$]+8FET(#H (F)I="(L" H)+R\ 06=G<F5G871E
M<PH)5$]++E1/2W-T<G5C="`Z(")S=')U8W0B+"!43TLN5$]+8VQA<W, .B`B
M8VQA<W,B+"!43TLN5$]+:6YT97)F86-E(#H (FEN=&5R9F%C92(L(%1/2RY4
M3TMU;FEO;B`Z(")U;FEO;B(L(%1/2RY43TME;G5M(#H (F5N=6TB+"!43TLN
M5$]+:6UP;W)T(#H (FEM<&]R="(L" E43TLN5$]+='EP961E9B`Z(")T>7!E
M9&5F(BP 5$]++E1/2V%L:6%S(#H (F%L:6%S(BP 5$]++E1/2V]V97)R:61E
M(#H (F]V97)R:61E(BP 5$]++E1/2V1E;&5G871E(#H (F1E;&5G871E(BP
M5$]++E1/2V9U;F-T:6]N(#H (F9U;F-T:6]N(BP*"51/2RY43TMM:7AI;B`Z
M(")M:7AI;B(L" H)5$]++E1/2V%L:6=N(#H (F%L:6=N(BP 5$]++E1/2V5X
M=&5R;B`Z(")E>'1E<FXB+"!43TLN5$]+<')I=F%T92`Z(")P<FEV871E(BP
M5$]++E1/2W!R;W1E8W1E9"`Z(")P<F]T96-T960B+"!43TLN5$]+<'5B;&EC
M(#H (G!U8FQI8R(L(%1/2RY43TME>'!O<G0 .B`B97AP;W)T(BP*"51/2RY4
M3TMS=&%T:6, .B`B<W1A=&EC(BP +RI43TLN5$]+=FER='5A;"`Z(")V:7)T
M=6%L(BPJ+R!43TLN5$]+9FEN86P .B`B9FEN86PB+"!43TLN5$]+8V]N<W0
M.B`B8V]N<W0B+"!43TLN5$]+86)S=')A8W0 .B`B86)S=')A8W0B+"!43TLN
M5$]+=F]L871I;&4 .B`B=F]L871I;&4B+`H)5$]++E1/2V1E8G5G(#H (F1E
M8G5G(BP 5$]++E1/2V1E<')E8V%T960 .B`B9&5P<F5C871E9"(L(%1/2RY4
M3TMI;B`Z(")I;B(L(%1/2RY43TMO=70 .B`B;W5T(BP 5$]++E1/2VEN;W5T
M(#H (FEN;W5T(BP*"51/2RY43TMA=71O(#H (F%U=&\B+"!43TLN5$]+<&%C
M:V%G92`Z(")P86-K86=E(BP*" DO+R!3=&%T96UE;G1S" E43TLN5$]+:68
M.B`B:68B+"!43TLN5$]+96QS92`Z(")E;'-E(BP 5$]++E1/2W=H:6QE(#H
M(G=H:6QE(BP 5$]++E1/2V9O<B`Z(")F;W(B+"!43TLN5$]+9&\ .B`B9&\B
M+"!43TLN5$]+<W=I=&-H(#H (G-W:71C:"(L" E43TLN5$]+8V%S92`Z(")C
M87-E(BP 5$]++E1/2V1E9F%U;'0 .B`B9&5F875L="(L(%1/2RY43TMB<F5A
M:R`Z(")B<F5A:R(L(%1/2RY43TMC;VYT:6YU92`Z(")C;VYT:6YU92(L(%1/
M2RY43TMW:71H(#H (G=I=& B+`H)5$]++E1/2W-Y;F-H<F]N:7IE9"`Z(")S
M>6YC:')O;FEZ960B+"!43TLN5$]+<F5T=7)N(#H (G)E='5R;B(L(%1/2RY4
M3TMG;W1O(#H (F=O=&\B+"!43TLN5$]+=')Y(#H (G1R>2(L(%1/2RY43TMC
M871C:"`Z(")C871C:"(L(%1/2RY43TMF:6YA;&QY(#H (F9I;F%L;'DB+`H)
M5$]++E1/2V%S;2`Z(")A<VTB+"!43TLN5$]+9F]R96%C:"`Z(")F;W)E86-H
M5$]+:6YV87)I86YT(#H (FEN=F%R:6%N="(L" H)+R\ 5&5S=&EN9PH)5$]+
M+E1/2W5N:71T97-T(#H (G5N:71T97-T(BP*73L*"B\O(%1H92!$(&QA;F=U
M86=E(&QE>&5R("AT;VME;FDZ"F-L87-S($1,97AE<B![" D)<W1A=&EC(%1/
M2UMC:&%R6UU="6ME>7=O<F1S.PH)"2\O($EN:71I86QI>F4 =&AE(&ME>7=O
M<F0M/G1O:V5N=F%L=64 04$Z" D)<W1A=&EC('1H:7,H*2![" D)"2\O($%D
M9"!A;&P =&AE(&ME>7=O<F1S)R!V86QU97, :6YT;R!T:&4 04$Z" D)"6ME
M>7=O<F1S6R)T:&ES(ET /2!43TLN5$]+=&AI<SL*"0D):V5Y=V]R9'-;(G-U
M<&5R(ET /2!43TLN5$]+<W5P97([" D)"6ME>7=O<F1S6R)A<W-E<G0B72`]
M(%1/2RY43TMA<W-E<G0[" D)"6ME>7=O<F1S6R)N=6QL(ET /2!43TLN5$]+
M;G5L;#L*"0D):V5Y=V]R9'-;(G1R=64B72`](%1/2RY43TMT<G5E.PH)"0EK
M97EW;W)D<ULB9F%L<V4B72`](%1/2RY43TMF86QS93L*"0D):V5Y=V]R9'-;
M(F-A<W0B72`](%1/2RY43TMC87-T.PH)"0EK97EW;W)D<ULB;F5W(ET /2!4
M3TLN5$]+;F5W.PH)"0EK97EW;W)D<ULB9&5L971E(ET /2!43TLN5$]+9&5L
M971E.PH)"0EK97EW;W)D<ULB=&AR;W<B72`](%1/2RY43TMT:')O=SL*"0D)
M:V5Y=V]R9'-;(FUO9'5L92)=(#T 5$]++E1/2VUO9'5L93L*"0D):V5Y=V]R
M9'-;(G!R86=M82)=(#T 5$]++E1/2W!R86=M83L*"0D):V5Y=V]R9'-;(G1Y
M<&5O9B)=(#T 5$]++E1/2W1Y<&5O9CL*"0D):V5Y=V]R9'-;(G1Y<&5I9")=
M(#T 5$]++E1/2W1Y<&5I9#L*"0D)" D)"6ME>7=O<F1S6R)T96UP;&%T92)=
M(#T 5$]++E1/2W1E;7!L871E.PH)"0EK97EW;W)D<ULB:6YS=&%N8V4B72`]
M(%1/2RY43TMI;G-T86YC93L*"0D)" D)"6ME>7=O<F1S6R)V;VED(ET /2!4
M3TLN5$]+=F]I9#L*"0D):V5Y=V]R9'-;(F)Y=&4B72`](%1/2RY43TMI;G0X
M.PH)"0EK97EW;W)D<ULB=6)Y=&4B72`](%1/2RY43TMU;G,X.PH)"0EK97EW
M;W)D<ULB<VAO<G0B72`](%1/2RY43TMI;G0Q-CL*"0D):V5Y=V]R9'-;(G5S
M:&]R=")=(#T 5$]++E1/2W5N<S$V.PH)"0EK97EW;W)D<ULB:6YT(ET /2!4
M3TLN5$]+:6YT,S([" D)"6ME>7=O<F1S6R)U:6YT(ET /2!43TLN5$]+=6YS
M,S([" D)"6ME>7=O<F1S6R)L;VYG(ET /2!43TLN5$]+:6YT-C0[" D)"6ME
M>7=O<F1S6R)U;&]N9R)=(#T 5$]++E1/2W5N<S8T.PH)"0EK97EW;W)D<ULB
M(ET /2!43TLN5$]+9FQO870V-#L*"0D):V5Y=V]R9'-;(G)E86PB72`](%1/
M2V)I=#L*"0D):V5Y=V]R9'-;(F-H87(B72`](%1/2RY43TMC:&%R.PH)"0EK
M97EW;W)D<ULB=V-H87(B72`](%1/2RY43TMW8VAA<CL*"0D):V5Y=V]R9'-;
M(F1C:&%R(ET /2!43TLN5$]+9&-H87([" D)"0H)"0EK97EW;W)D<ULB:69L
M;V%T(ET /2!43TLN5$]+:6UA9VEN87)Y,S([" D)"6ME>7=O<F1S6R)I9&]U
M8FQE(ET /2!43TLN5$]+:6UA9VEN87)Y-C0[" D)"6ME>7=O<F1S6R)I<F5A
M;")=(#T 5$]++E1/2VEM86=I;F%R>3 P.PH)"0D*"0D):V5Y=V]R9'-;(F-F
M;&]A=")=(#T 5$]++E1/2V-O;7!L97 S,CL*"0D):V5Y=V]R9'-;(F-D;W5B
M;&4B72`](%1/2RY43TMC;VUP;&5X-C0[" D)"6ME>7=O<F1S6R)C<F5A;")=
M(#T 5$]++E1/2V-O;7!L97 X,#L*"0D)" D)"6ME>7=O<F1S6R)D96QE9V%T
M92)=(#T 5$]++E1/2V1E;&5G871E.PH)"0EK97EW;W)D<ULB9G5N8W1I;VXB
M72`](%1/2RY43TMF=6YC=&EO;CL*"0D)" D)"6ME>7=O<F1S6R)I<R)=(#T
M5$]++E1/2VED96YT:71Y.PH)"0EK97EW;W)D<ULB:68B72`](%1/2RY43TMI
M9CL*"0D):V5Y=V]R9'-;(F5L<V4B72`](%1/2RY43TME;'-E.PH)"0EK97EW
M;W)D<ULB=VAI;&4B72`](%1/2RY43TMW:&EL93L*"0D):V5Y=V]R9'-;(F9O
M<B)=(#T 5$]++E1/2V9O<CL*"0D):V5Y=V]R9'-;(F1O(ET /2!43TLN5$]+
M9&\[" D)"6ME>7=O<F1S6R)S=VET8V B72`](%1/2RY43TMS=VET8V [" D)
M"6ME>7=O<F1S6R)C87-E(ET /2!43TLN5$]+8V%S93L*"0D):V5Y=V]R9'-;
M(F1E9F%U;'0B72`](%1/2RY43TMD969A=6QT.PH)"0EK97EW;W)D<ULB8G)E
M86LB72`](%1/2RY43TMB<F5A:SL*"0D):V5Y=V]R9'-;(F-O;G1I;G5E(ET
M/2!43TLN5$]+8V]N=&EN=64[" D)"6ME>7=O<F1S6R)S>6YC:')O;FEZ960B
M72`](%1/2RY43TMS>6YC:')O;FEZ960[" D)"6ME>7=O<F1S6R)R971U<FXB
M72`](%1/2RY43TMR971U<FX[" D)"6ME>7=O<F1S6R)G;W1O(ET /2!43TLN
M5$]+9V]T;SL*"0D):V5Y=V]R9'-;(G1R>2)=(#T 5$]++E1/2W1R>3L*"0D)
M:V5Y=V]R9'-;(F-A=&-H(ET /2!43TLN5$]+8V%T8V [" D)"6ME>7=O<F1S
M6R)F:6YA;&QY(ET /2!43TLN5$]+9FEN86QL>3L*"0D):V5Y=V]R9'-;(G=I
M=& B72`](%1/2RY43TMW:71H.PH)"0EK97EW;W)D<ULB87-M(ET /2!43TLN
M5$]+87-M.PH)"0EK97EW;W)D<ULB9F]R96%C:")=(#T 5$]++E1/2V9O<F5A
M8V [" D)"0H)"0EK97EW;W)D<ULB<W1R=6-T(ET /2!43TLN5$]+<W1R=6-T
M.PH)"0EK97EW;W)D<ULB8VQA<W,B72`](%1/2RY43TMC;&%S<SL*"0D):V5Y
M=V]R9'-;(FEN=&5R9F%C92)=(#T 5$]++E1/2VEN=&5R9F%C93L*"0D):V5Y
M=V]R9'-;(G5N:6]N(ET /2!43TLN5$]+=6YI;VX[" D)"6ME>7=O<F1S6R)E
M;G5M(ET /2!43TLN5$]+96YU;3L*"0D):V5Y=V]R9'-;(FEM<&]R=")=(#T
M5$]++E1/2VEM<&]R=#L*"0D):V5Y=V]R9'-;(FUI>&EN(ET /2!43TLN5$]+
M;6EX:6X[" D)"6ME>7=O<F1S6R)S=&%T:6,B72`](%1/2RY43TMS=&%T:6,[
M" D)"2\J:V5Y=V]R9'-;(G9I<G1U86PB72`](%1/2RY43TMV:7)T=6%L.RHO
M" D)"6ME>7=O<F1S6R)F:6YA;")=(#T 5$]++E1/2V9I;F%L.PH)"0EK97EW
M;W)D<ULB8V]N<W0B72`](%1/2RY43TMC;VYS=#L*"0D):V5Y=V]R9'-;(G1Y
M<&5D968B72`](%1/2RY43TMT>7!E9&5F.PH)"0EK97EW;W)D<ULB86QI87,B
M72`](%1/2RY43TMA;&EA<SL*"0D):V5Y=V]R9'-;(F]V97)R:61E(ET /2!4
M3TLN5$]+;W9E<G)I9&4[" D)"6ME>7=O<F1S6R)A8G-T<F%C=")=(#T 5$]+
M+E1/2V%B<W1R86-T.PH)"0EK97EW;W)D<ULB=F]L871I;&4B72`](%1/2RY4
M3TMV;VQA=&EL93L*"0D):V5Y=V]R9'-;(F1E8G5G(ET /2!43TLN5$]+9&5B
M=6<[" D)"6ME>7=O<F1S6R)D97!R96-A=&5D(ET /2!43TLN5$]+9&5P<F5C
M871E9#L*"0D):V5Y=V]R9'-;(FEN(ET /2!43TLN5$]+:6X[" D)"6ME>7=O
M<F1S6R)O=70B72`](%1/2RY43TMO=70[" D)"6ME>7=O<F1S6R)I;F]U=")=
M(#T 5$]++E1/2VEN;W5T.PH)"0EK97EW;W)D<ULB875T;R)=(#T 5$]++E1/
M2V%U=&\[" D)"0H)"0EK97EW;W)D<ULB86QI9VXB72`](%1/2RY43TMA;&EG
M;CL*"0D):V5Y=V]R9'-;(F5X=&5R;B)=(#T 5$]++E1/2V5X=&5R;CL*"0D)
M:V5Y=V]R9'-;(G!R:79A=&4B72`](%1/2RY43TMP<FEV871E.PH)"0EK97EW
M;W)D<ULB<&%C:V%G92)=(#T 5$]++E1/2W!A8VMA9V4[" D)"6ME>7=O<F1S
M6R)P<F]T96-T960B72`](%1/2RY43TMP<F]T96-T960[" D)"6ME>7=O<F1S
M6R)P=6)L:6,B72`](%1/2RY43TMP=6)L:6,[" D)"6ME>7=O<F1S6R)E>'!O
M<G0B72`](%1/2RY43TME>'!O<G0[" D)"0H)"0EK97EW;W)D<ULB8F]D>2)=
M(#T 5$]++E1/2V)O9'D[" D)"6ME>7=O<F1S6R)I;G9A<FEA;G0B72`](%1/
M2RY43TMI;G9A<FEA;G0[" D)"6ME>7=O<F1S6R)U;FET=&5S=")=(#T 5$]+
M+E1/2W5N:71T97-T.PH)"0EK97EW;W)D<ULB=F5R<VEO;B)=(#T 5$]++E1/
M2W9E<G-I;VX[" D)?0H)" EP<FEV871E. H)"6-H87);70EF:6QE.PD)+R\
M5&AE(&EN<'5T(&9I;&4*"0EU:6YT"7`["0D)+R\ 0W5R<F5N="!C:&%R86-T
M97(*" EP=6)L:6,Z" D)+R\ 26YI=&EA;&EZ92!T:&4 ;&5X97( =VET:"!T
M:&4 9G5L;"!S;W5R8V4 8V]D92!A<R!A('-T<FEN9SH*"0ET:&ES*&-H87);
M72!F*2![" D)"69I;&4 /2!F.PH)"0EP(#T ,#L*"0E]" H)"2\O(%1/1$\Z
M" D)8VAA<EM="7=Y<VEW>6=3=')I;F<H*2![" D)"7)E='5R;B!N=6QL.PH)
M"7T*" D)+R\ 5$]$3SH*"0EC:&%R6UT):&5X4W1R:6YG*"D >PH)"0ER971U
M<FX ;G5L;#L*"0E]" H)"2\O(%1H:7, 9G5N8W1I;VX 8V]N<W5M97, 82!F
M=6QL($0 ;&%N9W5A9V4 =&]K96X 86YD(')E='5R;G, :70 :6X =&AE('-T
M<G5C='5R92!4;VME;CH*"0DO+R!N=6QL(&ES(')E='5R;F5D(&EF('1H92!E
M;F0 ;V8 =&AE(&9I;&4 :7, <F5A8VAE9"X*"0E4;VME;BH);F5X=%1O:V5N
M*"D >PH)"0E4;VME;BH)<F5T=&]K(#T ;F5W(%1O:V5N.PH)"0EU:6YT"7-T
M87)T.PH*"0D)<F5T=&]K+FED96YT(#T ;G5L;#L*"0D)<F5T=&]K+G1O:V5N
M(#T 5$]++E1/2VED96YT:69I97([" H)"0DO+R!087-T('1H92!E;F0 ;V8
M9FEL93\ 4F5T=7)N(&$ ;G5L;"!T;VME;CH*"0D):68 *'` /CT 9FEL92YL
M96YG=& I(')E='5R;B!N=6QL.PH*"0D)+R\ 4F5A9"!U<"!T;R!T:&4 ;F5X
M="!W:&ET92US<&%C92!C:&%R. H)"0EW:&EL92`H<"`\(&9I;&4N;&5N9W1H
M*2![" D)"0ES=VET8V *&9I;&5;<%TI('L*"0D)"0EC87-E("< )RP )UQN
M)RP )UQR)RP )UQV)RP )UQT)RP )UQF)SH*"0D)"0D)*RMP.PH)"0D)"0EB
M<F5A:SL*" D)"0D)8V%S92`G+B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I
M;&5;<%T /3T )RXG*2![" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL95MP
M72`]/2`G+B<I('L*"0D)"0D)"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O:V5N
M(#T 5$]++E1/2V1O=&1O=&1O=#L*"0D)"0D)"7T 96QS90H)"0D)"0D)"7)E
M='1O:RYT;VME;B`](%1/2RY43TMS;&EC93L*"0D)"0D)?2!E;'-E" D)"0D)
M"0ER971T;VLN=&]K96X /2!43TLN5$]+9&]T.PH)"0D)"0ER971U<FX <F5T
M=&]K.PH)"0D)"0EB<F5A:SL*" D)"0D)8V%S92`G)B<Z" D)"0D)"2LK<#L*
M"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)
M"0ER971T;VLN=&]K96X /2!43TLN5$]+86YD87-S.PH)"0D)"0E](&5L<V4
M:68 *&9I;&5;<%T /3T )R8G*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T
M;VLN=&]K96X /2!43TLN5$]+86YD86YD.PH)"0D)"0E](&5L<V4*"0D)"0D)
M"7)E='1O:RYT;VME;B`](%1/2RY43TMA;F0[" D)"0D)"7)E='5R;B!R971T
M;VL[" H)"0D)"6-A<V4 )WPG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE
M6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N
M(#T 5$]++E1/2V]R87-S.PH)"0D)"0E](&5L<V4 :68 *&9I;&5;<%T /3T
M)WPG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN
M5$]+;W)O<CL*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!4
M3TLN5$]+;W([" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4 )RTG
M. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)
M"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUI;F%S<SL*
M"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<M)RD >PH)"0D)"0D)*RMP
M.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUI;G5S;6EN=7,[" D)
M"0D)"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUI;CL*
M"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G*R<Z" D)"0D)"2LK
M<#L*"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)
M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+861D87-S.PH)"0D)"0E](&5L
M<V4 :68 *&9I;&5;<%T /3T )RLG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER
M971T;VLN=&]K96X /2!43TLN5$]+<&QU<W!L=7,[" D)"0D)"7T 96QS90H)
M"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%D9#L*"0D)"0D)<F5T=7)N
M(')E='1O:SL*" D)"0D)8V%S92`G/2<Z" D)"0D)"2LK<#L*"0D)"0D):68
M*&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL
M95MP72`]/2`G/2<I('L*"0D)"0D)"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O
M:V5N(#T 5$]++E1/2VED96YT:71Y.PH)"0D)"0D)?2!E;'-E" D)"0D)"0D)
M<F5T=&]K+G1O:V5N(#T 5$]++E1/2V5Q=6%L.PH)"0D)"0E](&5L<V4*"0D)
M"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMA<W-I9VX[" D)"0D)"7)E='5R
M;B!R971T;VL[" H)"0D)"6-A<V4 )SPG. H)"0D)"0DK*W`[" D)"0D)"6EF
M("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K
M+G1O:V5N(#T 5$]++E1/2VQE.PD)"2\O(#P]" D)"0D)"7T 96QS92!I9B`H
M9FEL95MP72`]/2`G/"<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE
M6W!=(#T]("<])RD >PH)"0D)"0D)"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K
M96X /2!43TLN5$]+<VAL87-S.PD)+R\ /#P]" D)"0D)"0E](&5L<V4*"0D)
M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+<VAL.PD)+R\ /#P*"0D)"0D)
M?2!E;'-E(&EF("AF:6QE6W!=(#T]("<^)RD >PH)"0D)"0D)*RMP.PH)"0D)
M"0D):68 *&9I;&5;<%T /3T )STG*2"0D)"7T
M96QS90H)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TML9SL)"2\O(#P^
M" D)"0D)"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VQT
M.PD)"2\O(#P*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G/B<Z
M" D)"0D)"2LK<#L*"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)
M"0DK*W`[" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+9V4["0D)+R\
M/CT*"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<^)RD >PH)"0D)"0D)
M*RMP.PH)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2A<W,["0DO+R`^
M/CT*"0D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G/B<I('L*"0D)"0D)
M"0DK*W`[" D)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0D)
M"2LK<#L*"0D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W5S:')A<W,[
M"2\O(#X^/CT*"0D)"0D)"0E](&5L<V4*"0D)"0D)"0D)<F5T=&]K+G1O:V5N
M(#T 5$]++E1/2W5S:'(["0DO+R`^/CX*"0D)"0D)"7T 96QS90H)"0D)"0D)
M"7)E='1O:RYT;VME;B`](%1/2RY43TMS:'(["0DO+R`^/ H)"0D)"0E](&5L
M<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMG=#L)"0DO+R`^" D)
M"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4 )R$G. H)"0D)"0DK*W`[
M" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)
M"0D):68 *&9I;&5;<%T /3T )STG*2+R\ (3T]" D)
M"0D)"0E](&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;F]T
M97%U86P["0DO+R`A/0H)"0D)"0E](&5L<V4 :68 *&9I;&5;<%T /3T )SPG
M*2![" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL95MP72`]/2`G/B<I('L*
M"0D)"0D)"0DK*W`[" D)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)
M"0D)"0D)"2LK<#L*"0D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W5N
M;W)D.R`O+R`A/#X]" D)"0D)"0D)?2!E;'-E" D)"0D)"0D)"7)E='1O:RYT
M;VME;B`](%1/2RY43TMU93L)+R\ (3P^" D)"0D)"0E](&5L<V4 :68 *&9I
M;&5;<%T /3T )STG*2+R\ (3P]" D)"0D)"0E](&5L<V4*"0D)"0D)
M"0ER971T;VLN=&]K96X /2!43TLN5$]+=6=E.PDO+R`A/`H)"0D)"0E](&5L
M<V4 :68 *&9I;&5;<%T /3T )SXG*2![" D)"0D)"0DK*W`[" D)"0D)"0EI
M9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"0DK*W`[" D)"0D)"0D)<F5T
M=&]K+G1O:V5N(#T 5$]++E1/2W5L.PDO+R`A/CT*"0D)"0D)"7T 96QS90H)
M"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMU;&4["2\O("$^" D)"0D)
M"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VYO=#L)"2\O
M("$*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G*B<Z" D)"0D)
M"2LK<#L*"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[
M" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;75L87-S.PH)"0D)"0E]
M(&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM=6P[" D)"0D)
M"7)E='5R;B!R971T;VL[" D)"0D)8V%S92`G)2<Z" D)"0D)"2LK<#L*"0D)
M"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER
M971T;VLN=&]K96X /2!43TLN5$]+;6]D87-S.PH)"0D)"0E](&5L<V4*"0D)
M"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM;V0[" D)"0D)"7)E='5R;B!R
M971T;VL[" D)"0D)8V%S92`G7B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I
M;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K
M96X /2!43TLN5$]+>&]R87-S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O
M:RYT;VME;B`](%1/2RY43TMX;W([" D)"0D)"7)E='5R;B!R971T;VL[" D)
M"0D)8V%S92`G?B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I;&5;<%T /3T
M)STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN
M5$]+8V%T87-S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`]
M(%1/2RY43TMT:6QD93L*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S
M92`G*"<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2VQP87)E;CL <F5T
M=7)N(')E='1O:SL*"0D)"0EC87-E("<I)SH *RMP.R!R971T;VLN=&]K96X
M/2!43TLN5$]+<G!A<F5N.R!R971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )ULG
M. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("==)RD >PH)"0D)
M"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%R<F%Y.PH)
M"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TML8G)A
M8VME=#L*"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0EC87-E("==)SH *RMP
M.R!R971T;VLN=&]K96X /2!43TLN5$]+<F)R86-K970[(')E='5R;B!R971T
M;VL[" D)"0D)8V%S92`G>R<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/
M2VQC=7)L>3L <F5T=7)N(')E='1O:SL*"0D)"0EC87-E("=])SH *RMP.R!R
M971T;VLN=&]K96X /2!43TLN5$]+<F-U<FQY.R!R971U<FX <F5T=&]K.PH)
M"0D)"6-A<V4 )SHG.B`K*W`[(')E='1O:RYT;VME;B`](%1/2RY43TMC;VQO
M;CL <F5T=7)N(')E='1O:SL*"0D)"0EC87-E("<[)SH *RMP.R!R971T;VLN
M=&]K96X /2!43TLN5$]+<V5M:6-O;&]N.R!R971U<FX <F5T=&]K.PH)"0D)
M"6-A<V4 )S\G.B`K*W`[(')E='1O:RYT;VME;B`](%1/2RY43TMQ=65S=&EO
M;CL <F5T=7)N(')E='1O:SL*"0D)"0EC87-E("<L)SH *RMP.R!R971T;VLN
M=&]K96X /2!43TLN5$]+8V]M;6$[(')E='5R;B!R971T;VL[" H)"0D)"6-A
M<V4 )R\G. H)"0D)"0DK*W`[" D)"0D)"7-W:71C:"`H9FEL95MP72D >PH)
M"0D)"0D)8V%S92`G/2<Z" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/
M2V1I=F%S<SL*"0D)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0D)"6-A<V4
M)R\G. H)"0D)"0D)"2\O('-I;F=L92UL:6YE("\O(&-O;6UE;G0Z" D)"0D)
M"0D)*RMP.PH)"0D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)
M"0D)"0D):68 *&9I;&5;<%T /3T )UQN)RD 8G)E86L[" D)"0D)"0D)"2LK
M<#L*"0D)"0D)"0E]" D)"0D)"0D)8G)E86L[" H)"0D)"0D)8V%S92`G*R<Z
M9&4 8V]M;65N="`O*SH*"0D)"0D)"0DK*W`[" D)"0D)"0D)=VAI;&4 *'`
M/"!F:6QE+FQE;F=T:"D >PH)"0D)"0D)"0EI9B`H9FEL95MP72`]/2`G*R<I
M('L*"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"6EF("AF:6QE6W!=(#T]("<O
M)RD >PH)"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"0DM+6YE<W0[" D)"0D)
M"0D)"0D):68 *&YE<W0 /"`P*2!B<F5A:SL*"0D)"0D)"0D)"7T*"0D)"0D)
M"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<O)RD >PH)"0D)"0D)"0D)*RMP
M.PH)"0D)"0D)"0D):68 *&9I;&5;<%T /3T )RLG*2![" D)"0D)"0D)"0D)
M*RMP.PH)"0D)"0D)"0D)"2LK;F5S=#L*"0D)"0D)"0D)"7T*"0D)"0D)"0D)
M?2!E;'-E("LK<#L*"0D)"0D)"0E]" D)"0D)"0D)8G)E86L[" D)"0D)"0E]
M" H)"0D)"0D)8V%S92`G*B<Z" D)"0D)"0D)+R\ ;75L=&DM;&EN92!C;VUM
M96YT("\J. H)"0D)"0D)"2LK<#L*"0D)"0D)"0EW:&EL92`H<"`\(&9I;&4N
M;&5N9W1H*2RD >PH)"0D)
M"0D)"0D)*RMP.PH)"0D)"0D)"0D):68 *&9I;&5;<%T /3T )R\G*2"0D)"0D)"7T*"0D)"0D)"0EB<F5A:SL*
M" D)"0D)"0ED969A=6QT. H)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY4
M3TMD:78[" D)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)?0H)"0D)"0EB
M<F5A:SL*" D)"0D)8V%S92`G7"<G.B![" D)"0D)"6-H87);70ET;VL[" D)
M"0D)"79E<G-I;VX *&EN=&5R<')E=%]S;&%S:&5S*2![" D)"0D)"0DO+R!)
M;G1E<G!R970 =&AE(&5S8V%P960 8VAA<F%C=&5R<R!A;F0 :6YS97)T('1H
M96TZ" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL95MP72`]/2`G7%PG*2![
M"7-W:71C:"`H9FEL95MP72D >PH)"0D)"0D)"0EC87-E("=N)SH =&]K6S!=
M(#T )UQN)SL 8G)E86L[" D)"0D)"0D)"6-A<V4 )W(G.B!T;VM;,%T /2`G
M7'(G.R!B<F5A:SL*"0D)"0D)"0D)8V%S92`G=B<Z('1O:ULP72`]("=<=B<[
M(&)R96%K.PH)"0D)"0D)"0EC87-E("=T)SH =&]K6S!=(#T )UQT)SL 8G)E
M86L[" D)"0D)"0D)"6-A<V4 )V8G.B!T;VM;,%T /2`G7&8G.R!B<F5A:SL*
M"0D)"0D)"0D)8V%S92`G7"<G.B!T;VM;,%T /2`G7"<G.R!B<F5A:SL*"0D)
M"0D)"0D)8V%S92`G7"(G.B!T;VM;,%T /2`G7"(G.R!B<F5A:SL*"0D)"0D)
M"0D)8V%S92`G7%PG.B!T;VM;,%T /2`G7%PG.R!B<F5A:SL*"0D)"0D)"0D)
M9&5F875L=#H 8G)E86L[" D)"0D)"0D)?0H)"0D)"0D)"2LK<#L*"0D)"0D)
M"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V-H87)V.PH)
M"0D)"0D)"7)E='1O:RYI9&5N="`]('1O:SL*"0D)"0D)"0ER971U<FX <F5T
M=&]K.PH)"0D)"0D)?2!E;'-E('L*"0D)"0D)"0ET;VLN;&5N9W1H(#T ,3L*
M"0D)"0D)"0ET;VM;,%T /2!F:6QE6W!=.PH)"0D)"0D)"2LK<#L*"0D)"0D)
M"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V-H87)V.PH)
M"0D)"0D)"7)E='1O:RYI9&5N="`]('1O:SL*"0D)"0D)"0ER971U<FX <F5T
M=&]K.PH)"0D)"0D)?0H)"0D)"0E](&5L<V4 >PH)"0D)"0D)+R\ 2G5S="!C
M;W!Y(&]V97( =&AE(&5S8V%P92!S=')I;F=S. H)"0D)"0D)*RMP.PH)"0D)
M"0D)<W1A<G0 /2!P.PH)"0D)"0D)=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D
M>PH)"0D)"0D)"6EF("AF:6QE6W!=(#T]("=<7"<I('L*"0D)"0D)"0D)*RMP
M.PH)"0D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G7"<G*2![" D)"0D)
M"0D)"6)R96%K.PH)"0D)"0D)"7T*"0D)"0D)"0DK*W`[" D)"0D)"0E]" D)
M"0D)"0ER971T;VLN:61E;G0 /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0D)
M<F5T=&]K+G1O:V5N(#T 5$]++E1/2V-H87)V.PH)"0D)"0D)*RMP.PH)"0D)
M"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)?0H)"0D)"7T*" D)"0D)8V%S92`G
M7"(G.B![" D)"0D)"6-H87);70ET;VL[" D)"0D)"79E<G-I;VX *&EN=&5R
M<')E=%]S;&%S:&5S*2"0D)"0D)*RMP.PH)"0D)"0D)"0EI9B`H<"`^
M/2!F:6QE+FQE;F=T:"D 8G)E86L[" D)"0D)"0D)"7-W:71C:"`H9FEL95MP
M72D >PH)"0D)"0D)"0D)8V%S92`G;B<Z('1O:UML72`]("=<;B<[(&)R96%K
M.PH)"0D)"0D)"0D)8V%S92`G<B<Z('1O:UML72`]("=<<B<[(&)R96%K.PH)
M"0D)"0D)"0D)8V%S92`G="<Z('1O:UML72`]("=<="<[(&)R96%K.PH)"0D)
M"0D)"0D)8V%S92`G=B<Z('1O:UML72`]("=<=B<[(&)R96%K.PH)"0D)"0D)
M"0D)8V%S92`G9B<Z('1O:UML72`]("=<9B<[(&)R96%K.PH)"0D)"0D)"0D)
M8V%S92`G7"<G.B!T;VM;;%T /2`G7"<G.R!B<F5A:SL*"0D)"0D)"0D)"6-A
M<V4 )UPB)SH =&]K6VQ=(#T )UPB)SL 8G)E86L[" D)"0D)"0D)"0EC87-E
M("=<7"<Z('1O:UML72`]("=<7"<[(&)R96%K.PH)"0D)"0D)"0D)9&5F875L
M=#H*"0D)"0D)"0D)?0H)"0D)"0D)"0DO+R!'<F]W('1H92!T;VME;B!L96YG
M=& Z" D)"0D)"0D)"6EF(" K*VP /CT =&]K+FQE;F=T:"D =&]K+FQE;F=T
M:"`]('1O:RYL96YG=& *B`R.PH)"0D)"0D)"0DK*W`[" D)"0D)"0D)?2!E
M;'-E(&EF("AF:6QE6W!=(#T]("=<(B<I('L*"0D)"0D)"0D)8G)E86L[" D)
M"0D)"0D)?2!E;'-E('L*"0D)"0D)"0D)=&]K6VQ=(#T 9FEL95MP73L*"0D)
M"0D)"0D)+R\ 1W)O=R!T:&4 =&]K96X ;&5N9W1H. H)"0D)"0D)"0EI9B`H
M*RML(#X]('1O:RYL96YG=& I('1O:RYL96YG=& /2!T;VLN;&5N9W1H("H
M,CL*"0D)"0D)"0D)*RMP.PH)"0D)"0D)"7T*"0D)"0D)"7T*"0D)"0D)"7)E
M='1O:RYT;VME;B`](%1/2RY43TMS=')I;F<[" D)"0D)"0ET;VLN;&5N9W1H
M(#T ;#L*"0D)"0D)"7)E='1O:RYI9&5N="`]('1O:SL*"0D)"0D)"2LK<#L*
M"0D)"0D)"7)E='5R;B!R971T;VL[" D)"0D)"7T 96QS92"0D)"0EW:&EL92`H<"`\(&9I;&4N
M;&5N9W1H*2"0D)"0D)8G)E86L[" D)"0D)"0D)?0H)"0D)"0D)"2LK<#L*"0D)
M"0D)"7T*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMS=')I;F<[" D)
M"0D)"0ER971T;VLN:61E;G0 /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0D)
M*RMP.PH)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)?0H)"0D)"7T*" D)
M"0D)8V%S92`G<B<Z" D)"0D)"2\O(%=94TE764< <W1R:6YG/PH)"0D)"0DK
M*W`[" D)"0D)"6EF("AF:6QE6W!=("$]("=<(B<I('L*"0D)"0D)"2\O($YO
M<&4L(&IU<W0 86X :61E;G1I9FEE<CH*"0D)"0D)"7-T87)T(#T
M" D)"0D)"0EG;W1O(&-A<V5?:61E;G0[" D)"0D)"7T*"0D)"0D)<F5T=&]K
M+G1O:V5N(#T 5$]++E1/2W-T<FEN9SL*"0D)"0D)<F5T=&]K+FED96YT(#T
M=WES:7=Y9U-T<FEN9R I.PH)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0EC
M87-E("=H)SH*"0D)"0D)+R\ 2$58('-T<FEN9S\*"0D)"0D)*RMP.PH)"0D)
M"0EI9B`H9FEL95MP72`A/2`G7"(G*2"0D)"0D)9V]T;R!C87-E7VED96YT.PH)"0D)"0E]" D)"0D)"7)E='1O
M:RYT;VME;B`](%1/2RY43TMS=')I;F<[" D)"0D)"7)E='1O:RYI9&5N="`]
M(&AE>%-T<FEN9R I.PH)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0DO+R!)
M9&5N=&EF:65R('-T87)T('=I=& 7R!O<B!A+7HL02U:. H)"0D)"6-A<V4
M)V$G+"`G8B<L("=C)RP )V0G+"`G92<L("=F)RP )V<G+"` ("` ("=I)RP
M)VHG+"`G:R<L("=L)RP*"0D)"0D)("=M)RP )VXG+"`G;R<L("=P)RP )W$G
M+"` ("` ("=S)RP )W0G+"`G=2<L("=V)RP )W<G+"`G>"<L" D)"0D)"2`G
M>2<L("=Z)SH*"0D)"0EC87-E("=!)RP )T(G+"`G0R<L("=$)RP )T4G+"`G
M1B<L("=')RP )T G+"`G22<L("=*)RP )TLG+"`G3"<L" D)"0D)"2`G32<L
M("=.)RP )T\G+"`G4"<L("=1)RP )U(G+"`G4R<L("=4)RP )U4G+"`G5B<L
M("=7)RP )U G+`H)"0D)"0D )UDG+"`G6B<L("=?)SH*"0D)"0D)+R\ 4V5T
M('1H92!S=&%R=&EN9R!P;VEN="!A="!T:&ES(&-H87)A8W1E<CH*"0D)"0D)
M<W1A<G0 /2!P.PH)"0D)"6-A<V5?:61E;G0Z" D)"0D)"2\O($5X=')A8W0
M=&AE(&ED96YT:69I97(Z" D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I
M('L*"0D)"0D)"6EF("AI<V%L;G5M*&9I;&5;<%TI('Q\("AF:6QE6W!=(#T]
M("=?)RDI" D)"0D)"0D)*RMP.PH)"0D)"0D)96QS90H)"0D)"0D)"6)R96%K
M.PH)"0D)"0E]" D)"0D)"2\O($-H96-K<R!F;W( =&AE(&ED96YT:69I97(
M:6X =&AE(&ME>7=O<F0 ;&ES="P <F5T=7)N<R!N=6QL(&EF(&YO="!T:&5R
M93H*"0D)"0D)8VAA<EM=('1O:R`](&9I;&5;<W1A<G0 +BX <%T[" D)"0D)
M"6EF("AT;VL :6X :V5Y=V]R9',I('L*"0D)"0D)"7)E='1O:RYT;VME;B`]
M(&ME>7=O<F1S6W1O:UT[" D)"0D)"7T 96QS92![" D)"0D)"0ER971T;VLN
M=&]K96X /2!43TLN5$]+:61E;G1I9FEE<CL*"0D)"0D)"7)E='1O:RYI9&5N
M="`](&9I;&5;<W1A<G0 +BX <%T[" D)"0D)"7T*"0D)"0D)<F5T=7)N(')E
M='1O:SL*" D)"0D)8V%S92`G,"<L("<Q)RP )S(G+"`G,R<L("<T)RP )S4G
M+"`G-B<L("<W)RP )S G+"`G.2<Z" D)"0D)"7-T87)T(#T <#L*"0D)"0D)
M=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D >PH)"0D)"0D):68 *"%I<V%L;G5M
M*&9I;&5;<%TI*2!B<F5A:SL*"0D)"0D)"2LK<#L*"0D)"0D)?0H)"0D)"0ER
M971T;VLN=&]K96X /2!43TLN5$]+:6YT,S)V.PH)"0D)"0ER971T;VLN:61E
M;G0 /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0ER971U<FX <F5T=&]K.PH*
M"0D)"0ED969A=6QT. H)"0D)"0DK*W`[" D)"0E]" D)"7T*" D)"7)E='5R
M;B!N=6QL.PH)"7T*" D)+R\ 3VYL>2!P965K(&%T('1H92!N97AT('1O:V5N
M+"!D;VXG="!C;VYS=6UE(&ET. H)"51O:V5N* EP965K5&]K96XH*2![" D)
M"75I;G0)<V%V97` /2!P.PH)"0E4;VME;BH)=&]K(#T ;F5X=%1O:V5N*"D[
M" D)"7` /2!S879E<#L*" D)"7)E='5R;B!T;VL[" D)?0H*"0DO+R!,;V]K
M(&9O<B!A;&P 8VQA<W-E<RP :6YT97)F86-E<RP <W1R=6-T<RP =6YI;VYS
M+"!E=&,N" D)=F]I9"!G;R I('L*"0D):6YT"0EI;F1E;G0 /2`P.PH*"0D)
M* ET;VLL(&YT;VL[" H)"0D)+R\ 1W)A8B!T:&4 ;F5X="!T;VME;B!F<F]M
M('1H92!F:6QE+"!A(&YU;&P =&]K96X :7, =&AE(&5N9"!O9B!T:&4 9FEL
M93H*"0D)"71O:R`](&YE>'14;VME;B I.PH)"0D):68 *'1O:R!I<R!N=6QL
M*2!B<F5A:SL*" D)"0ED96)U9R![" D)"0D)+R\ 5&AI<R!D=6UP<R!O=70
M=&AE('9A<FEO=7, =&]K96YS("AB87-I8V%L;'D <F5F;W)M871S('1H92!S
M;W5R8V4I. H)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I
M97(I" D)"0D)"7!R:6YT9B B)2XJ<R`B+"!T;VLN:61E;G0I.PH)"0D)"65L
M<V4 :68 *'1O:RYT;VME;B`]/2!43TLN5$]+8VAA<G8I" D)"0D)"7!R:6YT
M9B B)R4N*G,G("(L('1O:RYI9&5N="D[" D)"0D)96QS92!I9B`H=&]K+G1O
M:V5N(#T](%1/2RY43TMS=')I;F<I" D)"0D)"7!R:6YT9B B7"(E+BIS7"(
M(BP =&]K+FED96YT*3L*"0D)"0EE;'-E(&EF("AT;VLN=&]K96X /3T 5$]+
M" D)"0D)96QS90H)"0D)"0EP<FEN=&8H(B4N*G, (BP =&]K=&]S=');=&]K
M+G1O:V5N72D[" H)"0D)"6YT;VL /2!P965K5&]K96XH*3L*" D)"0D)+R\
M26YD96YT871I;VXZ" D)"0D):68 *"$H;G1O:R!I<R!N=6QL*2D*"0D)"0D)
M:68 *'!E96M4;VME;B I+G1O:V5N(#T](%1/2RY43TMR8W5R;'DI" D)"0D)
M"0DM+6EN9&5N=#L*" D)"0D):68 *'1O:RYT;VME;B`]/2!43TLN5$]+;&-U
M<FQY*2
M"0D)"0EP<FEN=&8H(EQN(BD[" D)"0D)"69O<B`H:6YT(&D /2`P.R!I(#P
M:6YD96YT.R`K*VDI('!R:6YT9B B7'0B*3L*"0D)"0E]" D)"0E](&5L<V4
M>PH)"0D)"2\O(%!A<G-E(&$ ;6]D=6QE. H)"0D)"6EF("AT;VLN=&]K96X
M/3T 5$]++E1/2V-L87-S*2![" D)"0D)"0H)"0D)"7T 96QS92!I9B`H=&]K
M+G1O:V5N(#T](%1/2RY43TMI;7!O<G0I('L*"0D)"0D)" D)"0D)?2!E;'-E
M(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VUO9'5L92D >PH)"0D)"0D*"0D)
M"0E]" D)"0E]" D)"7T*"0D)<F5T=7)N.PH)"7T*?0H*+R\ 4VEM<&QE(&UA
M:6X <')O9W)A;3H*:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1$QE>&5R
M"6QE>#L*"49I;&4)9&9I;&4[" H):68 *&%R9W,N;&5N9W1H(#P
M"0EP<FEN=&8H(B4N*G, /&9I;&4N9#Y<;B(L(&%R9W-;,%TI.PH)"7)E='5R
M;B`M,3L*"7T*" DO+R!/<&5N('1H92!F:6QE. H)9&9I;&4 /2!N97< 1FEL
M92AA<F=S6S%=*3L*"2\O(%-E;F0 :6X =&AE(&)U9F9E<B!T;R!T:&4 ;&5X
M97(Z" EC:&%R6UT)<W1R(#T 9&9I;&4N<F5A9%-T<FEN9RAD9FEL92YS:7IE
M9FEL92!N;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97(
`
end
Dec 18 2004
Excellent! I shall be checking this out in the new year. :-) Matthew "James Dunne" <jdunne4 bradley.edu> wrote in message news:cq0t39$18b8$1 digitaldaemon.com...Hello all, I thought as a nice Christmas present for you all working so hard on D, I would contribute something some of you might find useful. I've been working hard on a lexer (tokenizer) for the D language. Attached to this post is the lexer module written in D!! I began work on it for code-completion support for my D IDE called Orion (over on dsource.org). Don't bother checking anything out there yet, as its all in ruins right now. ;) I tested this module somewhat, and it successfully lexes its own source code! This module could be useful for a few things, like: + code-completion database for D modules + generating CTAGS for the D language + indent-like program for D ..and any other D source code tools you can think of. Merry Christmas all, enjoy! Regards, James Dunne
Dec 18 2004
"James Dunne" <jdunne4 bradley.edu> wrote in message news:cq0t39$18b8$1 digitaldaemon.com...Hello all, I thought as a nice Christmas present for you all working so hard on D, Iwouldcontribute something some of you might find useful. I've been workinghard on alexer (tokenizer) for the D language. Attached to this post is the lexermodulewritten in D!!Thanks! This is just what of my projects needs. It looks great and looks like it isn't going to be hard to use. You scared me for a moment when i saw TOKdotvar ,TOKdotti, TOKdotexp, and TOKdottype but you don't seem to use them :)I began work on it for code-completion support for my D IDE called Orion(overon dsource.org). Don't bother checking anything out there yet, as its allinruins right now. ;) I tested this module somewhat, and it successfully lexes its own sourcecode!This module could be useful for a few things, like: + code-completion database for D modules + generating CTAGS for the D language + indent-like program for D ..and any other D source code tools you can think of.hooray!Merry Christmas all, enjoy!To you too!Regards, James Dunne
Dec 18 2004
I have updated the dlexer.d module, so please use this version.
New features:
- line number tracking (line property of DLexer class)
- DLexerException class: constructs error message containing filename and
current line number
- independent module now
- more comments! :)
TODO:
- correct wysiwyg string parsing
- correct hex string parsing
- correct numeric literal parsing (ints, floats, etc.)
I'm glad I could help you all in your project endeavours! If anyone has some
extra webspace that they wouldn't mind hosting D code snippets on, please let me
know! I've got a bunch of useful ones :)
Regards,
James Dunne
begin 0644 dlexer.d
M+R\ 9&QE>&5R("T 1"!L86YG=6%G92!L97AE< T*+R\ *$,I($-O<'ER:6=H
M92!T;R!D:7-T<FEB=71E('1H:7, ;6]D=6QE(&EN(&%N>2!F;W)M('EO=2!L
M:6ME+B` 22!O;FQY(&%S:R!T:&%T('EO=0T*+R\ 9VEV92!C<F5D:70 =VAE
M<F4 8W)E9&ET(&ES(&1U92X (%EO=2!M87D ;6%K92!M;V1I9FEC871I;VYS
M<F]V:61E('EO=7( ;6]D:69I8V%T:6]N<R!P=6)L:6-L>2P 8G5T('EO=2!A
M"7-T9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T
M>7!E.PH-"B\O(%-E="!T:&ES('9E<G-I;VX :61E;G1I9FEE<B!T;R!E;F%B
M;&4 :6YT97)P<F5T871I;VX ;V8 97-C87!E9"!C:&%R86-T97)S('=I=&AI
M;B!P87)S960 <W1R:6YG<PT*+R\ 268 =&AI<R!I<R!D:7-A8FQE9"P =&AE
M('-T<FEN9W, 87)E(&-O<&EE9"!D:7)E8W1L>2P 97-C87!E('-E<75E;F-E
M(&9R;VT 1$U$)W, ;&5X97(N:`IE;G5M(%1/2R![" E43TMR97-E<G9E9"P*
M" DO+R!/=&AE< H)5$]+;'!A<F5N+`E43TMR<&%R96XL" E43TML8G)A8VME
M="P)5$]+<F)R86-K970L" E43TML8W5R;'DL"51/2W)C=7)L>2P*"51/2V-O
M;&]N+`E43TMN96<L" E43TMS96UI8V]L;VXL"51/2V1O=&1O=&1O="P*"51/
M2V5O9BP)"51/2V-A<W0L" E43TMN=6QL+`E43TMA<W-E<G0L" E43TMT<G5E
M+`E43TMF86QS92P*"51/2V%R<F%Y+`E43TMC86QL+`H)5$]+861D<F5S<RP)
M5$]+='EP961O="P*"51/2W1Y<&4L"51/2W1H<F]W+`H)5$]+;F5W+`D)5$]+
M9&5L971E+`H)5$]+<W1A<BP)5$]+<WEM;V9F+`H)5$]+=F%R+`D)5$]+9&]T
M=F%R+`H)5$]+9&]T=&DL"51/2V1O=&5X<"P*"51/2V1O='1Y<&4L"51/2W-L
M:6-E+`H)5$]+87)R87EL96YG=& L"51/2W9E<G-I;VXL" E43TMM;V1U;&4L
M"51/2V1O;&QA<BP*"51/2W1E;7!L871E+`E43TMI;G-T86YC92P*"51/2V1E
M8VQA<F%T:6]N+`E43TMT>7!E;V8L" E43TMP<F%G;6$L"51/2V1S>6UB;VPL
M" E43TMT>7!E:60L"51/2W5A9&0L" H)+R\ 3W!E<F%T;W)S" E43TML="P)
M"51/2V=T+`H)5$]+;&4L"0E43TMG92P*"51/2V5Q=6%L+`E43TMN;W1E<75A
M;"P*"51/2VED96YT:71Y+`E43TMN;W1I9&5N=&ET>2P*"51/2VEN9&5X+`H*
M(#P^("` (#P^/2` ("`A/B` ("` (3X]("` (3P ("` ("$\/2` ("$\/ H)
M5$]+=6YO<F0L5$]+;&<L5$]+;&5G+%1/2W5L92Q43TMU;"Q43TMU9V4L5$]+
M=6<L5$]+=64L" H)5$]+<VAL+`D)5$]+<VAR+`H)5$]+<VAL87-S+`E43TMS
M:')A<W,L" E43TMU<VAR+`E43TMU<VAR87-S+`H)5$]+8V%T+`D)5$]+8V%T
M87-S+`DO+R!^('X]" E43TMA9&0L"0E43TMM:6XL"0E43TMA9&1A<W,L"51/
M2VUI;F%S<RP*"51/2VUU;"P)"51/2V1I=BP)"51/2VUO9"P*"51/2VUU;&%S
M<RP)5$]+9&EV87-S+`E43TMM;V1A<W,L" E43TMA;F0L"0E43TMO<BP)"51/
M2WAO<BP*"51/2V%N9&%S<RP)5$]+;W)A<W,L"51/2WAO<F%S<RP*"51/2V%S
M<VEG;BP)5$]+;F]T+`D)5$]+=&EL9&4L" E43TMP;'5S<&QU<RP)5$]+;6EN
M=7-M:6YU<RP*"51/2V1O="P)"51/2V%R<F]W+`E43TMC;VUM82P*"51/2W%U
M97-T:6]N+`E43TMA;F1A;F0L"51/2V]R;W(L" H)+R\ 3G5M97)I8R!L:71E
M<F%L<PH)5$]+:6YT,S)V+"!43TMU;G,S,G8L" E43TMI;G0V-'8L(%1/2W5N
M" E43TMI;6%G:6YA<GDS,G8L(%1/2VEM86=I;F%R>38T=BP 5$]+:6UA9VEN
M87)V+"!43TMD8VAA<G8L" H)+R\ 3&5A9B!O<&5R871O<G,*"51/2VED96YT
M:69I97(L"51/2W-T<FEN9RP*"51/2W1H:7,L"51/2W-U<&5R+`H*"2\O($)A
M<VEC('1Y<&5S" E43TMV;VED+`H)5$]+:6YT."P 5$]+=6YS."P*"51/2VEN
M+"!43TMU;G,V-"P*"51/2V9L;V%T,S(L(%1/2V9L;V%T-C0L(%1/2V9L;V%T
M97 X,"P*"51/2V-H87(L(%1/2W=C:&%R+"!43TMD8VAA<BP 5$]+8FET+`H*
M"2\O($%G9W)E9V%T97,*"51/2W-T<G5C="P 5$]+8VQA<W,L(%1/2VEN=&5R
M9F%C92P 5$]+=6YI;VXL(%1/2V5N=6TL(%1/2VEM<&]R="P*"51/2W1Y<&5D
M968L(%1/2V%L:6%S+"!43TMO=F5R<FED92P 5$]+9&5L96=A=&4L(%1/2V9U
M;F-T:6]N+`H)5$]+;6EX:6XL" H)5$]+86QI9VXL(%1/2V5X=&5R;BP 5$]+
M<')I=F%T92P 5$]+<')O=&5C=&5D+"!43TMP=6)L:6,L(%1/2V5X<&]R="P*
M"51/2W-T871I8RP +RI43TMV:7)T=6%L+"HO(%1/2V9I;F%L+"!43TMC;VYS
M="P 5$]+86)S=')A8W0L(%1/2W9O;&%T:6QE+`H)5$]+9&5B=6<L(%1/2V1E
M<')E8V%T960L(%1/2VEN+"!43TMO=70L(%1/2VEN;W5T+`H)5$]+875T;RP
M5$]+<&%C:V%G92P*" DO+R!3=&%T96UE;G1S" E43TMI9BP 5$]+96QS92P
M5$]+=VAI;&4L(%1/2V9O<BP 5$]+9&\L(%1/2W-W:71C:"P*"51/2V-A<V4L
M(%1/2V1E9F%U;'0L(%1/2V)R96%K+"!43TMC;VYT:6YU92P 5$]+=VET:"P*
M"51/2W-Y;F-H<F]N:7IE9"P 5$]+<F5T=7)N+"!43TMG;W1O+"!43TMT<GDL
M(%1/2V-A=&-H+"!43TMF:6YA;&QY+`H)5$]+87-M+"!43TMF;W)E86-H+`H*
M"2\O($-O;G1R86-T<PH)5$]+8F]D>2P 5$]+:6YV87)I86YT+`H*"2\O(%1E
M<W1I;F<*"51/2W5N:71T97-T+`I]" T*+R\ 02!T86)L92!C;VYV97)T:6YG
M('1O:V5N('9A;'5E<R!I;G1O('-T<FEN9R!R97!R97-E;G1A=&EO;G,Z"F-H
M87);70ET;VMT;W-T<EM43TLN;6%X*S%=(#T 6PH)5$]++E1/2W)E<V5R=F5D
M(#H (G)E<V5R=F5D(BP*" DO+R!/=&AE< H)5$]++E1/2VQP87)E;B`Z("(H
M(BP*"51/2RY43TMR<&%R96X .B`B*2(L" E43TLN5$]+;&)R86-K970 .B`B
M6R(L" E43TLN5$]+<F)R86-K970 .B`B72(L" E43TLN5$]+;&-U<FQY(#H
M(GLB+`H)5$]++E1/2W)C=7)L>2`Z(")](BP*"51/2RY43TMC;VQO;B`Z("(Z
M(BP*"51/2RY43TMN96< .B`B+2(L" E43TLN5$]+<V5M:6-O;&]N(#H (CLB
M+`H)5$]++E1/2V1O=&1O=&1O="`Z("(N+BXB+`H)5$]++E1/2V5O9B`Z(")%
M3T8B+`H)5$]++E1/2V-A<W0 .B`B8V%S="(L" E43TLN5$]+;G5L;"`Z(")N
M=6QL(BP*"51/2RY43TMA<W-E<G0 .B`B87-S97)T(BP*"51/2RY43TMT<G5E
M(#H (G1R=64B+`H)5$]++E1/2V9A;'-E(#H (F9A;'-E(BP*"51/2RY43TMA
M<G)A>2`Z(");72(L" E43TLN5$]+8V%L;"`Z(")C86QL(BP*"51/2RY43TMA
M9&1R97-S(#H (B,B+`H)5$]++E1/2W1Y<&5D;W0 .B`B='EP961O="(L" E4
M3TLN5$]+='EP92`Z(")T>7!E(BP*"51/2RY43TMT:')O=R`Z(")T:')O=R(L
M" E43TLN5$]+;F5W(#H (FYE=R(L" E43TLN5$]+9&5L971E(#H (F1E;&5T
M92(L" E43TLN5$]+<W1A<B`Z("(J(BP*"51/2RY43TMS>6UO9F8 .B`B<WEM
M;V9F(BP*"51/2RY43TMV87( .B`B=F%R(BP*"51/2RY43TMD;W1V87( .B`B
M9&]T=F%R(BP*"51/2RY43TMD;W1T:2`Z(")D;W1T:2(L" E43TLN5$]+9&]T
M97AP(#H (F1O=&5X<"(L" E43TLN5$]+9&]T='EP92`Z(")D;W1T>7!E(BP*
M"51/2RY43TMS;&EC92`Z("(N+B(L" E43TLN5$]+87)R87EL96YG=& .B`B
M87)R87EL96YG=& B+`H)5$]++E1/2W9E<G-I;VX .B`B=F5R<VEO;B(L" E4
M3TLN5$]+;6]D=6QE(#H (FUO9'5L92(L" E43TLN5$]+9&]L;&%R(#H (B0B
M+`H)5$]++E1/2W1E;7!L871E(#H (G1E;7!L871E(BP*"51/2RY43TMI;G-T
M86YC92`Z(")I;G-T86YC92(L" E43TLN5$]+9&5C;&%R871I;VX .B`B9&5C
M;&%R871I;VXB+`H)5$]++E1/2W1Y<&5O9B`Z(")T>7!E;V8B+`H)5$]++E1/
M2W!R86=M82`Z(")P<F%G;6$B+`H)5$]++E1/2V1S>6UB;VP .B`B9'-Y;6)O
M;"(L" E43TLN5$]+='EP96ED(#H (G1Y<&5I9"(L" E43TLN5$]+=6%D9"`Z
M(")U861D(BP*" DO+R!/<&5R871O<G,*"51/2RY43TML="`Z("(\(BP*"51/
M2RY43TMG="`Z("(^(BP*"51/2RY43TML92`Z("(\/2(L" E43TLN5$]+9V4
M.B`B/CTB+`H)5$]++E1/2V5Q=6%L(#H (CT](BP*"51/2RY43TMN;W1E<75A
M;"`Z("(A/2(L" E43TLN5$]+:61E;G1I='D .B`B/3T](BP*"51/2RY43TMN
M;W1I9&5N=&ET>2`Z("(A/3TB+`H)5$]++E1/2VEN9&5X(#H (EM=(BP*" DO
M+R!.0T5'(&9L;V%T:6YG('!O:6YT(&-O;7!A<F5S" DO+R`A/#X]("` ("`\
M/B` ("`\/CT ("` (3X ("` ("$^/2` ("$\("` ("`A/#T ("`A/#X-" D-
M" DO+R!.3U1%.B` 5&AE<V4 8V]U;&0 8F4 :&]R<FEB;'D =W)O;F<*"51/
M2RY43TMU;F]R9"`Z("(A/#X](BP*"51/2RY43TMU92`Z("(A/#XB+`H)5$]+
M+E1/2VQG(#H (CP^(BP*"51/2RY43TML96< .B`B/#X](BP*"51/2RY43TMU
M;&4 .B`B(3XB+`H)5$]++E1/2W5L(#H (B$^/2(L" E43TLN5$]+=6=E(#H
M(B$\(BP*"51/2RY43TMU9R`Z("(A/#TB+`H*"51/2RY43TMS:&P .B`B/#PB
M+`H)5$]++E1/2W-H<B`Z("(^/B(L" E43TLN5$]+<VAL87-S(#H (CP\/2(L
M" E43TLN5$]+<VAR87-S(#H (CX^/2(L" E43TLN5$]+=7-H<B`Z("(^/CXB
M+`H)5$]++E1/2W5S:')A<W, .B`B/CX^/2(L" E43TLN5$]+8V%T(#H (GXB
M+`H)5$]++E1/2V-A=&%S<R`Z(")^/2(L"2\O('X ?CT*"51/2RY43TMA9&0
M.B`B*R(L" E43TLN5$]+;6EN(#H (BTB+`H)5$]++E1/2V%D9&%S<R`Z("(K
M/2(L" E43TLN5$]+;6EN87-S(#H (BT](BP*"51/2RY43TMM=6P .B`B*B(L
M" E43TLN5$]+9&EV(#H (B\B+`H)5$]++E1/2VUO9"`Z("(E(BP*"51/2RY4
M3TMM=6QA<W, .B`B*CTB+`H)5$]++E1/2V1I=F%S<R`Z("(O/2(L" E43TLN
M5$]+;6]D87-S(#H (B4](BP*"51/2RY43TMA;F0 .B`B)B(L" E43TLN5$]+
M;W( .B`B?"(L" E43TLN5$]+>&]R(#H (EXB+`H)5$]++E1/2V%N9&%S<R`Z
M("(F/2(L" E43TLN5$]+;W)A<W, .B`B?#TB+`H)5$]++E1/2WAO<F%S<R`Z
M(")>/2(L" E43TLN5$]+87-S:6=N(#H (CTB+`H)5$]++E1/2VYO="`Z("(A
M(BP*"51/2RY43TMT:6QD92`Z(")^(BP*"51/2RY43TMP;'5S<&QU<R`Z("(K
M*R(L" E43TLN5$]+;6EN=7-M:6YU<R`Z("(M+2(L" E43TLN5$]+9&]T(#H
M(BXB+`H)5$]++E1/2V%R<F]W(#H (BT^(BP*"51/2RY43TMC;VUM82`Z("(L
M(BP*"51/2RY43TMQ=65S=&EO;B`Z("(_(BP*"51/2RY43TMA;F1A;F0 .B`B
M)B8B+`H)5$]++E1/2V]R;W( .B`B?'PB+`H*"2\O($YU;65R:6, ;&ET97)A
M;',*"51/2RY43TMI;G0S,G8 .B`B:6YT,S)V(BP 5$]++E1/2W5N<S,R=B`Z
M=6YS-C1V(#H (G5N<S8T=B(L" E43TLN5$]+9FQO870S,G8 .B`B9FQO870S
M,G8B+"!43TLN5$]+9FQO870V-'8 .B`B9FQO870V-'8B+"!43TLN5$]+9FQO
M870X,'8 .B`B9FQO870X,'8B+`H)5$]++E1/2VEM86=I;F%R>3,R=B`Z(")I
M;6%G:6YA<GDS,G8B+"!43TLN5$]+:6UA9VEN87)Y-C1V(#H (FEM86=I;F%R
M5$]++E1/2W=C:&%R=B`Z(")W8VAA<G8B+"!43TLN5$]+9&-H87)V(#H (F1C
M:&%R=B(L" H)+R\ 3&5A9B!O<&5R871O<G,*"51/2RY43TMI9&5N=&EF:65R
M(#H (FED96YT:69I97(B+`E43TLN5$]+<W1R:6YG(#H (G-T<FEN9R(L" E4
M3TLN5$]+=&AI<R`Z(")T:&ES(BP)5$]++E1/2W-U<&5R(#H (G-U<&5R(BP*
M" DO+R!"87-I8R!T>7!E<PH)5$]++E1/2W9O:60 .B`B=F]I9"(L" E43TLN
M5$]+:6YT."`Z(")B>71E(BP 5$]++E1/2W5N<S .B`B=6)Y=&4B+`H)5$]+
M" E43TLN5$]+:6YT,S( .B`B:6YT(BP 5$]++E1/2W5N<S,R(#H (G5I;G0B
M;F<B+`H)5$]++E1/2V9L;V%T,S( .B`B9FQO870B+"!43TLN5$]+9FQO870V
M-"`Z(")D;W5B;&4B+"!43TLN5$]+9FQO870X,"`Z(")R96%L(BP*"51/2RY4
M3TMI;6%G:6YA<GDS,B`Z(")I9FQO870B+"!43TLN5$]+:6UA9VEN87)Y-C0
M.B`B:61O=6)L92(L(%1/2RY43TMI;6%G:6YA<GDX,"`Z(")I<F5A;"(L" E4
M+E1/2V-H87( .B`B8VAA<B(L(%1/2RY43TMW8VAA<B`Z(")W8VAA<B(L(%1/
M2RY43TMD8VAA<B`Z(")D8VAA<B(L(%1/2RY43TMB:70 .B`B8FET(BP*" DO
M+R!!9V=R96=A=&5S" E43TLN5$]+<W1R=6-T(#H (G-T<G5C="(L(%1/2RY4
M3TMC;&%S<R`Z(")C;&%S<R(L(%1/2RY43TMI;G1E<F9A8V4 .B`B:6YT97)F
M86-E(BP 5$]++E1/2W5N:6]N(#H (G5N:6]N(BP 5$]++E1/2V5N=6T .B`B
M96YU;2(L(%1/2RY43TMI;7!O<G0 .B`B:6UP;W)T(BP*"51/2RY43TMT>7!E
M9&5F(#H (G1Y<&5D968B+"!43TLN5$]+86QI87, .B`B86QI87,B+"!43TLN
M5$]+;W9E<G)I9&4 .B`B;W9E<G)I9&4B+"!43TLN5$]+9&5L96=A=&4 .B`B
M9&5L96=A=&4B+"!43TLN5$]+9G5N8W1I;VX .B`B9G5N8W1I;VXB+`H)5$]+
M+E1/2VUI>&EN(#H (FUI>&EN(BP*" E43TLN5$]+86QI9VX .B`B86QI9VXB
M+"!43TLN5$]+97AT97)N(#H (F5X=&5R;B(L(%1/2RY43TMP<FEV871E(#H
M(G!R:79A=&4B+"!43TLN5$]+<')O=&5C=&5D(#H (G!R;W1E8W1E9"(L(%1/
M2RY43TMP=6)L:6, .B`B<'5B;&EC(BP 5$]++E1/2V5X<&]R="`Z(")E>'!O
M<G0B+`H)5$]++E1/2W-T871I8R`Z(")S=&%T:6,B+"`O*E1/2RY43TMV:7)T
M=6%L(#H (G9I<G1U86PB+"HO(%1/2RY43TMF:6YA;"`Z(")F:6YA;"(L(%1/
M2RY43TMC;VYS="`Z(")C;VYS="(L(%1/2RY43TMA8G-T<F%C="`Z(")A8G-T
M<F%C="(L(%1/2RY43TMV;VQA=&EL92`Z(")V;VQA=&EL92(L" E43TLN5$]+
M9&5B=6< .B`B9&5B=6<B+"!43TLN5$]+9&5P<F5C871E9"`Z(")D97!R96-A
M=&5D(BP 5$]++E1/2VEN(#H (FEN(BP 5$]++E1/2V]U="`Z(")O=70B+"!4
M3TLN5$]+:6YO=70 .B`B:6YO=70B+`H)5$]++E1/2V%U=&\ .B`B875T;R(L
M(%1/2RY43TMP86-K86=E(#H (G!A8VMA9V4B+`H*"2\O(%-T871E;65N=',*
M"51/2RY43TMI9B`Z(")I9B(L(%1/2RY43TME;'-E(#H (F5L<V4B+"!43TLN
M5$]+=VAI;&4 .B`B=VAI;&4B+"!43TLN5$]+9F]R(#H (F9O<B(L(%1/2RY4
M3TMD;R`Z(")D;R(L(%1/2RY43TMS=VET8V .B`B<W=I=&-H(BP*"51/2RY4
M3TMC87-E(#H (F-A<V4B+"!43TLN5$]+9&5F875L="`Z(")D969A=6QT(BP
M5$]++E1/2V)R96%K(#H (F)R96%K(BP 5$]++E1/2V-O;G1I;G5E(#H (F-O
M;G1I;G5E(BP 5$]++E1/2W=I=& .B`B=VET:"(L" E43TLN5$]+<WEN8VAR
M;VYI>F5D(#H (G-Y;F-H<F]N:7IE9"(L(%1/2RY43TMR971U<FX .B`B<F5T
M=7)N(BP 5$]++E1/2V=O=&\ .B`B9V]T;R(L(%1/2RY43TMT<GD .B`B=')Y
M(BP 5$]++E1/2V-A=&-H(#H (F-A=&-H(BP 5$]++E1/2V9I;F%L;'D .B`B
M9FEN86QL>2(L" E43TLN5$]+87-M(#H (F%S;2(L(%1/2RY43TMF;W)E86-H
M(#H (F9O<F5A8V B+`H*"2\O($-O;G1R86-T<PH)5$]++E1/2V)O9'D .B`B
M8F]D>2(L(%1/2RY43TMI;G9A<FEA;G0 .B`B:6YV87)I86YT(BP*" DO+R!4
M97-T:6YG" E43TLN5$]+=6YI='1E<W0 .B`B=6YI='1E<W0B+`I=.PH*+R\
M02!L86YG=6%G92!T;VME;CH*<W1R=6-T(%1O:V5N('L-" DO+R!4:&4 :61E
M;G1I9FEE<B!O<B!V86QU92!O9B!T:&4 =&]K96XZ" EC:&%R6UT):61E;G0[
M17AC97!T:6]N('1H<F]W;B!D=7)I;F< <&%R<VEN9R!O9B!$(&QA;F=U86=E
M. IC;&%S<R!$3&5X97)%>&-E<'1I;VX .B!%<G)O<B![" EP=6)L:6,Z" D)
M8W0 86X 97)R;W( ;65S<V%G92!W:71H('1H92!F:6QE;F%M92!A;F0 ;&EN
M92!N=6UB97(Z" D)"7-U<&5R*&1L>"YF:6QE;F%M92!^("(H(B!^(&9O<FUA
M=" B)60B+"!D;' N;&EN92D ?B`B*2( ?B`B.B`B('X ;7-G*3L*"0E]"GT*
M"B\O(%1H92!$(&QA;F=U86=E(&QE>&5R("AT;VME;FEZ97(I. IC;&%S<R!$
M3&5X97( >PH)"7-T871I8R!43TM;8VAA<EM=70EK97EW;W)D<SL*"0DO+R!)
M;FET:6%L:7IE('1H92!K97EW;W)D+3YT;VME;G9A;'5E($%!. H)"7-T871I
M8R!T:&ES*"D >PH)"0DO+R!!9&0 86QL('1H92!K97EW;W)D<R< =F%L=65S
M(&EN=&\ =&AE($%!. H)"0EK97EW;W)D<ULB=&AI<R)=(#T 5$]++E1/2W1H
M:7,[" D)"6ME>7=O<F1S6R)S=7!E<B)=(#T 5$]++E1/2W-U<&5R.PH)"0EK
M97EW;W)D<ULB87-S97)T(ET /2!43TLN5$]+87-S97)T.PH)"0EK97EW;W)D
M<ULB;G5L;")=(#T 5$]++E1/2VYU;&P[" D)"6ME>7=O<F1S6R)T<G5E(ET
M/2!43TLN5$]+=')U93L*"0D):V5Y=V]R9'-;(F9A;'-E(ET /2!43TLN5$]+
M9F%L<V4[" D)"6ME>7=O<F1S6R)C87-T(ET /2!43TLN5$]+8V%S=#L*"0D)
M:V5Y=V]R9'-;(FYE=R)=(#T 5$]++E1/2VYE=SL*"0D):V5Y=V]R9'-;(F1E
M;&5T92)=(#T 5$]++E1/2V1E;&5T93L*"0D):V5Y=V]R9'-;(G1H<F]W(ET
M/2!43TLN5$]+=&AR;W<[" D)"6ME>7=O<F1S6R)M;V1U;&4B72`](%1/2RY4
M3TMM;V1U;&4[" D)"6ME>7=O<F1S6R)P<F%G;6$B72`](%1/2RY43TMP<F%G
M;6$[" D)"6ME>7=O<F1S6R)T>7!E;V8B72`](%1/2RY43TMT>7!E;V8[" D)
M"6ME>7=O<F1S6R)T>7!E:60B72`](%1/2RY43TMT>7!E:60[" H)"0EK97EW
M;W)D<ULB=&5M<&QA=&4B72`](%1/2RY43TMT96UP;&%T93L*"0D):V5Y=V]R
M9'-;(FEN<W1A;F-E(ET /2!43TLN5$]+:6YS=&%N8V4[" H)"0EK97EW;W)D
M<ULB=F]I9")=(#T 5$]++E1/2W9O:60[" D)"6ME>7=O<F1S6R)B>71E(ET
M/2!43TLN5$]+:6YT.#L*"0D):V5Y=V]R9'-;(G5B>71E(ET /2!43TLN5$]+
M=6YS.#L*"0D):V5Y=V]R9'-;(G-H;W)T(ET /2!43TLN5$]+:6YT,38[" D)
M"6ME>7=O<F1S6R)U<VAO<G0B72`](%1/2RY43TMU;G,Q-CL*"0D):V5Y=V]R
M9'-;(FEN=")=(#T
M(#T 5$]++E1/2W5N<S,R.PH)"0EK97EW;W)D<ULB;&]N9R)=(#T 5$]++E1/
M"0D):V5Y=V]R9'-;(F9L;V%T(ET /2!43TLN5$]+9FQO870S,CL*"0D):V5Y
M=V]R9'-;(F1O=6)L92)=(#T 5$]++E1/2V9L;V%T-C0[" D)"6ME>7=O<F1S
M6R)R96%L(ET /2!43TLN5$]+9FQO870X,#L*" D)"6ME>7=O<F1S6R)B:70B
M72`](%1/2RY43TMB:70[" D)"6ME>7=O<F1S6R)C:&%R(ET /2!43TLN5$]+
M8VAA<CL*"0D):V5Y=V]R9'-;(G=C:&%R(ET /2!43TLN5$]+=V-H87([" D)
M"6ME>7=O<F1S6R)D8VAA<B)=(#T 5$]++E1/2V1C:&%R.PH*"0D):V5Y=V]R
M9'-;(FEF;&]A=")=(#T 5$]++E1/2VEM86=I;F%R>3,R.PH)"0EK97EW;W)D
M<ULB:61O=6)L92)=(#T 5$]++E1/2VEM86=I;F%R>38T.PH)"0EK97EW;W)D
M<ULB:7)E86PB72`](%1/2RY43TMI;6%G:6YA<GDX,#L*" D)"6ME>7=O<F1S
M6R)C9FQO870B72`](%1/2RY43TMC;VUP;&5X,S([" D)"6ME>7=O<F1S6R)C
M=&4B72`](%1/2RY43TMD96QE9V%T93L*"0D):V5Y=V]R9'-;(F9U;F-T:6]N
M(ET /2!43TLN5$]+9G5N8W1I;VX[" H)"0EK97EW;W)D<ULB:7,B72`](%1/
M2RY43TMI9&5N=&ET>3L*"0D):V5Y=V]R9'-;(FEF(ET /2!43TLN5$]+:68[
M" D)"6ME>7=O<F1S6R)E;'-E(ET /2!43TLN5$]+96QS93L*"0D):V5Y=V]R
M9'-;(G=H:6QE(ET /2!43TLN5$]+=VAI;&4[" D)"6ME>7=O<F1S6R)F;W(B
M72`](%1/2RY43TMF;W([" D)"6ME>7=O<F1S6R)D;R)=(#T 5$]++E1/2V1O
M.PH)"0EK97EW;W)D<ULB<W=I=&-H(ET /2!43TLN5$]+<W=I=&-H.PH)"0EK
M97EW;W)D<ULB8V%S92)=(#T 5$]++E1/2V-A<V4[" D)"6ME>7=O<F1S6R)D
M969A=6QT(ET /2!43TLN5$]+9&5F875L=#L*"0D):V5Y=V]R9'-;(F)R96%K
M(ET /2!43TLN5$]+8G)E86L[" D)"6ME>7=O<F1S6R)C;VYT:6YU92)=(#T
M5$]++E1/2V-O;G1I;G5E.PH)"0EK97EW;W)D<ULB<WEN8VAR;VYI>F5D(ET
M/2!43TLN5$]+<WEN8VAR;VYI>F5D.PH)"0EK97EW;W)D<ULB<F5T=7)N(ET
M/2!43TLN5$]+<F5T=7)N.PH)"0EK97EW;W)D<ULB9V]T;R)=(#T 5$]++E1/
M2V=O=&\[" D)"6ME>7=O<F1S6R)T<GDB72`](%1/2RY43TMT<GD[" D)"6ME
M>7=O<F1S6R)C871C:")=(#T 5$]++E1/2V-A=&-H.PH)"0EK97EW;W)D<ULB
M9FEN86QL>2)=(#T 5$]++E1/2V9I;F%L;'D[" D)"6ME>7=O<F1S6R)W:71H
M(ET /2!43TLN5$]+=VET:#L*"0D):V5Y=V]R9'-;(F%S;2)=(#T 5$]++E1/
M2V%S;3L*"0D):V5Y=V]R9'-;(F9O<F5A8V B72`](%1/2RY43TMF;W)E86-H
M.PH*"0D):V5Y=V]R9'-;(G-T<G5C=")=(#T 5$]++E1/2W-T<G5C=#L*"0D)
M:V5Y=V]R9'-;(F-L87-S(ET /2!43TLN5$]+8VQA<W,[" D)"6ME>7=O<F1S
M6R)I;G1E<F9A8V4B72`](%1/2RY43TMI;G1E<F9A8V4[" D)"6ME>7=O<F1S
M6R)U;FEO;B)=(#T 5$]++E1/2W5N:6]N.PH)"0EK97EW;W)D<ULB96YU;2)=
M(#T 5$]++E1/2V5N=6T[" D)"6ME>7=O<F1S6R)I;7!O<G0B72`](%1/2RY4
M3TMI;7!O<G0[" D)"6ME>7=O<F1S6R)M:7AI;B)=(#T 5$]++E1/2VUI>&EN
M.PH)"0EK97EW;W)D<ULB<W1A=&EC(ET /2!43TLN5$]+<W1A=&EC.PH)"0DO
M*FME>7=O<F1S6R)V:7)T=6%L(ET /2!43TLN5$]+=FER='5A;#LJ+PH)"0EK
M97EW;W)D<ULB9FEN86PB72`](%1/2RY43TMF:6YA;#L*"0D):V5Y=V]R9'-;
M(F-O;G-T(ET /2!43TLN5$]+8V]N<W0[" D)"6ME>7=O<F1S6R)T>7!E9&5F
M(ET /2!43TLN5$]+='EP961E9CL*"0D):V5Y=V]R9'-;(F%L:6%S(ET /2!4
M3TLN5$]+86QI87,[" D)"6ME>7=O<F1S6R)O=F5R<FED92)=(#T 5$]++E1/
M2V]V97)R:61E.PH)"0EK97EW;W)D<ULB86)S=')A8W0B72`](%1/2RY43TMA
M8G-T<F%C=#L*"0D):V5Y=V]R9'-;(G9O;&%T:6QE(ET /2!43TLN5$]+=F]L
M871I;&4[" D)"6ME>7=O<F1S6R)D96)U9R)=(#T 5$]++E1/2V1E8G5G.PH)
M"0EK97EW;W)D<ULB9&5P<F5C871E9")=(#T 5$]++E1/2V1E<')E8V%T960[
M" D)"6ME>7=O<F1S6R)I;B)=(#T 5$]++E1/2VEN.PH)"0EK97EW;W)D<ULB
M;W5T(ET /2!43TLN5$]+;W5T.PH)"0EK97EW;W)D<ULB:6YO=70B72`](%1/
M2RY43TMI;F]U=#L*"0D):V5Y=V]R9'-;(F%U=&\B72`](%1/2RY43TMA=71O
M.PH*"0D):V5Y=V]R9'-;(F%L:6=N(ET /2!43TLN5$]+86QI9VX[" D)"6ME
M>7=O<F1S6R)E>'1E<FXB72`](%1/2RY43TME>'1E<FX[" D)"6ME>7=O<F1S
M6R)P<FEV871E(ET /2!43TLN5$]+<')I=F%T93L*"0D):V5Y=V]R9'-;(G!A
M8VMA9V4B72`](%1/2RY43TMP86-K86=E.PH)"0EK97EW;W)D<ULB<')O=&5C
M=&5D(ET /2!43TLN5$]+<')O=&5C=&5D.PH)"0EK97EW;W)D<ULB<'5B;&EC
M(ET /2!43TLN5$]+<'5B;&EC.PH)"0EK97EW;W)D<ULB97AP;W)T(ET /2!4
M3TLN5$]+97AP;W)T.PH*"0D):V5Y=V]R9'-;(F)O9'DB72`](%1/2RY43TMB
M;V1Y.PH)"0EK97EW;W)D<ULB:6YV87)I86YT(ET /2!43TLN5$]+:6YV87)I
M86YT.PH)"0EK97EW;W)D<ULB=6YI='1E<W0B72`](%1/2RY43TMU;FET=&5S
M=#L*"0D):V5Y=V]R9'-;(G9E<G-I;VXB72`](%1/2RY43TMV97)S:6]N.PH)
M"7T*" EP<FEV871E. H)"6-H87);70EF:6QE.PD)+R\ 5&AE(&EN<'5T(&9I
M;&4*"0EU:6YT"7`["0D)+R\ 0W5R<F5N="!C:&%R86-T97(*" D)+R\ 5$]$
M3SH*"0EC:&%R6UT)=WES:7=Y9U-T<FEN9R I('L*"0D)<F5T=7)N(&YU;&P[
M" D)?0H*"0DO+R!43T1/. H)"6-H87);70EH97A3=')I;F<H*2![" D)"7)E
M='5R;B!N=6QL.PH)"7T*" EP=6)L:6,Z" D)8VAA<EM="69I;&5N86UE.PDO
M+R!&:6QE;F%M90H)"75I;G0);&EN93L)"2\O($-U<G)E;G0 ;&EN90H*"0DO
M+R!);FET:6%L:7IE('1H92!L97AE<B!W:71H('1H92!F=6QL('-O=7)C92!C
M;V1E(&%S(&$ <W1R:6YG. H)"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R
M6UT <W)C*2![" D)"69I;&4 /2!S<F,[" D)"71H:7,N9FEL96YA;64 /2!F
M<R!F=6YC=&EO;B!C;VYS=6UE<R!A(&9U;&P 1"!L86YG=6%G92!T;VME;B!A
M;F0 <F5T=7)N<R!I="!I;B!T:&4 <W1R=6-T=7)E(%1O:V5N. H)"2\O(&YU
M;&P :7, <F5T=7)N960 :68 =&AE(&5N9"!O9B!T:&4 9FEL92!I<R!R96%C
M:&5D+ H)"51O:V5N* EN97AT5&]K96XH*2![" D)"51O:V5N* ER971T;VL
M/2!N97< 5&]K96X[" D)"75I;G0)<W1A<G0[" H)"0ER971T;VLN:61E;G0
M/2!N=6QL.PH)"0ER971T;VLN=&]K96X /2!43TLN5$]+:61E;G1I9FEE<CL*
M" D)"2\O(%!A<W0 =&AE(&5N9"!O9B!F:6QE/R!2971U<FX 82!N=6QL('1O
M:V5N. H)"0EI9B`H<"`^/2!F:6QE+FQE;F=T:"D <F5T=7)N(&YU;&P[" H)
M"0DO+R!296%D('5P('1O('1H92!N97AT('=H:71E+7-P86-E(&-H87(Z" D)
M"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)"7-W:71C:"`H9FEL95MP
M72D >PH)"0D)"6-A<V4 )R`G+"`G7&XG+"`G7'(G+"`G7'8G+"`G7'0G+"`G
M7&8G. H)"0D)"0EI9B`H9FEL95MP72`]/2`G7&XG*2`K*VQI;F4[" D)"0D)
M"2LK<#L*"0D)"0D)8G)E86L[" H)"0D)"6-A<V4 )RXG. H)"0D)"0DK*W`[
M" D)"0D)"6EF("AF:6QE6W!=(#T]("<N)RD >PH)"0D)"0D)*RMP.PH)"0D)
M"0D):68 *&9I;&5;<%T /3T )RXG*2"0D)"0E](&5L
M<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+<VQI8V4[" D)"0D)
M"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V1O=#L*"0D)
M"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)8G)E86L[" H)"0D)"6-A<V4 )R8G
M. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)
M"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%N9&%S<SL*
M"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<F)RD >PH)"0D)"0D)*RMP
M.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%N9&%N9#L*"0D)"0D)
M?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+86YD.PH)"0D)
M"0ER971U<FX <F5T=&]K.PH*"0D)"0EC87-E("=\)SH*"0D)"0D)*RMP.PH)
M"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"2LK<#L*"0D)"0D)
M"7)E='1O:RYT;VME;B`](%1/2RY43TMO<F%S<SL*"0D)"0D)?2!E;'-E(&EF
M("AF:6QE6W!=(#T]("=\)RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K
M+G1O:V5N(#T 5$]++E1/2V]R;W([" D)"0D)"7T 96QS90H)"0D)"0D)<F5T
M=&]K+G1O:V5N(#T 5$]++E1/2V]R.PH)"0D)"0ER971U<FX <F5T=&]K.PH*
M"0D)"0EC87-E("<M)SH*"0D)"0D)*RMP.PH)"0D)"0EI9B`H9FEL95MP72`]
M/2`G/2<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/
M2RY43TMM:6YA<W,[" D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G+2<I
M('L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM
M:6YU<VUI;G5S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`]
M(%1/2RY43TMM:6X[" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4
M)RLG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)
M"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%D9&%S
M<SL*"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<K)RD >PH)"0D)"0D)
M*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W!L=7-P;'5S.PH)
M"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMA9&0[
M" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4 )STG. H)"0D)"0DK
M*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)
M"0D)"0D):68 *&9I;&5;<%T /3T )STG*2"0D)"7T
M96QS90H)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TME<75A;#L*"0D)
M"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+87-S:6=N
M.PH)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0EC87-E("<\)SH*"0D)"0D)
M*RMP.PH)"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"2LK<#L*
M"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TML93L)"0DO+R`\/0H)"0D)
M"0E](&5L<V4 :68 *&9I;&5;<%T /3T )SPG*2![" D)"0D)"0DK*W`[" D)
M"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"0DK*W`[" D)"0D)
M"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W-H;&%S<SL)"2\O(#P\/0H)"0D)
M"0D)?2!E;'-E" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W-H;#L)
M"2\O(#P\" D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G/B<I('L*"0D)
M"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)
M"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;&5G.PD)+R\
M/#X]" D)"0D)"0E](&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN
M5$]+;&<["0DO+R`\/ H)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME
M;B`](%1/2RY43TML=#L)"0DO+R`\" D)"0D)"7)E='5R;B!R971T;VL[" H)
M"0D)"6-A<V4 )SXG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]
M("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]+
M+E1/2V=E.PD)"2\O(#X]" D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G
M/B<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD
M>PH)"0D)"0D)"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+
M<VAR87-S.PD)+R\ /CX]" D)"0D)"0E](&5L<V4 :68 *&9I;&5;<%T /3T
M)SXG*2RD >PH)"0D)"0D)"0DK*W`[" D)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/
M2RY43TMU<VAR87-S.PDO+R`^/CX]" D)"0D)"0D)?2!E;'-E" D)"0D)"0D)
M"7)E='1O:RYT;VME;B`](%1/2RY43TMU<VAR.PD)+R\ /CX^" D)"0D)"0E]
M(&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+<VAR.PD)+R\
M/CX*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+
M9W0["0D)+R\ / H)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0EC87-E("<A
M)SH*"0D)"0D)*RMP.PH)"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D)
M"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)
M"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;F]T:61E;G1I
M='D["2\O("$]/0H)"0D)"0D)?2!E;'-E" D)"0D)"0D)<F5T=&]K+G1O:V5N
M(#T 5$]++E1/2VYO=&5Q=6%L.PD)+R\ (3T*"0D)"0D)?2!E;'-E(&EF("AF
M:6QE6W!=(#T]("<\)RD >PH)"0D)"0D)*RMP.PH)"0D)"0D):68 *&9I;&5;
M<%T /3T )SXG*2RD >PH)"0D)"0D)"0DK*W`[" D)"0D)"0D)"7)E='1O:RYT;VME
M;B`](%1/2RY43TMU;F]R9#L +R\ (3P^/0H)"0D)"0D)"7T 96QS90H)"0D)
M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+=64["2\O("$\/ H)"0D)"0D)
M?2!E;'-E(&EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)"2LK<#L*"0D)
M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+=6<["2\O("$\/0H)"0D)"0D)
M?2!E;'-E" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W5G93L)+R\
M(3P*"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<^)RD >PH)"0D)"0D)
M*RMP.PH)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2+R\ (3X]" D)
M"0D)"0E](&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+=6QE
M.PDO+R`A/ H)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/
M2RY43TMN;W0["0DO+R`A" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A
M<V4 )RHG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD
M>PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUU
M;&%S<SL*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN
M5$]+;75L.PH)"0D)"0ER971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )R4G. H)
M"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)
M*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUO9&%S<SL*"0D)
M"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;6]D.PH)
M"0D)"0ER971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )UXG. H)"0D)"0DK*W`[
M" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)
M"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2WAO<F%S<SL*"0D)"0D)?2!E;'-E
M" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+>&]R.PH)"0D)"0ER971U
M<FX <F5T=&]K.PH)"0D)"6-A<V4 )WXG. H)"0D)"0DK*W`[" D)"0D)"6EF
M("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K
M+G1O:V5N(#T 5$]++E1/2V-A=&%S<SL*"0D)"0D)?2!E;'-E" D)"0D)"0ER
M971T;VLN=&]K96X /2!43TLN5$]+=&EL9&4[" D)"0D)"7)E='5R;B!R971T
M;VL[" H)"0D)"6-A<V4 )R G.B`K*W`[(')E='1O:RYT;VME;B`](%1/2RY4
M3TML<&%R96X[(')E='5R;B!R971T;VL[" D)"0D)8V%S92`G*2<Z("LK<#L
M<F5T=&]K+G1O:V5N(#T 5$]++E1/2W)P87)E;CL <F5T=7)N(')E='1O:SL*
M"0D)"0EC87-E("=;)SH*"0D)"0D)*RMP.PH)"0D)"0EI9B`H9FEL95MP72`]
M/2`G72<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/
M2RY43TMA<G)A>3L*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X
M/2!43TLN5$]+;&)R86-K970[" D)"0D)"7)E='5R;B!R971T;VL[" D)"0D)
M8V%S92`G72<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2W)B<F%C:V5T
M.R!R971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )WLG.B`K*W`[(')E='1O:RYT
M;VME;B`](%1/2RY43TML8W5R;'D[(')E='5R;B!R971T;VL[" D)"0D)8V%S
M92`G?2<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2W)C=7)L>3L <F5T
M=7)N(')E='1O:SL*"0D)"0EC87-E("<Z)SH *RMP.R!R971T;VLN=&]K96X
M/2!43TLN5$]+8V]L;VX[(')E='5R;B!R971T;VL[" D)"0D)8V%S92`G.R<Z
M("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2W-E;6EC;VQO;CL <F5T=7)N
M(')E='1O:SL*"0D)"0EC87-E("<_)SH *RMP.R!R971T;VLN=&]K96X /2!4
M3TLN5$]+<75E<W1I;VX[(')E='5R;B!R971T;VL[" D)"0D)8V%S92`G+"<Z
M("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2V-O;6UA.R!R971U<FX <F5T
M=&]K.PH*"0D)"0EC87-E("<O)SH*"0D)"0D)*RMP.PH)"0D)"0ES=VET8V
M*&9I;&5;<%TI('L*"0D)"0D)"6-A<V4 )STG. H)"0D)"0D)"7)E='1O:RYT
M;VME;B`](%1/2RY43TMD:79A<W,[" D)"0D)"0D)<F5T=7)N(')E='1O:SL*
M" D)"0D)"0EC87-E("<O)SH*"0D)"0D)"0DO+R!S:6YG;&4M;&EN92`O+R!C
M;VUM96YT. H)"0D)"0D)"2LK<#L*"0D)"0D)"0EW:&EL92`H<"`\(&9I;&4N
M;&5N9W1H*2
M"0D)"0D)"2LK;&EN93L-" D)"0D)"0D)"0DK*W`[" D)"0D)"0D)"0EB<F5A
M:SL*"0D)"0D)"0D)?0H)"0D)"0D)"0DK*W`[" D)"0D)"0D)?0H)"0D)"0D)
M"6)R96%K.PH*"0D)"0D)"6-A<V4 )RLG.B![" D)"0D)"0D):6YT(&YE<W0
M/2`P.PH)"0D)"0D)"2\O(&YE<W1E9"!C;V1E(&-O;6UE;G0 +RLZ" D)"0D)
M"0D)*RMP.PH)"0D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)
M"0D)"0D):68 *&9I;&5;<%T /3T )UQN)RD *RML:6YE.PH)"0D)"0D)"0D*
M"0D)"0D)"0D):68 *&9I;&5;<%T /3T )RLG*2![" D)"0D)"0D)"0DK*W`[
M" D)"0D)"0D)"0EI9B`H9FEL95MP72`]/2`G+R<I('L*"0D)"0D)"0D)"0DK
M*W`[" D)"0D)"0D)"0D)+2UN97-T.PH)"0D)"0D)"0D)"6EF("AN97-T(#P
M,"D 8G)E86L[" D)"0D)"0D)"0E]" D)"0D)"0D)"7T 96QS92!I9B`H9FEL
M95MP72`]/2`G+R<I('L*"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"6EF("AF
M:6QE6W!=(#T]("<K)RD >PH)"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"0DK
M*VYE<W0[" D)"0D)"0D)"0E]" D)"0D)"0D)"7T 96QS92`K*W`[" D)"0D)
M"0D)?0H)"0D)"0D)"6)R96%K.PH)"0D)"0D)?0H*"0D)"0D)"6-A<V4 )RHG
M. H)"0D)"0D)"2\O(&UU;'1I+6QI;F4 8V]M;65N="`O*CH*"0D)"0D)"0DK
M*W`[" D)"0D)"0D)=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D >PH)"0D)"0D)
M"0EI9B`H9FEL95MP72`]/2`G7&XG*2`K*VQI;F4[" D)"0D)"0D)"0H)"0D)
M"0D)"0EI9B`H9FEL95MP72`]/2`G*B<I('L*"0D)"0D)"0D)"2LK<#L*"0D)
M"0D)"0D)"6EF("AF:6QE6W!=(#T]("<O)RD >PH)"0D)"0D)"0D)"2LK<#L*
M"0D)"0D)"0D)"0EB<F5A:SL*"0D)"0D)"0D)"7T*"0D)"0D)"0D)?2!E;'-E
M("LK<#L*"0D)"0D)"0E]" D)"0D)"0D)8G)E86L[" H)"0D)"0D)9&5F875L
M=#H*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+9&EV.PH)"0D)"0D)
M"7)E='5R;B!R971T;VL[" D)"0D)"7T*"0D)"0D)8G)E86L[" H)"0D)"6-A
M<V4 )UPG)SH >PH)"0D)"0EC:&%R6UT)=&]K.PH)"0D)"0EV97)S:6]N("AI
M;G1E<G!R971?<VQA<VAE<RD >PH)"0D)"0D)+R\ 26YT97)P<F5T('1H92!E
M<V-A<&5D(&-H87)A8W1E<G, 86YD(&EN<V5R="!T:&5M. H)"0D)"0D)*RMP
M.PH)"0D)"0D):68 *&9I;&5;<%T /3T )UQ<)RD >PH)"0D)"0D)"71O:RYL
M96YG=& /2`Q.PH)"0D)"0D)"2LK<#L*"0D)"0D)"0ES=VET8V *&9I;&5;
M<%TI('L*"0D)"0D)"0D)8V%S92`G;B<Z('1O:ULP72`]("=<;B<[(&)R96%K
M.PH)"0D)"0D)"0EC87-E("=R)SH =&]K6S!=(#T )UQR)SL 8G)E86L[" D)
M"0D)"0D)"6-A<V4 )W8G.B!T;VM;,%T /2`G7'8G.R!B<F5A:SL*"0D)"0D)
M"0D)8V%S92`G="<Z('1O:ULP72`]("=<="<[(&)R96%K.PH)"0D)"0D)"0EC
M87-E("=F)SH =&]K6S!=(#T )UQF)SL 8G)E86L[" D)"0D)"0D)"6-A<V4
M)UPG)SH =&]K6S!=(#T )UPG)SL 8G)E86L[" D)"0D)"0D)"6-A<V4 )UPB
M)SH =&]K6S!=(#T )UPB)SL 8G)E86L[" D)"0D)"0D)"6-A<V4 )UQ<)SH
M=&]K6S!=(#T )UQ<)SL 8G)E86L[" D)"0D)"0D)"61E9F%U;'0Z(&)R96%K
M.PH)"0D)"0D)"7T*"0D)"0D)"0DK*W`[" D)"0D)"0D)*RMP.PH)"0D)"0D)
M"7)E='1O:RYT;VME;B`](%1/2RY43TMC:&%R=CL*"0D)"0D)"0ER971T;VLN
M:61E;G0 /2!T;VL[" D)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)"7T
M(#T 9FEL95MP73L*"0D)"0D)"0DK*W`[" D)"0D)"0D)*RMP.PH)"0D)"0D)
M"7)E='1O:RYT;VME;B`](%1/2RY43TMC:&%R=CL*"0D)"0D)"0ER971T;VLN
M:61E;G0 /2!T;VL[" D)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)"7T*
M"0D)"0D)?2!E;'-E('L*"0D)"0D)"2\O($IU<W0 8V]P>2!O=F5R('1H92!E
M<V-A<&4 <W1R:6YG<SH*"0D)"0D)"2LK<#L*"0D)"0D)"7-T87)T(#T <#L*
M"0D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)"0D)"0EI9B`H
M9FEL95MP72`]/2`G7%PG*2UPG)RD >PH)"0D)"0D)"0EB<F5A:SL*"0D)
M"0D)"0E]" D)"0D)"0D)*RMP.PH)"0D)"0D)?0H)"0D)"0D)<F5T=&]K+FED
M96YT(#T 9FEL95MS=&%R="`N+B!P73L*"0D)"0D)"7)E='1O:RYT;VME;B`]
M(%1/2RY43TMC:&%R=CL*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='5R;B!R971T
M;VL[" D)"0D)"7T*"0D)"0E]" H)"0D)"6-A<V4 )UPB)SH >PH)"0D)"0EC
M:&%R6UT)=&]K.PH)"0D)"0EV97)S:6]N("AI;G1E<G!R971?<VQA<VAE<RD
M>PH)"0D)"0D)+R\ 26YT97)P<F5T('1H92!E<V-A<&5D(&-H87)A8W1E<G,
M86YD(&EN<V5R="!T:&5M. H)"0D)"0D)=6EN=`EL(#T ,#L*"0D)"0D)"71O
M:RYL96YG=& /2`V-#L*"0D)"0D)"2LK<#L*"0D)"0D)"7=H:6QE("AP(#P
M9FEL92YL96YG=& I('L*"0D)"0D)"0EI9B`H9FEL95MP72`]/2`G7%PG*2![
M" D)"0D)"0D)"2LK<#L*"0D)"0D)"0D):68 *'` /CT 9FEL92YL96YG=& I
M(&)R96%K.PH)"0D)"0D)"0ES=VET8V *&9I;&5;<%TI('L*"0D)"0D)"0D)
M"6-A<V4 )VXG.B!T;VM;;%T /2`G7&XG.R!B<F5A:SL*"0D)"0D)"0D)"6-A
M<V4 )W(G.B!T;VM;;%T /2`G7'(G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4
M)W0G.B!T;VM;;%T /2`G7'0G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4 )W8G
M.B!T;VM;;%T /2`G7'8G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4 )V8G.B!T
M;VM;;%T /2`G7&8G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4 )UPG)SH =&]K
M6VQ=(#T )UPG)SL 8G)E86L[" D)"0D)"0D)"0EC87-E("=<(B<Z('1O:UML
M72`]("=<(B<[(&)R96%K.PH)"0D)"0D)"0D)8V%S92`G7%PG.B!T;VM;;%T
M/2`G7%PG.R!B<F5A:SL*"0D)"0D)"0D)"61E9F%U;'0Z" D)"0D)"0D)"7T*
M"0D)"0D)"0D)+R\ 1W)O=R!T:&4 =&]K96X ;&5N9W1H. H)"0D)"0D)"0EI
M9B`H*RML(#X]('1O:RYL96YG=& I('1O:RYL96YG=& /2!T;VLN;&5N9W1H
M("H ,CL*"0D)"0D)"0D)*RMP.PH)"0D)"0D)"7T 96QS92!I9B`H9FEL95MP
M72`]/2`G7"(G*2"0D)"0D)"2\O($=R;W<
M=&AE('1O:V5N(&QE;F=T:#H*"0D)"0D)"0D):68 *"LK;"`^/2!T;VLN;&5N
M9W1H*2!T;VLN;&5N9W1H(#T
M<#L*"0D)"0D)"0E]" D)"0D)"0E]" D)"0D)"0ER971T;VLN=&]K96X /2!4
M3TLN5$]+<W1R:6YG.PH)"0D)"0D)=&]K+FQE;F=T:"`](&P[" D)"0D)"0ER
M971T;VLN:61E;G0 /2!T;VL[" D)"0D)"0DK*W`[" D)"0D)"0ER971U<FX
M<F5T=&]K.PH)"0D)"0E](&5L<V4 >PH)"0D)"0D)+R\ 2G5S="!C;W!Y(&]V
M97( =&AE(&5S8V%P92!S=')I;F=S. H)"0D)"0D)*RMP.PH)"0D)"0D)<W1A
M<G0 /2!P.PH)"0D)"0D)=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D >PH)"0D)
M"0D)"6EF("AF:6QE6W!=(#T]("=<7"<I('L*"0D)"0D)"0D)*RMP.PH)"0D)
M"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G7"(G*2![" D)"0D)"0D)"6)R
M96%K.PH)"0D)"0D)"7T*"0D)"0D)"0DK*W`[" D)"0D)"0E]" D)"0D)"0ER
M971T;VLN=&]K96X /2!43TLN5$]+<W1R:6YG.PH)"0D)"0D)<F5T=&]K+FED
M96YT(#T 9FEL95MS=&%R="`N+B!P73L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E
M='5R;B!R971T;VL[" D)"0D)"7T*"0D)"0E]" H)"0D)"6-A<V4 )W(G. H)
M"0D)"0DO+R!765-)5UE'('-T<FEN9S\*"0D)"0D)*RMP.PH)"0D)"0EI9B`H
M9FEL95MP72`A/2`G7"(G*2"0D)"0D)9V]T;R!C
M87-E7VED96YT.PH)"0D)"0E]" D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY4
M3TMS=')I;F<[" D)"0D)"7)E='1O:RYI9&5N="`]('=Y<VEW>6=3=')I;F<H
M*3L*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G:"<Z" D)"0D)
M"2\O($A%6"!S=')I;F<_" D)"0D)"2LK<#L*"0D)"0D):68 *&9I;&5;<%T
M(3T )UPB)RD >PH)"0D)"0D)<W1A<G0 /2!P("T ,3L*"0D)"0D)"6=O=&\
M8V%S95]I9&5N=#L*"0D)"0D)?0H)"0D)"0ER971T;VLN=&]K96X /2!43TLN
M5$]+<W1R:6YG.PH)"0D)"0ER971T;VLN:61E;G0 /2!H97A3=')I;F<H*3L*
M"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)+R\ 261E;G1I9FEE<B!S=&%R
M="!W:71H(%\ ;W( 82UZ+$$M6CH*"0D)"0EC87-E("=A)RP )V(G+"`G8R<L
M("=D)RP )V4G+"`G9B<L("=G)RP ("` ("`G:2<L("=J)RP )VLG+"`G;"<L
M" D)"0D)"2`G;2<L("=N)RP )V\G+"`G<"<L("=Q)RP ("` ("`G<R<L("=T
M)RP )W4G+"`G=B<L("=W)RP )W G+`H)"0D)"0D )WDG+"`G>B<Z" D)"0D)
M8V%S92`G02<L("=")RP )T,G+"`G1"<L("=%)RP )T8G+"`G1R<L("=()RP
M)TDG+"`G2B<L("=+)RP )TPG+`H)"0D)"0D )TTG+"`G3B<L("=/)RP )U`G
M+"`G42<L("=2)RP )U,G+"`G5"<L("=5)RP )U8G+"`G5R<L("=8)RP*"0D)
M"0D)("=9)RP )UHG+"`G7R<Z" D)"0D)"2\O(%-E="!T:&4 <W1A<G1I;F<
M<&]I;G0 870 =&AI<R!C:&%R86-T97(Z" D)"0D)"7-T87)T(#T <#L*"0D)
M"0EC87-E7VED96YT. H)"0D)"0DO+R!%>'1R86-T('1H92!I9&5N=&EF:65R
M. H)"0D)"0EW:&EL92`H<"`\(&9I;&4N;&5N9W1H*2![" D)"0D)"0EI9B`H
M:7-A;&YU;2AF:6QE6W!=*2!\?"`H9FEL95MP72`]/2`G7R<I*0H)"0D)"0D)
M"2LK<#L*"0D)"0D)"65L<V4*"0D)"0D)"0EB<F5A:SL*"0D)"0D)?0H)"0D)
M(&QI<W0L(')E='5R;G, ;G5L;"!I9B!N;W0 =&AE<F4Z" D)"0D)"6-H87);
M72!T;VL /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0EI9B`H=&]K(&EN(&ME
M>7=O<F1S*2![" D)"0D)"0ER971T;VLN=&]K96X /2!K97EW;W)D<UMT;VM=
M.PH)"0D)"0E](&5L<V4 >PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/
M2VED96YT:69I97([" D)"0D)"0ER971T;VLN:61E;G0 /2!F:6QE6W-T87)T
M("XN('!=.PH)"0D)"0E]" D)"0D)"7)E='5R;B!R971T;VL[" T*"0D)"0DO
M+R!.=6UE<FEC(&QI=&5R86PZ" D)"0D)8V%S92`G,"<L("<Q)RP )S(G+"`G
M=&%L+"!D96-I;6%L+"!F;&]A="P 971C+ H)"0D)"0ES=&%R="`]('`[" D)
M"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)"0D)"6EF(" A:7-A
M;&YU;2AF:6QE6W!=*2D 8G)E86L[" D)"0D)"0DK*W`[" D)"0D)"7T-" T*
M"0D)"0D)+R\ 1&5F875L="!T;R!A;B!I;G0S,G8 =&]K96X 9F]R(&%N>2!N
M=6UB97(Z" D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMI;G0S,G8[" D)
M"0D)"7)E='1O:RYI9&5N="`](&9I;&5;<W1A<G0 +BX <%T[" D)"0D)"7)E
M='5R;B!R971T;VL[" H)"0D)"61E9F%U;'0Z" D)"0D)"2LK<#L*"0D)"7T*
M"0D)?0H*"0D)<F5T=7)N(&YU;&P[" D)?0H*"0DO+R!/;FQY('!E96L 870
M=&AE(&YE>'0 =&]K96XL(&1O;B=T(&-O;G-U;64 :70Z" D)5&]K96XJ"7!E
M96M4;VME;B I('L*"0D)=6EN=`ES879E<"`]('`L('-A=F5L:6YE(#T ;&EN
M93L*"0D)5&]K96XJ"71O:R`](&YE>'14;VME;B I.PH)"0EP(#T <V%V97`[
M" D)"6QI;F4 /2!S879E;&EN93L*" D)"7)E='5R;B!T;VL[" D)?0H-" D)
M+R\ 4W1A<G0 =&AE('!A<G-I;F< 870 =&AE(&)E9VEN;FEN9R!O9B!T:&4
+/2`Q.PH)"7T*?0IO
`
end
Dec 18 2004
James Dunne wrote:I'm glad I could help you all in your project endeavours! If anyone has some extra webspace that they wouldn't mind hosting D code snippets on, please let me know! I've got a bunch of useful ones :) Regards, James DunneIt sounds like you want to check out dsource.org. To start a new project, just post a request in the "Potential Projects" forum (http://www.dsource.org/forums/viewforum.php?f=13). If you just want to make some examples available to the community, you can post an example in the Tutorials section (http://www.dsource.org/tutorials/). -- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/
Dec 18 2004
James I've not yet had chance to look at the code, but I was wondering whether you could give a quick 2-para precise of the interface for your module? A bit of sample program might be useful? (I've just had a sneak, and seen nextToken(), so I reckon I could work it out, but it'd be nicer and quicker if you can just give us a bit of usage info.) Cheers Matthew P.S. FYI, I wrote a source parser / processor about 4 yrs ago which I used to great effect on a very poorly programmed Java project I was brought in on. I was able to write filters to effect changes to hundreds of thousands of lines of code automatically, which was of great benefit when clearing up after a band of careless programmers. Now I'm sure that such programs will not be needed with D, being as how we're all so cool and all, but it'd be jolly nice to be able to write a server plug-in for D, and use it in the same tool (it uses COM). I shall investigate this in a couple of weeks' time. :-) "James Dunne" <jdunne4 bradley.edu> wrote in message news:cq2dot$2lgq$1 digitaldaemon.com...I have updated the dlexer.d module, so please use this version. New features: - line number tracking (line property of DLexer class) - DLexerException class: constructs error message containing filename and current line number - independent module now - more comments! :) TODO: - correct wysiwyg string parsing - correct hex string parsing - correct numeric literal parsing (ints, floats, etc.) I'm glad I could help you all in your project endeavours! If anyone has some extra webspace that they wouldn't mind hosting D code snippets on, please let me know! I've got a bunch of useful ones :) Regards, James Dunne
Dec 18 2004
Sure thing Matthew,
As you have guessed already, nextToken() is your main guy to call. This returns
a Token *, representing the current language token. A Token is a structure
defined to have only 2 members: 'ident', and 'token'. 'token' is any value from
the TOK enumeration which enumerates all the D language tokens available. This
lexer works just like the D compiler's lexer, making the longest possible token
at all times (greedy). The 'ident' member is used only if the token being
parsed has a special meaning, like an identifier, string literal, or a numeric
literal.
As of right now, the lexer is somewhat limited. It successfully lexes most D
language tokens, but does not have support for wysiwyg or hex strings, or for
proper numeric literal parsing. All numeric literals are assumed to be int32v
tokens. There is no official hexadecimal, octal, or floating-point parsing.
However, a cheap hack is in effect to successfully half-assedly parse these,
since it ensures the characters in the literal are either alpha or numeric.
This means that 0x000 will be parsed as one numeric literal, since it starts
with a numeric ('0') and follows with alphas ('x') and numerics ('0').
There are two ways to parse double-quoted strings ("string"), preserving
escape-sequences, or interpreting the escape-sequences. Code is in place to
perform both methods for convenience. Setting the version identifier
'interpret_slashes' will return the escaped characters in the string as they
should be. If this version identifier is disabled, then the string is simply
copied and not escaped (this is the default).
In order to fully utilize the parser, you would ideally create a child class
based on the DLexer class and use its methods. If you encounter errors during
your parsing, you may throw a DLexerException(), which will provide you with a
fully detailed error message including the filename being parsed, and the
current line number being parsed. You must supply the actual error message
yourself. Here's an example:
You'll find this type of activity common when parsing source code. Writing a
convenience wrapper function to 'expect' tokens is a good idea. Here's an
example of what that would look like:
(within "class DParser : DLexer {" scope)
Calling nextToken() will always consume a token and will place the cursor at the
next token to be consumed. If you wish to peek ahead of the current token to
see what the next token will be without consuming it, call peekToken(). It
works exactly like nextToken() but resets the cursor back to its original
position.
The DLexer class provides the following public methods and variables:
this(char[] filename, char[] src) -- give the lexer the name of the file parsing
(filename), and the contents of the entire file as a single string (src)
Token* nextToken(); -- consumes next token
Token* peekToken(); -- peeks at next token without consuming it
void restart(); -- restart parsing from the beginning of the module
char[] filename -- name of the file being parsed
int line -- current line number
Hope that helps a bit! The code is pretty self-explanatory and somewhat
well-documented. Take a good long gander at it before you try to really use it.
In article <cq2o54$2seg$1 digitaldaemon.com>, Matthew says...
James
I've not yet had chance to look at the code, but I was wondering whether you
could give a quick 2-para precise of the
interface for your module? A bit of sample program might be useful? (I've just
had a sneak, and seen nextToken(), so I
reckon I could work it out, but it'd be nicer and quicker if you can just give
us a bit of usage info.)
Cheers
Matthew
P.S. FYI, I wrote a source parser / processor about 4 yrs ago which I used to
great effect on a very poorly programmed
Java project I was brought in on. I was able to write filters to effect changes
to hundreds of thousands of lines of
code automatically, which was of great benefit when clearing up after a band of
careless programmers. Now I'm sure that
such programs will not be needed with D, being as how we're all so cool and
all, but it'd be jolly nice to be able to
write a server plug-in for D, and use it in the same tool (it uses COM). I
shall investigate this in a couple of weeks'
time. :-)
Regards,
James Dunne
Dec 18 2004
Hey all again,
I thought I'd release my D parser now. This puppy is still very much a work in
progress, but will successfully parse relatively simple D programs. Writing a
parser isn't very difficult, it's just a lot of work ;). This module uses my
dlexer module I released in this thread. And so, it is a good(?) example of how
to use the dlexer module.
The point of this module is to parse D programs for code-completion purposes. A
few simple structures are used to represent the module's information. An
example program is supplied which dumps out the parsed module's structs, enums,
classes, functions, and variables.
I should mention that functionality is somewhat limited: version blocks aren't
parsed correctly, and the type parsing on identifiers and functions is somewhat
lacking. I do intend to fix these issues in the next couple of days. Test it
out on some D programs you have lying around (or the phobos library for a good
kick).
Regards,
James Dunne
begin 0644 dtags.d
M=&\ 9&ES=')I8G5T92!T:&ES(&UO9'5L92!I;B!A;GD 9F]R;2!Y;W4 ;&EK
M92X ($D ;VYL>2!A<VL =&AA="!Y;W4-"B\O(&=I=F4 8W)E9&ET('=H97)E
M(&-R961I="!I<R!D=64N("!9;W4 ;6%Y(&UA:V4 ;6]D:69I8V%T:6]N<R!T
M;R!T:&ES(&UO9'5L92X ($EF('EO=2!D;PT*+R\ <V\L('EO=2!M87D <')O
M=FED92!Y;W5R(&UO9&EF:6-A=&EO;G, <'5B;&EC;'DL(&)U="!Y;W4 87)E
M(&YO="!R97%U:7)E9"!T;RX-" T*+R\ 5$]$3R!L:7-T. T*+R\ +2!C;W)R
M96-T('!A<G-I;F< ;V8 ='EP92!D96-L87)A=&EO;G, :6X :61E;G1I9FEE
M<G, 86YD(&9U;F-T:6]N<PT*+R\ +2!I;G1E<F9A8V4 <&%R<VEN9PT*+R\
M+2!V97)S:6]N('M](&)L;V-K<PT*+R\ +2!C;W)R96-T(&5X=&5R;B`H='EP
M92D >R!](&)L;V-K<RP (F5X=&5R;B`H='EP92DZ(B!A;F0 (F5X=&5R;B`H
M='EP92D 9&5C;"( =V]R:RX-"B\O("T 8V]M<&QE=&4 86-C97-S(&UO9&EF
M:65R<R!O;B!F=6YC=&EO;G,-" T*;6]D=6QE"61T86=S.PH*:6UP;W)T"7-T
M9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T>7!E
M.PH*:6UP;W)T"61L97AE<CL*"B\O('!U8FQI8RP <')I=F%T92P 971C+B!A
M8V-E<W,Z"F5N=6T 86-C97-S4FEG:'1S(#H :6YT('L*"6%R56YD969I;F5D
M(#T +3$L" EA<E!U8FQI8RP*"6%R4&%C:V%G92P*"6%R4')O=&5C=&5D+`H)
M87)0<FEV871E"GT[" HO+R!C;VYS="P 9FEN86PL(&%U=&\L(&5T8RX ;6]D
M:69I97)S. IE;G5M(&%C8V5S<TUO9&EF:65R(#H =6EN="![" EA;4-O;G-T
M;V1U;&4 :6UP;W)T. IS=')U8W0 1$EM<&]R="![" EC:&%R6UT)"0EN86UE
M.PH)86-C97-S4FEG:'1S"6%C8V5S<SL)"2\O(&UA:6YL>2!F;W( <'5B;&EC
M(&%N9"!P<FEV871E('%U86QI9FEE<G,*?3L*"B\O($$ =F%R:6%B;&4Z"G-T
M<G5C="!$5F%R('L*"6-H87);70D);F%M93L*"51O:V5N*EM="71Y<&4[" H)
M86-C97-S4FEG:'1S"6%C8V5S<SL*"6%C8V5S<TUO9&EF:65R"6UO9&EF:65R
M.PDO+R!M86EN;'D 9F]R(&EN+"!O=70L(&%N9"!I;F]U=`I].PH*+R\ 06X
M5$]+"0D)='EP93L)"0DO+R!T>7!E(&]F('9A;'5E<R!I;B!E;G5M97)A=&EO
M; H*"7-T<G5C="!E;G5M5F%L=64 >PH)"6-H87);70EN86UE.PH)"6-H87);
M70EV86QU93L*"7T*"65N=6U686QU95M="79A;'5E<SL*?3L*"B\O($$ <W1R
M=6-T=7)E. IS=')U8W0 1%-T<G5C="![" EC:&%R6UT)"6YA;64[" H)1%9A
M<BI;70D)=F%R<SL*"41&=6YC*EM="69U;F-S.PT*"413=')U8W0J6UT)<W1R
M=6-T<RP =6YI;VYS.PT*?3L*"B\O($$ 9G5N8W1I;VXZ"G-T<G5C="!$1G5N
M8R![" EC:&%R6UT)"6YA;64[" E4;VME;BI;70ET>7!E.PT*"6-H87);70D)
M;&EN:V%G93L*" E$5F%R*EM="0EP87)M<RP =F%R<SL*"413=')U8W0J6UT)
M<W1R=6-T<RP =6YI;VYS.PH)1$5N=6TJ6UT)96YU;7,[" E$1G5N8RI;70EF
M=6YC<SL*" EA8V-E<W-2:6=H=',)86-C97-S.PH)86-C97-S36]D:69I97()
M;6]D:69I97(["GT[" HO+R!!;B!I;G1E<F9A8V4Z"G-T<G5C="!$26YT97)F
M86-E('L*"6-H87);70D)"6YA;64[" EA8V-E<W-2:6=H=',)86-C97-S.PH)
M86-C97-S36]D:69I97();6]D:69I97([" H)+R\ 26YH97)I=&5D(&EN=&5R
M9F%C97,Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$1G5N8RI;70EF=6YC
M<SL*?3L*"B\O($$ 8VQA<W,Z"G-T<G5C="!$0VQA<W, >PH)8VAA<EM="0D)
M;F%M93L*"6%C8V5S<U)I9VAT<PEA8V-E<W,[" EA8V-E<W--;V1I9FEE< EM
M;V1I9FEE<CL*" DO+R!);FAE<FET960 :6YT97)F86-E<R`H86YD(&-L87-S
M97,I+"!C86XG="!D:7-T:6YG=6ES:"!B971W965N(&$ 8VQA<W, ;W( :6YT
M97)F86-E(&AE<F4Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$4W1R=6-T
M*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM="65N=6US.PH)1$9U;F,J
M6UT)9G5N8W,L(&-T;W)S+"!D=&]R<SL*"41687(J6UT)"79A<G,["GT[" HO
M+R!!(&UO9'5L93H*<W1R=6-T($1-;V1U;&4 >PH)8VAA<EM="6YA;64[" H)
M1$EM<&]R="I;70EI;7!O<G1S.PH)1$-L87-S*EM="6-L87-S97,L(&EN=&5R
M9F%C97,[" E$4W1R=6-T*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM=
M"65N=6US.PH)1$9U;F,J6UT)9G5N8W,[" E$5F%R*EM="0EV87)S.PI].PH*
M8VQA<W, 1%1A9W, .B!$3&5X97( >PH)<')I=F%T93H*"0EA8V-E<W-2:6=H
M;G0L(&QN:T1E9F%U;'0[" H)<'5B;&EC. H)"2\O(%1H92!P=6)L:6-L>2!A
M=F%I;&%B;&4 ;6]D=6QE('1A9R!S=')U8W1U<F4Z" D)1$UO9'5L92H)9&UO
M9'5L93L*" D)+R\ 3&]A9"!U<"!T:&4 ;6]D=6QE('-O=7)C92!C;V1E. H)
M"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R6UT <W)C*2![" D)"2\O($QO
M860 =7` =&AE('-O=7)C92!F;W( =&AE(&QE>&5R. H)"0ES=7!E<BAF:6QE
M;F%M92P <W)C*3L*" D)"2\O($-R96%T92!A(&1E9F%U;'0 ;6]D=6QE('-T
M<G5C='5R93H*"0D)9&UO9'5L92`](&YE=R!$36]D=6QE.PH)"0ED;6]D=6QE
M+FYA;64 /2!F:6QE;F%M93L*" D)"2\O(%-E="!T:&4 9&5F875L="!A8V-E
M<W, <FEG:'1S(&9O<B!N97=L>2!C<F5A=&5D(&ED96YT:69I97)S. H)"0EA
M<D1E9F%U;'0 /2!A8V-E<W-2:6=H=',N87)0=6)L:6,[" D)"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E5N9&5F:6YE9#L-" D)"6QN:T1E9F%U;'0
M" D)+R\ 17AP96-T(&$ =&]K96X 86YD('1H<F]W(&%N(&5X8V5P=&EO;B!I
M9B!N;W0 9F]U;F0Z" D)5&]K96XJ"65X<&5C="A43TL =F%L=64L(&-H87);
M72!M<V<I('L*"0D)5&]K96XJ"6YT;VL /2!N97AT5&]K96XH*3L*"0D):68
M86QU92D*"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X
M<&5C=&5D("( ?B!M<V<I.PH)"0ER971U<FX ;G1O:SL*"0E]" H)"2\O($5X
M<&5C="!A('1O:V5N(&%N9"!T:')O=R!A;B!E>&-E<'1I;VX :68 ;F]T(&9O
M=6YD. H)"51O:V5N* EE>'!E8W14;VME;BA4;VME;B`J=&]K+"!43TL =F%L
M=64L(&-H87);72!M<V<I('L*"0D):68 *'1O:RYT;VME;B`A/2!V86QU92D*
M"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X<&5C=&5D
M("( ?B!M<V<I.PH)"0ER971U<FX =&]K.PH)"7T-" T*"0DO+R!)<R!T:&ES
M('1O:V5N(&$ 8F%S:6, ='EP93\-" D)8F]O;"!I<U1Y<&4H5$]+('9A;'5E
M9#H
M92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)"6-A<V4 5$]++E1/
M5$]++E1/2W5N<S8T. H)"0D)8V%S92!43TLN5$]+9FQO870S,BP 5$]++E1/
M9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R
M93L-" D)"7T-" D)"7)E='5R;B!F86QS93L*"0E]" H)"2\O($=E="!T:&4
M8W5R<F5N="!O<B!D969A=6QT(&%C8V5S<R!R:6=H=#H*"0EA8V-E<W-2:6=H
M=',)9V5T06-C97-S*"D >PH)"0EA8V-E<W-2:6=H=',)87( /2!A8V-E<W-2
M:6=H=',N87)5;F1E9FEN960[" D)"6EF("AA<D-U<G)E;G0 (3T 86-C97-S
M4FEG:'1S+F%R56YD969I;F5D*2
M"2\O($EN=F%L:61A=&4 =&AE(&-U<G)E;G0 86-C97-S(')I9VAT. H)"0D)
M<V4 >PH)"0D)+R\ 57-E('1H92!D969A=6QT(&EF(&YO(&-U<G)E;G0 86-C
M97-S('-P96-I9FEE9#H*"0D)"6%R(#T 87)$969A=6QT.PH)"0E]" D)"7)E
M875L="!F=6YC=&EO;B!L:6YK86=E. T*"0EC:&%R6UT)9V5T3&EN:V%G92 I
M('L-" D)"6-H87);70EL:6YK86=E(#T (D0B.PT*"0D):68 *&QN:T-U<G)E
M;G0 :7, ;G5L;"D >PT*"0D)"6QI;FMA9V4 /2!L;FM$969A=6QT.PT*"0D)
M?2!E;'-E('L-" D)"0EL:6YK86=E(#T ;&YK0W5R<F5N=#L-
M=7)R96YT(#T ;G5L;#L-" D)"7T-" D)"7)E='5R;B!L:6YK86=E.PT*"0E]
M" H)"2\O(%-K:7` ;W9E<B!A('-E="!O9B!N97-T960 =&]K96YS. T*"0EV
M;VED('-K:7!.97-T*%1/2R!L+"!43TL <BD >PT*"0D):6YT"6YE<W0 /2`P
M.PT*"0D)9F]R(" [.RD >PT*"0D)"51O:V5N* ET;VL /2!N97AT5&]K96XH
M*3L-" D)"0EI9B`H=&]K(&ES(&YU;&PI(&)R96%K.PT*"0D)"6EF("AT;VLN
M=&]K96X /3T ;"D *RMN97-T.PT*"0D)"6EF("AT;VLN=&]K96X /3T <BD
M. T*"0EV;VED(')E861087)A;65T97)S*&EN;W5T($1687(J6UT <&%R;7,I
M('L-" D)"51O:V5N* D)"71O:SL-" D)"6%C8V5S<TUO9&EF:65R"6YE>'1A
M;3L-" T*"0D);F5X=&%M(#T 86-C97-S36]D:69I97(N86U);CL-" T*"0D)
M9F]R(" [.RD >PT*"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT
M=&-H("AT;VLN=&]K96XI('L-" D)"0D)8V%S92!43TLN5$]+:6XZ"0EN97AT
M86T /2!A8V-E<W--;V1I9FEE<BYA;4EN.R!B<F5A:SL-" D)"0D)8V%S92!4
M3TLN5$]+;W5T. EN97AT86T /2!A8V-E<W--;V1I9FEE<BYA;4]U=#L 8G)E
M5$]++E1/2W9O:60Z" D)"0D)8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N
M<S Z" D)"0D)8V%S92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)
M"0EC87-E(%1/2RY43TMI;G0S,BP 5$]++E1/2W5N<S,R. H)"0D)"6-A<V4
M"6-A<V4 5$]++E1/2VEM86=I;F%R>3,R+"!43TLN5$]+:6UA9VEN87)Y-C0L
M(%1/2RY43TMI;6%G:6YA<GDX,#H*"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X
M8V%S92!43TLN5$]+8VAA<BP 5$]++E1/2W=C:&%R+"!43TLN5$]+9&-H87(L
M(%1/2RY43TMB:70Z" D)"0D)8V%S92!43TLN5$]+:61E;G1I9FEE<CH >PT*
M"0D)=VAI;&4 *"AN=&]K(#T ;F5X=%1O:V5N*"DI+G1O:V5N("$](%1/2RY4
M"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I9FEE<BP (FED96YT
M:69I97( 869T97( ='EP92(I.PT*"0D)"0D):61E;G0 /2!N=&]K+FED96YT
M(&YE=R!$5F%R.PT*"0D)"0D)=F%R+FYA;64 /2!I9&5N=#L-" D)"0D)"79A
M<BYT>7!E(#T ='EP93L-" D)"0D)"79A<BYM;V1I9FEE<B`](&YE>'1A;3L-
M" T*"0D)"0D)<&%R;7,N;&5N9W1H(#T <&%R;7,N;&5N9W1H("L ,3L-" D)
M" T*"0D)"0ED969A=6QT. T*"0D)"7T-" D)"7T-" D)?0T*" D)+R\ 4&%R
M<V4 86X :6UP;W)T(&QI;F4Z" D)+R\ 4W1A<G1S(&%F=&5R(&EM<&]R="!T
M;VME;BX*"0E$26UP;W)T*B!P87)S94EM<&]R=" I('L*"0D)1$EM<&]R="H)
M:6UP.PH)"0EC:&%R6UT)"6ED96YT.PH)"0E4;VME;BH)"6YT;VL[" H)"0DO
M+R!'970 =&AE(&EM<&]R="!I9&5N=&EF:65R. H)"0EW:&EL92`H*&YT;VL
M/2!N97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I" D)"0D)
M:61E;G0 ?CT ;G1O:RYI9&5N=#L*"0D)"65L<V4 :68 *&YT;VLN=&]K96X
M/3T 5$]++E1/2V1O="D*"0D)"0EI9&5N="!^/2`B+B([" D)"7T*" D)"6EM
M<"`](&YE=R!$26UP;W)T.PH)"0EI;7`N;F%M92`](&ED96YT.PH)"0EI;7`N
M86-C97-S(#T 9V5T06-C97-S*"D[" D)"7)E='5R;B!I;7`[" D)?0H-" D)
M+R\ 4&%R<V4 82!C;&%S<R!D969I;FET:6]N. H)"2\O(%-T87)T<R!A9G1E
M;&%S<RH)"6-L<SL*"0D)8VAA<EM="0EI9&5N=#L*"0D)5&]K96XJ"0EN=&]K
M.PT*"0D):6YT"0D);F5S=#L*" D)"2\O($-R96%T92!T:&4 1$-L87-S('-T
M<G5C='5R93H*"0D)8VQS(#T
M8VQA<W, :61E;G1I9FEE<CH*"0D)8VQS+FYA;64 /2!E>'!E8W0H5$]++E1/
M2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R(&-L87-S(BDN:61E;G0[
M+R\ 0VAE8VL 9F]R(&%N(&EN=&5R9F%C92!L:7-T. H)"0EN=&]K(#T ;F5X
M=%1O:V5N*"D[" D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMC;VQO;BD
M>PH)"0D)9F]R(" [.RD >PH)"0D)"6YT;VL /2!E>'!E8W0H5$]++E1/2VED
M96YT:69I97(L(")I9&5N=&EF:65R(BD[" H)"0D)"2\O($%D9"!A(&YE=R!I
M;G1E<F9A8V4Z" D)"0D)8VQS+FEI;G1E<F9A8V5S+FQE;F=T:"`](&-L<RYI
M:6YT97)F86-E<RYL96YG=& *R`Q.PH)"0D)"6-L<RYI:6YT97)F86-E<UML
M96YG=& +2`Q72`](&YT;VLN:61E;G0[" H)"0D)"6YT;VL /2!N97AT5&]K
M96XH*3L*"0D)"0DO+R!!(&QE9G0M8W5R;'D_($)R96%K+ H)"0D)"6EF("AN
M=&]K+G1O:V5N(#T](%1/2RY43TML8W5R;'DI(&)R96%K.PH)"0D)"2\O($UA
M:V4 <W5R92!I="=S(&$ 8V]M;6$Z" D)"0D)97AP96-T5&]K96XH;G1O:RP
M5$]++E1/2V-O;6UA+"`B)RPG(&]R("=[)R!A9G1E<B!I;G1E<F9A8V4B*3L*
M"0D)"7T*"0D)?0H*"0D)+R\ 36%K92!S=7)E('=E)W)E(&%T(&$ ;&5F="UC
M=7)L>2UB<F%C92`G>R<Z" D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML
M8W5R;'DL("(G>R< 869T97( :6YT97)F86-E(&QI<W0 ;W( 8VQA<W, :61E
M;G1I9FEE<B(I.PH-" D)"6YE<W0 /2`P.PH)"0EF;W( *#L
M86-E<SH-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![
M("LK;F5S=#L 8V]N=&EN=64[('T-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!4
M4&5E:R!A="!T:&4 ;F5X="!T;VME;B!T;R!S964 :68 :70G<R!A(&-O;&]N
M(&]N;'D :68 =V4G<F4 :6X =&AE(&EM;65D:6%T92!C;&%S<R!S8V]P93H-
M" D)"0EI9B`H*&YE<W0 /3T ,"D )B8 *'!E96M4;VME;B I+G1O:V5N(#T]
M(%1/2RY43TMC;VQO;BDI('L-" D)"0D)+R\ 268 <V\L('1H96X =&AE(&-U
M<G)E;G0 =&]K96X <VAO=6QD(&)E(&%N(&%C8V5S<PT*"0D)"0DO+R!M;V1I
M9FEE<BX-" D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W!R:79A=&4I
M"0D)"0EE;'-E(&EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMP<F]T96-T960I
M" D)"0D)"6%R1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)
M"0D)96QS92!I9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<&%C:V%G92D-" D)
M"65L<V4-" D)"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP
M('L-" D)"0D)+R\ 0VAE8VL =&AE('1O:V5N. T*"0D)"0ES=VET8V *&YT
M;VLN=&]K96XI('L-" D)"0D)"2\O(%-E="!T:&4 ;F5X="!U<V5D(&%C8V5S
M<R!R:6=H=#H-" D)"0D)"6-A<V4 5$]++E1/2W!R:79A=&4Z"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E!R:79A=&4[(&)R96%K.PT*"0D)"0D)8V%S
M92!43TLN5$]+<')O=&5C=&5D. EA<D-U<G)E;G0 /2!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960[(&)R96%K.PT*"0D)"0D)8V%S92!43TLN5$]+<'5B;&EC
M" D)"0D)"6-A<V4 5$]++E1/2W!A8VMA9V4Z"6%R0W5R<F5N="`](&%C8V5S
M:6UP;&5M96YT871I;VX-" D)"0D)"0EB<F5A:SL-" T*"0D)"0D)+R\ 4W1A
M<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)
M"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)8V%S92!43TLN5$]+:6YT."P
M9FQO870X,#H*"0D)"0D)8V%S92!43TLN5$]+:6UA9VEN87)Y,S(L(%1/2RY4
M3TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R>3 P. H)"0D)"0EC87-E
M(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC;VUP;&5X-C0L(%1/2RY43TMC
M<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET. H)"0D)"0EC87-E(%1/2RY4
M/2`Q.PT*"0D)"0D)"71Y<&5;,%T /2!N=&]K.PT*"0D)"0D)"69O<B`H.SLI
M('L-" D)"0D)"0D)=&]K(#T
M;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I(&)R96%K.PT*"0D)"0D)
M"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI(&)R96%K.PT*"0D)
M"0D)"0ET>7!E+FQE;F=T:"`]('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)
M9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI('L-" D)"0D)"0D)97AP
M96-T*%1/2RY43TMM=6PL("(G*B<B*3L-" D)"0D)"0D):61E;G0 /2!E>'!E
M?2!E;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I('L-
M" D)"0D)"0D)+R\ 4F5A9"!T:&4 :61E;G1I9FEE<CH-" D)"0D)"0D):61E
M8W5R87( /2!G971!8V-E<W,H*3L-" T*"0D)"0D)"71O:R`](&YE>'14;VME
M;B I.PT*"0D)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD
M* EF=6YC(#T ;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N
M=#L-" D)"0D)"0D)9G5N8RYT>7!E(#T
M;F,N;&EN:V%G92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E
M<W, /2!C=7)A<CL-" T*"0D)"0D)"0DO+R!!9&0 9G5N8W1I;VX =&\ 8VQA
M8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-" D)
M+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)=&]K
M(#T
M;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI<W0 =&AE
M<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T
M"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0D)=F%R+F%C
M96YG=& *R`Q.PT*"0D)"0D)"0D)8VQS+G9A<G-;;&5N9W1H("T ,5T /2!V
M(&)R96%K.PT*"0D)"0D)"0D)97AP96-T5&]K96XH=&]K+"!43TLN5$]+8V]M
M;6$L("(G+"<B*3L-" T*"0D)"0D)"0D)=&]K(#T
M"0D)"0D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI9&5N=&EF:65R+"`B
M" D)"0D)"0D)"2\O($=E="!N97AT(&-O;6UA(&]R('-E;6EC;VQO;CH-" D)
M+E1/2W1H:7,Z('L-" D)"0D)"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-
M" D)"0D)"0E4;VME;BH);G1O:SL-" T*"0D)"0D)"69U;F,N86-C97-S(#T
M"0EC;',N8W1O<G,N;&5N9W1H(#T
M"0EC87-E(%1/2RY43TMT:6QD93H >PT*"0D)"0D)"65X<&5C="A43TLN5$]+
M=&AI<RP (B=T:&ES)R!A9G1E<B`G?B<B*3L-" T*"0D)"0D)"41&=6YC* EF
M=6YC(#T
M"0D)+R\ 061D('1H92!D97-T<G5C=&]R. T*"0D)"0D)"6-L<RYD=&]R<RYL
M96YG=& /2!C;',N9'1O<G,N;&5N9W1H("L ,3L-" D)"0D)"0EC;',N9'1O
M(#T
M96XL("(G*"<B*3L-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS
M*3L-" T*"0D)"0D)"6YT;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0EI9B`H
M;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)
M"0D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML8W5R;'DL("(G>R<B*3L-
M" D)"0D)"0ES:VEP3F5S="A43TLN5$]+;&-U<FQY+"!43TLN5$]+<F-U<FQY
M*3L-" D)"0D)"7T-" T*"0D)"0D)9&5F875L=#H-" D)"0D)"0D-" D)"0D)
M87)T(&%F=&5R('-T<G5C="]U;FEO;B!T;VME;BX-" D)1%-T<G5C="H)<&%R
M(#T
M86UE(#T ;G5L;#L-" D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT
M:69I97(I('L-" D)"0ES="YN86UE(#T =&]K+FED96YT.PT*"0D)"71O:R`]
M82!C=7)L>3H-" D)"65X<&5C=%1O:V5N*'1O:RP 5$]++E1/2VQC=7)L>2P
M(B=[)R(I.PT*"0D)+R\ 4F5A9"!I;B!A;&P =&AE(&9U;F-T:6]N<RP =F%R
M:6%B;&5S+"!S=')U8W1S+"!A;F0 =6YI;VYS. T*"0D)9F]R(" [.RD >PT*
M"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT;VLN=&]K96X /3T
M82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)"0EC87-E
M"0D)8V%S92!43TLN5$]+:6YT,S(L(%1/2RY43TMU;G,S,CH*"0D)"0EC87-E
M(%1/2RY43TMI;G0V-"P 5$]++E1/2W5N<S8T. H)"0D)"6-A<V4 5$]++E1/
M"0EC87-E(%1/2RY43TMI;6%G:6YA<GDS,BP 5$]++E1/2VEM86=I;F%R>38T
M"6-A<V4 5$]++E1/2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R
M+"!43TLN5$]+8FET. H)"0D)"6-A<V4 5$]++E1/2VED96YT:69I97(Z('L-
M" D)"0D)"51O:V5N* EN=&]K.PT*"0D)"0D)8VAA<EM="6ED96YT.PT*"0D)
M"0D)5&]K96XJ6UT)='EP93L-" T*"0D)"0D)+R\ 0V]N<W1R=6-T('1H92!T
M>7!E(&]F('1H92!I9&5N=&EF:65R. T*"0D)"0D)='EP92YL96YG=& /2`Q
M.PT*"0D)"0D)='EP95LP72`]('1O:SL-" D)"0D)"7=H:6QE(" H;G1O:R`]
M(&YE>'14;VME;B I*2YT;VME;B`A/2!43TLN5$]+:61E;G1I9FEE<BD >PT*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ='EP92YL96YG=& *R`Q.PT*"0D)"0D)
M+R!296%D('1H92!I9&5N=&EF:65R. T*"0D)"0D)97AP96-T5&]K96XH;G1O
M:RP 5$]++E1/2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R('1Y<&4B
M*3L-" D)"0D)"6ED96YT(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D);G1O:R`]
M(&YE>'14;VME;B I.PT*"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/
M2VQP87)E;BD >PT*"0D)"0D)"2\O($ET)W, 82!F=6YC=&EO;CH-" D)"0D)
M"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-" D)"0D)"0EF=6YC+FYA;64
M/2!I9&5N=#L-" D)"0D)"0EF=6YC+G1Y<&4 /2!T>7!E+F1U<#L-" D)"0D)
M(#T <W0N9G5N8W,N;&5N9W1H("L ,3L-" D)"0D)"0ES="YF=6YC<UML96YG
M97( ;&ES=#H-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS*3L-
M"0D)"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"6EF("AN=&]K+G1O
M:V5N(#T
M96-T5&]K96XH;G1O:RP 5$]++E1/2VQC=7)L>2P (B=[)R(I.PT*"0D)"0D)
M"0D)"0E](&5L<V4 >PT*"0D)"0D)"2\O($ET)W, 82!V87)I86)L92!O<B!L
M87(J"79A<B`](&YE=R!$5F%R.PT*"0D)"0D)"0EV87(N;F%M92`](&ED96YT
M.PT*"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0EV87(N
M86-C97-S(#T
M($%D9"!V87)I86)L92!T;R!C;&%S<SH-" D)"0D)"0D)<W0N=F%R<RYL96YG
M<R!T:&4 ;&ES=#H-" D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/
M5&]K96XH*3L-" D)"0D)"0D)97AP96-T5&]K96XH;G1O:RP 5$]++E1/2VED
M:RYI9&5N=#L-" T*"0D)"0D)"0DO+R!'970 ;F5X="!C;VUM82!O<B!S96UI
M<G5C=',N;&5N9W1H("L ,3L-" D)"0D)"7-T+G-T<G5C='-;;&5N9W1H("T
M2RY43TMU;FEO;CH >PT*"0D)"0D)1%-T<G5C="H)<W0R(#T <&%R<V53=')U
M8W0H*3L-" T*"0D)"0D)<W0N=6YI;VYS+FQE;F=T:"`]('-T+G5N:6]N<RYL
M"7T-" D)"7T-" D)"0T*"0D)<F5T=7)N('-T.PT*"0E]" T*"0DO+R!087)S
M92!A;B!E;G5M97)A=&EO;CH-" D)+R\ 4W1A<G0 869T97( <W1R=6-T('1O
M:V5N+ T*"0E$16YU;2H)<&%R<V5%;G5M*"D >PT*"0D)5&]K96XJ"0ET;VL[
M"0D)=&]K(#T
M86QL;W=E9#H-" D)"65N+FYA;64 /2!N=6QL.PT*"0D):68 *'1O:RYT;VME
M;B`]/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"2\O(&5N=6T :61E;G1I
M('L-" D)"0D)+R\ 96YU;2!I9&5N=&EF:65R(#H ='EP90T*"0D)"0ET;VL
M/2!N97AT5&]K96XH*3L-" D)"0D):68 *&ES5'EP92AT;VLN=&]K96XI*2![
M;W< ;F5W($1,97AE<D5X8V5P=&EO;BAT:&ES+"`B97AP96-T960 ='EP92!A
M9G1E<B`G.B<B*3L-" D)"0D)=&]K(#T
M"0D)?2!E;'-E(&EF("AI<U1Y<&4H=&]K+G1O:V5N*2D >PT*"0D)"2\O(&5N
M*#L
M;VME;B`]/2!43TLN5$]+<F-U<FQY*2!B<F5A:SL-" T*"0D)"2\O($YE960
M86X :61E;G1I9FEE<CH-" D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI
M"69O<B`H.SLI('L-" D)"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"0D)
M:68 *'1O:RYT;VME;B`]/2!43TLN5$]+8V]M;6$I(&)R96%K.PT*"0D)"0D)
M96QS92!I9B`H=&]K+G1O:V5N(#T](%1/2RY43TMR8W5R;'DI(&)R96%K.PT*
M"0D)"0D)96QS92!E=BYV86QU92!^/2!T;VMT;W-T<EMT;VLN=&]K96Y=.PT*
M:"D 96XN=F%L=65S+FQE;F=T:"`](&5N+G9A;'5E<RYL96YG=& *B`R.PT*
M"0D)"65N+G9A;'5E<UMI72`](&5V.PT*"0D)"2LK:3L-" T*"0D)"6EF("AT
M5&]K96XH=&]K+"!43TLN5$]+8V]M;6$L("(G+"<B*3L-" D)"7T-" D)"65N
M<'5B;&EC. H)"2\O(%!A<G-E('1H92!M;V1U;&4Z" D)=F]I9"!G;R I('L*
M"0D):6YT"0EI;F1E;G0 /2`P.PH*"0D)<F5S=&%R=" I.PH)"0EF;W( *#L[
M*2![" D)"0E4;VME;BH)=&]K+"!N=&]K.PH*"0D)"2\O($=R86( =&AE(&YE
M>'0 =&]K96X 9G)O;2!T:&4 9FEL92P 82!N=6QL('1O:V5N(&ES('1H92!E
M;F0 ;V8 =&AE(&9I;&4Z" D)"0ET;VL /2!N97AT5&]K96XH*3L*"0D)"6EF
M("AT;VL :7, ;G5L;"D 8G)E86L[" H)"0D)9&5B=6< >PH)"0D)"2\O(%1H
M:7, 9'5M<', ;W5T('1H92!V87)I;W5S('1O:V5N<R`H8F%S:6-A;&QY(')E
M9F]R;6%T<R!T:&4 <V]U<F-E*3H*"0D)"0EI9B`H=&]K+G1O:V5N(#T](%1/
M2RY43TMI9&5N=&EF:65R*0H)"0D)"0EP<FEN=&8H(B4N*G, (BP =&]K+FED
M96YT*3L*"0D)"0EE;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2V-H87)V
M*0H)"0D)"0EP<FEN=&8H(B<E+BIS)R`B+"!T;VLN:61E;G0I.PH)"0D)"65L
M<V4 :68 *'1O:RYT;VME;B`]/2!43TLN5$]+<W1R:6YG*0H)"0D)"0EP<FEN
M=&8H(EPB)2XJ<UPB("(L('1O:RYI9&5N="D[" D)"0D)96QS92!I9B`H=&]K
M+G1O:V5N(#T](%1/2RY43TMI;G0S,G8I" D)"0D)"7!R:6YT9B B)2XJ<R`B
M+"!T;VLN:61E;G0I.PH)"0D)"65L<V4*"0D)"0D)<')I;G1F*"(E+BIS("(L
M('1O:W1O<W1R6W1O:RYT;VME;ETI.PH*"0D)"0EN=&]K(#T <&5E:U1O:V5N
M*"D[" H)"0D)"2\O($EN9&5N=&%T:6]N. H)"0D)"6EF(" A*&YT;VL :7,
M;G5L;"DI" D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+
M<F-U<FQY*0H)"0D)"0D)+2UI;F1E;G0[" H)"0D)"6EF("AT;VLN=&]K96X
M/3T 5$]++E1/2VQC=7)L>2D >PH)"0D)"0DK*VEN9&5N=#L*"0D)"0D)<')I
M;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN="!I(#T ,#L :2`\(&EN9&5N=#L
M*RMI*2!P<FEN=&8H(EQT(BD[" D)"0D)?2!E;'-E(&EF(" H=&]K+G1O:V5N
M(#T](%1/2RY43TMS96UI8V]L;VXI('Q\("AT;VLN=&]K96X /3T 5$]++E1/
M2W)C=7)L>2DI('L*"0D)"0D)<')I;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN
M="!I(#T ,#L :2`\(&EN9&5N=#L *RMI*2!P<FEN=&8H(EQT(BD[" D)"0D)
M?0H*"0D)"7T 96QS92![" H)"0D)"2\O(%!A<G-E(&$ ;6]D=6QE. T*"0D)
M"0ES=VET8V *'1O:RYT;VME;BD >PT*"0D)"0D)8V%S92!43TLN5$]+97AT
M*%1/2RY43TML<&%R96XL("(G*"<B*3L-" D)"0D)"0EC:&%R6UT);&EN:V%G
M92`](&5X<&5C="A43TLN5$]+:61E;G1I9FEE<BP (FED96YT:69I97(B*2YI
M9&5N=#L-" D)"0D)"0EE>'!E8W0H5$]++E1/2W)P87)E;BP (B<I)R(I.PT*
M"0D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+8V]L;VXI
M;'-E(&EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![
M;G0 /2!L:6YK86=E.PT*"0D)"0D)"7T-" D)"0D)"0EB<F5A:SL-" D)"0D)
M"7T-" T*"0D)"0D)+R\ 4W1A<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO
M;B!D969I;FET:6]N. T*"0D)"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)
M8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N<S Z" D)"0D)"6-A<V4 5$]+
M3TLN5$]+=6YS-C0Z" D)"0D)"6-A<V4 5$]++E1/2V9L;V%T,S(L(%1/2RY4
M:6UA9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I
M;F%R>3 P. H)"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC
M2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET
M"0D)+R\ 0V]N<W1R=6-T('1H92!T>7!E(&]F('1H92!I9&5N=&EF:65R. T*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ,3L-" D)"0D)"0ET>7!E6S!=(#T =&]K
M.PT*"0D)"0D)"7=H:6QE(" H;G1O:R`](&YE>'14;VME;B I*2YT;VME;B`A
M/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"0D)"0ET>7!E+FQE;F=T:"`]
M('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)='EP95ML96YG=& +2`Q72`]
M9FEE<CH-" D)"0D)"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I
M9FEE<BP (FED96YT:69I97( 869T97( ='EP92(I.PT*"0D)"0D)"6ED96YT
M(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D)"2\O($=E="!T:&4 86-C97-S(')I
M9VAT<R!F;W( =&AI<R!I9&5N=&EF:65R. T*"0D)"0D)"6-U<F%R(#T 9V5T
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD >PT*"0D)"0D)
M;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N=#L-" D)"0D)
M"0D)9G5N8RYT>7!E(#T
M92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E<W, /2!C=7)A
M"0D)"61M;V1U;&4N9G5N8W,N;&5N9W1H(#T 9&UO9'5L92YF=6YC<RYL96YG
M9G5N8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-
M"0D)+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)
M;G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]
M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)"0D)"0EE>'!E8W14
M"0D)?2!E;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI
M<W0 =&AE<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M5F%R* EV87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T :61E
M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" D)"0D)"0D)"6EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMA<W-I9VXI('L-" D)"0D)"0D)"0EF;W( *#L[
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)
M"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQB<F%C:V5T+"!43TLN5$]+<F)R86-K
M970I.PT*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U
M<FQY*0T*"0D)"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]+
M(#T](%1/2RY43TMS96UI8V]L;VXI(&)R96%K.PT*"0D)"0D)"0D)"7T-" D)
M"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B
M<F5A:SL-" D)"0D)"0D)"7T 96QS92!I9B`H;G1O:RYT;VME;B`A/2!43TLN
M5$]+8V]M;6$I('L-" D)"0D)"0D)"0DO+R!-=7-T(&)E(&UO<F4 ='EP93H-
M" D)"0D)"0D)"0EF;W( *#L
M5&]K96XH*3L-" D)"0D)"0D)"0D)+R\ 5$]$3SH ($AA;F1L92!A9&1I;F<
M='EP92!I;F9O+ T*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN
M5$]+87-S:6=N*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X
M/3T 5$]++E1/2V-O;6UA*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN
M?0T*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMS96UI8V]L
M;VXI(&)R96%K.PT*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY4
M3TMA<W-I9VXI('L-" D)"0D)"0D)"0D)9F]R(" [.RD >PT*"0D)"0D)"0D)
M"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN
M=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)"0D)"0D)"7-K:7!.
M97-T*%1/2RY43TML8G)A8VME="P 5$]++E1/2W)B<F%C:V5T*3L-" D)"0D)
M"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T
M"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]++E1/2W)C=7)L
M;6$I(&)R96%K.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]+
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W-E;6EC;VQO;BD 8G)E86L[
M;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0D)"65X<&5C=%1O:V5N*&YT;VLL
M(%1/2RY43TMI9&5N=&EF:65R+"`B:61E;G1I9FEE<B(I.PT*"0D)"0D)"0D)
M"0D)"7T-" H)"0D)"0EC87-E(%1/2RY43TMC;&%S<SH >PH)"0D)"0D)1$-L
M87-S* D)8VQS(#T
M8VQA<W, =&\ =&AE(&UO9'5L93H*"0D)"0D)"61M;V1U;&4N8VQA<W-E<RYL
M96YG=& /2!D;6]D=6QE+F-L87-S97,N;&5N9W1H("L ,3L*"0D)"0D)"61M
M;V1U;&4N8VQA<W-E<UML96YG=& +2`Q72`](&-L<SL-" D)"0D)"0D-" D)
M"0D)8G)E86L[" D)"0D)"7T-" D)"0D)"6-A<V4 5$]++E1/2VEM<&]R=#H
M>PH)"0D)"0D)1$EM<&]R="H):6UP(#T <&%R<V5);7!O<G0H*3L*" D)"0D)
M"0DO+R!!9&0 =&AE(&EM<&]R="!T;R!T:&4 ;6]D=6QE. H)"0D)"0D)9&UO
M9'5L92YI;7!O<G1S+FQE;F=T:"`](&1M;V1U;&4N:6UP;W)T<RYL96YG=&
M.PT*"0D)"0D)"6)R96%K.PH)"0D)"0E]" D)"0D)"6-A<V4 5$]++E1/2VUO
M9'5L93H >PH)"0D)"0D)8VAA<EM="6UO9#L*" D)"0D)"0DO+R!'970 =&AE
M(&UO9'5L92=S(&ED96YT:69I97(Z" D)"0D)"0EW:&EL92`H*&YT;VL /2!N
M97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)"0D)
M"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0H)"0D)
M"0D)"0EM;V0 ?CT ;G1O:RYI9&5N=#L*"0D)"0D)"0EE;'-E(&EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMD;W0I" D)"0D)"0D)"6UO9"!^/2`B+B([" D)
M"0D)"0E]" H)"0D)"0D)9&UO9'5L92YN86UE(#T ;6]D.PT*"0D)"0D)"6%R
M1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)"0D)"0EB<F5A
M;6]D=6QE+G-T<G5C=',N;&5N9W1H(#T 9&UO9'5L92YS=')U8W1S+FQE;F=T
M3TMU;FEO;CH >PT*"0D)"0D)"413=')U8W0J"7-T(#T <&%R<V53=')U8W0H
M*3L-" T*"0D)"0D)"61M;V1U;&4N=6YI;VYS+FQE;F=T:"`](&1M;V1U;&4N
M9W1H("T ,5T /2!S=#L-" D)"0D)"0EB<F5A:SL-" D)"0D)"7T-" D)"0D)
M"6-A<V4 5$]++E1/2V5N=6TZ('L-" D)"0D)"0E$16YU;2H)"7-T(#T <&%R
M;V1U;&4N96YU;7,N;&5N9W1H("L ,3L-" D)"0D)"0ED;6]D=6QE+F5N=6US
M>PT*"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0T*"0D)
M;6$M<V5P87)A=&5D(&QI<W0 ;V8 <&%R86UE=&5R<SH-"F-H87);72!P87)M
M/2`B+"`B.PT*"0EI9B`H*'!A<FTN;6]D:69I97( )B!A8V-E<W--;V1I9FEE
M<BYA;4EN3W5T*2`]/2!A8V-E<W--;V1I9FEE<BYA;4]U="D-" D)"7, ?CT
M(F]U="`B.PT*"0EE;'-E(&EF(" H<&%R;2YM;V1I9FEE<B`F(&%C8V5S<TUO
M9&EF:65R+F%M26Y/=70I(#T
M"0ES('X](")I;F]U="`B.PT*"0ES('X]('1Y<&53=')I;F<H<&%R;2YT>7!E
M:60 9'5M<%-T<G5C="A$4W1R=6-T("IS="P :6YT(&EN9&5N="P 8F]O;"!I
M:2`\(&EN9&5N=#L *RMI*2!I;F1S='( ?CT (EQT(CL-" T*"7!R:6YT9B B
M*'-T+FYA;64 :7, ;G5L;"D-" D)<')I;G1F*")[7&XB*3L*"65L<V4*"0EP
M" D)<')I;G1F*"(E+BIS7'0B+"!I;F1S='(I.PT*"0EP<FEN=&8H(B4N*G-<
M="4N*G,[7&XB+"!T>7!E4W1R:6YG*'9A<BYT>7!E*2P =F%R+FYA;64I.PT*
M"7T-" T*"69O<F5A8V *$1&=6YC*B!F=6YC.R!S="YF=6YC<RD >PT*"0EP
M<W,I('L-" D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H
M8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN
M9V4 (3T (D0B*0T*"0D)<')I;G1F*")E>'1E<FX *"4N*G,I("(L(&9U;F,N
M<&53=')I;F<H9G5N8RYT>7!E*2P 9G5N8RYN86UE+"!P87)M;&ES="AF=6YC
M<FEN=&8H(GU<;EQN(BD["GT-" T*+R\ 4VEM<&QE(&UA:6X <')O9W)A;3H*
M:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1%1A9W,);&5X.PH)1FEL90ED
M9FEL93L*" EI9B`H87)G<RYL96YG=& /#T ,2D >PH)"7!R:6YT9B B)2XJ
M<R`\9FEL92YD/EQN(BP 87)G<ULP72D[" D)<F5T=7)N("TQ.PH)?0H*"2\O
M($]P96X =&AE(&9I;&4Z" ED9FEL92`](&YE=R!&:6QE*&%R9W-;,5TI.PH)
M+R\ 4V5N9"!I;B!T:&4 8G5F9F5R('1O('1H92!L97AE<CH*"6-H87);70ES
M='( /2!D9FEL92YR96%D4W1R:6YG*&1F:6QE+G-I>F4H*2D[" H);&5X(#T
M;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( ;&]O<V4Z
M" EL97 N9V\H*3L*" DO+R!297!O<G0 =&AE(')E<W5L=',Z" H)<')I;G1F
M*")M;V1U;&4 )2XJ<R![7&XB+"!L97 N9&UO9'5L92YN86UE*3L*" EP<FEN
M=&8H(EQT<'5B;&EC("!I;7!O<G1S("(I.PH)9F]R96%C:"`H:6YT(&DL($1)
M;7!O<G0J(&EM.R!L97 N9&UO9'5L92YI;7!O<G1S*2![" D):68 *&EM+F%C
M8V5S<R`]/2!A8V-E<W-2:6=H=',N87)0=6)L:6,I('L*"0D):68 *&D /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L(&EM+FYA;64I.PH)
M"7T*"7T*"7!R:6YT9B B.UQN(BD[" H)<')I;G1F*")<='!R:79A=&4 :6UP
M;W)T<R`B*3L*"69O<F5A8V *&EN="!I+"!$26UP;W)T*B!I;3L ;&5X+F1M
M;V1U;&4N:6UP;W)T<RD >PH)"6EF("AI;2YA8V-E<W, /3T 86-C97-S4FEG
M"0D)<')I;G1F*"(E+BIS(BP :6TN;F%M92D[" D)?0H)?0H)<')I;G1F*"([
M7&Y<;B(I.PH*"2\O($5N=6US. H)9F]R96%C:"`H1$5N=6TJ(&5N.R!L97 N
M9&UO9'5L92YE;G5M<RD >PH)"7!R:6YT9B B7'1E;G5M("4N*G, >UQN(BP
M96XN;F%M92D[" D)9F]R96%C:"`H1$5N=6TN96YU;59A;'5E(&5V.R!E;BYV
M86QU97,I('L-" D)"6EF("AE=BYV86QU92!I<R!N=6QL*0T*"0D)"7!R:6YT
M9B B7'1<="4N*G,L7&XB+"!E=BYN86UE*3L*"0D)96QS90H)"0D)<')I;G1F
M*")<=%QT)2XJ<R`]("4N*G,L7&XB+"!E=BYN86UE+"!E=BYV86QU92D[" D)
M?0H)"7!R:6YT9B B7'1]7&Y<;B(I.PH)?0H*"2\O(%-T<G5C=',Z" EF;W)E
M86-H("A$4W1R=6-T*B!S=#L ;&5X+F1M;V1U;&4N<W1R=6-T<RD >PT*"0ED
M;W)E86-H("A$4W1R=6-T*B!S=#L
M. H)9F]R96%C:"`H1%9A<BH =G([(&QE>"YD;6]D=6QE+G9A<G,I('L*"0EP
M<FEN=&8H(EQT)2XJ<UQT)2XJ<SM<;B(L('1Y<&53=')I;F<H=G(N='EP92DL
M('9R+FYA;64I.PH)?0H):68 *&QE>"YD;6]D=6QE+G9A<G,N;&5N9W1H(#X
M,"D <')I;G1F*")<;B(I.PH*"2\O($-L87-S97,Z" EF;W)E86-H("A$0VQA
M<W,J(&-L.R!L97 N9&UO9'5L92YC;&%S<V5S*2![" D):6YT"6H /2`P.PH*
M"0EP<FEN=&8H(EQT8VQA<W, )2XJ<R(L(&-L+FYA;64I.PH)"6EF("AC;"YI
M:6YT97)F86-E<RYL96YG=& /B`P*2!P<FEN=&8H(B`Z("(I.PH*"0EF;W)E
M86-H("AC:&%R6UT =CL 8VPN:6EN=&5R9F%C97,I('L*"0D):68 *&H /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L('8I.PH)"0DK*VH[
M" D)?0H)"7!R:6YT9B B('M<;B(I.PH*"0DO+R!687)I86)L97,Z" D)9F]R
M*3L-" D)"7-W:71C:"`H=F%R+F%C8V5S<RD >PT*"0D)"6-A<V4 86-C97-S
M"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN=&8H(G!R:79A
M=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4')O=&5C
M8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN=&8H(G!A8VMA9V4 (BD[(&)R
M96%K.PT*"0D)?0T*"0D)<')I;G1F*"(E+BIS7'0E+BIS.UQN(BP ='EP95-T
M<FEN9RAV87(N='EP92DL('9A<BYN86UE*3L-" D)?0T*"0EI9B`H8VPN=F%R
M;W)S. T*"0EF;W)E86-H("A$1G5N8RH 9G5N8SL 8VPN8W1O<G,I('L-" D)
M"7!R:6YT9B B7'1<="(I.PT*"0D)<W=I=&-H("AF=6YC+F%C8V5S<RD >PT*
M"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H(G!U8FQI
M.B!P<FEN=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S
M4FEG:'1S+F%R4')O=&5C=&5D.B!P<FEN=&8H(G!R;W1E8W1E9"`B*3L 8G)E
M(G!A8VMA9V4 (BD[(&)R96%K.PT*"0D)?0T*"0D)<')I;G1F*")T:&ES*"4N
M*G,I.UQN(BP <&%R;6QI<W0H9G5N8RYP87)M<RDI.PT*"0E]" T*"0DO+R!$
M97-T<G5C=&]R<SH-" D)9F]R96%C:"`H1$9U;F,J(&9U;F,[(&-L+F1T;W)S
M<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F
M*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R
M4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)"0EC87-E
M(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960
M(BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H
M<')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R:6YT9B B
M8RYA8V-E<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH
M<')I;G1F*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG
M:'1S+F%R4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)
M"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T
M96-T960 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C
M:V%G93H <')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R
M:6YT9B B)2XJ<UQT)2XJ<R E+BIS*3M<;B(L('1Y<&53=')I;F<H9G5N8RYT
M" D)<')I;G1F*")<='U<;EQN(BD[" E]" T*"2\O($9U;F-T:6]N<SH-" EF
M;W)E86-H("A$1G5N8RH 9G5N8SL ;&5X+F1M;V1U;&4N9G5N8W,I('L-" D)
M87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F*")P=6)L:6, (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN
M=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960Z('!R:6YT9B B<')O=&5C=&5D("(I.R!B<F5A:SL-" D)
M"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H <')I;G1F*")P86-K86=E
M("(I.R!B<F5A:SL-" D)?0T*"0EP<FEN=&8H(B4N*G-<="4N*G,H)2XJ<RD[
M7&XB+"!T>7!E4W1R:6YG*&9U;F,N='EP92DL(&9U;F,N;F%M92P <&%R;6QI
'<FX ,#L*?2YP
`
end
Dec 18 2004
In article <cq30e7$31fq$1 digitaldaemon.com>, James Dunne says...
Hey all again,
I thought I'd release my D parser now. This puppy is still very much a work in
progress, but will successfully parse relatively simple D programs. Writing a
parser isn't very difficult, it's just a lot of work ;). This module uses my
dlexer module I released in this thread. And so, it is a good(?) example of how
to use the dlexer module.
The point of this module is to parse D programs for code-completion purposes. A
few simple structures are used to represent the module's information. An
example program is supplied which dumps out the parsed module's structs, enums,
classes, functions, and variables.
I should mention that functionality is somewhat limited: version blocks aren't
parsed correctly, and the type parsing on identifiers and functions is somewhat
lacking. I do intend to fix these issues in the next couple of days. Test it
out on some D programs you have lying around (or the phobos library for a good
kick).
Regards,
James Dunne
begin 0644 dtags.d
M=&\ 9&ES=')I8G5T92!T:&ES(&UO9'5L92!I;B!A;GD 9F]R;2!Y;W4 ;&EK
M92X ($D ;VYL>2!A<VL =&AA="!Y;W4-"B\O(&=I=F4 8W)E9&ET('=H97)E
M(&-R961I="!I<R!D=64N("!9;W4 ;6%Y(&UA:V4 ;6]D:69I8V%T:6]N<R!T
M;R!T:&ES(&UO9'5L92X ($EF('EO=2!D;PT*+R\ <V\L('EO=2!M87D <')O
M=FED92!Y;W5R(&UO9&EF:6-A=&EO;G, <'5B;&EC;'DL(&)U="!Y;W4 87)E
M(&YO="!R97%U:7)E9"!T;RX-" T*+R\ 5$]$3R!L:7-T. T*+R\ +2!C;W)R
M96-T('!A<G-I;F< ;V8 ='EP92!D96-L87)A=&EO;G, :6X :61E;G1I9FEE
M<G, 86YD(&9U;F-T:6]N<PT*+R\ +2!I;G1E<F9A8V4 <&%R<VEN9PT*+R\
M+2!V97)S:6]N('M](&)L;V-K<PT*+R\ +2!C;W)R96-T(&5X=&5R;B`H='EP
M92D >R!](&)L;V-K<RP (F5X=&5R;B`H='EP92DZ(B!A;F0 (F5X=&5R;B`H
M='EP92D 9&5C;"( =V]R:RX-"B\O("T 8V]M<&QE=&4 86-C97-S(&UO9&EF
M:65R<R!O;B!F=6YC=&EO;G,-" T*;6]D=6QE"61T86=S.PH*:6UP;W)T"7-T
M9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T>7!E
M.PH*:6UP;W)T"61L97AE<CL*"B\O('!U8FQI8RP <')I=F%T92P 971C+B!A
M8V-E<W,Z"F5N=6T 86-C97-S4FEG:'1S(#H :6YT('L*"6%R56YD969I;F5D
M(#T +3$L" EA<E!U8FQI8RP*"6%R4&%C:V%G92P*"6%R4')O=&5C=&5D+`H)
M87)0<FEV871E"GT[" HO+R!C;VYS="P 9FEN86PL(&%U=&\L(&5T8RX ;6]D
M:69I97)S. IE;G5M(&%C8V5S<TUO9&EF:65R(#H =6EN="![" EA;4-O;G-T
M;V1U;&4 :6UP;W)T. IS=')U8W0 1$EM<&]R="![" EC:&%R6UT)"0EN86UE
M.PH)86-C97-S4FEG:'1S"6%C8V5S<SL)"2\O(&UA:6YL>2!F;W( <'5B;&EC
M(&%N9"!P<FEV871E('%U86QI9FEE<G,*?3L*"B\O($$ =F%R:6%B;&4Z"G-T
M<G5C="!$5F%R('L*"6-H87);70D);F%M93L*"51O:V5N*EM="71Y<&4[" H)
M86-C97-S4FEG:'1S"6%C8V5S<SL*"6%C8V5S<TUO9&EF:65R"6UO9&EF:65R
M.PDO+R!M86EN;'D 9F]R(&EN+"!O=70L(&%N9"!I;F]U=`I].PH*+R\ 06X
M5$]+"0D)='EP93L)"0DO+R!T>7!E(&]F('9A;'5E<R!I;B!E;G5M97)A=&EO
M; H*"7-T<G5C="!E;G5M5F%L=64 >PH)"6-H87);70EN86UE.PH)"6-H87);
M70EV86QU93L*"7T*"65N=6U686QU95M="79A;'5E<SL*?3L*"B\O($$ <W1R
M=6-T=7)E. IS=')U8W0 1%-T<G5C="![" EC:&%R6UT)"6YA;64[" H)1%9A
M<BI;70D)=F%R<SL*"41&=6YC*EM="69U;F-S.PT*"413=')U8W0J6UT)<W1R
M=6-T<RP =6YI;VYS.PT*?3L*"B\O($$ 9G5N8W1I;VXZ"G-T<G5C="!$1G5N
M8R![" EC:&%R6UT)"6YA;64[" E4;VME;BI;70ET>7!E.PT*"6-H87);70D)
M;&EN:V%G93L*" E$5F%R*EM="0EP87)M<RP =F%R<SL*"413=')U8W0J6UT)
M<W1R=6-T<RP =6YI;VYS.PH)1$5N=6TJ6UT)96YU;7,[" E$1G5N8RI;70EF
M=6YC<SL*" EA8V-E<W-2:6=H=',)86-C97-S.PH)86-C97-S36]D:69I97()
M;6]D:69I97(["GT[" HO+R!!;B!I;G1E<F9A8V4Z"G-T<G5C="!$26YT97)F
M86-E('L*"6-H87);70D)"6YA;64[" EA8V-E<W-2:6=H=',)86-C97-S.PH)
M86-C97-S36]D:69I97();6]D:69I97([" H)+R\ 26YH97)I=&5D(&EN=&5R
M9F%C97,Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$1G5N8RI;70EF=6YC
M<SL*?3L*"B\O($$ 8VQA<W,Z"G-T<G5C="!$0VQA<W, >PH)8VAA<EM="0D)
M;F%M93L*"6%C8V5S<U)I9VAT<PEA8V-E<W,[" EA8V-E<W--;V1I9FEE< EM
M;V1I9FEE<CL*" DO+R!);FAE<FET960 :6YT97)F86-E<R`H86YD(&-L87-S
M97,I+"!C86XG="!D:7-T:6YG=6ES:"!B971W965N(&$ 8VQA<W, ;W( :6YT
M97)F86-E(&AE<F4Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$4W1R=6-T
M*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM="65N=6US.PH)1$9U;F,J
M6UT)9G5N8W,L(&-T;W)S+"!D=&]R<SL*"41687(J6UT)"79A<G,["GT[" HO
M+R!!(&UO9'5L93H*<W1R=6-T($1-;V1U;&4 >PH)8VAA<EM="6YA;64[" H)
M1$EM<&]R="I;70EI;7!O<G1S.PH)1$-L87-S*EM="6-L87-S97,L(&EN=&5R
M9F%C97,[" E$4W1R=6-T*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM=
M"65N=6US.PH)1$9U;F,J6UT)9G5N8W,[" E$5F%R*EM="0EV87)S.PI].PH*
M8VQA<W, 1%1A9W, .B!$3&5X97( >PH)<')I=F%T93H*"0EA8V-E<W-2:6=H
M;G0L(&QN:T1E9F%U;'0[" H)<'5B;&EC. H)"2\O(%1H92!P=6)L:6-L>2!A
M=F%I;&%B;&4 ;6]D=6QE('1A9R!S=')U8W1U<F4Z" D)1$UO9'5L92H)9&UO
M9'5L93L*" D)+R\ 3&]A9"!U<"!T:&4 ;6]D=6QE('-O=7)C92!C;V1E. H)
M"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R6UT <W)C*2![" D)"2\O($QO
M860 =7` =&AE('-O=7)C92!F;W( =&AE(&QE>&5R. H)"0ES=7!E<BAF:6QE
M;F%M92P <W)C*3L*" D)"2\O($-R96%T92!A(&1E9F%U;'0 ;6]D=6QE('-T
M<G5C='5R93H*"0D)9&UO9'5L92`](&YE=R!$36]D=6QE.PH)"0ED;6]D=6QE
M+FYA;64 /2!F:6QE;F%M93L*" D)"2\O(%-E="!T:&4 9&5F875L="!A8V-E
M<W, <FEG:'1S(&9O<B!N97=L>2!C<F5A=&5D(&ED96YT:69I97)S. H)"0EA
M<D1E9F%U;'0 /2!A8V-E<W-2:6=H=',N87)0=6)L:6,[" D)"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E5N9&5F:6YE9#L-" D)"6QN:T1E9F%U;'0
M" D)+R\ 17AP96-T(&$ =&]K96X 86YD('1H<F]W(&%N(&5X8V5P=&EO;B!I
M9B!N;W0 9F]U;F0Z" D)5&]K96XJ"65X<&5C="A43TL =F%L=64L(&-H87);
M72!M<V<I('L*"0D)5&]K96XJ"6YT;VL /2!N97AT5&]K96XH*3L*"0D):68
M86QU92D*"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X
M<&5C=&5D("( ?B!M<V<I.PH)"0ER971U<FX ;G1O:SL*"0E]" H)"2\O($5X
M<&5C="!A('1O:V5N(&%N9"!T:')O=R!A;B!E>&-E<'1I;VX :68 ;F]T(&9O
M=6YD. H)"51O:V5N* EE>'!E8W14;VME;BA4;VME;B`J=&]K+"!43TL =F%L
M=64L(&-H87);72!M<V<I('L*"0D):68 *'1O:RYT;VME;B`A/2!V86QU92D*
M"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X<&5C=&5D
M("( ?B!M<V<I.PH)"0ER971U<FX =&]K.PH)"7T-" T*"0DO+R!)<R!T:&ES
M('1O:V5N(&$ 8F%S:6, ='EP93\-" D)8F]O;"!I<U1Y<&4H5$]+('9A;'5E
M9#H
M92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)"6-A<V4 5$]++E1/
M5$]++E1/2W5N<S8T. H)"0D)8V%S92!43TLN5$]+9FQO870S,BP 5$]++E1/
M9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R
M93L-" D)"7T-" D)"7)E='5R;B!F86QS93L*"0E]" H)"2\O($=E="!T:&4
M8W5R<F5N="!O<B!D969A=6QT(&%C8V5S<R!R:6=H=#H*"0EA8V-E<W-2:6=H
M=',)9V5T06-C97-S*"D >PH)"0EA8V-E<W-2:6=H=',)87( /2!A8V-E<W-2
M:6=H=',N87)5;F1E9FEN960[" D)"6EF("AA<D-U<G)E;G0 (3T 86-C97-S
M4FEG:'1S+F%R56YD969I;F5D*2
M"2\O($EN=F%L:61A=&4 =&AE(&-U<G)E;G0 86-C97-S(')I9VAT. H)"0D)
M<V4 >PH)"0D)+R\ 57-E('1H92!D969A=6QT(&EF(&YO(&-U<G)E;G0 86-C
M97-S('-P96-I9FEE9#H*"0D)"6%R(#T 87)$969A=6QT.PH)"0E]" D)"7)E
M875L="!F=6YC=&EO;B!L:6YK86=E. T*"0EC:&%R6UT)9V5T3&EN:V%G92 I
M('L-" D)"6-H87);70EL:6YK86=E(#T (D0B.PT*"0D):68 *&QN:T-U<G)E
M;G0 :7, ;G5L;"D >PT*"0D)"6QI;FMA9V4 /2!L;FM$969A=6QT.PT*"0D)
M?2!E;'-E('L-" D)"0EL:6YK86=E(#T ;&YK0W5R<F5N=#L-
M=7)R96YT(#T ;G5L;#L-" D)"7T-" D)"7)E='5R;B!L:6YK86=E.PT*"0E]
M" H)"2\O(%-K:7` ;W9E<B!A('-E="!O9B!N97-T960 =&]K96YS. T*"0EV
M;VED('-K:7!.97-T*%1/2R!L+"!43TL <BD >PT*"0D):6YT"6YE<W0 /2`P
M.PT*"0D)9F]R(" [.RD >PT*"0D)"51O:V5N* ET;VL /2!N97AT5&]K96XH
M*3L-" D)"0EI9B`H=&]K(&ES(&YU;&PI(&)R96%K.PT*"0D)"6EF("AT;VLN
M=&]K96X /3T ;"D *RMN97-T.PT*"0D)"6EF("AT;VLN=&]K96X /3T <BD
M. T*"0EV;VED(')E861087)A;65T97)S*&EN;W5T($1687(J6UT <&%R;7,I
M('L-" D)"51O:V5N* D)"71O:SL-" D)"6%C8V5S<TUO9&EF:65R"6YE>'1A
M;3L-" T*"0D);F5X=&%M(#T 86-C97-S36]D:69I97(N86U);CL-" T*"0D)
M9F]R(" [.RD >PT*"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT
M=&-H("AT;VLN=&]K96XI('L-" D)"0D)8V%S92!43TLN5$]+:6XZ"0EN97AT
M86T /2!A8V-E<W--;V1I9FEE<BYA;4EN.R!B<F5A:SL-" D)"0D)8V%S92!4
M3TLN5$]+;W5T. EN97AT86T /2!A8V-E<W--;V1I9FEE<BYA;4]U=#L 8G)E
M5$]++E1/2W9O:60Z" D)"0D)8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N
M<S Z" D)"0D)8V%S92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)
M"0EC87-E(%1/2RY43TMI;G0S,BP 5$]++E1/2W5N<S,R. H)"0D)"6-A<V4
M"6-A<V4 5$]++E1/2VEM86=I;F%R>3,R+"!43TLN5$]+:6UA9VEN87)Y-C0L
M(%1/2RY43TMI;6%G:6YA<GDX,#H*"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X
M8V%S92!43TLN5$]+8VAA<BP 5$]++E1/2W=C:&%R+"!43TLN5$]+9&-H87(L
M(%1/2RY43TMB:70Z" D)"0D)8V%S92!43TLN5$]+:61E;G1I9FEE<CH >PT*
M"0D)=VAI;&4 *"AN=&]K(#T ;F5X=%1O:V5N*"DI+G1O:V5N("$](%1/2RY4
M"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I9FEE<BP (FED96YT
M:69I97( 869T97( ='EP92(I.PT*"0D)"0D):61E;G0 /2!N=&]K+FED96YT
M(&YE=R!$5F%R.PT*"0D)"0D)=F%R+FYA;64 /2!I9&5N=#L-" D)"0D)"79A
M<BYT>7!E(#T ='EP93L-" D)"0D)"79A<BYM;V1I9FEE<B`](&YE>'1A;3L-
M" T*"0D)"0D)<&%R;7,N;&5N9W1H(#T <&%R;7,N;&5N9W1H("L ,3L-" D)
M" T*"0D)"0ED969A=6QT. T*"0D)"7T-" D)"7T-" D)?0T*" D)+R\ 4&%R
M<V4 86X :6UP;W)T(&QI;F4Z" D)+R\ 4W1A<G1S(&%F=&5R(&EM<&]R="!T
M;VME;BX*"0E$26UP;W)T*B!P87)S94EM<&]R=" I('L*"0D)1$EM<&]R="H)
M:6UP.PH)"0EC:&%R6UT)"6ED96YT.PH)"0E4;VME;BH)"6YT;VL[" H)"0DO
M+R!'970 =&AE(&EM<&]R="!I9&5N=&EF:65R. H)"0EW:&EL92`H*&YT;VL
M/2!N97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I" D)"0D)
M:61E;G0 ?CT ;G1O:RYI9&5N=#L*"0D)"65L<V4 :68 *&YT;VLN=&]K96X
M/3T 5$]++E1/2V1O="D*"0D)"0EI9&5N="!^/2`B+B([" D)"7T*" D)"6EM
M<"`](&YE=R!$26UP;W)T.PH)"0EI;7`N;F%M92`](&ED96YT.PH)"0EI;7`N
M86-C97-S(#T 9V5T06-C97-S*"D[" D)"7)E='5R;B!I;7`[" D)?0H-" D)
M+R\ 4&%R<V4 82!C;&%S<R!D969I;FET:6]N. H)"2\O(%-T87)T<R!A9G1E
M;&%S<RH)"6-L<SL*"0D)8VAA<EM="0EI9&5N=#L*"0D)5&]K96XJ"0EN=&]K
M.PT*"0D):6YT"0D);F5S=#L*" D)"2\O($-R96%T92!T:&4 1$-L87-S('-T
M<G5C='5R93H*"0D)8VQS(#T
M8VQA<W, :61E;G1I9FEE<CH*"0D)8VQS+FYA;64 /2!E>'!E8W0H5$]++E1/
M2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R(&-L87-S(BDN:61E;G0[
M+R\ 0VAE8VL 9F]R(&%N(&EN=&5R9F%C92!L:7-T. H)"0EN=&]K(#T ;F5X
M=%1O:V5N*"D[" D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMC;VQO;BD
M>PH)"0D)9F]R(" [.RD >PH)"0D)"6YT;VL /2!E>'!E8W0H5$]++E1/2VED
M96YT:69I97(L(")I9&5N=&EF:65R(BD[" H)"0D)"2\O($%D9"!A(&YE=R!I
M;G1E<F9A8V4Z" D)"0D)8VQS+FEI;G1E<F9A8V5S+FQE;F=T:"`](&-L<RYI
M:6YT97)F86-E<RYL96YG=& *R`Q.PH)"0D)"6-L<RYI:6YT97)F86-E<UML
M96YG=& +2`Q72`](&YT;VLN:61E;G0[" H)"0D)"6YT;VL /2!N97AT5&]K
M96XH*3L*"0D)"0DO+R!!(&QE9G0M8W5R;'D_($)R96%K+ H)"0D)"6EF("AN
M=&]K+G1O:V5N(#T](%1/2RY43TML8W5R;'DI(&)R96%K.PH)"0D)"2\O($UA
M:V4 <W5R92!I="=S(&$ 8V]M;6$Z" D)"0D)97AP96-T5&]K96XH;G1O:RP
M5$]++E1/2V-O;6UA+"`B)RPG(&]R("=[)R!A9G1E<B!I;G1E<F9A8V4B*3L*
M"0D)"7T*"0D)?0H*"0D)+R\ 36%K92!S=7)E('=E)W)E(&%T(&$ ;&5F="UC
M=7)L>2UB<F%C92`G>R<Z" D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML
M8W5R;'DL("(G>R< 869T97( :6YT97)F86-E(&QI<W0 ;W( 8VQA<W, :61E
M;G1I9FEE<B(I.PH-" D)"6YE<W0 /2`P.PH)"0EF;W( *#L
M86-E<SH-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![
M("LK;F5S=#L 8V]N=&EN=64[('T-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!4
M4&5E:R!A="!T:&4 ;F5X="!T;VME;B!T;R!S964 :68 :70G<R!A(&-O;&]N
M(&]N;'D :68 =V4G<F4 :6X =&AE(&EM;65D:6%T92!C;&%S<R!S8V]P93H-
M" D)"0EI9B`H*&YE<W0 /3T ,"D )B8 *'!E96M4;VME;B I+G1O:V5N(#T]
M(%1/2RY43TMC;VQO;BDI('L-" D)"0D)+R\ 268 <V\L('1H96X =&AE(&-U
M<G)E;G0 =&]K96X <VAO=6QD(&)E(&%N(&%C8V5S<PT*"0D)"0DO+R!M;V1I
M9FEE<BX-" D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W!R:79A=&4I
M"0D)"0EE;'-E(&EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMP<F]T96-T960I
M" D)"0D)"6%R1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)
M"0D)96QS92!I9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<&%C:V%G92D-" D)
M"65L<V4-" D)"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP
M('L-" D)"0D)+R\ 0VAE8VL =&AE('1O:V5N. T*"0D)"0ES=VET8V *&YT
M;VLN=&]K96XI('L-" D)"0D)"2\O(%-E="!T:&4 ;F5X="!U<V5D(&%C8V5S
M<R!R:6=H=#H-" D)"0D)"6-A<V4 5$]++E1/2W!R:79A=&4Z"6%R0W5R<F5N
M="`](&%C8V5S<U)I9VAT<RYA<E!R:79A=&4[(&)R96%K.PT*"0D)"0D)8V%S
M92!43TLN5$]+<')O=&5C=&5D. EA<D-U<G)E;G0 /2!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960[(&)R96%K.PT*"0D)"0D)8V%S92!43TLN5$]+<'5B;&EC
M" D)"0D)"6-A<V4 5$]++E1/2W!A8VMA9V4Z"6%R0W5R<F5N="`](&%C8V5S
M:6UP;&5M96YT871I;VX-" D)"0D)"0EB<F5A:SL-" T*"0D)"0D)+R\ 4W1A
M<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)
M"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)8V%S92!43TLN5$]+:6YT."P
M9FQO870X,#H*"0D)"0D)8V%S92!43TLN5$]+:6UA9VEN87)Y,S(L(%1/2RY4
M3TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R>3 P. H)"0D)"0EC87-E
M(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC;VUP;&5X-C0L(%1/2RY43TMC
M<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET. H)"0D)"0EC87-E(%1/2RY4
M/2`Q.PT*"0D)"0D)"71Y<&5;,%T /2!N=&]K.PT*"0D)"0D)"69O<B`H.SLI
M('L-" D)"0D)"0D)=&]K(#T
M;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I(&)R96%K.PT*"0D)"0D)
M"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI(&)R96%K.PT*"0D)
M"0D)"0ET>7!E+FQE;F=T:"`]('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)
M9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI('L-" D)"0D)"0D)97AP
M96-T*%1/2RY43TMM=6PL("(G*B<B*3L-" D)"0D)"0D):61E;G0 /2!E>'!E
M?2!E;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I('L-
M" D)"0D)"0D)+R\ 4F5A9"!T:&4 :61E;G1I9FEE<CH-" D)"0D)"0D):61E
M8W5R87( /2!G971!8V-E<W,H*3L-" T*"0D)"0D)"71O:R`](&YE>'14;VME
M;B I.PT*"0D)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD
M* EF=6YC(#T ;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N
M=#L-" D)"0D)"0D)9G5N8RYT>7!E(#T
M;F,N;&EN:V%G92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E
M<W, /2!C=7)A<CL-" T*"0D)"0D)"0DO+R!!9&0 9G5N8W1I;VX =&\ 8VQA
M8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-" D)
M+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)=&]K
M(#T
M;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI<W0 =&AE
M<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T
M"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0D)=F%R+F%C
M96YG=& *R`Q.PT*"0D)"0D)"0D)8VQS+G9A<G-;;&5N9W1H("T ,5T /2!V
M(&)R96%K.PT*"0D)"0D)"0D)97AP96-T5&]K96XH=&]K+"!43TLN5$]+8V]M
M;6$L("(G+"<B*3L-" T*"0D)"0D)"0D)=&]K(#T
M"0D)"0D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI9&5N=&EF:65R+"`B
M" D)"0D)"0D)"2\O($=E="!N97AT(&-O;6UA(&]R('-E;6EC;VQO;CH-" D)
M+E1/2W1H:7,Z('L-" D)"0D)"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-
M" D)"0D)"0E4;VME;BH);G1O:SL-" T*"0D)"0D)"69U;F,N86-C97-S(#T
M"0EC;',N8W1O<G,N;&5N9W1H(#T
M"0EC87-E(%1/2RY43TMT:6QD93H >PT*"0D)"0D)"65X<&5C="A43TLN5$]+
M=&AI<RP (B=T:&ES)R!A9G1E<B`G?B<B*3L-" T*"0D)"0D)"41&=6YC* EF
M=6YC(#T
M"0D)+R\ 061D('1H92!D97-T<G5C=&]R. T*"0D)"0D)"6-L<RYD=&]R<RYL
M96YG=& /2!C;',N9'1O<G,N;&5N9W1H("L ,3L-" D)"0D)"0EC;',N9'1O
M(#T
M96XL("(G*"<B*3L-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS
M*3L-" T*"0D)"0D)"6YT;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0EI9B`H
M;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)
M"0D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML8W5R;'DL("(G>R<B*3L-
M" D)"0D)"0ES:VEP3F5S="A43TLN5$]+;&-U<FQY+"!43TLN5$]+<F-U<FQY
M*3L-" D)"0D)"7T-" T*"0D)"0D)9&5F875L=#H-" D)"0D)"0D-" D)"0D)
M87)T(&%F=&5R('-T<G5C="]U;FEO;B!T;VME;BX-" D)1%-T<G5C="H)<&%R
M(#T
M86UE(#T ;G5L;#L-" D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT
M:69I97(I('L-" D)"0ES="YN86UE(#T =&]K+FED96YT.PT*"0D)"71O:R`]
M82!C=7)L>3H-" D)"65X<&5C=%1O:V5N*'1O:RP 5$]++E1/2VQC=7)L>2P
M(B=[)R(I.PT*"0D)+R\ 4F5A9"!I;B!A;&P =&AE(&9U;F-T:6]N<RP =F%R
M:6%B;&5S+"!S=')U8W1S+"!A;F0 =6YI;VYS. T*"0D)9F]R(" [.RD >PT*
M"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT;VLN=&]K96X /3T
M82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)"0EC87-E
M"0D)8V%S92!43TLN5$]+:6YT,S(L(%1/2RY43TMU;G,S,CH*"0D)"0EC87-E
M(%1/2RY43TMI;G0V-"P 5$]++E1/2W5N<S8T. H)"0D)"6-A<V4 5$]++E1/
M"0EC87-E(%1/2RY43TMI;6%G:6YA<GDS,BP 5$]++E1/2VEM86=I;F%R>38T
M"6-A<V4 5$]++E1/2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R
M+"!43TLN5$]+8FET. H)"0D)"6-A<V4 5$]++E1/2VED96YT:69I97(Z('L-
M" D)"0D)"51O:V5N* EN=&]K.PT*"0D)"0D)8VAA<EM="6ED96YT.PT*"0D)
M"0D)5&]K96XJ6UT)='EP93L-" T*"0D)"0D)+R\ 0V]N<W1R=6-T('1H92!T
M>7!E(&]F('1H92!I9&5N=&EF:65R. T*"0D)"0D)='EP92YL96YG=& /2`Q
M.PT*"0D)"0D)='EP95LP72`]('1O:SL-" D)"0D)"7=H:6QE(" H;G1O:R`]
M(&YE>'14;VME;B I*2YT;VME;B`A/2!43TLN5$]+:61E;G1I9FEE<BD >PT*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ='EP92YL96YG=& *R`Q.PT*"0D)"0D)
M+R!296%D('1H92!I9&5N=&EF:65R. T*"0D)"0D)97AP96-T5&]K96XH;G1O
M:RP 5$]++E1/2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R('1Y<&4B
M*3L-" D)"0D)"6ED96YT(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D);G1O:R`]
M(&YE>'14;VME;B I.PT*"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/
M2VQP87)E;BD >PT*"0D)"0D)"2\O($ET)W, 82!F=6YC=&EO;CH-" D)"0D)
M"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-" D)"0D)"0EF=6YC+FYA;64
M/2!I9&5N=#L-" D)"0D)"0EF=6YC+G1Y<&4 /2!T>7!E+F1U<#L-" D)"0D)
M(#T <W0N9G5N8W,N;&5N9W1H("L ,3L-" D)"0D)"0ES="YF=6YC<UML96YG
M97( ;&ES=#H-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS*3L-
M"0D)"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"6EF("AN=&]K+G1O
M:V5N(#T
M96-T5&]K96XH;G1O:RP 5$]++E1/2VQC=7)L>2P (B=[)R(I.PT*"0D)"0D)
M"0D)"0E](&5L<V4 >PT*"0D)"0D)"2\O($ET)W, 82!V87)I86)L92!O<B!L
M87(J"79A<B`](&YE=R!$5F%R.PT*"0D)"0D)"0EV87(N;F%M92`](&ED96YT
M.PT*"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0EV87(N
M86-C97-S(#T
M($%D9"!V87)I86)L92!T;R!C;&%S<SH-" D)"0D)"0D)<W0N=F%R<RYL96YG
M<R!T:&4 ;&ES=#H-" D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/
M5&]K96XH*3L-" D)"0D)"0D)97AP96-T5&]K96XH;G1O:RP 5$]++E1/2VED
M:RYI9&5N=#L-" T*"0D)"0D)"0DO+R!'970 ;F5X="!C;VUM82!O<B!S96UI
M<G5C=',N;&5N9W1H("L ,3L-" D)"0D)"7-T+G-T<G5C='-;;&5N9W1H("T
M2RY43TMU;FEO;CH >PT*"0D)"0D)1%-T<G5C="H)<W0R(#T <&%R<V53=')U
M8W0H*3L-" T*"0D)"0D)<W0N=6YI;VYS+FQE;F=T:"`]('-T+G5N:6]N<RYL
M"7T-" D)"7T-" D)"0T*"0D)<F5T=7)N('-T.PT*"0E]" T*"0DO+R!087)S
M92!A;B!E;G5M97)A=&EO;CH-" D)+R\ 4W1A<G0 869T97( <W1R=6-T('1O
M:V5N+ T*"0E$16YU;2H)<&%R<V5%;G5M*"D >PT*"0D)5&]K96XJ"0ET;VL[
M"0D)=&]K(#T
M86QL;W=E9#H-" D)"65N+FYA;64 /2!N=6QL.PT*"0D):68 *'1O:RYT;VME
M;B`]/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"2\O(&5N=6T :61E;G1I
M('L-" D)"0D)+R\ 96YU;2!I9&5N=&EF:65R(#H ='EP90T*"0D)"0ET;VL
M/2!N97AT5&]K96XH*3L-" D)"0D):68 *&ES5'EP92AT;VLN=&]K96XI*2![
M;W< ;F5W($1,97AE<D5X8V5P=&EO;BAT:&ES+"`B97AP96-T960 ='EP92!A
M9G1E<B`G.B<B*3L-" D)"0D)=&]K(#T
M"0D)?2!E;'-E(&EF("AI<U1Y<&4H=&]K+G1O:V5N*2D >PT*"0D)"2\O(&5N
M*#L
M;VME;B`]/2!43TLN5$]+<F-U<FQY*2!B<F5A:SL-" T*"0D)"2\O($YE960
M86X :61E;G1I9FEE<CH-" D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI
M"69O<B`H.SLI('L-" D)"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"0D)
M:68 *'1O:RYT;VME;B`]/2!43TLN5$]+8V]M;6$I(&)R96%K.PT*"0D)"0D)
M96QS92!I9B`H=&]K+G1O:V5N(#T](%1/2RY43TMR8W5R;'DI(&)R96%K.PT*
M"0D)"0D)96QS92!E=BYV86QU92!^/2!T;VMT;W-T<EMT;VLN=&]K96Y=.PT*
M:"D 96XN=F%L=65S+FQE;F=T:"`](&5N+G9A;'5E<RYL96YG=& *B`R.PT*
M"0D)"65N+G9A;'5E<UMI72`](&5V.PT*"0D)"2LK:3L-" T*"0D)"6EF("AT
M5&]K96XH=&]K+"!43TLN5$]+8V]M;6$L("(G+"<B*3L-" D)"7T-" D)"65N
M<'5B;&EC. H)"2\O(%!A<G-E('1H92!M;V1U;&4Z" D)=F]I9"!G;R I('L*
M"0D):6YT"0EI;F1E;G0 /2`P.PH*"0D)<F5S=&%R=" I.PH)"0EF;W( *#L[
M*2![" D)"0E4;VME;BH)=&]K+"!N=&]K.PH*"0D)"2\O($=R86( =&AE(&YE
M>'0 =&]K96X 9G)O;2!T:&4 9FEL92P 82!N=6QL('1O:V5N(&ES('1H92!E
M;F0 ;V8 =&AE(&9I;&4Z" D)"0ET;VL /2!N97AT5&]K96XH*3L*"0D)"6EF
M("AT;VL :7, ;G5L;"D 8G)E86L[" H)"0D)9&5B=6< >PH)"0D)"2\O(%1H
M:7, 9'5M<', ;W5T('1H92!V87)I;W5S('1O:V5N<R`H8F%S:6-A;&QY(')E
M9F]R;6%T<R!T:&4 <V]U<F-E*3H*"0D)"0EI9B`H=&]K+G1O:V5N(#T](%1/
M2RY43TMI9&5N=&EF:65R*0H)"0D)"0EP<FEN=&8H(B4N*G, (BP =&]K+FED
M96YT*3L*"0D)"0EE;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2V-H87)V
M*0H)"0D)"0EP<FEN=&8H(B<E+BIS)R`B+"!T;VLN:61E;G0I.PH)"0D)"65L
M<V4 :68 *'1O:RYT;VME;B`]/2!43TLN5$]+<W1R:6YG*0H)"0D)"0EP<FEN
M=&8H(EPB)2XJ<UPB("(L('1O:RYI9&5N="D[" D)"0D)96QS92!I9B`H=&]K
M+G1O:V5N(#T](%1/2RY43TMI;G0S,G8I" D)"0D)"7!R:6YT9B B)2XJ<R`B
M+"!T;VLN:61E;G0I.PH)"0D)"65L<V4*"0D)"0D)<')I;G1F*"(E+BIS("(L
M('1O:W1O<W1R6W1O:RYT;VME;ETI.PH*"0D)"0EN=&]K(#T <&5E:U1O:V5N
M*"D[" H)"0D)"2\O($EN9&5N=&%T:6]N. H)"0D)"6EF(" A*&YT;VL :7,
M;G5L;"DI" D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+
M<F-U<FQY*0H)"0D)"0D)+2UI;F1E;G0[" H)"0D)"6EF("AT;VLN=&]K96X
M/3T 5$]++E1/2VQC=7)L>2D >PH)"0D)"0DK*VEN9&5N=#L*"0D)"0D)<')I
M;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN="!I(#T ,#L :2`\(&EN9&5N=#L
M*RMI*2!P<FEN=&8H(EQT(BD[" D)"0D)?2!E;'-E(&EF(" H=&]K+G1O:V5N
M(#T](%1/2RY43TMS96UI8V]L;VXI('Q\("AT;VLN=&]K96X /3T 5$]++E1/
M2W)C=7)L>2DI('L*"0D)"0D)<')I;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN
M="!I(#T ,#L :2`\(&EN9&5N=#L *RMI*2!P<FEN=&8H(EQT(BD[" D)"0D)
M?0H*"0D)"7T 96QS92![" H)"0D)"2\O(%!A<G-E(&$ ;6]D=6QE. T*"0D)
M"0ES=VET8V *'1O:RYT;VME;BD >PT*"0D)"0D)8V%S92!43TLN5$]+97AT
M*%1/2RY43TML<&%R96XL("(G*"<B*3L-" D)"0D)"0EC:&%R6UT);&EN:V%G
M92`](&5X<&5C="A43TLN5$]+:61E;G1I9FEE<BP (FED96YT:69I97(B*2YI
M9&5N=#L-" D)"0D)"0EE>'!E8W0H5$]++E1/2W)P87)E;BP (B<I)R(I.PT*
M"0D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+8V]L;VXI
M;'-E(&EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![
M;G0 /2!L:6YK86=E.PT*"0D)"0D)"7T-" D)"0D)"0EB<F5A:SL-" D)"0D)
M"7T-" T*"0D)"0D)+R\ 4W1A<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO
M;B!D969I;FET:6]N. T*"0D)"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)
M8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N<S Z" D)"0D)"6-A<V4 5$]+
M3TLN5$]+=6YS-C0Z" D)"0D)"6-A<V4 5$]++E1/2V9L;V%T,S(L(%1/2RY4
M:6UA9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I
M;F%R>3 P. H)"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC
M2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET
M"0D)+R\ 0V]N<W1R=6-T('1H92!T>7!E(&]F('1H92!I9&5N=&EF:65R. T*
M"0D)"0D)"71Y<&4N;&5N9W1H(#T ,3L-" D)"0D)"0ET>7!E6S!=(#T =&]K
M.PT*"0D)"0D)"7=H:6QE(" H;G1O:R`](&YE>'14;VME;B I*2YT;VME;B`A
M/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"0D)"0ET>7!E+FQE;F=T:"`]
M('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)='EP95ML96YG=& +2`Q72`]
M9FEE<CH-" D)"0D)"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I
M9FEE<BP (FED96YT:69I97( 869T97( ='EP92(I.PT*"0D)"0D)"6ED96YT
M(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D)"2\O($=E="!T:&4 86-C97-S(')I
M9VAT<R!F;W( =&AI<R!I9&5N=&EF:65R. T*"0D)"0D)"6-U<F%R(#T 9V5T
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD >PT*"0D)"0D)
M;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N=#L-" D)"0D)
M"0D)9G5N8RYT>7!E(#T
M92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E<W, /2!C=7)A
M"0D)"61M;V1U;&4N9G5N8W,N;&5N9W1H(#T 9&UO9'5L92YF=6YC<RYL96YG
M9G5N8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-
M"0D)+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)
M;G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]
M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)"0D)"0EE>'!E8W14
M"0D)?2!E;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI
M<W0 =&AE<F5O9CH-" T*"0D)"0D)"0EF;W( *#L
M5F%R* EV87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T :61E
M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" D)"0D)"0D)"6EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMA<W-I9VXI('L-" D)"0D)"0D)"0EF;W( *#L[
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)
M"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQB<F%C:V5T+"!43TLN5$]+<F)R86-K
M970I.PT*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U
M<FQY*0T*"0D)"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]+
M(#T](%1/2RY43TMS96UI8V]L;VXI(&)R96%K.PT*"0D)"0D)"0D)"7T-" D)
M"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B
M<F5A:SL-" D)"0D)"0D)"7T 96QS92!I9B`H;G1O:RYT;VME;B`A/2!43TLN
M5$]+8V]M;6$I('L-" D)"0D)"0D)"0DO+R!-=7-T(&)E(&UO<F4 ='EP93H-
M" D)"0D)"0D)"0EF;W( *#L
M5&]K96XH*3L-" D)"0D)"0D)"0D)+R\ 5$]$3SH ($AA;F1L92!A9&1I;F<
M='EP92!I;F9O+ T*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN
M5$]+87-S:6=N*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X
M/3T 5$]++E1/2V-O;6UA*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN
M?0T*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMS96UI8V]L
M;VXI(&)R96%K.PT*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY4
M3TMA<W-I9VXI('L-" D)"0D)"0D)"0D)9F]R(" [.RD >PT*"0D)"0D)"0D)
M"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN
M=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)"0D)"0D)"7-K:7!.
M97-T*%1/2RY43TML8G)A8VME="P 5$]++E1/2W)B<F%C:V5T*3L-" D)"0D)
M"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T
M"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]++E1/2W)C=7)L
M;6$I(&)R96%K.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]+
M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W-E;6EC;VQO;BD 8G)E86L[
M;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0D)"65X<&5C=%1O:V5N*&YT;VLL
M(%1/2RY43TMI9&5N=&EF:65R+"`B:61E;G1I9FEE<B(I.PT*"0D)"0D)"0D)
M"0D)"7T-" H)"0D)"0EC87-E(%1/2RY43TMC;&%S<SH >PH)"0D)"0D)1$-L
M87-S* D)8VQS(#T
M8VQA<W, =&\ =&AE(&UO9'5L93H*"0D)"0D)"61M;V1U;&4N8VQA<W-E<RYL
M96YG=& /2!D;6]D=6QE+F-L87-S97,N;&5N9W1H("L ,3L*"0D)"0D)"61M
M;V1U;&4N8VQA<W-E<UML96YG=& +2`Q72`](&-L<SL-" D)"0D)"0D-" D)
M"0D)8G)E86L[" D)"0D)"7T-" D)"0D)"6-A<V4 5$]++E1/2VEM<&]R=#H
M>PH)"0D)"0D)1$EM<&]R="H):6UP(#T <&%R<V5);7!O<G0H*3L*" D)"0D)
M"0DO+R!!9&0 =&AE(&EM<&]R="!T;R!T:&4 ;6]D=6QE. H)"0D)"0D)9&UO
M9'5L92YI;7!O<G1S+FQE;F=T:"`](&1M;V1U;&4N:6UP;W)T<RYL96YG=&
M.PT*"0D)"0D)"6)R96%K.PH)"0D)"0E]" D)"0D)"6-A<V4 5$]++E1/2VUO
M9'5L93H >PH)"0D)"0D)8VAA<EM="6UO9#L*" D)"0D)"0DO+R!'970 =&AE
M(&UO9'5L92=S(&ED96YT:69I97(Z" D)"0D)"0EW:&EL92`H*&YT;VL /2!N
M97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)"0D)
M"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0H)"0D)
M"0D)"0EM;V0 ?CT ;G1O:RYI9&5N=#L*"0D)"0D)"0EE;'-E(&EF("AN=&]K
M+G1O:V5N(#T](%1/2RY43TMD;W0I" D)"0D)"0D)"6UO9"!^/2`B+B([" D)
M"0D)"0E]" H)"0D)"0D)9&UO9'5L92YN86UE(#T ;6]D.PT*"0D)"0D)"6%R
M1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)"0D)"0EB<F5A
M;6]D=6QE+G-T<G5C=',N;&5N9W1H(#T 9&UO9'5L92YS=')U8W1S+FQE;F=T
M3TMU;FEO;CH >PT*"0D)"0D)"413=')U8W0J"7-T(#T <&%R<V53=')U8W0H
M*3L-" T*"0D)"0D)"61M;V1U;&4N=6YI;VYS+FQE;F=T:"`](&1M;V1U;&4N
M9W1H("T ,5T /2!S=#L-" D)"0D)"0EB<F5A:SL-" D)"0D)"7T-" D)"0D)
M"6-A<V4 5$]++E1/2V5N=6TZ('L-" D)"0D)"0E$16YU;2H)"7-T(#T <&%R
M;V1U;&4N96YU;7,N;&5N9W1H("L ,3L-" D)"0D)"0ED;6]D=6QE+F5N=6US
M>PT*"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0T*"0D)
M;6$M<V5P87)A=&5D(&QI<W0 ;V8 <&%R86UE=&5R<SH-"F-H87);72!P87)M
M/2`B+"`B.PT*"0EI9B`H*'!A<FTN;6]D:69I97( )B!A8V-E<W--;V1I9FEE
M<BYA;4EN3W5T*2`]/2!A8V-E<W--;V1I9FEE<BYA;4]U="D-" D)"7, ?CT
M(F]U="`B.PT*"0EE;'-E(&EF(" H<&%R;2YM;V1I9FEE<B`F(&%C8V5S<TUO
M9&EF:65R+F%M26Y/=70I(#T
M"0ES('X](")I;F]U="`B.PT*"0ES('X]('1Y<&53=')I;F<H<&%R;2YT>7!E
M:60 9'5M<%-T<G5C="A$4W1R=6-T("IS="P :6YT(&EN9&5N="P 8F]O;"!I
M:2`\(&EN9&5N=#L *RMI*2!I;F1S='( ?CT (EQT(CL-" T*"7!R:6YT9B B
M*'-T+FYA;64 :7, ;G5L;"D-" D)<')I;G1F*")[7&XB*3L*"65L<V4*"0EP
M" D)<')I;G1F*"(E+BIS7'0B+"!I;F1S='(I.PT*"0EP<FEN=&8H(B4N*G-<
M="4N*G,[7&XB+"!T>7!E4W1R:6YG*'9A<BYT>7!E*2P =F%R+FYA;64I.PT*
M"7T-" T*"69O<F5A8V *$1&=6YC*B!F=6YC.R!S="YF=6YC<RD >PT*"0EP
M<W,I('L-" D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H
M8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN
M9V4 (3T (D0B*0T*"0D)<')I;G1F*")E>'1E<FX *"4N*G,I("(L(&9U;F,N
M<&53=')I;F<H9G5N8RYT>7!E*2P 9G5N8RYN86UE+"!P87)M;&ES="AF=6YC
M<FEN=&8H(GU<;EQN(BD["GT-" T*+R\ 4VEM<&QE(&UA:6X <')O9W)A;3H*
M:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1%1A9W,);&5X.PH)1FEL90ED
M9FEL93L*" EI9B`H87)G<RYL96YG=& /#T ,2D >PH)"7!R:6YT9B B)2XJ
M<R`\9FEL92YD/EQN(BP 87)G<ULP72D[" D)<F5T=7)N("TQ.PH)?0H*"2\O
M($]P96X =&AE(&9I;&4Z" ED9FEL92`](&YE=R!&:6QE*&%R9W-;,5TI.PH)
M+R\ 4V5N9"!I;B!T:&4 8G5F9F5R('1O('1H92!L97AE<CH*"6-H87);70ES
M='( /2!D9FEL92YR96%D4W1R:6YG*&1F:6QE+G-I>F4H*2D[" H);&5X(#T
M;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( ;&]O<V4Z
M" EL97 N9V\H*3L*" DO+R!297!O<G0 =&AE(')E<W5L=',Z" H)<')I;G1F
M*")M;V1U;&4 )2XJ<R![7&XB+"!L97 N9&UO9'5L92YN86UE*3L*" EP<FEN
M=&8H(EQT<'5B;&EC("!I;7!O<G1S("(I.PH)9F]R96%C:"`H:6YT(&DL($1)
M;7!O<G0J(&EM.R!L97 N9&UO9'5L92YI;7!O<G1S*2![" D):68 *&EM+F%C
M8V5S<R`]/2!A8V-E<W-2:6=H=',N87)0=6)L:6,I('L*"0D):68 *&D /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L(&EM+FYA;64I.PH)
M"7T*"7T*"7!R:6YT9B B.UQN(BD[" H)<')I;G1F*")<='!R:79A=&4 :6UP
M;W)T<R`B*3L*"69O<F5A8V *&EN="!I+"!$26UP;W)T*B!I;3L ;&5X+F1M
M;V1U;&4N:6UP;W)T<RD >PH)"6EF("AI;2YA8V-E<W, /3T 86-C97-S4FEG
M"0D)<')I;G1F*"(E+BIS(BP :6TN;F%M92D[" D)?0H)?0H)<')I;G1F*"([
M7&Y<;B(I.PH*"2\O($5N=6US. H)9F]R96%C:"`H1$5N=6TJ(&5N.R!L97 N
M9&UO9'5L92YE;G5M<RD >PH)"7!R:6YT9B B7'1E;G5M("4N*G, >UQN(BP
M96XN;F%M92D[" D)9F]R96%C:"`H1$5N=6TN96YU;59A;'5E(&5V.R!E;BYV
M86QU97,I('L-" D)"6EF("AE=BYV86QU92!I<R!N=6QL*0T*"0D)"7!R:6YT
M9B B7'1<="4N*G,L7&XB+"!E=BYN86UE*3L*"0D)96QS90H)"0D)<')I;G1F
M*")<=%QT)2XJ<R`]("4N*G,L7&XB+"!E=BYN86UE+"!E=BYV86QU92D[" D)
M?0H)"7!R:6YT9B B7'1]7&Y<;B(I.PH)?0H*"2\O(%-T<G5C=',Z" EF;W)E
M86-H("A$4W1R=6-T*B!S=#L ;&5X+F1M;V1U;&4N<W1R=6-T<RD >PT*"0ED
M;W)E86-H("A$4W1R=6-T*B!S=#L
M. H)9F]R96%C:"`H1%9A<BH =G([(&QE>"YD;6]D=6QE+G9A<G,I('L*"0EP
M<FEN=&8H(EQT)2XJ<UQT)2XJ<SM<;B(L('1Y<&53=')I;F<H=G(N='EP92DL
M('9R+FYA;64I.PH)?0H):68 *&QE>"YD;6]D=6QE+G9A<G,N;&5N9W1H(#X
M,"D <')I;G1F*")<;B(I.PH*"2\O($-L87-S97,Z" EF;W)E86-H("A$0VQA
M<W,J(&-L.R!L97 N9&UO9'5L92YC;&%S<V5S*2![" D):6YT"6H /2`P.PH*
M"0EP<FEN=&8H(EQT8VQA<W, )2XJ<R(L(&-L+FYA;64I.PH)"6EF("AC;"YI
M:6YT97)F86-E<RYL96YG=& /B`P*2!P<FEN=&8H(B`Z("(I.PH*"0EF;W)E
M86-H("AC:&%R6UT =CL 8VPN:6EN=&5R9F%C97,I('L*"0D):68 *&H /B`P
M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L('8I.PH)"0DK*VH[
M" D)?0H)"7!R:6YT9B B('M<;B(I.PH*"0DO+R!687)I86)L97,Z" D)9F]R
M*3L-" D)"7-W:71C:"`H=F%R+F%C8V5S<RD >PT*"0D)"6-A<V4 86-C97-S
M"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN=&8H(G!R:79A
M=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4')O=&5C
M8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN=&8H(G!A8VMA9V4 (BD[(&)R
M96%K.PT*"0D)?0T*"0D)<')I;G1F*"(E+BIS7'0E+BIS.UQN(BP ='EP95-T
M<FEN9RAV87(N='EP92DL('9A<BYN86UE*3L-" D)?0T*"0EI9B`H8VPN=F%R
M;W)S. T*"0EF;W)E86-H("A$1G5N8RH 9G5N8SL 8VPN8W1O<G,I('L-" D)
M"7!R:6YT9B B7'1<="(I.PT*"0D)<W=I=&-H("AF=6YC+F%C8V5S<RD >PT*
M"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H(G!U8FQI
M.B!P<FEN=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S
M4FEG:'1S+F%R4')O=&5C=&5D.B!P<FEN=&8H(G!R;W1E8W1E9"`B*3L 8G)E
M(G!A8VMA9V4 (BD[(&)R96%K.PT*"0D)?0T*"0D)<')I;G1F*")T:&ES*"4N
M*G,I.UQN(BP <&%R;6QI<W0H9G5N8RYP87)M<RDI.PT*"0E]" T*"0DO+R!$
M97-T<G5C=&]R<SH-" D)9F]R96%C:"`H1$9U;F,J(&9U;F,[(&-L+F1T;W)S
M<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F
M*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R
M4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)"0EC87-E
M(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960
M(BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H
M<')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R:6YT9B B
M8RYA8V-E<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH
M<')I;G1F*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG
M:'1S+F%R4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)
M"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T
M96-T960 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C
M:V%G93H <')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R
M:6YT9B B)2XJ<UQT)2XJ<R E+BIS*3M<;B(L('1Y<&53=')I;F<H9G5N8RYT
M" D)<')I;G1F*")<='U<;EQN(BD[" E]" T*"2\O($9U;F-T:6]N<SH-" EF
M;W)E86-H("A$1G5N8RH 9G5N8SL ;&5X+F1M;V1U;&4N9G5N8W,I('L-" D)
M87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F*")P=6)L:6, (BD[
M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN
M=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N
M87)0<F]T96-T960Z('!R:6YT9B B<')O=&5C=&5D("(I.R!B<F5A:SL-" D)
M"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H <')I;G1F*")P86-K86=E
M("(I.R!B<F5A:SL-" D)?0T*"0EP<FEN=&8H(B4N*G-<="4N*G,H)2XJ<RD[
M7&XB+"!T>7!E4W1R:6YG*&9U;F,N='EP92DL(&9U;F,N;F%M92P <&%R;6QI
'<FX ,#L*?2YP
`
end
Why not produce a Coco/R for D instead?
Dec 24 2004
The parser couldn't parse below code.
==
import std.stream, std.string;
~
==
parseImport() have a bug.
--- ../dtags.d 2004-12-25 06:00:53.834500000 +0900
+++ dtags.d 2005-01-01 18:34:57.953125000 +0900
-296,14 +296,28
// Parse an import line:
// Starts after import token.
+ private int parse_import_continue = true;
DImport* parseImport() {
DImport* imp;
char[] ident;
Token* ntok;
+ if (!parse_import_continue) {
+ parse_import_continue = true;
+ return null;
+ }
// Get the import identifier:
- while ((ntok = nextToken()).token != TOK.TOKsemicolon) {
- if (ntok.token == TOK.TOKidentifier)
+ while (true) {
+ ntok = nextToken();
+ if (ntok.token == TOK.TOKsemicolon) {
+ parse_import_continue = false;
+ break;
+ }
+ else if (ntok.token == TOK.TOKcomma) {
+ parse_import_continue = true;
+ break;
+ }
+ else if (ntok.token == TOK.TOKidentifier)
ident ~= ntok.ident;
else if (ntok.token == TOK.TOKdot)
ident ~= ".";
-925,11 +939,13
break;
}
case TOK.TOKimport: {
- DImport* imp = parseImport();
+ DImport* imp;
- // Add the import to the module:
- dmodule.imports.length = dmodule.imports.length + 1;
- dmodule.imports[length - 1] = imp;
+ while ((imp = parseImport()) !== null) {
+ // Add the import to the module:
+ dmodule.imports.length = dmodule.imports.length + 1;
+ dmodule.imports[length - 1] = imp;
+ }
break;
}
case TOK.TOKmodule: {
Jan 01 2005
I never said it was complete ;) Thanks for the bugfix, but I dropped that
module a while back. I'm working off the DMD front end C++ parsing code now.
It will be pretty much guaranteed to work like the compiler does. I'll let
everyone know when I've hammered out all the fine details.
In article <cr5sh1$2ida$1 digitaldaemon.com>, ahiru says...
The parser couldn't parse below code.
==
import std.stream, std.string;
~
==
parseImport() have a bug.
--- ../dtags.d 2004-12-25 06:00:53.834500000 +0900
+++ dtags.d 2005-01-01 18:34:57.953125000 +0900
-296,14 +296,28
// Parse an import line:
// Starts after import token.
+ private int parse_import_continue = true;
DImport* parseImport() {
DImport* imp;
char[] ident;
Token* ntok;
+ if (!parse_import_continue) {
+ parse_import_continue = true;
+ return null;
+ }
// Get the import identifier:
- while ((ntok = nextToken()).token != TOK.TOKsemicolon) {
- if (ntok.token == TOK.TOKidentifier)
+ while (true) {
+ ntok = nextToken();
+ if (ntok.token == TOK.TOKsemicolon) {
+ parse_import_continue = false;
+ break;
+ }
+ else if (ntok.token == TOK.TOKcomma) {
+ parse_import_continue = true;
+ break;
+ }
+ else if (ntok.token == TOK.TOKidentifier)
ident ~= ntok.ident;
else if (ntok.token == TOK.TOKdot)
ident ~= ".";
-925,11 +939,13
break;
}
case TOK.TOKimport: {
- DImport* imp = parseImport();
+ DImport* imp;
- // Add the import to the module:
- dmodule.imports.length = dmodule.imports.length + 1;
- dmodule.imports[length - 1] = imp;
+ while ((imp = parseImport()) !== null) {
+ // Add the import to the module:
+ dmodule.imports.length = dmodule.imports.length + 1;
+ dmodule.imports[length - 1] = imp;
+ }
break;
}
case TOK.TOKmodule: {
Jan 02 2005
On Sat, 18 Dec 2004 09:26:01 +0000 (UTC), James Dunne <jdunne4 bradley.edu> wrote:Hello all, I thought as a nice Christmas present for you all working so hard on D, I would contribute something some of you might find useful. I've been working hard on a lexer (tokenizer) for the D language. Attached to this post is the lexer module written in D!! I began work on it for code-completion support for my D IDE called Orion (over on dsource.org). Don't bother checking anything out there yet, as its all in ruins right now. ;) I tested this module somewhat, and it successfully lexes its own source code! This module could be useful for a few things, like: + code-completion database for D modules + generating CTAGS for the D language + indent-like program for D ..and any other D source code tools you can think of. Merry Christmas all, enjoy! Regards, James DunneAny particular reason you kept the whole TOK.TOK... naming system? Just seemed confusing to me... Plus, it seems you still have the === identity token in there, wasn't that replaced with 'in'? Just a small hint, those debug format strings would make a little more sense with wysiwyg strings (ie `"%s"` instead of "\"%s\"") Looks like a good start, though, and works as a beutifier, to boot! :D -- "Unhappy Microsoft customers have a funny way of becoming Linux, Salesforce.com and Oracle customers." - www.microsoft-watch.com: "The Year in Review: Microsoft Opens Up" -- "I plan on at least one critical patch every month, and I haven't been disappointed." - Adam Hansen, manager of security at Sonnenschein Nath & Rosenthal LLP (Quote from http://www.eweek.com/article2/0,1759,1736104,00.asp) -- "It's been a challenge to "reteach or retrain" Web users to pay for content, said Pizey" -Wired website: "The Incredible Shrinking Comic"
Dec 18 2004
Any particular reason you kept the whole TOK.TOK... naming system? Just seemed confusing to me...I kept the TOK.TOK naming scheme out of pure dumb ignorance on my part ;) I didn't realize we had anonymous enumerations. Also, D doesn't allow you to use reserved keywords to declare enumeration values, so the TOK prefix was kept. Tonight I'll run thru and remove the redundant TOK.TOK to be just TOK.Plus, it seems you still have the === identity token in there, wasn't that replaced with 'in'?The === operator, AFAIK, is indeed the same as 'is', which I'm sure you meant rather than 'in' (just clarifying for newbies, no offense meant). In the static this() constructor of the DLexer class, you can see the line `keywords["in"] = TOK.TOKidentity` (this is used to convert identifier tokens to reserved keyword tokens). And reversibly, if you use toktostr[TOK.TOKidentity], you get "===" back. Strange, but that's exactly the behavior of the D front-end, and I mindlessly copied it over to my code. I'll fix it if it bugs you ;)Just a small hint, those debug format strings would make a little more sense with wysiwyg strings (ie `"%s"` instead of "\"%s\"")About the wysiwyg strings as a formatting suggestion for the code itself, I'd like to claim ignorance on my part as well. :-D. I often forget about the nice new features of D, since I'm so used to doing things "the old way." I'm sure you can relate ;). Besides, I'm growing accustomed to seeing all the horrible backslashes in strings.Looks like a good start, though, and works as a beutifier, to boot! :DAnd yes, it does work quite famously as a beautifier doesn't it? Except the small side-effect of REMOVING ALL COMMENTS :-D. Of course, that's a small change if this module is to be used as the basis for a beautifier/indenter project. Someone should really take that up, as I've got my hands full right now trying to come up with some preliminary code-completion support for my D IDE. That, and Christmas shopping still... I'll make my changes tonight and ship them out ASAP. I don't want to host these projects on dsource.org due to the overhead of the SVN repository (since they're only single modules) and that dsource is (I'm sure) intended for medium-sized to large-scale projects. If there was a code-snippets section, that would be perfect! I think Brad (admin of dsource) is in the process of evaluating replacement PHP systems right now, so he's got enough to do at the moment. Regards, James Dunne
Dec 19 2004
Lousy kharmic retribution... that's what I get for correcting someone else. The line is actually keywords["is"], not keywords["in"].Plus, it seems you still have the === identity token in there, wasn't that replaced with 'in'?The === operator, AFAIK, is indeed the same as 'is', which I'm sure you meant rather than 'in' (just clarifying for newbies, no offense meant). In the static this() constructor of the DLexer class, you can see the line `keywords["in"] = TOK.TOKidentity` ...
Dec 19 2004
James Dunne wrote:I don't want to host these projects on dsource.org due to the overhead of the SVN repository (since they're only single modules) and that dsource is (I'm sure) intended for medium-sized to large-scale projects. If there was a code-snippets section, that would be perfect!This may be a good idea. I'd say put them in the Bindings project, because it's read/write for everyone, but your code is not really a binding to C. Perhaps it's time to start a project that has D syntax/grammar/beautifier code (other than DGrammar), and we just start by dropping your work to-date in there. The SVN repos is web-enabled, and you can make project downloads that point directly to the repos, so it will be quite easy to make accessible the two files you have so far. The other approach is to make a project like Bindings that everyone can upload utilities and tools they've created. Thoughts? BA
Dec 20 2004
As a temporary solution, that sounds great. But I have a few issues with that... Seeing how its read/write to everyone, what's to stop someone from simply removing the files there? In SVN, can I be the only one to modify my modules? For now, your solution works ;) I'll throw my stuff in the Bindings project. Keep me informed on anything you'll be doing in this area. Thanks a lot, Brad! In article <cq62nv$2lpp$1 digitaldaemon.com>, Brad Anderson says...James Dunne wrote:Regards, James DunneI don't want to host these projects on dsource.org due to the overhead of the SVN repository (since they're only single modules) and that dsource is (I'm sure) intended for medium-sized to large-scale projects. If there was a code-snippets section, that would be perfect!This may be a good idea. I'd say put them in the Bindings project, because it's read/write for everyone, but your code is not really a binding to C. Perhaps it's time to start a project that has D syntax/grammar/beautifier code (other than DGrammar), and we just start by dropping your work to-date in there. The SVN repos is web-enabled, and you can make project downloads that point directly to the repos, so it will be quite easy to make accessible the two files you have so far. The other approach is to make a project like Bindings that everyone can upload utilities and tools they've created. Thoughts? BA
Dec 20 2004
Anyone interested in my dlexer and dparser modules will take a look in the bindings project over at dsource.org! I've taken to completely rewriting the parser code. I slightly modified the lexer code to work more closely like DMD's front end lexer. I'm gonna do a straight conversion of the C++ code to D for the parser. It's working well so far, just gotta define all those darn classes! I'll throw my work into the bindings project as I go along. Regards, James Dunne
Dec 21 2004
"James Dunne" <jdunne4 bradley.edu> wrote in message news:cqb842$1uud$1 digitaldaemon.com...Anyone interested in my dlexer and dparser modules will take a look in the bindings project over at dsource.org! I've taken to completely rewritingtheparser code. I slightly modified the lexer code to work more closely likeDMD'sfront end lexer. I'm gonna do a straight conversion of the C++ code to Dforthe parser. It's working well so far, just gotta define all those darnclasses!I'll throw my work into the bindings project as I go along.Great work James! I am not only interested in this but also succesfully using your lexer. It is used in a translator D+some_new_features->D. I have this working: int[] numbers; numbers.length=100; (each[int index] numbers) = index+1; int sum=0; sum += (each numbers); All i have to do is fix a bug that stops writef("%s\n",(each numbers)); from working and it will be updated to dsource as part of the lr-lalr parser project. Thanks again for dlexer :)Regards, James Dunne
Dec 22 2004
Great work James! I am not only interested in this but also succesfully using your lexer. It is used in a translator D+some_new_features->D. I have this working: int[] numbers; numbers.length=100; (each[int index] numbers) = index+1; int sum=0; sum += (each numbers);Glad to see someone besides me benefiting from my work! And since dlexer is working just like the one in DMD's front end code, it might not be much work at all to convert that parsing routine back to C++ to throw in the compiler itself ;)All i have to do is fix a bug that stops writef("%s\n",(each numbers)); from working and it will be updated to dsource as part of the lr-lalr parser project.Is that a bug in my code? I was pretty sure I tested all the string parsing routines fairly well.Thanks again for dlexer :)You're very welcome! BTW, I've made an incompatible change to dlexer unfortunately. It is not released yet, but here's the change: The nextToken() function no longer returns a Token *, but returns the token value (TOK...) of the token parsed. The actual token structure is a protected member called 'token' in the DLexer class. Then just check the 'token' member. This eliminates a lot of extra memory allocation and garbage lying around, since we just reuse one Token structure. peekToken() also works similarly, as it should. I've also changed the layout of the Token structure itself. We're now using a new structure Identifier (token.ident) to reference identifiers, and the ustring property to reference string literal tokens (token.ustring). Identifiers are kept in an AA to eliminate duplicates, just as they are (essentially) in DMD's front end. Actually, they're stored in the stringtable, but an AA works similarly for our purposes. Also, numeric parsing works (but still not real number parsing) and returns values in the fields token.(int32value, uns32value, int64value, uns64value, float80value). All integers smaller than an int32 are stored in int32value. But it doesn't matter which member you choose to read from, since they're all in a union ;). I'll throw this new version up to the bindings project now. Sorry to everyone using the old module, but it shouldn't be too hard to convert over to this new Regards, James Dunne
Dec 22 2004
"James Dunne" <jdunne4 bradley.edu> wrote in message news:cqcs5s$118n$1 digitaldaemon.com...ItGreat work James! I am not only interested in this but also succesfully using your lexer.isis used in a translator D+some_new_features->D. I have this working: int[] numbers; numbers.length=100; (each[int index] numbers) = index+1; int sum=0; sum += (each numbers);Glad to see someone besides me benefiting from my work! And since dlexerworking just like the one in DMD's front end code, it might not be muchwork atall to convert that parsing routine back to C++ to throw in the compileritself;)parsingAll i have to do is fix a bug that stops writef("%s\n",(each numbers)); from working and it will be updated to dsource as part of the lr-lalr parser project.Is that a bug in my code? I was pretty sure I tested all the stringroutines fairly well.No! The bug is in my code ;)tokenThanks again for dlexer :)You're very welcome! BTW, I've made an incompatible change to dlexer unfortunately. It is not released yet, but here's the change: The nextToken() function no longer returns a Token *, but returns thevalue (TOK...) of the token parsed. The actual token structure is aprotectedmember called 'token' in the DLexer class. Then just check the 'token'member.This eliminates a lot of extra memory allocation and garbage lying around,sincewe just reuse one Token structure. peekToken() also works similarly, asitshould. I've also changed the layout of the Token structure itself. We're nowusing anew structure Identifier (token.ident) to reference identifiers, and theustringproperty to reference string literal tokens (token.ustring). Identifiersarekept in an AA to eliminate duplicates, just as they are (essentially) inDMD'sfront end. Actually, they're stored in the stringtable, but an AA works similarly for our purposes. Also, numeric parsing works (but still not real number parsing) andreturnsvalues in the fields token.(int32value, uns32value, int64value,uns64value,float80value). All integers smaller than an int32 are stored inint32value.But it doesn't matter which member you choose to read from, since they'reall ina union ;). I'll throw this new version up to the bindings project now. Sorry toeveryoneusing the old module, but it shouldn't be too hard to convert over to thisnewformat. For history purposes, the old dlexer module is in bindingsI'll check it out and make the changes.Regards, James Dunne
Dec 23 2004









"Matthew" <admin.hat stlsoft.dot.org> 