Changeset 71a4d7 in git
- Timestamp:
- Feb 18, 2013, 5:10:09 PM (10 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- 65148c4d2a607796fbd578ae2f3219965019aaae
- Parents:
- d826a82d3b17fc5f6da647679a15d4f1af7657fdf1becf6c8965f6addf0a63ca09a9418a48c294be
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/feOptTab.h
rf1becf6 r71a4d7 136 136 "SECS", "Do not display times smaller than SECS (in seconds)", feOptString, (void*) "0.5", 0}, 137 137 138 {"cpus", required_argument, LONG_OPTION_RETURN, 139 "#CPUs", "maximal number of CPUs to use", feOptInt, (void*)2, 0}, 140 141 138 142 {"MPport", required_argument, LONG_OPTION_RETURN, 139 143 "PORT", "Use PORT number for conections", feOptString, 0, 0}, -
Singular/ipshell.cc
rf1becf6 r71a4d7 5104 5104 else // (0/p, a, b, ..., z) 5105 5105 { 5106 assume( (ch == 0) || (ch==IsPrime(ch)) ); 5107 5108 // if ((pars > 1) && (ffChar)) 5109 // { 5110 // WerrorS("too many parameters"); 5111 // goto rInitError; 5112 // } 5106 if ((ch!=0) && (ch!=IsPrime(ch))) 5107 { 5108 WerrorS("too many parameters"); 5109 goto rInitError; 5110 } 5113 5111 5114 5112 char ** names = (char**)omAlloc0(pars * sizeof(char_ptr)); -
Tst/BuchDL/Ex_L6.res.gz.uu
rf1becf6 r71a4d7 1 1 begin 644 Ex_L6.res.gz 2 M'XL(" +HMSU```T5X7TPV+G)E<P#<6UMO&SF6?O>OX,S+2"F5FG>R[&TO=C*=3 M 7@?>;L#VOFS0:<ARV58B2X8D)RHW]K_O=\BZL"3E_K8&XI3(PW,^GCM9\N754 M O\Y^8XR)4W9^]D_V]\UZ,Y[/KO]^<G19S\A3AL$_9XO99C`\.:+_V>DI^V7[5 M Y[D=+\J/X_5FLFFIU2EKG_6X>S9C]M-//Q_\8>`U>7B<E\R./3M,4_^T[.R86 M +1\WL^5BL"IO+O\Y[."Z4[::+>[8!?N9\1';#L1X;(8C-G_L:/PI>US.*W8K7 M 0`2*X5N9T7^9?+$=R"%^F?BLZ%DGW(MFI<1*HA##L"0+O]HEA@8TV+8K!6]68 M JG2EBBN#?!49Z,B@6RF:E3I=J1.T*HK+:%TJ4S8K3;K2)"O#(A7EIS)AQME-9 M .9FS,ZR\%6_EZ%;2+S6ZU:-;TQ'J4S:?K3?LG.@FT_7F9G"6\#&G;#U[+@?G10 M PQ-&/S_]Q!9/#]?EBBUOV;K<K-ELP3;W);LII\N'Q^5Z1D8]$K+E8$^Q*#\E11 M %^T&W9B=OQ'\CY.C/]^(/WXV85>YP"<9/^GX2<5/*G[2\9.,GTS\!*OKEJ]O12 M A?7Y-O/%N)M/)=7SDB?SJ>QF7B3S*9IF7B;S!_!)-:ZU+1-UCQJ8G=ZE;O0N13 M ,2@Z`:;39C>(8(HA(W9BYJ:+&>E2CY@]3!X'%Z/$TM)W@2^#FMCM;,M>GA^S14 M ^QG,?3_9L,NSWW[][_/_N&`EC'[]=/<W_+#!PV0QO7\`XP_+<CZ?W6%?\_7T15 M OERS7U9WY?5BMAXVC!7T&[;5>AKMKIT5W>;:,;FSHE-6;ZDZL#1)7\HDSW8_16 M E:4I3"@VF"X7F]GBJ;R!CZ_7\.@A^V1B:_G"J6>W;+!8;@8WY>UL4=X,-JO917 M 9''W7_\Y'`[_JO-S&(DIFOUON]:/*9JB%5N;J**QV:^PV=UJ"6V6*XK/$(B]18 M !,IF:S:9K\K)346<&A::U_%]!0X-FL&OX'!U<H00.3YJ8H6T>M0$!H7%41,%19 M %`-'C<O';'?4>'A(OCJ+N>FMRF(R/@*/CG/AK+$RVNVMX`B75$PNNDG7DYDW20 M PVI'>NZ\D(9WN?YMD25<?(LNPLK4#K7-6EJ3B2/(2\`:99U6PFK>$DE@EEP(21 M )[QKMY%UVQ#B1:P6(//"*2\;?'4M>"M<)JPP'#_)J,M505+B*)'I3!>J%J%;22 M 903^J!'"2..=+VID+7.;B\@G&;2Y]A%'3:0R)_FN/F4L))ET*4,)L%P*)[U)23 M U"J*'$J`!EJX1:?H1M->:%LXV1B\A>AS';T@Q>AS9:T4O%"M6DVFG4B,TT:S24 M [I)#<-MFN,NX/4=NIE5_NG'M9EKWIQMG;Z9-?[IS_X;`]@D^'1#-`M<N""'225 M #/N]7>P'34-;'-Q2/XQJ6L,/[B\)K(90?&*G7PRUAH'<T\37!5^SOC-4",=F26 M 6.\KYAL"M.%B]E3V-2'[9CP>_]'RL'NJ_*ZP[#-U>VK_MHCL<_/[-OB^N.RS27 M +;K::7GR++Y01_7WU5$K/U5'_UPOYQ_*KI:&C[NEU,*34O+!U4CRNGNEJBDY28 M NYG=S="YKN^73_,;=HWF=;9^G$^J\N8(!"]>L//)W5.Y6I4L<%@=LZOEDJ'/29 M J=AL4ZXF5';7?ZMI5\OEYB6V.0'0U?%QL^*W99A9L]OET^+F;Y0I_YW-:[['30 M ;-&;KF?+R0=J`-IM'1\W"^)6/DF6[K?5@VX39G]3G]A-LZR+E6_:7[/<[AOO31 M <35[P/'@UZO_Z4Q7C^T9SS7M2M<%672FL\6&O1^]Z\;0&=TN5VSP_F=QPM[_32 M V\^A1[R"F=]GV;!U40=W9>PO<$/W@U]9UP)1,_E<KI87DYO!U9OW?P!:@L.A33 M VO2=Z")XT?\C_W#RN_S#J1_R#X>$?L!P%XWE_F+PC,4&([`)TGTP2JCH^P7Q34 M .RJ!Z\Y/:9O@NN3^R;KKNES]/8)]??*[N@RNB*VUSNS:-O_UZ/7KT?EY.^-Y35 M Z^;R@+9:,F3BOQA['3F_[SA[1?[/SNO#_6:YHO6O(7PDAP2!;+@J-T^KQ1HN36 M MT"Z7F\FB+5(O&;+Q;QJF9G`+.!Y1]9[5^,YI\N!=RD>%R@)$F$Z/W_S[H_137 M ZS=R/`[TKX<)PF(<,W.MF,N,M#1X_9HR=AN.!3;8?9#UV?CJ,DGKW:U$=/:G38 M ^63%KB<H.\GQN4B.B8*U::*`4R)9L8N7[2&I"?O+&/84R_](9_[!ICAK;5#839 M )N'L/:)[D(_WL^D]!H*A5^$W\$1D:S;8W)?$A^Y)YN66XO,IQ%8XNZVA[_)F40 M 3`172S:93E$OP\5*PV9OV8AMJL>2#9!NB6XQ>2C9!?LXP3D0I?9N$:O99AEF41 M HY'9A\G\J1R&TT[XZ<Z<$>])IQ.Z^6EF7[;V*NQIT"J-AVS(V/1^LH*[8&B]42 M F4W9,>-4]P/8X[;8CMCDYB;<#<'-V]%AY"#8(U@\E.!!H([9&8L3#[-%N/^J43 M ?X[9X(Q:H7I99_(/$^CWF)DX'GZNY\OI^\#[F"U7-P$PFS\F%-W/<5#>FH6L44 M ((:,&C!&K1VCGBAFBGW.,N7\LE602]/J#VJGX>G'/9[[^FHIBS[E)Q48Z07G45 M ??H#*FTH19_RLTINUL@#:[Y-[0TG]1GI!PTAN*YOCH)CATS12Q-[\72D9+NV46 M *Q/)(%VS$2_T_EW>H>#:W,]6-RVC]EHEYV/?WH3PL6PO&L*S3IY-]]P(Z]PH47 M .0\)WFOQDX,P#M'I3".]GA2]<V!R\A1"["P;8)VPPG.E"N^=+GRAO?8R/WN!48 M ">&,<=QP;;PN-(J?;T_+0O2.@"EJH7:%\#$_(",+,@H<=(3B2IJ"*^Z$UK*349 M T3L/!ATV,^;K9.1?EM$[Z07;-#/N*Y65?5E9OCU("=$=L(3DR3-L\WXVG[.+50 M T8487;P<O1N]/VDG0_OVN5<QPJ(-+S^RRZ\]>0FZGJ[?O<2+Y,%V5(V>>R]?51 M !%U-=Q?)SR9[5KE\EKD<L4IFS\@N([:5F:RV^3:O<LRH;BWBB@KMJUX_<D;]52 M B$"$OCHY>D5'?&*")QS3B7>[N'N3$*G2N<XR<9UL6R^<[]/K\0$?389Q9SO[53 M 0A?V,'EDC_<SD%V,:.N3=E:A$ZMSQP+3\7$`VL&K(00"?)-J,7D2S8;9D\^Q54 M %*TBGS%-O,Z:AJ;Y08)9/UVC<FR>-B4Z"VJ^GEG;N0@%+PBKUS-8?79;#<Z>55 M T=J=8/`DX;$J'Y8?2D;G'797+JBI1W=W=/9,>H35!I-0%/"9;I,DW5Y59+UL56 M D$]@O]9KDVOV9FT[U47F'IO.3G0/W^R95(66YVE:$F@ZCU5T!NMOF8<M5^F657 M [6F].-ES56^Z.L$F*D+6;JF*8/+MWF9<LIFPAJ@2K#YVA:^"L,1=`W%T6!+X58 M *BYN_8UN[1M?K/EV3'67B5_5T#I/U:+Q5!D]]?J@IVJY[ZG7W:SZC*>*;_#459 M A*7^<4_5Y@<\E29;;]UWTT2]=L]!L\%UVO$D-["'W/TZ]1#=>L".`S3VQPS960 M /PAJ%Z7F/PB!;F4/W9&@`4QOMYJAG3L281HON:R3]/5HVGO7)XQL[/4+2*X561 M Y>9I@Z*C4C$9T^&P%3_X!=O"`?2<D$]MIJ8:_V1F,$+7IC])#.`S'C"B0-.R62 M Z^Z;]A<W-%V1WF?7T-B$IB?`-=&A8G30KK>]R#"^VU)XQ7DY.D\VO)/A:3&)63 M &`4P+9D]F.K/8^PTX8(U.X&T+_>KA"5%H)?38I#MI35XZT!.<_H>0#:8RGR:64 M =XV+E?L)[3/4ZHOIK9??B`,M;]/68)KX='+;F-"G!&8_\0UZ>&S7^5B7//M>65 M %R1'%VITV>FO^&(;5'QK&T2WAKT`BQDX"3#7?J5CQ.[H*R@5*D>55RHV/_1)66 M 5AE&1+>D^2['*I2]]=.<+EH&MZ.[T1:J7IT<53ZO7%;97%4FJW0&;F#4YA7767 M U=Y/4':RZ)*M->@J.%&=7^N;[D]?]O3>"5?M*\XH2%8*V5:T+R;IN3G@B)$868 M M4&<W+.EAQ2W\Q)%1!;-[,[;$)ED5;?S;D/M0FKHNF-0>LSQO0.0!-1V!5V>69 M U1%(_6$Y1R9<3#;E(`R2@89DH9:<.BZ8]4P$]!88\H`AZ3A]TB9]CJQGID!)70 M IMHQ0?*ZO+_C1/$MQ\-J]Y]5NS^@]D.J]?ZP:GL'SP1,D1QEZ`*O?99U0'=171 M '._E]J/XHGR8K-XCB"7_UB"F.[W/!S'=</6"6%(4-:<7F<0N77KMA>Q1I=OY72 M KI-,!J&N3SK3G_WFN2CZWUNJ9*,MR3LM2BZ2YSTM2OY%+:IOU*+D>MS[-EXX73 M $&YZ>I2\U2,I,=\HV4W9>HKT6^4;[;.-L=G&<OR3^*<Z4A??\DPF=`<[>RA774 M W53S=;_[O=2Y&794T.']"3O:6I6;PA36;"V:.;FUHLHLVF*D13QGRAKKK-]:75 M 7F7:ZJTI8&O'/=8(A]$<\P9UV=),CA.6<U[SK?$@TYP6..1;73B'3HR69Q((76 M N4$X$U&&>-)2*6>)4&9**UM(#P86RZ26Q,%0=-%R)T'F,W2:6FD-L%B3"UYH77 M :W5A:0T.UAJGSXC!("*M<T9S[K=&(Z<(;CDQ1R7(T?U""P%ACI#2!BR#W%P#78 M $PII%`W/UE(:*7W@`5!(:A[TFMCH#"R5]H%8(A$HXY0%&X%Z`Q<S2BGPS*6S79 M 1GO2D@%BHG=>:F((;1KNM?;$#K804G$A.7%##I12R2+H2A!D902J/7WDX`_P80 M 2`];7:"\"0X=<N*?26/!F_2AJPR>8K"ON&F9:2C1(4(]\5>9$AQ&#>($[45P81 M XQV"B/B;3$BGN$<9(A$VPQ'/<S#G6^TA49*30&/:H<!*;8J"]I-I'T@@#0N@82 M >DV;EI3(H0OLFTPA2(U6%1QJ#7O1&2:XXL2N@&0K"PYZ2Y(L]H#S,@<?B(*M83 M <!3EA3/X:"$9QI6&M&"J@C1"RD$+[Z4(3B5QW)'P%A=U"&MR[>&R-,>A;[J/84 M *@H':T*P)EM#%-D:DJ%**Z0)QH5H`#':%MX92:)=YI0I*"8@VF=P6UF02*VK85 M (K,*5+"I5I7@.:F*-)XKCVT$9</)"K"2A`).ZYWGU@5;`I,V6%$KFIR@T(5786 M L!E`P`G0VGMX5@`!SRH</)!\#C!<#M^'8A&@A`/:*32"`TH&D((XH3&2F),$87 M RSMKPV9$)42.2(1.1*ZTB,J!I%HO`$A:(38>^!RB-.S4`9V&=CAE"*`QN;=P88 M H6`X0]C@`,;`A0D,+.=L84S!`QI/V]0RF%5"8T()^*6*:#CMTB+'X",'.+@W89 M PE_"IU51"?@2^3,V4`37S)7B$1L2"#R?O(&R#J*/NZ`F^!<BL(AN`I3!]8**90 M T!6JH&M.H!S<25/4!E`^1V[R&K*`J<@UV9MF.`%$E,(;X"B$2-#W=I0G=2D/91 M @(`/Q`C(K7*50/XCOZ;8)I"9B;JCS*)4<&-@+70P!7)=[BS*H29T!CG$V>A'92 M E$_@)EX'\R'B/>(KS`FXGY"0&`.!DS8Y\JV"HP=X/*.EUF.3!$]D""\X$8%W93 M A%8A`WE"I2RA18@H2K9;92JA<V#.5%!I[DD7R+*9HY2J*<'B?&X#5J0/6]"694 M =<BNJ`HRVA8JYI2.@!/^Z3C<QQ-*C_`R'"F8$T@4!FV0!2"),`(R,@\G]R",95 M (C/P:AD4;(,'4,)&V@\8D4T<J@;M7FF"[)TKD,&W"N&'/!;<$?5(!Y,K"EQ)96 M ,#5E#T)/F=O!OX.E+1S<F.AZ#@60(Z-)@@C`AA*B)81%1M_ULB;BXYFEG01P97 M %$*(?2B(L)$O(/D$[0(;*0R9@C(,@4/&H=MN39:1A-5:2DB81!18>D=.X%#^98 M "A$BPU!X4E!R2LA041&046Q1B!(P^()#+H[`X+7@W9@67NL!GX09PHG\;@)J99 M '7!R2S51!V`J!V9![DZX$#_('!2.A,MDA4+],V##"25D6635K82KN<Q$>P*\100 M (.]4/E0G0<&G0JDPH1P!#TR.>B8C&F1)I#58,:"!BQHOB2F!08=)=8JL+0F:101 M #J6(!S`Z-\8;:AD(#!R/&W0C$$9H*#WR($)ZP@:%"=J%A,F0@+P,.,B]@]]1102 M "9&HI#2LR:@*AX%:(="6=2$H9`"$7J0@M0IROT)3>B8`&I$<7(_$4P%!.4<G103 M 1>)MAJ1)\()X\JP0D=(&+`:6@&$E5%%DD5VH'39T4224D@R7];8I)1M'`'CP104 M ?VM,+92*6%%0?))0)#OHM(A;MNC60I=#,EV&HB@)#43Z#*F-=B<UR7<P/<PH105 M T3(@RQ(O$B,S#,)=2(JBO&E\W)G.J(GP0092EG&BE@$?A42X+LEPU$&0=Y`,106 M VK&@>@\9HLBMH/#;2DD"E8BJ0+E&YA<!L`L;XP5U3<29VAQ#442<;68HAP?&107 M E!A=PY@L6U`N!6-L2UJO?&2,_()F"NXM>9""ZHNZ)%#KPG<<741IFQV#%V),108 M .4`.O'P>&B5B!?0H$V1(3N`1,U0;B1-J*D<BDEOAB2T*!&`))'[5[$H0IVAA109 M K";#.XH-6LRIT<3^:"VUX4!!2U'A.&4+80,;M(I;@=RFHY6(F-?>3-0"S:6,110 M Q!)5+](B_SGBAMY3AVY\*V!G$YV."&0=ND2A<FH6B0#JIWPK8"(J2X0!>K0Q111 M BFBTSE(TBCP&<P@H!$Z/>,-^8F(H:`7E80!U*"=;@/0AS0%B*#.07U#&1C/,112 M \ZI]GRSI+XJ:[R+]X)FE9=F]S?W18TS+LGNKFWXK5";O=+]S^^%+-W>#^]TW113 M "?5-57BQOMQ,YD2U*LLCJ]JEW35',FCK]_V'&/:_(%2N'M;T<'^$R&[7=X?X114 M =+1[3RN3][22WM/6MY*3]I6>E.)+MY%2?^L1G/ZF:.\(_CS:C)X&<HA?:M@_115 M CDO5',<'`C.W1(7?:AA/YR,ZA\L1>\9!O5NC#Y^P`P>2\X+89"3L!;$:L>3@116 M 32]U[T^.MF_5BZ?PEVQOY0M:DU?QO^<PW%)W;VB^=H5K+NA>_@YXTV5Y>[L>117 M U/_=!S74>N@@^=/N)OWE[^T%Z.XKIC6;/"RAVN1-$]SBY>_Q?@;X\N?X)VE`118 M V-[$2KES6Q/IZDF5_@G9[DI%KV[ZZ@WV(6WFH,PZRNXN?V="'6"A(HL^$)TJ119 M. AGO_A1**IL\N\:C6S4J_R5W5O);W5D5B3L/^.AI]&'T<9A\U2!Q9<U[?^>I120 M LBI/[]2E%NE?<X;[NTQO,XT3<D<CTZ\K/&VS#U7V\7GT?^4<NW+C.*SW5[BX121 M PI&B&8F0)7DRLY6;*U)=OSNRX[M-D=@3KVXM??T!E`2"+^717D5;A$"`>(@$122 M "*Y_GE_._VS^+G#,-?]3^,^\.>7''G-\\>6"D_[2_MK\.69&)@=UH@-U^A@@123 M ]KT]W]://]@94];T]>W\^[IYS#V7-+UOG!(!4DL(BBWC$/5^YB%*3;.])\J>124 M 3K_D`!-B?="/\.T%0>CA]OG#JE#)#1=.98*^.<6%37*CH`U^U1)RTFF38P_%125 M :AH"H0B0*A-:_5;XPH`?/8(?\"F!JR$M&P*'`==/V-67`W[GJZ3?X@,"'51*126 M >*"G,R*51JWH64U95\"'N.5+>@*C`6``C5GU=+PC1]0(34&-/.FICTJ8U%!J127 M F!Y;5.$$(7#-C.V`G_QDJ)A?4PWZOV$9K2L21=W266+.-NQS-]%0<IHANZ&A128 M #9SDP;^0\(-R[$\'KOW*`'E(D?QL1Z3C1B*A'2D1C5---.M':LAN`RW$D&B5129 M #F`EC@J1D<$M5"B+H=P2(TWSW.?7>1%5.@VGJ<HT59FF*ANIRD:JTAO)05.5130 M #;R:<`N/J'(*&26^9XA`<1B==^+^0&U8)M\/EH(INXC'GQN3;6&[%D4YZKVB131 M '/A:<:NBHAR9SLZ*^_Q^8.6JYD7'/K]-)T2TALW=I:U[-\L?HLNZ9<?S^>U)132 MY TJN,;T<4I-Y1+M`L=4)&B7KY>!D(TT^$C>3096J_,08JU3EI\4&3H:IRL]'133 M 2I)FJ)VG(P/G_U2=!S6@+FP-D-E*W*1/<KB.<LA)$D8.M9$#9?41RI)#[<BA134 M =^70?T@.(@/,,M&L`3N%@7:$R:"]`5E:W-K#J6(52!6S:`*)8B&:0*K8HV8&135 M 791/DWL6+&3;%$'I-6K1?JDB@W^7XO<VM)]HJO<68&7QV0584]L+L)8N"\`%136 M Y&%JCV-[%TB9JH8OWJ"51TN5A:TN[.RQQ;U!;]9=S4ZNW0X$>IA`#P[H+I?+137 M N*.^Y"(]$G"/#=W'T1O8PKK8`O=#N(3#%Q_XI)FB^I#0NDT6`3Z=+J?7)SKR138 M L'YK7Y_.+^OCS_/S$75^1D*&I"N1:&VUVA`#=VAM&D&PV;1QD-4,\T4T-#Z8139 MI YNCWO/82#>M!(F.'T5CQO?1K!8I/L0'%O0K:V"?QTT;9HH:03_!;(YZQ`^@140 M 6:1_1G,(3</(U#0;B_S')D6-[V-C5-/LR3Z@"I&&D9D%2%!W/C0"(S/NUE&2141 M !9RN`C&R.D`96%BB&L,X&5GC(OLT3H%L)]GTQ>X)L?#T;%;)$2.("IJ8(@>T142 M RU%@1E;$>?5Q>M8L-7;&J"(8E[0V-#8CG(X-7N36DSLICH3>,FOUY0>)]OA$143 M )?X^CM<4Z1Z5M&-/L=Q--Q",`"HYCO<14)\-8C`@-H)RD&!GJ3N_TTE?[@,>144 M ?X92$Q&9#:-&3N!N(L%#8E,Y$>$AD60R'YI&_;9'B1C*@;*YE9@,6Y(B<#`Y145 M S$^@]@3[@)+X"0)FHG0S$3]/(N,!BT$SVBRM"*"<4:T8DQQLWM1(CK)DZI##146 M ;`6@;*&ES/7,&$B>4I5X`/9043S*9B=KQ_D,HOBNC+69Q;$PJJ#6IE9\'G(3147 M VH.\=L["Q==\9K$'?.SJ8BZ,NMR9[IW<2UPH+#:&38FJ,6H:8)+9#\Z/9QP!148 M E;!-.:BG0FE"-JBD&EM^PK+.L*#?U5M+GZ):Y]EOP)V$;=SR`^Y8(<_HZG?(149 M 4MZQ?25<4L`Y2C,$A\NX&W,,-.+Y)7+',L4G(RRIN.,SR(6O"G\6O(^"<E7-150 M ?+@@\>URMA>1[IO,A`_'0U'828,O&X[M`RAWQ[]!_"YYL\FG1V%,JBWN-;>?151 M W&M"4<6#_;:SH>Q;*-2_7ANJFW>C_5#LK&A_^N\M_=WS'G&&4OG"#M&+[%\O152 M [=OU9)(N4ZB?D14RS+\J@#M,"D<\G)9/5NB>.\MOMI^>YTM,E-I^$\'_R2WO153 M )9)*5KG\A7-.L3K375MN>PS463MC2H\^OY[LF)R^[I$KI:W`D#F?WHD`70=I154 M I]*Z$_&Y+AJ?`]6$@D"@=EX0B%^!W`L"=1P$`BB\()"@:`927OBG2PT*"`5X155 M `,IX>`XHN6;"<S3Y%*#CR:?:13'YU_CD]Y^??!&5ZT14KA-1N8[B8!V%P;JE156 M F!R(TD@I#O"O*3/B\*\E$^(H_8O('%IF0/\B,B$2][:W[<C>W!L66%DN1>2@157 M -/E0H,S:)+X?!4P2+.XY40YE[0@0P489QL72&+%D2HA%";%D4-)4[%275F43158 M %TP9MA/W3C@I&/<..!48;P8-&$UF$(6LQ?2"+YK,8"Z#HK%S*!ZW6[&&W=;B159 9-^HA76E,%Q=W5_SR/?RQ^@^C>X2/"%D`````2 M'XL(""A!(E$``T5X7TPV+G)E<P#<6UMS&S>6?M>OP,S+D&XV@SO0TD9;.]XX 3 M*Y<VJ9*\+^N*4Y34DAA3I(JD'%*I^>_[':`;C2;I^]NJRG(3.#CGP[D#35V^ 4 M^<^S7QACXI2=G_V3_7V]6H]GTZN_GQQ=-C/RE&'P]^E\NAX,3X[H?W9ZRG[: 5 M_'YNQ_/ZS_%J/5DG:G7*TK,>=\]FS'[XX<>#/PR\)@^/LYK9L6>':9J?Q,Z. 6 MV>)Q/5W,!\OZYO*?PPZN.V7+Z?R.7;`?&1^QS4",QV8X8K/'CL:?LL?%;,MN 7 M!8A`,7PG"_JOD"\V`SG$+Q.?%3WKC'O5KI18211B&)84X5=:8FA`@VU:*7B[ 8 M4N4K55P9Y*O(0$<&W4K1KM3Y2IVA55%<0>MRF;)=:?*5)EL9%JDH/Y<),TYO 9 MZLF,G6'EK7@G1[>2?JG1K1[=FHY0G[+9=+5FYT0WN5ZM;P9G&1]SRE;3YWIP 10 M/CQA]//##VS^]'!5+]GBEJWJ]8I-YVQ]7[.;^GKQ\+A83<FH1T(F#O84B\I3 11 M<M%NT(W9^5O!?SLY^OVM^.U'$W95"GR2\9..GU3\I.(G'3_)^,G$3["Z3GQ] 12 M$M;GV\Y7XVX^E]3,2Y[-Y[+;>9'-YVC:>9G-'\`GU;C1MLS4/6IA=GJ7NM6[ 13 MQ*#H!)A.F]T@@BF&C-B)F9LN9J3+/6+Z,'D<7(PR2TO?!;X,:F*WTPU[>7[, 14 M[J<P]_UDS2[/?OGY?\[_XX+5,/K5T]W?\,,&#Y/Y]?T#&']8U+/9]`[[FJVN 15 M[^L5^VEY5U_-IZMARUA!OV%;R=-H=VE6=)M+8W)G1:>LWE)U8&F6OI3)GNU^ 16 M*LM3F%!L<+V8KZ?SI_H&/KY:P:.'[*.)+?&%4T]OV6"^6`]NZMOIO+X9K)?3 17 MR?SNO_]K.!S^U>3G,!)3-/M76NO'%$W1BLDFJFIM]C-L=K=<0)OUDN(S!&(O 18 M@;+IBDUFRWIRLR5.+0O-F_A^`PXMFL'/X/#FY`@A<GS4Q@II]:@-#`J+HS8* 19 M*`:.6I>/V>ZH]?"0?'41<],[5<1D?`0>'>?*66-EM-L[P1$NN9A2=).N)[-L 20 MA]6.]-)Y(0WO<OV[JLBX^(0NPBK4#K4M$JTIQ!'D96"-LDXK835/1!*8)1?" 21 M">_2-HIN&T*\B-4"9%XXY66+KZD%[X0KA!6&XR<;=:6J2$H<)3)=Z$HU(G12 22 M1N"/&B&,--[YJD&6F-M21#[9H"VUCS@:(E4XR7?U*6,A*:3+&4J`Y5(XZ4VF 23 M5E&54`(TD.!6G:);37NA;>5D:_`$T9<Z>D&.T9?*6BEXI9):3:&=R(R3HEEW 24 MR2&X;3O<9=R>([?3JC_=NG8[K?O3K;.WTZ8_W;E_2V#[!!\/B':!2PM"B+3# 25 M?F\7^T'3TE8'M]0/HX;6\(/[RP*K)10?V>EG0ZUE(/<T\67!UZ[O#!7"L1W6 26 M^XKYB@!MN9@]E7U)R+X=C\>_)1YV3Y7?%)9]IFY/[5\7D7UN?M\&WQ:7?;95 27 M5SLMSY[%9^JH_K8Z:N7'ZNCOJ\7L0]W5TO!QMY1:>%)./G@SDKSI7JEJ2LYN 28 MIG=3=*ZK^\73[(9=H7F=KAYGDVU]<P2"%R_8^>3NJ5XN:Q8X+(_9F\6"H<_9 29 MLNFZ7DZH[*[^UM`N%XOU2VQS`J#+X^-VQ2^+,+-BMXNG^<W?*%/^.YLU?(_9 30 MO#?=S-:3#]0`I&T='[<+XE8^2I;O-^E!IX39W]1'=M,NZV+EJ_;7+K?[QGM< 31 M3A]P//CYS?]VIFO&]HSGVG:EZX(L.M/I?,W>C_[HQM`9W2Z6;/#^1W'"WO_; 32 MCZ%'?`,SOR^*87)1!W=E["]P0_>#7T77`E$S^5PO%Q>3F\&;M^]_`[0,AT.U 33 MZ3O11?"B_T?^X>0W^8=3W^4?#@G]@.$N6LO]Q>`9\S5&8!.D^V"44-'W"^(W 34 M5`+7G9_R-L%UR?VC===UN?I;!/OFY/?F,K@BMI:<V:4V__7H]>O1^7F:\3RY 35 MN3R@K42&3/P78Z\CY_<=9Z_(_]EY<[A?+Y:T_C6$C^20()`-E_7Z:3E?P>7F 36 M2->K]02Q%HE7;#&?;1,S$Y@%/'^0]?YH\)S3Y<`?.1X7*`D283H_?_O';Z/7 37 M;^5X'.A?#S.$U3AFYD8QEP5I:?#Z-67L%(X5-MA]D,W9^,UEEM:[6XGH[$^S 38 MR9)=35!VLN-SE1T3!4MIHH)3(EFQBY?ID-2&_64,>XKE?^0S_V#7.&NM4=@F 39 MX>P]HGN0/^^GU_<8"(9>AM_`$Y&MV&!]7Q,?NB>9U1N*SZ<06^'LMH*^ZYLQ 40 M$;Q9L,GU->IEN%AIV>PM&['U]K%F`Z1;HIM/'FIVP?Z<X!R(4GLWC]5LO0BS 41 MT<CLPV3V5`_#:2?\=&?.B/>DTPG=_+2S+Y.]*GL:M$KC(1LR=GT_6<)=,+1: 42 M3Z_9,>-4]P/8XU1L1VQR<Q/NAN#F:708.0CV"!8/-7@0J&-VQN+$PW0>[K^: 43 MGV,V.*-6J%G6F?S#!/H]9B:.AY^KV>+Z?>!]S!;+FP"8S1XSBN[G."AOQ4)6 44 M$$-BCUHY13Q0SQ3YGF7-^F13D\K3ZG=II>?IQC^>^OA)EU:?\J`(CO>"\ 45 M3W]`I2VEZ%-^4LGM&GE@S=>IO>6D/B']H"$$U\W-47#LD"EZ:6(OGHZ43&N[ 46 M,I$-TC4;\4+OW^4="J[U_71YDQBE:Y62CWVZ">%CF2X:PK/.GDWWW`KKW"@[ 47 M#PG>:_&S@S`.T?E,*[V9%+US8';R%$+L+!M@G;#"<Z4J[YVN?*6]]K(\>X$) 48 MX8QQW'!MO*XTBI]/IV4A>D?`'+50NT+XF!^04009%0XZ0G$E3<45=T)KV<GH 49 MG0>##ML9\V4RRL_+Z)WT@FW:&?>%RBH^KRR?#E)"=`<L(7GV#-N\G\YF[&)T 50 M(487+T=_C-Z?I,G0OGWJ58RP:,/K/]GEEYZ\!%U/-^]>XD7R8#/:CIY[+U\$ 51 M74UW%\G/IGA6I7R6I1RQK2R>D5U&;",+N=V4FW);8D9U:Q%75&A?]?J1,^I' 52 M!"+TU<G1*SKB$Q,\X9A.O-/B[DU"I,KG.LO$=3*U7CC?Y]?C`SZ:#./.=O:% 53 M+NQA\L@>[Z<@NQC1UB=I5J$3:W+''-/Q<0#:P:LA!`)\FVHQ>8(C4'?ZN9_B 54 MU!/LB,>3?WU*B$BJ?<8T<3]K6YSV!REG]72%6K)^6M?H-:@=>V:IEQ$*?A%6 55 MKZ;P@^GM=G#VC&;O!(,G&8]E_;#X4#,Z`;&[>DYM/OJ]H[-GTBSL.)B$,H'/ 56 M=+\DZ3YK2_8L!N4$%DU^G%V\MVO35!>K>VPZR]'-?+MG4AZ:H*?KFD#3"6U+ 57 MI[+^EGG8\C;?LCUM%F=[WC:;WIY@$UM"EK:TC6#*S=YF7+:9L(:H,JP^]HFO 58 M@K#,@0-Q=&$2^"HN3AY(]_BM=S9\.Z:ZR\VO&FB=[VK1^JZ,OGMUT'>UW/?= 59 MJVY6?<)WQ7?Y;B9$?[_O:O,=ODN3R7_W'3=3N-USV6)PE7=%V2WMH0"XRGU& 60 M)Y_8<8G6(S!#'A$$I46Y0QR$0#>WA^Y1T"3F-V#MT,X]BC"MWUPVB?QJ=-U[ 61 M'RB,;.WU$TBN%.7OZQ9%1Z5BPJ8#9!(_^`G;PB'UG)!?VT)=:_R3A<$(7:W^ 62 M(#&`SWC`B`)-8M?=2>TO;FFZ0K[/KJ6Q&4U/@&OC1<5XH5UO>K%B?+>E\!KT 63 M<G2>;7BG"M!B$C$*8!*9/5@.SF,TM?&"-3NAM2_WBX1E9:&7Y6*0[24Z>.M` 64 M7I?T78%B<"W+Z[)K;JS<3W&?H%:?37B]C$<<:'E*9(/KS*>S&\F,/B<P^ZEP 65 MT,-CN^[(NNS9]SHE.;I0H\M.?]5G6Z7J:ULENEGL!5C,R5F`N?2UCQ&[HZ^I 66 M;%%+MN56Q0:)/LEM@1'1+6F_[[$,A7#U-*/+F,'MZ&ZT@:J7)T=;7VY=L;6E 67 MVIIBJPMP`Z.45UQ7C3]"V<FBB[ADT&5PHB:_-K?A'[\0ZKTWWJ;7H%&0W"ID 68 M6Y%>7M)S>P@2(S%*09S=Q>4'&;?SHD5$%NWLSAL3F655M_/^0^U":NFZHU)^ 69 M%/*]0Y($U+2"+MB:"*0>LIXA$\XGZWH0!LE`0[)0(J<>#&8]$P&]!88R8,BZ 70 M4I\U3I\BZYDI4)*I=DR0O5+O[SA3?.)X6.W^DVKW!]1^2+7>'U9M[W":@:FR 71 MXPY=\J5GV01T%\7Q[FX_BB_JA\GR/8)8\J\-8KKW^W00TRU8+X@E15%[PI%9 72 M[-+%V%[('FUUFN]ZRVP0ZOJH,_W>;Z>KJO_=IJULM25YIT7)1?:\IT7)/ZM% 73 M]95:E%R/>]_8"X?&=4^/DB<]DA++M9+=E&VF2+_;<JU]L3:V6%N.?Q+_5$?J 74 MXIN@R83N::</];*;:K\2>+^7.M?#C@HZO#]A1QNK2E.9RIJ-13,G-U9L"XM& 75 M&6D1SX6RQCKK-Y9O"VWUQE2PM>,>:X3#:(EY@[IL::;$F<LYK_G&>)!I3@L< 76 M\JVNG$,G1LL+"83<()R)J$`\::F4LT0H"Z65K:0'`XME4DOB8"BZ:+F3(/,% 77 M.DVMM`98K"D%K[2UNK*T!H=OC1-JQ&`0D=8YHSGW&Z.14P2WG)BC$I3H?J&% 78 M@+!$2&D#ED%NJ8$)A32*AF=K*8V4/O``*"0U#WI-;'0!EDK[0"R1")1QRH*- 79 M0+V!BQFE%'B6TEFC/6G)`#'1.R\U,80V#?=:>V('6PBIN)"<N"$'2JED%70E 80 M"+(R`M6>/G+P!WBDAXVN4-X$APXY\2^DL>!-^M#;`IYBL*^X:5EH*-$A0CWQ 81 M5X42'$8-X@3M17#C'8*(^)M"2*>X1QDB$;;`H<]S,.<;[2%1DI-`8]JAP$IM 82 MJHKV4V@?2"`-"Z!Z39N6E,BA"^R;3"%(C595'&H->]$%)KCBQ*Z"9"LK#GI+ 83 MDBSV@!,T!Q^(@JUP..65,_AH(1G&E8:T8+85:824@Q;>2Q&<2N*X(^$M+NH0 84 MUN3:PV5ICD/?=&=550[6A&!-MH8HLC4D0Y562!.,"]$`8K2MO#.21+O"*5-1 85 M3$"T+^"VLB*16F^KPBI0P:9:;04O256D\5)Y;",H&TY6@94D%'!:[SRW+M@2 86 MF+3!BD;1Y`25KKR"S0`"3H#6WL.S`@AX5N7@@>1S@.%*^#X4BP`E'-!.I1$< 87 M4#*`5,0)C9'$G"18WED;-B.V0I2(1.A$E$J+J!Q(:O0"@*058N.!SR%*PTX= 88 MT&EHAU.&`!I3>@L7"H8SA`T.8`Q<F,#`<LY6QE0\H/&T32V#624T)I2`7ZJ( 89 MAM,N+7(,/G*`@WLC_"5\6E5;`5\B?\8&JN":I5(\8D,"@>>3-U#60?1Q%]0$ 90 M_T($5M%-@#*X7E`1ND(5=,T)E(,[:8K:`,J7R$U>0Q8P5:4F>],,)X"(4G@# 91 M'(40"?INC_*D+N4!$/"!&`&Y46XKD/_(KRFV"61AHNXHLR@5W!A8*QU,@5Q7 92 M.HMRJ`F=00YQ-OH1Y1.XB=?!?(AXC_@*<P+N)R0DQD#@I$V.?*O@Z`$>+VBI 93 M]=@DP1,%P@M.1.`=H57(0)Y0*4MH$2**DNU&F:W0)3`7*JBT]*0+9-G"44K5 94 ME&!Q/K<!*]*'K6C+.F175`49;0L5<TI'P`G_=!SNXPFE1W@9CA3,"20*@S;( 95 M`I!$&`$9F8>3>Q!&41AXM0P*ML$#*&$C[0>,R"8.58-VKS1!]LY5R.`;A?!# 96 M'@ONB'JD@\D5!:XDF)JR!Z&GS.W@W\'2%@YN3'0]AP+(D=$D001@0PG1$L*J 97 MH.^#61/Q\<+23@(X"B'$/A1$V,@7D'R"=H&-%(9,01F&P"'CT(VX)LM(PFHM 98 M)21,(@HLO4<G<"A_E0B182@\*2@Y)62HJ`K(*+8H1`D8?,$A%T=@\%KP;DT+ 99 MK_6`3\(,X41^-P&U#CBYI9JH`S!5`K,@=R=<B!]D#@I'PF6*2J'^&;#AA!*R 100 M+++J1L+57&&B/0%>D'<J'ZJ3H.!3H5284(Z`!R9'/9,1#;(DTAJL&-#`18V7 101 MQ)3`H,.D.D76E@1-AU+$`QA=&N,-M0P$!H['#;H1"",TE!YY$"$]88/"!.U" 102 MPF1(0%X&'.3>P>^HA$A44AK69%2%PT"C$&C+NA`4,@!"+U*16@6Y7Z4I/1,` 103 MC4@.KD?BJ8"@G*.3(O&V0-(D>$$\>5:(2&D#%@-+P+`2JJB*R"[4#ANZ*!)* 104 M28;+9MN4DHTC`#SXOS6F$4I%K*HH/DDHDAUT6L4M6W1KH<LAF:Y`492$!B)] 105 M@=1&NY.:Y#N8'F:4:!F098D7B9$%!N$N)$51WC0^[DP7U$3X(`,IRSC1R("/ 106 M0B)<EV0XZB#(.T@&[5A0O8<,49564/AMI"2!2D15H%PC\XL`V(6-\8JZ)N), 107 M;8ZA*"+.MC"4PP-C2HRN94R6K2B7@C&V):U7/C)&?D$S!?>6/$A!]45=$JAU 108 MX7N0+J*T[8[!"S&F'"`'7KX,C1*Q`GJ4"3(D)_"(&:J-Q`DUE2,1R8WPQ!8% 109 M`K`$$K]J=R6(4[0P5I/A'<4&+>;4:&)_M);:<*"@I:APG+*%L($-6L6-0&[3 110 MT4I$S!MO)FJ!YE)&8HFJ%VF1_QQQ0^^I0S>^$;"SB4Y'!+()7:)0)36+1`#U 111 M4[X5,!&5)<(`/=H8133:9"D:11Z#.004`J='O&$_,3%4M(+R,(`ZE),-0/J0 112 MY@`QE!G(KRACHQGFY3:]<Y;T5T?M]Y6^\\R26'9O?+_W&)-8=F]^\V^.RNR] 113 M[S=N/WPQYVYPO_LFH;FI"B_?%^O)C*B6=7UD55K:77-D@[;Y3L`AAOTO$=7+ 114 MAQ4]W!\ALM/Z[A"?CW;O<F7V+E?2N]SF5G*27O))*3YW&RGUUQ[!Z>^.]H[@ 115 MSZ/UZ&D@A_BEAOWCN%3M<7P@,'-+5/BMAO%T/J)SN!RQ9QS4NS7Z\`D[<"`Y 116 M+XA-0<)>$*L1RP[>].+W_N1H\TZ]>`I_[?9.OJ`UY3;^]QR&$W7WAN9+5[CV 117 M@N[EKX!WO:AO;U>#YK_[H(9&#QTD?]K=I+_\-5V`[KYB6K')PP*JS=XTP2U> 118 M_AKO9X"O?(Y_M@:$Z296RIW;FDC73*K\S\QV5RIZ==-7;[`/:;,$9=%1=G?Y 119 M.Q/J``L56?2!Z%S1V7CWYU)2V>S9M1Z=U*C\Y]Q9R:]U9U5E[CS@HZ?1A]&? 120 MP^SK")DK:][[6U!5;,O\3EUJD?_%9[B_*_2FT#@A=S0R_TK#TZ;XOW*.7;EQ 121 M'-;[*UQ<X4C1C$3(DCR9V<K-%:FNWQW%\=ZF2.R)5QM+7W\`)8'@2WFT5]$6 122 M(1`@'B(!@G_Z]&VX7?\Z/9_^W?PL<,PU_U/XS[PYY<?N<WSQ^8R3_MS^WOP] 123 M9D8F!W6D0W?ZJ"#VO3Y=U_<_V!E3UO3E]?1VV=SGGDN:WC=.B0"I)03%EG&( 124 MFD#S$*6FV=X398_'WW*`";$^#$CX]H(@]'#[_&Y5J.2*"Z<R0=^<XL(FN5+0 125 M!K]J"3GIM,FQAV(U#8%0!$B5":U^*WQAP(\>P0_XE,#5D)8-@<.`ZR?LZLL! 126 MO_-5TF_Q`8$.*B4\T-,YDDJC5O2LIJPKX$/<\B4]@=$`,(#&K'HZ`I(C:H2F 127 MH$:>]-1'94YJ*#5,CRVJ<((0N&;&=L!/?C)4S*^I&/W?L(S6%8FB;NF\,6<; 128 M]KF;:"@YS9!=T=`&3O+@7TCX03GVIP/7AV6`/*1(?K8CTG$CD=".E(C&J2:: 129 M]2,U9->!%F)(M$H'L!)'A<C(X!8JE,50;AF2IGGN\VO!B"J=AM-499JJ3%.5 130 MC51E(U7IE>2@J<H&7DVXQ4E4786,$M\S1*"`C,Y$<7^@?BR3[P?+Q91=Z.// 131 MC<FVL%V+PAWU7N$.?*T`5E'ACDQG9\5M?CNP<E7SHF.?7Z<3(EK#YN[2UKVK 132 MY0_195VSP^GT^JAS)9>87@ZIR3RB7:#8Z@2-DO5R<+*1)A^)F\F@2E5^8HQ5 133 MJO+38@,GPU3EYR,E23/4SM.1@?-_JLZ#&E`7M@;(;"5NTB<Y7$8YY"0)(X?: 134 MR(&R^@AER:%VY-"[<N@_)`>1`6:9:-:`G<)`.\)DT-Z`+"UN[>%4L0JDBEDT 135 M@42Q$$T@5>Q1,X,NRJ?)/0L6LFV*H/0:M6B_5+7!OTOQ>QO:3S35>PNPLOCL 136 M`JRI[0582Q<*X`+R86H/8WL32)FJAB_GH)5'2]6'K2[^[+'%O4%OUEW-3J[= 137 M'@CT80)]<$!WN5S&'?1%&.F!@'MLZ,Z.WL`6UN47N!_")1R^>,<GS135D(36 138 M;;)0\/%X/KX\TI&']6O[\GAZ7A]^G9X.J/,S$C(D7:U$:ZO5AABX06O3"(+- 139 MIHV#K&:8+Z*A\<$\W1STGL=&NFDE2'3\*!HSOH]FM4CQ0WQ@0;^R!O9YW+1A 140 MIJ@1]!/,YJ!'_`":1?IG-`^A:1B9FF9CD?_8I*CQ?6R,:IH]V0=4(=(P,K,` 141 M">K.AT9@9,;=.DJR@--5($96!R@#"TM48Q@G(VM<9)_&*9#M))N^V#TA%IZ> 142 MS2HY8@1191-3Y(!V.0K,R(HXKSY.SYJEQLX8503CDM:&QF:$T['!L]QZ<B?% 143 MD=!;9JV^("'1'I^HQ-^'\2HCW:.2=NPIEKOIEH(10"6'\<X"ZK-!#`;$1E`. 144 M$NPL=>=W.NG+?<#CSU!J(B*S8=3("=Q,)'A(;"HG(CPDDDSF0].HW_8H$4,Y 145 M4#:W$I-A2U($#B:'^0G4GF`?4!(_0<!,E&XFXN=)9#Q@,6A&FZ45`90SJA5C 146 MDH/-FQK)499,'7*8K0"4+;24N9X9`\E3JA(/P!XJBD?9[&3M.)]!%-^5L3:S 147 M.!9&%=3:U(K/0VY">Y#7SEFX^)K/+/:`CUV=S:52YQO3O9-[B3.%Q<:P*5$U 148 M1DT#3#+[P?GQC".@$K8I!_54*$W(!I548\M/6-89%O2[>FOI4U3K//L-N).P 149 MC5M^P!TKY!E=_0Y9RCNVKX1+"CA':8;@<!EW8XZ!1CR_1.Y8IOADA"45=WP& 150 MN?!5X<^"]U%0KJJ9#Q<DOEW.]B+2?9.9\.%X*`H[:?!EP[%]`.7N^#>(WR5O 151 M-OGT*(Q)M<6]YO:3>TTHJGBPWW8VE'T+A?K7:T-U\VZT'XJ=%>U/_US3MY[W 152 MB#.4RA=VB%YD_W)N7R]'DW290OV,K)!A_E4!W&%2..+AM'RR0O?<67ZS_?0\ 153 M7V*BU/:;"/Y/;GDOD52RRN4?G'.*U9GNVG+;8Z#.VAE3>O3IY6C'Y/25D%Q- 154 M;06&S/GT3@3H.D@[E=:=B,]UT?@<J"84!`*U\X)`_`KD7A"HXR`00.$%@01% 155 M,Y#RPC]=:E!`*,`#4,;#<T#)-1.>H\FG`!U//E4SBLF_Q">___SDBZA<)Z)R 156 MG8C*=10'ZR@,UBW%Y$`42TIQ@'^5F1&'?W69$$?I7U;FT#(#^I>5"9&X-\)M 157 M1_;FWK#`RG(I(@>ER8<"9=8F\?TH8))@<<N)<BAK1X`(-LHP+I;&B"530BQ* 158 MB"6#DJ9BI[JT*INX8,JPG;CWQDG!N/?$J<!X,VC`:#*#*&0MIA=\T60&<QD4 159 DC9U#\;C=BC7LMA:_40_IVF.ZW+B[X)?O[J_5?U[(X&HL60`` 160 160 ` 161 161 end -
Tst/BuchDL/Ex_L6.stat
rf1becf6 r71a4d7 1 1 >> tst_memory_0 :: 13 55754937:3150:3-1-5:x86_64-Linux:snork:4295442 1 >> tst_memory_1 :: 13 55754937:3150:3-1-5:x86_64-Linux:snork:23388163 1 >> tst_memory_2 :: 13 55754937:3150:3-1-5:x86_64-Linux:snork:24698084 1 >> tst_timer_1 :: 13 55754937:3150:3-1-5:x86_64-Linux:snork:2281 1 >> tst_memory_0 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:334160 2 1 >> tst_memory_1 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:2396160 3 1 >> tst_memory_2 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:2416640 4 1 >> tst_timer_1 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:103 -
Tst/BuchDL/Ex_L6.tst
rf1becf6 r71a4d7 123 123 ring R1 = (0,a), (x,y), lp; 124 124 map phi = R,x,y,a; 125 number n = number(phi(F)[2]); minpoly = n; kill phi;map phi = R,x,y,a;125 number n = number(phi(F)[2]); minpoly = n; if(defined(phi)){kill phi;} map phi = R,x,y,a; 126 126 ideal Iz = phi(I); // substitute a for z 127 127 Iz = simplify(Iz,2); Iz; // remove zero generators … … 136 136 ring R2 = (0,b), (x,y), lp; 137 137 map phi = R,x,y,b; 138 number n = number(phi(F)[1]); minpoly = n; kill phi;map phi = R,x,y,b;138 number n = number(phi(F)[1]); minpoly = n; if(defined(phi)){kill phi;} map phi = R,x,y,b; 139 139 ideal Iz = phi(I); // substitute a for z 140 140 Iz = simplify(Iz,2); Iz; // remove zero generators -
Tst/Long/gcdp_l.res.gz.uu
rd826a8 r71a4d7 1 1 begin 644 gcdp_l.res.gz 2 M'XL(" +)(PE```V=C9'!?;"YR97,`[%M;CQ['<7W7KQCHQ<OOXT=U5]]MD(`#2 M'XL(",?V&%$``V=C9'!?;"YR97,`[%M;CQ['<7W7KQCHQ<OOXT=U5]]MD(`# 3 3 M`X&!)`A@YU76B%Q2"RQWB>5*'B?(?\\Y5=T]LR9]`6(CL"(]:&?FZVM=SJFJ 4 4 M;O[FM[_Z];\MR^)?+5]]]<5O^IN\P-OR[O6;#[^[??'X\7&Y++?W=^^6Q^N/ … … 123 123 M($T>K^>X1R7J_FT$N%*UPLJO*<Y`AN%.R$/,A3<\0R>_)GJZ5W8JDT,6*'I+ 124 124 MDEG?K-CQ^FE&8C+@SVN>:T%18`$FV%U&;38C2M[-\D%&D$-T3+6K6E_^I[UO 125 MVY'E1K9[UU?HP0][NE2>Y)V$<>8;_.!G`8UR[VFC<3S&2(9_W[%67,AJ:82Q 126 M<6`8=@O80F>RDF22P>"*B!7,4NQ^WR(/;2CO'4L2EXAWN-(4`V_8?7BIM]:4 127 MRQ5*AH:U82,HR[72L#_I:PZ]*?IGJR:&0%UM2JNJ,>!CN;:>Z7`%Q"/])K!I 128 MN-:4I:M1';E=0J,#\O>MTK%(VE::<SE_LZ>P?S)617APR5FKO;K6;!K0PNVK 129 MA%L-JK&O&&Y<7FL,5YM@KIG6[*7%<(OTR^#$'H6PX*BA-8?YP>3/V@Y+P;QE 130 M82K45+>IL#08`X-BKV"HPW8\="%F4UQICJ'[`'\4(T<E6;<F$RR(B*K[VY:Y 131 MSN#'[-NH!`<P)`$Z<^:V0F<NC4#S?MN(5Q9%2N&9HER40V-.9\M,\%VV&WN& 132 MXQ.:<2;7?8".QI.&5-1U>-MR*K$+(/J8Z@QG&WPE]F=3^]2#[X)N3V];#_,' 133 MLG&I@@$MJ)_F`L+XA[LMS^I/%6Q.W?QMHP;.H3;,3_9"`?/-E&9)]B/X1PYG 134 MF\C0/)W9L_N&(Q=5N>70GFE$:`/J$-;BUIFRS,;VMXUK#M>L?6U_6TDM`(A< 135 M5=-J4)ND/"S$`'VX-7GT\&6G=+G%T)K>ZQO?8*GG\&K*55]]NE^@7J1'`$:M 136 M")MT.&`O%P+8#S5,AG(I\CI,AGSX1_+OLI0)F"M<4;(.Z(:YNF#K&_9F@:L9 137 M8%9,,\)GT$)?L6(7?$DR;?Q%I=--%*W@W2&X\)7YU8*7D>;:^!/ZY6950"W* 138 MZ!6$$4'&=]C$^$&^?2N5=H5LD_`5W058"V06+<0*!/7+P-,P@66B320:%RT# 139 M5LM*_K;4=LBE577L25_NJ](<@C=*1O>B\=%I6@#,O3+T2-_AA&?QNF">C$3? 140 MXJSS`JB?]#P.&%2RF*4%,8:6E,.;@E>@:23K3CI0,`@"+#%,;=*A)B+('LA` 141 MYGI5^A6ER5=2`<L%Y^5TU^::L$ARAW5T[RVC_Z+]W:57]04&'J/MMN"6%/,S 142 M7'IBO-/B@V,.D*/*$$A'UA4^/5'11>V:BD966^.5&0'NU;N+1H2%A1%H75Y( 143 M+*/+'7K2YD0I2'PHE__$9KJ2&X=5EC:&.'$*9,9@%>6:S*DY9(OC"Z[%%X!U 144 M1.]Q4;<FI`U4G::MKA"OBYY"P2P+4U<%2$(`9=L.Z1)-!&^FK%:^^94YN0)? 145 M3;SN(B>9[LZ<T#;BQ6R[+A,PD=:+MB>8'*@#T@ZZBLL72->=[DP9!LB'#.8K 146 MZ2[+1`PD(_7*4@(H:=*P>I8Q/@***EW7`T[9(=O(JVP$?'T*6$N8/QAXG5:G 147 M5`C[-B=UNL+R%"6&3@C.016S#[QGJ^K>UO$3XYDK11;/*S95]&+F/DW*9#N& 148 M"-`#30<Y%Y)(W70?>F_N?%TT;\7<D!F9/;OS6+0E';NB&CE4330/7;=E>X\3 149 MRF!?"VY%.U7TI'2UUVZ2)CH;E8@LX5WAI+BO1&E74<M-)770`RSF_*(GH*BL 150 M29NJE<I0%_LE`/X5ML>J)FZM5X[FG.A`OT1X@([SZ4'.AV,S3_4@(W$J,$Y& 151 M9L&!<43_)L<X<&4;:47JW28H+(&Y[>-,9UG8AJ(1NMF&LF`WIH2#JQ\.41%A 152 MV]7DH@XEP`#]UG[X0P'W#X=HYNY@?R]-]*%#M(57"^9?WSA9`XCN%B?FL=NB 153 MJ0,:\<"(\(5I6'$[1*?F*27ER!P.4>G"&54<R`\+AVA6/$4F=3VB]3!;#IR# 154 M^=OQ^LMSP&2CB-[!'QJ^9*`9V4RRHYQ>EM\6?!IXH")&-P^[4"2U1K2^KQ+1 155 M^GIBG'RE#2(*]7L+GV@KV0Q#.`>BJ<QLAN@?Q&.8MUWIM'H<"M;JR$?,OHBB 156 M.;RB@EZN,`Q%+"VS#2'9Z"`D(/<C9"]V;`VWJ,QA=90C(G#8AF6.;1MVG%BA 157 M*`=>>:-7BLU_X)PYZF$>RE:T/:/%L@/RM0[K,+>P]ND*&&X>9F-KX^[5MF]4 158 M-C$?,@$WS9`1\*VF34(80FR0)=8=2368B/6R`,A0BZ<=L.CPI!8F&GP3N.&H 159 MK"@+(IQO,@\XTL2-SZS,4_QJM+"&Z);+^?#8R5;4NQN?*X4?+X1);,JR+7^Y 160 M:M/FEZZ[JGF1&/@9V#=C?%.8V3`\EX?<Y6)8=N9M1X!A3Z96#J-3!-K<V'+1 161 M-/P!TW2J.\NMS@S\&6:G;!]I.^LLLZ_#0;1.P[-N`P#.NU+-:H>YJ03\S"-F 162 M5K14;\RI"<L3'K[FEJ<8WVH4PZDWTZF6>[[B*41[4SCLADX0E/7([9E#U<.- 163 MACC_\H`3G7G+_7IY[G?2G(,GC]VTP#XN+K-R$[-!PM"'0V9NTYB75W:]7"P# 164 M6/Z,1V!5MG$J97G#'"PJ40S%6%1BOX7+`[IW>YP0H4AS<STL/X5:>4;DCZ2I 165 M64_CLT7$"1?%_75P2<13B#>N&HH%N5C-%0OD8#'U0N-7Y4DQKXAPD-_A?#)H 166 M9KLWE35E:KGG'7A#H*K;,H(NEA5F]V7S:(>[3N#\%;H<>[YSR2`J8_IML6T. 167 MK2P24,*9F(\-%UFE5_/;5]KT&DQT/8E4S/,RI;PLU0H."UVD$:J*B;V0KWJ% 168 MV6F$9>KMT$"B@?/T369Q?"ZW.I5Z1EY=]E>A^REF%.JXC`A'RV)K=C?X*IC; 169 MO6$R*Z>.4,>3"<#(QIWM,#S3"B<TKJ[F(>G:G`WKLTA-$'S%!B*B^3<:R%[] 170 M61V7(Q12_D&NC<!26!:R`Q*^-S'.8)MUQ_?`'301`//%1*@-EH\@6$/W8C41 171 MFXOF`F(5Z9''+R)S8/L"`D>!,0?+!'&X5_FI$CX009*5))6O[E$ID#&N9K!> 172 MU`B"/;)N2*3("(FY639HEN5+K2;&S-:@Z;$8,B.F+]>"702Z=D7S"S&W7'LQ 173 M3"_"#1/]+LL1=I6LH09$SV@3*3&BJM&_/AJZ/PL,PWJI75E@F*Y&P]/()J+J 174 M!(HW&D>`\]*O1*.B,6Z7"Y"RF(8YP'QA!Q?,,(`9406OR+PM!N5%_.!"&(4\ 175 M#Y$^6A1JV"PR10CEX<Q6DT,&L/=B/!"9&]J%J5XC<W(0U5N"<!3()U9>C=!3 176 MLMIEPX**L&D;#9XBT`/C*]83#($^8="T+^'Y$I[_?>%QM70$+$HUHM$*>-M( 177 M$`D"3)MT"^CNR(MAOY*-/T!THZ=_:TERFZ=NQ`UGSUUV6TR,P)G(MZXS?+.- 178 MR&RJ)FZ(#C!$Q]LI@KRM\<0,WQ\;MN%F=J)<:"8R[K8K-'B]B5$?+U1!=]2] 179 ML55&@)K=OC:GJ"&I(DA1FOIM]EX#K[DPL05_#C(C]"$0QZ[`IRW3'C#LCCU9 180 M\[CQ9^_5=_RF!Z$$XRF!_6A#1V!>--&<Q))X)[B`]WC#-C(;MC&'4;.GR,&- 181 MH'J%XW\'R"NC9!8:J60T-_L9G&B.:BM(0BTL7UQV#\4CB7AIOAOND[^D#X$_ 182 M%#(D5]7I-I7<2_)!D'><>CS"S=?A5>V,0.HT(5L>Q#O]DZ=VV#.(HJ\2;]1` 183 MCE0!JLS:)N+FGRO%,%0D#+5H"5#,+0*<6:,$H@KX?FV.&29]Q_R1G@\RESZ$ 184 M8Q,U8P;.QA(CQT!Z0'N<BV*T-'JRF![/PU*"L8H,?W5&Z!-)E(,Y6^3OJ?:- 185 M_,4\>'N$@#RLCGKM:&5EH,B.7Q$K,B(!9=U&#[2(`R5&L_!+(1E;T]80%P@I 186 M+9CW%20!G-TBNE(;XD4M=A])M_$43+04E%I<#@]9RX5EQ8W;;!&Q*5CY82T7 187 MRH%%A)$U?EV7WX?OTA\209C%!Z'@*)W+^D;N&`E+A9R+$.R"Q5_V&^%R6'!1 188 M+F;WTX7ZBB54F,$9P5RRLLV'5LB\T*1U^O8#TA;L5"/(++A<TT"M7$S-,"O8 189 M,=V$@G$.7_>VVV6G,7'C@4:CV7T>*Q!VNXA;`'I>+A\&V/3U,JJ-F!%!Y\Q< 190 M^>.PW=-T_B2CQA;_A;;8+HW,Y3X/LDT;!J(90<[-DO)E]*XS:-PVU10$FQ76 191 M^VS3SF!:?3L%X2*Y8HO`F3W=0Y^,)J_(PULA0;#613@.XSU9%!.LF\N.<&KL 192 M2[@6D.'2RV&\IUA'+%/F!XSW,O<HP%HO1]A8%(G'F@M#DO7%(LAA?9(Y&I.4 193 M=?UOA^JZ_%RIUG;OX#];ZS#=X?U*;KJ/5NUTHLQ<RNU0W1D-I-Z4'OE/<VH" 194 M*'G$.[)(:D7L*Z34Y"NH-F!WV/UV1HU%H8=X,[D-^6KN4!UANK>V`Y\`#'W; 195 M^V#G)Z,8PKDZU(UX\"S*$?_#(=1__9=O:X0QV^CW"S=>PYE,%A'%WWJ(EOPU 196 M]QI3,..31]CCFP<NUK7\5\&P`(`1)1B(!9ZF;+1+P!SF$`'\E!$Y!8W^IQGM 197 MT.EG:@9E1F7C_1[>$""8'%JP,;.D78YR,M>$_CGV^A(,0X)7`!T!)R;YN.B+ 198 M7BLBG1F<(L$PJ^1XJ)#6-1SII*1&?2-YK!Q()V.\#Z33BZUEN5B:;]K@I]JT 199 M&H$P8\5>(%<UNR6->,%JCG.,[&4X!Q(8D.I"KOOE0*?IB<H*AD+?`L"``KEQ 200 MC@QXN0+GC*5GDHDTM'"A`,K439RO=/Z60#E53Y"3/]>(B']%]L@50B>7O?D6 201 M+PIM5KO+(U,"Y=#M$2@'+L(1**=V/T^O[==IM)%\AN1R73E`CB!)>E$`A60= 202 M1SLB"C.2!P!FA@4$*J(#>@`;H$\-FE1E.#=8&;A<*P7$R4D/],&?<Y,':]"? 203 M#>/(_#1'.4/SVH%W>@H+0P!,F1N&PL/4C<5>Z7ST4V4$=^9HAR2'&F]$ZF@) 204 MH)-A.NJ?9:?C`<+TV*0*3[\QYRHN+CW87?Z<!V0A$S[B(L`VHY@O#67TLQGF 205 MV2`>9]NDO><0]S13ZW+16K*C#,M&KT`Z.=A\1#K3F;$B`(6<#`5`X6C'V5[I 206 M!#IP]B9'.HRCZY_E:N%C!K3)95-PH0O:%4@'"][NRZN.P$=P.H_P1!8BX"O` 207 M3M9#&'!Z@2X!@SHXA#V@)9!/-U)4(?5%SZS*S-X[HA1KLPT+>5".JD""2?:C 208 MLKVQA?M6R!TPS>7"6NB`[/:S/H*JA"A%8F):0)U4#8C)1;74#ODKAT]_BC%_ 209 M'3&*,&2(;?281_[9-\D+F3`S`HS`-MWHJN07ZPD8^)4:;8%TKJU_`&FH!?5O 210 M4#:;W3Y"F23$C7`Q&UTN.=:1Z>M&D,OIH.YBRNL.;N`DBAY0IU_9?@2ZT,&0 211 MR]#+&^H@-'8%U"EM&M21GHX#Z^2R]TO2XIK9WKS0(]`R@O^;5\=,IR!Z$?M4 212 MCR:1=7P9VD'&V9'N+4,QHBD[-2[BQRW9N8W`P?VDR;6=[</XL8DK\[WU?%)& 213 M,.;.U\#>4#=U%ZZ057:L8MBQ,)/#?``>D)HWX+&D([NH^;)#SL;846<(Q09) 214 M7<\M\D!%*BKDZ6!)E8,#4'YS_KFRI!";@Q/ORIGI:"F](B8/-U)3+]PD>439 215 M#'<Q#<<K<DKH18(73A`P$_H6F345N7!WT9%,?*BW;[.GH7D79-8@<5):$'V( 216 M<I!_P%>GFZLKW0$F+_QL%6Y&`0W?\(T%$'<FR#6P^49]Q=$69*<T..*6F)5D 217 M;61Z"F&TO^)P"O81!!<QR-F&F#KL!&CH3."H3+]@2I\@%E*DZ*Q#IBD8+NQ$ 218 M95I%8U*@C-="&YUDLEGH3:N#^2.3WD"Q%%"^0$X!C9`M($<$IQFH/P\,HP&. 219 ME>8]5K!;ZIQ\RY640M0*W:D8QEI)CT'V)XX,HS.QKO)ZQS%%*`>UI3"U%%^F 220 M0$(BF"&@1-+964$3JE7>"$-P:8H*CE.$PQ"#6,$2`CF)F9^D(HGU"G>J[-.L 221 M`<[@Q!079&'!E8S,Q_MJ3'`I2R=A*&V%[E+17ZA?MCVT4$@2RHT.S;'(SVFB 222 M85\![C'&A2[A2[8+_`).1M)OD@@GCL9!)PH&L2VD\=Q7I<]73!T0D5;',,@^ 223 M]TU>"A6(`D$G!?-4T+CH%"W56ICZFA?)=#6+6&,O@5^Z8"`1LX/75D<22/85 224 MWC],5,E,@&4-M3%#!LXC+!AR<PK&411CHKB:J$WV006E7)QI)NT(FD$?"YE0 225 ME6R^S'&LG7Y;Y&YCH%=?<&N3'I3)#TH<@<7DU50;,G2!K%%.=M#JFH$K:DG9 226 M7`UN:>6#80SE92]2RC1/>#5ZCG4(R%1K$,+"XP/INR]8+:)=L_/6$*-D6`$] 227 ME,T-PH;33X*U)MH6OFU@!+8Q"NE>@J2<MH;%JE0KL!N137(A3:F3=$C:VM41 228 M?8#?G`,)+_NM*!$K,R$J(P,:+ZI-J`-\74Y:PXI46B(6'C]B(A),&IX3(RF$ 229 MR@ID&TC?DI4RDP4I2BF4QZHN_"2PDM3'HLG$_0?J2+B@F9*<&B6?Y$1*JNE( 230 MG-A#P19K!?7,"XL?&L^4I)COVLQ`)`$\J%?-P38E><<V0NVD4DNN*8G_R90D 231 M5$W!I,UKD,,IZPJ965=Q)2GHII`HB)QMS3"75L5(*9>IR;XT()%E`"A:2'L& 232 MA_(:KB5%=IA<+6-$,FNEDBB-JA9Z,GE/Q<!D3QOHL#ABVO0D#C!A-R[&E$PP 233 M9!-P-8E4-G)RJ8<FPQ9CD,9)19F-BRCX7[.K!7B3[CI"5ZY)*F'5'/4LH_YZ 234 MEQ583%?6S,F`LYB[!>>TCC%,5XH*8YZ\S"KIK&)[HY,X(\24);_LLS.\%W<+ 235 MV1$NTY78.%[5!<C0CFY(I7`%45OB`T-5*:.9E-O.J:BN*Q&BAI98"S-^Q\D7 236 M2*,G41&Z$OLQ]P-())+\DK0@;^J*4K/\I)"[R85^DA(\35&"O4MM+:^`YSN( 237 MD+);)=>48@I240)X(GPD1K3T4#,>BS)3L\:GDJ;1"QXLI"F2Z0A5*7LAWQ'T 238 M26Y:&?S7-;C\H"O;5;0"?4<!/=PRF?,(52DHR\XKX&$!.#)=1J&UXLJR3MU1 239 M!S,=)]8Y5$@V58FUSDT+_AL=1='%LNL7TY6(W)!X7!EA1,`-)^%>IBFQ74!5 240 MHJ0H]JB%FQHE@;JR%"9,+FHAV6/E#7OJKBEA>7`>*$A%C!29I4N+BR9K@OJ, 241 MP"C$8+14&25MH28UB@IW"U488ID8H[[9O5GE@,)<L;UAOKE?44V68CFBLE7@ 242 M)2&K,/JGZTE$4XQ<S5U7@)K\(F>E?VLDDJ/($_K),9XDRF<QX$Q10F\C%#LU 243 ME)J`4N0Q5:3!22T'/:V>G]D3:7XZ`+/$(9(_/7YZ^]-/@E;??_KXT_%9N53S 244 MT_/EW^^:Z^\><_F/Z_R#`R__X*%HKOWE?^''Q^%H=?BIEO]1_K]_,OUDR^?; 245 MQ]CQ(V4H1789CHEZ_"RVQ)M8"=_EW\?/^#3!A9N7W*QR,\M-.`0N_>UEOZTO 246 M[U)0[OKK)7?;RW>YTP$K^--E%13^LM[+_BDJ:"_OK)O1:SXPI:3+G<%S-^Q& 247 M8Q?>V8FQ;U?M`FLH]W%%!:BZ2X&\"S^9@/N#%7]G+9WXS>\V[1^KJ7=_R6'U 248 M#"GA^?J\V^7N8!TX;2EN=>V@CU-!6$E+FO41PPKG1CQ2K8_UY8-Q*+G=6/EW 249 MJP<./*VG60O%ZJG^KLT::%K/S]D'K5D#Z'R[5X2O'G*#U;.C1<<2*7-:T*V? 250 ME6.)0<A6TJRC33J*>T7N3?:R<"BEDF:WAW6R:B>U]F*U-ZWC9SN4Q4J:];+? 251 M_&Z6N\MJ'_=B=Z9UO.H(X^-]5C*LYXT]UWO=^MPA`%HO:_UN-?3;P^HL]F0] 252 M?C>LMY##O*WA=K"Q&@[`>EY!4KO4N!>/""+?3?I[7RZ;W_%JQYJ!E&5VEA/> 253 M=-@''YVV9IK_]#M6WN<%TV,IF4Q>=C/KR++]T2@!G?6N6#+5Q?$[UC^'7`]L 254 M40FR9<19QM%K>C=KUW2YW(K>];X52N'T.N1NUO5CJZJ:8#9;0S!'[;8OMNRB 255 MV:P@6Y^YA`30N61ZKZM-\F4BY2LKZTH74>E64JSKNHA0LJPD^PMP&=WG%D5? 256 M7YGB:$LI'^NKA$0N*RG685M+(5>^DKAN;OHB5M&,5<.F][J@O!\R>-!MVN=3 257 MHB"//ZE8PC7S$)3PO;P#!>3'F_R=W_/'[=L;;LM?F;;JE1^%15*",/<CXY?O 258 M+'W@I^\?A27I(=CRNS^5'D5^]U%^\`;>_O3G;X^SC3]K^V=#9SN[%?WMV5!^ 259 M:DC;\7<^XG:MQRXV]90AVYHR-0*D4\?^]=AQSMGR^SD$LMRB)M]@5!6/N+?W 260 MO8H?KRC(A]C9=T99-IZV0+;-@/C>8EHL2/I`MU8P\;IEWO7M1'=""%`947#N 261 MA;(J9Q0<>R'VA[COR[C>LS;JFXEOA>W>:A38FK4U"&+-H2-,3JURWTU\/^RW 262 ML@O.[1#QHB@XMD.L/][WG</WO>8-EY?G?:]8TZ[Z?2,[SFDZ/N68\"G'OQZ" 263 M0_2C&I1SZM#'Q&@O;KGI&I&*Z#H$J(2VR7HWA,KD1'<(UW"A8URFJ%]X:,4\ 264 M!*HZZEF]QI[23WG1764ZV@&./T2KF/H><"EOP6HA*77&?C,.*='M9JE\'"*F 265 MLC=@5H]#P&K(S,J'?/60F'S%]F.J#I._9:N$L/#UV[$R5%2JPYJ\!0Y?(#KD 266 MR@4.'V4ZI*J&]+".>JP)E9UY2)2+&D+IQW;B@E;98#X$^;-^/E!V_WP4T2?] 267 M7*E1YSO]BIT*]?MXKQ_(AQ4U#"W8Y3)K\1O4=)-K."#>\&25"_5)/AH?+?)H 268 MF8_ZQB<+GVQ5*LY\M.#1@JH+GRY\>CY869'+1OV['IW/4W%363W:&RO(JJ'+ 269 MD"8RJ\BL(E_21M'-!I6@B6I[@?E<UV.P"M0P'OV-3W]4+6S2@.Y5>#I+[;8E 270 M==L0)G[.7T.?/P8>]^XFJ0T/2U,_Q&!B-ZJ/8SRYR=3'\YA*,[CY:6#_;!-C 271 MPZN]C_'5%?X\PE;Y.<A6=3X'VNHN>[1Y_)IU2H<;O)S',=H\P?W38%O=QWA; 272 MS7F/.:&=O1GJ`1A?NK?KN.,'^7$,N^*48^31.=WT=1RR[_K?H^_)Q!1C[T)_ 273 M@&1\RM4V:-5VB$,]``G?ML(D<+."9.M;=6$Y;F]5>,]^VZQ0N3GAJ7^ZG[?N 274 M,YVZ"T_]A^GLWM`*5:Q*3C8*(TUM-1^:[I:/HB==9T=M!(1@;?.>VW7<+Z?2 275 MN\^\TE&83]4G[U;*+CS5WRW9&7L;96PE*#9*2T=I>=*%<*R6HS0_J<0T=Y&I 276 M;-D=[\7'V*"(M361OGV4U%.1PO^;CL+RI$Z+4;&?3!8S$X\J;2]"&-OOMD/K 277 M%]T[\YA'83TU-/@=YY.^`S1]W7P=98Z,8#S6Z27UV"&JO5@_"WV?4&NRUGJ4 278 M.4KJ9O\>16[=X%0\N^VXQ^U=,9/Z/,I\[VE\L^<RQU&=+Q;3<EH_8I+>H\`A 279 MD]O!_>X'5C^;/]U$\2AR`VA0%+WW!P3K[-]1X`80GBA[TSP^C9SP:60WK-W= 280 M5"EC`<**+:E!9$)MPA4F(&E>>N<)?>;0(<?:6$1DQ'T'O,Q;?[AHXSBPT!LN 281 M;/PX7D\."0-O(HJUE45(9N\U]$0)D2SC,E#H8H/3"T(_Z,.RMNH)"/,6/V0T 282 MNDJH(7C%JMAB@""C@[\2+A">1I:/U5]"HO!NL?9;"!-.15)<:+.NO=45KY7. 283 M^^!P^4+/(57X4MBQRFN(5+]FK'&7C>PUJ\""'.6HD/K4G!TS?!*N357B9G=H 284 MZ8ITV#*?X:W`*TP`YG5BQ6QU]'NK#BU=;P[=+^+WKC&G:N+L,-*UW]"QC/NN 285 M^.:>:%]%U6X?]LKQ]>[4/Q]0\WN&?B7T44._$/7HUJQH1U&,0P^#,4,!038@ 286 M8W!`(8Q"$T=Q*"ZZ^2LNT8W?(`FQ1J-!7QQ($(4JPB-0$$SY47_P7KJW(#IJ 287 MWH*GWG[J[%-7W6GPU-O\U-O=V<]=+9^ZFI^[6ME5'_O#;L37NQW/X".+RI02 288 M'3!MI7SH40+%>-)2,EZV.X+?8;4,`2T*:Q*DTF[GO$I1?]G.BI3O/<UU%FU_ 289 M1;K,D[U+#QN3QQ1.+VLOVZ&!S\3F5L^B[=?`1Z2N=9:=KHW%;QN.H_APJD'5 290 MS6C1MDQ4R7RH4LZ2[1-)3&$:9^'I%L%+MGD]E1_>$:J'86<?:_'A?T.2AW]% 291 M@GN'AA<2/DQSO*5OJPK]>&+%FN4L/1TL,D*CE706GVX6?/2JV3$)5AS>%@[2 292 M&.UL^<5\C]2^]S+B36USUC[)[IO+4]'IK>%18"6UL_QTVD`PZWQ^_O#=8*-; 293 M]>EI!R:FOWM?1^F+^5ZIPW<*@F%X=3O+&+=K#T/ZY!?B((_V].#I'I)![G6+ 294 M3/KD).*7^N99ZOBFV>XVZE/=X>+E)B'[SCB[]F*N:NX4"(?'L]?+&97A]TK2 295 M.@M/%Q63Y>VP`BL^'54BRJ,_%T>81C?[8XH\RK9\4[K5U<_"[+.@6]-8[>P7 296 M"HOO3V%GF7,J//@R2=5I]%IRAHAPI&<=Z2@]W6M([.\QP>OE*58D$]1:.IMT 297 M/[>&]P#(SV:+3X_NF_S&V2[-/C]3=W(SZ;:K+:%32S9TLP0=1^U(%4^L*?TH 298 M.\-5.%,OY&6^/(>L>(YH*"B/2#J@G_*B,8+N-E[V)OS^>#D?+3YK&BQ:]2C+ 299 M/FE+<=LN0@&Z0V6XED\T]A>/C?";[WT>)6?0+)&!7X_2,W"&;U;6&#B+E0:" 300 M7+>Q!\=#IF9*_*QG=Y:CM/I43H5`S0_IW88HYW*IN7SV*?M4RO,?NZB_G-$[ 301 MJ$+/M=&R,Y*'(]3G.`K/<!Y.F?#LV!VZ=2M&UI^?U+K=[<M>!!]K64=9]7E< 302 MG,=Z]J?X/.(U9"*U!%MI!)GPN1<?M*:O%W`91T&N<1VE\\#,_-QK;ODH'@=X 303 MQF>&ZCH*`T;K9+4ZSM+FD[6H%I]:K3Y3?(UR]Z5>]44<B2=\R?@H6@<:3Z2" 304 M]O/)>8!R?#TY9,<#U(;-^9FCL]YNL[$X&]%3M\PY&>RIK"HK*];30/:)A[/- 305 MLWP=`!]?0PMAM4AWH'QD?,QV':7#AG:]F-MY%W4?5_9(!M;*LO?(;01\M.HH 306 M<WMPZNB4\[EI@[,4]=2CR-WU;*V[YO"VW,#`MQ.C9-FK+2KK_83'$UC5D3/7 307 M#]_VN,),QXD'90-:VS;VS<"JZ::@^4"QNJ/>6Z?7W^"KH5">"-&2WM_X4Q6@ 308 M5F.X5;>Q,K5%!ZPEH!Q2"`*J!JI,2E#4DHTF5W1=0>H'O\B,CW@?T-1@HB`? 309 M),P>F#00(DES-*,-D#HXE#FM2+)@P0:%\[[L9<O+]AKB[.Z>RPDR`_`5?I@X 310 M'CE]AG@W63K7QI<.\V2><;2;>E$"WHV[\UL,5[)M'*L[Y@DF`[J)`D[I"4<& 311 M:D/6J7MY?SZ]BC)Q'0>.!8!TK#9!'K[&BWEN`J/UN^9G;VP8F`6(O]03%@8` 312 M*W!@/6'"`%\)O)8Z3D#HR&OQK(4###KH&O@<4'LQ5U&@+7X%.BA2(9L(RFXG 313 MTNF>A*S@[*$#]06,RK>13H]V0"A^BZ=&,X=C$EN5]??:!L1X,7_WCE8&:*K. 314 M]EEN5#AH@*UR`KB`1.56<"+U1F^!AQ+`YCR0FV,A&++XSOU&;0Z$Z'2;;0,V 315 MAT`M^$#K1#]!G#"H9MV%WVL-]XB=7E(@\VOU`Z`%N,'I,"<X<UP#_;JNTR7O 316 MH&;>J]<4,CEC=.?&9(YCZLV))B/L!=WF24$^0%7@%`"RW`Y$%2`%'Q"O7G*Z 317 M61=UWPFD')UP>)<3U\(R6$\#W`WXFU;S"7&0%/`#;JYZ`J2`'CQ?F-+E\,AA 318 M!Y:W4X]<L>DFCF9.IV"@C7X_X(VW+2O+^4>.SVW?SB>@"0"!SY?BP.F-9AP^ 319 M<+#F&65V\#!N[GUWA-SMM64,/4CL\%CWZ(@T^UYD^[./NH,01P/S?B*(V.OI 320 M10VFDB/3&2^RW%OHL%0WYY,;YU!PFK8]BAP&+O9M[]SC",J-S^>(?78F-@:E 321 M$4-L&DH>[_T#OC$+)'>YS!IVSA:4[G"FM8=%I3L];6^-_KN.6"$T#Z/*X[VA 322 MJJD1Y2Y7ZNWK'E)N<@L!U&(1Y2K7R&\00;6@<I$[4F5YL($L5])5&8/."+,% 323 M=T4BND:9+;`+YK6'F3VPNWJR4#/<D(PF2\^*A:XKPZC@0]&S63^&IHQ<C>%H 324 MC_1>J6L\.L*\+7<+25N4%QS[)&T7<V!V938A4%_5@RE52[O2COQ-VCD^AO!8 325 M1]27R0./^;:#OO=<5Y6FCZ`O7;J=[<B-H<U<TG*E_U-JSJ@7!T!YT!=LVL=Z 326 MBZ!OQP^F^H%9`[8Y::7`0SIO2G9\X%CK[QK;!VZ0&E$#?J_E"Q5\S!]<CMS= 327 MZY*T';Y;F!C5?ISRQ*CVXY-,_5D%]!2L0ZX^2U6XB4.NM)G\+%K:4CFD2UNJ 328 MGR0L?Y*PSP+V6;RTL6<!T[;R*6/:6/DL9N63F.7?B-EOI.PW,J:MA91I2_F3 329 MH-7?"%KYC:#EWPC:9SG[)&7MDY#53T)6/@M9_B1D_5G&VK.(51,QUVI'"''4 330 MD]D_VE-F0/T7I=A_(\?^I]_F!8S^]/3@T__I_6U_KOK[W__VKU+1CZ]_?_OQ 331 MU_>__?)F=\J/_^.__/K^XW][_?OKO[[]^O;W7Z*2R4H>[Z__]:]O__G'7_^F 332 M??'/6_^RVUYGV_/:.0DS_6Y.PC]ZFS_(2/B'CT13^2__]$^/49_U=[,19OO= 333 M;(1YY#',\96-\)6-\)6-<-@&_T0VPIS'"EI?V0@O7]D(_\>S$=:U97"E/[0K 334 M'AEXPA(.@`-`-]!L`4TN`./?$A"8&/"6F3O@R08?!>D([Q_EW[`F[WD^WJ)\ 335 MY11\Y13\DSD%JQZ"T[YR"KYR"D)V_BUS"M:!E=?X0RU;'QT<>/AF!@GKR!QH 336 M;TJ#)[=_&M6\S$=_,PY[KC"GS+)5[M52WKC2_\>;TM&13"`VKAJEFK)0S/Z= 337 MZ@8@57P\YINRS)DKT.4)M2X+VBEFPC))P(QEI6&M-S++-2-`3'>:CT@N:/(0 338 MC=$[W3-F\6IF@/P,1F*&WT/-2S12U5+]08?#WLE&I,:`*&O,1D27V1Z4OL=$ 339 M66,^)*3H^Y#HXCI&I1Z#HG0R'14EX/O`D-:_1T:7V#$XY]CD/39*VH^A:<?( 340 MY&-DM%T;&N.XQ?`<H^,R=2#)M;XH^U^4_2_*_A=E_^<_HNR+3@J=D:_T1=G_ 341 MHNS_?T_9SU<^UD3Y0YQV'PGQ-&SQ]U1SG@_=NW%4488KG!$#@7$BAH]FI':` 342 M'V7`Z^/8WPE/2FL"LT!IQQ,#0$*9[UY;5IJ\_*X_Q@?\G@W8X1VP)&E@#S#D 343 M!^V1P27MD0`+ZXW!)>N-)1!XCVZ[-P1+VIOH"6NQ7B@Z03<4F;`?M^B##V`] 344 M!K-]\>Z_>/<O7[S[+][]6?C%NX_2+][]%^_^BW?_Q;O_XMW__/\<[SY?_8#" 345 MXXMW_\6[_^+=?_'NOWCW7[S[+]Y]@)#_&WGW^9K'SKW^V",H^!!'KX$R39=@ 346 M8;RR?8"_5Y;&+/O'3:S8S)`E8[57[TU#EN`\-Q%KBUKVCWQO:3)HR6!M:LT" 347 MN96>P)XL:-D0U\6#&K?L^'&MM3-NR>"DU#,U<HG0)$[Y[A:Z1'RRB+5ID<L& 348 MGQY[J^%+D+:7[%>/E)0*W'N?#&6265QG6A;,1&RSYS0LH%D_]-M#EP4U&\/" 349 M&)^WIM1OV6QJ>B0-_N*L?]#:WQCA%*NP#8U^(LIYEQ]Z^!.\:(QMLB!H_="Q 350 M1BRZ&=.[U8D.OX%KC"_;@1Z?P5.&09D0?2UD/2,`B-AZ56JU5E.D&G"XK7O7 351 M6_Z8^)R,=$<&8-[I@>UO&-=I,U[?,$-30]6=FX7-/..[-NMD__NLSSWEZ3HF 352 M7&GC-N4W,M1CQC7)8D\YO;Y[PC4OP./T8)OO"6?JQ#'A94_WK1U3K<D%.M7& 353 M(_>Y5KIZS/6-N1=[KIG>$5-]CUF^6;J!!K))(X]9)BM]SS)S+/8L,Y4C)OE6 354 MC@FVE`6=85+1;8)O]&CO^46*AL\O3[_1N?5.Z>22NFZSRVP+F]U;3*RM_W3] 355 <A6SL7WY]_?6___(M_>D__+L?_B>&O>/$C-`````` 125 MV['D1K9[UU?,@Q\T5=J>3-X)X\PW^,'/`@KEZFFC<3S&2(9_W[%67!B[1R., 126 MC0/#L$M`"Y7)G223#`971*Q@UFKWQQ%Y:$-Y[UB2N$2\PY6F&'C3[L-+?;2F 127 M7.Y0,C2L#1M!6>Y]3_N3ON;0FZ)_CFIB"-35IK2J&@,^ENOHF0%70#PR7@4V 128 M3=>:LG0UJB.W:VAT0/YQ5#H623]*<VWG;XX[[)^"51$>7'+6VFBN-;L&M'#[ 129 MJN%6@VH<.X8;E]>>T]4FF&NF-4?M,=PB_3(XL4<A+#A;:,UI?C#YL_5D*9BW 130 M+$R%=K=C*FP-QL"@."L8ZK"GAR[$;*HKS3EU'^"/8N2H)-O19((%$5%U?]LV 131 MUQG\F.,8E>``AB1`9Z[2=^C,K1%HWN\'\<JBN._P3%$N:M*8R]DR"WR7X\9> 132 MX?B$9ERWZSY`1^-)0RK:3MZV<M?8!1!]O-L*9QM\)?9G5_O4@^^";K.W;83Y 133 M`]FX5,&`%C2RN8`P?G*WE=7\J8K-:9B_;;;`.=2&Y<E>J&"^F=*LM_T(_I'D 134 M;!,96MF9O89O.'+1E%L.[7G/"&U`'<):/#I3EMD\_K9YK>F:=>SC;ZMW#P`B 135 M5\VT&M0F*0\;,4`?;DT>3;[L^[[<8NA=[XV#;[#42W@UY6KLL=POT"[2(P"C 136 M=H1-!ARPEPL![(<6)D.]%'DEDZ$D_TCY398R`7.#*TK6`=TPUQ!L_8J]6>!J 137 M`9@5TXSP&;30-ZS8#5^23!M_T>AT$T4K>'<*+GQC?K7@9:2Y=OZ$?KG5%%"+ 138 M,GH#8420\0,V,7Y07G^LC7:%;)/P%3T$6`MD%BW$"@3UR\#3,(%EHDW<-"YZ 139 M`:R6E?SC5MNAU-[4L2=]>>Q&<PC>*!G=B\;'H&D!,/?&T"-]APN>Q>N">3)O 140 M^A976Q=`_:+G<<*@DL4L+8@QM*4<WA2\`DTC67?2@8I!$&")8>J+#C410?9` 141 M!K*TJ]&O*$V^D0I8+S@OE[LV]X)%4@:LH\?H!?T7[>\NO:8O,/$8;;<-MZ28 142 MG^'2$^.=%A\<<X`<389`.K*O\.F)BJYJUS0TLON>;\P(<*_>0S0B+"R,0!_R 143 M0F(97>[0DS872D'B0[G\)S;3=;MQV&1I8XAO3H',&*RBTFYS:D[9XOB">_,% 144 M8!W1>US5K0EI`U6G:ZL[Q.NBIU`PR\;4-0&2$$#9MD.Z1!/!FRFKE6]^%4ZN 145 MP%<3KX?(2:&[L]QH&_%BMMVV"9A(ZT7;$TP.U`%I!UW%Y0NDZT%WI@P#Y$,& 146 M\XUTEVTB!I*1>F4I`90T:5@]RQ@?`46-KNL)I^R4;>1--@*^/@6LWY@_&'B# 147 M5J=4"/NVW.ITA>4I2@R=$)R#*M:8>,_>U+VMXR?&,U>*+)XW;*KHQ2ICF93) 148 M=@P1H`>:#G(N))&ZY3[TT=WYNFG>BKDA,[)&<>>Q:$LZ=D4U<JBZ:!ZZ;NOQ 149 M'M\H@WTMN!7M--&3TM71ADF:Z&Q4(K*$=X63XK%O2KN*6NDJJ9,>8#'G-ST! 150 M565-VE2M5*>ZV"\!\&^P/78S<>NC<3370@?&)<(#=%RR![DDQV99ZD%&XE1@ 151 MG(+,@H1Q1/_>CG'@RC;2BM1[3%!8`NO8QX7.LK`-12,,LPUEP1Y,"0?72`Y1 152 M$6';U>2B327``/VVD?RA@/O)(5JX.]C?6Q-]Z!#MX=6"^3<.3M8`HKO%B7GL 153 MMFCJ@$8\,")\81I6/`[1I7E*MW)DDD-4NI"CBA/Y8>$0+8JGR*1N*5H/LR7A 154 M',S?B==?G@,F&T7T#O[0\"4#S<AF4ASEC+K]MN#3P`,-,;J5[$*1U!;1^K%K 155 M1.M;QCCEN@^(J-3O/7RBO18S#.$<B*8*LQFB?Q"/:=YVI=/J<2A8J[.DF'T5 156 M19.\HH)>KC`,12PMLPTAV>@@)*",%+(7.[:%6U3FL#G*$1%(MF%=\]B&`R=6 157 M*,J!5][HE6+S)YRS9DOFH6Q%QS-:+3N@7#M9AZ6'M4]7P'3SL!A;&W>O?GRC 158 MLHGYD`FXZ8:,@&\U;1+"$&*#++'A2*K#1&R7!4"F6CP]P:+D2:U,-/A1X(:C 159 MLJHLB'"^R3S@2!,W/HLR3_&KV<,:HENNE.2QDZUH##<^]QU^O!`FL2GKL?SE 160 MJB^;7[KNFN9%8N!78-^"\;W#S(;AN3WD+A?3LC-?3P08]N3=:S(Z1:#-C2T7 161 M7<,?,$V7NK/<ZBS`GV%VRO9Q'V>=9?8-.(AV-CS;,0#@O*O-K':8FTK`+SQB 162 M9D=+[94Y-6%YPL/7W?(4XUN-8CCUUIW5\BA7/(5H[QT.NZD3!&4]2W_F4(UP 163 MHR'.OSW@1&?>=K]>6>>=-.?@R6.W++"/B\NLW)O9(&'HPR&SCFG,RZNX7JZ6 164 M`2Q_QB.P*OO,2EG>L`2+2A1#-1:5V&_A\H#N/1XG1"CN=;@>EI]"K;PB\D?2 165 MU&K9^.P1<<)%=7\=7!+Q%.*-NX5B02Y6=\4".=A,O=#X57U2S#LB'.1W.)\, 166 MFMGN+65-F5H>Y03>$*@:MHR@BV6%V7W9/'IRUPF<OT*78\]W+AE$92Z_+;9- 167 MTLHB`36<B25MN,@JO;K?ONY#K\%$MTRD8IZ7*>5MJ59P6.@BC5!53.R%?-4K 168 MS$XC+%-OAP82#5R6;S*;XW.YU:G4,_+JBK\*W4\QHU#'=48X6A9;M[O!5\'< 169 MG@V363EMACI>3`!&-N[JR?"\=SBA<75U#TFW[FQ8GT5J@N`K=A`1S;_10?8: 170 MS^JXIE!(_0>Y-@)+85G(#DCXWL4X@VTV'-\#=]!$`,P7$Z%U6#Z"8`W=B]5$ 171 M;"Z:"XA5I$<>OXC,@>TK"!P5QAPL$\3AWN2G2OA`!$E6DE2^AT>E0,:XNL%Z 172 M42,(]LBZ(9&B("3F9MFD658NM9H8,]N3IL=FR(R8OEX;=A'HV@W-;\3<2AO5 173 M,+T(-TSTARQ'V%6RACH0/:--I,2(JD;_QNSH_JHP#-NE=F6%8;H[#4\CFXBJ 174 M$RC>:1P!SDN_;AH5G7&[4H&4Q30L`>8K.[AAA@',B"IX0^9M-2@OX@<7PJSD 175 M>8CTT:)0PV:3*4(H#V>VFAPR@&-4XX'(W-`NO-LU"R<'4;TM"$>!_,W*FQ%Z 176 M:E&[;%I0$39MI\%3!7I@?,5Z@B$P%@R:_BD\G\+SOR\\KI92P*(V(QKM@+>= 177 M!)$@P/1%MX#NCKR8]BO9^`-$=WKZCY8DMWGI1MQQ]MQEM\7$")R)?.NVPC?; 178 MB<R6:N*.Z`!#=+Q]1Y"W=YZ8X?MCQS;<S4Z4"\U$QMU^A09OKV+4QPLUT!UU 179 M;^R-$:!NMZ_#*>I(J@A2E*9^F[W7P6NN3&S!GY/,"'T(Q+$K\&DOM`<,NV-/ 180 MUCQN_#E&\QV_ZT$HP7BZP7ZTH2,PKYIH3F))O!-<P&>\81N9#=N9PZC94^3@ 181 M1E"]P?%_`N2-43(+C30RFKO]#$XT1[4-)*$>EB\NAX?BD42\-=\-]\E?TH?` 182 M'PH9DJOF=)M&[B7Y(,@[OD<\PLW7X54;C$#J-"%;'L0[_9.G=M@SB*+O&F_4 183 M08Y4`6K,VB;BYI_[CF%H2!CJT1*@F%L$.+-&"40-\/TZ'#-,^HGY(ST?9"Y] 184 M",<F:L8,G(TU1HZ!](#V.!?%:>9#$]GH>E!&,5&?[JC-`G;E$.YFR1OY?: 185 M-_(7\^#M$0+RL#K:=:*5C8$B.WY%K,B(!-3].D>@11PH,;N%7RK)V)JVAKA` 186 M2&G%O.\@">#L%M&5VA`O6K7[2+J-IV"BW4&IQ>7TD+5<6%;<?%T](C85*S^L 187 MY4HYL(@PLL:OZ_+[\%WZ0R((J_H@5!RE<UG?R!TC8:F2<Q&"7;'XZWDC7$X+ 188 M+LK%&GZZT-BQA"HS.".82U:V^=`JF1>:M$[??D#:BIUJ!ID%EWL9J)6+I1EF 189 M%3NFFU`PSN'K/G:[[#0F;CS0:':[SV,%PFX7<0M`S\OMPP";OEU&M1$S(NB< 190 MA2M_)MO]7LZ?9-38XK_0%L>E4;C<5R+;]&D@FA'DTBTI7T;ORD'C?JBF(-CL 191 ML-Y77W8&TQ['*0@7R15;!,[L&1[Z9#1Y1Q[>#@F"M2["D8SWVZ*88-U<=H13 192 M9U_"M8`,EU&3\7['.F*9,C]@O-=U1@'6>DUA8U$D'FNN#$FV%XL@A_5)YFA, 193 M4M'U?QRJ^_)SI7H_O8/_;.]DNL/[=;OI/GNSTXD*<RF/0_5D-)!Z4T?D/ZVE 194 M":#D$9_((JD5L:^04E.NH-J`W6'W>XX:BT(/\69R&_+5W*$ZPW3O_00^`1C& 195 ML??!SK^-8@CGZE0W8N)9U!3_PR'4?_F7'_<,8[;3[Q=NO(XSF2PBBK_U$"WY 196 M:YTUIF#&)X^PQS</7.QK^Z^"80$`(THP$`L\3<5HEX`YS"$"^*DS<@HZ_4\K 197 MVJ'3S]0,RHS*QOLCO"%`,"6T8&=F2;\<Y12N"?USGO4E&(8$KP`Z`DY,\G$Q 198 M-KU61#HK.$6"878M\5`EK6LZTKEO->H[R6,U(9V"\4Y(9U1;RW*Q-=^TPT]U 199 M:#4"8>:.O4"N6G%+&O&"W1WG&-G+<`XD,"#5A5SWRX%.UQ.5%0R%O@6``07R 200 MX!P9\'H%SIE;SR03:>CA0@&4:8<XW^C\K8%RFIX@)W_N&1'_ANR1*X1.+D?W 201 M+5X4VFIVET>F!,JAVR-0#ER$,U!.&WZ>7C^OTVDC^0S)Y;Y*@!Q!DO2B``K) 202 M.HYV1!16)`\`S$P+"#1$!_0`-D"?%C2IQG!NL#)PN?<=$*?<>J`/_ER'/-B" 203 M_FP81^:G.\J9FM<.O#/NL#`$P-1U8"@\3,-8[(W.1S]51G!GB79(<FCQ1J2. 204 MU@`Z!::C_EE/.AX@S(A-JO+T&W.NXN+2@]WESY4@"YGP$1<!MIG5?&DHHY_- 205 M,,\!\3C;YCY[#G%/-[4N%[W?=I1A/>@52*<$FX](9SDS5@2@DI.A`"@<[3C; 206 MZ\Y`!\[>VY$.X^CZ9[UZ^)@!;4H]%%SH@GX%TL&"M_ORJC/P$9S.,SR1E0CX 207 M"K!3]!`&G%Z@2\"@#@YA#V@)Y#.,%%5)?=$SJPJS]U*48A^V824/RE$52#"W 208 M_:@>;VSEOA5R!TQSN;!6.B"'_6S,H"HA2G$S,2V@SMT,B,E%L]0.^:N$3W^) 209 M,7^E&$48,L0V>LPC_QR'Y(5,F!4!1F";8715\HOU!`S\2HVV0#K7T3^`--2" 210 M^C<HF]UNIU`F"7$S7,Q&E[L=Z\CT#2/(E3M1=S'E[00W<!+%"*@SKF(_`ETH 211 M,>0*]/*!.@B-70%U:E\&=:2G,V&=4L]^25I<-]N;%WH$6D'P__#JF.D41"]B 212 MG^;1)+*.+T,[R#A+Z=XR%#.:LE/C(G[<;SNW$3AX9)I</]D^C!^;N#+?6\\G 213 M901CG7P-[`WM4'?A"MGUQ"JF'0NS.,P)\(#4?`"/)1W912N7'7(VYXDZ0R@. 214 M2!IZ;I$'*NZJ0GXGEE1-'(#Z=^>?*TL*L3DX\:Y2F(YVWV^(R<.-U-4+MT@> 215 M43;#0TS#^8:<$GJ1X(43!,R$ODUF34,NW$-T)!,?VNN/:]Q3\R[(K$'BI+0@ 216 M^A#E(/^`KTXWUU"Z`TQ>^-D:W(P"&G[$-Q9`W%D@U\#FF^T-1UN0G=+AB-MB 217 M5I*U4>@IA-'^AL,IV$<07,0@9QMBZK`3H*$S@:,Q_8(I?8)82)&BLPZ9IF"X 218 ML!.-:16=28$R7AMM#)+)5J4WK4WFCRQZ`\520/D&.04T0K:`'!&<9J#^/#", 219 M)CA6FO?8P&YI:_$M]ZT4HE[I3L4PMD9Z#+(_<608G8EMU[<'CBE".:@ME:FE 220 M^#(%$A+!#`$EDL[.!II0:_)&&()+4U1PG"(<AAC$!I80R$G,_"052:Q7N%-E 221 MGV8-<`;?3'%!%A9<R<A\?.S.!)>Z=1*FTE;H+A7]A?IEVT,+E22ATNG0G)O\ 222 MG"X:]@W@'F-<Z1*^9+O`+^!D)/WF%N'$T3CH1,4@]HTTGL=N]/F*J0,BTAX8 223 M!MGG?I270@6B0-!)P3P--"XZ16NS%I:^YD4R72LBUMA+X)>N&$C$[."UU9$$ 224 MDGV#]P\350L38%E#Z\R0@?,("X;<G(IQ%,5X4UQ-U!;[H()2+\XTDW8$S:"/ 225 ME4RH1C9?X3BV0;\M<K<QT'MLN+5)#RKD!]T<@<WDU;MU9.@"6:.<[*`]-`-7 226 MU)*RN3K<TLH'PQC*RUZDE&F>\.[T'.L0D*G6(825QP?2=U^Q6D2[%N>M(4;) 227 ML`)Z*)L;A`VGGP1K3;0M?-O`"&QC5M*]!$DY;0V+5:E68#<BF^1"FM(@Z9"T 228 MM6L@^@"_.0<27O;7JD2LPH2H@@QHO*@VH0[P?3EI#2M2:8E8>/R(B4@P:7A. 229 MC*00*BN0;2!]2U;*NBU(46NE/#9UX=\"*TE]K)I,/'Z@CH0+FBG)=Z?DDYQ( 230 M234=B1-[*-ABK:">=6'Q0^.9DA3S79N9B"2`!_6F.=BF)!_81JB=5&K)-27Q 231 M_S8E"553,6GKFN1PRKI"9M9574D*NJDD"B)G6S/,I54Q4NIE:G)L#4@4&0"* 232 M%M*>P:&\IFM)D1TF5\L8D<S:J"1JIZJ%GKR]IV)@LJ<==%@<,6UZ$@>8L!L7 233 M8THF&+()N)I$*ALYN=1#BV&+.4GCI*(LQD44_*_9U0*\27>=H2OW(I6P:8YZ 234 MD5%_>\@*K*8K6^%DP%G,W8)SVN:<IBM%A3%/7F:5=%:QO=%)G!%BRI)?]CD9 235 MWIN[A>P(E^E*;!QOZ@)D:$<WI%JY@J@M\8&AII310LKMX%0TUY4(44-+[(T9 236 M?^#D"Z31DZ@(78G]F/L!)!))?K>T(&_JBE*S_*20N\F%?I(2O$Q1@KU+;2VO 237 M@.<'B)"R6]VN*<44I*($\$3X2(QHZ:%F/%9EIA:-3]V:1B]XL)*F2*8C5*7L 238 MA7Q'T">Y:17P7_?D\H.N[%?5"O0=!?1PRV3.(U2EH"P[KX"'!>#(=!F%WJLK 239 MR[9T1YW,=%Q8YU`AQ50EUCHW+?AO=!1%%\NN7TU7(G)#XG%CA!$!-YR$>YFF 240 MQ'8!58F2JMBC56YJE`3JREJ9,+FIA62/E3<<]W!-"<N#\T!!JF*DR"Q=6EPU 241 M61/49P1&(0:SWXU1TAYJ4J.H<+=0A2&6B3$:A]U;5`XHS`W;&^:;^Q759*V6 242 M(RI;!5X2L@JC?[F>1#3%R-7<=06HR2]*4?JW1B(YBCRAGQSC1:)\$0/.%"7T 243 M-D*Q2T.I-U"*/*:*-#BI-='36O[,GDCSTP&8-0Z1_.G]IX\__B1H]>M/W_Z8 244 M/BMWM_+T?/WWI^;VF\=<_N,Z?^?`R]]Y*)KK?_Y?^'$Z'*U-/]7R/\K_ST^6 245 MGVSY?#N-'3]2AE)DE^&8J/>?Q9;X$"OAB_S[]C,^37#AYB4WF]PL<A,.@4M_ 246 M>]EOV\M7*:@/_?66N_WEB]P9@!7\Z;8**G_9'O7\%!7TEZ^LF]%K/K"D9,B= 247 MR7,W[$9G%[ZR$_/<;MH%UE`?\XH*4/60`GD7?C(!]R<K_L):!O&;W^W:/U;3 248 M'OZ2T^J94L+S]7EWR-W).G#:4MP:VD$?IXJPDI9TZR.&%<Z->*19']O+-\:A 249 MY'9GY5^L'CCPM)YN+52KI_F[=FN@:ST_%Q^T;@V@\_W1$+YZEQNLGAVM.I9( 250 MF=."8?UL'$L,0K&2;AWMTE'<JW)OL9>50RF5=+L]K9--.ZFU5ZN]:QT_VZ$L 251 M5M*ME^/5[Q:YNZWV^:AV9UG'FXXP/MYG)=-ZWMESO3>LSP,"H/6RUB]6PWA] 252 MMSJK/=G2[Z;U%G)8CC7<$QNKXP"LYQ4DM4N-9_&((/+=I+^/[;+Y!:^6U@RD 253 MK+"SG/"NPS[YZ+(UT_VG7[#ROE\P(Y:2R>1E-XN.+-N?G1(P6.^.)=-<'+]@ 254 M_7/(]<`6E2!;1IQE'+VF=XMV39?+:]6[WK=**5Q>A]PMNGYL5343S&YK".:H 255 MW?;%5EPTNQ44ZS.7D``ZETSO=;-)ODRD?&457>DB*L-*JG5=%Q%*MI44?P$N 256 MH\<ZHNCKJU`<;2F5M+YJ2.2VDFH=MK44<N4KB>OF55_$*EJQ:MCT61>4]R2# 257 MB6[3OS\E"O+XDXHE7#/O@A*^U*]``>7]0_XN7\NWUQ\_<%O^*K15K_)>620E 258 M"'._%_SR*TO?\=.OWRI+[G?!EE_\J?N]RN^^U1^\@8\__NG']]S&G[3]W%!N 259 MY[2BO\T-E:>&M!U_YQ2WZR-VL:6G#-G65*@1()TZ]F]IQ\FSY?=+"&1]C9I\ 260 M@U%5/./>V?<:?KRCH"2QL^^,LFP^;8%LFP'QL\7T6)#T@1ZM8.+U6GC7MQ/= 261 M"2%`=49!W@ME5:XH2'LA]H>X[\NX/8HVZIN);X7]T5L4V)JU-0AB3=(1)J=6 262 MN>\FOA^.UWH*\G:(>%$4I.T0ZX_W?>?P?:][P_7E>=^KUK2K?M_(TCE-Z5.. 263 M-S[E^)<D.$0_JD$YIPY]3(S.XI:;KA&IB*XD0#6T3=&[(50F)[I#N(8+'>,R 264 M1?W"0RM6$JCFJ&>/%GO*R/*BN\IRM`,<GT2KFOJ><"D?P>HA*6W%?C.3E.AV 265 MLU4^DHBI[$V8U3,)6`N9V27)UPB)*5=L/Z;J,/E'MFH("U^_IY6AHM(<UI0C 266 M</@"49(K%SA\E"E)50OI81TMK0F5G94DRD4-H?2TG;B@-398DB!_KY\3RA[? 267 M'T7TG7YNU*CK*_V*@PKUR_S:OB$?5M0PM."0RZ+%'U#37:[A@/C`DTTNU"?Y 268 MWOEHE4?K>F\??++RR=ZDXL)'*QZMJ+KRZ<JGUSLKJW+9J7_W^^#S5-Q45N_] 269 M@Q44U=!U2A.%511642YIH^IF@TK01+.]P'RN^WVR"M0PW\<'G_[6M+!+`[I7 270 MX>DBM=N6-&Q#6/@Y?PU]_C[QN'?WEMKPL#3U0PPF=J/VGL:3FTQ[?QY3:08W 271 MOQO8/]G$V/!J[V-\=84_C[!5G@?9JBYYH*WN>D:;QZ]9IW2XP<MY3Z/-$]R_ 272 M&VRK.XVWU5S.F!/:V9NA'H#QK7N[CCM^4-[3L"M.22./SNFFK^-0?-?_$GV_ 273 M34PQ]B[T"23C4ZZV0:NV0QSJ'9#PXRA,`C<KN&U]JRZLZ?91A8_BM\T*E9L+ 274 MGOJG^^7H/M.IIS#K/TSG\(9VJ&)5<K)1&&GJJ/G0=*\E%3WI.CMJ(R`$:UN/ 275 MTJ]TOV:E]UAEWZFP9-4G[U;K*<SJ[_6V,_8.RCA*4&R4?J?2^J0+X5BMJ;0\ 276 MJ<1[G2)3V;([/JJ/L4$1:VLA?3N5M*Q(X?^]4V%]4J?5J-A/)HN9B:E*VXL0 277 MQO:[/6G]JGMGF2L5MJRAP>_(3_H.T/5URY7*'!G!>&S+2UK:(9J]V,B%OD^H 278 M-=E:2V6.DH;9OZG(K1N<BF>W'?>XO2MFTEBIS/>>SC=[+G,<-?AB,2W9^A&3 279 M]!$%#IG<#AX//[#ZV?P9)HJIR`V@25'TWB<(-MB_5.`&$)ZH9]-,GT:^\6ED 280 M-ZS=W=0H8P'"JBVI261";<(5)B!I77KG"7V6T"%I;6PB,N*^!"_+T1\NVC@. 281 M+/2&"QL_CC=NAX2!-Q'%.LHB)'.,%GJBADC6>1DH=+'!Z06A'_1A65LM`\)R 282 MQ`\9C:X26@A>M2J.&"#(Z."OA@N$IY&5M/IK2!3>+=9^#V'"J4B*"VW6M;>Z 283 MXK72]9@<+E_H):0*7PI+J[R%2(UKQ1IWV2A>LPHLR%&."JE/S=FQPB?AVE0E 284 M;@V'EJY(IRWS%=X*O,("8-X9*Q:K8SQZ<VCI>G/J?A&_=XVY5!,7AY&N_::. 285 M9=QWQ;?.1/LJ:G8[V2OIZ]WW^/Z`FM\R]!NACQKZE:A'MV9%.XIB''H8C)D* 286 M"(H!&8,#"F$4FCB*0W'5S5]QB6[\!DF(-3H-^NI`@BA4$1Z!@F#*;^T'[Z5[ 287 M"Z*CYBUXZNUWG7WJJCL-GGI;GGI[.OM]5^MW72W/76WLJH]]LAOQ]6[',_C( 288 MHC*E1`<L6RG?]"B!:CQI*9DOQQW![[!:AH`6A34)4NFP<UZE:+P<9\5='N-> 289 M.Q<=?\5]F2?[E"8;D\<4+B_K+\>A@<_$EMYRT?%KX"-2U\YEV;6Q^6W#F8J3 290 M4PVJ;D6+MF6B2N9#U9I+CD_D9@K3S(79+8*7[.MZ*D_>$:J':6<?:W'ROR') 291 MP[\BP;U#PPLW/DR3WM*W585^/+%BKYI+LX-%1FCV>N?B[&;!1Z^Z'9-@Q>%M 292 MX2#-V7/++^9[I/9]U!EO:INS]DEVWU*?BK*WAD>!U;OG\NRT@6"V]?Q\\MU@ 293 MH]OMZ6D')J:_Q]BI],5\K]3A)P7!,+RZG66,^W6&X?[.+\1!GOWIP>P>DD$> 294 M[8C,_9V3B%_J6[G4\4VWW6VVI[K#Q<M-0O:=F;OV8JYJ[A0(A\>SUTN.RO![ 295 M)??.A=E%Q61Y.ZS`BK.C2D1YCN?B"-/H9I^FR*-LVS>EU[9'+BP^"[HUS=US 296 MOU!8?7\*.\N<4^'!ETEJ3J/7DAPBPI&>;=ZI-+O7D-@_8H+WRU.L2":H]SLW 297 MZ7YN#>\!D.=FJT^/[IO\QMDI+3X_2W=R,^F.J^U&I[9LZ&8).HXZD2J>6%-' 298 M*LOA*IRI%_*R7IY#5CQ'-!241R0=T"]YT1A!=QMO>Q-^?[SF1ZO/F@:+=DME 299 MQ2=M*VX[12A`=Z@,]_:)QO[BL1%^\WVL5)*#9C<9^"V5YL`9OEG98N`L5AH( 300 M<K_.,S@>,C53XF<]N[.FTN93N10"=3^D]QBBG,NMYG+N4_&IE.>_G:+QDJ-W 301 M4(6>:Z-E.9*'(]373(4YG(=3)CP[]H1NW8J1]><GM1YW^[87P<=:=BIK/H^; 302 M\]AR?ZK/(UY#)E)+L)5&D`F?>_%!Z_IZ`9=Q%.2>5RI="3/S<Z^EEU0\$WC& 303 M9X;:3H4!HW6R>INYM/MD;:K%IU:;SQ1?HSY\J3=]$4?B-[YDG(IV0N,WJ:`C 304 M/[D2*,?7DT-V/$!MV)R?.<KU#IN-S=F(GKIESLE@3V5565FUG@:ROWDXV\KE 305 M.P%\?`TMA-4BW8'RD?&Q^I5*IPWM?C&W\RD:/J[LD0RLE17OD=L(^&A5*G-[ 306 M<.GHU/S<LL'9BGI:*G)W/5L;KCF\+3<P\.W$*-GV:IO*^CSA\016E7+F1O)M 307 MSRO,=)QX4`^@M6WCW`RL>K\J:$XH5G?41Q_T^AM\-13*$R'ZK?</_E0%J-48 308 M;M5MK"YMT0%K#2B'%(*`JH$J;R4H:LE!DSNZKB#U&[_(C(]X)VAJ,%&0#Q)F 309 M$R8-A$C2',UH`Z0.#F5.&Y(L6'!`X7IL>]GZ<KR&.+M[E)I!9@"^R@\3QR/9 310 M9XAWDZ5S'7SI,$_F&4>[J1<EX-U\.+_%<"7;QK&Z<V4P&=!-%/!]/^'(0&W( 311 M.G4O[\_9JR@3-W#@6`!(QVH+Y.%KOICG)C#:>&A^]L&&@5F`^&O+L#``6(4# 312 MZPD3!OBZP6MI,P-"1UZ;9RTD,.B@:^)S0/W%7$6!MO@5Z*!(A6PB*'N<2-D] 313 M"5G!V4,)]06,*J_SSA[M@%#\%D^+9I)C$EN5]?<Z!L1\,7_WB58&:&K.]MEN 314 M5#AH@*V2`5Q`HOI:<2+U06^!AVZ`S960FV,A&++XSOU!;0Z$Z'1;_0`VAT`] 315 M^$`[HY\@3AA4L^["[[6G>\2REQ3(_-HC`;0`-S@=)H,SQS70K_O*+GD'->O1 316 MO*:0R16CNPXF<QS37IUH,L->T&V>%.0$J@*G`)"5GA!5@!1\0+QY27:S;NJ^ 317 M#*0<G7!XMQ/7PC+83P,\#/B;5O,)<9`4\`-NKI8!4D`/GB],Z7)XY+`#R]NI 318 M1Z[8=!-',]DI&&AC/!*\\;9E93G_R/&Y[=LE`YH`$/A\*0Z</FC&X0,':^4H 319 MLX.'^>K>=T?(PUY;QM"#Q`Z/=8^.2+/O1;8_^Z@["'$TL!X90<1>3R]J,)4< 320 MF:YXD>W>0H>ENCEG;IQ#P67:-A4Y#-SLV]FY9PK*S>_/$?O.F8B<OTIOWOK* 321 M*.!HZLS[,K^.;[@QRVTQY2%W&$KEO6(AZJ&N-3YH@>IA@6JI^J/3KS<8<RP7 322 M@\WS:Y>:]]!`\Y"KH@=C6Z"YRQUX^>:P0'.3&XRI>JBYR@T$)<<[ZR]R*9TO 323 M&G:.B&^]-?1LT=Y2/?+LH?1R;8L^PS/9<0B5M-C,,SDT$E_8A%SK*52U=P:H 324 M+?;[$&A^:8C:([_X9L"V,'5$?N<LTG@UIZ:.=$'K3;V:\]6F@B,F-Q;#W>M] 325 MGV`P)'^\KX\3"EY7;=)XC@3?:+JJ,Q24=6FUT1^ZG)>%$Z$B"@P9?-\?$0;& 326 M3YJT0=<P*I#J*_RE\CB\=N\XX_J+-M6KM'Y?>!B_9/'&D]_6#TF<X/W5=WN6 327 M*CIUM>#OI(M!;QN0[Z6,X6\M^RUQ^U.2:1,\;(7O(7CW^D[L4D>>I"]UHCQ) 328 M8>I!S=*86F]'+&7%CDQ%X"PFN42:P-_)96H[BV=JN3R):6JZ)G'%)W%M!)6J 329 M<%&B,T^AE_&>914Y(O??26IJ^%E@4\/%!9=\\,MFI]BBP"C4)+N/TK837TQX 330 M&:1(PDO2U1'?@DK[$5YPPU57J>P.E-<CN@1MJJ<HO^304@,I4>5F(,/%5TN; 331 MR:^KSQ2KG"VG$,S^E(+0_D6Y_#^2S/_3WR<@S/'T].33_^GKQ_DN]I>__?5? 332 MI:(_O/WMXP^_?OWK+Q]VI_[A?_R77[_^X;^]_>WM7S]^_?C;+U')8B7O7]_^ 333 MZU\^_O,??OVK]L6_H_W+:7OGMM=UDA_6_9O)#__H;7XG]>$?/A)-E3__TS]- 334 MH[[:;Z8]K/Z;:0\K)4RL^9GV\)GV\)GVD(R0?R+M8:VT@O9GVL/+9]K#__&T 335 MAWT=&=SW[QHPFC10`"H>MX;[@08LU/]!9/&P0#^R#(9"`B0C\-&/HCD+^I/Z 336 M\4US`@01??U6?["*-6^"]1:K4W_%*BV/@OD-5IWG3'RK#ZO)WZ:D-ZN?"0V? 337 M"0W_9$+#;DEP^F="PV="0\C.OV5"PT[X><_?U;SM?8"`CWR$2;8\G"7]0SGX 338 M3"Q8QG.OZWU\&(&^T,ECIK`2O[:2UC7W8'XH%QZ9#&(4J]VJ^1+5#&;JUOLB 339 M3WV^KP^EN#-18<@3:G%6M%/-RJ7;R*QKW1CV!VGMFHXP/PI-2OBGNCQ$`_6Q 340 MX`HRHUC3$N1G,!P+'"QJ<J*1IM;K#SH<]DXV(BT&1"EK-B*ZS,Z@C#,F2EGS 341 M(6%^@`^)+JXT*BT-BNY?.BK*_O>!84[!&1E=8FEP\MB4,S::,1!#T]/(E#0R 342 MVJX-C>VZ,3QI=%RF$KK<^S-?X#-?X#-?X#-?X.??RQ<0G10ZHUSW9[[`9[[` 343 M__?Y`N4J:4W4W[>0YRW[/W9[Z5XK9;WKWHUSD@IM8407$#X9`E>,40_PH_1[ 344 M?1S[.^%)[5U@%OCT#PMT?"CMWFLKRM&7WXWW^0V^T`[L\!6PA!WY0`OM!^V1 345 MP27MD0`+ZXW!)>N-92]XCUY/;PB6M#?1$]9BO5!T@FXH,F$_7J,//H`M#6;_ 346 M)/U_DOY?/DG_GZ3_7/A)^H_23]+_)^G_D_3_2?K_)/W__/\<Z;]<(T'A^4GZ 347 M_R3]?Y+^/TG_GZ3_3]+_)^D_0,C_C:3_<JVT<^_?]0BJXP[ARH&0YU1>M#+X 348 M&:\<WUZ+AF\1I=U#(Y6=-!E0_S5:.>"9(Q]^>YBVWAJM;+A8'L'M=!9J'D$U 349 M+C>Y[0A7,B9)$CT#EHA(@JBO\4H&)>>P:&6''X^]U)#E^-:,T7XK)5@)\HA? 350 M,DZI1'P-85:&=[=%,1OBN\W"F!T_Y9!\=&.,*]/=8IJDR-_7A\8T2;EGO).< 351 M967V:\03;.E=+.@)8K9F#R@/W-CR]\>7;U-)]AM>RF_8?,"Q5\JS9@5TJ0$4 352 M:XU[=V5S:Y^N#U"AI0,5E.8F+3>2H]T9BXE8&HL>W`UL>AG`U:DE']TG]UYY 353 M<O/,DCIN,_O*@?6IQ3A+7_+DGIDU[K=/[2L9YS&UY+JGR:WUS.UK/_/Z2JZW 354 MS:N1QV->25F/:<6W!>\SKPCS]#2S9U*5X&VS2NZX3ZI2T6-2R8!/<RK[_4JS 355 M6L^D*F/69O65_'.;U5>ZK'U>'Q3WF-9Z9M4ZQ6E5OKI.+>DY,;LQL;;`[^O/ 356 <I&#_\NO;K__]EQ_O/_Z'?_?#_P3'2XZ&ZM`````` 356 357 ` 357 358 end -
Tst/Long/gcdp_l.stat
rd826a8 r71a4d7 1 1 >> tst_memory_0 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:3406162 1 >> tst_memory_1 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:23696003 1 >> tst_memory_2 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:24023844 1 >> tst_timer_1 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:1101 1 >> tst_memory_0 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:307644 2 1 >> tst_memory_1 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:2345020 3 1 >> tst_memory_2 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:2385992 4 1 >> tst_timer_1 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:124 -
Tst/Short/gcdp_s.res.gz.uu
rd826a8 r71a4d7 1 1 begin 644 gcdp_s.res.gz 2 M'XL(" *8PPE```V=C9'!?<RYR97,`W5I;;QLW%G[WKR""!2J--#+OEP86T$6!3 M 18'=18%V7]-,I)$UL"P9TCA1N^A_[^%E2(Y&<A0G#XN%$8E#'AZ>&S]^0^674 M7W_\Z =\((3)'M[<WOX0G.H,G=+]8/OUVF+6'%I7HL-[M6]36A_:`5KN]'42+5 M :K-XWE1ML]L>T.-NB9YF406;Y0JY4_C#9H.>M\W':M]4;8VVNVW9[IN/3;5!6 M ];%Z?-K4![38/=9HM=\]VA7^`\(_SU;U,2H23I%?WXW^L'E:5U8D+2U[2RLW7 M X]=UW:V!FBUR)GRPZ[VOOINB]PO[4</';#8#MSH3WC]OVZ;=U$LZDK=/MV3\8 M 752KG5I0=6B7_WK>M&#*/Q;+6;--=IC<#H*]'3OTX^[[V$EZ(C[L._3H](4H9 M #0+]J6G7Z*G:@Y5MO3_$V;V($XAX;$/0_OG3W]$;R.1LTWQX\S:.R#F"SM^:10 M ;=..QF]O[#>:S[O,;^M/LT-;M5%<S9-2W5O.^0IELGK>+IR9,0P4YX*4)+LH11 M [8TX^]&A@1PUJ]\AF*,Q*'S:-]O6!:$"UVNH(/C>[O:/U:;YHU[:D;04[RD$12 MM Y_VNT6N$HW0TV[S.UI-_?<]&D=Q*)O_Q@>H&N1%EG>PQ,C.`.$8.6JLP#(^13 M ,V*?NY5&:#E%)!-GX-R?\8&G,#*1F\QD"",X?8_VY(Y1C-GT.%VFG<54;X9.14 M \61@D\OF/<2G'J$W0RUOWUBC8(DD]_V9Q:+=',]?'";)$P[9]+&]*XT0O#B^15 M XR6AV@AHL9)@3!FT:"DI@4;2P>8A%ZDK"Q#W._Y@8>$4+*(,A,TF"4\1!O=P16 M [%?SKI\1RF#(?L51[4<Y$\Q/M*TX:N:]6HRZHW:!!Q)A%0)_G1#I"Z7%<B&:17 M _!50*2=:5R!M(WKD$Q?/(YNX:![IQ,;R>'/D)3VRTD`'CU`I>'_EE5_V%8I$18 M 9IWL6T>MQ]["W!\U6)J<"8W.])J494CLX6*J):#)%Q:8A!3<QRFL9(P3*S<Y19 M E:,#J^_!XB,M(1;^LY-DR7+)G4&$4&GMD!!9(JU^`;%ET@0K?1^;:"/MVFE120 M 88TC6#I)#5Y(9;U0$Z]-6TVV5]OYD#>0=/Y.5%^//&\\6"$QQI!8R*MOT@N]21 M G:8,Y*5VSBE#K!VF))QCZ>Q45$AG)L6&6DM+2DPPE@H6W.:2.;=+103NVVM<22 M 4@C7S+I+0`03*TOHA`B(EVT2<%Q+FS6"(:Z&,V>%T<H.:QM@EU,%>IAR\9(223 M \Q`R9GR),!J,,(QK5R#>YFB+PN=C=Q,3KC*<4[U32[$>8M.[D8?):NR1$CTV24 M 6XMN=Q4D3RO&BPIR5T'U$:*)*JH)B<BN>L>7$@G9E3R+[(/5+J/[0#2J5O//25 M BL!&_;P;2=RD8&G\ND-!D\&AH#.0U#[JJV9_:*<>-78KU`+'VY,!9&@^0-0326 M )-?B"B37\@HDU]GFT?HBDA<=`A<=!!?'#H\<"!<6A6T?B$9]YB*@OTJ?P<E627 M 0Z[!=3-$R#.X;C)T-/Q*7#?BBW'=R.MPW0Q/HP[7BV/WU<EF9Y(Q7X/L8/8W28 M 07:"R8O(7F0@7F38?MK?:4N[")QPR=GN/DW3^U>S_;C;?+2`8+=3M;FO/^RK29 M 9A'?F.)D=^Z-*"%<63`(<4E/@!.$4WB@[H$J":A=^;:![&8M/X&-D\_N5!Q)30 M (CMM$'W!9-`F)P+6=<I"OVLHX7')F<*5#M(B3/5-@[5P+<`Z%DV%%$=Y2(7"31 M @G:V2J5P:$$E=K9.*)R$G7>PYXR79Q/)M#QQYOS1/(*S3<B*C0M(V:ATH:M832 M :8-6P3YEC%80-,+'=G./;,O),IOA4<4<"E>TU)#?RJ.PDX1G8J6ZQ566;^U333 M 1F%G><,)F0AMNAC#(:MD',*PNB(ZC!F++RR,F0EE*GAL)L*3@PFEF,H@#F<S34 M '/Y=1.%):IL;UZ9<*>U;FDL<9BA;+CA,`%JA<<B9@LG$2X"31J:"8%3Q6!%`35 M -72H"$:(._KMCJ589M7)N(E%P;!1)E2%EL1U9DES_&2D76*[Z``DJ10>(X6)36 M T:%:*AK#PX5@(3I@@O;Q$:`LA@>J+P6',XU#<`!/'(&Q+1SW$KAN-&4Q.E)337 M 'H(#A2)\Q`Q3*3@4Z!B.P;$@;4)T*)7<<:7D+#E/@$:00LYLJ4%Y04T"?LD*38 M ?%.V)A74K*)0L-9.&"TYA8HMM=081J6M:(@PU"SL50S#A@I3E<96^XV=;(&)39 M 5%X4L!+:U(UU)B7&14C.N`CI,R[6L99VW'M/)H3W9B4V1<AY-G6JZ04V-1"-40 M JB.;NBRB,\],I$>C:\Z^E#**3PD25$Y2[*]6/D.0T.BP:>[7+6AYW"V;55,O41 M QU'!\#6T3YH(Y6=)4]'VV`"\#'R>-L$)FYFNAK3IUBKUR,;=\68ASD*?XSD742 M *0X$\IM2)G@%278R?(8RW;:GI`D(TA6D";`LT\RN(TV$\2\E382)JT@381?>43 M )\^0)L*R,X;Y>]%/-;K?H=W67U9VU15)!-I6CYD;Y^^MX@ZJIHMI/9Z"#>OI44 M P_C*G3F<U"UG[[0>FLT&A%,?&>S;%Q1DN>*LV\$_PV<2X=WV['>+;":@D)MT45 M Y[&P6`!8K^#?`V0M]!1UL8)G-EG`""O6Q4-9.YFUE4IHX"ZZO*X%R-E9:\@046 M S+<ZBW5/]G1/V'E3/QVD5O#726;5+G"T=O&..QM%8==:65M@CUCK:V]7>')V47 M OJ/>#F]%\9#LL#=CP>;2*[)3O1KK,DU*P&W:*>D[+D[?2/K.9!M,L,P9'ITI48 M M0\]#Z&6D]@1(OZ.=UW,A?/!4I78$;,A)ET6P168[;RUS##F-N3"+E)FO7X=49 M )\TSQT2,3B>K0GQA=PMC-/3(%%>(LX(>T5D$.A]*[1T+-<!B;GA<%7P+CK$@50 M 89EM]-6KXC;^(<,^XZ$"B$R..04V"*[J6)@J>AD_Q923REL'5K`8%P\G3YV&51 M #&E$_@,$$:;'"GBXK1ZUT^,X9P4R_S4"B.7ICT,'_\//GJ-J7\.!N3N$GX+V52 M [,(/+T3ZLW:QKK;W@''MSML0?V)*:[/>VND7&B+%600\]>(%W!N(1M5R_EF153 M +*KVQN]UC,3>Z)TP$I5N&(@B7\E([+W;RXQ$L<N,I+UIHQB_@I&H#*F5_#9754 M \D0-;R)>=25/5,8AE3G#0XHA#]%#DG^&A^B,1&IZ)0^QUW%?R$,TOXZ'G%[-55 M M<7%:WFB,Q:IU9?S$'MA]](N=(Q@>@T+N3@E+F4Z#L)CG\&#G7IINLFR9.A956 M !F+8609B>#93?#L&XB[CKF0@@PNYBPPDNXXC[CKN6S(0ZF[HOI*!T,'U7-^957 M DB]N%E$V$4=J+]_^MSD(O-?_WW$0BL6+Z5H`[?"L@S[T'[KYX7],V/\6\7P858 /D?';O]W\!2VBLVQ$(P``2 M'XL("++V&%$``V=C9'!?<RYR97,`W5I;C^.V%7Z?7R$L"L26+0_OERQF@!0! 3 MB@!M$2#IZV857\;">.R!K=EU4O2_]QR2(BG+GO5>'HIBL#9%'AZ>&S]^HO>7 4 M7W_\Z9]%4=#[XO;VYI?PQ&;P5#S,%\^_'6;MH2VJXK#>[=NB71[:0[':[7&P 5 MF->;^<NF;IO=]E`\[1;%\RRJX+-<H7`*?]ALBI=M\Z'>-W6[++:[;=7NFP]- 6 MO2F6Q_KI>;,\%//=T[)8[7=/N,*_0/CGV6IYC(JD4^37=Z,_;)[7-8JDI55O 7 M:>UF_+I>=FL4S;9P)OR.Z[VOOYL6[^?XL82/V6P&;G4FO'_9MDV[62[82-T^ 8 MW]+Q=U&M<6I!U:%=_.-ETX(I?YLO9LTVV6%S.RCQ=NR*'W??QT[:$_%AWQ5/ 9 M3E^(TB#0'YMV73S7>["R7>X/<78OXA0B'ML0M+__]-?B#61RMFE^?_,VCJC[ 10 M`CI_:[9-.QJ_O<'OXOZ^R_QV^7%V:.LVBNO[I-3TEG.^0IFL7K9S9V8,`R.Y 11 M(*/)+L9Z(\[^XM!`CIK5'Q#,T1@4/N^;;>N"4(/K2Z@@^-[N]D_UIOESN<"1 12 MM)3H*02WG_>[>:ZR&!7/N\T?Q6KJOQ^*<12'LOEW?("J*;S(X@Z6&.$,$(Z1 13 M8Q8%%O&94WSN5AH5BVE!,W$.SOTG/H@41BYSD[D*802G'XH]O>.,$#X]3A=I 14 M9W'=FV%2/#G8Y++Y`/%9CHHW0RUOWZ!1L$22^_[,8M%N0>Y?':;)$P'9]+&] 15 MJZR4HCR^$Q5EQDIH\8H2PCBT6*48A4;2P>]#+E)7%B#A=_P!8>$4+*(,A`V3 16 M1*8%`?=([-?W73^GC,,0?L51XT<%E]Q/Q%8<M?>]6HRZHW9)!A)A%0I_G1#M 17 M"Z7%<B&6_)50*2=:5R"-$3V*B8OGD4]<-(]L@K$\WAQ%Q8Z\LM`A(E1*T5]Y 18 MY9?]`D4RLT[UK6/HL;<P]T</EJ9G0F,RO39E&1)[N)AJ!6CRF06F(`4/<0JO 19 M.!<4Y2:G<FQ@]0-8?&05Q,)_=I(\6:Z$,XA2IM`.!9&E"O5+B"U7-ECI^_C$ 20 M6(5KIT4E&D>)<I(&O%`:O=`3K\V@)NPU.!_R!I+.WXGNZU'GC0<K%"$$$@MY 21 M]4UVH;?3E(&\,LXY;2G:82LJ!%'.3LVD<F8R8AE:6C%J@[%,\N"V4-RY76DJ 22 M2=]>ZY)"A>'H+@410E&6L@F5$"]L4G#<*,P:)1!7*[BSPAJ-PP8#['*J00_7 23 M+EY*$1%"QJTO$<Z"$98+XPK$VQQMT>1\[&YBPG6&<[IW:FG>0VQV-_(P68\] 24 M4A9/S1;1[:Z&Y!G-15E#[FJH/DH-U64]H1'9=>_XTC(ANU9GD7VPVF5T'XA& 25 MU?K^DR*P43_M1A*W*5B&?-FA8.C@4#`92!H?]56S/[13CQJ[5=$"Q]O3`608 26 M,4#4$R0W\@HD-^H*)#?9YC'F(I*7'0*7'027QPZ/'`B7B,+8!Z)1G[T(Z%^D 27 MSY)DJZ77X+H=(N097+<9.EIQ):Y;^=FX;M5UN&Z'IU&'Z^6Q^^IDLS/)VJ]! 28 M=C#[FR`[)?159"\S$"\S;#_M[[2E701.N.1L=Q^GZ?VKV7[8;3X@(.!VJC</ 29 MR]_W=3./;TQQLCOW1HQ2H1$,0ES2$^`$%0P>F'M@6@%JU[YM(;M9RT_@X^2S 30 M.Q5'BJI.&T1?<A6TJ8F$=9VRT.\:6GI<<J8(;8*T#%-]TQ(C70NPCD=3(<51 31 M'E*AB62=K4IK$EI0B9VM$P8G8><=[#GKY?E$<:-.G#E_-(_@;).JYN,24C:J 32 M7.AJ7F'0:MBGG+,:@D;%&#?W"%M.EF.&1S5W*%RSRD!^:X_"3A*>*4IUB^LL 33 MW\:GC,'.\H93.I'&=C&&0U:K.$1@=4U-&+.(+SR,V0GC.GAL)]*3@PECA*D@ 34 M#F<S'/Y=1.%)&<R-:S.AM?$M(Q0),S26"PD3@%88$G*F83+U$N"D5:D@.-,B 35 M5@10#1,J@E/JCG[<L8RHK#JYL+$H.+':AJHPBKK.+&F.GXR,2VP7'8`DG<)C 36 ME;0Q.LPHS6)XA)0\1`=,,#X^$I3%\$#UI>`(;D@(#N")(S#8(G$O@>O6,!ZC 37 MHPP3(3A0*-)'S'*=@L.`CI$8'`1I&Z+#F!*.*R5GZ7D"-((4"HZE!N4%-0GX 38 MI6KP36--:JA9S:!@T4X8K02#BJV,,@1&%58T1!AJ%O8J@6'+I*TKB]5^@Y,1 39 MF&CM10$KH<W<6&=28ER4YHR+TC[CXAUK:<>]]V1*16]68E.4GF=3IYI>85,# 40 MT:@ZLJG+(B;SS$9Z-+KF[$LI8^24($'E),7^:N43!*D8'3;-P[H%+4^[1;-J 41 MEHMQ5#!\#>V3)LK$6=)4MCTV`"\#GZ9-<,)FINLA;;I%I1[9A#O>$.(0^AS/ 42 MN4AQ()#?E#+!*TBRDY,SE.FV/25-0)"N($V`99EF?AUIHEQ\+FFB7%Y%FBB_ 43 M\#YYAC11GITQW-^+?EP6#[MBM_67E5UU11)1;.NGS(WS]U9Q!]73^70YGH(- 44 MZ^GC^,J=.9S4+8=W6H_-9@/"J8\.]NTK"K)<"=[MX)_A,XF(;GOVNV4V$U#( 45 M3;KS6%C.`:Q7\.\1LA9ZRF6Y@F<^F<,(+]?E8[5T,FN42FC@+KJ\KCG(X:PU 46 M9`CFH\YRW9,]W1,X;^JG@]0*_CK)K-HEB=;.WPEGHRQQK17:`GL$K5]ZN\*3 47 ML_,=\W9X*\K'9`?>C`6;*Z\(IWHUZ#)+2L!MUBGI.RY/WTCZSF0;3/+,&1&= 48 MJ8P/O0BA5I/8$2+^3G1=W(7S$:E*[(C9D),NB^`*S';>(C.,N0VYP$6JK->O 49 MXZ1%YIB,T>ED=8@O[&YIK8$>E>(*<=;0(SN+0.=C9;QCH09XS(V(JX)OP3$> 50 M))#91E^]*H'Q#QGV&0\50%5RS"G`(+BJXV&J[&7\%%/ZR8(<K]:3T7Q</MY@ 51 MP_GMGKKY&<[(_.<'*FV/$XAP5SUJI\=QS@E4_EL$T,K3GX8._F>?O2CJ_1*. 52 MR]TA_!"TYQ=^=J'*G[3S=;U]`(1K=]Z&^`-36IOWUDZ_SU`ES^+?J1>OH-Y` 53 M-*I6]Y\4R:**]WU?QD?P/N^$C^ATOT`U_4H^@K=NK_,1S2_SD?:FC6+B"CZB 54 M,YS6ZMM<R%,]O(?XH@MYJC,&J>T9%E(.68@94OPS+,1D%-*P*UD(7L9])@LQ 55 MXCH6<GHQUY87+^6IR3BDT9_/0O"Z[K5=Z/C`]!H.<G%*7,IV#$3$/DL&._72 56 M=)MER;*S_,/RL_S#BFRF_';\PUW%7<D_!M=Q%_E'=AE'W67<M^0?S-W/?27_ 57 M8(/+N;XS<_CK)!-I9'CQ]K_-/^"=_O^.?S`B7^<?[@9VOEJ[AIVSQQMX\`'$ 58 ;ATY+^#\3^!\C7@XC.G[[EYO_`NRSL1)&(P`` 59 59 ` 60 60 end -
Tst/Short/gcdp_s.stat
rd826a8 r71a4d7 1 1 >> tst_memory_0 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:3169202 1 >> tst_memory_1 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:23696003 1 >> tst_memory_2 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:24023844 1 >> tst_timer_1 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:61 1 >> tst_memory_0 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:283948 2 1 >> tst_memory_1 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:2345020 3 1 >> tst_memory_2 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:2385992 4 1 >> tst_timer_1 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:6 -
factory/cf_gcd.cc
rd826a8 r71a4d7 607 607 gcd_poly_p( const CanonicalForm & f, const CanonicalForm & g ) 608 608 { 609 if (f.inCoeffDomain() || g.inCoeffDomain()) //zero case should be caught by gcd 610 return 1; 609 611 CanonicalForm pi, pi1; 610 612 CanonicalForm C, Ci, Ci1, Hi, bi, pi2; 611 bool bpure ;613 bool bpure, ezgcdon= isOn (SW_USE_EZGCD_P); 612 614 int delta = degree( f ) - degree( g ); 613 615 … … 620 622 pi = g; pi1 = f; delta = -delta; 621 623 } 622 Ci = content( pi ); Ci1 = content( pi1 ); 623 pi1 = pi1 / Ci1; pi = pi / Ci; 624 if (pi.isUnivariate()) 625 Ci= 1; 626 else 627 { 628 if (!ezgcdon) 629 On (SW_USE_EZGCD_P); 630 Ci = content( pi ); 631 if (!ezgcdon) 632 Off (SW_USE_EZGCD_P); 633 pi = pi / Ci; 634 } 635 if (pi1.isUnivariate()) 636 Ci1= 1; 637 else 638 { 639 if (!ezgcdon) 640 On (SW_USE_EZGCD_P); 641 Ci1 = content( pi1 ); 642 if (!ezgcdon) 643 Off (SW_USE_EZGCD_P); 644 pi1 = pi1 / Ci1; 645 } 624 646 C = gcd( Ci, Ci1 ); 625 647 int d= 0; … … 683 705 pi = pi1; pi1 = pi2; 684 706 maxNumVars= tmax (getNumVars (pi), getNumVars (pi1)); 685 if (! (pi1.isUnivariate()) && (size (pi1)/maxNumVars > 500))707 if (!pi1.isUnivariate() && (size (pi1)/maxNumVars > 500)) 686 708 { 687 709 On (SW_USE_FF_MOD_GCD); … … 701 723 if (!(pi.isUnivariate() && pi1.isUnivariate())) 702 724 { 703 if (size (Hi)*size (pi)/(maxNumVars*3) > 500) //maybe this needs more tuning725 if (size (Hi)*size (pi)/(maxNumVars*3) > 1500) //maybe this needs more tuning 704 726 { 705 727 On (SW_USE_FF_MOD_GCD); … … 717 739 return C; 718 740 } 719 pi /= content( pi ); 741 if (!pi.isUnivariate()) 742 { 743 if (!ezgcdon) 744 On (SW_USE_EZGCD_P); 745 Ci= gcd (LC (oldPi,v), LC (oldPi1,v)); 746 pi /= LC (pi,v)/Ci; 747 Ci= content (pi); 748 pi /= Ci; 749 if (!ezgcdon) 750 Off (SW_USE_EZGCD_P); 751 } 720 752 if ( bpure ) 721 753 pi /= pi.lc(); -
factory/cf_gcd_smallp.cc
rd826a8 r71a4d7 33 33 #include "cfNewtonPolygon.h" 34 34 #include "cf_algorithm.h" 35 #include "cf_primes.h" 35 36 36 37 // iinline helper functions: … … 820 821 cH= uni_content (H); 821 822 ppH= H/cH; 823 ppH /= Lc (ppH); 822 824 CanonicalForm lcppH= gcdlcAlcB/cH; 823 CanonicalForm ccoF= lcA/lcppH; 824 ccoF /= Lc (ccoF); 825 CanonicalForm ccoG= lcB/lcppH; 826 ccoG /= Lc (ccoG); 825 CanonicalForm ccoF= lcppH/Lc (lcppH); 826 CanonicalForm ccoG= lcppH/Lc (lcppH); 827 827 ppCoF= coF/ccoF; 828 828 ppCoG= coG/ccoG; … … 836 836 CFList u, v; 837 837 DEBOUTLN (cerr, "ppH before mapDown= " << ppH); 838 ppH /= Lc(ppH);839 838 ppH= mapDown (ppH, prim_elem, im_prim_elem, alpha, u, v); 840 839 ppCoF= mapDown (ppCoF, prim_elem, im_prim_elem, alpha, u, v); 841 ppCo F= mapDown (ppCoG, prim_elem, im_prim_elem, alpha, u, v);840 ppCoG= mapDown (ppCoG, prim_elem, im_prim_elem, alpha, u, v); 842 841 DEBOUTLN (cerr, "ppH after mapDown= " << ppH); 843 842 if (compressConvexDense) … … 1214 1213 { 1215 1214 if (inextension) 1215 { 1216 ppA= GFMapDown (ppA, k); 1217 ppB= GFMapDown (ppB, k); 1216 1218 setCharacteristic (p, k, gf_name_buf); 1219 } 1217 1220 coF= N (ppA*(cA/gcdcAcB)); 1218 1221 coG= N (ppB*(cB/gcdcAcB)); … … 1267 1270 cH= uni_content (H); 1268 1271 ppH= H/cH; 1272 ppH /= Lc (ppH); 1269 1273 CanonicalForm lcppH= gcdlcAlcB/cH; 1270 CanonicalForm ccoF= lcA/lcppH; 1271 ccoF /= Lc (ccoF); 1272 CanonicalForm ccoG= lcB/lcppH; 1273 ccoG /= Lc (ccoG); 1274 CanonicalForm ccoF= lcppH/Lc (lcppH); 1275 CanonicalForm ccoG= lcppH/Lc (lcppH); 1274 1276 ppCoF= coF/ccoF; 1275 1277 ppCoG= coG/ccoG; … … 1624 1626 G_random_element= 1625 1627 GCD_Fp_extension (ppA (random_element, x), ppB (random_element, x), 1626 coF_random_element, coG_random_element, alpha,1628 coF_random_element, coG_random_element, V_buf, 1627 1629 list, topLevel); 1628 1630 TIMING_END_AND_PRINT (gcd_recursion, … … 3905 3907 l.append (random_element); 3906 3908 3907 if ((getCharacteristic() > 3 && size (skeleton) < 100))3909 if ((getCharacteristic() > 3 && size (skeleton) < 200)) 3908 3910 { 3909 3911 CFArray Monoms; … … 4120 4122 } while (1); //end of second do 4121 4123 } 4124 else 4125 return N(gcdcAcB*GCD_small_p (ppA, ppB)); 4122 4126 } while (1); //end of first do 4123 4127 } … … 4381 4385 4382 4386 CFList evaluation; 4387 long termEstimate= size (U); 4383 4388 for (int i= A.min(); i <= A.max(); i++) 4389 { 4390 if (!A[i].isZero() && (getCharacteristic() > degree (U,i))) //TODO find a good estimate for getCharacteristic() <= degree (U,i) 4391 { 4392 termEstimate *= degree (U,i)*2; 4393 termEstimate /= 3; 4394 } 4384 4395 evaluation.append (A [i]); 4396 } 4397 if (termEstimate/getNumVars(U) > 500) 4398 return -1; 4385 4399 CFList UEval; 4386 4400 CanonicalForm shiftedU= myShift2Zero (U, UEval, evaluation); … … 4548 4562 if( F.mvar() == G.mvar() ) 4549 4563 d *= gcd( F, G ); 4564 else 4565 return N (d); 4550 4566 return N (d); 4567 } 4568 if ( F.isUnivariate()) 4569 { 4570 g= content (G,G.mvar()); 4571 return N(d*gcd(F,g)); 4572 } 4573 if ( G.isUnivariate()) 4574 { 4575 f= content (F,F.mvar()); 4576 return N(d*gcd(G,f)); 4551 4577 } 4552 4578 … … 4934 4960 } 4935 4961 else 4936 return N (d*GCD_small_p (F,G)); 4962 { 4963 if (p >= cf_getBigPrime(0)) 4964 return N (d*sparseGCDFp (F,G)); 4965 else 4966 return N (d*GCD_small_p (F,G)); 4967 } 4937 4968 } 4938 4969 -
factory/facFactorize.cc
rd826a8 r71a4d7 413 413 414 414 if (w.level() != 1) 415 { 416 A= swapvar (A, y, w); 417 int i= A.level(); 418 CanonicalForm evalPoint; 419 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 420 { 421 if (i == w.level()) 422 { 423 evalPoint= iter.getItem(); 424 iter.getItem()= evaluation.getLast(); 425 evaluation.removeLast(); 426 evaluation.append (evalPoint); 427 break; 428 } 429 } 430 for (i= 0; i < lengthAeval2; i++) 431 { 432 if (oldAeval[i].isEmpty()) 433 continue; 434 if (oldAeval[i].getFirst().level() == w.level()) 435 { 436 CFArray tmp= copy (oldAeval[i]); 437 oldAeval[i]= biFactors; 438 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 439 iter.getItem()= swapvar (iter.getItem(), w, y); 440 for (int ii= 0; ii < tmp.size(); ii++) 441 tmp[ii]= swapvar (tmp[ii], w, y); 442 CFArray tmp2= CFArray (tmp.size()); 443 CanonicalForm buf; 444 for (int ii= 0; ii < tmp.size(); ii++) 445 { 446 buf= tmp[ii] (evaluation.getLast(),y); 447 buf /= Lc (buf); 448 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 449 } 450 biFactors= CFList(); 451 for (int j= 0; j < tmp2.size(); j++) 452 biFactors.append (tmp2[j]); 453 } 454 } 455 } 456 457 CFListIterator iter; 415 changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, 416 uniFactors, w); 417 458 418 CanonicalForm oldA= A; 459 419 CFList oldBiFactors= biFactors; 460 if (!leadingCoeffs.getFirst().inCoeffDomain())461 {462 CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);463 A *= tmp;464 tmp= leadingCoeffs.getFirst();465 iter= evaluation;466 for (int i= A.level(); i > 2; i--, iter++)467 tmp= tmp (iter.getItem(), i);468 if (!tmp.inCoeffDomain())469 {470 for (CFListIterator i= biFactors; i.hasItem(); i++)471 {472 i.getItem() *= tmp/LC (i.getItem(), 1);473 i.getItem() /= Lc (i.getItem());474 }475 }476 }477 420 478 421 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); … … 480 423 leadingCoeffs.removeFirst(); 481 424 425 if (!LCmultiplierIsConst) 426 distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier); 427 482 428 //prepare leading coefficients 483 429 CFList* leadingCoeffs2= new CFList [lengthAeval2]; 484 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors, 485 evaluation); 486 487 488 Aeval= evaluateAtEval (A, evaluation, 2); 489 490 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 491 492 for (iter= Aeval; iter.hasItem(); iter++) 493 iter.getItem() *= hh; 494 495 A *= hh; 496 497 CFListIterator iter2; 430 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), leadingCoeffs, 431 biFactors, evaluation); 432 433 CFListIterator iter; 498 434 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 499 435 bufBiFactors= biFactors; 500 436 bufA= A; 501 CanonicalForm bufLCmultiplier= LCmultiplier; 502 CanonicalForm testVars; 437 CanonicalForm testVars, bufLCmultiplier= LCmultiplier; 503 438 if (!LCmultiplierIsConst) 504 439 { … … 571 506 LCheuristic= true; 572 507 factors= oldFactors; 573 CanonicalForm cont;574 508 CFList contents, LCs; 575 int index=1;576 509 bool foundTrueMultiplier= false; 577 for (iter= factors; iter.hasItem(); iter++, index++) 578 { 579 cont= content (iter.getItem(), 1); 580 cont= gcd (cont , LCmultiplier); 581 contents.append (cont); 582 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 583 { 584 foundTrueMultiplier= true; 585 int index2= 1; 586 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 587 index2++) 588 { 589 if (index2 == index) 590 continue; 591 iter2.getItem() /= LCmultiplier; 592 } 510 LCHeuristic2 (LCmultiplier, factors, leadingCoeffs2[lengthAeval2-1], 511 contents, LCs, foundTrueMultiplier); 512 if (foundTrueMultiplier) 513 { 593 514 A= oldA; 594 515 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 595 516 for (int i= lengthAeval2-1; i > -1; i--) 596 517 leadingCoeffs2[i]= CFList(); 597 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, 598 biFactors, evaluation ); 599 Aeval= evaluateAtEval (A, evaluation, 2); 600 601 hh= 1/Lc (Aeval.getFirst()); 602 603 for (iter2= Aeval; iter2.hasItem(); iter2++) 604 iter2.getItem() *= hh; 605 606 A *= hh; 607 break; 608 } 609 else 610 LCs.append (LC (iter.getItem()/cont, 1)); 611 } 612 if (!foundTrueMultiplier) 613 { 614 index= 1; 615 iter2= factors; 518 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), 519 leadingCoeffs, biFactors, evaluation); 520 } 521 else 522 { 616 523 bool foundMultiplier= false; 617 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 618 { 619 if (fdivides (iter.getItem(), LCmultiplier)) 620 { 621 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 622 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 623 { 624 Variable xx= Variable (2); 625 CanonicalForm vars; 626 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 627 xx)); 628 for (int i= 0; i < lengthAeval2; i++) 629 { 630 if (oldAeval[i].isEmpty()) 631 continue; 632 xx= oldAeval[i].getFirst().mvar(); 633 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 634 xx)); 635 } 636 if (vars.level() <= 2) 637 { 638 int index2= 1; 639 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 640 iter3.hasItem(); iter3++, index2++) 641 { 642 if (index2 == index) 643 { 644 iter3.getItem() /= LCmultiplier; 645 break; 646 } 647 } 648 A /= LCmultiplier; 649 foundMultiplier= true; 650 iter.getItem()= 1; 651 } 652 } 653 } 654 } 524 LCHeuristic3 (LCmultiplier, factors, oldBiFactors, contents, oldAeval, 525 A, leadingCoeffs2, lengthAeval2, foundMultiplier); 655 526 // coming from above: divide out more LCmultiplier if possible 656 527 if (foundMultiplier) 657 528 { 658 529 foundMultiplier= false; 659 index=1; 660 iter2= factors; 661 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 662 { 663 if (!iter.getItem().isOne() && 664 fdivides (iter.getItem(), LCmultiplier)) 665 { 666 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 667 { 668 int index2= 1; 669 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 670 iter2++, index2++) 671 { 672 if (index2 == index) 673 { 674 iter2.getItem() /= iter.getItem(); 675 foundMultiplier= true; 676 break; 677 } 678 } 679 A /= iter.getItem(); 680 LCmultiplier /= iter.getItem(); 681 iter.getItem()= 1; 682 } 683 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 684 { 685 Variable xx= Variable (2); 686 CanonicalForm vars; 687 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 688 xx)); 689 for (int i= 0; i < lengthAeval2; i++) 690 { 691 if (oldAeval[i].isEmpty()) 692 continue; 693 xx= oldAeval[i].getFirst().mvar(); 694 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 695 xx)); 696 } 697 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 698 /myGetVars (LCmultiplier) == vars) 699 { 700 int index2= 1; 701 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 702 iter2++, index2++) 703 { 704 if (index2 == index) 705 { 706 iter2.getItem() /= LCmultiplier; 707 foundMultiplier= true; 708 break; 709 } 710 } 711 A /= LCmultiplier; 712 iter.getItem()= 1; 713 } 714 } 715 } 716 } 530 LCHeuristic4 (oldBiFactors, oldAeval, contents, factors, testVars, 531 lengthAeval2, leadingCoeffs2, A, LCmultiplier, 532 foundMultiplier); 717 533 } 718 534 else 719 535 { 720 CanonicalForm pLCs= prod (LCs); 721 if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A 722 { 723 A= oldA; 724 iter2= leadingCoeffs2[lengthAeval2-1]; 725 for (iter= contents; iter.hasItem(); iter++, iter2++) 726 iter2.getItem() /= iter.getItem(); 727 foundMultiplier= true; 728 } 536 LCHeuristicCheck (LCs, contents, A, oldA, 537 leadingCoeffs2[lengthAeval2-1], foundMultiplier); 729 538 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 730 539 { 731 Variable xx; 732 CFList vars1; 733 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 734 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 735 sqrfMultiplier.removeFirst(); 736 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 737 xx= Variable (2); 738 for (iter= oldBiFactors; iter.hasItem(); iter++) 739 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 740 for (int i= 0; i < lengthAeval2; i++) 741 { 742 if (oldAeval[i].isEmpty()) 743 continue; 744 xx= oldAeval[i].getFirst().mvar(); 745 iter2= vars1; 746 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 747 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx)); 748 } 749 CanonicalForm tmp; 750 iter2= vars1; 751 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, 752 iter2++) 753 { 754 tmp= iter.getItem()/LCmultiplier; 755 for (int i=1; i <= tmp.level(); i++) 756 { 757 if (degree(tmp,i) > 0 && 758 (degree(iter2.getItem(),i) > degree (tmp,i))) 759 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 760 } 761 } 762 int multi; 763 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 764 { 765 multi= 0; 766 for (iter= vars1; iter.hasItem(); iter++) 767 { 768 tmp= iter.getItem(); 769 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 770 { 771 multi++; 772 tmp /= myGetVars (ii.getItem().factor()); 773 } 774 } 775 if (multi == ii.getItem().exp()) 776 { 777 index= 1; 778 for (iter= vars1; iter.hasItem(); iter++, index++) 779 { 780 while (fdivides (myGetVars(ii.getItem().factor()), 781 iter.getItem() 782 ) 783 ) 784 { 785 int index2= 1; 786 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 787 iter2++, index2++) 788 { 789 if (index2 == index) 790 continue; 791 else 792 { 793 tmp= ii.getItem().factor(); 794 iter2.getItem() /= tmp; 795 CFListIterator iter3= evaluation; 796 for (int jj= A.level(); jj > 2; jj--, iter3++) 797 tmp= tmp (iter3.getItem(), jj); 798 if (!tmp.inCoeffDomain()) 799 { 800 int index3= 1; 801 for (iter3= biFactors; iter3.hasItem(); iter3++, 802 index3++) 803 { 804 if (index3 == index2) 805 { 806 iter3.getItem() /= tmp; 807 iter3.getItem() /= Lc (iter3.getItem()); 808 break; 809 } 810 } 811 } 812 A /= ii.getItem().factor(); 813 } 814 } 815 iter.getItem() /= getVars (ii.getItem().factor()); 816 } 817 } 818 } 819 else 820 { 821 index= 1; 822 for (iter= vars1; iter.hasItem(); iter++, index++) 823 { 824 if (!fdivides (myGetVars (ii.getItem().factor()), 825 iter.getItem() 826 ) 827 ) 828 { 829 int index2= 1; 830 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 831 iter2++, index2++) 832 { 833 if (index2 == index) 834 { 835 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 836 iter2.getItem() /= tmp; 837 A /= tmp; 838 CFListIterator iter3= evaluation; 839 for (int jj= A.level(); jj > 2; jj--, iter3++) 840 tmp= tmp (iter3.getItem(), jj); 841 if (!tmp.inCoeffDomain()) 842 { 843 int index3= 1; 844 for (iter3= biFactors; iter3.hasItem(); iter3++, 845 index3++) 846 { 847 if (index3 == index2) 848 { 849 iter3.getItem() /= tmp; 850 iter3.getItem() /= Lc (iter3.getItem()); 851 break; 852 } 853 } 854 } 855 } 856 } 857 } 858 } 859 } 860 } 540 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 541 lengthAeval2, evaluation, oldBiFactors); 861 542 } 862 543 } … … 866 547 for (int i= lengthAeval2-1; i > -1; i--) 867 548 leadingCoeffs2[i]= CFList(); 868 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 869 evaluation); 870 Aeval= evaluateAtEval (A, evaluation, 2); 871 872 hh= 1/Lc (Aeval.getFirst()); 873 874 for (CFListIterator i= Aeval; i.hasItem(); i++) 875 i.getItem() *= hh; 876 877 A *= hh; 549 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 550 biFactors, evaluation); 878 551 } 879 552 factors= CFList(); … … 898 571 { 899 572 LCheuristic= true; 900 int index; 901 Variable xx; 902 CFList vars1; 903 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 904 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 905 sqrfMultiplier.removeFirst(); 906 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 907 xx= Variable (2); 908 for (iter= oldBiFactors; iter.hasItem(); iter++) 909 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 910 for (int i= 0; i < lengthAeval2; i++) 911 { 912 if (oldAeval[i].isEmpty()) 913 continue; 914 xx= oldAeval[i].getFirst().mvar(); 915 iter2= vars1; 916 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 917 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 918 } 919 CanonicalForm tmp; 920 iter2= vars1; 921 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++) 922 { 923 tmp= iter.getItem()/LCmultiplier; 924 for (int i=1; i <= tmp.level(); i++) 925 { 926 if (degree(tmp,i) > 0 && (degree(iter2.getItem(),i) > degree (tmp,i))) 927 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 928 } 929 } 930 int multi; 931 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 932 { 933 multi= 0; 934 for (iter= vars1; iter.hasItem(); iter++) 935 { 936 tmp= iter.getItem(); 937 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 938 { 939 multi++; 940 tmp /= myGetVars (ii.getItem().factor()); 941 } 942 } 943 if (multi == ii.getItem().exp()) 944 { 945 index= 1; 946 for (iter= vars1; iter.hasItem(); iter++, index++) 947 { 948 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 949 { 950 int index2= 1; 951 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 952 index2++) 953 { 954 if (index2 == index) 955 continue; 956 else 957 { 958 tmp= ii.getItem().factor(); 959 iter2.getItem() /= tmp; 960 CFListIterator iter3= evaluation; 961 for (int jj= A.level(); jj > 2; jj--, iter3++) 962 tmp= tmp (iter3.getItem(), jj); 963 if (!tmp.inCoeffDomain()) 964 { 965 int index3= 1; 966 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 967 { 968 if (index3 == index2) 969 { 970 iter3.getItem() /= tmp; 971 iter3.getItem() /= Lc (iter3.getItem()); 972 break; 973 } 974 } 975 } 976 A /= ii.getItem().factor(); 977 } 978 } 979 iter.getItem() /= getVars (ii.getItem().factor()); 980 } 981 } 982 } 983 else 984 { 985 index= 1; 986 for (iter= vars1; iter.hasItem(); iter++, index++) 987 { 988 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 989 { 990 int index2= 1; 991 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 992 index2++) 993 { 994 if (index2 == index) 995 { 996 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 997 iter2.getItem() /= tmp; 998 A /= tmp; 999 CFListIterator iter3= evaluation; 1000 for (int jj= A.level(); jj > 2; jj--, iter3++) 1001 tmp= tmp (iter3.getItem(), jj); 1002 if (!tmp.inCoeffDomain()) 1003 { 1004 int index3= 1; 1005 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 1006 { 1007 if (index3 == index2) 1008 { 1009 iter3.getItem() /= tmp; 1010 iter3.getItem() /= Lc (iter3.getItem()); 1011 break; 1012 } 1013 } 1014 } 1015 } 1016 } 1017 } 1018 } 1019 } 1020 } 573 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 574 lengthAeval2, evaluation, oldBiFactors); 1021 575 1022 576 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1023 577 for (int i= lengthAeval2-1; i > -1; i--) 1024 578 leadingCoeffs2[i]= CFList(); 1025 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 1026 evaluation); 1027 Aeval= evaluateAtEval (A, evaluation, 2); 1028 1029 hh= 1/Lc (Aeval.getFirst()); 1030 1031 for (CFListIterator i= Aeval; i.hasItem(); i++) 1032 i.getItem() *= hh; 1033 1034 A *= hh; 579 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 580 biFactors, evaluation); 1035 581 1036 582 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) … … 1087 633 commonDenominators.append (bCommonDen (iter.getItem())); 1088 634 CanonicalForm tmp1, tmp2, tmp3=1; 635 CFListIterator iter2; 1089 636 for (int i= 0; i < lengthAeval2; i++) 1090 637 { -
factory/facFqBivar.h
rd826a8 r71a4d7 49 49 ); 50 50 51 /// factorize a squarefree bivariate polynomial over \f$ F_{p} \f$. 52 /// 53 /// @return @a FpBiSqrfFactorize returns a list of monic factors, the first 54 /// element is the leading coefficient. 55 /// @sa FqBiSqrfFactorize(), GFBiSqrfFactorize() 56 inline 57 CFList FpBiSqrfFactorize (const CanonicalForm & G ///< [in] a bivariate poly 58 ) 51 inline CFList 52 biSqrfFactorizeHelper (const CanonicalForm& G, ExtensionInfo& info) 59 53 { 60 ExtensionInfo info= ExtensionInfo (false);61 54 CFMap N; 62 55 CanonicalForm F= compress (G, N); … … 65 58 F /= (contentX*contentY); 66 59 CFFList contentXFactors, contentYFactors; 67 contentXFactors= factorize (contentX); 68 contentYFactors= factorize (contentY); 60 if (info.getAlpha().level() != 1) 61 { 62 contentXFactors= factorize (contentX, info.getAlpha()); 63 contentYFactors= factorize (contentY, info.getAlpha()); 64 } 65 else if (info.getAlpha().level() == 1 && info.getGFDegree() == 1) 66 { 67 contentXFactors= factorize (contentX); 68 contentYFactors= factorize (contentY); 69 } 70 else if (info.getAlpha().level() == 1 && info.getGFDegree() != 1) 71 { 72 CFList bufContentX, bufContentY; 73 bufContentX= biFactorize (contentX, info); 74 bufContentY= biFactorize (contentY, info); 75 for (CFListIterator iter= bufContentX; iter.hasItem(); iter++) 76 contentXFactors.append (CFFactor (iter.getItem(), 1)); 77 for (CFListIterator iter= bufContentY; iter.hasItem(); iter++) 78 contentYFactors.append (CFFactor (iter.getItem(), 1)); 79 } 80 69 81 if (contentXFactors.getFirst().factor().inCoeffDomain()) 70 82 contentXFactors.removeFirst(); … … 97 109 } 98 110 111 /// factorize a squarefree bivariate polynomial over \f$ F_{p} \f$. 112 /// 113 /// @return @a FpBiSqrfFactorize returns a list of monic factors, the first 114 /// element is the leading coefficient. 115 /// @sa FqBiSqrfFactorize(), GFBiSqrfFactorize() 116 inline 117 CFList FpBiSqrfFactorize (const CanonicalForm & G ///< [in] a bivariate poly 118 ) 119 { 120 ExtensionInfo info= ExtensionInfo (false); 121 return biSqrfFactorizeHelper (G, info); 122 } 123 99 124 /// factorize a squarefree bivariate polynomial over \f$ F_{p}(\alpha ) \f$. 100 125 /// … … 108 133 { 109 134 ExtensionInfo info= ExtensionInfo (alpha, false); 110 CFMap N; 111 CanonicalForm F= compress (G, N); 112 CanonicalForm contentX= content (F, 1); 113 CanonicalForm contentY= content (F, 2); 114 F /= (contentX*contentY); 115 CFFList contentXFactors, contentYFactors; 116 contentXFactors= factorize (contentX, alpha); 117 contentYFactors= factorize (contentY, alpha); 118 if (contentXFactors.getFirst().factor().inCoeffDomain()) 119 contentXFactors.removeFirst(); 120 if (contentYFactors.getFirst().factor().inCoeffDomain()) 121 contentYFactors.removeFirst(); 122 if (F.inCoeffDomain()) 123 { 124 CFList result; 125 for (CFFListIterator i= contentXFactors; i.hasItem(); i++) 126 result.append (N (i.getItem().factor())); 127 for (CFFListIterator i= contentYFactors; i.hasItem(); i++) 128 result.append (N (i.getItem().factor())); 129 normalize (result); 130 result.insert (Lc (G)); 131 return result; 132 } 133 mat_ZZ M; 134 vec_ZZ S; 135 F= compress (F, M, S); 136 CFList result= biFactorize (F, info); 137 for (CFListIterator i= result; i.hasItem(); i++) 138 i.getItem()= N (decompress (i.getItem(), M, S)); 139 for (CFFListIterator i= contentXFactors; i.hasItem(); i++) 140 result.append (N(i.getItem().factor())); 141 for (CFFListIterator i= contentYFactors; i.hasItem(); i++) 142 result.append (N (i.getItem().factor())); 143 normalize (result); 144 result.insert (Lc(G)); 145 return result; 135 return biSqrfFactorizeHelper (G, info); 146 136 } 147 137 … … 158 148 "GF as base field expected"); 159 149 ExtensionInfo info= ExtensionInfo (getGFDegree(), gf_name, false); 160 CFMap N; 161 CanonicalForm F= compress (G, N); 162 CanonicalForm contentX= content (F, 1); 163 CanonicalForm contentY= content (F, 2); 164 F /= (contentX*contentY); 165 CFList contentXFactors, contentYFactors; 166 contentXFactors= biFactorize (contentX, info); 167 contentYFactors= biFactorize (contentY, info); 168 if (contentXFactors.getFirst().inCoeffDomain()) 169 contentXFactors.removeFirst(); 170 if (contentYFactors.getFirst().inCoeffDomain()) 171 contentYFactors.removeFirst(); 172 if (F.inCoeffDomain()) 173 { 174 CFList result; 175 for (CFListIterator i= contentXFactors; i.hasItem(); i++) 176 result.append (N (i.getItem())); 177 for (CFListIterator i= contentYFactors; i.hasItem(); i++) 178 result.append (N (i.getItem())); 179 normalize (result); 180 result.insert (Lc (G)); 181 return result; 182 } 183 mat_ZZ M; 184 vec_ZZ S; 185 F= compress (F, M, S); 186 CFList result= biFactorize (F, info); 187 for (CFListIterator i= result; i.hasItem(); i++) 188 i.getItem()= N (decompress (i.getItem(), M, S)); 189 for (CFListIterator i= contentXFactors; i.hasItem(); i++) 190 result.append (N(i.getItem())); 191 for (CFListIterator i= contentYFactors; i.hasItem(); i++) 192 result.append (N (i.getItem())); 193 normalize (result); 194 result.insert (Lc(G)); 195 return result; 150 return biSqrfFactorizeHelper (G, info); 196 151 } 197 152 -
factory/facFqFactorize.cc
rd826a8 r71a4d7 49 49 TIMING_DEFINE_PRINT(fac_fq_check_mainvar) 50 50 TIMING_DEFINE_PRINT(fac_fq_compress) 51 51 52 52 53 static inline … … 1208 1209 int k= factors1.length(); 1209 1210 int l= factors2.length(); 1210 int n= 1;1211 int n= 0; 1211 1212 int m; 1212 1213 CFFListIterator j; 1213 1214 for (CFFListIterator i= factors1; (n < k && i.hasItem()); i++, n++) 1214 1215 { 1215 m= 1;1216 m= 0; 1216 1217 for (j= factors2; (m < l && j.hasItem()); j++, m++) 1217 1218 { … … 1324 1325 const CFArray& evalPoint) 1325 1326 { 1326 CanonicalForm tmp;1327 CFListIterator j;1328 for (CFListIterator i= uniFactors; i.hasItem(); i++)1329 {1330 tmp= i.getItem();1331 if (i.hasItem())1332 i++;1333 else1334 break;1335 for (j= i; j.hasItem(); j++)1336 {1337 if (tmp == j.getItem())1338 return 0;1339 }1340 }1341 1342 1327 CanonicalForm F= G; 1343 1328 CFFList sqrfFactorization; … … 1359 1344 1360 1345 CFFList sqrfFactors; 1346 CanonicalForm tmp; 1361 1347 CFList tmp2; 1362 1348 int k= 0; … … 1484 1470 result.insert (Lc (LCF)); 1485 1471 else 1486 {1487 for (CFListIterator i= result; i.hasItem(); i++)1488 i.getItem() *= LCF;1489 1472 result.insert (LCF); 1490 } 1473 1491 1474 return result; 1492 1475 } … … 1552 1535 bufBufFactors= bufFactors; 1553 1536 evalPoint= CFArray (evaluation.length() - 1); 1554 for (int k= 0; k < evaluation.length()-1; k++)1537 for (int k= 1; k < evaluation.length(); k++) 1555 1538 { 1556 1539 if (N (Variable (k+1)).level() != y.level()) 1557 evalPoint[k ]= buf[k+1];1540 evalPoint[k-1]= buf[k]; 1558 1541 else 1559 evalPoint[k ]= buf[0];1542 evalPoint[k-1]= buf[0]; 1560 1543 } 1561 1544 pass= testFactors (bufF, bufBufFactors, alpha, sqrfPartF, bufFactors, … … 1579 1562 result.append (1); 1580 1563 result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs); 1581 if (!result.getFirst().inCoeffDomain())1582 {1583 CFListIterator iter= result;1584 CanonicalForm tmp= iter.getItem();1585 iter++;1586 for (; iter.hasItem(); iter++)1587 iter.getItem() *= tmp;1588 }1589 1564 y= Variable (1); 1590 1565 delete [] bufSqrfFactors; … … 1601 1576 result.append (1); 1602 1577 result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs); 1603 if (!result.getFirst().inCoeffDomain())1604 {1605 CFListIterator iter= result;1606 CanonicalForm tmp= iter.getItem();1607 iter++;1608 for (; iter.hasItem(); iter++)1609 iter.getItem() *= tmp;1610 }1611 1578 y= Variable (1); 1612 1579 delete [] bufSqrfFactors; … … 1683 1650 { 1684 1651 int* liftBounds= new int [sqrfPartF.level() - 1]; 1685 liftBounds [0]= liftBound;1686 1652 bool noOneToOne= false; 1687 1653 CFList *leadingCoeffs2= new CFList [sqrfPartF.level()-2]; … … 1700 1666 1701 1667 int liftBoundsLength= sqrfPartF.level() - 1; 1702 for (int i= 1; i < liftBoundsLength; i++)1668 for (int i= 0; i < liftBoundsLength; i++) 1703 1669 liftBounds [i]= degree (sqrfPartF, i + 2) + 1; 1704 1670 evalSqrfPartF= evaluateAtZero (sqrfPartF); … … 1764 1730 if (!result.getFirst().inCoeffDomain()) 1765 1731 { 1766 CFListIterator i= result; 1767 CanonicalForm tmp; 1732 // prepare input for recursion 1768 1733 if (foundDifferent) 1769 i.getItem()= swapvar (i.getItem(), Variable (2), y); 1770 1771 tmp= i.getItem(); 1772 1773 i++; 1774 for (; i.hasItem(); i++) 1775 { 1776 if (foundDifferent) 1777 i.getItem()= swapvar (i.getItem(), Variable (2), y)*tmp; 1734 { 1735 for (CFListIterator i= result; i.hasItem(); i++) 1736 i.getItem()= swapvar (i.getItem(), Variable (2), y); 1737 CFList l= differentSecondVarLCs [j]; 1738 for (CFListIterator i= l; i.hasItem(); i++) 1739 i.getItem()= swapvar (i.getItem(), y, z); 1740 differentSecondVarLCs [j]= l; 1741 } 1742 1743 F= result.getFirst(); 1744 int level= 0; 1745 if (foundDifferent) 1746 { 1747 level= y.level() - 2; 1748 for (int i= y.level(); i > 1; i--) 1749 { 1750 if (degree (F,i) > 0) 1751 { 1752 if (y.level() == 3) 1753 level= 0; 1754 else 1755 level= i-3; 1756 } 1757 } 1758 } 1759 lcretry: 1760 if (lSecondVarLCs - level > 0) 1761 { 1762 CFList evaluation2= evaluation; 1763 int j= lSecondVarLCs+2; 1764 CanonicalForm swap; 1765 CFListIterator i; 1766 for (i= evaluation2; i.hasItem(); i++, j--) 1767 { 1768 if (j==y.level()) 1769 { 1770 swap= i.getItem(); 1771 i.getItem()= evaluation2.getLast(); 1772 evaluation2.removeLast(); 1773 evaluation2.append (swap); 1774 } 1775 } 1776 1777 CFList newLCs= differentSecondVarLCs[level]; 1778 if (newLCs.isEmpty()) 1779 { 1780 if (degree (F, level+3) > 0) 1781 { 1782 delete [] bufSqrfFactors; 1783 return result; //TODO handle this case 1784 } 1785 level=level+1; 1786 goto lcretry; 1787 } 1788 i= newLCs; 1789 CFListIterator iter= result; 1790 iter++; 1791 CanonicalForm quot; 1792 for (;iter.hasItem(); iter++, i++) 1793 { 1794 swap= iter.getItem(); 1795 if (degree (swap, level+3) > 0) 1796 { 1797 int count= evaluation.length()+1; 1798 for (CFListIterator iter2= evaluation2; iter2.hasItem(); iter2++, 1799 count--) 1800 { 1801 if (count != level+3) 1802 swap= swap (iter2.getItem(), count); 1803 } 1804 if (fdivides (swap, i.getItem(), quot)) 1805 i.getItem()= quot; 1806 } 1807 } 1808 CFList * differentSecondVarLCs2= new CFList [lSecondVarLCs - level - 1]; 1809 for (int j= level+1; j < lSecondVarLCs; j++) 1810 { 1811 if (degree (F, j+3) > 0) 1812 { 1813 if (!differentSecondVarLCs[j].isEmpty()) 1814 { 1815 differentSecondVarLCs2[j - level - 1]= differentSecondVarLCs[j]; 1816 i= differentSecondVarLCs2[j-level - 1]; 1817 iter=result; 1818 iter++; 1819 for (;iter.hasItem(); iter++, i++) 1820 { 1821 swap= iter.getItem(); 1822 if (degree (swap, j+3) > 0) 1823 { 1824 int count= evaluation.length()+1; 1825 for (CFListIterator iter2= evaluation2; iter2.hasItem();iter2++, 1826 count--) 1827 { 1828 if (count != j+3) 1829 swap= swap (iter2.getItem(), count); 1830 } 1831 if (fdivides (swap, i.getItem(), quot)) 1832 i.getItem()= quot; 1833 } 1834 } 1835 } 1836 } 1837 } 1838 1839 for (int j= 0; j < level+1; j++) 1840 evaluation2.removeLast(); 1841 Variable dummyvar= Variable (1); 1842 1843 CanonicalForm newLCF= result.getFirst(); 1844 newLCF=swapvar (newLCF, Variable (2), Variable (level+3)); 1845 for (i=newLCs; i.hasItem(); i++) 1846 i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3)); 1847 for (int j= 1; j < lSecondVarLCs-level;j++) 1848 { 1849 for (i= differentSecondVarLCs2[j-1]; i.hasItem(); i++) 1850 i.getItem()= swapvar (i.getItem(), Variable (2+j), 1851 Variable (level+3+j)); 1852 newLCF= swapvar (newLCF, Variable (2+j), Variable (level+3+j)); 1853 } 1854 1855 CFList recursiveResult= 1856 precomputeLeadingCoeff (newLCF, newLCs, alpha, evaluation2, 1857 differentSecondVarLCs2, lSecondVarLCs - level - 1, 1858 dummyvar); 1859 1860 if (dummyvar.level() != 1) 1861 { 1862 for (i= recursiveResult; i.hasItem(); i++) 1863 i.getItem()= swapvar (i.getItem(), Variable (2), dummyvar); 1864 } 1865 for (i= recursiveResult; i.hasItem(); i++) 1866 { 1867 for (int j= lSecondVarLCs-level-1; j > 0; j--) 1868 i.getItem()=swapvar (i.getItem(), Variable (2+j), 1869 Variable (level+3+j)); 1870 i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3)); 1871 } 1872 1873 if (recursiveResult.getFirst() == result.getFirst()) 1874 { 1875 delete [] bufSqrfFactors; 1876 delete [] differentSecondVarLCs2; 1877 return result; 1878 } 1778 1879 else 1779 i.getItem() *= tmp; 1880 { 1881 iter=recursiveResult; 1882 i= result; 1883 i.getItem()= iter.getItem(); 1884 i++; 1885 iter++; 1886 for (; i.hasItem(); i++, iter++) 1887 i.getItem() *= iter.getItem(); 1888 delete [] differentSecondVarLCs2; 1889 } 1780 1890 } 1781 1891 } … … 1984 2094 CFArray l; 1985 2095 int pos, index; 2096 bool leaveLoop=false; 1986 2097 for (int j= 0; j < AevalLength; j++) 1987 2098 { … … 1991 2102 for (iter= evaluation; iter.hasItem(); iter++, i--) 1992 2103 { 1993 if (i == Aeval[j].getFirst().level()) 1994 { 1995 evalPoint= iter.getItem(); 2104 for (iter2= Aeval[j]; iter2.hasItem(); iter2++) 2105 { 2106 if (i == iter2.getItem().level()) 2107 { 2108 evalPoint= iter.getItem(); 2109 leaveLoop= true; 2110 break; 2111 } 2112 } 2113 if (leaveLoop) 2114 { 2115 leaveLoop= false; 1996 2116 break; 1997 2117 } … … 2040 2160 int minFactorsLength) 2041 2161 { 2042 CFListIterator iter ;2162 CFListIterator iter, iter2; 2043 2163 CanonicalForm evalPoint; 2044 2164 int i; … … 2046 2166 Variable y= Variable (2); 2047 2167 CFList list; 2168 bool leaveLoop= false; 2048 2169 for (int j= 0; j < A.level() - 2; j++) 2049 2170 { … … 2054 2175 for (iter= evaluation; iter.hasItem(); iter++, i--) 2055 2176 { 2056 if (i == Aeval[j].getFirst().level()) 2057 { 2058 evalPoint= iter.getItem(); 2177 for (iter2= Aeval[j]; iter2.hasItem(); iter2++) 2178 { 2179 if (i == iter2.getItem().level()) 2180 { 2181 evalPoint= iter.getItem(); 2182 leaveLoop= true; 2183 break; 2184 } 2185 } 2186 if (leaveLoop) 2187 { 2188 leaveLoop= false; 2059 2189 break; 2060 2190 } … … 2072 2202 } 2073 2203 2074 void prepareLeadingCoeffs (CFList*& LCs, int n, const CFList& leadingCoeffs, 2075 const CFList& biFactors, const CFList& evaluation) 2204 void 2205 prepareLeadingCoeffs (CFList*& LCs, CanonicalForm& A, CFList& Aeval, int n, 2206 const CFList& leadingCoeffs, const CFList& biFactors, 2207 const CFList& evaluation) 2076 2208 { 2077 2209 CFList l= leadingCoeffs; … … 2098 2230 j.getItem() *= ii.getItem(); 2099 2231 } 2232 2233 Aeval= evaluateAtEval (A, evaluation, 2); 2234 2235 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 2236 2237 for (iter= Aeval; iter.hasItem(); iter++) 2238 iter.getItem() *= hh; 2239 2240 A *= hh; 2100 2241 } 2101 2242 … … 2217 2358 } 2218 2359 2360 void 2361 changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation, 2362 CFList*& oldAeval, int lengthAeval2, 2363 const CFList& uniFactors, const Variable& w) 2364 { 2365 Variable y= Variable (2); 2366 A= swapvar (A, y, w); 2367 int i= A.level(); 2368 CanonicalForm evalPoint; 2369 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 2370 { 2371 if (i == w.level()) 2372 { 2373 evalPoint= iter.getItem(); 2374 iter.getItem()= evaluation.getLast(); 2375 evaluation.removeLast(); 2376 evaluation.append (evalPoint); 2377 break; 2378 } 2379 } 2380 for (i= 0; i < lengthAeval2; i++) 2381 { 2382 if (oldAeval[i].isEmpty()) 2383 continue; 2384 if (oldAeval[i].getFirst().level() == w.level()) 2385 { 2386 CFArray tmp= copy (oldAeval[i]); 2387 oldAeval[i]= biFactors; 2388 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 2389 iter.getItem()= swapvar (iter.getItem(), w, y); 2390 for (int ii= 0; ii < tmp.size(); ii++) 2391 tmp[ii]= swapvar (tmp[ii], w, y); 2392 CFArray tmp2= CFArray (tmp.size()); 2393 CanonicalForm buf; 2394 for (int ii= 0; ii < tmp.size(); ii++) 2395 { 2396 buf= tmp[ii] (evaluation.getLast(),y); 2397 buf /= Lc (buf); 2398 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 2399 } 2400 biFactors= CFList(); 2401 for (int j= 0; j < tmp2.size(); j++) 2402 biFactors.append (tmp2[j]); 2403 } 2404 } 2405 } 2406 2407 void 2408 distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs, 2409 CFList& biFactors, const CFList& evaluation, 2410 const CanonicalForm& LCmultipler) 2411 { 2412 CanonicalForm tmp= power (LCmultipler, biFactors.length() - 1); 2413 A *= tmp; 2414 tmp= LCmultipler; 2415 CFListIterator iter= leadingCoeffs; 2416 for (;iter.hasItem(); iter++) 2417 iter.getItem() *= LCmultipler; 2418 iter= evaluation; 2419 for (int i= A.level(); i > 2; i--, iter++) 2420 tmp= tmp (iter.getItem(), i); 2421 if (!tmp.inCoeffDomain()) 2422 { 2423 for (CFListIterator i= biFactors; i.hasItem(); i++) 2424 { 2425 i.getItem() *= tmp/LC (i.getItem(), 1); 2426 i.getItem() /= Lc (i.getItem()); 2427 } 2428 } 2429 } 2430 2431 void 2432 LCHeuristic (CanonicalForm& A, const CanonicalForm& LCmultiplier, 2433 CFList& biFactors, CFList*& leadingCoeffs, const CFList* oldAeval, 2434 int lengthAeval, const CFList& evaluation, 2435 const CFList& oldBiFactors) 2436 { 2437 CFListIterator iter, iter2; 2438 int index; 2439 Variable xx; 2440 CFList vars1; 2441 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 2442 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 2443 sqrfMultiplier.removeFirst(); 2444 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 2445 xx= Variable (2); 2446 for (iter= oldBiFactors; iter.hasItem(); iter++) 2447 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 2448 for (int i= 0; i < lengthAeval; i++) 2449 { 2450 if (oldAeval[i].isEmpty()) 2451 continue; 2452 xx= oldAeval[i].getFirst().mvar(); 2453 iter2= vars1; 2454 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 2455 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 2456 } 2457 CanonicalForm tmp; 2458 iter2= vars1; 2459 for (iter= leadingCoeffs[lengthAeval-1]; iter.hasItem(); iter++, iter2++) 2460 { 2461 tmp= iter.getItem()/LCmultiplier; 2462 for (int i=1; i <= tmp.level(); i++) 2463 { 2464 if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i))) 2465 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 2466 } 2467 } 2468 int multi; 2469 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 2470 { 2471 multi= 0; 2472 for (iter= vars1; iter.hasItem(); iter++) 2473 { 2474 tmp= iter.getItem(); 2475 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 2476 { 2477 multi++; 2478 tmp /= myGetVars (ii.getItem().factor()); 2479 } 2480 } 2481 if (multi == ii.getItem().exp()) 2482 { 2483 index= 1; 2484 for (iter= vars1; iter.hasItem(); iter++, index++) 2485 { 2486 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 2487 { 2488 int index2= 1; 2489 for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem();iter2++, 2490 index2++) 2491 { 2492 if (index2 == index) 2493 continue; 2494 else 2495 { 2496 tmp= ii.getItem().factor(); 2497 iter2.getItem() /= tmp; 2498 CFListIterator iter3= evaluation; 2499 for (int jj= A.level(); jj > 2; jj--, iter3++) 2500 tmp= tmp (iter3.getItem(), jj); 2501 if (!tmp.inCoeffDomain()) 2502 { 2503 int index3= 1; 2504 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 2505 { 2506 if (index3 == index2) 2507 { 2508 iter3.getItem() /= tmp; 2509 iter3.getItem() /= Lc (iter3.getItem()); 2510 break; 2511 } 2512 } 2513 } 2514 A /= ii.getItem().factor(); 2515 } 2516 } 2517 iter.getItem() /= getVars (ii.getItem().factor()); 2518 } 2519 } 2520 } 2521 else 2522 { 2523 index= 1; 2524 for (iter= vars1; iter.hasItem(); iter++, index++) 2525 { 2526 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 2527 { 2528 int index2= 1; 2529 for (iter2= leadingCoeffs[lengthAeval-1];iter2.hasItem();iter2++, 2530 index2++) 2531 { 2532 if (index2 == index) 2533 { 2534 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 2535 iter2.getItem() /= tmp; 2536 A /= tmp; 2537 CFListIterator iter3= evaluation; 2538 for (int jj= A.level(); jj > 2; jj--, iter3++) 2539 tmp= tmp (iter3.getItem(), jj); 2540 if (!tmp.inCoeffDomain()) 2541 { 2542 int index3= 1; 2543 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 2544 { 2545 if (index3 == index2) 2546 { 2547 iter3.getItem() /= tmp; 2548 iter3.getItem() /= Lc (iter3.getItem()); 2549 break; 2550 } 2551 } 2552 } 2553 } 2554 } 2555 } 2556 } 2557 } 2558 } 2559 } 2560 2561 void 2562 LCHeuristicCheck (const CFList& LCs, const CFList& contents, CanonicalForm& A, 2563 const CanonicalForm& oldA, CFList& leadingCoeffs, 2564 bool& foundTrueMultiplier) 2565 { 2566 CanonicalForm pLCs= prod (LCs); 2567 if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A 2568 { 2569 A= oldA; 2570 CFListIterator iter2= leadingCoeffs; 2571 for (CFListIterator iter= contents; iter.hasItem(); iter++, iter2++) 2572 iter2.getItem() /= iter.getItem(); 2573 foundTrueMultiplier= true; 2574 } 2575 } 2576 2577 void 2578 LCHeuristic2 (const CanonicalForm& LCmultiplier, const CFList& factors, 2579 CFList& leadingCoeffs, CFList& contents, CFList& LCs, 2580 bool& foundTrueMultiplier) 2581 { 2582 CanonicalForm cont; 2583 int index= 1; 2584 CFListIterator iter2; 2585 for (CFListIterator iter= factors; iter.hasItem(); iter++, index++) 2586 { 2587 cont= content (iter.getItem(), 1); 2588 cont= gcd (cont, LCmultiplier); 2589 contents.append (cont); 2590 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 2591 { 2592 foundTrueMultiplier= true; 2593 int index2= 1; 2594 for (iter2= leadingCoeffs; iter2.hasItem(); iter2++, index2++) 2595 { 2596 if (index2 == index) 2597 continue; 2598 iter2.getItem() /= LCmultiplier; 2599 } 2600 break; 2601 } 2602 else 2603 LCs.append (LC (iter.getItem()/cont, 1)); 2604 } 2605 } 2606 2607 void 2608 LCHeuristic3 (const CanonicalForm& LCmultiplier, const CFList& factors, 2609 const CFList& oldBiFactors, const CFList& contents, 2610 const CFList* oldAeval, CanonicalForm& A, CFList*& leadingCoeffs, 2611 int lengthAeval, bool& foundMultiplier) 2612 { 2613 int index= 1; 2614 CFListIterator iter, iter2= factors; 2615 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2616 { 2617 if (fdivides (iter.getItem(), LCmultiplier)) 2618 { 2619 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 2620 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 2621 { 2622 Variable xx= Variable (2); 2623 CanonicalForm vars; 2624 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2625 xx)); 2626 for (int i= 0; i < lengthAeval; i++) 2627 { 2628 if (oldAeval[i].isEmpty()) 2629 continue; 2630 xx= oldAeval[i].getFirst().mvar(); 2631 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2632 xx)); 2633 } 2634 if (vars.level() <= 2) 2635 { 2636 int index2= 1; 2637 for (CFListIterator iter3= leadingCoeffs[lengthAeval-1]; 2638 iter3.hasItem(); iter3++, index2++) 2639 { 2640 if (index2 == index) 2641 { 2642 iter3.getItem() /= LCmultiplier; 2643 break; 2644 } 2645 } 2646 A /= LCmultiplier; 2647 foundMultiplier= true; 2648 iter.getItem()= 1; 2649 } 2650 } 2651 } 2652 } 2653 } 2654 2655 void 2656 LCHeuristic4 (const CFList& oldBiFactors, const CFList* oldAeval, 2657 const CFList& contents, const CFList& factors, 2658 const CanonicalForm& testVars, int lengthAeval, 2659 CFList*& leadingCoeffs, CanonicalForm& A, 2660 CanonicalForm& LCmultiplier, bool& foundMultiplier) 2661 { 2662 int index=1; 2663 CFListIterator iter, iter2= factors; 2664 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2665 { 2666 if (!iter.getItem().isOne() && 2667 fdivides (iter.getItem(), LCmultiplier)) 2668 { 2669 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 2670 { 2671 int index2= 1; 2672 for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem(); 2673 iter2++, index2++) 2674 { 2675 if (index2 == index) 2676 { 2677 iter2.getItem() /= iter.getItem(); 2678 foundMultiplier= true; 2679 break; 2680 } 2681 } 2682 A /= iter.getItem(); 2683 LCmultiplier /= iter.getItem(); 2684 iter.getItem()= 1; 2685 } 2686 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 2687 { 2688 Variable xx= Variable (2); 2689 CanonicalForm vars; 2690 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2691 xx)); 2692 for (int i= 0; i < lengthAeval; i++) 2693 { 2694 if (oldAeval[i].isEmpty()) 2695 continue; 2696 xx= oldAeval[i].getFirst().mvar(); 2697 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2698 xx)); 2699 } 2700 if (myGetVars(content(getItem(leadingCoeffs[lengthAeval-1],index),1)) 2701 /myGetVars (LCmultiplier) == vars) 2702 { 2703 int index2= 1; 2704 for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem(); 2705 iter2++, index2++) 2706 { 2707 if (index2 == index) 2708 { 2709 iter2.getItem() /= LCmultiplier; 2710 foundMultiplier= true; 2711 break; 2712 } 2713 } 2714 A /= LCmultiplier; 2715 iter.getItem()= 1; 2716 } 2717 } 2718 } 2719 } 2720 } 2721 2219 2722 CFList 2220 2723 extFactorize (const CanonicalForm& F, const ExtensionInfo& info); … … 2362 2865 bool fail= false; 2363 2866 int swapLevel2= 0; 2364 int level;2867 //int level; 2365 2868 int factorNums= 3; 2366 2869 CFList biFactors, bufBiFactors; … … 2391 2894 if (fail && (i == 0)) 2392 2895 { 2393 if (!swapLevel)2896 /*if (!swapLevel) //uncomment to reenable search for new main variable 2394 2897 level= 2; 2395 2898 else 2396 level= swapLevel + 1; 2397 2398 CanonicalForm g;2399 swapLevel2= newMainVariableSearch (A, Aeval, evaluation, alpha, level, g);2400 2401 if (!swapLevel2) // need to pass to an extension2402 { 2899 level= swapLevel + 1;*/ 2900 2901 //CanonicalForm g; 2902 //swapLevel2= newMainVariableSearch (A, Aeval, evaluation, alpha, level, g); 2903 2904 /*if (!swapLevel2) // need to pass to an extension 2905 {*/ 2403 2906 factors= extFactorize (A, info); 2404 2907 appendSwapDecompress (factors, contentAFactors, N, swapLevel, x); … … 2407 2910 delete [] Aeval2; 2408 2911 return factors; 2409 }2912 /*} 2410 2913 else 2411 2914 { … … 2426 2929 bufA= A; 2427 2930 bufEvaluation= evaluation; 2428 } 2931 }*/ //end uncomment 2429 2932 } 2430 2933 else if (fail && (i > 0)) … … 2591 3094 2592 3095 if (v.level() != 1) 2593 { 2594 A= swapvar (A, y, v); 2595 int i= A.level(); 2596 CanonicalForm evalPoint; 2597 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 2598 { 2599 if (i == v.level()) 2600 { 2601 evalPoint= iter.getItem(); 2602 iter.getItem()= evaluation.getLast(); 2603 evaluation.removeLast(); 2604 evaluation.append (evalPoint); 2605 break; 2606 } 2607 } 2608 for (i= 0; i < lengthAeval2; i++) 2609 { 2610 if (oldAeval[i].isEmpty()) 2611 continue; 2612 if (oldAeval[i].getFirst().level() == v.level()) 2613 { 2614 CFArray tmp= copy (oldAeval[i]); 2615 oldAeval[i]= biFactors; 2616 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 2617 iter.getItem()= swapvar (iter.getItem(), v, y); 2618 for (int ii= 0; ii < tmp.size(); ii++) 2619 tmp[ii]= swapvar (tmp[ii], v, y); 2620 CFArray tmp2= CFArray (tmp.size()); 2621 CanonicalForm buf; 2622 for (int ii= 0; ii < tmp.size(); ii++) 2623 { 2624 buf= tmp[ii] (evaluation.getLast(),y); 2625 buf /= Lc (buf); 2626 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 2627 } 2628 biFactors= CFList(); 2629 for (int j= 0; j < tmp2.size(); j++) 2630 biFactors.append (tmp2[j]); 2631 } 2632 } 2633 } 2634 2635 CFListIterator iter; 3096 changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, 3097 uniFactors, v); 3098 2636 3099 CanonicalForm oldA= A; 2637 3100 CFList oldBiFactors= biFactors; 2638 if (!leadingCoeffs.getFirst().inCoeffDomain())2639 {2640 CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);2641 A *= tmp;2642 tmp= leadingCoeffs.getFirst();2643 iter= evaluation;2644 for (int i= A.level(); i > 2; i--, iter++)2645 tmp= tmp (iter.getItem(), i);2646 if (!tmp.inCoeffDomain())2647 {2648 for (CFListIterator i= biFactors; i.hasItem(); i++)2649 {2650 i.getItem() *= tmp/LC (i.getItem(), 1);2651 i.getItem() /= Lc (i.getItem());2652 }2653 }2654 }2655 3101 2656 3102 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); … … 2658 3104 leadingCoeffs.removeFirst(); 2659 3105 3106 if (!LCmultiplierIsConst) 3107 distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier); 3108 2660 3109 //prepare leading coefficients 2661 3110 CFList* leadingCoeffs2= new CFList [lengthAeval2]; 2662 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors, 2663 evaluation); 2664 2665 Aeval= evaluateAtEval (A, evaluation, 2); 2666 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 2667 for (iter= Aeval; iter.hasItem(); iter++) 2668 iter.getItem() *= hh; 2669 2670 A *= hh; 2671 2672 2673 CFListIterator iter2; 3111 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), leadingCoeffs, 3112 biFactors, evaluation); 3113 3114 CFListIterator iter; 2674 3115 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 2675 3116 bufBiFactors= biFactors; 2676 3117 bufA= A; 2677 CanonicalForm bufLCmultiplier= LCmultiplier; 2678 CanonicalForm testVars; 3118 CanonicalForm testVars, bufLCmultiplier= LCmultiplier; 2679 3119 if (!LCmultiplierIsConst) 2680 3120 { … … 2752 3192 LCheuristic= true; 2753 3193 factors= oldFactors; 2754 CanonicalForm cont;2755 3194 CFList contents, LCs; 2756 int index=1;2757 3195 bool foundTrueMultiplier= false; 2758 for (iter= factors; iter.hasItem(); iter++, index++) 2759 { 2760 cont= content (iter.getItem(), 1); 2761 cont= gcd (cont , LCmultiplier); 2762 contents.append (cont); 2763 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 2764 { 2765 foundTrueMultiplier= true; 2766 int index2= 1; 2767 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 2768 index2++) 2769 { 2770 if (index2 == index) 2771 continue; 2772 iter2.getItem() /= LCmultiplier; 2773 } 3196 LCHeuristic2 (LCmultiplier, factors, leadingCoeffs2[lengthAeval2-1], 3197 contents, LCs, foundTrueMultiplier); 3198 if (foundTrueMultiplier) 3199 { 2774 3200 A= oldA; 2775 3201 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 2776 3202 for (int i= lengthAeval2-1; i > -1; i--) 2777 3203 leadingCoeffs2[i]= CFList(); 2778 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, 2779 biFactors, evaluation ); 2780 Aeval= evaluateAtEval (A, evaluation, 2); 2781 2782 hh= 1/Lc (Aeval.getFirst()); 2783 2784 for (iter2= Aeval; iter2.hasItem(); iter2++) 2785 iter2.getItem() *= hh; 2786 2787 A *= hh; 2788 break; 2789 } 2790 else 2791 LCs.append (LC (iter.getItem()/cont, 1)); 2792 } 2793 if (!foundTrueMultiplier) 2794 { 2795 index= 1; 2796 iter2= factors; 3204 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), 3205 leadingCoeffs, biFactors, evaluation); 3206 } 3207 else 3208 { 2797 3209 bool foundMultiplier= false; 2798 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2799 { 2800 if (fdivides (iter.getItem(), LCmultiplier)) 2801 { 2802 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 2803 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 2804 { 2805 Variable xx= Variable (2); 2806 CanonicalForm vars; 2807 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2808 xx)); 2809 for (int i= 0; i < lengthAeval2; i++) 2810 { 2811 if (oldAeval[i].isEmpty()) 2812 continue; 2813 xx= oldAeval[i].getFirst().mvar(); 2814 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2815 xx)); 2816 } 2817 if (vars.level() <= 2) 2818 { 2819 int index2= 1; 2820 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 2821 iter3.hasItem(); iter3++, index2++) 2822 { 2823 if (index2 == index) 2824 { 2825 iter3.getItem() /= LCmultiplier; 2826 break; 2827 } 2828 } 2829 A /= LCmultiplier; 2830 foundMultiplier= true; 2831 iter.getItem()= 1; 2832 } 2833 } 2834 } 2835 } 3210 LCHeuristic3 (LCmultiplier, factors, oldBiFactors, contents, oldAeval, 3211 A, leadingCoeffs2, lengthAeval2, foundMultiplier); 3212 2836 3213 // coming from above: divide out more LCmultiplier if possible 2837 3214 if (foundMultiplier) 2838 3215 { 2839 3216 foundMultiplier= false; 2840 index=1; 2841 iter2= factors; 2842 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2843 { 2844 if (!iter.getItem().isOne() && 2845 fdivides (iter.getItem(), LCmultiplier)) 2846 { 2847 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 2848 { 2849 int index2= 1; 2850 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2851 iter2++, index2++) 2852 { 2853 if (index2 == index) 2854 { 2855 iter2.getItem() /= iter.getItem(); 2856 foundMultiplier= true; 2857 break; 2858 } 2859 } 2860 A /= iter.getItem(); 2861 LCmultiplier /= iter.getItem(); 2862 iter.getItem()= 1; 2863 } 2864 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 2865 { 2866 //TODO maybe use a sqrffree decomposition of LCmultiplier as below 2867 Variable xx= Variable (2); 2868 CanonicalForm vars; 2869 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2870 xx)); 2871 for (int i= 0; i < lengthAeval2; i++) 2872 { 2873 if (oldAeval[i].isEmpty()) 2874 continue; 2875 xx= oldAeval[i].getFirst().mvar(); 2876 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2877 xx)); 2878 } 2879 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 2880 /myGetVars (LCmultiplier) == vars) 2881 { 2882 int index2= 1; 2883 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2884 iter2++, index2++) 2885 { 2886 if (index2 == index) 2887 { 2888 iter2.getItem() /= LCmultiplier; 2889 foundMultiplier= true; 2890 break; 2891 } 2892 } 2893 A /= LCmultiplier; 2894 iter.getItem()= 1; 2895 } 2896 } 2897 } 2898 } 3217 LCHeuristic4 (oldBiFactors, oldAeval, contents, factors, testVars, 3218 lengthAeval2, leadingCoeffs2, A, LCmultiplier, 3219 foundMultiplier); 2899 3220 } 2900 3221 else 2901 3222 { 2902 CanonicalForm pLCs= prod (LCs); 2903 if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A 2904 { 2905 A= oldA; 2906 iter2= leadingCoeffs2[lengthAeval2-1]; 2907 for (iter= contents; iter.hasItem(); iter++, iter2++) 2908 iter2.getItem() /= iter.getItem(); 2909 foundMultiplier= true; 2910 } 3223 LCHeuristicCheck (LCs, contents, A, oldA, 3224 leadingCoeffs2[lengthAeval2-1], foundMultiplier); 2911 3225 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 2912 3226 { 2913 Variable xx; 2914 CFList vars1; 2915 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 2916 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 2917 sqrfMultiplier.removeFirst(); 2918 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 2919 xx= Variable (2); 2920 for (iter= oldBiFactors; iter.hasItem(); iter++) 2921 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 2922 for (int i= 0; i < lengthAeval2; i++) 2923 { 2924 if (oldAeval[i].isEmpty()) 2925 continue; 2926 xx= oldAeval[i].getFirst().mvar(); 2927 iter2= vars1; 2928 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 2929 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx)); 2930 } 2931 CanonicalForm tmp; 2932 iter2= vars1; 2933 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, 2934 iter2++) 2935 { 2936 tmp= iter.getItem()/LCmultiplier; 2937 for (int i=1; i <= tmp.level(); i++) 2938 { 2939 if (degree(tmp,i) > 0 && 2940 (degree(iter2.getItem(),i) > degree (tmp,i))) 2941 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 2942 } 2943 } 2944 int multi; 2945 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 2946 { 2947 multi= 0; 2948 for (iter= vars1; iter.hasItem(); iter++) 2949 { 2950 tmp= iter.getItem(); 2951 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 2952 { 2953 multi++; 2954 tmp /= myGetVars (ii.getItem().factor()); 2955 } 2956 } 2957 if (multi == ii.getItem().exp()) 2958 { 2959 index= 1; 2960 for (iter= vars1; iter.hasItem(); iter++, index++) 2961 { 2962 while (fdivides (myGetVars(ii.getItem().factor()), 2963 iter.getItem() 2964 ) 2965 ) 2966 { 2967 int index2= 1; 2968 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2969 iter2++, index2++) 2970 { 2971 if (index2 == index) 2972 continue; 2973 else 2974 { 2975 tmp= ii.getItem().factor(); 2976 iter2.getItem() /= tmp; 2977 CFListIterator iter3= evaluation; 2978 for (int jj= A.level(); jj > 2; jj--, iter3++) 2979 tmp= tmp (iter3.getItem(), jj); 2980 if (!tmp.inCoeffDomain()) 2981 { 2982 int index3= 1; 2983 for (iter3= biFactors; iter3.hasItem(); iter3++, 2984 index3++) 2985 { 2986 if (index3 == index2) 2987 { 2988 iter3.getItem() /= tmp; 2989 iter3.getItem() /= Lc (iter3.getItem()); 2990 break; 2991 } 2992 } 2993 } 2994 A /= ii.getItem().factor(); 2995 } 2996 } 2997 iter.getItem() /= getVars (ii.getItem().factor()); 2998 } 2999 } 3000 } 3001 else 3002 { 3003 index= 1; 3004 for (iter= vars1; iter.hasItem(); iter++, index++) 3005 { 3006 if (!fdivides (myGetVars (ii.getItem().factor()), 3007 iter.getItem() 3008 ) 3009 ) 3010 { 3011 int index2= 1; 3012 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 3013 iter2++, index2++) 3014 { 3015 if (index2 == index) 3016 { 3017 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 3018 iter2.getItem() /= tmp; 3019 A /= tmp; 3020 CFListIterator iter3= evaluation; 3021 for (int jj= A.level(); jj > 2; jj--, iter3++) 3022 tmp= tmp (iter3.getItem(), jj); 3023 if (!tmp.inCoeffDomain()) 3024 { 3025 int index3= 1; 3026 for (iter3= biFactors; iter3.hasItem(); iter3++, 3027 index3++) 3028 { 3029 if (index3 == index2) 3030 { 3031 iter3.getItem() /= tmp; 3032 iter3.getItem() /= Lc (iter3.getItem()); 3033 break; 3034 } 3035 } 3036 } 3037 } 3038 } 3039 } 3040 } 3041 } 3042 } 3227 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 3228 lengthAeval2, evaluation, oldBiFactors); 3043 3229 } 3044 3230 } … … 3048 3234 for (int i= lengthAeval2-1; i > -1; i--) 3049 3235 leadingCoeffs2[i]= CFList(); 3050 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 3051 evaluation); 3052 Aeval= evaluateAtEval (A, evaluation, 2); 3053 3054 hh= 1/Lc (Aeval.getFirst()); 3055 3056 for (CFListIterator i= Aeval; i.hasItem(); i++) 3057 i.getItem() *= hh; 3058 3059 A *= hh; 3236 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 3237 biFactors, evaluation); 3060 3238 } 3061 3239 factors= CFList(); … … 3080 3258 { 3081 3259 LCheuristic= true; 3082 int index; 3083 Variable xx; 3084 CFList vars1; 3085 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 3086 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 3087 sqrfMultiplier.removeFirst(); 3088 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 3089 xx= Variable (2); 3090 for (iter= oldBiFactors; iter.hasItem(); iter++) 3091 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 3092 for (int i= 0; i < lengthAeval2; i++) 3093 { 3094 if (oldAeval[i].isEmpty()) 3095 continue; 3096 xx= oldAeval[i].getFirst().mvar(); 3097 iter2= vars1; 3098 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 3099 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 3100 } 3101 CanonicalForm tmp; 3102 iter2= vars1; 3103 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++) 3104 { 3105 tmp= iter.getItem()/LCmultiplier; 3106 for (int i=1; i <= tmp.level(); i++) 3107 { 3108 if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i))) 3109 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 3110 } 3111 } 3112 int multi; 3113 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 3114 { 3115 multi= 0; 3116 for (iter= vars1; iter.hasItem(); iter++) 3117 { 3118 tmp= iter.getItem(); 3119 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 3120 { 3121 multi++; 3122 tmp /= myGetVars (ii.getItem().factor()); 3123 } 3124 } 3125 if (multi == ii.getItem().exp()) 3126 { 3127 index= 1; 3128 for (iter= vars1; iter.hasItem(); iter++, index++) 3129 { 3130 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 3131 { 3132 int index2= 1; 3133 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();iter2++, 3134 index2++) 3135 { 3136 if (index2 == index) 3137 continue; 3138 else 3139 { 3140 tmp= ii.getItem().factor(); 3141 iter2.getItem() /= tmp; 3142 CFListIterator iter3= evaluation; 3143 for (int jj= A.level(); jj > 2; jj--, iter3++) 3144 tmp= tmp (iter3.getItem(), jj); 3145 if (!tmp.inCoeffDomain()) 3146 { 3147 int index3= 1; 3148 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 3149 { 3150 if (index3 == index2) 3151 { 3152 iter3.getItem() /= tmp; 3153 iter3.getItem() /= Lc (iter3.getItem()); 3154 break; 3155 } 3156 } 3157 } 3158 A /= ii.getItem().factor(); 3159 } 3160 } 3161 iter.getItem() /= getVars (ii.getItem().factor()); 3162 } 3163 } 3164 } 3165 else 3166 { 3167 index= 1; 3168 for (iter= vars1; iter.hasItem(); iter++, index++) 3169 { 3170 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 3171 { 3172 int index2= 1; 3173 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 3174 index2++) 3175 { 3176 if (index2 == index) 3177 { 3178 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 3179 iter2.getItem() /= tmp; 3180 A /= tmp; 3181 CFListIterator iter3= evaluation; 3182 for (int jj= A.level(); jj > 2; jj--, iter3++) 3183 tmp= tmp (iter3.getItem(), jj); 3184 if (!tmp.inCoeffDomain()) 3185 { 3186 int index3= 1; 3187 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 3188 { 3189 if (index3 == index2) 3190 { 3191 iter3.getItem() /= tmp; 3192 iter3.getItem() /= Lc (iter3.getItem()); 3193 break; 3194 } 3195 } 3196 } 3197 } 3198 } 3199 } 3200 } 3201 } 3202 } 3260 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 3261 lengthAeval2, evaluation, oldBiFactors); 3203 3262 3204 3263 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 3205 3264 for (int i= lengthAeval2-1; i > -1; i--) 3206 3265 leadingCoeffs2[i]= CFList(); 3207 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 3208 evaluation); 3209 Aeval= evaluateAtEval (A, evaluation, 2); 3210 3211 hh= 1/Lc (Aeval.getFirst()); 3212 3213 for (CFListIterator i= Aeval; i.hasItem(); i++) 3214 i.getItem() *= hh; 3215 3216 A *= hh; 3266 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 3267 biFactors, evaluation); 3217 3268 3218 3269 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) … … 3283 3334 if (noOneToOne) 3284 3335 { 3285 3286 3336 if (!LCmultiplierIsConst && LCheuristic) 3287 3337 { -
factory/facFqFactorize.h
rd826a8 r71a4d7 608 608 /// normalize precomputed leading coefficients such that leading coefficients 609 609 /// evaluated at @a evaluation in K^(n-2) equal the leading coeffs wrt 610 /// Variable(1) of bivariate factors 611 void 612 prepareLeadingCoeffs (CFList*& LCs, ///<[in,out] 610 /// Variable(1) of bivariate factors and change @a A and @a Aeval accordingly 611 void 612 prepareLeadingCoeffs (CFList*& LCs, ///<[in,out] 613 CanonicalForm& A, ///<[in,out] 614 CFList& Aeval, ///<[in,out] 613 615 int n, ///<[in] level of poly to be 614 616 ///< factored … … 684 686 ); 685 687 688 /// changes the second variable to be @a w and updates all relevant data 689 void 690 changeSecondVariable (CanonicalForm& A, ///<[in,out] a multivariate poly 691 CFList& biFactors, ///<[in,out] bivariate factors 692 CFList& evaluation, ///<[in,out] evaluation point 693 CFList*& oldAeval, ///<[in,out] old bivariate factors 694 ///< wrt. different second vars 695 int lengthAeval2, ///<[in] length of oldAeval 696 const CFList& uniFactors,///<[in] univariate factors 697 const Variable& w ///<[in] some variable 698 ); 699 700 /// distributes a divisor LCmultiplier of LC(A,1) on the bivariate factors and 701 /// the precomputed leading coefficients 702 void 703 distributeLCmultiplier (CanonicalForm& A, ///<[in,out] some poly 704 CFList& leadingCoeffs, ///<[in,out] leading 705 ///< coefficients 706 CFList& biFactors, ///<[in,out] bivariate 707 ///< factors 708 const CFList& evaluation, ///<[in] eval. point 709 const CanonicalForm& LCmultipler///<[in] multiplier 710 ); 711 712 /// heuristic to distribute @a LCmultiplier onto factors based on the variables 713 /// that occur in @a LCmultiplier and in the leading coeffs of bivariate factors 714 void 715 LCHeuristic (CanonicalForm& A, ///<[in,out] a poly 716 const CanonicalForm& LCmultiplier,///<[in,out] divisor of LC (A,1) 717 CFList& biFactors, ///<[in,out] bivariate factors 718 CFList*& leadingCoeffs, ///<[in,out] leading coeffs 719 const CFList* oldAeval, ///<[in] bivariate factors wrt. 720 ///< different second vars 721 int lengthAeval, ///<[in] length of oldAeval 722 const CFList& evaluation, ///<[in] evaluation point 723 const CFList& oldBiFactors ///<[in] bivariate factors 724 ///< without LCmultiplier 725 ///< distributed on them 726 ); 727 728 /// checks if prod(LCs)==LC (oldA,1) and if so divides elements of leadingCoeffs 729 /// by elements in contents, sets A to oldA and sets foundTrueMultiplier to true 730 void 731 LCHeuristicCheck (const CFList& LCs, ///<[in] leading coeffs computed 732 const CFList& contents, ///<[in] content of factors 733 CanonicalForm& A, ///<[in,out] oldA*LCmultiplier^m 734 const CanonicalForm& oldA,///<[in] some poly 735 CFList& leadingCoeffs, ///<[in,out] leading coefficients 736 bool& foundTrueMultiplier ///<[in,out] success? 737 ); 738 739 /// heuristic to distribute @a LCmultiplier onto factors based on the contents 740 /// of @a factors. @a factors are assumed to come from LucksWangSparseHeuristic. 741 /// If not successful @a contents will contain the content of each element of @a 742 /// factors and @a LCs will contain the LC of each element of @a factors divided 743 /// by its content 744 void 745 LCHeuristic2 (const CanonicalForm& LCmultiplier,///<[in] divisor of LC (A,1) 746 const CFList& factors, ///<[in] result of 747 ///< LucksWangSparseHeuristic 748 CFList& leadingCoeffs, ///<[in,out] leading coeffs 749 CFList& contents, ///<[in,out] content of factors 750 CFList& LCs, ///<[in,out] LC of factors 751 ///< divided by content of 752 ///< factors 753 bool& foundTrueMultiplier ///<[in,out] success? 754 ); 755 756 /// heuristic to remove @a LCmultiplier from a factor based on the contents 757 /// of @a factors. @a factors are assumed to come from LucksWangSparseHeuristic. 758 void 759 LCHeuristic3 (const CanonicalForm& LCmultiplier,///<[in] divisor of LC (A,1) 760 const CFList& factors, ///<[in] result of 761 ///< LucksWangSparseHeuristic 762 const CFList& oldBiFactors, ///<[in] bivariate factors 763 ///< without LCmultiplier 764 ///< distributed on them 765 const CFList& contents, ///<[in] content of factors 766 const CFList* oldAeval, ///<[in] bivariate factors wrt. 767 ///< different second vars 768 CanonicalForm& A, ///<[in,out] poly 769 CFList*& leadingCoeffs, ///<[in,out] leading coeffs 770 int lengthAeval, ///<[in] length of oldAeval 771 bool& foundMultiplier ///<[in,out] success? 772 ); 773 774 /// heuristic to remove factors of @a LCmultiplier from @a factors. 775 /// More precisely checks if elements of @a contents divide @a LCmultiplier. 776 /// Assumes LCHeuristic3 is run before it and was successful. 777 void 778 LCHeuristic4 (const CFList& oldBiFactors, ///<[in] bivariate factors 779 ///< without LCmultiplier 780 ///< distributed on them 781 const CFList* oldAeval, ///<[in] bivariate factors wrt. 782 ///< different second vars 783 const CFList& contents, ///<[in] content of factors 784 const CFList& factors, ///<[in] result of 785 ///< LucksWangSparseHeuristic 786 const CanonicalForm& testVars,///<[in] product of second vars that 787 ///< occur among oldAeval 788 int lengthAeval, ///<[in] length of oldAeval 789 CFList*& leadingCoeffs, ///<[in,out] leading coeffs 790 CanonicalForm& A, ///<[in,out] poly 791 CanonicalForm& LCmultiplier, ///<[in,out] divisor of LC (A,1) 792 bool& foundMultiplier ///<[in] success? 793 ); 794 686 795 #endif 687 796 /* FAC_FQ_FACTORIZE_H */ -
factory/facHensel.cc
rd826a8 r71a4d7 918 918 M (j + 1, 1)= mulNTL (bufFactors[0] [j], bufFactors[1] [j], b); 919 919 CanonicalForm uIZeroJ; 920 if (j == 1) 921 { 922 if (degBuf0 > 0 && degBuf1 > 0) 923 uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]), 924 (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1); 925 else if (degBuf0 > 0) 926 uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b); 927 else if (degBuf1 > 0) 928 uIZeroJ= mulNTL (bufFactors[0], buf[1], b); 929 else 930 uIZeroJ= 0; 931 if (b.getp() != 0) 932 uIZeroJ= b (uIZeroJ); 933 Pi [0] += xToJ*uIZeroJ; 934 if (b.getp() != 0) 935 Pi [0]= b (Pi[0]); 936 } 920 921 if (degBuf0 > 0 && degBuf1 > 0) 922 uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]), 923 (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1); 924 else if (degBuf0 > 0) 925 uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b); 926 else if (degBuf1 > 0) 927 uIZeroJ= mulNTL (bufFactors[0], buf[1], b); 937 928 else 938 { 939 if (degBuf0 > 0 && degBuf1 > 0) 940 uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]), 941 (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1); 942 else if (degBuf0 > 0) 943 uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b); 944 else if (degBuf1 > 0) 945 uIZeroJ= mulNTL (bufFactors[0], buf[1], b); 946 else 947 uIZeroJ= 0; 948 if (b.getp() != 0) 949 uIZeroJ= b (uIZeroJ); 950 Pi [0] += xToJ*uIZeroJ; 951 if (b.getp() != 0) 952 Pi [0]= b (Pi[0]); 953 } 929 uIZeroJ= 0; 930 if (b.getp() != 0) 931 uIZeroJ= b (uIZeroJ); 932 Pi [0] += xToJ*uIZeroJ; 933 if (b.getp() != 0) 934 Pi [0]= b (Pi[0]); 935 954 936 CFArray tmp= CFArray (factors.length() - 1); 955 937 for (k= 0; k < factors.length() - 1; k++) … … 1445 1427 M (j + 1, 1)= mulMod (bufFactors[0] [j], bufFactors[1] [j], MOD); 1446 1428 CanonicalForm uIZeroJ; 1447 if (j == 1) 1448 { 1449 if (degBuf0 > 0 && degBuf1 > 0) 1450 uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]), 1429 1430 if (degBuf0 > 0 && degBuf1 > 0) 1431 uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]), 1451 1432 (bufFactors[1] [0] + buf[1]), MOD) - M(1, 1) - M(j + 1, 1); 1452 else if (degBuf0 > 0) 1453 uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD); 1454 else if (degBuf1 > 0) 1455 uIZeroJ= mulMod (bufFactors[0], buf[1], MOD); 1456 else 1457 uIZeroJ= 0; 1458 Pi [0] += xToJ*uIZeroJ; 1459 } 1433 else if (degBuf0 > 0) 1434 uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD); 1435 else if (degBuf1 > 0) 1436 uIZeroJ= mulMod (bufFactors[0], buf[1], MOD); 1460 1437 else 1461 { 1462 if (degBuf0 > 0 && degBuf1 > 0) 1463 uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]), 1464 (bufFactors[1] [0] + buf[1]), MOD) - M(1, 1) - M(j + 1, 1); 1465 else if (degBuf0 > 0) 1466 uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD); 1467 else if (degBuf1 > 0) 1468 uIZeroJ= mulMod (bufFactors[0], buf[1], MOD); 1469 else 1470 uIZeroJ= 0; 1471 Pi [0] += xToJ*uIZeroJ; 1472 } 1438 uIZeroJ= 0; 1439 Pi [0] += xToJ*uIZeroJ; 1473 1440 1474 1441 CFArray tmp= CFArray (factors.length() - 1); … … 1887 1854 uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1]); 1888 1855 else if (degBuf > 0) 1889 uIZeroJ= mulNTL (Pi[l - 1], buf[ 1]);1856 uIZeroJ= mulNTL (Pi[l - 1], buf[l+1]); 1890 1857 else 1891 1858 uIZeroJ= 0; … … 2270 2237 uIZeroJ= mulMod (uIZeroJ, bufFactors[l + 1], MOD); 2271 2238 else if (degBuf > 0) 2272 uIZeroJ= mulMod (Pi[l - 1], buf[ 1], MOD);2239 uIZeroJ= mulMod (Pi[l - 1], buf[l + 1], MOD); 2273 2240 else 2274 2241 uIZeroJ= 0; -
factory/fac_ezgcd.cc
rd826a8 r71a4d7 296 296 297 297 CFList evaluation; 298 long termEstimate= size (U); 298 299 for (int i= A.min(); i <= A.max(); i++) 300 { 301 if (!A[i].isZero()) 302 { 303 termEstimate *= degree (U,i)*2; 304 termEstimate /= 3; 305 } 299 306 evaluation.append (A [i]); 307 } 308 if (termEstimate/getNumVars(U) > 500) 309 return -1; 300 310 CFList UEval; 301 311 CanonicalForm shiftedU= myShift2Zero (U, UEval, evaluation); … … 425 435 int degF, degG, delta, t, count, maxeval; 426 436 REvaluation bt; 427 bool gcdfound = false;437 int gcdfound = 0; 428 438 Variable x = Variable(1); 429 439 count= 0; … … 470 480 if(F.mvar()==G.mvar()) 471 481 d*=gcd(F,G); 482 else 483 return N (d); 472 484 return N (d); 485 } 486 if ( F.isUnivariate()) 487 { 488 g= content (G,G.mvar()); 489 return N(d*gcd(F,g)); 490 } 491 if ( G.isUnivariate()) 492 { 493 f= content (F,F.mvar()); 494 return N(d*gcd(G,f)); 473 495 } 474 496
Note: See TracChangeset
for help on using the changeset viewer.