[Patches] Update to compiler for extended call syntax.

Mark Hammond mhammond@skippinet.com.au
Fri, 21 Apr 2000 21:04:01 +1000


Attached is a set of diffs for the .py compiler that adds support
for the new extended call syntax.

Jeremy - please pay close attention to the stack depth checking and
lineno changes I made - these tests all complete and I think they
are correct, but it is worth mentioning.

NOTE - many of these files have inconsistent indentation.  Time for
another visit from the tabnanny! :-)  I havent addressed the
whitespace at all.

compile.py:
On Windows, use 'nul' instead of '/dev/null'.

test.py:
Use double-quotes for the command-line, as Windows doesnt recognise
singles.


compiler/ast.py:
CallFunc node gets 2 new children to support extended call syntax -
"star_args" (for "*args") and "dstar_args" (for "**args")


compiler/pyassem.py
It appear that self.lnotab is supposed to be responsible for
tracking line numbers, but self.firstlineno was still hanging
around.  Removed self.firstlineno completely.  NOTE - I didnt
actually test that the generated code has the correct line numbers!!

Stack depth tracking appeared a little broken - the checks never
made it beyond the "self.patterns" check - thus, the custom methods
were never called!  Fixed this.

Added support for the new extended call syntax opcodes for depth
calculations.


compiler/pycodegen.py

Added support for the new extended call syntax opcodes.

compiler/transformer.py

Added support for the new extended call syntax.


tests/test_func.py

Added tests of the new extended call syntax.

Release info:

I confirm that, to the best of my knowledge and belief, this
contribution is free of any claims of third parties under copyright,
patent or other rights or interests ("claims").  To the extent that
I have any such claims, I hereby grant to CNRI a nonexclusive,
irrevocable, royalty-free, worldwide license to reproduce,
distribute, perform and/or display publicly, prepare derivative
versions, and otherwise use this contribution as part of the Python
software and its related documentation, or any derivative versions
thereof, at no cost to CNRI or its licensed users, and to authorize
others to do so.

I acknowledge that CNRI may, at its sole discretion, decide whether
or not to incorporate this contribution in the Python software and
its related documentation.  I further grant CNRI permission to use
my name and other identifying information provided to CNRI by me for
use in connection with the Python software and its related
documentation.

Mark.


