Boost logo

Boost :

From: Gennadiy Rozental (gennadiy_at_[hidden])
Date: 2002-10-02 01:39:44


Hi,

My general opinion that the submission should be accepted. Though it may
require some polishing.

Here my review for the submission.

=====================================================
Design/Interface

In general I agree with you algorithm design and proposed simple function
interface. Though I am not sure how functions like
last_min_first_max_element are useful.

=====================================================
Implementation

1. if (comp(b,a)) return std::make_pair(b,a);
   else return std::make_pair(a,b);

Why not: return comp(b,a) ? std::make_pair(b,a) : std::make_pair(a,b);
If should be ok since your both arguments are of the same type.

2. I agree with your point that no need to make an interface policy based.
But this does not mean that we need to repeat the implementation 8 times
with only slight change. All algorithms first/last_max/min_element could be
implemented in terms of one generic algorithm. The same could be done (but a
little bit more difficult) with first/last_min_first/last_max_element. Look
onto attached file. Second generic algorithms is not implemented for all
cases. It almost of top of my head, but you should get the idea.

3. I implemented looping in last_min_last_max a bit differently. I believe
it could save you at least one comparison and more elegant in general (IMO).

=====================================================
Code

1. Statements like if( a ) b; better to write in a form:
if( a )
   b;
Particulaly, it simplify debugging, cause you have separate line for
breakpoint;

2. min_result = second, potential_min_result = first;
I would prefer regular block with 2 statements.

3. The best code marker for clarity is .. empty line.
IMO you lack empty lines between statements.

4. template <class ForwardIter>
I would prefer: template <typename ForwardIter>

=====================================================
Example

Well. This is not an example. It's huge and difficult to understand. This is
the best way to scare first-timer. We need several trivial examples that
show basic usage of the algorithms. Current example may become second test
module.

=====================================================
Testing
You test does not compile with MSVC6.5. I made several changes to make it
compile and pass. Problems arose with your using of reverse_iterator (I
switched to use boost::reverse_iterator), our old enemy template<typename T>
foo(), that incorrectly linked by MSVC and iterator_traits for pointer that
are not specialized due to lack of partial specialization. Also you should
not be using old BOOST_TEST tool. You would be better off with
BOOST_CHECK_EQUAL in most cases and BOOST_CHECK. Look onto attached file.
Also you should name the file minmax_test.cpp

I am attaching modified minimal.hpp and minimal.cpp. It compiles and passes
all tests with MSVC6.5.

Gennadiy.

