Re: (MEMBER ...) with literal symbol(s)
David Scherfgen via Maxima-discuss <[email protected]> Fri, 2 May 2025 23:27:49 +0200
| Newsgroups | gmane.comp.mathematics.maxima.general,gmane.lisp.gcl.devel |
|---|---|
| Message-ID | <CAMTHLKgYYHcoxvTtskZzneFOwtkVQ4xFb1QAE9bQ3OCEcF1D1Q@mail.gmail.com> |
--===============0800716271649280252== Content-Type: multipart/alternative; boundary="000000000000250a9306342dd358" --000000000000250a9306342dd358 Content-Type: text/plain; charset="UTF-8" Thanks for the explanation, Camm. Optimizations 2) and 1) should suffice for this very common case in Maxima's source to be optimized in GCL (just like SBCL does), optimization 5) shouldn't be necessary. Let's take the example (member x '(a b c)), i.e. unknown x and a list of literal symbols. Via 2), GCL should unroll that into (or (eql x 'a) (eql x 'b) (eql x 'c)). Via 1), GCL should replace each of the (eql ...) with (eq ...), as one of the arguments is a literal symbol. But that doesn't seem to be what's happening, right? Best regards David Scherfgen Camm Maguire <[email protected]> schrieb am Fr., 2. Mai 2025, 22:28: > Greetings! Glad you noticed this. > > This touches on 4 optimizations currently in place in the compiler, and > one that is not. > > 1) GCL will optimize eql to eq when it can infer the types on either arg > that would permit this. > > 2) GCL will unroll loops over constant (and non-constant) lists up to > *src-loop-unroll-limit* (default 20) > > 3) GCL will pull the type-of on unknown x out of the loop and use it as > a key to a switch table inside the loop. > > 4) GCL will replace the loop entirely with its known result when > possible. > > 5) GCL will not attempt to aggregate the types across all elements of a > list, i.e. this whole list is of type symbol, so pull that out of the > loop as well. This seems ill-advised and unpractical to me at least at > the moment. > > You can get more info on what is happening by setting > compiler::*annotate* to t before running disassemble. If you only want > the C code and not the disassembly, (setq > compiler::*disassemble-objdump* nil). > > You can also see the lisp source of member: > > ('si::fle is shorthand for 'function-lambda-expression) > > > ============================================================================= > (si::fle 'member) > > ============================================================================= > (LAMBDA > (SYSTEM::ITEM LIST &KEY SYSTEM::KEY SYSTEM::TEST SYSTEM::TEST-NOT) > (DECLARE (OPTIMIZE (SAFETY 1))) (CHECK-TYPE LIST PROPER-LIST) > (CHECK-TYPE SYSTEM::TEST (OR NULL SYSTEM::FUNCTION-DESIGNATOR)) > (CHECK-TYPE SYSTEM::TEST-NOT (OR NULL SYSTEM::FUNCTION-DESIGNATOR)) > (CHECK-TYPE SYSTEM::KEY (OR NULL SYSTEM::FUNCTION-DESIGNATOR)) > (BLOCK > MEMBER > (LET* > ((#:G568 > (COERCE (OR SYSTEM::TEST SYSTEM::TEST-NOT #'EQL) 'FUNCTION)) > (#:G569 > (IF > (EQ #:G568 #'EQ) 0 > (IF > (EQ #:G568 #'EQL) 1 > (IF > (EQ #:G568 #'EQUAL) 2 > (IF (EQ #:G568 #'EQUALP) 3 (IF (EQ #:G568 #'FUNCALL) 4 5)))))) > (#:G570 (IF SYSTEM::KEY (COERCE SYSTEM::KEY 'FUNCTION))) > (#:G570 (IF (NOT (EQ #:G570 #'IDENTITY)) #:G570))) > (AND > SYSTEM::TEST SYSTEM::TEST-NOT > (ERROR "both test and test not supplied")) > (LET* > NIL > (LABELS > ((SYSTEM::KEY > (SYSTEM::X) (IF #:G570 (FUNCALL #:G570 SYSTEM::X) SYSTEM::X)) > (SYSTEM::TEST-NO-KEY > (SYSTEM::X SYSTEM::Y) > (IF > (CASE > #:G569 (0 (EQ SYSTEM::X SYSTEM::Y)) > (1 (EQL SYSTEM::X SYSTEM::Y)) (2 (EQUAL SYSTEM::X SYSTEM::Y)) > (3 (EQUALP SYSTEM::X SYSTEM::Y)) > (4 (FUNCALL SYSTEM::X SYSTEM::Y)) > (OTHERWISE (FUNCALL #:G568 SYSTEM::X SYSTEM::Y))) > (NOT SYSTEM::TEST-NOT) SYSTEM::TEST-NOT)) > (SYSTEM::TEST > (SYSTEM::X SYSTEM::Y) > (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y)))) > (DECLARE (IGNORABLE #'SYSTEM::TEST)) > (IF > (CASE > #:G569 > ((1 2 3) > (OR > (CASE > #:G569 (1 (EQL-IS-EQ SYSTEM::ITEM)) > (2 (EQUAL-IS-EQ SYSTEM::ITEM)) > (3 (EQUALP-IS-EQ SYSTEM::ITEM)))))) > (SETQ #:G569 0)) > (MACROLET > ((SYSTEM::COLLECT > (SYSTEM::A SYSTEM::B SYSTEM::C) > (LIST > 'LET (LIST (LIST 'SYSTEM::TMP SYSTEM::A)) > (LIST > 'SETQ SYSTEM::C > (LIST > 'IF SYSTEM::C > (LIST 'CDR (LIST 'RPLACD SYSTEM::C 'SYSTEM::TMP)) > (LIST 'SETQ SYSTEM::B 'SYSTEM::TMP)))))) > (IF > (NOT > (MAPL > (LAMBDA > (SYSTEM::X) > (IF > (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X)) > (RETURN-FROM MEMBER SYSTEM::X))) > LIST)) > NIL))))))) > > ============================================================================= > > Some examples: > > > ============================================================================= > Unknown x & y, (disassemble '(lambda (x y) (member x y)) > loop not unrolled, type-of x pulled out, eql used unless runtime > determination of x allows eq. > > ============================================================================= > static object LI1__CMP_ANON___gazonk_2205667_0(register object V3,object > V4) > { VMB1 VMS1 VMV1 > /*(MEMBER X Y)*/ > {register fixnum V5; > V5= 1; > /*(EQL-IS-EQ SYSTEM::ITEM)*/ > switch(/* (APPLIED TP4 SYSTEM::X) */tp4(V3)){ > case -1: > goto T7; > T7:; > goto T5; > > case 1: > goto T8; > T8:; > case 2: > goto T9; > T9:; > case 3: > goto T10; > T10:; > case 4: > goto T11; > T11:; > case 5: > goto T12; > T12:; > case 6: > goto T13; > T13:; > goto T3; > > default: > goto T14; > T14:; > goto T5; > > goto T3; > } > goto T3; > > /* END (EQL-IS-EQ SYSTEM::ITEM)*/ > goto T5; > T5:; > V5= 0; > goto T2; > > goto T3; > T3:; > goto T2; > T2:; > /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > {register object V6; > V6= (V4); > goto T24; > T24:; > if(((V6))==Cnil){ > goto T26; > } > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > switch(V5){ > case 0: > goto T36; > T36:; > if(!(((V3))==(/* (SYSTEM::KEY SYSTEM::Y) */(V6)->c.c_car))){ > goto T33; > } > goto T34; > > case 1: > goto T37; > T37:; > if(!(eql((V3),/* (SYSTEM::KEY SYSTEM::Y) */(V6)->c.c_car))){ > goto T33; > } > goto T34; > > goto T33; > } > goto T33; > > goto T34; > T34:; > goto T32; > > goto T33; > T33:; > goto T30; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T32; > T32:; > {object V8 = (V6); > VMR1(V8);} > goto T30; > T30:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > {object V9; > V9= /* (APPLIED CDR SYSTEM::X) */V6->c.c_cdr; > V6= (V9); > goto T24; > } > goto T26; > T26:; > goto T22; > > goto T22; > } > /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > goto T22; > T22:; > if(((V4))==Cnil){ > goto T20; > } > /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > goto T17; > > goto T20; > T20:; > {object V10 = Cnil; > VMR1(V10);} > goto T17; > T17:; > {object V11 = Cnil; > VMR1(V11);}} > /* END (MEMBER X Y)*/ > } > > ============================================================================= > symbol x, unknown y, (disassemble '(lambda (x y) (declare (symbol x)) > (member x y))) > loop not unrolled, eql->eq, no typing > > ============================================================================= > static object LI1__CMP_ANON___gazonk_2205667_0(register object V3,object > V4) > { VMB1 VMS1 VMV1 > /*(MEMBER X Y)*/ > /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > {register object V5; > V5= (V4); > goto T9; > T9:; > if(((V5))==Cnil){ > goto T11; > } > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > if(!(((V3))==(/* (SYSTEM::KEY SYSTEM::Y) */(V5)->c.c_car))){ > goto T18; > } > goto T17; > > goto T18; > T18:; > goto T15; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T17; > T17:; > {object V7 = (V5); > VMR1(V7);} > goto T15; > T15:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > {object V8; > V8= /* (APPLIED CDR SYSTEM::X) */V5->c.c_cdr; > V5= (V8); > goto T9; > } > goto T11; > T11:; > goto T7; > > goto T7; > } > /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > goto T7; > T7:; > if(((V4))==Cnil){ > goto T5; > } > /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > goto T2; > > goto T5; > T5:; > {object V9 = Cnil; > VMR1(V9);} > goto T2; > T2:; > {object V10 = Cnil; > VMR1(V10);} > /* END (MEMBER X Y)*/ > } > > ============================================================================= > Unknown x, known list, (disassemble '(lambda (x y z w) (member x (list y > z w)))) > loop unrolled, type-of x pulled out > > ============================================================================= > static object LI1__CMP_ANON___gazonk_2205667_1(object V5,object V6,object > V7,object V8) > { VMB1 VMS1 VMV1 > /*(MEMBER X (LIST Y Z ...))*/ > {object V9; > V9= list(3,(V6),(V7),(V8)); > {fixnum V10; > V10= 1; > /*(EQL-IS-EQ SYSTEM::ITEM)*/ > switch(/* (APPLIED TP4 SYSTEM::X) */tp4(V5)){ > case -1: > goto T8; > T8:; > goto T6; > > case 1: > goto T9; > T9:; > case 2: > goto T10; > T10:; > case 3: > goto T11; > T11:; > case 4: > goto T12; > T12:; > case 5: > goto T13; > T13:; > case 6: > goto T14; > T14:; > goto T4; > > default: > goto T15; > T15:; > goto T6; > > goto T4; > } > goto T4; > > /* END (EQL-IS-EQ SYSTEM::ITEM)*/ > goto T6; > T6:; > V10= 0; > goto T3; > > goto T4; > T4:; > goto T3; > T3:; > /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > switch(V10){ > case 0: > goto T27; > T27:; > if(!(((V5))==((V6)))){ > goto T24; > } > goto T25; > > case 1: > goto T28; > T28:; > if(!(eql((V5),(V6)))){ > goto T24; > } > goto T25; > > goto T24; > } > goto T24; > > goto T25; > T25:; > goto T23; > > goto T24; > T24:; > goto T21; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T23; > T23:; > {object V11 = (V9); > VMR1(V11);} > goto T21; > T21:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > switch(V10){ > case 0: > goto T37; > T37:; > if(!(((V5))==((V7)))){ > goto T34; > } > goto T35; > > case 1: > goto T38; > T38:; > if(!(eql((V5),(V7)))){ > goto T34; > } > goto T35; > > goto T34; > } > goto T34; > > goto T35; > T35:; > goto T33; > > goto T34; > T34:; > goto T31; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T33; > T33:; > {object V12 = /* (CDR SYSTEM::X) */V9->c.c_cdr; > VMR1(V12);} > goto T31; > T31:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > switch(V10){ > case 0: > goto T47; > T47:; > if(!(((V5))==((V8)))){ > goto T44; > } > goto T45; > > case 1: > goto T48; > T48:; > if(!(eql((V5),(V8)))){ > goto T44; > } > goto T45; > > goto T44; > } > goto T44; > > goto T45; > T45:; > goto T43; > > goto T44; > T44:; > goto T41; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T43; > T43:; > {object V13 = /* (CDR SYSTEM::X) */V9->c.c_cdr->c.c_cdr; > VMR1(V13);} > goto T41; > T41:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > {object V14 = Cnil; > VMR1(V14);}}} > /* END (MEMBER X (LIST Y Z ...))*/ > } > > ============================================================================= > Known result, (disassemble '(lambda (x y z w) (declare (symbol z)) > (member z (list 3 z w)))) > loop eliminated > > ============================================================================= > static object LI1__CMP_ANON___gazonk_2205667_1(object V5,object V6,object > V7,object V8) > { VMB1 VMS1 VMV1 > /*(MEMBER Z (LIST 3 Z ...))*/ > {object V9; > V9= list(3,make_fixnum(3),(V7),(V8)); > /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > {object V10 = /* (CDR SYSTEM::X) */V9->c.c_cdr; > VMR1(V10);} > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/} > /* END (MEMBER Z (LIST 3 Z ...))*/ > } > > ============================================================================= > Unknown x, known list of symbols (disassemble '(lambda (x y z w) > (declare (symbol y z w )) (member x (list y z w)))) > loop unrolled, type-of x pulled out, when x is e.g. integer eql still > optimized to eq element wise as all list elements are symbol. > > ============================================================================= > static object LI1__CMP_ANON___gazonk_2205667_1(object V5,object V6,object > V7,object V8) > { VMB1 VMS1 VMV1 > /*(MEMBER X (LIST Y Z ...))*/ > {object V9; > V9= list(3,(V6),(V7),(V8)); > {fixnum V10; > V10= 1; > /*(EQL-IS-EQ SYSTEM::ITEM)*/ > switch(/* (APPLIED TP4 SYSTEM::X) */tp4(V5)){ > case -1: > goto T8; > T8:; > goto T6; > > case 1: > goto T9; > T9:; > case 2: > goto T10; > T10:; > case 3: > goto T11; > T11:; > case 4: > goto T12; > T12:; > case 5: > goto T13; > T13:; > case 6: > goto T14; > T14:; > goto T4; > > default: > goto T15; > T15:; > goto T6; > > goto T4; > } > goto T4; > > /* END (EQL-IS-EQ SYSTEM::ITEM)*/ > goto T6; > T6:; > V10= 0; > goto T3; > > goto T4; > T4:; > goto T3; > T3:; > /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > switch(V10){ > case 0: > goto T27; > T27:; > if(!(((V5))==((V6)))){ > goto T24; > } > goto T25; > > case 1: > goto T28; > T28:; > if(!(((V5))==((V6)))){ > goto T24; > } > goto T25; > > goto T24; > } > goto T24; > > goto T25; > T25:; > goto T23; > > goto T24; > T24:; > goto T21; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T23; > T23:; > {object V11 = (V9); > VMR1(V11);} > goto T21; > T21:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > switch(V10){ > case 0: > goto T37; > T37:; > if(!(((V5))==((V7)))){ > goto T34; > } > goto T35; > > case 1: > goto T38; > T38:; > if(!(((V5))==((V7)))){ > goto T34; > } > goto T35; > > goto T34; > } > goto T34; > > goto T35; > T35:; > goto T33; > > goto T34; > T34:; > goto T31; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T33; > T33:; > {object V12 = /* (CDR SYSTEM::X) */V9->c.c_cdr; > VMR1(V12);} > goto T31; > T31:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > switch(V10){ > case 0: > goto T47; > T47:; > if(!(((V5))==((V8)))){ > goto T44; > } > goto T45; > > case 1: > goto T48; > T48:; > if(!(((V5))==((V8)))){ > goto T44; > } > goto T45; > > goto T44; > } > goto T44; > > goto T45; > T45:; > goto T43; > > goto T44; > T44:; > goto T41; > > /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/ > /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/ > goto T43; > T43:; > {object V13 = /* (CDR SYSTEM::X) */V9->c.c_cdr->c.c_cdr; > VMR1(V13);} > goto T41; > T41:; > /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/ > /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/ > /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/ > /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/ > /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/ > {object V14 = Cnil; > VMR1(V14);}}} > /* END (MEMBER X (LIST Y Z ...))*/ > } > > ============================================================================= > > Take care, > > David Scherfgen via Maxima-discuss > <[email protected]> writes: > > > Hello, > > > > I noticed that GCL 2.7.1 compiles these functions differently: > > > > (defun f (x) (member x '(a b c))) > > (defun g (x) (member x '(a b c) :test #'eq)) > > > > I suppose that's because F uses the default EQL as the test. I tried to > understand the C code it generated, but it was incomprehensible to me. > Anyways, I saw > > that the second function, G, had inlined the MEMBER call into (OR (EQ X > 'A) (EQ X 'B) (EQ Y 'C)), which is reasonable. But why does F get compiled > differently? > > > > Shouldn't the compiler notice that the second argument to MEMBER is a > literal list of symbols and automatically use EQ instead of the default EQL > test? That > > would be an easy and safe optimization. > > > > The same goes for the case where the first argument to MEMBER is a > literal symbol. > > > > Maxima is full of such instances where MEMBER is used as a shorter way > to write (OR (EQ ...) (EQ ...) ...), and ":test #'eq" has mostly been > removed because it was > > believed that any modern Lisp compiler would apply this optimization > automatically. At least SBCL does. (CCL doesn't, I have filed a report > already.) > > > > Best regards > > David Scherfgen > > > > _______________________________________________ > > Maxima-discuss mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/maxima-discuss > > > > -- > Camm Maguire [email protected] > ========================================================================== > "The earth is but one country, and mankind its citizens." -- Baha'u'llah > --000000000000250a9306342dd358 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9ImF1dG8iPlRoYW5rcyBmb3IgdGhlIGV4cGxhbmF0aW9uLCBDYW1tLjxkaXYgZGly PSJhdXRvIj48YnI+PGRpdiBkaXI9ImF1dG8iPk9wdGltaXphdGlvbnMgMikgYW5kIDEpIHNob3Vs ZCBzdWZmaWNlwqBmb3IgdGhpcyB2ZXJ5IGNvbW1vbiBjYXNlIGluIE1heGltYSYjMzk7cyBzb3Vy Y2UgdG8gYmUgb3B0aW1pemVkIGluIEdDTCAoanVzdCBsaWtlIFNCQ0wgZG9lcyksIG9wdGltaXph dGlvbiA1KSBzaG91bGRuJiMzOTt0IGJlIG5lY2Vzc2FyeS48L2Rpdj48ZGl2IGRpcj0iYXV0byI+ PGRpdiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+TGV0JiMzOTtzIHRha2Ug dGhlIGV4YW1wbGUgKG1lbWJlciB4ICYjMzk7KGEgYiBjKSksIGkuZS4gdW5rbm93biB4IGFuZCBh IGxpc3Qgb2YgbGl0ZXJhbCBzeW1ib2xzLjwvZGl2PjxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+ PGRpdiBkaXI9ImF1dG8iPlZpYSAyKSwgR0NMIHNob3VsZCB1bnJvbGwgdGhhdCBpbnRvIChvciAo ZXFsIHggJiMzOTthKSAoZXFsIHggJiMzOTtiKSAoZXFsIHggJiMzOTtjKSkuPC9kaXY+PGRpdiBk aXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+VmlhIDEpLCBHQ0wgc2hvdWxkIHJl cGxhY2UgZWFjaCBvZiB0aGUgKGVxbCAuLi4pIHdpdGggKGVxIC4uLiksIGFzIG9uZSBvZiB0aGUg YXJndW1lbnRzIGlzIGEgbGl0ZXJhbCBzeW1ib2wuPC9kaXY+PGRpdiBkaXI9ImF1dG8iPjxicj48 L2Rpdj48ZGl2IGRpcj0iYXV0byI+QnV0IHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB3aGF0 JiMzOTtzIGhhcHBlbmluZywgcmlnaHQ/PC9kaXY+PGRpdiBkaXI9ImF1dG8iPjxicj48L2Rpdj48 ZGl2IGRpcj0iYXV0byI+QmVzdCByZWdhcmRzPC9kaXY+PGRpdiBkaXI9ImF1dG8iPkRhdmlkIFNj aGVyZmdlbjwvZGl2PjwvZGl2Pjxicj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUgZ21haWxf cXVvdGVfY29udGFpbmVyIiBkaXI9ImF1dG8iPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9h dHRyIj5DYW1tIE1hZ3VpcmUgJmx0OzxhIGhyZWY9Im1haWx0bzpjYW1tQG1hZ3VpcmVmYW1pbHku b3JnIj5jYW1tQG1hZ3VpcmVmYW1pbHkub3JnPC9hPiZndDsgc2NocmllYiBhbSBGci4sIDIuIE1h aSAyMDI1LCAyMjoyODo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBz dHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2Io MjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPkdyZWV0aW5ncyHCoCBHbGFkIHlvdSBub3Rp Y2VkIHRoaXMuPGJyPg0KPGJyPg0KVGhpcyB0b3VjaGVzIG9uIDQgb3B0aW1pemF0aW9ucyBjdXJy ZW50bHkgaW4gcGxhY2UgaW4gdGhlIGNvbXBpbGVyLCBhbmQ8YnI+DQpvbmUgdGhhdCBpcyBub3Qu PGJyPg0KPGJyPg0KMSkgR0NMIHdpbGwgb3B0aW1pemUgZXFsIHRvIGVxIHdoZW4gaXQgY2FuIGlu ZmVyIHRoZSB0eXBlcyBvbiBlaXRoZXIgYXJnPGJyPg0KdGhhdCB3b3VsZCBwZXJtaXQgdGhpcy48 YnI+DQo8YnI+DQoyKSBHQ0wgd2lsbCB1bnJvbGwgbG9vcHMgb3ZlciBjb25zdGFudCAoYW5kIG5v bi1jb25zdGFudCkgbGlzdHMgdXAgdG88YnI+DQoqc3JjLWxvb3AtdW5yb2xsLWxpbWl0KiAoZGVm YXVsdCAyMCk8YnI+DQo8YnI+DQozKSBHQ0wgd2lsbCBwdWxsIHRoZSB0eXBlLW9mIG9uIHVua25v d24geCBvdXQgb2YgdGhlIGxvb3AgYW5kIHVzZSBpdCBhczxicj4NCmEga2V5IHRvIGEgc3dpdGNo IHRhYmxlIGluc2lkZSB0aGUgbG9vcC48YnI+DQo8YnI+DQo0KSBHQ0wgd2lsbCByZXBsYWNlIHRo ZSBsb29wIGVudGlyZWx5IHdpdGggaXRzIGtub3duIHJlc3VsdCB3aGVuPGJyPg0KcG9zc2libGUu IDxicj4NCjxicj4NCjUpIEdDTCB3aWxsIG5vdCBhdHRlbXB0IHRvIGFnZ3JlZ2F0ZSB0aGUgdHlw ZXMgYWNyb3NzIGFsbCBlbGVtZW50cyBvZiBhPGJyPg0KbGlzdCwgaS5lLiB0aGlzIHdob2xlIGxp c3QgaXMgb2YgdHlwZSBzeW1ib2wsIHNvIHB1bGwgdGhhdCBvdXQgb2YgdGhlPGJyPg0KbG9vcCBh cyB3ZWxsLsKgIFRoaXMgc2VlbXMgaWxsLWFkdmlzZWQgYW5kIHVucHJhY3RpY2FsIHRvIG1lIGF0 IGxlYXN0IGF0PGJyPg0KdGhlIG1vbWVudC48YnI+DQo8YnI+DQpZb3UgY2FuIGdldCBtb3JlIGlu Zm8gb24gd2hhdCBpcyBoYXBwZW5pbmcgYnkgc2V0dGluZzxicj4NCmNvbXBpbGVyOjoqYW5ub3Rh dGUqIHRvIHQgYmVmb3JlIHJ1bm5pbmcgZGlzYXNzZW1ibGUuwqAgSWYgeW91IG9ubHkgd2FudDxi cj4NCnRoZSBDIGNvZGUgYW5kIG5vdCB0aGUgZGlzYXNzZW1ibHksIChzZXRxPGJyPg0KY29tcGls ZXI6OipkaXNhc3NlbWJsZS1vYmpkdW1wKiBuaWwpLjxicj4NCjxicj4NCllvdSBjYW4gYWxzbyBz ZWUgdGhlIGxpc3Agc291cmNlIG9mIG1lbWJlcjo8YnI+DQo8YnI+DQooJiMzOTtzaTo6ZmxlIGlz IHNob3J0aGFuZCBmb3IgJiMzOTtmdW5jdGlvbi1sYW1iZGEtZXhwcmVzc2lvbik8YnI+DQo8YnI+ DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PTxicj4NCihzaTo6ZmxlICYjMzk7bWVtYmVyKTxicj4NCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PGJyPg0KKExBTUJEQTxicj4NCsKgKFNZU1RFTTo6SVRFTSBMSVNU ICZhbXA7S0VZIFNZU1RFTTo6S0VZIFNZU1RFTTo6VEVTVCBTWVNURU06OlRFU1QtTk9UKTxicj4N CsKgKERFQ0xBUkUgKE9QVElNSVpFIChTQUZFVFkgMSkpKSAoQ0hFQ0stVFlQRSBMSVNUIFBST1BF Ui1MSVNUKTxicj4NCsKgKENIRUNLLVRZUEUgU1lTVEVNOjpURVNUIChPUiBOVUxMIFNZU1RFTTo6 RlVOQ1RJT04tREVTSUdOQVRPUikpPGJyPg0KwqAoQ0hFQ0stVFlQRSBTWVNURU06OlRFU1QtTk9U IChPUiBOVUxMIFNZU1RFTTo6RlVOQ1RJT04tREVTSUdOQVRPUikpPGJyPg0KwqAoQ0hFQ0stVFlQ RSBTWVNURU06OktFWSAoT1IgTlVMTCBTWVNURU06OkZVTkNUSU9OLURFU0lHTkFUT1IpKTxicj4N CsKgKEJMT0NLPGJyPg0KwqAgTUVNQkVSPGJyPg0KwqAgKExFVCo8YnI+DQrCoCDCoCgoIzpHNTY4 PGJyPg0KwqAgwqAgwqAoQ09FUkNFIChPUiBTWVNURU06OlRFU1QgU1lTVEVNOjpURVNULU5PVCAj JiMzOTtFUUwpICYjMzk7RlVOQ1RJT04pKTxicj4NCsKgIMKgICgjOkc1Njk8YnI+DQrCoCDCoCDC oChJRjxicj4NCsKgIMKgIMKgIChFUSAjOkc1NjggIyYjMzk7RVEpIDA8YnI+DQrCoCDCoCDCoCAo SUY8YnI+DQrCoCDCoCDCoCDCoChFUSAjOkc1NjggIyYjMzk7RVFMKSAxPGJyPg0KwqAgwqAgwqAg wqAoSUY8YnI+DQrCoCDCoCDCoCDCoCAoRVEgIzpHNTY4ICMmIzM5O0VRVUFMKSAyPGJyPg0KwqAg wqAgwqAgwqAgKElGIChFUSAjOkc1NjggIyYjMzk7RVFVQUxQKSAzIChJRiAoRVEgIzpHNTY4ICMm IzM5O0ZVTkNBTEwpIDQgNSkpKSkpKTxicj4NCsKgIMKgICgjOkc1NzAgKElGIFNZU1RFTTo6S0VZ IChDT0VSQ0UgU1lTVEVNOjpLRVkgJiMzOTtGVU5DVElPTikpKTxicj4NCsKgIMKgICgjOkc1NzAg KElGIChOT1QgKEVRICM6RzU3MCAjJiMzOTtJREVOVElUWSkpICM6RzU3MCkpKTxicj4NCsKgIMKg KEFORDxicj4NCsKgIMKgIFNZU1RFTTo6VEVTVCBTWVNURU06OlRFU1QtTk9UPGJyPg0KwqAgwqAg KEVSUk9SICZxdW90O2JvdGggdGVzdCBhbmQgdGVzdCBub3Qgc3VwcGxpZWQmcXVvdDspKTxicj4N CsKgIMKgKExFVCo8YnI+DQrCoCDCoCBOSUw8YnI+DQrCoCDCoCAoTEFCRUxTPGJyPg0KwqAgwqAg wqAoKFNZU1RFTTo6S0VZPGJyPg0KwqAgwqAgwqAgwqAoU1lTVEVNOjpYKSAoSUYgIzpHNTcwIChG VU5DQUxMICM6RzU3MCBTWVNURU06OlgpIFNZU1RFTTo6WCkpPGJyPg0KwqAgwqAgwqAgKFNZU1RF TTo6VEVTVC1OTy1LRVk8YnI+DQrCoCDCoCDCoCDCoChTWVNURU06OlggU1lTVEVNOjpZKTxicj4N CsKgIMKgIMKgIMKgKElGPGJyPg0KwqAgwqAgwqAgwqAgKENBU0U8YnI+DQrCoCDCoCDCoCDCoCDC oCM6RzU2OSAoMCAoRVEgU1lTVEVNOjpYIFNZU1RFTTo6WSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAo MSAoRVFMIFNZU1RFTTo6WCBTWVNURU06OlkpKSAoMiAoRVFVQUwgU1lTVEVNOjpYIFNZU1RFTTo6 WSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAoMyAoRVFVQUxQIFNZU1RFTTo6WCBTWVNURU06OlkpKTxi cj4NCsKgIMKgIMKgIMKgIMKgKDQgKEZVTkNBTEwgU1lTVEVNOjpYIFNZU1RFTTo6WSkpPGJyPg0K wqAgwqAgwqAgwqAgwqAoT1RIRVJXSVNFIChGVU5DQUxMICM6RzU2OCBTWVNURU06OlggU1lTVEVN OjpZKSkpPGJyPg0KwqAgwqAgwqAgwqAgKE5PVCBTWVNURU06OlRFU1QtTk9UKSBTWVNURU06OlRF U1QtTk9UKSk8YnI+DQrCoCDCoCDCoCAoU1lTVEVNOjpURVNUPGJyPg0KwqAgwqAgwqAgwqAoU1lT VEVNOjpYIFNZU1RFTTo6WSk8YnI+DQrCoCDCoCDCoCDCoChTWVNURU06OlRFU1QtTk8tS0VZIFNZ U1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkpKTxicj4NCsKgIMKgIMKgKERFQ0xBUkUg KElHTk9SQUJMRSAjJiMzOTtTWVNURU06OlRFU1QpKTxicj4NCsKgIMKgIMKgKElGPGJyPg0KwqAg wqAgwqAgKENBU0U8YnI+DQrCoCDCoCDCoCDCoCM6RzU2OTxicj4NCsKgIMKgIMKgIMKgKCgxIDIg Myk8YnI+DQrCoCDCoCDCoCDCoCAoT1I8YnI+DQrCoCDCoCDCoCDCoCDCoChDQVNFPGJyPg0KwqAg wqAgwqAgwqAgwqAgIzpHNTY5ICgxIChFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSk8YnI+DQrCoCDC oCDCoCDCoCDCoCAoMiAoRVFVQUwtSVMtRVEgU1lTVEVNOjpJVEVNKSk8YnI+DQrCoCDCoCDCoCDC oCDCoCAoMyAoRVFVQUxQLUlTLUVRIFNZU1RFTTo6SVRFTSkpKSkpKTxicj4NCsKgIMKgIMKgIChT RVRRICM6RzU2OSAwKSk8YnI+DQrCoCDCoCDCoChNQUNST0xFVDxicj4NCsKgIMKgIMKgICgoU1lT VEVNOjpDT0xMRUNUPGJyPg0KwqAgwqAgwqAgwqAgKFNZU1RFTTo6QSBTWVNURU06OkIgU1lTVEVN OjpDKTxicj4NCsKgIMKgIMKgIMKgIChMSVNUPGJyPg0KwqAgwqAgwqAgwqAgwqAmIzM5O0xFVCAo TElTVCAoTElTVCAmIzM5O1NZU1RFTTo6VE1QIFNZU1RFTTo6QSkpPGJyPg0KwqAgwqAgwqAgwqAg wqAoTElTVDxicj4NCsKgIMKgIMKgIMKgIMKgICYjMzk7U0VUUSBTWVNURU06OkM8YnI+DQrCoCDC oCDCoCDCoCDCoCAoTElTVDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgJiMzOTtJRiBTWVNURU06OkM8 YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChMSVNUICYjMzk7Q0RSIChMSVNUICYjMzk7UlBMQUNEIFNZ U1RFTTo6QyAmIzM5O1NZU1RFTTo6VE1QKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChMSVNUICYj Mzk7U0VUUSBTWVNURU06OkIgJiMzOTtTWVNURU06OlRNUCkpKSkpKTxicj4NCsKgIMKgIMKgIChJ Rjxicj4NCsKgIMKgIMKgIMKgKE5PVDxicj4NCsKgIMKgIMKgIMKgIChNQVBMPGJyPg0KwqAgwqAg wqAgwqAgwqAoTEFNQkRBPGJyPg0KwqAgwqAgwqAgwqAgwqAgKFNZU1RFTTo6WCk8YnI+DQrCoCDC oCDCoCDCoCDCoCAoSUY8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChTWVNURU06OlRFU1QgU1lTVEVN OjpJVEVNIChDQVIgU1lTVEVNOjpYKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChSRVRVUk4tRlJP TSBNRU1CRVIgU1lTVEVNOjpYKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqBMSVNUKSk8YnI+DQrCoCDC oCDCoCDCoE5JTCkpKSkpKSk8YnI+DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTxicj4NCjxicj4NClNv bWUgZXhhbXBsZXM6PGJyPg0KPGJyPg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08YnI+DQpVbmtub3du IHggJmFtcDsgeSwgKGRpc2Fzc2VtYmxlICYjMzk7KGxhbWJkYSAoeCB5KSAobWVtYmVyIHggeSkp PGJyPg0KbG9vcCBub3QgdW5yb2xsZWQsIHR5cGUtb2YgeCBwdWxsZWQgb3V0LCBlcWwgdXNlZCB1 bmxlc3MgcnVudGltZTxicj4NCmRldGVybWluYXRpb24gb2YgeCBhbGxvd3MgZXEuPGJyPg0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT08YnI+DQpzdGF0aWMgb2JqZWN0IExJMV9fQ01QX0FOT05fX19nYXpv bmtfMjIwNTY2N18wKHJlZ2lzdGVyIG9iamVjdCBWMyxvYmplY3QgVjQpPGJyPg0Ke8KgIMKgIMKg IMKgIFZNQjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAgwqAgLyooTUVNQkVSIFggWSkqLzxicj4N CsKgIMKgIMKgIMKgIHtyZWdpc3RlciBmaXhudW0gVjU7PGJyPg0KwqAgwqAgwqAgwqAgVjU9IDE7 PGJyPg0KwqAgwqAgwqAgwqAgLyooRVFMLUlTLUVRIFNZU1RFTTo6SVRFTSkqLzxicj4NCsKgIMKg IMKgIMKgIHN3aXRjaCgvKiAoQVBQTElFRCBUUDQgU1lTVEVNOjpYKSAqL3RwNChWMykpezxicj4N CsKgIMKgIMKgIMKgIGNhc2UgLTE6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNzs8YnI+DQpUNzo7 PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDE6 PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUODs8YnI+DQpUODo7PGJyPg0KwqAgwqAgwqAgwqAgY2Fz ZSAyOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDk7PGJyPg0KVDk6Ozxicj4NCsKgIMKgIMKgIMKg IGNhc2UgMzo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMDs8YnI+DQpUMTA6Ozxicj4NCsKgIMKg IMKgIMKgIGNhc2UgNDo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMTs8YnI+DQpUMTE6Ozxicj4N CsKgIMKgIMKgIMKgIGNhc2UgNTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMjs8YnI+DQpUMTI6 Ozxicj4NCsKgIMKgIMKgIMKgIGNhc2UgNjo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMzs8YnI+ DQpUMTM6Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAg ZGVmYXVsdDo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxNDs8YnI+DQpUMTQ6Ozxicj4NCsKgIMKg IMKgIMKgIGdvdG8gVDU7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzs8YnI+DQrCoCDC oCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDC oCAvKiBFTkQgKEVRTC1JUy1FUSBTWVNURU06OklURU0pKi88YnI+DQrCoCDCoCDCoCDCoCBnb3Rv IFQ1Ozxicj4NClQ1Ojs8YnI+DQrCoCDCoCDCoCDCoCBWNT0gMDs8YnI+DQrCoCDCoCDCoCDCoCBn b3RvIFQyOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7PGJyPg0KVDM6Ozxicj4NCsKg IMKgIMKgIMKgIGdvdG8gVDI7PGJyPg0KVDI6Ozxicj4NCsKgIMKgIMKgIMKgIC8qKE1BUEwgKExB TUJEQSAoU1lTVEVNOjpYKSAoSUYgIyAjKSkgTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZ U1RFTTo6TE1BUFIgU1lTVEVNOjpGVU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RF TTo6TE1BUCBTWVNURU06OkYgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAge3JlZ2lzdGVy IG9iamVjdCBWNjs8YnI+DQrCoCDCoCDCoCDCoCBWNj0gKFY0KTs8YnI+DQrCoCDCoCDCoCDCoCBn b3RvIFQyNDs8YnI+DQpUMjQ6Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCgoVjYpKT09Q25pbCl7PGJy Pg0KwqAgwqAgwqAgwqAgZ290byBUMjY7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKg IMKgIC8qKChMQU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88 YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRFU1QgU1lTVEVNOjpJVEVNIChDQVIgU1lTVEVN OjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RFTTo6VEVTVC1OTy1LRVkgU1lTVEVNOjpY IChTWVNURU06OktFWSBTWVNURU06OlkpKSovPGJyPg0KwqAgwqAgwqAgwqAgc3dpdGNoKFY1KXs8 YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDA6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzY7PGJyPg0K VDM2Ojs8YnI+DQrCoCDCoCDCoCDCoCBpZighKCgoVjMpKT09KC8qIChTWVNURU06OktFWSBTWVNU RU06OlkpICovKFY2KS0mZ3Q7Yy5jX2NhcikpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMzs8 YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0KPGJyPg0K wqAgwqAgwqAgwqAgY2FzZSAxOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM3Ozxicj4NClQzNzo7 PGJyPg0KwqAgwqAgwqAgwqAgaWYoIShlcWwoKFYzKSwvKiAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZ KSAqLyhWNiktJmd0O2MuY19jYXIpKSl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzM7PGJyPg0K wqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM0Ozxicj4NCjxicj4NCsKgIMKg IMKgIMKgIGdvdG8gVDMzOzxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3Rv IFQzMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzNDs8YnI+DQpUMzQ6Ozxicj4NCsKg IMKgIMKgIMKgIGdvdG8gVDMyOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDMzOzxicj4N ClQzMzo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzA7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAg LyogRU5EIChTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVN OjpZKSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpURVNUIFNZU1RFTTo6SVRF TSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMjs8YnI+DQpUMzI6 Ozxicj4NCsKgIMKgIMKgIMKgIHtvYmplY3QgVjggPSAoVjYpOzxicj4NCsKgIMKgIMKgIMKgIFZN UjEoVjgpO308YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMDs8YnI+DQpUMzA6Ozxicj4NCsKgIMKg IMKgIMKgIC8qIEVORCAoKExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RF TTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIHtvYmplY3QgVjk7PGJyPg0KwqAgwqAgwqAgwqAgVjk9 IC8qIChBUFBMSUVEIENEUiBTWVNURU06OlgpICovVjYtJmd0O2MuY19jZHI7PGJyPg0KwqAgwqAg wqAgwqAgVjY9IChWOSk7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjQ7PGJyPg0KwqAgwqAgwqAg wqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI2Ozxicj4NClQyNjo7PGJyPg0KwqAgwqAgwqAg wqAgZ290byBUMjI7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjI7PGJyPg0KwqAgwqAg wqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiBT WVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMjs8YnI+DQpUMjI6Ozxicj4NCsKg IMKgIMKgIMKgIGlmKCgoVjQpKT09Q25pbCl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjA7PGJy Pg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQUiBT WVNURU06OkZVTiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNQVBMIChMQU1CREEg KFNZU1RFTTo6WCkgKElGICMgIykpIExJU1QpKi88YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxNzs8 YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMDs8YnI+DQpUMjA6Ozxicj4NCsKgIMKgIMKg IMKgIHtvYmplY3QgVjEwID0gQ25pbDs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFYxMCk7fTxicj4N CsKgIMKgIMKgIMKgIGdvdG8gVDE3Ozxicj4NClQxNzo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVj dCBWMTEgPSBDbmlsOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjExKTt9fTxicj4NCsKgIMKgIMKg IMKgIC8qIEVORCAoTUVNQkVSIFggWSkqLzxicj4NCn08YnI+DQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PTxicj4NCnN5bWJvbCB4LCB1bmtub3duIHksIChkaXNhc3NlbWJsZSAmIzM5OyhsYW1iZGEgKHgg eSkgKGRlY2xhcmUgKHN5bWJvbCB4KSkgKG1lbWJlciB4IHkpKSk8YnI+DQpsb29wIG5vdCB1bnJv bGxlZCwgZXFsLSZndDtlcSwgbm8gdHlwaW5nPGJyPg0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08YnI+ DQpzdGF0aWMgb2JqZWN0IExJMV9fQ01QX0FOT05fX19nYXpvbmtfMjIwNTY2N18wKHJlZ2lzdGVy IG9iamVjdCBWMyxvYmplY3QgVjQpPGJyPg0Ke8KgIMKgIMKgIMKgIFZNQjEgVk1TMSBWTVYxPGJy Pg0KwqAgwqAgwqAgwqAgLyooTUVNQkVSIFggWSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKE1BUEwg KExBTUJEQSAoU1lTVEVNOjpYKSAoSUYgIyAjKSkgTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8q KFNZU1RFTTo6TE1BUFIgU1lTVEVNOjpGVU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZ U1RFTTo6TE1BUCBTWVNURU06OkYgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAge3JlZ2lz dGVyIG9iamVjdCBWNTs8YnI+DQrCoCDCoCDCoCDCoCBWNT0gKFY0KTs8YnI+DQrCoCDCoCDCoCDC oCBnb3RvIFQ5Ozxicj4NClQ5Ojs8YnI+DQrCoCDCoCDCoCDCoCBpZigoKFY1KSk9PUNuaWwpezxi cj4NCsKgIMKgIMKgIMKgIGdvdG8gVDExOzxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDC oCDCoCAvKigoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSov PGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpURVNUIFNZU1RFTTo6SVRFTSAoQ0FSIFNZU1RF TTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6 WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkqLzxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWMykp PT0oLyogKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkgKi8oVjUpLSZndDtjLmNfY2FyKSkpezxicj4N CsKgIMKgIMKgIMKgIGdvdG8gVDE4Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDC oCBnb3RvIFQxNzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxODs8YnI+DQpUMTg6Ozxi cj4NCsKgIMKgIMKgIMKgIGdvdG8gVDE1Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAo U1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkpKi88 YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBT WVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTc7PGJyPg0KVDE3Ojs8YnI+DQrC oCDCoCDCoCDCoCB7b2JqZWN0IFY3ID0gKFY1KTs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFY3KTt9 PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTU7PGJyPg0KVDE1Ojs8YnI+DQrCoCDCoCDCoCDCoCAv KiBFTkQgKChMQU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88 YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY4Ozxicj4NCsKgIMKgIMKgIMKgIFY4PSAvKiAoQVBQ TElFRCBDRFIgU1lTVEVNOjpYKSAqL1Y1LSZndDtjLmNfY2RyOzxicj4NCsKgIMKgIMKgIMKgIFY1 PSAoVjgpOzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDk7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4N CsKgIMKgIMKgIMKgIGdvdG8gVDExOzxicj4NClQxMTo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBU Nzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ3Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+ DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgU1lTVEVNOjpYKSov PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNzs8YnI+DQpUNzo7PGJyPg0KwqAgwqAgwqAgwqAgaWYo KChWNCkpPT1DbmlsKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ1Ozxicj4NCsKgIMKgIMKgIMKg IH08YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUFIgU1lTVEVNOjpGVU4gTElT VCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoTUFQTCAoTEFNQkRBIChTWVNURU06OlgpIChJ RiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjs8YnI+DQo8YnI+DQrCoCDC oCDCoCDCoCBnb3RvIFQ1Ozxicj4NClQ1Ojs8YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY5ID0g Q25pbDs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFY5KTt9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBU Mjs8YnI+DQpUMjo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTAgPSBDbmlsOzxicj4NCsKg IMKgIMKgIMKgIFZNUjEoVjEwKTt9PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNRU1CRVIgWCBZ KSovPGJyPg0KfTxicj4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PGJyPg0KVW5rbm93biB4LCBrbm93 biBsaXN0LCAoZGlzYXNzZW1ibGUgJiMzOTsobGFtYmRhICh4IHkgeiB3KcKgIChtZW1iZXIgeCAo bGlzdCB5IHogdykpKSk8YnI+DQpsb29wIHVucm9sbGVkLCB0eXBlLW9mIHggcHVsbGVkIG91dDxi cj4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PGJyPg0Kc3RhdGljIG9iamVjdCBMSTFfX0NNUF9BTk9O X19fZ2F6b25rXzIyMDU2NjdfMShvYmplY3QgVjUsb2JqZWN0IFY2LG9iamVjdCBWNyxvYmplY3Qg VjgpPGJyPg0Ke8KgIMKgIMKgIMKgIFZNQjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAgwqAgLyoo TUVNQkVSIFggKExJU1QgWSBaIC4uLikpKi88YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY5Ozxi cj4NCsKgIMKgIMKgIMKgIFY5PSBsaXN0KDMsKFY2KSwoVjcpLChWOCkpOzxicj4NCsKgIMKgIMKg IMKgIHtmaXhudW0gVjEwOzxicj4NCsKgIMKgIMKgIMKgIFYxMD0gMTs8YnI+DQrCoCDCoCDCoCDC oCAvKihFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgc3dpdGNoKC8q IChBUFBMSUVEIFRQNCBTWVNURU06OlgpICovdHA0KFY1KSl7PGJyPg0KwqAgwqAgwqAgwqAgY2Fz ZSAtMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ4Ozxicj4NClQ4Ojs8YnI+DQrCoCDCoCDCoCDC oCBnb3RvIFQ2Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDCoCDCoCDC oCBnb3RvIFQ5Ozxicj4NClQ5Ojs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDI6PGJyPg0KwqAgwqAg wqAgwqAgZ290byBUMTA7PGJyPg0KVDEwOjs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDM6PGJyPg0K wqAgwqAgwqAgwqAgZ290byBUMTE7PGJyPg0KVDExOjs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDQ6 PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTI7PGJyPg0KVDEyOjs8YnI+DQrCoCDCoCDCoCDCoCBj YXNlIDU6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTM7PGJyPg0KVDEzOjs8YnI+DQrCoCDCoCDC oCDCoCBjYXNlIDY6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTQ7PGJyPg0KVDE0Ojs8YnI+DQrC oCDCoCDCoCDCoCBnb3RvIFQ0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGRlZmF1bHQ6PGJyPg0K wqAgwqAgwqAgwqAgZ290byBUMTU7PGJyPg0KVDE1Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ2 Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4N CsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChFUUwt SVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNjs8YnI+DQpUNjo7 PGJyPg0KwqAgwqAgwqAgwqAgVjEwPSAwOzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7PGJyPg0K PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDs8YnI+DQpUNDo7PGJyPg0KwqAgwqAgwqAgwqAgZ290 byBUMzs8YnI+DQpUMzo7PGJyPg0KwqAgwqAgwqAgwqAgLyooTUFQTCAoTEFNQkRBIChTWVNURU06 OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQUiBT WVNURU06OkZVTiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQIFNZU1RF TTo6RiBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNURU06Olgp IChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVN OjpURVNUIFNZU1RFTTo6SVRFTSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAv KihTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkq Lzxicj4NCsKgIMKgIMKgIMKgIHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMDo8 YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNzs8YnI+DQpUMjc6Ozxicj4NCsKgIMKgIMKgIMKgIGlm KCEoKChWNSkpPT0oKFY2KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+DQrCoCDC oCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0KPGJyPg0KwqAgwqAgwqAg wqAgY2FzZSAxOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI4Ozxicj4NClQyODo7PGJyPg0KwqAg wqAgwqAgwqAgaWYoIShlcWwoKFY1KSwoVjYpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI0 Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNTs8YnI+DQo8YnI+ DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAg wqAgZ290byBUMjQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0KVDI1Ojs8 YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQy NDs8YnI+DQpUMjQ6Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDIxOzxicj4NCjxicj4NCsKgIMKg IMKgIMKgIC8qIEVORCAoU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZ IFNZU1RFTTo6WSkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNU RU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjM7PGJy Pg0KVDIzOjs8YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFYxMSA9IChWOSk7PGJyPg0KwqAgwqAg wqAgwqAgVk1SMShWMTEpO308YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMTs8YnI+DQpUMjE6Ozxi cj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoKExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFSRSAjKSAu Li4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RFTTo6TE1BUCBTWVNURU06 OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooKExBTUJEQSAoU1lTVEVN OjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZ U1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAg wqAgLyooU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6 WSkpKi88YnI+DQrCoCDCoCDCoCDCoCBzd2l0Y2goVjEwKXs8YnI+DQrCoCDCoCDCoCDCoCBjYXNl IDA6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzc7PGJyPg0KVDM3Ojs8YnI+DQrCoCDCoCDCoCDC oCBpZighKCgoVjUpKT09KChWNykpKSl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0K wqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxicj4NCjxicj4NCsKgIMKg IMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzODs8YnI+DQpUMzg6Ozxicj4N CsKgIMKgIMKgIMKgIGlmKCEoZXFsKChWNSksKFY3KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3Rv IFQzNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzU7PGJyPg0K PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKg IMKgIMKgIGdvdG8gVDM0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxicj4NClQz NTo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzM7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290 byBUMzQ7PGJyPg0KVDM0Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMTs8YnI+DQo8YnI+DQrC oCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVC1OTy1LRVkgU1lTVEVNOjpYIChTWVNURU06 OktFWSBTWVNURU06OlkpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OlRFU1Qg U1lTVEVNOjpJVEVNIChDQVIgU1lTVEVNOjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDMz Ozxicj4NClQzMzo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTIgPSAvKiAoQ0RSIFNZU1RF TTo6WCkgKi9WOS0mZ3Q7Yy5jX2Nkcjs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFYxMik7fTxicj4N CsKgIMKgIMKgIMKgIGdvdG8gVDMxOzxicj4NClQzMTo7PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5E ICgoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSovPGJyPg0K wqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiAoQ0RSIFNZU1RFTTo6WCkpKi88 YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikg U1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpURVNUIFNZU1RFTTo6SVRF TSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRFU1QtTk8t S0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkqLzxicj4NCsKgIMKgIMKgIMKg IHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMDo8YnI+DQrCoCDCoCDCoCDCoCBn b3RvIFQ0Nzs8YnI+DQpUNDc6Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWNSkpPT0oKFY4KSkp KXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAg wqAgwqAgwqAgZ290byBUNDU7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgY2FzZSAxOjxicj4NCsKg IMKgIMKgIMKgIGdvdG8gVDQ4Ozxicj4NClQ0ODo7PGJyPg0KwqAgwqAgwqAgwqAgaWYoIShlcWwo KFY1KSwoVjgpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ0Ozxicj4NCsKgIMKgIMKgIMKg IH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3Rv IFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDQ7PGJyPg0K PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDU7PGJyPg0KVDQ1Ojs8YnI+DQrCoCDCoCDCoCDCoCBn b3RvIFQ0Mzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQpUNDQ6Ozxicj4N CsKgIMKgIMKgIMKgIGdvdG8gVDQxOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lT VEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkpKi88YnI+ DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBTWVNU RU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDM7PGJyPg0KVDQzOjs8YnI+DQrCoCDC oCDCoCDCoCB7b2JqZWN0IFYxMyA9IC8qIChDRFIgU1lTVEVNOjpYKSAqL1Y5LSZndDtjLmNfY2Ry LSZndDtjLmNfY2RyOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjEzKTt9PGJyPg0KwqAgwqAgwqAg wqAgZ290byBUNDE7PGJyPg0KVDQxOjs8YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKChMQU1CREEg KFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDC oCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0K wqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OkxNQVAgU1lTVEVNOjpGIChDRFIgU1lTVEVNOjpY KSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiBTWVNU RU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUFIgU1lTVEVNOjpG VU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoTUFQTCAoTEFNQkRBIChTWVNURU06 OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTQgPSBDbmls Ozxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjE0KTt9fX08YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQg KE1FTUJFUiBYIChMSVNUIFkgWiAuLi4pKSovPGJyPg0KfTxicj4NCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PGJyPg0KS25vd24gcmVzdWx0LCAoZGlzYXNzZW1ibGUgJiMzOTsobGFtYmRhICh4IHkgeiB3 KcKgIChkZWNsYXJlIChzeW1ib2wgeikpPGJyPg0KwqAgwqAgwqAgwqAgKG1lbWJlciB6IChsaXN0 IDMgeiB3KSkpKTxicj4NCmxvb3AgZWxpbWluYXRlZDxicj4NCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PGJyPg0Kc3RhdGljIG9iamVjdCBMSTFfX0NNUF9BTk9OX19fZ2F6b25rXzIyMDU2NjdfMShvYmpl Y3QgVjUsb2JqZWN0IFY2LG9iamVjdCBWNyxvYmplY3QgVjgpPGJyPg0Ke8KgIMKgIMKgIMKgIFZN QjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAgwqAgLyooTUVNQkVSIFogKExJU1QgMyBaIC4uLikp Ki88YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY5Ozxicj4NCsKgIMKgIMKgIMKgIFY5PSBsaXN0 KDMsbWFrZV9maXhudW0oMyksKFY3KSwoVjgpKTs8YnI+DQrCoCDCoCDCoCDCoCAvKihNQVBMIChM QU1CREEgKFNZU1RFTTo6WCkgKElGICMgIykpIExJU1QpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihT WVNURU06OkxNQVBSIFNZU1RFTTo6RlVOIExJU1QpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNU RU06OkxNQVAgU1lTVEVNOjpGIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RF TTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyoo KExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKg IMKgIMKgIMKgIHtvYmplY3QgVjEwID0gLyogKENEUiBTWVNURU06OlgpICovVjktJmd0O2MuY19j ZHI7PGJyPg0KwqAgwqAgwqAgwqAgVk1SMShWMTApO308YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQg KChMQU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88YnI+DQrC oCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06Olgp KSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OkxNQVAgU1lTVEVNOjpGIFNZU1RF TTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQUiBTWVNURU06OkZV TiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNQVBMIChMQU1CREEgKFNZU1RFTTo6 WCkgKElGICMgIykpIExJU1QpKi99PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNRU1CRVIgWiAo TElTVCAzIFogLi4uKSkqLzxicj4NCn08YnI+DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTxicj4NClVu a25vd24geCwga25vd24gbGlzdCBvZiBzeW1ib2xzIChkaXNhc3NlbWJsZSAmIzM5OyhsYW1iZGEg KHggeSB6IHcpPGJyPg0KwqAgwqAgwqAgwqAgKGRlY2xhcmUgKHN5bWJvbCB5IHogdyApKSAobWVt YmVyIHggKGxpc3QgeSB6IHcpKSkpPGJyPg0KbG9vcCB1bnJvbGxlZCwgdHlwZS1vZiB4IHB1bGxl ZCBvdXQsIHdoZW4geCBpcyBlLmcuIGludGVnZXIgZXFsIHN0aWxsPGJyPg0KwqAgwqAgwqAgwqAg b3B0aW1pemVkIHRvIGVxIGVsZW1lbnQgd2lzZSBhcyBhbGwgbGlzdCBlbGVtZW50cyBhcmUgc3lt Ym9sLjxicj4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PGJyPg0Kc3RhdGljIG9iamVjdCBMSTFfX0NN UF9BTk9OX19fZ2F6b25rXzIyMDU2NjdfMShvYmplY3QgVjUsb2JqZWN0IFY2LG9iamVjdCBWNyxv YmplY3QgVjgpPGJyPg0Ke8KgIMKgIMKgIMKgIFZNQjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAg wqAgLyooTUVNQkVSIFggKExJU1QgWSBaIC4uLikpKi88YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0 IFY5Ozxicj4NCsKgIMKgIMKgIMKgIFY5PSBsaXN0KDMsKFY2KSwoVjcpLChWOCkpOzxicj4NCsKg IMKgIMKgIMKgIHtmaXhudW0gVjEwOzxicj4NCsKgIMKgIMKgIMKgIFYxMD0gMTs8YnI+DQrCoCDC oCDCoCDCoCAvKihFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgc3dp dGNoKC8qIChBUFBMSUVEIFRQNCBTWVNURU06OlgpICovdHA0KFY1KSl7PGJyPg0KwqAgwqAgwqAg wqAgY2FzZSAtMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ4Ozxicj4NClQ4Ojs8YnI+DQrCoCDC oCDCoCDCoCBnb3RvIFQ2Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDC oCDCoCDCoCBnb3RvIFQ5Ozxicj4NClQ5Ojs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDI6PGJyPg0K wqAgwqAgwqAgwqAgZ290byBUMTA7PGJyPg0KVDEwOjs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDM6 PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTE7PGJyPg0KVDExOjs8YnI+DQrCoCDCoCDCoCDCoCBj YXNlIDQ6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTI7PGJyPg0KVDEyOjs8YnI+DQrCoCDCoCDC oCDCoCBjYXNlIDU6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTM7PGJyPg0KVDEzOjs8YnI+DQrC oCDCoCDCoCDCoCBjYXNlIDY6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTQ7PGJyPg0KVDE0Ojs8 YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGRlZmF1bHQ6 PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTU7PGJyPg0KVDE1Ojs8YnI+DQrCoCDCoCDCoCDCoCBn b3RvIFQ2Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KwqAgwqAgwqAgwqAg fTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5E IChFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNjs8YnI+ DQpUNjo7PGJyPg0KwqAgwqAgwqAgwqAgVjEwPSAwOzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7 PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDs8YnI+DQpUNDo7PGJyPg0KwqAgwqAgwqAg wqAgZ290byBUMzs8YnI+DQpUMzo7PGJyPg0KwqAgwqAgwqAgwqAgLyooTUFQTCAoTEFNQkRBIChT WVNURU06OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpM TUFQUiBTWVNURU06OkZVTiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQ IFNZU1RFTTo6RiBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNU RU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyoo U1lTVEVNOjpURVNUIFNZU1RFTTo6SVRFTSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDC oCDCoCAvKihTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVN OjpZKSkqLzxicj4NCsKgIMKgIMKgIMKgIHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNh c2UgMDo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNzs8YnI+DQpUMjc6Ozxicj4NCsKgIMKgIMKg IMKgIGlmKCEoKChWNSkpPT0oKFY2KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+ DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0KPGJyPg0KwqAg wqAgwqAgwqAgY2FzZSAxOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI4Ozxicj4NClQyODo7PGJy Pg0KwqAgwqAgwqAgwqAgaWYoISgoKFY1KSk9PSgoVjYpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdv dG8gVDI0Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNTs8YnI+ DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAg wqAgwqAgwqAgZ290byBUMjQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0K VDI1Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBn b3RvIFQyNDs8YnI+DQpUMjQ6Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDIxOzxicj4NCjxicj4N CsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RF TTo6S0VZIFNZU1RFTTo6WSkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVT VCBTWVNURU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBU MjM7PGJyPg0KVDIzOjs8YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFYxMSA9IChWOSk7PGJyPg0K wqAgwqAgwqAgwqAgVk1SMShWMTEpO308YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMTs8YnI+DQpU MjE6Ozxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoKExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFS RSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RFTTo6TE1BUCBT WVNURU06OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooKExBTUJEQSAo U1lTVEVNOjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKg IC8qKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAg wqAgwqAgwqAgLyooU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZ U1RFTTo6WSkpKi88YnI+DQrCoCDCoCDCoCDCoCBzd2l0Y2goVjEwKXs8YnI+DQrCoCDCoCDCoCDC oCBjYXNlIDA6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzc7PGJyPg0KVDM3Ojs8YnI+DQrCoCDC oCDCoCDCoCBpZighKCgoVjUpKT09KChWNykpKSl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7 PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxicj4NCjxicj4N CsKgIMKgIMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzODs8YnI+DQpUMzg6 Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWNSkpPT0oKFY3KSkpKXs8YnI+DQrCoCDCoCDCoCDC oCBnb3RvIFQzNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzU7 PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4N CsKgIMKgIMKgIMKgIGdvdG8gVDM0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxi cj4NClQzNTo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzM7PGJyPg0KPGJyPg0KwqAgwqAgwqAg wqAgZ290byBUMzQ7PGJyPg0KVDM0Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMTs8YnI+DQo8 YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVC1OTy1LRVkgU1lTVEVNOjpYIChT WVNURU06OktFWSBTWVNURU06OlkpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06 OlRFU1QgU1lTVEVNOjpJVEVNIChDQVIgU1lTVEVNOjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIGdv dG8gVDMzOzxicj4NClQzMzo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTIgPSAvKiAoQ0RS IFNZU1RFTTo6WCkgKi9WOS0mZ3Q7Yy5jX2Nkcjs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFYxMik7 fTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDMxOzxicj4NClQzMTo7PGJyPg0KwqAgwqAgwqAgwqAg LyogRU5EICgoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSov PGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiAoQ0RSIFNZU1RFTTo6 WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMp IC4uLikgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpURVNUIFNZU1RF TTo6SVRFTSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRF U1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkqLzxicj4NCsKgIMKg IMKgIMKgIHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMDo8YnI+DQrCoCDCoCDC oCDCoCBnb3RvIFQ0Nzs8YnI+DQpUNDc6Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWNSkpPT0o KFY4KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJy Pg0KwqAgwqAgwqAgwqAgZ290byBUNDU7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgY2FzZSAxOjxi cj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ4Ozxicj4NClQ0ODo7PGJyPg0KwqAgwqAgwqAgwqAgaWYo ISgoKFY1KSk9PSgoVjgpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ0Ozxicj4NCsKgIMKg IMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDC oCBnb3RvIFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDQ7 PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDU7PGJyPg0KVDQ1Ojs8YnI+DQrCoCDCoCDC oCDCoCBnb3RvIFQ0Mzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQpUNDQ6 Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQxOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIC8qIEVO RCAoU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkp Ki88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENB UiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDM7PGJyPg0KVDQzOjs8YnI+ DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFYxMyA9IC8qIChDRFIgU1lTVEVNOjpYKSAqL1Y5LSZndDtj LmNfY2RyLSZndDtjLmNfY2RyOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjEzKTt9PGJyPg0KwqAg wqAgwqAgwqAgZ290byBUNDE7PGJyPg0KVDQxOjs8YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKChM QU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88YnI+DQrCoCDC oCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06OlgpKSov PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OkxNQVAgU1lTVEVNOjpGIChDRFIgU1lT VEVNOjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQIFNZU1RFTTo6 RiBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUFIgU1lT VEVNOjpGVU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoTUFQTCAoTEFNQkRBIChT WVNURU06OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTQg PSBDbmlsOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjE0KTt9fX08YnI+DQrCoCDCoCDCoCDCoCAv KiBFTkQgKE1FTUJFUiBYIChMSVNUIFkgWiAuLi4pKSovPGJyPg0KfTxicj4NCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PGJyPg0KPGJyPg0KVGFrZSBjYXJlLDxicj4NCjxicj4NCkRhdmlkIFNjaGVyZmdl biB2aWEgTWF4aW1hLWRpc2N1c3M8YnI+DQombHQ7PGEgaHJlZj0ibWFpbHRvOm1heGltYS1kaXNj dXNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJl ciI+bWF4aW1hLWRpc2N1c3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PC9hPiZndDsgd3JpdGVzOjxi cj4NCjxicj4NCiZndDsgSGVsbG8sPGJyPg0KJmd0Ozxicj4NCiZndDsgSSBub3RpY2VkIHRoYXQg R0NMIDIuNy4xIGNvbXBpbGVzIHRoZXNlIGZ1bmN0aW9ucyBkaWZmZXJlbnRseTo8YnI+DQomZ3Q7 PGJyPg0KJmd0OyAoZGVmdW4gZiAoeCkgKG1lbWJlciB4ICYjMzk7KGEgYiBjKSkpPGJyPg0KJmd0 OyAoZGVmdW4gZyAoeCkgKG1lbWJlciB4ICYjMzk7KGEgYiBjKSA6dGVzdCAjJiMzOTtlcSkpPGJy Pg0KJmd0Ozxicj4NCiZndDsgSSBzdXBwb3NlIHRoYXQmIzM5O3MgYmVjYXVzZSBGIHVzZXMgdGhl IGRlZmF1bHQgRVFMIGFzIHRoZSB0ZXN0LiBJIHRyaWVkIHRvIHVuZGVyc3RhbmQgdGhlIEMgY29k ZSBpdCBnZW5lcmF0ZWQsIGJ1dCBpdCB3YXMgaW5jb21wcmVoZW5zaWJsZSB0byBtZS4gQW55d2F5 cywgSSBzYXc8YnI+DQomZ3Q7IHRoYXQgdGhlIHNlY29uZCBmdW5jdGlvbiwgRywgaGFkIGlubGlu ZWQgdGhlIE1FTUJFUiBjYWxsIGludG8gKE9SIChFUSBYICYjMzk7QSkgKEVRIFggJiMzOTtCKSAo RVEgWSAmIzM5O0MpKSwgd2hpY2ggaXMgcmVhc29uYWJsZS4gQnV0IHdoeSBkb2VzIEYgZ2V0IGNv bXBpbGVkIGRpZmZlcmVudGx5Pzxicj4NCiZndDs8YnI+DQomZ3Q7IFNob3VsZG4mIzM5O3QgdGhl IGNvbXBpbGVyIG5vdGljZSB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gTUVNQkVSIGlzIGEg bGl0ZXJhbCBsaXN0IG9mIHN5bWJvbHMgYW5kIGF1dG9tYXRpY2FsbHkgdXNlIEVRIGluc3RlYWQg b2YgdGhlIGRlZmF1bHQgRVFMIHRlc3Q/IFRoYXQ8YnI+DQomZ3Q7IHdvdWxkIGJlIGFuIGVhc3kg YW5kIHNhZmUgb3B0aW1pemF0aW9uLjxicj4NCiZndDs8YnI+DQomZ3Q7IFRoZSBzYW1lIGdvZXMg Zm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byBNRU1CRVIgaXMgYSBsaXRl cmFsIHN5bWJvbC48YnI+DQomZ3Q7PGJyPg0KJmd0OyBNYXhpbWEgaXMgZnVsbCBvZiBzdWNoIGlu c3RhbmNlcyB3aGVyZSBNRU1CRVIgaXMgdXNlZCBhcyBhIHNob3J0ZXIgd2F5IHRvIHdyaXRlIChP UiAoRVEgLi4uKSAoRVEgLi4uKSAuLi4pLCBhbmQgJnF1b3Q7OnRlc3QgIyYjMzk7ZXEmcXVvdDsg aGFzIG1vc3RseSBiZWVuIHJlbW92ZWQgYmVjYXVzZSBpdCB3YXM8YnI+DQomZ3Q7IGJlbGlldmVk IHRoYXQgYW55IG1vZGVybiBMaXNwIGNvbXBpbGVyIHdvdWxkIGFwcGx5IHRoaXMgb3B0aW1pemF0 aW9uIGF1dG9tYXRpY2FsbHkuIEF0IGxlYXN0IFNCQ0wgZG9lcy4gKENDTCBkb2VzbiYjMzk7dCwg SSBoYXZlIGZpbGVkIGEgcmVwb3J0IGFscmVhZHkuKTxicj4NCiZndDs8YnI+DQomZ3Q7IEJlc3Qg cmVnYXJkczxicj4NCiZndDsgRGF2aWQgU2NoZXJmZ2VuPGJyPg0KJmd0Ozxicj4NCiZndDsgX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+DQomZ3Q7IE1h eGltYS1kaXNjdXNzIG1haWxpbmcgbGlzdDxicj4NCiZndDsgPGEgaHJlZj0ibWFpbHRvOk1heGlt YS1kaXNjdXNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9y ZWZlcnJlciI+TWF4aW1hLWRpc2N1c3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PC9hPjxicj4NCiZn dDsgPGEgaHJlZj0iaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8v bWF4aW1hLWRpc2N1c3MiIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFu ayI+aHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbWF4aW1hLWRp c2N1c3M8L2E+PGJyPg0KJmd0Ozxicj4NCjxicj4NCi0tIDxicj4NCkNhbW0gTWFndWlyZcKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDxh IGhyZWY9Im1haWx0bzpjYW1tQG1hZ3VpcmVmYW1pbHkub3JnIiB0YXJnZXQ9Il9ibGFuayIgcmVs PSJub3JlZmVycmVyIj5jYW1tQG1hZ3VpcmVmYW1pbHkub3JnPC9hPjxicj4NCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PGJyPg0KJnF1b3Q7VGhlIGVhcnRoIGlzIGJ1dCBvbmUgY291bnRyeSwgYW5kIG1hbmtp bmQgaXRzIGNpdGl6ZW5zLiZxdW90O8KgIC0twqAgQmFoYSYjMzk7dSYjMzk7bGxhaDxicj4NCjwv YmxvY2txdW90ZT48L2Rpdj48L2Rpdj48L2Rpdj4NCg== --000000000000250a9306342dd358-- --===============0800716271649280252== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --===============0800716271649280252== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Maxima-discuss mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/maxima-discuss --===============0800716271649280252==--