begin 666 compiler_diffs.txt
M26YD97@Z(&-O;7!I;&4N<'D-"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T-"E)#
M4R!F:6QE.B O<')O:F5C=',O8W9S<F]O="]P>71H;VXO;F]N9&ES="]S<F,O
M0V]M<&EL97(O8V]M<&EL92YP>2QV#0IR971R:65V:6YG(')E=FES:6]N(#$N
M,0T*9&EF9B M8R M,R M<C$N,2!C;VUP:6QE+G!Y#0HJ*BH@8V]M<&EL92YP
M>0DR,# P+S S+S V(#$Y.C$S.C(Q"3$N,0T*+2TM(&-O;7!I;&4N<'D),C P
M,"\P-"\R,2 Q,#HT-3HT,PT**BHJ*BHJ*BHJ*BHJ*BHJ#0HJ*BH@,3$L,3<@
M*BHJ*@T*(" @(" @(" @(" @("!615)"3U-%(#T@,0T*(" @(" @(" @(" @
M("!V:7-I=&]R+D%35%9I<VET;W(N5D520D]312 ]('9I<VET;W(N05-45FES
M:71O<BY615)"3U-%("L@,0T*(" @(" @(" @(&EF(&L@/3T@)RUQ)SH-"B$@
M(" @(" @(" @(" @9B ](&]P96XH)R]D978O;G5L;"<L("=W8B<I#0H@(" @
M(" @(" @(" @('-Y<RYS=&1O=70@/2!F#0H@(" @("!I9B!N;W0@87)G<SH-
M"B @(" @(" @("!P<FEN=" B;F\@9FEL97,@=&\@8V]M<&EL92(-"BTM+2 Q
M,2PR," M+2TM#0H@(" @(" @(" @(" @(%9%4D)/4T4@/2 Q#0H@(" @(" @
M(" @(" @('9I<VET;W(N05-45FES:71O<BY615)"3U-%(#T@=FES:71O<BY!
M4U16:7-I=&]R+E9%4D)/4T4@*R Q#0H@(" @(" @(" @:68@:R ]/2 G+7$G
M.@T*(2 @(" @(" @(" @("!I9B!S>7,N<&QA=&9O<FU;.C-=/3TB=VEN(CH-
M"B$@(" @(" @(" @(" @(" @(&8@/2!O<&5N*"=N=6PG+" G=V(G*2 C("]D
M978O;G5L;"!F86EL<R!O;B!7:6YD;W=S+BXN#0HA(" @(" @(" @(" @(&5L
M<V4Z#0HA(" @(" @(" @(" @(" @("!F(#T@;W!E;B@G+V1E=B]N=6QL)RP@
M)W=B)RD-"B @(" @(" @(" @(" @<WES+G-T9&]U=" ](&8-"B @(" @(&EF
M(&YO="!A<F=S.@T*(" @(" @(" @('!R:6YT(")N;R!F:6QE<R!T;R!C;VUP
M:6QE(@T*26YD97@Z('1E<W0N<'D-"CT]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T-
M"E)#4R!F:6QE.B O<')O:F5C=',O8W9S<F]O="]P>71H;VXO;F]N9&ES="]S
M<F,O0V]M<&EL97(O=&5S="YP>2QV#0IR971R:65V:6YG(')E=FES:6]N(#$N
M- T*9&EF9B M8R M,R M<C$N-"!T97-T+G!Y#0HJ*BH@=&5S="YP>0DR,# P
M+S R+S$P(#$W.C,T.C$R"3$N- T*+2TM('1E<W0N<'D),C P,"\P-"\R,2 Q
M,#HT-3HT,PT**BHJ*BHJ*BHJ*BHJ*BHJ#0HJ*BH@,38L,C(@*BHJ*@T*(" @
M(" @(" @('!R:6YT(&)A<V4-"B @(" @(" @("!O=71P=70@/2 B97AP97)I
M;65N=&%L+R5S+G1X="(@)2!B87-E#0H@(" @(" @(" @;W,N<WES=&5M*")P
M>71H;VX@+BXO8V]M<&EL92YP>2 M<2 E<R(@)2!P871H*0T*(2 @(" @(" @
M(&]S+G-Y<W1E;2@B<'ET:&]N("UC("=I;7!O<G0@)7,G(#X@)7,@,CXF,2(@
M)2 H8F%S92P@;W5T<'5T*2D-"B @(" @(" @("!O<RYS>7-T96TH(F1I9F8@
M+6,@)7,@)7,B("4@*"(E<R\E<RYT>'0B("4@*&]U='!U=$1I<BP@8F%S92DL
M#0H@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @("!O=71P
M=70I*0T*(" -"BTM+2 Q-BPR,B M+2TM#0H@(" @(" @(" @<')I;G0@8F%S
M90T*(" @(" @(" @(&]U='!U=" ](")E>'!E<FEM96YT86PO)7,N='AT(B E
M(&)A<V4-"B @(" @(" @("!O<RYS>7-T96TH(G!Y=&AO;B N+B]C;VUP:6QE
M+G!Y("UQ("5S(B E('!A=&@I#0HA(" @(" @(" @;W,N<WES=&5M*"=P>71H
M;VX@+6,@(FEM<&]R=" E<R(@/B E<R R/B8Q)R E("AB87-E+"!O=71P=70I
M*0T*(" @(" @(" @(&]S+G-Y<W1E;2@B9&EF9B M8R E<R E<R(@)2 H(B5S
M+R5S+G1X="(@)2 H;W5T<'5T1&ER+"!B87-E*2P-"B @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(&]U='!U="DI#0H@( T*8W9S('-E
M<G9E<CH@1&EF9FEN9R!C;VUP:6QE<@T*26YD97@Z(&-O;7!I;&5R+V%S="YP
M>0T*/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0T*4D-3(&9I;&4Z("]P<F]J96-T
M<R]C=G-R;V]T+W!Y=&AO;B]N;VYD:7-T+W-R8R]#;VUP:6QE<B]C;VUP:6QE
M<B]A<W0N<'DL=@T*<F5T<FEE=FEN9R!R979I<VEO;B Q+C@-"F1I9F8@+6,@
M+3,@+7(Q+C@@87-T+G!Y#0HJ*BH@87-T+G!Y"3(P,# O,#,O,#8@,3@Z-3 Z
M-#@),2XX#0HM+2T@87-T+G!Y"3(P,# O,#0O,C$@,3 Z-#4Z-#0-"BHJ*BHJ
M*BHJ*BHJ*BHJ*@T**BHJ(#0T-2PT-3<@*BHJ*@T*("!C;&%S<R!#86QL1G5N
M8RA.;V1E*3H-"B @("!N;V1E<ULG8V%L;%]F=6YC)UT@/2 G0V%L;$9U;F,G
M#0H@( T*(2 @(&1E9B!?7VEN:71?7RAS96QF+"!N;V1E+"!A<F=S*3H-"B @
M(" @('-E;&8N;F]D92 ](&YO9&4-"B @(" @('-E;&8N87)G<R ](&%R9W,-
M"B$@(" @('-E;&8N7V-H:6QD<F5N(#T@*"=C86QL7V9U;F,G+"!N;V1E+"!A
M<F=S*0T*(" -"B @("!D968@7U]R97!R7U\H<V5L9BDZ#0HA(" @("!R971U
M<FX@(D-A;&Q&=6YC*"5S+"5S*2(@)2!S96QF+E]C:&EL9')E;ELQ.ET-"B @
M#0H@(&-L87-S($ME>7=O<F0H3F]D92DZ#0H@(" @;F]D97-;)VME>7=O<F0G
M72 ]("=+97EW;W)D)PT*+2TM(#0T-2PT-3D@+2TM+0T*("!C;&%S<R!#86QL
M1G5N8RA.;V1E*3H-"B @("!N;V1E<ULG8V%L;%]F=6YC)UT@/2 G0V%L;$9U
M;F,G#0H@( T*(2 @(&1E9B!?7VEN:71?7RAS96QF+"!N;V1E+"!A<F=S+"!S
M=&%R7V%R9W,@/2!.;VYE+"!D<W1A<E]A<F=S(#T@3F]N92DZ#0H@(" @("!S
M96QF+FYO9&4@/2!N;V1E#0H@(" @("!S96QF+F%R9W,@/2!A<F=S#0HA(" @
M("!S96QF+G-T87)?87)G<R ]('-T87)?87)G<PT*(2 @(" @<V5L9BYD<W1A
M<E]A<F=S(#T@9'-T87)?87)G<PT*(2 @(" @<V5L9BY?8VAI;&1R96X@/2 H
M)V-A;&Q?9G5N8R<L(&YO9&4L(&%R9W,L('-T87)?87)G<RP@9'-T87)?87)G
M<RD-"B @#0H@(" @9&5F(%]?<F5P<E]?*'-E;&8I.@T*(2 @(" @<F5T=7)N
M(")#86QL1G5N8R@E<RPE<RPJ)7,L("HJ)7,I(B E('-E;&8N7V-H:6QD<F5N
M6S$Z70T*(" -"B @8VQA<W,@2V5Y=V]R9"A.;V1E*3H-"B @("!N;V1E<ULG
M:V5Y=V]R9"==(#T@)TME>7=O<F0G#0I);F1E>#H@8V]M<&EL97(O<'EA<W-E
M;2YP>0T*/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0T*4D-3(&9I;&4Z("]P<F]J
M96-T<R]C=G-R;V]T+W!Y=&AO;B]N;VYD:7-T+W-R8R]#;VUP:6QE<B]C;VUP
M:6QE<B]P>6%S<V5M+G!Y+'8-"G)E=')I979I;F<@<F5V:7-I;VX@,2XX#0ID
M:69F("UC("TS("UR,2XX('!Y87-S96TN<'D-"BHJ*B!P>6%S<V5M+G!Y"3(P
M,# O,#,O,38@,C Z,#8Z-3D),2XX#0HM+2T@<'EA<W-E;2YP>0DR,# P+S T
M+S(Q(#$P.C0U.C0U#0HJ*BHJ*BHJ*BHJ*BHJ*BH-"BHJ*B Q-#DL,34U("HJ
M*BH-"B @"2 @("!S96QF+F9L86=S(#T@0T]?3U!424U)6D5$('P@0T]?3D57
M3$]#04Q3( T*(" )96QS93H-"B @"2 @("!S96QF+F9L86=S(#T@, T*+2 )
M<V5L9BYF:7)S=&QI;F5N;R ]($YO;F4-"B @"7-E;&8N8V]N<W1S(#T@6UT-
M"B @"7-E;&8N;F%M97,@/2!;70T*(" @(" @(" @('-E;&8N=F%R;F%M97,@
M/2!L:7-T*&%R9W,I(&]R(%M=#0HM+2T@,30Y+#$U-" M+2TM#0HJ*BHJ*BHJ
M*BHJ*BHJ*BH-"BHJ*B S,30L,S(Q("HJ*BH-"B @(" @(" @(" @(" @(" @
M(&]P87)G(#T@=%LQ70T*(" @(" @(" @(" @(" @(" @:68@;W!N86UE(#T]
M(")3151?3$E.14Y/(CH-"B @(" @(" @(" @(" @(" @(" @("!L;F]T86(N
M;F5X=$QI;F4H;W!A<F<I#0HM(" @(" @(" @(" @(" @(" @(" @:68@<V5L
M9BYF:7)S=&QI;F5N;R!I<R!.;VYE.@T*+2 @(" @(" @(" @(" @(" @(" @
M(" @("!S96QF+F9I<G-T;&EN96YO(#T@;W!A<F<-"B @(" @(" @(" @(" @
M(" @(&AI+"!L;R ]('1W;V)Y=&4H;W!A<F<I#0H@( D)=')Y.@T*(" )"2 @
M("!L;F]T86(N861D0V]D92AS96QF+F]P;G5M6V]P;F%M95TL(&QO+"!H:2D-
M"BTM+2 S,3,L,S$X("TM+2T-"BHJ*BHJ*BHJ*BHJ*BHJ*@T**BHJ(#,T,BPS
M-#@@*BHJ*@T*(" @(" @(" @(')E='5R;B!N97<N8V]D92AA<F=C;W5N="P@
M;FQO8V%L<RP@<V5L9BYS=&%C:W-I>F4L('-E;&8N9FQA9W,L#0H@(" @(" @
M(" @(" @(" @(" @(" @(" @('-E;&8N;&YO=&%B+F=E=$-O9&4H*2P@<V5L
M9BYG971#;VYS=',H*2P-"B @(" @(" @(" @(" @(" @(" @(" @(" @='5P
M;&4H<V5L9BYN86UE<RDL('1U<&QE*'-E;&8N=F%R;F%M97,I+ T*(2 @(" @
M(" @(" @(" @(" @(" @(" @("!S96QF+F9I;&5N86UE+"!S96QF+FYA;64L
M('-E;&8N9FER<W1L:6YE;F\L#0H@(" @(" @(" @(" @(" @(" @(" @(" @
M('-E;&8N;&YO=&%B+F=E=%1A8FQE*"DI#0H@( T*(" @(" @9&5F(&=E=$-O
M;G-T<RAS96QF*3H-"BTM+2 S,SDL,S0U("TM+2T-"B @(" @(" @("!R971U
M<FX@;F5W+F-O9&4H87)G8V]U;G0L(&YL;V-A;',L('-E;&8N<W1A8VMS:7IE
M+"!S96QF+F9L86=S+ T*(" @(" @(" @(" @(" @(" @(" @(" @("!S96QF
M+FQN;W1A8BYG971#;V1E*"DL('-E;&8N9V5T0V]N<W1S*"DL#0H@(" @(" @
M(" @(" @(" @(" @(" @(" @('1U<&QE*'-E;&8N;F%M97,I+"!T=7!L92AS
M96QF+G9A<FYA;65S*2P-"B$@(" @(" @(" @(" @(" @(" @(" @(" @<V5L
M9BYF:6QE;F%M92P@<V5L9BYN86UE+"!S96QF+FQN;W1A8BYF:7)S=&QI;F4L
M#0H@(" @(" @(" @(" @(" @(" @(" @(" @('-E;&8N;&YO=&%B+F=E=%1A
M8FQE*"DI#0H@( T*(" @(" @9&5F(&=E=$-O;G-T<RAS96QF*3H-"BHJ*BHJ
M*BHJ*BHJ*BHJ*@T**BHJ(#0V-"PT-S<@*BHJ*@T*(" @(" @(" @(" @(" @
M(" @:68@9&5P=&@@/B!M87A$97!T:#H-"B @(" @(" @(" @(" @(" @(" @
M("!M87A$97!T:" ](&1E<'1H#0H@(" @(" @(" @(" @(" @(" C(&YO=R!C
M:&5C:R!P871T97)N<PT*(2 @(" @(" @(" @(" @(" @9F]R('!A="P@9&5L
M=&$@:6X@<V5L9BYP871T97)N<SH-"B @(" @(" @(" @(" @(" @(" @("!I
M9B!O<&YA;65;.FQE;BAP870I72 ]/2!P870Z#0H@(" @(" @(" @(" @(" @
M(" @(" @(" @(&1E<'1H(#T@9&5P=&@@*R!D96QT80T*(" @(" @(" @(" @
M(" @(" @(" @(" @("!B<F5A:PT*(" @(" @(" @(" @(" @(" @(R!I9B!W
M92!S=&EL;"!H879E;B=T(&9O=6YD(&$@;6%T8V@-"B @(" @(" @(" @(" @
M(" @(&EF(&1E;'1A(#T](# Z#0HA(" @(" @(" @(" @(" @(" @(" @;65T
M:" ](&=E=&%T='(H<V5L9BP@;W!N86UE*0T*(2 @(" @(" @(" @(" @(" @
M(" @(&1E<'1H(#T@9&5P=&@@*R!M971H*&E;,5TI#0H@(" @(" @(" @(" @
M(&EF(&1E<'1H(#P@,#H-"B @(" @(" @(" @(" @(" @(&1E<'1H(#T@, T*
M(" @(" @(" @(')E='5R;B!M87A$97!T: T*+2TM(#0V,2PT-S8@+2TM+0T*
M(" @(" @(" @(" @(" @(" @:68@9&5P=&@@/B!M87A$97!T:#H-"B @(" @
M(" @(" @(" @(" @(" @("!M87A$97!T:" ](&1E<'1H#0H@(" @(" @(" @
M(" @(" @(" C(&YO=R!C:&5C:R!P871T97)N<PT*(2 @(" @(" @(" @(" @
M(" @9F]R('!A="P@<&%T7V1E;'1A(&EN('-E;&8N<&%T=&5R;G,Z#0H@(" @
M(" @(" @(" @(" @(" @(" @:68@;W!N86UE6SIL96XH<&%T*5T@/3T@<&%T
M.@T**R @(" @(" @(" @(" @(" @(" @(" @("!D96QT82 ]('!A=%]D96QT
M80T*(" @(" @(" @(" @(" @(" @(" @(" @("!D97!T:" ](&1E<'1H("L@
M9&5L=&$-"B @(" @(" @(" @(" @(" @(" @(" @(" @8G)E86L-"B @(" @
M(" @(" @(" @(" @(",@:68@=V4@<W1I;&P@:&%V96XG="!F;W5N9"!A(&UA
M=&-H#0H@(" @(" @(" @(" @(" @("!I9B!D96QT82 ]/2 P.@T*(2 @(" @
M(" @(" @(" @(" @(" @(&UE=&@@/2!G971A='1R*'-E;&8L(&]P;F%M92P@
M3F]N92D-"B$@(" @(" @(" @(" @(" @(" @("!I9B!M971H(&ES(&YO="!.
M;VYE.@T*(2 @(" @(" @(" @(" @(" @(" @(" @("!D97!T:" ](&1E<'1H
M("L@;65T:"AI6S%=*0T*(" @(" @(" @(" @("!I9B!D97!T:" \(# Z#0H@
M(" @(" @(" @(" @(" @("!D97!T:" ](# -"B @(" @(" @("!R971U<FX@
M;6%X1&5P=&@-"BHJ*BHJ*BHJ*BHJ*BHJ*@T**BHJ(#4R-RPU,S(@*BHJ*@T*
M+2TM(#4R-BPU,S<@+2TM+0T*(" @(" @9&5F($-!3$Q?1E5.0U1)3TXH<V5L
M9BP@87)G8RDZ#0H@(" @(" @(" @:&DL(&QO(#T@9&EV;6]D*&%R9V,L(#(U
M-BD-"B @(" @(" @("!R971U<FX@;&\@*R!H:2 J(#(-"BL@(" @(&1E9B!#
M04Q,7T953D-424].7U9!4BAS96QF+"!A<F=C*3H-"BL@(" @(" @("!R971U
M<FX@<V5L9BY#04Q,7T953D-424].*&%R9V,I*S$-"BL@(" @(&1E9B!#04Q,
M7T953D-424].7TM7*'-E;&8L(&%R9V,I.@T**R @(" @(" @(')E='5R;B!S
M96QF+D-!3$Q?1E5.0U1)3TXH87)G8RDK,0T**R @(" @9&5F($-!3$Q?1E5.
M0U1)3TY?5D%27TM7*'-E;&8L(&%R9V,I.@T**R @(" @(" @(')E='5R;B!S
M96QF+D-!3$Q?1E5.0U1)3TXH87)G8RDK,@T*(" @(" @9&5F($U!2T5?1E5.
M0U1)3TXH<V5L9BP@87)G8RDZ#0H@(" @(" @(" @<F5T=7)N("UA<F=C#0H@
M(" @("!D968@0E5)3$1?4TQ)0T4H<V5L9BP@87)G8RDZ#0I);F1E>#H@8V]M
M<&EL97(O<'EC;V1E9V5N+G!Y#0H]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]#0I2
M0U,@9FEL93H@+W!R;VIE8W1S+V-V<W)O;W0O<'ET:&]N+VYO;F1I<W0O<W)C
M+T-O;7!I;&5R+V-O;7!I;&5R+W!Y8V]D96=E;BYP>2QV#0IR971R:65V:6YG
M(')E=FES:6]N(#$N,3D-"F1I9F8@+6,@+3,@+7(Q+C$Y('!Y8V]D96=E;BYP
M>0T**BHJ('!Y8V]D96=E;BYP>0DR,# P+S S+S$V(#(P.C V.C4Y"3$N,3D-
M"BTM+2!P>6-O9&5G96XN<'D),C P,"\P-"\R,2 Q,#HT-3HT-@T**BHJ*BHJ
M*BHJ*BHJ*BHJ#0HJ*BH@.2PQ-" J*BHJ#0HM+2T@.2PR,B M+2TM#0H@(&9R
M;VT@8V]M<&EL97(@:6UP;W)T('!Y87-S96TL(&UI<V,-"B @9G)O;2!C;VUP
M:6QE<BYP>6%S<V5M(&EM<&]R="!#3U]605)!4D=3+"!#3U]605)+15E73U)$
M4RP@5'5P;&5!<F<-"B @#0HK(&-A;&QF=6YC7V]P8V]D95]I;F9O(#T@>PT*
M*R @(" @(R H2&%V92 J87)G<RP@2&%V92 J*F%R9W,I(#H@;W!C;V1E#0HK
M(" @(" H,"PP*2 Z(")#04Q,7T953D-424].(BP-"BL@(" @("@Q+# I(#H@
M(D-!3$Q?1E5.0U1)3TY?5D%2(BP-"BL@(" @("@P+#$I(#H@(D-!3$Q?1E5.
M0U1)3TY?2U<B+ T**R @(" @*#$L,2D@.B B0T%,3%]&54Y#5$E/3E]605)?
M2U<B+ T**R!]#0HK( T*("!D968@8V]M<&EL92AF:6QE;F%M92DZ#0H@(" @
M("!F(#T@;W!E;BAF:6QE;F%M92D-"B @(" @(&)U9B ](&8N<F5A9"@I#0HJ
M*BHJ*BHJ*BHJ*BHJ*BH-"BHJ*B T-S@L-#@T("HJ*BH-"B @(" @(" @(" @
M(" @(" @(&MW(#T@:W<@*R Q#0H@(" @(" @(" @(" @(&5L<V4Z#0H@(" @
M(" @(" @(" @(" @("!P;W,@/2!P;W,@*R Q#0HA(" @(" @(" @<V5L9BYE
M;6ET*"=#04Q,7T953D-424].)RP@:W<@/#P@."!\('!O<RD-"B @#0H@(" @
M("!D968@=FES:710<FEN="AS96QF+"!N;V1E*3H-"B @(" @(" @("!S96QF
M+F5M:70H)U-%5%],24Y%3D\G+"!N;V1E+FQI;F5N;RD-"BTM+2 T.#8L-#DY
M("TM+2T-"B @(" @(" @(" @(" @(" @(&MW(#T@:W<@*R Q#0H@(" @(" @
M(" @(" @(&5L<V4Z#0H@(" @(" @(" @(" @(" @("!P;W,@/2!P;W,@*R Q
M#0HA(" @(" @(" @:68@;F]D92YS=&%R7V%R9W,@:7,@;F]T($YO;F4Z#0HA
M(" @(" @(" @(" @('-E;&8N=FES:70H;F]D92YS=&%R7V%R9W,I#0HA(" @
M(" @(" @:68@;F]D92YD<W1A<E]A<F=S(&ES(&YO="!.;VYE.@T*(2 @(" @
M(" @(" @("!S96QF+G9I<VET*&YO9&4N9'-T87)?87)G<RD-"B$@(" @(" @
M("!H879E7W-T87(@/2!N;V1E+G-T87)?87)G<R!I<R!N;W0@3F]N90T*(2 @
M(" @(" @(&AA=F5?9'-T87(@/2!N;V1E+F1S=&%R7V%R9W,@:7,@;F]T($YO
M;F4-"B$@(" @(" @("!O<&-O9&4@/2!C86QL9G5N8U]O<&-O9&5?:6YF;UMH
M879E7W-T87(L(&AA=F5?9'-T87)=#0HA(" @(" @(" @<V5L9BYE;6ET*&]P
M8V]D92P@:W<@/#P@."!\('!O<RD-"B @#0H@(" @("!D968@=FES:710<FEN
M="AS96QF+"!N;V1E*3H-"B @(" @(" @("!S96QF+F5M:70H)U-%5%],24Y%
M3D\G+"!N;V1E+FQI;F5N;RD-"DEN9&5X.B!C;VUP:6QE<B]T<F%N<V9O<FUE
M<BYP>0T*/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0T*4D-3(&9I;&4Z("]P<F]J
M96-T<R]C=G-R;V]T+W!Y=&AO;B]N;VYD:7-T+W-R8R]#;VUP:6QE<B]C;VUP
M:6QE<B]T<F%N<V9O<FUE<BYP>2QV#0IR971R:65V:6YG(')E=FES:6]N(#$N
M.0T*9&EF9B M8R M,R M<C$N.2!T<F%N<V9O<FUE<BYP>0T**BHJ('1R86YS
M9F]R;65R+G!Y"3(P,# O,#,O,38@,C Z,#,Z,#0),2XY#0HM+2T@=')A;G-F
M;W)M97(N<'D),C P,"\P-"\R,2 Q,#HT-3HT.0T**BHJ*BHJ*BHJ*BHJ*BHJ
M#0HJ*BH@.3@T+#DY,R J*BHJ#0H@(" @(" @(')E='5R;B!.;V1E*"=C86QL
M7V9U;F,G+"!P<FEM87)Y3F]D92P@6R!=*0T*(" @(" @87)G<R ](%L@70T*
M(" @(" @:W<@/2 P#0HA(" @("!F;W(@:2!I;B!R86YG92@Q+"!L96XH;F]D
M96QI<W0I+" R*3H-"B$@(" @(" @:W<L(')E<W5L=" ]('-E;&8N8V]M7V%R
M9W5M96YT*&YO9&5L:7-T6VE=+"!K=RD-"B @(" @(" @87)G<RYA<'!E;F0H
M<F5S=6QT*0T*(2 @(" @<F5T=7)N($YO9&4H)V-A;&Q?9G5N8R<L('!R:6UA
M<GE.;V1E+"!A<F=S*0T*(" -"B @("!D968@8V]M7V%R9W5M96YT*'-E;&8L
M(&YO9&5L:7-T+"!K=RDZ#0H@(" @("!I9B!L96XH;F]D96QI<W0I(#T](#(Z
M#0HM+2T@.3@T+#$P,34@+2TM+0T*(" @(" @("!R971U<FX@3F]D92@G8V%L
M;%]F=6YC)RP@<')I;6%R>4YO9&4L(%L@72D-"B @(" @(&%R9W,@/2!;(%T-
M"B @(" @(&MW(#T@, T*(2 @(" @;&5N7VYO9&5L:7-T(#T@;&5N*&YO9&5L
M:7-T*0T*(2 @(" @9F]R(&D@:6X@<F%N9V4H,2P@;&5N7VYO9&5L:7-T+" R
M*3H-"B$@(" @(" @;F]D92 ](&YO9&5L:7-T6VE=#0HA(" @(" @(&EF(&YO
M9&5;,%T@/3T@=&]K96XN4U1!4B!O<B!N;V1E6S!=(#T]('1O:V5N+D1/54),
M15-405(Z#0HA(" @(" @(" @("!B<F5A:PT*(2 @(" @("!K=RP@<F5S=6QT
M(#T@<V5L9BYC;VU?87)G=6UE;G0H;F]D92P@:W<I#0H@(" @(" @(&%R9W,N
M87!P96YD*')E<W5L="D-"B$@(" @(&5L<V4Z#0HA(" @(" @(" @:2 ](&D@
M*R Q(",@3F\@8G)O:V5N(&)Y('-T87(@87)G+"!S;R!S:VEP('1H92!L87-T
M(&]N92!W92!P<F]C97-S960N#0HA(" @("!S=&%R7VYO9&4@/2!D<W1A<E]N
M;V1E(#T@3F]N90T*(2 @(" @=VAI;&4@:2 \(&QE;E]N;V1E;&ES=#H-"B$@
M(" @(" @("!T;VL@/2!N;V1E;&ES=%MI70T*(2 @(" @(" @(&-H(#T@;F]D
M96QI<W1;:2LQ70T*(2 @(" @(" @(&D@/2!I("L@,PT*(2 @(" @(" @(&EF
M('1O:ULP73T]=&]K96XN4U1!4CH-"B$@(" @(" @(" @(" @:68@<W1A<E]N
M;V1E(&ES(&YO="!.;VYE.@T*(2 @(" @(" @(" @(" @(" @<F%I<V4@4WEN
M=&%X17)R;W(L("=A;')E861Y(&AA=F4@=&AE('9A<F%R9W,@:6YD96YT:69I
M97(G#0HA(" @(" @(" @(" @('-T87)?;F]D92 ]('-E;&8N8V]M7VYO9&4H
M8V@I#0HA(" @(" @(" @96QI9B!T;VM;,%T]/71O:V5N+D1/54),15-405(Z
M#0HA(" @(" @(" @(" @(&EF(&1S=&%R7VYO9&4@:7,@;F]T($YO;F4Z#0HA
M(" @(" @(" @(" @(" @("!R86ES92!3>6YT87A%<G)O<BP@)V%L<F5A9'D@
M:&%V92!T:&4@:W=A<F=S(&EN9&5N=&EF:65R)PT*(2 @(" @(" @(" @("!D
M<W1A<E]N;V1E(#T@<V5L9BYC;VU?;F]D92AC:"D-"B$@(" @(" @("!E;'-E
M.@T*(2 @(" @(" @(" @("!R86ES92!3>6YT87A%<G)O<BP@)W5N:VYO=VX@
M;F]D92!T>7!E.B E<R<@)2!T;VL-"B$@#0HA(" @("!R971U<FX@3F]D92@G
M8V%L;%]F=6YC)RP@<')I;6%R>4YO9&4L(&%R9W,L('-T87)?;F]D92P@9'-T
M87)?;F]D92D-"B @#0H@(" @9&5F(&-O;5]A<F=U;65N="AS96QF+"!N;V1E
M;&ES="P@:W<I.@T*(" @(" @:68@;&5N*&YO9&5L:7-T*2 ]/2 R.@T*8W9S
M('-E<G9E<CH@1&EF9FEN9R!T97-T<PT*26YD97@Z('1E<W1S+W1E<W1?9G5N
M8RYP>0T*/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0T*4D-3(&9I;&4Z("]P<F]J
M96-T<R]C=G-R;V]T+W!Y=&AO;B]N;VYD:7-T+W-R8R]#;VUP:6QE<B]T97-T
M<R]T97-T7V9U;F,N<'DL=@T*<F5T<FEE=FEN9R!R979I<VEO;B Q+C@-"F1I
M9F8@+6,@+3,@+7(Q+C@@=&5S=%]F=6YC+G!Y#0HJ*BH@=&5S=%]F=6YC+G!Y
M"3(P,# O,#(O,3<@,C(Z,3$Z,SD),2XX#0HM+2T@=&5S=%]F=6YC+G!Y"3(P
M,# O,#0O,C$@,3 Z-#4Z-#D-"BHJ*BHJ*BHJ*BHJ*BHJ*@T**BHJ(#(S+#(X
M("HJ*BH-"BTM+2 R,RPS.2 M+2TM#0H@(" @("!P<FEN="!T97-T-"@H*#$P
M+" V*2P@,BDL(# L("@V+" H,RP@,C(I*2P@,"P@,"D-"B @(" @('!R:6YT
M('1E<W0U*"D-"B @(" @('!R:6YT('1E<W0U*#(L(# L(#$L(#(I#0HK(" @
M(" C(%-O;64@97AT96YD960@8V%L;"!T97-T<RX-"BL@(" @(&%R9W,@/2 P
M+" H-BP@*#,L,C(I*0T**R @(" @:W=A<F=S(#T@>R=Y)SHP+" G>B<Z,'T-
M"BL@(" @('!R:6YT('1E<W0T*" H*#$P+#8I+" R*2P@*F%R9W,L("HJ:W=A
M<F=S*0T**R @(" @(R!%;G-U<F4@:W<@87)G<R!C86X@8V]M92!B969O<F4@
M=&AE(&5X=&5N9&5D('-Y;G1A>"X-"BL@(" @('!R:6YT('1E<W0T*" H*#$P
M+#8I+" R*2P@>3TP+'H],"P@*F%R9W,I#0HK(" @("!K=V%R9W,@/2![)V$G
M.C$L("=C)SHT?0T**R @(" @<')I;G0@=&5S=#$H("HJ:W=A<F=S("D-"BL@
M#0HK(" @("!P<FEN="!T97-T-2@@*B@R+" P+" Q+" R*2 I#0HK(" @("!P
K<FEN="!T97-T-2@@,BP@*B@P+" Q+" R*2 I#0H@( T*("!T97-T*"D-"@``
`
end