begin 666 minmax.cpp
M(VEN8VQU9&4@/'5T:6QI='D^"B-I;F-L=61E(#QF=6YC=&EO;F%L/@HC:6YC
M;'5D92 \86QG;W)I=&AM/@HC:6YC;'5D92 \;G5M97)I8SX*(VEN8VQU9&4@
M/&ET97)A=&]R/@HC:6YC;'5D92 \=F5C=&]R/@HC:6YC;'5D92 \;&ES=#X*
M(VEN8VQU9&4@/'-E=#X*"B-I;F-L=61E(#QI;W-T<F5A;3X*"B-I;F-L=61E
M(#QB;V]S="]T97-T+VEN8VQU9&5D+W1E<W1?97AE8U]M;VYI=&]R+FAP<#X*
M(VEN8VQU9&4@/&)O;W-T+W-E<75E;F-E7V%L9V\O;6EN;6%X+FAP<#X*(VEN
M8VQU9&4@/&)O;W-T+VET97)A=&]R7V%D87!T;W)S+FAP<#X-"@T*8VQA<W,@
M8W5S=&]M('L-"B @:6YT(%]-7W@[#0H@(&9R:65N9"!B;V]L(&]P97)A=&]R
M/"AC=7-T;VT_at_8V]N<W0F('@L(&-U<W1O;2!C;VYS="8@>2D[#0H@(&9R:65N
M9"!S=&0Z.F]S=')E86TF(&]P97)A=&]R/#PH<W1D.CIO<W1R96%M)B!S='(L
M(&-U<W1O;2!C;VYS="8@>"D[#0IP=6)L:6,Z#0H@(&5X<&QI8VET(&-U<W1O
M;2AI;G0@>" ](# I(#H_at_7TU?>"AX*2![?0T*("!C=7-T;VTH8W5S=&]M(&-O
M;G-T)B!Y*2 Z(%]-7W_at_H>2Y?35]X*2![?0T*("!C=7-T;VT@;W!E<F%T;W(K
M*&-U<W1O;2!C;VYS="8@>2D_at_8V]N<W0@>R!R971U<FX_at_8W5S=&]M*%]-7W_at_K
M>2Y?35]X*3L@?0T*("!C=7-T;VTF(&]P97)A=&]R*STH8W5S=&]M(&-O;G-T
M)B!Y*2![(%]-7W@@*ST@>2Y?35]X.R!R971U<FX@*G1H:7,[('T-"GT[#0H-
M"F)O;VP@;W!E<F%T;W(\("AC=7-T;VT_at_8V]N<W0F('@L(&-U<W1O;2!C;VYS
M="8@>2D-"GL@<F5T=7)N('@N7TU?>" \('DN7TU?>#L@?0T*#0IS=&0Z.F]S
M=')E86TF(&]P97)A=&]R/#PH<W1D.CIO<W1R96%M)B!S='(L(&-U<W1O;2!C
M;VYS="8@>"D-"GL@#0H@(" @<W1R(#P\('@N7TU?>#L-"@T*(" @(')E='5R
M;B!S='([#0I]#0H-"FYA;65S<&%C92!S=&0@>PT*#0IT96UP;&%T92 \/@T*
M<W1R=6-T(&ET97)A=&]R7W1R86ET<SQI;G0J/B![#0H@('1Y<&5D968@<F%N
M9&]M7V%C8V5S<U]I=&5R871O<E]T86<@(&ET97)A=&]R7V-A=&5G;W)Y.PT*
M("!T>7!E9&5F(&EN=" @(" @(" @(" @(" @(" @(" @(" @(" @=F%L=65?
M='EP93L-"B @='EP961E9B!P=')D:69F7W0@(" @(" @(" @(" @(" @(" @
M(&1I9F9E<F5N8V5?='EP93L-"B @='EP961E9B!V86QU95]T>7!E*B @(" @
M(" @(" @(" @(" @('!O:6YT97([#0H@('1Y<&5D968@=F%L=65?='EP928@
M(" @(" @(" @(" @(" @("!R969E<F5N8V4[#0I].PT*#0IT96UP;&%T92 \
M/@T*<W1R=6-T(&ET97)A=&]R7W1R86ET<SQC=7-T;VTJ/B![#0H@('1Y<&5D
M968@<F%N9&]M7V%C8V5S<U]I=&5R871O<E]T86<@(&ET97)A=&]R7V-A=&5G
M;W)Y.PT*("!T>7!E9&5F(&-U<W1O;2 @(" @(" @(" @(" @(" @(" @(" @
M=F%L=65?='EP93L-"B @='EP961E9B!P=')D:69F7W0@(" @(" @(" @(" @
M(" @(" @(&1I9F9E<F5N8V5?='EP93L-"B @='EP961E9B!V86QU95]T>7!E
M*B @(" @(" @(" @(" @(" @('!O:6YT97([#0H@('1Y<&5D968@=F%L=65?
M='EP928@(" @(" @(" @(" @(" @("!R969E<F5N8V4[#0I].PT*#0I]#0H*
M=&5M<&QA=&4@/&-L87-S(%0Q+"!C;&%S<R!4,BP_at_8VQA<W,@5#,L(&-L87-S
M(%0T/@IV;VED('1I92AS=&0Z.G!A:7(\5#$L(%0R/B!P+"!4,R8_at_9FER<W0L
M(%0T)B!S96-O;F0I"GL*("!F:7)S=" ](%0S*' N9FER<W0I.R!S96-O;F0@
M/2!4-"AP+G-E8V]N9"D["GT*"G1E;7!L871E(#QC;&%S<R!686QU93X*<W1R
M=6-T(&QE<W-?8V]U;G0_at_.B!S=&0Z.FQE<W,\5F%L=64^('L-"B @("!T>7!E
M9&5F('-T9#HZ;&5S<SQ686QU93X_at_0F%S93L*("!L97-S7V-O=6YT*&QE<W-?
M8V]U;G0\5F%L=64^(&-O;G-T)B!L8RD_at_.B!?35]C;W5N=&5R*&QC+E]-7V-O
M=6YT97(I('M]"B @;&5S<U]C;W5N="AI;G0F(&-O=6YT97(I(#H_at_7TU?8V]U
M;G1E<BAC;W5N=&5R*2![?0H@(&)O;VP@;W!E<F%T;W(H*2A686QU92!C;VYS
M="8_at_82P@5F%L=64_at_8V]N<W0F(&(I(&-O;G-T('L*(" @("LK7TU?8V]U;G1E
M<CL*(" @(')E='5R;B!"87-E.CIO<&5R871O<B_at_I*&$L8BD["B @?0H@('9O
M:60@<F5S970H*2!["B @("!?35]C;W5N=&5R(#T@,#L*("!]"G!R:79A=&4Z
M"B @:6YT)B!?35]C;W5N=&5R.PI].PH*:6YL:6YE(&EN="!O<'1?;6EN7V-O
M=6YT*&EN="!N*2!["B @<F5T=7)N("AN/3TP*2 _(# @.B!N+3$["GT*:6YL
M:6YE(&EN="!O<'1?;6EN;6%X7V-O=6YT*&EN="!N*2!["B @:68@*&X@/" R
M*2!R971U<FX@,#L*("!I9B H;B ]/2 R*2!R971U<FX@,CL*("!R971U<FX@
M*&XE,B ]/2 P*2 _(#,J*&XO,BDM,2 Z(#,J*&XO,BDK,3L*?0II;FQI;F4@
M:6YT(&]P=%]B;V]S=%]M:6YM87A?8V]U;G0H:6YT(&XI('L*("!I9B H;B \
M(#(I(')E='5R;B P.PH@(&EF("AN(#T](#(I(')E='5R;B Q.PH@(')E='5R
M;B H;B4R(#T](# I(#\@,RHH;B\R*2TR(#H@,RHH;B\R*3L*?0H-"B-D969I
M;F4_at_0TA%0TM?15%504Q?251%4D%43U)3*"!L969T+"!R:6=H="P_at_9FER<W0@
M*2!<#0I"3T]35%]#2$5#2U]%455!3"@@<W1D.CID:7-T86YC92@@9FER<W0L
M(&QE9G0@*2P@<W1D.CID:7-T86YC92@@9FER<W0L(')I9VAT("D@*0T*"G1E
M;7!L871E(#QC;&%S<R!#271E<F%T;W(^"G9O:60@=&5S=%]M:6YM87_at_H0TET
M97)A=&]R(&9I<G-T+"!#271E<F%T;W(@;&%S="P@:6YT(&XI"GL*("!U<VEN
M9R!N86UE<W!A8V4_at_8F]O<W0["@T*("!T>7!E9&5F('1Y<&5N86UE('-T9#HZ
M:71E<F%T;W)?=')A:71S/$-)=&5R871O<CXZ.G9A;'5E7W1Y<&4_at_5F%L=64[
M"B @='EP961E9B!B;V]S=#HZ<F5V97)S95]I=&5R871O<E]G96YE<F%T;W(\
M0TET97)A=&]R+%9A;'5E/CHZ='EP92!20TET97)A=&]R.PT*(" O+R!A<W-U
M;64@=&AA="!#271E<F%T;W(@:7,@0FED:7)E8W1I;VYA;$ET97(*("!#271E
M<F%T;W(@;6EN+"!M87@["B @4D-)=&5R871O<B!R9FER<W0H;&%S="DL(')L
M87-T*&9I<G-T*2P@<FUI;BAM:6XI+"!R;6%X*&UA>"D["B @:6YT(&-O=6YT
M97(@/2 P.PH@(&QE<W-?8V]U;G0\5F%L=64^(&QC*&-O=6YT97(I.PH*(" O
M+R!S=&%N9&%R9"!E>'1E;G-I;VYS"B @+R\@9FER<W0@=F5R<VEO;BP@;W!E
M<F%T;W(\"B @=&EE*"!B;V]S=#HZ;6EN;6%X7V5L96UE;G0H9FER<W0L(&QA
M<W0I+"!M:6XL(&UA>" I.PT*#0H@($-(14-+7T5154%,7TE415)!5$]24R@@
M;6EN+"!S=&0Z.FUI;E]E;&5M96YT*&9I<G-T+"!L87-T*2P_at_9FER<W0@*3L*
M("!#2$5#2U]%455!3%])5$52051/4E,H(&UA>"P@<W1D.CIM87A?96QE;65N
M="AF:7)S="P@;&%S="DL(&9I<G-T("D["B @+R\@<V5C;VYD('9E<G-I;VXL
M(&-O;7 @9G5N8W1I;VX@;V)J96-T("AK965P<R!A(&-O=6YT97(A*0H@(&QC
M+G)E<V5T*"D["B @=&EE*"!B;V]S=#HZ;6EN;6%X7V5L96UE;G0H9FER<W0L
M(&QA<W0L(&QC*2P@;6EN+"!M87@@*3L*("!"3T]35%]#2$5#2R@@8V]U;G1E
M<B \/2!O<'1?;6EN;6%X7V-O=6YT*&XI("D["B @0TA%0TM?15%504Q?251%
M4D%43U)3*"!M:6XL('-T9#HZ;6EN7V5L96UE;G0H9FER<W0L(&QA<W0L(&QC
M*2P_at_9FER<W0@*3L*("!#2$5#2U]%455!3%])5$52051/4E,H(&UA>"P@<W1D
M.CIM87A?96QE;65N="AF:7)S="P@;&%S="P@;&,I+"!F:7)S=" I.PH*(" O
M+R!B;V]S="!E>'1E;G-I;VYS"B @+R\@9FER<W0@=F5R<VEO;BP@;W!E<F%T
M;W(\"B @0TA%0TM?15%504Q?251%4D%43U)3*"!B;V]S=#HZ9FER<W1?;6EN
M7V5L96UE;G0H9FER<W0L(&QA<W0I+"!S=&0Z.FUI;E]E;&5M96YT*&9I<G-T
M+"!L87-T*2P_at_9FER<W0@*3L*("!R;6EN(#T_at_4D-)=&5R871O<BAB;V]S=#HZ
M;&%S=%]M:6Y?96QE;65N="AF:7)S="P@;&%S="DI.PH@(')M:6X@/2 H<FUI
M;B ]/2!R9FER<W0I(#\@<FQA<W0_at_.B M+7)M:6X["B @0TA%0TM?15%504Q?
M251%4D%43U)3*"!R;6EN+"!S=&0Z.FUI;E]E;&5M96YT*')F:7)S="P@<FQA
M<W0I+"!R9FER<W0@*3L*("!#2$5#2U]%455!3%])5$52051/4E,H(&)O;W-T
M.CIF:7)S=%]M87A?96QE;65N="AF:7)S="P@;&%S="DL('-T9#HZ;6%X7V5L
M96UE;G0H9FER<W0L(&QA<W0I+"!F:7)S=" I.PH@(')M87@@/2!20TET97)A
M=&]R*&)O;W-T.CIL87-T7VUA>%]E;&5M96YT*&9I<G-T+"!L87-T*2D["B @
M<FUA>" ]("AR;6%X(#T](')F:7)S="D@/R!R;&%S=" Z("TM<FUA>#L*("!#
M2$5#2U]%455!3%])5$52051/4E,H(')M87_at_L('-T9#HZ;6%X7V5L96UE;G0H
M<F9I<G-T+"!R;&%S="DL(')F:7)S=" I.PH@('1I92@@8F]O<W0Z.F9I<G-T
M7VUI;E]L87-T7VUA>%]E;&5M96YT*&9I<G-T+"!L87-T*2P@;6EN+"!M87@@
M*3L*("!#2$5#2U]%455!3%])5$52051/4E,H(&UI;BP_at_8F]O<W0Z.F9I<G-T
M7VUI;E]E;&5M96YT*&9I<G-T+"!L87-T*2P_at_9FER<W0@*3L*("!#2$5#2U]%
M455!3%])5$52051/4E,H(&UA>"P_at_8F]O<W0Z.FQA<W1?;6%X7V5L96UE;G0H
M9FER<W0L(&QA<W0I+"!F:7)S=" I.PH@('1I92@@8F]O<W0Z.FQA<W1?;6EN
M7V9I<G-T7VUA>%]E;&5M96YT*&9I<G-T+"!L87-T*2P@;6EN+"!M87@@*3L*
M("!#2$5#2U]%455!3%])5$52051/4E,H(&UI;BP_at_8F]O<W0Z.FQA<W1?;6EN
M7V5L96UE;G0H9FER<W0L(&QA<W0I+"!F:7)S=" I.PH@($-(14-+7T5154%,
M7TE415)!5$]24R@@;6%X+"!B;V]S=#HZ9FER<W1?;6%X7V5L96UE;G0H9FER
M<W0L(&QA<W0I+"!F:7)S=" I.PH@('1I92@@8F]O<W0Z.FQA<W1?;6EN7VQA
M<W1?;6%X7V5L96UE;G0H9FER<W0L(&QA<W0I+"!M:6XL(&UA>" I.PH@($-(
M14-+7T5154%,7TE415)!5$]24R@@;6EN+"!B;V]S=#HZ;&%S=%]M:6Y?96QE
M;65N="AF:7)S="P@;&%S="DL(&9I<G-T("D["B @0TA%0TM?15%504Q?251%
M4D%43U)3*"!M87_at_L(&)O;W-T.CIL87-T7VUA>%]E;&5M96YT*&9I<G-T+"!L
M87-T*2P_at_9FER<W0@*3L*(" O+R!S96-O;F0@=F5R<VEO;BP_at_8V]M<"!F=6YC
M=&EO;B!O8FIE8W0@*&ME97!S(&$@8V]U;G1E<B$I"B @;&,N<F5S970H*3L*
M("!M:6X@/2!B;V]S=#HZ9FER<W1?;6EN7V5L96UE;G0H9FER<W0L(&QA<W0L
M(&QC*3L*("!"3T]35%]#2$5#2R@@8V]U;G1E<B \/2!O<'1?;6EN7V-O=6YT
M*&XI("D["B @0TA%0TM?15%504Q?251%4D%43U)3*"!M:6XL('-T9#HZ;6EN
M7V5L96UE;G0H9FER<W0L(&QA<W0L(&QC*2P_at_9FER<W0@*3L*("!L8RYR97-E
M="@I.PH@(')M:6X@/2!20TET97)A=&]R*&)O;W-T.CIL87-T7VUI;E]E;&5M
M96YT*&9I<G-T+"!L87-T+"!L8RDI.PH@(')M:6X@/2 H<FUI;B ]/2!R9FER
M<W0I(#\@<FQA<W0_at_.B M+7)M:6X["B @0D]/4U1?0TA%0TLH(&-O=6YT97(@
M/#T@;W!T7VUI;E]C;W5N="AN*2 I.PH@($-(14-+7T5154%,7TE415)!5$]2
M4R@@<FUI;BP@<W1D.CIM:6Y?96QE;65N="AR9FER<W0L(')L87-T+"!L8RDL
M(')F:7)S=" I.PH@(&QC+G)E<V5T*"D["B @;6%X(#T@(&)O;W-T.CIF:7)S
M=%]M87A?96QE;65N="AF:7)S="P@;&%S="P@;&,I.PH@($)/3U-47T-(14-+
M*"!C;W5N=&5R(#P](&]P=%]M:6Y?8V]U;G0H;BD@*3L*("!#2$5#2U]%455!
M3%])5$52051/4E,H(&UA>"P@<W1D.CIM87A?96QE;65N="AF:7)S="P@;&%S
M="P@;&,I+"!F:7)S=" I.PH@(&QC+G)E<V5T*"D["B @<FUA>" ](%)#271E
M<F%T;W(H8F]O<W0Z.FQA<W1?;6%X7V5L96UE;G0H9FER<W0L(&QA<W0L(&QC
M*2D["B @<FUA>" ]("AR;6%X(#T](')F:7)S="D@/R!R;&%S=" Z("TM<FUA
M>#L*("!"3T]35%]#2$5#2R@@8V]U;G1E<B \/2!O<'1?;6EN7V-O=6YT*&XI
M("D["B @0TA%0TM?15%504Q?251%4D%43U)3*"!R;6%X+"!S=&0Z.FUA>%]E
M;&5M96YT*')F:7)S="P@<FQA<W0L(&QC*2P@<F9I<G-T("D["B @;&,N<F5S
M970H*3L*("!T:64H(&)O;W-T.CIF:7)S=%]M:6Y?;&%S=%]M87A?96QE;65N
M="AF:7)S="P@;&%S="P@;&,I+"!M:6XL(&UA>" I.PH@($)/3U-47T-(14-+
M*"!C;W5N=&5R(#P](&]P=%]B;V]S=%]M:6YM87A?8V]U;G0H;BD@*3L*("!#
M2$5#2U]%455!3%])5$52051/4E,H(&UI;BP_at_8F]O<W0Z.F9I<G-T7VUI;E]E
M;&5M96YT*&9I<G-T+"!L87-T+"!L8RDL(&9I<G-T("D["B @0TA%0TM?15%5
M04Q?251%4D%43U)3*"!M87_at_L(&)O;W-T.CIL87-T7VUA>%]E;&5M96YT*&9I
M<G-T+"!L87-T+"!L8RDL(&9I<G-T("D["B @;&,N<F5S970H*3L*("!T:64H
M(&)O;W-T.CIL87-T7VUI;E]F:7)S=%]M87A?96QE;65N="AF:7)S="P@;&%S
M="P@;&,I+"!M:6XL(&UA>" I.PH@($)/3U-47T-(14-+*"!C;W5N=&5R(#P]
M(&]P=%]B;V]S=%]M:6YM87A?8V]U;G0H;BD@*3L*("!"3T]35%]#2$5#2R@@
M;6EN(#T](&)O;W-T.CIL87-T7VUI;E]E;&5M96YT*&9I<G-T+"!L87-T+"!L
M8RD@*3L*("!#2$5#2U]%455!3%])5$52051/4E,H(&UA>"P_at_8F]O<W0Z.F9I
M<G-T7VUA>%]E;&5M96YT*&9I<G-T+"!L87-T+"!L8RDL(&9I<G-T("D["B @
M;&,N<F5S970H*3L*("!T:64H(&)O;W-T.CIL87-T7VUI;E]L87-T7VUA>%]E
M;&5M96YT*&9I<G-T+"!L87-T+"!L8RDL(&UI;BP@;6%X("D["B @0D]/4U1?
M0TA%0TLH(&-O=6YT97(@/#T@;W!T7VUI;FUA>%]C;W5N="AN*2 I.PH@($-(
M14-+7T5154%,7TE415)!5$]24R@@;6EN+"!B;V]S=#HZ;&%S=%]M:6Y?96QE
M;65N="AF:7)S="P@;&%S="P@;&,I+"!F:7)S=" I.PH@($-(14-+7T5154%,
M7TE415)!5$]24R@@;6%X+"!B;V]S=#HZ;&%S=%]M87A?96QE;65N="AF:7)S
M="P@;&%S="P@;&,I+"!F:7)S=" I.PI]"@IT96UP;&%T92 \8VQA<W,@0V]N
M=&%I;F5R+"!C;&%S<R!)=&5R871O<BP_at_8VQA<W,@5F%L=64^"G9O:60@=&5S
M=%]C;VYT86EN97(H271E<F%T;W(@9FER<W0L($ET97)A=&]R(&QA<W0L(&EN
M="!N+"!#;VYT86EN97(J(&1U;6UY(#T@," I"GL*("!#;VYT86EN97(@8RAF
M:7)S="P@;&%S="D["B @=&5S=%]M:6YM87_at_H8RYB96=I;B_at_I+"!C+F5N9"@I
M+"!N*3L*?0H*=&5M<&QA=&4@/&-L87-S($ET97)A=&]R/@IV;VED('1E<W1?
M<F%N9V4H271E<F%T;W(@9FER<W0L($ET97)A=&]R(&QA<W0L(&EN="!N+"!C
M:&%R*B!N86UE*0I["B @='EP961E9B!T>7!E;F%M92!S=&0Z.FET97)A=&]R
M7W1R86ET<SQ)=&5R871O<CXZ.G9A;'5E7W1Y<&4_at_5F%L=64["B @+R\@5&5S
M="!V87)I;W5S(&-O;G1A:6YE<G,@=VET:"!T:&5S92!V86QU97,*(" O+R!S
M=&0Z.F-O=70@/#P@(B @=F5C=&]R/"(@/#P@;F%M92 \/" B/BXN+B(["B @
M=&5S=%]C;VYT86EN97(\('-T9#HZ=F5C=&]R/%9A;'5E/BP_at_271E<F%T;W(L
M(%9A;'5E(#XH9FER<W0L(&QA<W0L(&XI.PH@("\O('-T9#HZ8V]U=" \/" B
M("!L:7-T/"(@/#P@;F%M92 \/" B/BXN+B(["B @=&5S=%]C;VYT86EN97(\
M('-T9#HZ;&ES=#Q686QU93XL(" @271E<F%T;W(L(%9A;'5E(#XH9FER<W0L
M(&QA<W0L(&XI.PH@("\O('-T9#HZ8V]U=" \/" B("!S970\(B \/"!N86UE
M(#P\("(^+BXN(CL*("!T97-T7V-O;G1A:6YE<CP@<W1D.CIS970\5F%L=64^
M+" @("!)=&5R871O<BP_at_5F%L=64@/BAF:7)S="P@;&%S="P@;BD["B @+R\@
M<W1D.CIC;W5T(#P\(")<;B(["GT*#0IT96UP;&%T92 \8VQA<W,@5F%L=64^
M"G9O:60@=&5S="AI;G0@;BP_at_8VAA<BH@;F%M92D*>PH@("\O(%!O<'5L871E
M('1E<W0@=F5C=&]R('=I=&@@:61E;G1I8V%L('9A;'5E<PH@("\O('-T9#HZ
M8V]U=" \/" B($ED96YT:6-A;"!V86QU97,N+BX@(" B.PH@('-T9#HZ=F5C
M=&]R/%9A;'5E/B!T97-T7W9E8W1O<BAN+"!686QU92_at_Q*2D["B @='EP96YA
M;64@<W1D.CIV96-T;W(\5F%L=64^.CII=&5R871O<B!F:7)S="@@=&5S=%]V
M96-T;W(N8F5G:6XH*2 I.PH@('1Y<&5N86UE('-T9#HZ=F5C=&]R/%9A;'5E
M/CHZ:71E<F%T;W(@;&%S="@@=&5S=%]V96-T;W(N96YD*"D@*3L*("!T97-T
M7W)A;F=E*&9I<G-T+"!L87-T+"!N+"!N86UE*3L*"B @+R\@4&]P=6QA=&4@
M=&5S="!V96-T;W(@=VET:"!T=V\@=F%L=65S"B @+R\@<W1D.CIC;W5T(#P\
M("(@5'=O(&1I<W1I;F-T('9A;'5E<RXN+B(["B @='EP96YA;64@<W1D.CIV
M96-T;W(\5F%L=64^.CII=&5R871O<B!M:61D;&4H(&9I<G-T("L@;B\R("D[
M"B @<W1D.CIF:6QL*&UI9&1L92P@;&%S="P_at_5F%L=64H,BDI.PH@('1E<W1?
M<F%N9V4H9FER<W0L(&QA<W0L(&XL(&YA;64I.PH*(" O+R!0;W!U;&%T92!T
M97-T('9E8W1O<B!W:71H(&EN8W)E87-I;F<@=F%L=65S"B @+R\@<W1D.CIC
M;W5T(#P\("(@26YC<F5A<VEN9R!V86QU97,N+BX@("(["B @<W1D.CIA8V-U
M;75L871E*&9I<G-T+"!L87-T+"!686QU92_at_P*2D["B @=&5S=%]R86YG92AF
M:7)S="P@;&%S="P@;BP@;F%M92D["@H@("\O(%!O<'5L871E('1E<W0@=F5C
M=&]R('=I=&@@9&5C<F5A<VEN9R!V86QU97,*(" O+R!S=&0Z.F-O=70@/#P@
M(B!$96-R96%S:6YG('9A;'5E<RXN+B @(CL*("!S=&0Z.G)E=F5R<V4H9FER
M<W0L(&QA<W0I.PH@('1E<W1?<F%N9V4H9FER<W0L(&QA<W0L(&XL(&YA;64I
M.PH*(" O+R!0;W!U;&%T92!T97-T('9E8W1O<B!W:71H(')A;F1O;2!V86QU
M97,*(" O+R!S=&0Z.F-O=70@/#P@(B!286YD;VT@=F%L=65S+BXN(" @(" @
M(CL*("!S=&0Z.G)A;F1O;5]S:'5F9FQE*&9I<G-T+"!L87-T*3L*("!T97-T
M7W)A;F=E*&9I<G-T+"!L87-T+"!N+"!N86UE*3L*?0H*:6YT('1E<W1?;6%I
M;B@@:6YT(&%R9V,L(&-H87(J(&%R9W9;72 I"GL*("!I;G0@;B ](#$P,#L*
M("!I9B H87)G8R ^(#$I(&X@/2!A=&]I*&%R9W9;,5TI.PH*("!T97-T/&EN
M=#XH;BP@(F)U:6QT:6XB*3L*("!T97-T/&-U<W1O;3XH;BP@(F-U<W1O;2 B
2*3L*"B @<F5T=7)N(# ["GT*
`
end

begin 666 minmax.hpp
M+RH@*$,I($-O<'ER:6=H="!(97)VZ2!"<O9N;FEM86YN+"!0;VQY=&5C:&YI
M8R!5;FEV97)S:71Y+" R,# R+@H@*@H@*B!097)M:7-S:6]N('1O(&-O<'DL
M('5S92P@;6]D:69Y+"!S96QL(&%N9"!D:7-T<FEB=71E('1H:7,@<V]F='=A
M<F4*("H_at_86YD(&ET<R!D;V-U;65N=&%T:6]N(&ES(&=R86YT960@<')O=FED
M960@=&AI<R!C;W!Y<FEG:'0@;F]T:6-E"B J(&%P<&5A<G,@:6X_at_86QL(&-O
M<&EE<RX_at_5&AI<R!S;V9T=V%R92!A;F0@:71S(&1O8W5M96YT871I;VX@:7,*
M("H@<')O=FED960@(F%S(&ES(B!W:71H;W5T(&5X<')E<W,@;W(@:6UP;&EE
M9"!W87)R86YT>2P_at_86YD('=I=&@@;F\*("H_at_8VQA:6T_at_87,@=&\@:71S('-U
M:71A8FEL:71Y(&9O<B!A;GD@<'5R<&]S92X*("HO"@HC:69N9&5F($)/3U-4
M7TU)3DU!6%]("B-D969I;F4_at_0D]/4U1?34E.34%87T@*"B-I;F-L=61E(#QU
M=&EL:71Y/B O+R!F;W(@<W1D.CIP86ER(&%N9"!S=&0Z.FUA:V5?<&%I<@T*
M"B\J(%!23U!/4T5$(%-404Y$05)$($585$5.4TE/3E,Z"B J"B J(&UI;FUA
M>"AA+"!B*0H@*B!%9F9E8W0Z("AB/&$I(#\@<W1D.CIM86ME7W!A:7(H8BQA
M*2 Z('-T9#HZ;6%K95]P86ER*&$L8BD["B J"B J(&UI;FUA>"AA+"!B+"!C
M;VUP*0H@*B!%9F9E8W0Z(&-O;7 H8BQA*2 _('-T9#HZ;6%K95]P86ER*&(L
M82D_at_.B!S=&0Z.FUA:V5?<&%I<BAA+&(I.PH@*@H@*B!M:6YM87A?96QE;65N
M="AF:7)S="P@;&%S="D*("H_at_169F96-T.B!S=&0Z.FUA:V5?<&%I<B@@<W1D
M.CIM:6Y?96QE;65N="AF:7)S="P@;&%S="DL"B J(" @(" @(" @(" @(" @
M(" @(" @(" @('-T9#HZ;6%X7V5L96UE;G0H9FER<W0L(&QA<W0I("D["B J
M"B J(&UI;FUA>%]E;&5M96YT*&9I<G-T+"!L87-T+"!C;VUP*0H@*B!%9F9E
M8W0Z('-T9#HZ;6%K95]P86ER*"!S=&0Z.FUI;E]E;&5M96YT*&9I<G-T+"!L
M87-T+"!C;VUP*2P*("H@(" @(" @(" @(" @(" @(" @(" @(" @<W1D.CIM
M87A?96QE;65N="AF:7)S="P@;&%S="P_at_8V]M<"D@*3L*("HO"@IN86UE<W!A
M8V4_at_8F]O<W0@>PH@(" @"G1E;7!L871E(#QT>7!E;F%M92!4/@IS=&0Z.G!A
M:7(\5"8L5"8^"FUI;FUA>"A4)B!A+"!4)B!B*2!["B @("!I9B H8CQA*2!R
M971U<FX@<W1D.CIM86ME7W!A:7(H8BQA*3L*(" @(&5L<V4@(" @(')E='5R
M;B!S=&0Z.FUA:V5?<&%I<BAA+&(I.PI]"@IT96UP;&%T92 \='EP96YA;64@
M5"P@='EP96YA;64_at_0FEN87)Y4')E9&EC871E/@IS=&0Z.G!A:7(\5"8L5"8^
M"FUI;FUA>"A4)B!A+"!4)B!B+"!":6YA<GE0<F5D:6-A=&4_at_8V]M<"D@>PH@
M(" @:68@*&-O;7 H8BQA*2D@<F5T=7)N('-T9#HZ;6%K95]P86ER*&(L82D[
M"B @("!E;'-E(" @(" @(" @("!R971U<FX@<W1D.CIM86ME7W!A:7(H82QB
M*3L*?0H*=&5M<&QA=&4@/'1Y<&5N86UE(%0^"G-T9#HZ<&%I<CQC;VYS="!4
M)BQC;VYS="!4)CX*;6EN;6%X*&-O;G-T(%0F(&$L(&-O;G-T(%0F(&(I('L*
M(" @(&EF("AB/&$I(')E='5R;B!S=&0Z.FUA:V5?<&%I<BAB+&$I.PH@(" @
M96QS92 @(" @<F5T=7)N('-T9#HZ;6%K95]P86ER*&$L8BD["GT*"G1E;7!L
M871E(#QT>7!E;F%M92!4+"!T>7!E;F%M92!":6YA<GE0<F5D:6-A=&4^"G-T
M9#HZ<&%I<CQC;VYS="!4)BQC;VYS="!4)CX*;6EN;6%X*&-O;G-T(%0F(&$L
M(&-O;G-T(%0F(&(L($)I;F%R>5!R961I8V%T92!C;VUP*2!["B @("!I9B H
M8V]M<"AB+&$I*2!R971U<FX@<W1D.CIM86ME7W!A:7(H8BQA*3L*(" @(&5L
M<V4@(" @(" @(" @(')E='5R;B!S=&0Z.FUA:V5?<&%I<BAA+&(I.PI]"@T*
M;F%M97-P86-E(&1E=&%I;"![#0H-"G1E;7!L871E(#QT>7!E;F%M92!&;W)W
M87)D271E<BP@='EP96YA;64_at_0FEN87)Y4')E9&EC871E/@T*<W1D.CIP86ER
M/$9O<G=A<F1)=&5R+$9O<G=A<F1)=&5R/@T*8F%S:6-?;6EN;6%X7V5L96UE
M;G0H($9O<G=A<F1)=&5R(&9I<G-T+"!&;W)W87)D271E<B!L87-T+"!":6YA
M<GE0<F5D:6-A=&4_at_8V]M<" I#0I[#0H@(" @:68@*&9I<G-T(#T](&QA<W0I
M#0H@(" @(" @(')E='5R;B!S=&0Z.FUA:V5?<&%I<BAL87-T+&QA<W0I.PT*
M(" @( T*(" @($9O<G=A<F1)=&5R(&UI;E]R97-U;'0@(#T_at_9FER<W0[#0H@
M(" @1F]R=V%R9$ET97(@;6%X7W)E<W5L=" @/2!F:7)S=#L-"B @("!&;W)W
M87)D271E<B!S96-O;F0@(" @(" ](&9I<G-T.PT*(" @( T*(" @(&EF*" K
M*W-E8V]N9" ]/2!L87-T("D-"B @(" @(" @<F5T=7)N('-T9#HZ;6%K95]P
M86ER*"!M:6Y?<F5S=6QT+"!M87A?<F5S=6QT("D[#0H@(" @#0H@(" @1F]R
M=V%R9$ET97(@<&]T96YT:6%L7VUI;E]R97-U;'0@/2!L87-T.PT*(" @(&EF
M*"!C;VUP*"!F:7)S="P@<V5C;VYD("D@*0T*(" @(" @("!M87A?<F5S=6QT
M(" @(" @(" @(" @(" ]('-E8V]N9#L-"B @("!E;'-E('L-"B @(" @(" @
M;6EN7W)E<W5L=" @(" @(" @(" @(" @/2!S96-O;F0[#0H@(" @(" @('!O
M=&5N=&EA;%]M:6Y?<F5S=6QT(" @(#T_at_9FER<W0[#0H@(" @?0T*(" @( T*
M(" @('=H:6QE*" K*W-E8V]N9" A/2!L87-T("D@>PT*(" @(" @("!F:7)S
M=" ]('-E8V]N9#L-"B @(" @(" @#0H@(" @(" @(&EF*" K*W-E8V]N9" ]
M/2!L87-T("D@>PT*(" @(" @(" @(" @:68H(&-O;7 H(&9I<G-T+"!M:6Y?
M<F5S=6QT("D@*2![#0H@(" @(" @(" @(" @(" @;6EN7W)E<W5L=" @(" @
M(" @(" @(" @/2!F:7)S=#L-"B @(" @(" @(" @(" @("!P;W1E;G1I86Q?
M;6EN7W)E<W5L=" @(" ](&QA<W0[#0H@(" @(" @(" @("!]#0H@(" @(" @
M(" @("!E;'-E(&EF*"!C;VUP*"!M87A?<F5S=6QT+"!F:7)S=" I("D-"B @
M(" @(" @(" @(" @("!M87A?<F5S=6QT(" @(" @(" @(" @(" ](&9I<G-T
M.PT*(" @(" @(" @(" @#0H@(" @(" @(" @("!B<F5A:SL-"B @(" @(" @
M?0T*(" @(" @(" -"B @(" @(" @:68H(&-O;7 H(&9I<G-T+"!S96-O;F0@
M*2 I('L-"B @(" @(" @(" @(&EF*"!C;VUP*"!F:7)S="P@;6EN7W)E<W5L
M=" I("D@>PT*(" @(" @(" @(" @(" @(&UI;E]R97-U;'0@(" @(" @(" @
M(" @(#T_at_9FER<W0[#0H@(" @(" @(" @(" @(" @<&]T96YT:6%L7VUI;E]R
M97-U;'0@(" @/2!L87-T.PT*(" @(" @(" @(" @?0T*(" @(" @(" @(" @
M:68H(&-O;7 H(&UA>%]R97-U;'0L('-E8V]N9" I("D-"B @(" @(" @(" @
M(" @("!M87A?<F5S=6QT(" @(" @(" @(" @(" ]('-E8V]N9#L-"B @(" @
M(" @?2!E;'-E('L-"B @(" @(" @(" @(&EF*"!C;VUP*"!S96-O;F0L(&UI
M;E]R97-U;'0@*2 I('L-"B @(" @(" @(" @(" @("!M:6Y?<F5S=6QT(" @
M(" @(" @(" @(" ]('-E8V]N9#L-"B @(" @(" @(" @(" @("!P;W1E;G1I
M86Q?;6EN7W)E<W5L=" @(" ](&9I<G-T.PT*(" @(" @(" @(" @?0T*(" @
M(" @(" @(" @:68H(&-O;7 H(&UA>%]R97-U;'0L(&9I<G-T("D@*0T*(" @
M(" @(" @(" @(" @(&UA>%]R97-U;'0@(" @(" @(" @(" @(#T_at_9FER<W0[
M#0H@(" @(" @('T-"B @("!]#0H@(" @#0H@(" @:68H('!O=&5N=&EA;%]M
M:6Y?<F5S=6QT("$](&QA<W0@)B8@(6-O;7 H(&UI;E]R97-U;'0L('!O=&5N
M=&EA;%]M:6Y?<F5S=6QT*2 I#0H@(" @(" @(&UI;E]R97-U;'0@/2!P;W1E
M;G1I86Q?;6EN7W)E<W5L=#L-"B @(" -"B @("!R971U<FX@<W1D.CIM86ME
M7W!A:7(H(&UI;E]R97-U;'0L(&UA>%]R97-U;'0@*3L-"GT-"@T*<W1R=6-T
M(&1I<F5C=%]O<F1E<@T*>PT*(" @('1E;7!L871E/'1Y<&5N86UE(%0^#0H@
M(" @<W1A=&EC(%0_at_8V]N<W0F('-E;&5C=#%S="@@5"!C;VYS="8_at_9BP@5"!C
M;VYS="8@<R I('L@<F5T=7)N(&8[('T-"B @("!T96UP;&%T93QT>7!E;F%M
M92!4/@T*(" @('-T871I8R!4(&-O;G-T)B!S96QE8W0R;F0H(%0_at_8V]N<W0F
M(&8L(%0_at_8V]N<W0F(',@*2![(')E='5R;B!S.R!]#0I].PT*#0IS=')U8W0@
M<F5V97)S95]O<F1E<@T*>PT*(" @('1E;7!L871E/'1Y<&5N86UE(%0^#0H@
M(" @<W1A=&EC(%0_at_8V]N<W0F('-E;&5C=#%S="@@5"!C;VYS="8_at_9BP@5"!C
M;VYS="8@<R I('L@<F5T=7)N(',[('T-"B @("!T96UP;&%T93QT>7!E;F%M
M92!4/@T*(" @('-T871I8R!4(&-O;G-T)B!S96QE8W0R;F0H(%0_at_8V]N<W0F
M(&8L(%0_at_8V]N<W0F(',@*2![(')E='5R;B!F.R!]#0I].PT*#0IT96UP;&%T
M93QT>7!E;F%M92!)=&5R871O<BP@='EP96YA;64_at_0FEN87)Y4')E9&EC871E
M/@T*<W1R=6-T(&)I;F%R>5]P<F5D:6-A=&5?;W9E<E]I=&5R871O<G,@.B!S
M=&0Z.F)I;F%R>5]F=6YC=&EO;CQ)=&5R871O<BQ)=&5R871O<BQB;V]L/@T*
M>PT*(" @(&5X<&QI8VET(" @(" @("!B:6YA<GE?<')E9&EC871E7V]V97)?
M:71E<F%T;W)S*"!":6YA<GE0<F5D:6-A=&4_at_8V]N<W0F(' @*2 Z(&U?<"@@
M<" I('M]#0H-"B @("!B;V]L(" @(" @(" @(" @;W!E<F%T;W(H*2@@271E
M<F%T;W(@8V]N<W0F(&ET,2P_at_271E<F%T;W(@8V]N<W0F(&ET,B I(&-O;G-T
M#0H@(" @>PT*(" @(" @("!R971U<FX@;5]P*" J:70Q+" J:70R("D[#0H@
M(" @?0T*#0IP<FEV871E._at_T*(" @($)I;F%R>5!R961I8V%T92!M7W [#0I]
M.PT*#0IT96UP;&%T93QT>7!E;F%M92!)=&5R871O<CX-"G-T<G5C="!L97-S
M7V-O;7!?;W9E<E]I=&5R871O<G,@.B!S=&0Z.F)I;F%R>5]F=6YC=&EO;CQ)
M=&5R871O<BQ)=&5R871O<BQB;V]L/@T*>PT*(" @(&)O;VP@;W!E<F%T;W(H
M*2@@271E<F%T;W(@8V]N<W0F(&ET,2P_at_271E<F%T;W(@8V]N<W0F(&ET,B I
M(&-O;G-T#0H@(" @>PT*(" @(" @("!R971U<FX@*FET,2 \("II=#([#0H@
M(" @?0T*?3L-"@T*?2 O+R!N86UE<W!A8V4_at_9&%T86EL#0H*=&5M<&QA=&4@
M/'1Y<&5N86UE($9O<G=A<F1)=&5R/@IS=&0Z.G!A:7(\1F]R=V%R9$ET97(L
M1F]R=V%R9$ET97(^"FUI;FUA>%]E;&5M96YT*$9O<G=A<F1)=&5R(&9I<G-T
M+"!&;W)W87)D271E<B!L87-T*0I[#0H@(" @<F5T=7)N(&1E=&%I;#HZ8F%S
M:6-?;6EN;6%X7V5L96UE;G0H(&9I<G-T+"!L87-T+"!D971A:6PZ.FQE<W-?
M8V]M<%]O=F5R7VET97)A=&]R<SQ&;W)W87)D271E<CXH*2 I.PT*?0H*=&5M
M<&QA=&4@/'1Y<&5N86UE($9O<G=A<F1)=&5R+"!T>7!E;F%M92!":6YA<GE0
M<F5D:6-A=&4^"G-T9#HZ<&%I<CQ&;W)W87)D271E<BQ&;W)W87)D271E<CX*
M;6EN;6%X7V5L96UE;G0H($9O<G=A<F1)=&5R(&9I<G-T+"!&;W)W87)D271E
M<B!L87-T+"!":6YA<GE0<F5D:6-A=&4_at_8V]M<" I"GL-"B @("!D971A:6PZ
M.F)I;F%R>5]P<F5D:6-A=&5?;W9E<E]I=&5R871O<G,\1F]R=V%R9$ET97(L
M0FEN87)Y4')E9&EC871E/B!P*"!C;VUP("D[#0H-"B @("!R971U<FX_at_9&5T
M86EL.CIB87-I8U]M:6YM87A?96QE;65N="@@9FER<W0L(&QA<W0L(' @*3L-
M"GT-"@T*?0H*+RH_at_4%)/4$]3140_at_0D]/4U0_at_15A414Y324].4PH@*B!);B!T
M:&4_at_9&5S8W)I<'1I;VX_at_8F5L;W<L(%MR9FER<W0L<FQA<W0I(&1E;F]T97,@
M=&AE(')E=F5R<V5D(')A;F=E"B J(&]F(%MF:7)S="QL87-T*2X_at_179E;B!T
M:&]U9V@@=&AE(&ET97)A=&]R('1Y<&4@;V8_at_9FER<W0_at_86YD(&QA<W0@;6%Y
M"B J(&)E(&]N;'D_at_82!&;W)W87)D($ET97)A=&]R+"!I="!I<R!P;W-S:6)L
M92!T;R!E>'!L86EN('1H92!S96UA;G1I8W,*("H_at_8GD@87-S=6UI;F<@=&AA
M="!I="!I<R!A($)I9&ER96-T:6]N86P_at_271E<F%T;W(N($EN('1H92!S97%U
M96PL"B J(')E=F5R<V4H1F]R=V%R9$ET97)A=&]R)BD@<F5T=7)N<R!T:&4@
M<F5V97)S95]I=&5R871O<B!A9&%P=&]R+@H@*B!4:&ES(&ES(&YO="!H;W<@
M=&AE(&9U;F-T:6]N<R!W;W5L9"!B92!I;7!L96UE;G1E9"$*("H*("H_at_9FER
M<W1?;6EN7V5L96UE;G0H9FER<W0L(&QA<W0I"B J($5F9F5C=#H@<W1D.CIM
M:6Y?96QE;65N="AF:7)S="P@;&%S="D["B J(" @(" @(" @(" @(" @(" @
M(" *("H_at_9FER<W1?;6EN7V5L96UE;G0H9FER<W0L(&QA<W0L(&-O;7 I"B J
M($5F9F5C=#H@<W1D.CIM:6Y?96QE;65N="AF:7)S="P@;&%S="P_at_8V]M<"D[
M"B J"B J(&QA<W1?;6EN7V5L96UE;G0H9FER<W0L(&QA<W0I"B J($5F9F5C
M=#H@<F5V97)S92@@<W1D.CIM:6Y?96QE;65N="AR979E<G-E*&QA<W0I+"!R
M979E<G-E*&9I<G-T*2D@*3L*("H@(" @(" @(" @(" @(" @(" @( H@*B!L
M87-T7VUI;E]E;&5M96YT*&9I<G-T+"!L87-T+"!C;VUP*0H@*B!%9F9E8W0Z
M(')E=F5R<V4H('-T9#HZ;6EN7V5L96UE;G0H<F5V97)S92AL87-T*2P@<F5V
M97)S92AF:7)S="DL(&-O;7 I("D["B J"B J(&9I<G-T7VUA>%]E;&5M96YT
M*&9I<G-T+"!L87-T*0H@*B!%9F9E8W0Z('-T9#HZ;6%X7V5L96UE;G0H9FER
M<W0L(&QA<W0I.PH@*B @(" @(" @(" @(" @(" @(" @"B J(&9I<G-T7VUA
M>%]E;&5M96YT*&9I<G-T+"!L87-T+"!C;VUP*0H@*B!%9F9E8W0Z(&UA>%]E
M;&5M96YT*&9I<G-T+"!L87-T*3L*("H*("H@;&%S=%]M87A?96QE;65N="AF
M:7)S="P@;&%S="D*("H_at_169F96-T.B!R979E<G-E*"!S=&0Z.FUA>%]E;&5M
M96YT*')E=F5R<V4H;&%S="DL(')E=F5R<V4H9FER<W0I*2 I.PH@*B @(" @
M(" @(" @(" @(" @(" @"B J(&QA<W1?;6%X7V5L96UE;G0H9FER<W0L(&QA
M<W0L(&-O;7 I"B J($5F9F5C=#H@<F5V97)S92@@<W1D.CIM87A?96QE;65N
M="AR979E<G-E*&QA<W0I+"!R979E<G-E*&9I<G-T*2P_at_8V]M<"D@*3L*("H*
M("H_at_9FER<W1?;6EN7V9I<G-T7VUA>%]E;&5M96YT*&9I<G-T+"!L87-T*0H@
M*B!%9F9E8W0Z('-T9#HZ;6%K95]P86ER*"!F:7)S=%]M:6Y?96QE;65N="AF
M:7)S="P@;&%S="DL"B J(" @(" @(" @(" @(" @(" @(" @(" @(&9I<G-T
M7VUA>%]E;&5M96YT*&9I<G-T+"!L87-T*2 I.PH@*B @(" @(" @(" @(" @
M(" @(" @"B J(&9I<G-T7VUI;E]F:7)S=%]M87A?96QE;65N="AF:7)S="P@
M;&%S="P_at_8V]M<"D*("H_at_169F96-T.B!S=&0Z.FUA:V5?<&%I<B@@9FER<W1?
M;6EN7V5L96UE;G0H9FER<W0L(&QA<W0L(&-O;7 I+ H@*B @(" @(" @(" @
M(" @(" @(" @(" @("!F:7)S=%]M87A?96QE;65N="AF:7)S="P@;&%S="P@
M8V]M<"D@*3L*("H*("H_at_9FER<W1?;6EN7VQA<W1?;6%X7V5L96UE;G0H9FER
M<W0L(&QA<W0I"B J($5F9F5C=#H@<W1D.CIM86ME7W!A:7(H(&9I<G-T7VUI
M;E]E;&5M96YT*&9I<G-T+"!L87-T*2P*("H@(" @(" @(" @(" @(" @(" @
M(" @(" @;&%S=%]M87A?96QE;65N="AF:7)S="P@;&%S="D@*3L*("H@(" @
M(" @(" @(" @(" @(" @( H@*B!F:7)S=%]M:6Y?;&%S=%]M87A?96QE;65N
M="AF:7)S="P@;&%S="P_at_8V]M<"D*("H_at_169F96-T.B!S=&0Z.FUA:V5?<&%I
M<B@@9FER<W1?;6EN7V5L96UE;G0H9FER<W0L(&QA<W0L(&-O;7 I+ H@*B @
M(" @(" @(" @(" @(" @(" @(" @("!L87-T7VUA>%]E;&5M96YT*&9I<G-T
M+"!L87-T+"!C;VUP*2 I.PH@*@H@*B!L87-T7VUI;E]F:7)S=%]M87A?96QE
M;65N="AF:7)S="P@;&%S="D*("H_at_169F96-T.B!S=&0Z.FUA:V5?<&%I<B@@
M;&%S=%]M:6Y?96QE;65N="AF:7)S="P@;&%S="DL"B J(" @(" @(" @(" @
M(" @(" @(" @(" @(&9I<G-T7VUA>%]E;&5M96YT*&9I<G-T+"!L87-T*2 I
M.PH@*B @(" @(" @(" @(" @(" @(" @"B J(&QA<W1?;6EN7V9I<G-T7VUA
M>%]E;&5M96YT*&9I<G-T+"!L87-T+"!C;VUP*0H@*B!%9F9E8W0Z('-T9#HZ
M;6%K95]P86ER*"!L87-T7VUI;E]E;&5M96YT*&9I<G-T+"!L87-T+"!C;VUP
M*2P*("H@(" @(" @(" @(" @(" @(" @(" @(" @9FER<W1?;6%X7V5L96UE
M;G0H9FER<W0L(&QA<W0L(&-O;7 I("D["B J"B J(&QA<W1?;6EN7VQA<W1?
M;6%X7V5L96UE;G0H9FER<W0L(&QA<W0I"B J($5F9F5C=#H@<W1D.CIM86ME
M7W!A:7(H(&QA<W1?;6EN7V5L96UE;G0H9FER<W0L(&QA<W0I+ H@*B @(" @
M(" @(" @(" @(" @(" @(" @("!L87-T7VUA>%]E;&5M96YT*&9I<G-T+"!L
M87-T*2 I.PH@*B @(" @(" @(" @(" @(" @(" @"B J(&QA<W1?;6EN7VQA
M<W1?;6%X7V5L96UE;G0H9FER<W0L(&QA<W0L(&-O;7 I"B J($5F9F5C=#H@
M<W1D.CIM86ME7W!A:7(H(&QA<W1?;6EN7V5L96UE;G0H9FER<W0L(&QA<W0L
M(&-O;7 I+ H@*B @(" @(" @(" @(" @(" @(" @(" @("!L87-T7VUA>%]E
M;&5M96YT*&9I<G-T+"!L87-T+"!C;VUP*2 I.PH@*B\*"FYA;65S<&%C92!B
M;V]S="!["@T*;F%M97-P86-E(&1E=&%I;"![#0H-"G1E;7!L871E(#QT>7!E
M;F%M92!#;VUP3W)D97(L('1Y<&5N86UE($9O<G=A<F1)=&5R+"!T>7!E;F%M
M92!":6YA<GE0<F5D:6-A=&4^#0I&;W)W87)D271E<@T*8F%S:6-?96QE;65N
M=%]S96%R8V_at_H1F]R=V%R9$ET97(@9FER<W0L($9O<G=A<F1)=&5R(&QA<W0L
M($)I;F%R>5!R961I8V%T92!C;VUP+"!#;VUP3W)D97(J(&1U;6UY(#T@," I
M#0I[#0H@(" @:68H(&9I<G-T(#T](&QA<W0@*0T*(" @(" @("!R971U<FX@
M;&%S=#L-"@T*(" @($9O<G=A<F1)=&5R(')E<W5L=" ](&9I<G-T.PT*(" @
M('=H:6QE*" K*V9I<G-T("$](&QA<W0@*0T*(" @(" @("!I9B@@8V]M<"@@
M0V]M<$]R9&5R.CIS96QE8W0Q<W0H(&9I<G-T+"!R97-U;'0@*2P_at_0V]M<$]R
M9&5R.CIS96QE8W0R;F0H(&9I<G-T+"!R97-U;'0@*2 I("D-"B @(" @(" @
M(" @(')E<W5L=" ](&9I<G-T.PT*#0H@(" @<F5T=7)N(')E<W5L=#L-"GT-
M"@T*?2 O+R!N86UE<W!A8V4_at_9&5T86EL#0H*=&5M<&QA=&4@/'1Y<&5N86UE
M($9O<G=A<F1)=&5R/@I&;W)W87)D271E<@IF:7)S=%]M:6Y?96QE;65N="A&
M;W)W87)D271E<B!F:7)S="P_at_1F]R=V%R9$ET97(@;&%S="D*>PH@(" @<F5T
M=7)N(&1E=&%I;#HZ8F%S:6-?96QE;65N=%]S96%R8V@\9&5T86EL.CID:7)E
M8W1?;W)D97(^*"!F:7)S="P@;&%S="P_at_9&5T86EL.CIL97-S7V-O;7!?;W9E
M<E]I=&5R871O<G,\1F]R=V%R9$ET97(^*"D@*3L*?0H*=&5M<&QA=&4@/'1Y
M<&5N86UE($9O<G=A<F1)=&5R+"!T>7!E;F%M92!":6YA<GE0<F5D:6-A=&4^
M"D9O<G=A<F1)=&5R"F9I<G-T7VUI;E]E;&5M96YT*"!&;W)W87)D271E<B!F
M:7)S="P_at_1F]R=V%R9$ET97(@;&%S="P_at_0FEN87)Y4')E9&EC871E(&-O;7 @
M*0I[#0H@(" @9&5T86EL.CIB:6YA<GE?<')E9&EC871E7V]V97)?:71E<F%T
M;W)S/$9O<G=A<F1)=&5R+$)I;F%R>5!R961I8V%T93X@<"@@8V]M<" I.PT*
M"B @("!R971U<FX_at_9&5T86EL.CIB87-I8U]E;&5M96YT7W-E87)C:#QD971A
M:6PZ.F1I<F5C=%]O<F1E<CXH(&9I<G-T+"!L87-T+"!P("D[#0I]"@IT96UP
M;&%T92 \='EP96YA;64_at_1F]R=V%R9$ET97(^"D9O<G=A<F1)=&5R"FQA<W1?
M;6EN7V5L96UE;G0H1F]R=V%R9$ET97(@9FER<W0L($9O<G=A<F1)=&5R(&QA
M<W0I"GL-"B @("!R971U<FX_at_9&5T86EL.CIB87-I8U]E;&5M96YT7W-E87)C
M:#QD971A:6PZ.G)E=F5R<V5?;W)D97(^*"!F:7)S="P@;&%S="P@#0H@(" @
M(" @(" @("!S=&0Z.FYO=#(H(&1E=&%I;#HZ;&5S<U]C;VUP7V]V97)?:71E
M<F%T;W)S/$9O<G=A<F1)=&5R/B_at_I("D@*3L-"GT*"G1E;7!L871E(#QT>7!E
M;F%M92!&;W)W87)D271E<BP@='EP96YA;64_at_0FEN87)Y4')E9&EC871E/@I&
M;W)W87)D271E<@IL87-T7VUI;E]E;&5M96YT*$9O<G=A<F1)=&5R(&9I<G-T
M+"!&;W)W87)D271E<B!L87-T+ H@(" @(" @(" @(" @(" @($)I;F%R>5!R
M961I8V%T92!C;VUP*0I[#0H@(" @9&5T86EL.CIB:6YA<GE?<')E9&EC871E
M7V]V97)?:71E<F%T;W)S/$9O<G=A<F1)=&5R+$)I;F%R>5!R961I8V%T93X@
M<"@@8V]M<" I.PT*#0H@(" @<F5T=7)N(&1E=&%I;#HZ8F%S:6-?96QE;65N
M=%]S96%R8V@\9&5T86EL.CIR979E<G-E7V]R9&5R/B@@9FER<W0L(&QA<W0L
M('-T9#HZ;F]T,B@@<" I("D[#0I]"@IT96UP;&%T92 \='EP96YA;64_at_1F]R
M=V%R9$ET97(^"D9O<G=A<F1)=&5R"F9I<G-T7VUA>%]E;&5M96YT*$9O<G=A
M<F1)=&5R(&9I<G-T+"!&;W)W87)D271E<B!L87-T*0I["B @("!R971U<FX@
M9&5T86EL.CIB87-I8U]E;&5M96YT7W-E87)C:#QD971A:6PZ.G)E=F5R<V5?
M;W)D97(^*"!F:7)S="P@;&%S="P_at_9&5T86EL.CIL97-S7V-O;7!?;W9E<E]I
M=&5R871O<G,\1F]R=V%R9$ET97(^*"D@*3L-"GT*"G1E;7!L871E(#QT>7!E
M;F%M92!&;W)W87)D271E<BP@='EP96YA;64_at_0FEN87)Y4')E9&EC871E/@I&
M;W)W87)D271E<@IF:7)S=%]M87A?96QE;65N="A&;W)W87)D271E<B!F:7)S
M="P_at_1F]R=V%R9$ET97(@;&%S="P_at_0FEN87)Y4')E9&EC871E(&-O;7 I"GL-
M"B @("!D971A:6PZ.F)I;F%R>5]P<F5D:6-A=&5?;W9E<E]I=&5R871O<G,\
M1F]R=V%R9$ET97(L0FEN87)Y4')E9&EC871E/B!P*"!C;VUP("D[#0H-"B @
M("!R971U<FX_at_9&5T86EL.CIB87-I8U]E;&5M96YT7W-E87)C:#QD971A:6PZ
M.G)E=F5R<V5?;W)D97(^*"!F:7)S="P@;&%S="P@<" I.PT*?0H-"G1E;7!L
M871E(#QT>7!E;F%M92!&;W)W87)D271E<CX*1F]R=V%R9$ET97(*;&%S=%]M
M87A?96QE;65N="A&;W)W87)D271E<B!F:7)S="P_at_1F]R=V%R9$ET97(@;&%S
M="D*>PT*(" @(')E='5R;B!D971A:6PZ.F)A<VEC7V5L96UE;G1?<V5A<F-H
M/&1E=&%I;#HZ9&ER96-T7V]R9&5R/B@@9FER<W0L(&QA<W0L( T*(" @(" @
M("!S=&0Z.FYO=#(H(&1E=&%I;#HZ;&5S<U]C;VUP7V]V97)?:71E<F%T;W)S
M/$9O<G=A<F1)=&5R/B_at_I("D@*3L-"GT*"G1E;7!L871E(#QT>7!E;F%M92!&
M;W)W87)D271E<BP@='EP96YA;64_at_0FEN87)Y4')E9&EC871E/@I&;W)W87)D
M271E<@IL87-T7VUA>%]E;&5M96YT*$9O<G=A<F1)=&5R(&9I<G-T+"!&;W)W
M87)D271E<B!L87-T+ H@(" @(" @(" @(" @(" @($)I;F%R>5!R961I8V%T
M92!C;VUP*0I[#0H@(" @9&5T86EL.CIB:6YA<GE?<')E9&EC871E7V]V97)?
M:71E<F%T;W)S/$9O<G=A<F1)=&5R+$)I;F%R>5!R961I8V%T93X@<"@@8V]M
M<" I.PT*#0H@(" @<F5T=7)N(&1E=&%I;#HZ8F%S:6-?96QE;65N=%]S96%R
M8V@\9&5T86EL.CID:7)E8W1?;W)D97(^*"!F:7)S="P@;&%S="P@<W1D.CIN
M;W0R*"!P("D@*3L-"GT*"G1E;7!L871E(#QT>7!E;F%M92!&;W)W87)D271E
M<CX*:6YL:6YE('-T9#HZ<&%I<CQ&;W)W87)D271E<BQ&;W)W87)D271E<CX*
M9FER<W1?;6EN7V9I<G-T7VUA>%]E;&5M96YT*$9O<G=A<F1)=&5R(&9I<G-T
M+"!&;W)W87)D271E<B!L87-T*0I["B @("!R971U<FX@;6EN;6%X7V5L96UE
M;G0H9FER<W0L(&QA<W0I.PI]"@IT96UP;&%T92 \='EP96YA;64_at_1F]R=V%R
M9$ET97(L('1Y<&5N86UE($-O;7!A<F4^"FEN;&EN92!S=&0Z.G!A:7(\1F]R
M=V%R9$ET97(L1F]R=V%R9$ET97(^"F9I<G-T7VUI;E]F:7)S=%]M87A?96QE
M;65N="A&;W)W87)D271E<B!F:7)S="P_at_1F]R=V%R9$ET97(@;&%S="P_at_0V]M
M<&%R92!C;VUP*0I["B @("!R971U<FX@;6EN;6%X7V5L96UE;G0H9FER<W0L
M(&QA<W0L(&-O;7 I.PI]"@IT96UP;&%T92 \='EP96YA;64_at_1F]R=V%R9$ET
M97(^"G-T9#HZ<&%I<CQ&;W)W87)D271E<BQ&;W)W87)D271E<CX*9FER<W1?
M;6EN7VQA<W1?;6%X7V5L96UE;G0H1F]R=V%R9$ET97(@9FER<W0L($9O<G=A
M<F1)=&5R(&QA<W0I"GL*(" @("\O(&EF(&5M<'1Y(&EN<'5T(')A;F=E"B @
M("!I9B H9FER<W0@/3T@;&%S="D@<F5T=7)N('-T9#HZ;6%K95]P86ER*&QA
M<W0L;&%S="D["B @(" O+R!O=&AE<G=I<V4@='=O('1E;7 @=F%R:6%B;&5S
M(&AO;&0@=&AE(')E<W5L= H@(" @1F]R=V%R9$ET97(@;6EN7W)E<W5L=" ]
M(&9I<G-T.PH@(" @1F]R=V%R9$ET97(@;6%X7W)E<W5L=" ](&9I<G-T.PH@
M(" @+R\@:68@;VYL>2!O;F4_at_96QE;65N= H@(" @#0H@(" @#0H@(" @1F]R
M=V%R9$ET97(@<V5C;VYD(#T@*RMF:7)S=#L*(" @(&EF("AS96-O;F0@/3T@
M;&%S="D@<F5T=7)N('-T9#HZ;6%K95]P86ER*&UI;E]R97-U;'0L(&UA>%]R
M97-U;'0I.PT*#0H*(" @("\O('1R96%T(&9I<G-T('!A:7(@<V5P87)A=&5L
M>2 H;VYL>2!O;F4_at_8V]M<&%R:7-O;B!F;W(@9FER<W0@='=O(&5L96UE;G1S
M*0H@(" @:68@*"IS96-O;F0@/" J;6EN7W)E<W5L="D@;6EN7W)E<W5L=" ]
M('-E8V]N9#L*(" @(&5L<V4@(" @(" @(" @(" @(" @(" @(" @(&UA>%]R
M97-U;'0@/2!S96-O;F0[#0H-"@T*#0H*(" @("\O('1R96%T(&5L96UE;G1S
M(&)Y('!A:7)S"B @("!F:7)S=" ]("LK<V5C;VYD.R!I9B H9FER<W0@(3T@
M;&%S="D@*RMS96-O;F0["B @("!W:&EL92 H<V5C;VYD("$](&QA<W0I('L*
M(" @(" @("!I9B H(2_at_J<V5C;VYD(#P@*F9I<G-T*2D@>PH@(" @(" @(" @
M("!I9B H*F9I<G-T(#P@*FUI;E]R97-U;'0I(" @(" @;6EN7W)E<W5L=" ]
M(&9I<G-T.PH@(" @(" @(" @("!I9B H(2_at_J<V5C;VYD(#P@*FUA>%]R97-U
M;'0I*2 @;6%X7W)E<W5L=" ]('-E8V]N9#L*(" @(" @("!](&5L<V4@>PH@
M(" @(" @(" @("!I9B H*G-E8V]N9" \("IM:6Y?<F5S=6QT*2 @(" @;6EN
M7W)E<W5L=" ]('-E8V]N9#L*(" @(" @(" @(" @:68@*"$H*F9I<G-T(#P@
M*FUA>%]R97-U;'0I*2 @(&UA>%]R97-U;'0@/2!F:7)S=#L*(" @(" @("!]
M"B @(" @(" @9FER<W0@/2 K*W-E8V]N9#L@:68@*&9I<G-T("$](&QA<W0I
M("LK<V5C;VYD.PH@(" @?0H@(" @+R\@:68@=&AE(&YU;6)E<B!O9B!E;&5M
M96YT<R!I<R!O9&0*(" @(&EF("AF:7)S=" A/2!L87-T*2!["B @(" @(" @
M:68@*"IF:7)S=" \("IM:6Y?<F5S=6QT*2 @(" @(" @(&UI;E]R97-U;'0@
M/2!F:7)S=#L*(" @(" @("!E;'-E(&EF("@A*"IF:7)S=" \("IM87A?<F5S
M=6QT*2D@;6%X7W)E<W5L=" ](&9I<G-T.PH@(" @?0H@(" @<F5T=7)N('-T
M9#HZ;6%K95]P86ER*&UI;E]R97-U;'0L(&UA>%]R97-U;'0I.PI]"@IT96UP
M;&%T92 \='EP96YA;64_at_1F]R=V%R9$ET97(L('1Y<&5N86UE($)I;F%R>5!R
M961I8V%T93X*<W1D.CIP86ER/$9O<G=A<F1)=&5R+$9O<G=A<F1)=&5R/@IF
M:7)S=%]M:6Y?;&%S=%]M87A?96QE;65N="A&;W)W87)D271E<B!F:7)S="P@
M1F]R=V%R9$ET97(@;&%S="P*(" @(" @(" @(" @(" @(" @(" @(" @(" @
M0FEN87)Y4')E9&EC871E(&-O;7 I"GL*(" @("\O(&EF(&5M<'1Y(&EN<'5T
M(')A;F=E"B @("!I9B H9FER<W0@/3T@;&%S="D@<F5T=7)N('-T9#HZ;6%K
M95]P86ER*&QA<W0L;&%S="D["B @(" O+R!O=&AE<G=I<V4@='=O('1E;7 @
M=F%R:6%B;&5S(&AO;&0@=&AE(')E<W5L= H@(" @1F]R=V%R9$ET97(@;6EN
M7W)E<W5L=" ](&9I<G-T.PH@(" @1F]R=V%R9$ET97(@;6%X7W)E<W5L=" ]
M(&9I<G-T.PH@(" @+R\@:68@;VYL>2!O;F4_at_96QE;65N= H@(" @1F]R=V%R
M9$ET97(@<V5C;VYD(#T@*RMF:7)S=#L*(" @(&EF("AS96-O;F0@/3T@;&%S
M="D@<F5T=7)N('-T9#HZ;6%K95]P86ER*&UI;E]R97-U;'0L(&UA>%]R97-U
M;'0I.PH@(" @+R\@=')E870_at_9FER<W0@<&%I<B!S97!A<F%T96QY("AO;FQY
M(&]N92!C;VUP87)I<V]N(&9O<B!F:7)S="!T=V\@96QE;65N=',I"B @("!I
M9B H8V]M<"@J<V5C;VYD+" J;6EN7W)E<W5L="DI(&UI;E]R97-U;'0@/2!S
M96-O;F0["B @("!E;'-E(" @(" @(" @(" @(" @(" @(" @(" @(" @("!M
M87A?<F5S=6QT(#T@<V5C;VYD.PH@(" @+R\@=')E870_at_96QE;65N=',@8GD@
M<&%I<G,*(" @(&9I<G-T(#T@*RMS96-O;F0[(&EF("AF:7)S=" A/2!L87-T
M*2 K*W-E8V]N9#L*(" @('=H:6QE("AS96-O;F0@(3T@;&%S="D@>PH@(" @
M(" @(&EF("@A8V]M<"@J<V5C;VYD+" J9FER<W0I*2!["B @(" @(" @(" @
M(&EF("AC;VUP*"IF:7)S="P@*FUI;E]R97-U;'0I*2 @(&UI;E]R97-U;'0@
M/2!F:7)S=#L*(" @(" @(" @(" @:68@*"%C;VUP*"IS96-O;F0L("IM87A?
M<F5S=6QT*2D@;6%X7W)E<W5L=" ]('-E8V]N9#L*(" @(" @("!](&5L<V4@
M>PH@(" @(" @(" @("!I9B H8V]M<"@J<V5C;VYD+" J;6EN7W)E<W5L="DI
M("!M:6Y?<F5S=6QT(#T@<V5C;VYD.PH@(" @(" @(" @("!I9B H(6-O;7 H
M*F9I<G-T+" J;6%X7W)E<W5L="DI(" @(" @;6%X7W)E<W5L=" ](&9I<G-T
M.PH@(" @(" @('T*(" @(" @("!F:7)S=" ]("LK<V5C;VYD.R!I9B H9FER
M<W0@(3T@;&%S="D@*RMS96-O;F0["B @("!]"B @(" O+R!I9B!T:&4@;G5M
M8F5R(&]F(&5L96UE;G1S(&ES(&]D9 H@(" @:68@*&9I<G-T("$](&QA<W0I
M('L*(" @(" @("!I9B H8V]M<"@J9FER<W0L("IM:6Y?<F5S=6QT*2D@(" @
M(" @;6EN7W)E<W5L=" ](&9I<G-T.PH@(" @(" @(&5L<V4@:68@*"%C;VUP
M*"IF:7)S="P@*FUA>%]R97-U;'0I*2!M87A?<F5S=6QT(#T_at_9FER<W0["B @
M("!]"B @("!R971U<FX@<W1D.CIM86ME7W!A:7(H;6EN7W)E<W5L="P@;6%X
M7W)E<W5L="D["GT*"G1E;7!L871E(#QT>7!E;F%M92!&;W)W87)D271E<CX*
M<W1D.CIP86ER/$9O<G=A<F1)=&5R+$9O<G=A<F1)=&5R/@IL87-T7VUI;E]F
M:7)S=%]M87A?96QE;65N="A&;W)W87)D271E<B!F:7)S="P_at_1F]R=V%R9$ET
M97(@;&%S="D*>PH@(" @+R\@:68_at_96UP='D@:6YP=70@<F%N9V4*(" @(&EF
M("AF:7)S=" ]/2!L87-T*2!R971U<FX@<W1D.CIM86ME7W!A:7(H;&%S="QL
M87-T*3L*(" @("\O(&]T:&5R=VES92!T=V\@=&5M<"!V87)I86)L97,@:&]L
M9"!T:&4@<F5S=6QT"B @("!&;W)W87)D271E<B!M:6Y?<F5S=6QT(#T_at_9FER
M<W0["B @("!&;W)W87)D271E<B!M87A?<F5S=6QT(#T_at_9FER<W0["B @(" O
M+R!I9B!O;FQY(&]N92!E;&5M96YT"B @("!&;W)W87)D271E<B!S96-O;F0@
M/2 K*V9I<G-T.PH@(" @:68@*'-E8V]N9" ]/2!L87-T*2!R971U<FX@<W1D
M.CIM86ME7W!A:7(H;6EN7W)E<W5L="P@;6%X7W)E<W5L="D["B @(" O+R!T
M<F5A="!F:7)S="!P86ER('-E<&%R871E;'D@*&]N;'D@;VYE(&-O;7!A<FES
M;VX_at_9F]R(&9I<G-T('1W;R!E;&5M96YT<RD*(" @(&EF("@J;6%X7W)E<W5L
M=" \("IS96-O;F0I(&UA>%]R97-U;'0@/2!S96-O;F0["B @("!E;'-E(" @
M(" @(" @(" @(" @(" @(" @("!M:6Y?<F5S=6QT(#T@<V5C;VYD.PH@(" @
M+R\@=')E870_at_96QE;65N=',@8GD@<&%I<G,*(" @(&9I<G-T(#T@*RMS96-O
M;F0[(&EF("AF:7)S=" A/2!L87-T*2 K*W-E8V]N9#L*(" @('=H:6QE("AS
M96-O;F0@(3T@;&%S="D@('L*(" @(" @("!I9B H*F9I<G-T(#P@*G-E8V]N
M9"D@>PH@(" @(" @(" @("!I9B H(2_at_J;6EN7W)E<W5L=" \("IF:7)S="DI
M(" @;6EN7W)E<W5L=" ](&9I<G-T.PH@(" @(" @(" @("!I9B H*FUA>%]R
M97-U;'0@/" J<V5C;VYD*2 @(" @;6%X7W)E<W5L=" ]('-E8V]N9#L*(" @
M(" @("!](&5L<V4@>PH@(" @(" @(" @("!I9B H(2_at_J;6EN7W)E<W5L=" \
M("IS96-O;F0I*2 @;6EN7W)E<W5L=" ]('-E8V]N9#L*(" @(" @(" @(" @
M:68@*"IM87A?<F5S=6QT(#P@*F9I<G-T*2 @(" @(&UA>%]R97-U;'0@/2!F
M:7)S=#L*(" @(" @("!]"B @(" @(" @9FER<W0@/2 K*W-E8V]N9#L@:68@
M*&9I<G-T("$](&QA<W0I("LK<V5C;VYD.PH@(" @?0H@(" @+R\@:68@=&AE
M(&YU;6)E<B!O9B!E;&5M96YT<R!I<R!O9&0L('1R96%T(&QA<W0_at_96QE;65N
M= H@(" @:68@*&9I<G-T("$](&QA<W0I('L*(" @(" @("!I9B H(2_at_J;6EN
M7W)E<W5L=" \("IF:7)S="DI(" @(&UI;E]R97-U;'0@/2!F:7)S=#L*(" @
M(" @("!E;'-E(&EF("@J;6%X7W)E<W5L=" \("IF:7)S="D@(&UA>%]R97-U
M;'0@/2!F:7)S=#L*(" @('T*(" @(')E='5R;B!S=&0Z.FUA:V5?<&%I<BAM
M:6Y?<F5S=6QT+"!M87A?<F5S=6QT*3L*?0H*=&5M<&QA=&4@/'1Y<&5N86UE
M($9O<G=A<F1)=&5R+"!T>7!E;F%M92!":6YA<GE0<F5D:6-A=&4^"G-T9#HZ
M<&%I<CQ&;W)W87)D271E<BQ&;W)W87)D271E<CX*;&%S=%]M:6Y?9FER<W1?
M;6%X7V5L96UE;G0H1F]R=V%R9$ET97(@9FER<W0L($9O<G=A<F1)=&5R(&QA
M<W0L"B @(" @(" @(" @(" @(" @(" @(" @(" @($)I;F%R>5!R961I8V%T
M92!C;VUP*0I["B @(" O+R!I9B!E;7!T>2!I;G!U="!R86YG90H@(" @:68@
M*&9I<G-T(#T](&QA<W0I(')E='5R;B!S=&0Z.FUA:V5?<&%I<BAL87-T+&QA
M<W0I.PH@(" @+R\@;W1H97)W:7-E('1W;R!T96UP('9A<FEA8FQE<R!H;VQD
M('1H92!R97-U;'0*(" @($9O<G=A<F1)=&5R(&UI;E]R97-U;'0@/2!F:7)S
M=#L*(" @($9O<G=A<F1)=&5R(&UA>%]R97-U;'0@/2!F:7)S=#L*(" @("\O
M(&EF(&]N;'D@;VYE(&5L96UE;G0*(" @($9O<G=A<F1)=&5R('-E8V]N9" ]
M("LK9FER<W0["B @("!I9B H<V5C;VYD(#T](&QA<W0I(')E='5R;B!S=&0Z
M.FUA:V5?<&%I<BAM:6Y?<F5S=6QT+"!M87A?<F5S=6QT*3L*(" @("\O('1R
M96%T(&9I<G-T('!A:7(@<V5P87)A=&5L>2 H;VYL>2!O;F4_at_8V]M<&%R:7-O
M;B!F;W(@9FER<W0@='=O(&5L96UE;G1S*0H@(" @:68@*&-O;7 H*FUA>%]R
M97-U;'0L("IS96-O;F0I*2!M87A?<F5S=6QT(#T@<V5C;VYD.PH@(" @96QS
M92 @(" @(" @(" @(" @(" @(" @(" @(" @("!M:6Y?<F5S=6QT(#T@<V5C
M;VYD.PH@(" @+R\@=')E870_at_96QE;65N=',@8GD@<&%I<G,*(" @(&9I<G-T
M(#T@*RMS96-O;F0[(&EF("AF:7)S=" A/2!L87-T*2 K*W-E8V]N9#L*(" @
M('=H:6QE("AS96-O;F0@(3T@;&%S="D@('L*(" @(" @("!I9B H8V]M<"@J
M9FER<W0L("IS96-O;F0I*2!["B @(" @(" @(" @(&EF("@A8V]M<"@J;6EN
M7W)E<W5L="P@*F9I<G-T*2D@("!M:6Y?<F5S=6QT(#T_at_9FER<W0["B @(" @
M(" @(" @(&EF("AC;VUP*"IM87A?<F5S=6QT+" J<V5C;VYD*2D@("!M87A?
M<F5S=6QT(#T@<V5C;VYD.PH@(" @(" @('T_at_96QS92!["B @(" @(" @(" @
M(&EF("@A8V]M<"@J;6EN7W)E<W5L="P@*G-E8V]N9"DI(&UI;E]R97-U;'0@
M/2!S96-O;F0["B @(" @(" @(" @(&EF("AC;VUP*"IM87A?<F5S=6QT+" J
M9FER<W0I*2 @(&UA>%]R97-U;'0@/2!F:7)S=#L*(" @(" @("!]"B @(" @
M(" @9FER<W0@/2 K*W-E8V]N9#L@:68@*&9I<G-T("$](&QA<W0I("LK<V5C
M;VYD.PH@(" @?0H@(" @+R\@:68@=&AE(&YU;6)E<B!O9B!E;&5M96YT<R!I
M<R!O9&0L('1R96%T(&QA<W0_at_96QE;65N= H@(" @:68@*&9I<G-T("$](&QA
M<W0I('L*(" @(" @("!I9B H(6-O;7 H*FUI;E]R97-U;'0L("IF:7)S="DI
M(" @(&UI;E]R97-U;'0@/2!F:7)S=#L*(" @(" @("!E;'-E(&EF("AC;VUP
M*"IM87A?<F5S=6QT+" J9FER<W0I*2 @;6%X7W)E<W5L=" ](&9I<G-T.PH@
M(" @?0H@(" @<F5T=7)N('-T9#HZ;6%K95]P86ER*&UI;E]R97-U;'0L(&UA
M>%]R97-U;'0I.PI]"@IT96UP;&%T92 \='EP96YA;64_at_1F]R=V%R9$ET97(^
M"G-T9#HZ<&%I<CQ&;W)W87)D271E<BQ&;W)W87)D271E<CX*;&%S=%]M:6Y?
M;&%S=%]M87A?96QE;65N="A&;W)W87)D271E<B!F:7)S="P_at_1F]R=V%R9$ET
M97(@;&%S="D*>PH@(" @:68@*&9I<G-T(#T](&QA<W0I(')E='5R;B!S=&0Z
M.FUA:V5?<&%I<BAL87-T+&QA<W0I.PH@(" @+R\@:68@;VYL>2!O;F4_at_96QE
M;65N= H@(" @1F]R=V%R9$ET97(@;6EN7W)E<W5L=" ](&9I<G-T.PH@(" @
M1F]R=V%R9$ET97(@;6%X7W)E<W5L=" ](&9I<G-T.PH@(" @+R\@;VYE(&5L
M96UE;G0*(" @($9O<G=A<F1)=&5R('-E8V]N9" ](&9I<G-T.R K*W-E8V]N
M9#L*(" @(&EF("AS96-O;F0@/3T@;&%S="D@<F5T=7)N('-T9#HZ;6%K95]P
M86ER*&UI;E]R97-U;'0L;6%X7W)E<W5L="D["B @(" O+R!T<F5A="!F:7)S
M="!P86ER('=I=&@@870@;6]S=" Q(&-O;7!A<FES;VX*(" @($9O<G=A<F1)
M=&5R('!O=&5N=&EA;%]M87A?<F5S=6QT(#T@;&%S=#L*(" @(&EF("@J9FER
M<W0@/" J<V5C;VYD*0H@(" @(" @(&UA>%]R97-U;'0@/2!S96-O;F0["B @
M("!E;'-E"B @(" @(" @;6EN7W)E<W5L=" ]('-E8V]N9"P@<&]T96YT:6%L
M7VUA>%]R97-U;'0@/2!S96-O;F0["B @(" O+R!T:&5N(&5A8V@@96QE;65N
M="!B>2!P86ER<RP@=VET:"!A="!M;W-T(#,@8V]M<&%R:7-O;G,@<&5R('!A
M:7(*(" @(&9I<G-T(#T@*RMS96-O;F0[(&EF("AF:7)S=" A/2!L87-T*2 K
M*W-E8V]N9#L*(" @('=H:6QE("AS96-O;F0@(3T@;&%S="D@>PH@(" @(" @
M(&EF("@H*F9I<G-T(#P@*G-E8V]N9"DI('L*(" @(" @(" @(" @:68@*"$H
M*FUI;E]R97-U;'0@/" J9FER<W0I*0H@(" @(" @(" @(" @(" @;6EN7W)E
M<W5L=" ](&9I<G-T.PH@(" @(" @(" @("!I9B H(2_at_J<V5C;VYD(#P@*FUA
M>%]R97-U;'0I*0H@(" @(" @(" @(" @(" @;6%X7W)E<W5L=" ]('-E8V]N
M9"P@<&]T96YT:6%L7VUA>%]R97-U;'0@/2!L87-T.PH@(" @(" @('T_at_96QS
M92!["B @(" @(" @(" @("\O(&-O=6QD(&)E('1H870@*F9I<G-T(#T]("IS
M96-O;F0*(" @(" @(" @(" @:68@*"$H*FUI;E]R97-U;'0@/" J<V5C;VYD
M*2D*(" @(" @(" @(" @(" @(&UI;E]R97-U;'0@/2!S96-O;F0["B @(" @
M(" @(" @(&EF("@A*"IF:7)S=" \("IM87A?<F5S=6QT*2D*(" @(" @(" @
M(" @(" @(&UA>%]R97-U;'0@/2!F:7)S="P@<&]T96YT:6%L7VUA>%]R97-U
M;'0@/2!S96-O;F0["B @(" @(" @?0H@(" @(" @(&9I<G-T(#T@*RMS96-O
M;F0[(&EF("AF:7)S=" A/2!L87-T*2 K*W-E8V]N9#L*(" @('T*(" @("\O
M(&EF(&]D9"!N=6UB97(@;V8_at_96QE;65N=',L('1R96%T(&QA<W0_at_96QE;65N
M="!W:71H(#(@8V]M<&%R:7-O;G,*(" @(&EF("AF:7)S=" A/2!L87-T*2![
M"B @(" @(" @:68@*"$H*FUI;E]R97-U;'0@/" J9FER<W0I*0H@(" @(" @
M(" @("!M:6Y?<F5S=6QT(#T_at_9FER<W0["B @(" @(" @:68@*"$H*F9I<G-T
M(#P@*FUA>%]R97-U;'0I*0H@(" @(" @(" @("!M87A?<F5S=6QT(#T_at_9FER
M<W0L('!O=&5N=&EA;%]M87A?<F5S=6QT(#T@;&%S=#L*(" @('T*(" @("\O
M(')E<V]L=F4@;6%X7W)E<W5L="!B96EN9R!I;F-O<G)E8W0L('=I=&@@;VYE
M(&5X=')A(&-O;7!A<FES;VX*(" @("\O("AI;B!W:&EC:"!C87-E('!O=&5N
M=&EA;%]M87A?<F5S=6QT(&ES(&YE8V5S<V%R:6QY('1H92!C;W)R96-T(')E
M<W5L="D*(" @(&EF("AP;W1E;G1I86Q?;6%X7W)E<W5L=" A/2!L87-T("8F
M("$H*G!O=&5N=&EA;%]M87A?<F5S=6QT(#P@*FUA>%]R97-U;'0I*0H@(" @
M(" @(&UA>%]R97-U;'0@/2!P;W1E;G1I86Q?;6%X7W)E<W5L=#L*(" @(')E
M='5R;B!S=&0Z.FUA:V5?<&%I<BAM:6Y?<F5S=6QT+&UA>%]R97-U;'0I.PI]
M"@IT96UP;&%T92 \='EP96YA;64_at_1F]R=V%R9$ET97(L('1Y<&5N86UE($)I
M;F%R>5!R961I8V%T93X*<W1D.CIP86ER/$9O<G=A<F1)=&5R+$9O<G=A<F1)
M=&5R/@IL87-T7VUI;E]L87-T7VUA>%]E;&5M96YT*$9O<G=A<F1)=&5R(&9I
M<G-T+"!&;W)W87)D271E<B!L87-T+ H@(" @(" @(" @(" @(" @(" @(" @
M(" @($)I;F%R>5!R961I8V%T92!C;VUP*0I["B @("!I9B H9FER<W0@/3T@
M;&%S="D@<F5T=7)N('-T9#HZ;6%K95]P86ER*&QA<W0L;&%S="D["B @(" O
M+R!I9B!O;FQY(&]N92!E;&5M96YT"B @("!&;W)W87)D271E<B!M:6Y?<F5S
M=6QT(#T_at_9FER<W0["B @("!&;W)W87)D271E<B!M87A?<F5S=6QT(#T_at_9FER
M<W0["B @(" O+R!O;F4_at_96QE;65N= H@(" @1F]R=V%R9$ET97(@<V5C;VYD
M(#T_at_9FER<W0[("LK<V5C;VYD.PH@(" @:68@*'-E8V]N9" ]/2!L87-T*2!R
M971U<FX@<W1D.CIM86ME7W!A:7(H;6EN7W)E<W5L="QM87A?<F5S=6QT*3L*
M(" @("\O('1R96%T(&9I<G-T('!A:7(@=VET:"!A="!M;W-T(#$@8V]M<&%R
M:7-O;@H@(" @1F]R=V%R9$ET97(@<&]T96YT:6%L7VUA>%]R97-U;'0@/2!L
M87-T.PH@(" @:68@*&-O;7 H*F9I<G-T+" J<V5C;VYD*2D*(" @(" @("!M
M87A?<F5S=6QT(#T@<V5C;VYD.PH@(" @96QS90H@(" @(" @(&UI;E]R97-U
M;'0@/2!S96-O;F0L('!O=&5N=&EA;%]M87A?<F5S=6QT(#T@<V5C;VYD.PH@
M(" @+R\@=&AE;B!E86-H(&5L96UE;G0_at_8GD@<&%I<G,L('=I=&@@870@;6]S
M=" S(&-O;7!A<FES;VYS('!E<B!P86ER"B @("!F:7)S=" ]("LK<V5C;VYD
M.R!I9B H9FER<W0@(3T@;&%S="D@*RMS96-O;F0["B @("!W:&EL92 H<V5C
M;VYD("$](&QA<W0I('L*(" @(" @("!I9B H8V]M<"@J9FER<W0L("IS96-O
M;F0I*2!["B @(" @(" @(" @(&EF("@A8V]M<"@J;6EN7W)E<W5L="P@*F9I
M<G-T*2D*(" @(" @(" @(" @(" @(&UI;E]R97-U;'0@/2!F:7)S=#L*(" @
M(" @(" @(" @:68@*"%C;VUP*"IS96-O;F0L("IM87A?<F5S=6QT*2D*(" @
M(" @(" @(" @(" @(&UA>%]R97-U;'0@/2!S96-O;F0L('!O=&5N=&EA;%]M
M87A?<F5S=6QT(#T@;&%S=#L*(" @(" @("!](&5L<V4@>PH@(" @(" @(" @
M(" O+R!C;W5L9"!B92!T:&%T("IF:7)S=" ]/2 J<V5C;VYD"B @(" @(" @
M(" @(&EF("@A8V]M<"@J;6EN7W)E<W5L="P@*G-E8V]N9"DI"B @(" @(" @
M(" @(" @("!M:6Y?<F5S=6QT(#T@<V5C;VYD.PH@(" @(" @(" @("!I9B H
M(6-O;7 H*F9I<G-T+" J;6%X7W)E<W5L="DI"B @(" @(" @(" @(" @("!M
M87A?<F5S=6QT(#T_at_9FER<W0L('!O=&5N=&EA;%]M87A?<F5S=6QT(#T@<V5C
M;VYD.PH@(" @(" @('T*(" @(" @("!F:7)S=" ]("LK<V5C;VYD.R!I9B H
M9FER<W0@(3T@;&%S="D@*RMS96-O;F0["B @("!]"B @(" O+R!I9B!O9&0@
M;G5M8F5R(&]F(&5L96UE;G1S+"!T<F5A="!L87-T(&5L96UE;G0@=VET:" R
M(&-O;7!A<FES;VYS"B @("!I9B H9FER<W0@(3T@;&%S="D@>PH@(" @(" @
M(&EF("@A8V]M<"@J;6EN7W)E<W5L="P@*F9I<G-T*2D*(" @(" @(" @(" @
M;6EN7W)E<W5L=" ](&9I<G-T.PH@(" @(" @(&EF("@A8V]M<"@J9FER<W0L
M("IM87A?<F5S=6QT*2D*(" @(" @(" @(" @;6%X7W)E<W5L=" ](&9I<G-T
M+"!P;W1E;G1I86Q?;6%X7W)E<W5L=" ](&QA<W0["B @("!]"B @(" O+R!R
M97-O;'9E(&UA>%]R97-U;'0_at_8F5I;F<@:6YC;W)R96-T+"!W:71H(&]N92!E
M>'1R82!C;VUP87)I<V]N"B @(" O+R H:6X@=VAI8V@@8V%S92!P;W1E;G1I
M86Q?;6%X7W)E<W5L="!I<R!N96-E<W-A<FEL>2!T:&4_at_8V]R<F5C="!R97-U
M;'0I"B @("!I9B H<&]T96YT:6%L7VUA>%]R97-U;'0@(3T@;&%S= H@(" @
M(" @("8F("%C;VUP*"IP;W1E;G1I86Q?;6%X7W)E<W5L="P@*FUA>%]R97-U
M;'0I*0H@(" @(" @(&UA>%]R97-U;'0@/2!P;W1E;G1I86Q?;6%X7W)E<W5L
M=#L*(" @(')E='5R;B!S=&0Z.FUA:V5?<&%I<BAM:6Y?<F5S=6QT+&UA>%]R
M97-U;'0I.PI]"@I]("\O(&YA;65S<&%C92!B;V]S= H*(V5N9&EF("\O("-I
49F1E9B!"3T]35%]-24Y-05A?2 H`
`
end


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk