Changeset 6dffa9 in git
- Timestamp:
- Sep 7, 2012, 8:09:08 PM (10 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'ad2543eab51733612ba7d118afc77edca719600e')
- Children:
- 8357e215b04863da2f7f9897d29475d589e7c2f89952bd4644408a55960f0436312937dc4ea343e8
- Parents:
- 8181f5de8ac7b3396b44ed1178dee9ca26cb30d63aa7f93d31834027b404915aa08af57549f43bd6
- Files:
-
- 6 added
- 54 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/Makefile.am
r8181f5 r6dffa9 50 50 calcSVD.cc\ 51 51 cntrlc.cc\ 52 countedref.cc\ 52 53 denom_list.cc\ 53 54 eigenval_ip.cc\ … … 106 107 blackbox.h \ 107 108 cntrlc.h \ 109 countedref.h \ 108 110 links/dbm_sl.h \ 109 111 distrib.h \ -
Singular/iparith.cc
r3aa7f9 r6dffa9 7744 7744 #endif 7745 7745 int at=a->Typ(); 7746 int bt=b->Typ(); 7746 7747 if (at>MAX_TOK) 7747 7748 { … … 7750 7751 else return TRUE; 7751 7752 } 7752 int bt=b->Typ(); 7753 else if ((bt>MAX_TOK)&&(op!='(')) 7754 { 7755 blackbox *bb=getBlackboxStuff(bt); 7756 if (bb!=NULL) return bb->blackbox_Op2(op,res,a,b); 7757 else return TRUE; 7758 } 7753 7759 int i=iiTabIndex(dArithTab2,JJTAB2LEN,op); 7754 7760 int index=i; -
Singular/tesths.cc
r8181f5 r6dffa9 9 9 #include "config.h" 10 10 #include <kernel/mod2.h> 11 11 #include "countedref.h" 12 12 #include <omalloc/omalloc.h> 13 13 … … 170 170 pyobject_setup(); 171 171 #endif 172 172 countedref_init(); 173 173 #ifdef HAVE_FANS 174 174 bbcone_setup(); -
Tst/Long/gcdp_l.res.gz.uu
r3aa7f9 r6dffa9 1 1 begin 644 gcdp_l.res.gz 2 M'XL("%F94TX``V=C9'!?;"YR97,`[%M=;QU'<GWWKQ@("RQUKR[=7?TM0P(V 3 M,;`PD`0!O,E#'K0>BY1,@"(%DK9G$^2_YYRJGIZA)>\NLFL$=NP'<V9N?];' 4 M.575K2__\/D7_S)-DW\Y??KI])LO+IY/;U]?O/_C]?G#_</D18*?Q+EV\O[D 5 M9/+NN9?G(O\Q?3/?W%S>3[_YY,L^@IQ/XSF<8[3Q%OFV'_8T7=_>O)T>+N\? 6 M[J<WMW?\;7H]7[_^]GI^N+J]N9_>W5Y,[\_'".G1>%G'^]WU]?3MS=5W\]W5 7 M_'`YW=S>G![NKKZ[FJ^GRV5^]_X:JWM]^^YR>G-W^XXS_!L:_^OYF\ME#%1T 8 M()M??_W=]?MO9C;9IJZ/IF[:XP_?7*YS3%<WDR[A:\[WU?S;9]-7K_F_2_SO 9 M_/P<VUJ7\-6W-P]7#]>7%W*6/WW_J7_ZVW58[W18#'7_</'/WUX_8"F_?WUQ 10 M?G4SUN']?AU>;!VWT^>WS\?'1U+W)O7;Z9V.UZ7T@:"_OWKX9GH_WV&5#Y=W 11 M]Z/W(XG[O.G60VC_],4_3$^@R//KJZ^??#9^J2\G?/SCU<W5P]G3SS[AW^GE 12 MRU7Q-Y??G]\_S`^C>>O-W][<WEV>/?G'?_]R^N+S:7K^O['")Y@/N]W&>S[] 13 M3>.MBQ3W<NQ<'JE`3`6GZ<VW-Z]5ED-7\D@1$C?AR2.QBAGR_14,Z>K-GZ#Q 14 MLZ<8\/W=U<V#:FJ&?BYAYOB+/;V;KZ_^\_*"OVQ3E4<#PEC?W]V^W@\YG4WO 15 M;Z__-+UY9G_?3D]'<UCS?ZTO`38X69.+%YCBC#W0>*@W"!M<;.^1[^M,9]/% 16 ML\GOFV-S_SU>RB;&\,BC0NMBQ*;?3G?^18!>PK/EV<7F_M'M>T2_R3-B33L; 17 MFIY\.,IG3Z8/;>,CS<:0X>6?_3EN.XG0ILEV^SF_[&+>/NWV'K'W-R^\RX?E 18 ME0^G5`,?Y(0OCD_^6%W2']W1Y\:G=@I2\+<>O217\52.50H_Y6/*KN$AG;S4 19 MPJ=X],''B*=PDJ0/LJT$'O?VA<=_',;'4XHNVDJ:CLR5A/[HC\%7?7*G6K5' 20 M.WH7`Z>I)Q^K][H8GU+@XO,IUL9/Z9B#B"TF56FZ&!]RS8]6DW:NE:#3O1O0 21 M]*"UQ0N&:"TM6`X?ZH+5X$%D:?P0Z@*YI)+=4O`]1UDR?Z]^2?P>9,$B8ET@ 22 MC;C(WW_`=?VRVTN@CB&@[%6[Y0BX27S*)VDJT72,$+WJX%C$FPZ.*;9H2@A> 23 MY0=PBD6<F4,-SJDY9,A45=!,4T77%U0#J3I1>Z@Y1-5`J4T5`-4EM2PYYA:@ 24 MIJ.'T85-&Y&V`4/TF8.*.^9<=#GMB)GUJ=*XUDVU&)MNZMA<*[JK$\35=Y6< 25 M[2F&OB6?1'*WJZ(&3<%'EY-NJI7DS:Y2::)VE6U6;,HE-?*C1+/Q$SW!;!S+ 26 M$5TOGP*>3E6JVW:5=GK)'[<QZ-4Y[Y:(12P<,4M:(*4D>8'9BI._JLTZR\[; 27 MDWI[J)X;$CGEJA(53U<V;W`4KDH4,D@J>HH9_ZF(RG0L2:+)&1^#F0]6$8,) 28 MVE<5%T3M)=9DPDZYF?E44?E"U+!U;RX<BE-1'R4K/I13:"&KI.&N):FH@2<& 29 M)Z&IU6#/H,NFDL[9XQ/,U?E-T`8M4*?NU9VBH9`GQ5;O;%]5@FT+]EG,)2## 30 MF&Q3(>O"N*F85.78577-V:9J*!V8?)24NE>47-2`@%M!#"9]5B>`7SBS*D4F 31 M,R'X13%DBJZN)F0P+,=4Z5G'6M/85]Z!5/X1D/K[&E#>04D.?[,!_4SL)^]H 32 M-8-6?Y&VE'=[+#^TI9_"E.INPJ:L5&+DQD,^EJ*\$Q*WJX`<J"W=>`A'T+4^ 33 M,39Q*O/@CYA">R,X";7H1FD0(;&[5(A5OT%:*@^!S:5<U$ZQZB#*"@+\3JH= 34 M`3^X6,RVO;3BNW%7%2PTWY(QD`^=6>H1K-H9R(OJ!K3JG4@G5@SMU"X0W8A+ 35 MA\ZLR<(;DEXQ&H(>>W33:K/HID2-IDAS0<.60H/3'_.I9&^A5DUJ[5"[%'48 36 MN`Y:96,AP<_0.V*O-A1?=B!2/(T[>>,O4IGDH"(_>0OF(/)<=+C@$3!H3`") 37 M%V=$AWC0J>8@;R\Y=X%+$-]%#A6+B3QD'1L2!^=FDWBV6$$@"]&@4R@*TXS# 38 M?&45.99HK`^:#AKAP==R":W+'#IN7>;B.YH$DPB)WW1(YL=`G?EA-19)P-DL 39 MN&QXD.YK+E9V`?-7W2`BBZ2Z3O0K72'DY:JZ;CCE#B<^JF<>0XV;KY4=BI;P 40 M45^#5"("B@4R@5V[16TP"S[X4X;=+L+(,)6RJ#0@UL60M2)Z1/S3LBPJA^@6 41 M"L''UA:87<D-/P0LWC/<#"TCV.1((6FPV:)?&@7M$6J&BEB4ZH-U(=+$:UT2 42 M+%<\XTP8!#P\Y!`6=1`IRPG>YG_>BU_5LH/\DBQFQOJH\)@![YZ6%*'[*`H# 43 M,>*CL4HXE6X/:L7V"/-R5:T\PHYC5/AJR$6JHA>]Q?P+R-'LUWR4HM,$`D=5 44 M9`C,6J)]A;<4S;0(@V@J!H-@2@WH@X,OYA4&G2A`T"WQG_H3V+<JH`JB6`D& 45 MA/359&Z),-D<#\YOZ13<,F=='!09C*^@RN(4&\F``-&.A)!I,BB$5Z3NE_S: 46 M61Y\5WLX#M?0_DCT,+OY972*&'#+:'`,_>+)<L[HUIPS*'^7D[AB3IEU4=2+ 47 M03OAW*!;=V'T5PH'@%#*#@9W_%>*<KQI.QV1FGA5\8D9IJJ8BE6!1TW9="9_ 48 M:L9`T0%@%-,#Z3IIL!,JL4\#ED"KC,F4C/59-`2N@T<D`]Z:E%&(N\$K4:B2 49 M?3,E`Q-U(=!Q\HK!0%YQ*GLA0Q3-;`"]47Q'7CA>[,#;@E$=72YUY(4[IA5Y 50 MHZ9,PF3(6;[%;613\C%'953HN-3<XSALP=+#K`L64W%(AJV<R!D*PVBC17>" 51 M),V;CI$9UJYC+D@S26RB><OFQ7+50H5YC>7PY-4&$GQ-'R(U'@Q[6S6"9S"$ 52 ML="_;+%<V84=I7T4>Z%H26&)M$>'OQIEQ+1`PP*<@`-C<KS#?X%0/B[0+9+Q 53 ML,!YH6T`"\/9$O-"SPT8`FZ+7<L"?8)<$1AA\\`L>&MLU2T@T!#\`AU&0"$4 54 M6&,&6,),$,C410B%!2MBG`)<+0M51_2#WIA"*\!"P($`"[#$(A%Z^Q1*(L(F 55 M%XH!;,":/"LT50$62$%\+1(BX159<,4'M3F$<$38@ND)L8ZU!I9]1(L1L+6E 56 MTJ_QMU`(6HE`L$J(;7"2A;[B\&O@J,4IR-::ER,HVO\JXI]>Q-W$ZRZZJYX\ 57 M)J+18Z(`DS))`L19O21!+>:]R6HR&N`()&M%#C]1+^J-B2J*!I&-&94QHH*/ 58 MHF5A/<:"T<P060$ZIDD+6<[P%/F7-SP%$W<X37U0EL"B+A5X2J`R0)V8]FC! 59 MCZ0)%15CS:`1/\T"E&NL"3UYS3X!J*T9?X;I%)O2"`S$NZ;[`J#FJN0-0(VV 60 M/UA*RZ6G#N`U0]DR@6%T=EJ,6-6(D"J2#%);M/2`,*2)JAE.L^QA@D'8H+HG 61 M#2EI/L6`DA6F:,E"@=!=+\SY'!0>TZ25RIY!Y)QZ;:Y:P,X,0KRF+,P@L@H/ 62 M%M4#!H@.>&S9,:BH67HL26,$%LJ*98[8K&D0X9&Q##;0=`:9D*,IIN92MV)I 63 MW<6S-9`[I5H-&&&")::.@5A1RVJG8NEZ`K1'2U<+TD4K%N>)FVC=+(.J$F9) 64 MJW)FER'H%A/M/6DTDK3DH)6$Y";ZGNMFF2R/4K-,2KZT2]!P,[MLI9I9TGZT 65 M99R()SHLT`E1J[(+2X26E<,N2X_IW*E::HH=I69QW'044Q`#.40N>37*NAIE 66 MS=%(?N5A!'(]IPPR87?)+-+[IJ1(DXR^<WRQ.`?XU6-#1''`-<MG3U91AXM5 67 MRY2)8:GG_-B+LQA/`!]KI::%U@LUC!F4MMN$&+WT4@V"4M\9/GJMZ<`<$3:Z 68 M0\^ML!NSQGY:`/]"2*N&)R>DF6K!7HO35BI&D*1"H7(L<:-[V9$!K#%KSIAA 69 M9SJ;)E?9"#[[;,6:$*VZ=`I"42)N;UNIN.X"]YH^GEO17/`"+%^T=E/P 70 M@0B>'-,*AF@^*((38WUB>*5)"(F*$,Z8IE:MV2/,]L3PUEQ2"/<LP@/"JW.L 71 MV$,BA2`.8%X0B`$*@>$!T2(Q/`32$\LFF1`.I'#+J<!%?CX+7<6]"Z'KHZ._ 72 M6A^=H\F+,SN\FI_:^=7T[NJ&!U,OYE=(!QB\SJ_"<7[%DDA%=#P?_3AOJVT_ 73 M<G/;>5OS'SUO^V"V'S]S^Z#I&%I>_L4FX>5?L8VM^<Y.VX='=>W#H[JV*]XW 74 M$^B;J[O[AV?3/2\2W+Z9'KZYG.[\N&`P&K<A(RCO_TG1%IS[<MNU_"*+MHAN 75 M=GN,?ZYH>]"*[&$MR1YZ3?;PP\+M7VJW3I9V$^=?B[?_1\5;3+G30_VU>/O3 76 M%V\1"F\BY]6H'R_>'M8"Z&%40`]K"?0P:J"'400]C"KH82V#'M8ZZ&$40@]K 77 M)?302Z&'7@L]C&+H8:V&'GHY]-#KH8>U('KH%=%#+XD>>DWTT(NBA[4J>OA! 78 M3?>7M*=5B3NBZ%?7;FZ_?[;=T[NZ^>[V^CNR/PEVOGY[^?7=?/5ZW*P;G?5` 79 M]"SRJ!_$;ZX0G`#.$`/8JX0,=YG["WBF-P/\C4Z$*0>^[)T\2W?6Q3-G3QW+ 80 M,-0VD4.H3@CM??C*"NIL+]EN\&C%HO'SJ]!=T2&`ZYV8AP;PU;P"HZ2>GF*F 81 MLL[$I,`W_-([X55<<=9+\:V,[\S9>R_>,XG<N?7":R%2S_92>_[+F@%3\MXI 82 ML\(=US[YR$*>=0')1"L0$Y58T.Y=$H3JMCX`*L\[2[.]M'YA!:U2Y>=7'5VD 83 M\)I([\1R94*P,=M+*YH8LQ6L:\P$(D/@,G84CH*<NL^$ES080LJ8"&0:5V/` 84 M"QN)]:!EE-X&T<50D6<*1D%9'[RF`*^:^PLRL=X,&-?&VIS6=MS:2R.ZW#<$ 85 MTP"CE_X8!.JR7@WHJ"^B+Z"X8MMI&I?E_A5A0>]060I.O8->O^D6!\=,BL%H 86 M47+HS0OOXJS&5K0D9$M""NN-9<F\"`IZA[S&T*(OOL`DM0,#SZ8G!7E<Z0.. 87 M[-Q8#^G/Q)/MAE=)8!%Z>)5'1.*&7V4K8(OFJJ5L?J6%R,VO@&0EK7Z%4*]T 88 MQQ+$D7ES+`2&>?,K,K&LC@4>;RL1MN(VOX(`'_F5KQTJ^%M)G3,Q&./4S:\" 89 MJP.;7]6A:;QX+SU_%W"NWQSK4:^];/G2FL4\&5RKK<+J2Z6VS;5@1RVLKB6] 90 M1*3?7=JY5FS-[URK\?A@7MTN6`TK(@A)<7,M'PASP[5JZ9K2;#98-0Q.YNHF 91 M";I3DK1Y%TBANLV[JEUBQ/=2!M;2<7+(:>=?@,J\^A?HI=]\3+6TO7?%&#?O 92 MJJ[FX5RPV1[]`WE\'<XE(+HPO`L;E-6[D+98$RW9K;X%G_-M.)<PIS#?`OFY 93 MW@3"W+P+=N'"YEZ."+2ZET4TA2(:_D[DE##<"XA8PW`O*QGNW2OOW.NC]T/. 94 MD'(5F8%X)<]RDNCS3/_/3TGOQS,P5ZQS.*4PBQ9T9^)^>*J<?\8CS%!F1I&2 95 M9N8&B,OF8W*M/M5HX`RHB.XP(%=T`"EMUK)48P./"7PM'$'/9#F$Q%+G$[03 96 MV<*A!=.JF=5WI+`<A%6TF4>SGDT:6@`/,UJTV"H;0$MA9OTSL$$]GI62=`Z@ 97 M@K,Y,J9HNLJ";43P'/M7AY\1M6:9H3%Q^#E_HG(0+B`BI&'WC!0(_4-N70Y: 98 M*>``31<08.(S$VDG70P(@EKC"L!L'BVBPTPP:HE=#*R58M&!YD1%%)<AA19* 99 M6J4`N_0<`3&P<),1KH(AJG0AG!+8E:MTI5+6R-BXAN3%9`!#25QB:-PC_#%2 100 MB$E,!-"^>2F[1B2#L[VI!%8+JCMKTLL_9\%ACYL?(@=P8>=Q>8T6D*^T[(9; 101 M)>.+[E72?%DY*Z3N5D#9$2``25NN8?@5<KJ5LYB:61FB%N>'6R&#D>%5A15? 102 M<RJ,VGQW+P:5JU.E.(B7+SV@RMQ!*"N1U14@$Z_.KJ"/:+CQI'VV9R2PH7]M 103 M<>T`T/1YT$3DR7XQM\4OP3*PN+GM[I\(>/&=%3?)(O+4O'W$IW0%-^)3OO56 104 M;D5G8;(^X@3R9>$UZHU']71%],)#6[%&(\\A%WU+'3.5.\,X$Y$X:(#AJ1N0 105 MIE=]&5#VGUK1>H/7PZ>-!J`]^.X^.ETYJI+TZEK8;KF,B?1,<=@>5%N1D@\. 106 M#6$M"PB/YG8<BBQC\#5K_,[7P:&YUX-X660+`#7?V8>GK8S@-!4[#F<(6X=! 107 M\;IR'FMC94ACHOYBQ0$RJ0]N+`T0[$=@1LK$POS&G^87^IUW/09_`CU'R`A+ 108 MR+RUL=*GSW;4S[/`-IB0$:C;HGJ]E=]6\LR2>D5,$,7O8E.@\XC#Z-H-<+SZ 109 M-B\/U)4^0UU71U/8LZ>+70CMV+*=;AU[SF1>7N%)&WE&'I'TR!2@MK)G7H4, 110 M+P]U"TT1%&_4Z5+_EP221@#%&"GE==^,IOJV:11VZ+.C3I&=#W[TNM<9B0!@ 111 MOB$X>($HRJ\=M8EZ)%>OQ*)(!^(`?G7,]K1T@C9B>K8@LLT&:AVU@6ID!>`9 112 M?B:2S>SD.VR?%+>)7NP,W)IY=4;9.W-XA(*D7\+5W.^BS(91:)%T`7!/98T` 113 M3A1#)M*ODE_\1+?&$6#`_#G;`LEW?8LL"#K7:;'O"V"ER[:?;"<KP_%,H@R* 114 MH\'95EJM><]OD@:[<2L%JM,PI6@@$>#M\PD!I]A&(,!*!HY9HPAD"8@S2M8] 115 MK%K<Y1JBM\/.,NN;9AT!$6%UJ__A+3DQ>PH:%(KOC["SU6*%A-7B:E)\+=5W 116 M6%4@#.MWGK3W3K!S5T9R4O5`NZ,J4J^:>B/H;GB2`,;TSEKO5(Y:$IGM6=W` 117 MONJQ8N]#/&MAY$Z\?\-BS6PO")%R_]YX--H[,<EF4M4[,7W(Z^J`=M+Z=:3H 118 MVY@H$F,'H?-UE4'D"5@_8P\6HUL7ZKF.69@40-76A\%B7NO!$D800)Y#=+TO 119 MRX@F>?TE]'^V@70]^-7GE=S<2)J83S;^(Y!.?,&.#/A9W+8ZI]''RA*B`-?< 120 MR!]3,WD[GN?Z@?G0<JME!3![;6E0'SQJ_<<ONTX,;;:LA!07_%:7`7RF]3'[ 121 M7?[H@9\#]K4`DV5P7XM:FM9F(8^LB5<39<N:-&&H(W\$W_7K?H*9QE2,8W(< 122 MA*EA38N#_>Q(BNS'H\5=_ABV346KZ0[V*W8Z%<D[6_8=UI+4J,SX7$=EIK7U 123 MVD22$8:1XFI(N^Q1F*ZL],=3A4Y_R#FW"(7*KG7,1)/P81`@KWVL#"B\Z[%% 124 MLW64%/3&3QS9H[/C+BW-Y+0NCVB0!T%IHKBR7Q/?&Z3!Y?7X/^U]RXXMN;'= 125 MO+]"`P]:5;UQ,_DFC*MO\,#C!@K;=72,PK4,289_W[%6/!AU)#5DPS`,NQHX 126 MC<KD3I))!H,K(E8PVT$F7/[;06Y9]++B;F\!9@!YZO!AGF!Y5ML`=V&$;Z;M 127 M+%F"A4Q)6'[AM0,%=8AQXNKOIJVKP*C""5.5S\B?!:H$/^NNQ8$.M&-?-M6\ 128 MJ-7NCR/RT(;RWK$D<8F8ARM-,?*FW8>G^FA-N=RA9&A<&SZ"LMS[GO8G_<VA 129 M-T7_'-7$,*BK36E5-0;\+-?1,P/N@'ADO`ITFJXU9>EJ9$=NU]#H@/WCJ'0L 130 MDGZ4YMK.X1QWV$`%JR*\N.2MM=%<:W8-:N'V5<.U!M4X=@PW+J\]IZM-L-=, 131 M:X[:8[A%^F5P8H]":'"VT)K3?&'R9^O)6C"/69@+[6['7-@:D(%1<58PU&%/ 132 M#UV(VU17FG/J/L`?Q<A12;:CR00/(JKJ/K=M[C/X,L<Q+,$##$F`SERE[]"9 133 M6Z/0O-\/ZI5%<=_AG:)<U*0QES-F%C@OQY6]POD)S;ANUWV`C\:5AE2TG3QN 134 MY:ZQ"R`">;<5#C?X2^S/KC:J!^`%X6:/VP@3"+)QJ8(!-6ADDP&A_.1R*ZOY 135 M4Q6;TS"?VVR!<Z@-RR>;H8+]9DJSWO8C^$B2PTUD:&6']AJ^X<A%4WXYM.<] 136 M([P!=0B+\>A,66;S^-SFM:9KUK&/SZW>/0"(7#73:E";I#ULQ`%]N#6!-/FS 137 M[_MRJZ%WO3<.OL%2+^'9E*NQQW+?0+M(D0",VA$Z&7#"7BX$L"%:F`WU4N25 138 MS8;D(RE_EZE,P-S@CI)U0*O@&H*M7[$W"UPM`+-BGA$^@QKZAA6[X4^2:>,O 139 M&G&[*%K!NU-PX1MSK`4O(]6U\R?TS:VF@%J4T1M((X*,'["+\8/R^G-MP.@( 140 MOL-?]!!@+9!9M!`K$-0O`U_I%"K5FA#C!3Z``E@M*_GG3=L!3INFSCWIRV,W 141 M6D2P;F1TQ?J!HVS0^A!H\\;P(_V'"][%ZX+U,6_Z%U=;%T#]HO=1;`(P,/`. 142 M8@YM*8='!:]`XTC6G72@8A`$6&*8^J)33420/9"!+.UJ]"U*DV^D`]8+#LSE 143 M[LV]8)&40?-H](+^B_9WMU[3%YAXC''(#=>DF*#AUA,#_N(@WC<]CTV&0#JR 144 MK[`*1457M6L:&ME]TX23+<(-*-&(M-'P"D->2"RCJX6!N!=*0>1#N?PG-M-U 145 MFWGX:+*T,<0WIT!F#%91:7>8AV7Q!??F"\`ZH@>YJFNST`:$)F*K.\3KHK=0 146 M,,O&U#4!DA!`V;9#ND03P:,IJ_56NY&3*_#5Q.LA<E+H\BPWVD;,F&VW;0(F 147 MTGK1.0PV!^J`M(.RXO(%XO6@<2K#`/F0P7PCY66;B(%HI)Y92@`E31I6[S+& 148 M1T!1H_MZPC$[91MYDXV`KT\!ZW>AS7[U0:M3*H1]6VYUO,+R%"6&3@C.015K 149 M3+QG;^KBUO$3XYDK11;/&S95]&*5L4S*9#N&"-`+32<Y%Y)(W7(_^NCN@-TT 150 M;\7<D!E9H[@#6;0EG;NB&CE4730/W;?U>)!OE,&^%MR*=IKH2>GJ:,,D370V 151 M*A%9PKO"3?'8-Z7=?!%=)772"RSFO#2Q+JY6+M:J6JE.=;-?`N#AK)!E:>+6 152 M1^-HKH4.C$N$!^BX9"]R3<[->JL7&<E3@7$*L@L2QA']>SO&@3O;B"M2[S%! 153 M80FL8Q\7.LS"-A2-,,PVE.8/IH23:R2GJ(BP[6IRT::28(!^VT@^4<#]Y!0M 154 MW!WL[ZW)/G2*]O!LP?P;!R=K$-%=X\0\=ELT=4`C'AH1_C`-+1ZGZ-)<I5MY 155 M,LDI*EW(D<6)'+%PBA;%4V13MQ2QA]F2<`[F[\3L+\\#DXTB>@>?:/B3@69D 156 M,RF.<D;=?EOP:>"!ACC=2G:A2&J+B/W8-2+V+6.<<MT'1%3J]QY^T5Z+&89P 157 M#D13A1D-T3^(QS2/NU)J]4@4K-594MR^BJ))GE%!+U<8AB*6EMV&L&QT$!)0 158 M1@K;BQW;PC4J<]@<Y8@()-NPKGELPX%3*Q3EP#-O%$NQ^1/.6;,E\U"VHN,= 159 MK98A4*Z=K,/2P]JG*V"Z>5B,L8V[5S_^4=G$?,@$W'1#1L"WFCH)80BQ0:;8 160 M<"3582*VRX(@4RV>?F!13=[4RF2#GP5N."JKRH0(YYO,`XXU<>.S*/L4OYH] 161 MK"&ZY4I)'CO9BL9PXW/?X<<+81*;LA[+7Z[ZLOFEZZYI;B0&?@7V+1C?.\QL 162 M&)[;P^YR,2U#\_5$@6%/WKTFHU,$VES9<M$U!`+3=*D[RZW.`OP99J=L'_=Q 163 MUEEVWX"#:&?#LQT#`,Z[VLQJA[FI)/S"8V9VM-1>F5<3EB<\?-TM3S&^U2B& 164 M4V_=62V/<L53B/C>X;";.D%0UK/TSSRJ$6XTQ/JW!YWHS-ONUROKO)/F'7SR 165 MV"T+[N/B,BOW9D9(&/IPR*QC&O/R*JZ7JV4!RY_Q"*S*/K-2EC<LP:02Q5"- 166 M227V6[@\H'N/QPE1BGL=OH?EJ%`KKXC^D3BU6C8^>T2=<%'=7P>71#R%F.-N 167 MH5B0C]5=L4`.-M,O-(95/RGF'5$.<CR<4P;-;/>6,J=,+8]R@F\(5@U;1M#% 168 MLL+LOFP>/;GK!,Y?H<NQYSN?#*(RE]\6VR9I99&`&L[$DC9<9)9>W6]?]Z'8 169 M8*);)E,QU\N4\K9T*S@L=)%&N"HF]D+.ZA5FIY&6J;=#`XD&+LLWF<WQN=SJ 170 M5/H9N77%7X7NIYA1J.,Z(R0MBZW;W>"L8&[/ALG,G#9#'2\F`2,C=_5D>-X[ 171 MG-"XNKJ'I5MW1JS/(C5!<!8[R(CFW^@@?(T?U'$*A=1_D&\CL!26A>R`A.]= 172 MC#/89L/Q/7`'303`?#$16H?E(PC6T+U83<3FHKF`6$5ZY/&+R!S8OH+$46', 173 MP3)!+.Y-?JJD#T209"5)Y7LTFHX7"1E7-U@O:@3!'EDW)%/(LA6@:F;9I%E6 174 M+K6:$#9#F@/`\F;4C)B^7IM1+ZQ+-"_UD!52#=.+<,-$?\ARA%TE:Z@#T3/: 175 M1%J,J&KT;\R.[J\*P[!=:E=6&*:[T_`TPHFH.H'BG<81X+STZZ91T1&YD]<' 176 M4A;3,`43V<$-,PQ@1E3!&[)OJT%Y$3^X$&8EUT.DCQ:%&C:;;!%">3BSU>20 177 M`1RC&A=$YH9VX=VN63@YB.IM03@*Y&]6WHS44XO:93/"BO)V-'BJ0`^,KUA/ 178 M,`3&@D'3OX3G2WC^UX7'U5(*6-1I9*,=\+:3)!(DF+[H%M#=D1?3?B4;?X#H 179 M3D__T9+D-R_=B#O.G[OLMI@8@3.1<]U6^&8[D=E23=P1'6"(CK?O"/+VSE,S 180 M?'_LV(:[V8ERH=G(N-NOT.#M58SZ>*$&RJ/NC;TQ`M3M]G5X11W,@"!&:?JW 181 MV7L=W.;*Y!;\.<F.T(=`'KL"G_9">\"P._9DS>7&GV,TW_&['H82K*<;#$@; 182 M.@+SJLGF))?$.\$%?,8;MI'9L)UYC)I!11YN!-4;'/\G0-X8);/02".KN=O/ 183 MX$1S5-M`%.IA^>)R>"@>B<1;<]YPGQPF?0@<HI`AN6I.N6GD7Y(3@MSC>\0C 184 MW'P=7K7!"*1.$S+F0;[3/WERASV#*/JN\48=!$D5H,;,;2)N_KGO&(:&I*$> 185 M+0&*N46`<VN41-0`WZ_#,\.DGY@_4O1!Z-*'<'2B9LW`V5ACY!A(#VB/LU&, 186 MFD9/%E/D>6!*L%:1Y:_."'WB%N5@SA;Y>ZE](W\Q%]X>(2`/JZ-=)UK9&"BR 187 M(UC$BHQ(0-VO<P1:Q*$2LUOXI9*0K:EKB`N$E%;,^PZ2`,YO$5VI#?&B5;N/ 188 MQ-MX"B;:';1:7$X/6<N%9<;-U]4C8E.Q\L-:KI0#BP@C<_RZ+K\/WZ4_)(*P 189 MJ@]"Q7$ZE_6-_#&2EBHY%R'8%8N_GC?"Y;3@HERLX2<,C1U+J#*+,X*Y9&:; 190 M#ZV2>:&)Z_3M!Z2MV*EFD%EPN9>!6KE8FF56L6.Z"07C'+[N8[?+3F/BQD.- 191 M9K?[/%H@['81MP#TO-P^#+#IVV54&S$C@M)9N/)GLMWOY1Q*1HTM_@MM<5P: 192 MA<M]);)-GP:B&4$NW1+S9?2N'#3NAVX*@LT.ZWWU9><P[7&<@G"17+%%X-R> 193 MX:%/1I-WY.+MD"!8ZR(<R7B_+8H)ULUEQSAU]B5<"\AR&349[W>L(Y8I\P/& 194 M>UUG%&"MUQ0V%D7BL>;*D&1[L0AR6)]DC\8D%5W_QZ&Z+S];JO?3._C/]DZF 195 M.[Q?MYONLS<[H:@PG_(X5$]6`ZDW=40.U%J:!$HN\8DLDEH1^PHI->4*J@W8 196 M'7:_YZBQ*/00;R:X(6?-':HS3/?>3^`3@&$<>Q\,_=MHAG"N3G4C)IY%3?$_ 197 M'$3]QW_]><\P9CO]?N'&ZSB7R2*B^%L/TI*_UEEC"F9\\@A[?//`Q;ZV_RH8 198 M%@`PH@0#L<#35(QZ"9C#/"*`GSHCKZ#3_[2B'3K]3,V@S*ALO#_"&P($4T(+ 199 M=F:7],M13N&:T#_G65^"84CP"J`CX,0D'Q=CTVM%I+."4R089M<2#RG+<CK2 200 MN6\UZCO)8S4AG8+Q3DAG5%O+<K$UY[3#3W5H-0)AYHZ]0*Y:<4L:\8+='><8 201 MV<MP#B0P(-6%?/?+@4[74Y45#(6^!8`!!?+@'!GP>@7.F5O/)1-IZ.%"`91I 202 MASS?Z/RM@7*:GB(G?^X9$?^&#)(KA$XN1_<M7A3::G:7QZ8$RJ';(U`.7(0S 203 M4$X;?J9>/Z_3:2/Y#,GEODJ`'$&2]*(`"LDZCG9$%%8D$`#,3`L(-$0']!`V 204 M0)\6-*G&<&ZP,G"Y]QT0I]QZJ`_^7(<\V((";1A'YJ<[RIF:VPZ\,^ZP,`3` 205 MU'5@*#Q,PYCLC<Y'/UE&<&>)=DAR:/%&I([6`#H%IJ/^64]*'B#,B$VJ\@0< 206 M<Z[BXM+#W>7/E2`+V?`1%P&VF=5\:2BCG\TPSP'Q.-_F/GL.<4\WM2X7O=]V 207 MG&$]Z!5(IP2;CTAG.3-6!*"2DZ$`*!SM.-_KSD`'SM[;D0[CZ/IGO7KXF`%M 208 M2CT47.B"?@72P8*W^_*J,_`1G,XS/)&5"/@*L%/T(`:<8*!+P*`.#F(/:`GD 209 M,XP454E]T7.K"C/X4I1B'[9A)0_*415(,+?]J!YO;.6^%7('3'.YL%8Z((?] 210 M;,R@*B%*<3,Y+:#.W0R(R46S]`[YJX1/?XDQ?Z4811@RQ#9ZU"/_'(?DA6R8 211 M%0%&8)MA=%7RB_44#/Q*C;9`.M?1/X`TU(+Z-RB;W6ZG4"8)<3-<S$:7NQWK 212 MR/0-(\B5.U%W,>7M!#=P&L4(J#.N8C\"72@QY`KT\H$Z"(U=`75J7P9UI*<S 213 M89U2SWY)6EPWVYL7>@Q:0?#_\.J8[11$+V*?YM$DLHXO0SO(.DLIWS(4,YJR 214 MD^,B?MQO.[L1.'ADFEP_&3^,'YNX,N=;SRAE!&.=G`WL#>U0=^$*V?7$*J8= 215 M#;,XS`GP@-1\`(\E'ME%*Y<==#;GB3I#*`Y(&GIVD0<J[JI"?B>65$L<@/8W 216 M9Z`K2PJQ.3CQKE*8DG;?;XC)PXW4U0NW2!Y1-L-#3,/YAKP2>I'@A1,$S*2^ 217 M369-0S[<0W0D,Q_:Z\]KW,P)1)*IYM-U:4'T(<I!_@%?G6ZNH70'F+SPLS6X 218 M&04T_(SO+("XLT"N@<TWVQN.MR`[I<,1M\6L)&NCT%,(H_T-!U2PCR"XB$'. 219 M-L3482=`0P>M8S>F7S"M3Q`+*5)TUB';%`P7=J(QK:(S,5#&:Z.-03+9JO2F 220 M-?@S98'2&RB6`LHWR"F@$;*%`7?E&E/]>6`837"L-/>Q@=W2UN);[ELI1+W2 221 MG8IA;(WT&&2`XM@P.A/;KF\/'%6$<E!;*M-+\74*)"6"&0)*))V=#32AUN2- 222 M,`27IHCB2$4X##&(#2PAD).8_4DJDEBO<*?*/LT:X`R^;V:H0D+*HR'[\;$[ 223 M,USJUDF82ENANU3T%^J7;0\M5)*$BN;`S$U^3A<-^P9PCS&N=`E?LEW@%W`R 224 MDGYSBW#B>!QTHF(0^V8BSV[T^8JI`R+2'A@&V>=^EI="!:)`T$G!/`TT+CI% 225 M:[,6EK[F13)=*R+6V$O@EZX82,3LX+75D022?8/W#Q-5"Y-@64/KS)"!\P@+ 226 MAMR<BG$4Q7A37$W4%ON@@E(OSC23=@3-H(^53*A&-E_A.+9!ORWRMS'0>VRX 227 MM4D/*N0'W1R!S036NW5DZ0)9HYSLH#TT"U?4DK*Y.MS2R@?#&,K+7J24::[P 228 M[O0<ZQ"0J=8AA)5'"-)W7[%:1+L6YZTA1LFP`GHHFQN$#2>@!&M-M"U\V\`( 229 M;&-6TKT$23EM#8M5J59@-R*;Y$*:TB#ID+2U:R#Z`+\Y!Q)>]M>J1*S"A*B" 230 M+&B\J#:A#O!].6D-*U)IB5AX_)")2#!I>$Z,I!`J*Y!M(']+5LJZ+4A1:Z4\ 231 M-G7AWP(K27VLFE`\?J*.A`N::<EWI^23G$A)-1V)4WLHV&*MH)YU8?%#XYF2 232 M%/-=FYF()(`']:9YV*8D']A&J)U4:LDU)?'_-B4)55,Q:>N:Y'#*ND)FUE5= 233 M20JZJ20*(F];L\RE53%2ZF5J<FP-2!09`(H64I_!H;RF:TF1'298RQB1S-JH 234 M)&JGJH6>O+VG8F"RIQUT6!PS;7H2AYBP&Q=C2B88L@FXFKPTNZ\LZJ'%L,6< 235 MI'%241;C(@K^UPQK`=ZDN\[0E7N12M@T3[W(J+\]9`56TY6M<#+@+.9NP3EM 236 M<T[3E:+"F"LOLTHZJ]C>S!:\KF'*DE_W.5G>F[N%[`B7Z4IL'&_J`F1H1S>D 237 M6KF"J"WQD:&FE-%"RNW@5#37E0A10TOLC1E_X/0+I-*3J`A=B?V8^P$D$DE^ 238 MM[0@;^J*4K/\I)"[R85^DA*\3%&"O4MM+:^`YP>(D+);W:XIQ12DH@3P1/A( 239 MC&CIH>8\5F6F%HU/W9I*+WBPDJ9(IB-4I>R%?$?0)[EI%?!?]^3R@Z[L5]4* 240 M]!T%]'#+9,XC5*6@+#NSP/,Z,0J]5U>6;>F..IGIN+#.H4**J4JL=6Y:\-_H 241 M*(HNEEV_FJY$Y(;$X\8((P)N.`WW,DV)[0*J$B55L4>KW-0H"=25M3)A<E,+ 242 MR1XK;SCNX9H2E@?G@8)4Q4B16;JTN&JR)JC/"(PR\;3?C5'2'FI2HZAPMU"% 243 M(9:),1J'W5M4#BC,#=L;YIO[%=5DK98C*EL%7A*R"J-_N9Y$-,7(U=QU!:C) 244 M+TI1^K=&(F]-7EVZYP#A8M6*`6>*$GH;H=BEH=0;*$4>4T4:G-26Z&DM?VI/ 245 M-H]/AV#6.$CRE^<O[[__1=#J]U\^?I\^+7>W_NGY\YU#D8:_>]3E/Z[S-PZ] 246 M_(V'HKGUA_^)'Z<#TOKE)UO^!_E__*3??KKEY]MI[/BA,I0BNPQ'13U_%5OB 247 M7:R$;_+OXU=\GN#"S4MN-KE9Y"8<`I?^]K+?MI?O4B#"PU]ON=M?OLF=`5C! 248 MGVZKH/*7[5'/3U%!?_G.NAF]Y@-+2H;<F3Q[PVYT=N$[.S'/[:9=8`WU,:^H 249 M`%4/*9!WX6<3<'^RXF^L91"_^=VN_6,U[>$O.:V>*24\8Y]WA]R=K`,G+L6M 250 MH1WT<:H(*VE)MSYB6.'<B$>:];&]?#`.);<[*_]F]<"!I_5T:Z%:/<W?M5L# 251 M7>OYM?B@=6L`G>^/AO#54VZP>G:TZE@B94X+AO6S<2PQ",5*NG6T2T=QK\J] 252 MQ5Y6#J54TNWVM$XV[:367JWVKG7\:@>S6$FW7HY7OUOD[K;:YZ/:G64=;SK" 253 M^("?E4SK>6?/]=ZP/@\(@-;+6K]9#>/U:756>[*EWTWK+>2P'&NX)S96QR%8 254 MGU>0U"XUGL4C@LAWD_X^MLOF-[Q:6C.0LL+.<L*[#OODH\O63/>??L/*^W'! 255 MC%A*)I.7W2PZLFQ_=DK`8+T[EDQS<?R&]<\AUT-;5()L&7&6<?R:WBW:-5TN 256 MKU7O>M\JI7!Y'7*WZ/JQ5=5,,+NM(9BC=ML76W'1[%90K,]<0@+H7#*]U\TF 257 M^3*1\I55=*6+J`PKJ=9U740HV592_`6XC![KB**OKT)QM*54TOJJ(9';2JIU 258 MV-92R)6O)*Z;5WT1JVC%JF'39UU0WI,,)KI-__&D*,CC+RJ6FL"&A+^G8(5O 259 M]3NP0)GW?K[+9?E>/EZM_!WE<HWD%=GIGY7E'TSZ&M>SX/??4:JUX>??/ZJR 260 MI^ZGX,UO'XHS<%GEUQ_U)VT/S;W__E_LP6C66_6"TS[G]NGM(^@>C3]^?,IZ 261 M@=%B#?[\_=0N^!BE.%_?L>LM/9G(MK)"#0)IUKEZ2SM4GEV_7T*`ZVO4Y!N2 262 MJNX9]\X^V?#C'04EB:E]FY1E\].6R;890#];4H\%3)_IT2(FCJ^%=WW[T9T3 263 M`E=G%.2]4U;QBH*T=V(_B?N^[-NC:*.^^?C6V1^]18&M<5NS(.(DG6)R;97[ 264 M[N/[YWBMIR!OGX@O14':/K%>>=]W&M\GNS=<7S[OD]6:]JW"-[YTME/Z_..- 265 MSS_^,0D.T9)J7,ZI0R43HZ,,Y*9K4"JN*PE0#>U4]&X(E<F)[BBN$4,GN4Q1 266 M'_&0BY4$JCE*VJ/%'C2RO.@NM!P=`?<GT:JF[B=<T$>P>DA*6[$_S20ENCUM 267 ME8\D8BI[$V;X3`+60F9V2?(U0F+*%=N5J49,_I&M&L+"U^]I9:BH-(=!Y0@< 268 MOEJ4Y,H%#A]R2E+50GI81TMK0F5G)8ER44/H/6T_+FB-#98DR#_H\_3-SWO\ 269 M>'S1#_J\4=NN[_1##NK:;_-[^T#^[%/U^)#+HL7O4.1=KN&P>,>332[4A_GL 270 M?+3*HW4]VSN?K'RR-ZFX\-&*1RNJKGRZ\NGU9&55+COU[WX./D\53F7U[.^L 271 MH*B&KE.:**RBL(IR21M5MR54@B::[0_FH]W/R2I0PWR.=S[]T;2P2P.ZJ^'I 272 M(K7;IC5L0UCX.7\-??Z<>-R[>TMM>%B:^BD&$]M4>Z;QY$[3GI_'5)K!S1\& 273 M]E]L8FQXM?<QOKK"/X^P59X'V:HN>:"M[GI&FT>V6:=TN,'C>:;1YJGO/PRV 274 MU9W&VVHN9\P)!>W-4`_`^];-7\<=/]#=WX9=<4T:>71.`8&.0V&-,?1:7&+L 275 M7>@3J,;G7VV#5FV'N-43$/+]*$P"/2NX;7VK+JSI]E&%C^*WS6J5FPN>_4_W 276 MR]%]IE-/8=9_/+;+&]JABE7)"=HPDM51\Z'I7DLJ^J3K[&B.@!"L;3U*O]+] 277 MFI7>8Y5]I\*259^\6ZVG,*N_U]O.Y3LHXRC!NY=^I]+Z21?"$5M3:?FD$N]U 278 MBDQER^[XJ#[&!D6LK85T[U32LB*%O_A.A?63.JU&W?YDXIA9F:JTO0AA;[_; 279 MD]:ONG>6N5)ARQH:?)#\I.\`75^W7*G,D1&,S;:\I*4=HMF+C5SH^X1:GZVU 280 M5.8H:9B]G(K<&L))>G;;<8_;QV)6C97*?._I?+//98ZC!E\LIB5;2V+"/J+` 281 M(9/;S>/AAUQ_-I>&B6(J<H-I4A2]]PF"#?8O%;C!A"=JVC23$83/*;LA[NZI 282 M1AD+$%9M24TB$VH3KC`!2>O2.Y_09PD=DM;&)B(C[DOPLAS]X:*-X\-";[BP 283 M\8-ZXW9(&'@34:^C+$(RQVBA)VJ(9)V7@4(7&YQV$/I!'Y:UU3(@+$?\D`'I 284 M*J&%X%6KXH@!@I(._FJX3'AZ64FKOX9$X=UB[?<0)IRBI+C09EU[JRM>*UV/ 285 MR>'RA5Y"JO!UL;3*6XC4N%:L<9>-XC6KP(),Y:B0^M2<(RM\&*Y-5>+6<&CI 286 MBG3:,E_AW<`K+`#FG;%BL3K&HS>'EJXWI^X7\7O7F$LU<7$8Z=IOZEC&?5=\ 287 MZTRTKZ)FM[.]D@S=\>.!-C\Z!A#8-*Q!_`,^(E%$)?QAN6[4CGT0N`@DPF,> 288 M2U=X4`S66"6TY@EJ[KK6>#JN(_(9W1"!@A7K!UT*!"N];<6FBD&:"!S1J2(0 289 M*074_&@_:;_9(I`;JXG>6^?M=GJ+0&;U(+.97D'K*ZE">Y%`7?XB]7E>XO3^ 290 M8"CMOH+/XOT/?/011UVFSX/?^#RX@Q]\Q5%I6*(PEBVK#SVGH!H)6TKFR_%= 291 M\$.OEGZ@16%Z@K$Z["!9*1HOQ[-QE\>XU\Y%Q[EQ7^8F/Z7)(.49B,O+^LOQ 292 M?N`[M*6W7'2<(/A*U;5S6?:#;'X\<:;BY+ES1HNVOJ)+)5K7FDN-`N9D? 293 M-7-A]J'@)?NZ/I4G5PIUR;3#E;4X.?>00>*?J>!&H[&+&U^^26_I>[#B1!Z' 294 ML5?-I=D;(R,T>[US<?;)X*M:W<Y@L.)PS7"0YNRYY1=S;%)5/^J,-[6=7/LD 295 M6W6IGXJR:X?GC-6[Y_+LX8%@MO7Y^>3HP:ZXVZ>G'<68LA]CI](7<^Q2X9_\ 296 M!@/\ZM.6,>[7&8;[!R<2!WGV3P]F7Y(,\FA'9.X?/$K\%.#*I0Z&NFV%LWVJ 297 M._S'W%%DDYJY:R_F!^>V@EA[/'N]Y)`//XAR[UR8_5G,Q+>3$*PX>[5$E.?X 298 M7!PQ($4&:8H\A+=]!WMM>^3"XK.@^]C</?<+A=4WLS#*S),5X0&9I.8<?2W) 299 M\2><%]KFG4JS+PZG!HR8X/WR*1`E$]3[G9MT)[K&#H'><[/5IT<W67Y$[906 300 MGY^EV[[9?\<O=Z-36W9_,QL==)TP&(_#J2.5Y5@8#NP+>5DOG^-A/*0T%)2' 301 M.QW]+WG1&$'W,6][$W[@O.9'J\^:1J)V2V7%)VTKR#M%*$!WJ`SW]HG&_N*! 302 M%WY4?JQ4DB-R-^G]+97FJ!P^BMEBX"P0&W!SO\XS.!Z/-;OC5ST8M*;2YE.Y 303 M%"]U/P'X6*V<RZVV=>Y3\:F4YS].T7C)H4&H0D_DT;(<)L09[6NFPAPKQ!$6 304 MGGI[XL)N\LCZ\V-@CV]^VXO@:S`[E36?Q\UY;+D_U><1KR$3J2782B."A>_) 305 M^*!U?;W`UCAG<L\KE:X$L/D]V=)+*IX):>,[1FVGPL#<.EF]S5S:?;(VU>*G 306 M5IO/%%^C/GRI-WT1A^TW/I6<BG:"[C=YIB,_N1*"Q^>90W8\^FU`GM]1RO4. 307 MFXW-V8B>NAG/R6!/95596;6>AAEP\^2WE<MWL@;PN;405@NCATF`=)+5KU0Z 308 M;6CWB_FH3]'P<66/9&"MK'B/W*#`5[%2F1N/2T>GYN>6#<Y6U--2D?OVV=IP 309 MS>%MN36"CS-&R;97VU36YPD//K"JE)`WDR-\UK#I<9Q"/8#6MHUS,[#J_:J@ 310 M.:%8W5'%ZF"(P."KH5`>-]%OO7_PIRI`K<9PJVYC=6F+#EAK0#GD)P14#51Y 311 M*_M12PZ:W-%U!:D?_.0SOA*>H*G!1$$^R,9-F#00(AEYM+D-D#HXE#EMR.!@ 312 MP0&%Z['M9>O+<3'B8/!1:@:9`?@JOWP<CV0'(]Y-ELYU\*7#/)EGG!NG+I>` 313 M=_/AY!G#E6P;9_;.E<%D0#=1P/?]"4<&:D-*J[N$?\TN2)FX@=/,`D`Z5EM@ 314 M)E_SQ=P\@='&0Y._#S8,S`+$7UN&A0'`*KQ=GS!A@*\;I)DV,R!TY+5YD$," 315 M@PZZ)KXWU%_,KQ1HBY^9#OY5R"8BN,?CE'V9D!4<;)107\"H\CKO[/X.",6/ 316 M_;1H)GDQL559?Z]C0,P7<XZ?T&:`IN94HNU&A8,&V"H9P`4DJJ\5QUT?]!9X 317 MZ`;87`FY.1:"(7O-G5";`R%ZZ%8_@,TA4`^RT<[H)U@9!M6LNW"2[>GNL^Q2 318 M!3*_]D@`+<`-CI[)X,QQ#?3KOK+_WD'->C2O*61RQ>BN@\D<Q[179[',L!=T 319 MFR>_.8&JP"D`9*4G1!4@!5\H;UZ2?;*;NB\#*4<G'-[MK+BP#/:G`1X&_$VK 320 M^80X2`KX`9]8RP`IH`</+Z9T.3QRV('E[;PF5VRZB:.9[$$,M#$>"=YXV[*R 321 MG-SD^-SV[9(!30`(?!\5IUD?-./P@8.U<DC:P<-\=5>](^1AKRUCZ!%EA\>Z 322 M1T=8VO<BVY]]U!V$.!I8CXP@8J^GRS5H4(Y,5[S(=M>BPU+=G#/QSJ'@,FV; 323 MBAP&;O8M[=PI@C=_/*3L;RA)UQB++K[U70G28PR-0,_OXT/OS-MBT$-N\10J 324 MW"H6T1[JD\-S%M8>ZEZ3FM\[W7O#8KV%H>GYO:/BH6'I(5?%O'^7!::[W%-* 325 MN@6FF]QHK&)8;+K*'40]GVRBR!7/'$8;,P>)]RX:KK8(,=*U[F$!:P\1RZ`V 326 MBUK#9]GQ`:+=I>UFWDJI6]JE)[1]D*TOQB7#VA8Q!NE]5HUL6\"XK%8LMFWA 327 M8GQJO4G3U7R<"-+6RG!\4^_F?/4IJ6A-[C!!J%_W<Y\8,FB)];G>3P29'Q:6 328 MUG,$&5\<>0XV)G>FT[$ZVI(;FI2`FG$`E061L3=+4^\G?(\?+/4B6^\T@E_A 329 M164=[9;NXF#M;]IN'6-*G:A#G^`/-NKX6#^IG%%<R$7CRX:T4;*45<:")'0J 330 MB(R=VP@=Z5.Q911=RY(</EP0O2R))#;)9TCDO9(\4AQ33XY4WKD3Y0@GAC?W 331 MH1XI3:VW(ZV#TGR$533;>"91A9/_DYSR&_(MM7[DE:S?U'@Y@OM(K=>08/*P 332 MNPVBDAZP+DH2X,?J93P_";"HV#N+[X/RF]H-,?YQU(M+,ZGHE\V0^NF9B6/4 333 M!)7G1VG;.30FSP@./'^0YNO(<D&E_;`A0$M7/::"/%!>DR`#TJD.HQR3ODOU 334 MI)R76]>*";&6-I-A5ZXI[#EGSEZ8ZU/V0_M732/XF7D$O_QM[L/<^>EU\>G_ 335 M^/W]?);[VY__]&]2T>_>_OS^N[]^_]-?WNU._=U__\]__?Z[__KVY[=_>__K 336 M^Y__$I7<K.3Y_>V__/']/_WNKW_2OOAGO/\2;:_RJ>UZ\BY6^[MY%__H;7XC 337 MZ^(?/A)-]3_\TS]-H[[FW\VX6.OO9ERLE*NQKZ^,BZ^,BZ^,BV2B_!,9%_M. 338 M*ZA\95R\?&5<_!_/N-@UR6#[3?/&$RZ8_J#)%$`#EG>AZ0^6-H%\!4^P0(:# 339 MYS<P$R*2*3YXB!*S+KY_U)^T9LV2L)J]6D)MUKI(5F"EKU[?4BKFARQ6K<G? 340 MIZ=W&U_9$5_9$?]D=L2>27#65W;$5W9$R,[_SNR(?1"T[&:_J7O;<X#-C^2& 341 M2>K]@UX7)?0S2V$9:;ZNYW@W-GZ!&Z:80:S\L*T,>$UDF.]*K$=:A)C&:KIJ 342 M\D4ULYFZ];Y(>I_/]:Y\>68]#'E";<Y*=X\9NDQW,!M;.6+[G1QYS6V8[X5& 343 M)=(DNCQ$$_4!#TTSNUAS'.1G,!WA\ZEJ=**1IO;K3SH<]DXV(BT&1"EM-B*Z 344 MS,Z@C#,F2FGS(6&R@0^)+JXT*BT-BGIM=%0TE<`'A@D*9V1TB:7!R6-3SMAH 345 M^D$,34\C4]+(:+LV-$;`B^%)H^,R=2?Y*E_)!U_)!U_)!U_)![_^5O)!N6K2 346 M&>TK^>`K^>#_^^2#<O6T)L9OXK2Q2GUBLV\\2^^I.S>.-FJ(!C"^@"A\%?!C 347 M?/N[31B\[\;39PW8X0E0R@#R4WC2";/(RX\*BY+XQ8B>SPF\43IR#-Z!1;0O 348 M[VBE_:2=,L!DO2K>(P-,UB/-'#@].KTA7&)W'C6Z4DXW+)KU8;XOZT?TP8=P 349 MIN%<7VD!7VD!+U]I`5]I`;GP*RT@2K_2`K[2`K[2`K[2`K[2`G[]?RXMH%S) 350 M`WQ?7VD!7VD!7VD!7VD!7VD!7VD!7VD!`4+^;TP+*'>*K=WEMWV"LA<S7CF@ 351 MKRK#E5VLJCHU8#G`*2S[9L`2;C99C!;$!7?Z!LM=0Y8#SKEZM\*8957^S+XT 352 M:-G@BQ/KWV*6G9'<Z6%+$+O%*EV,6C(T.8>%+2O\=6V487%+!C7+G!:V!!L; 353 M?=7()4C@I8W[>=\:JYS-HIBD&H^V/([)@"7I/1K,;/QQG1;/['+)D7GOQA]O 354 MLKT_;PW[PO&"".N[A7YW:QKW_,[(IUB'TR*?%==B4'MTN.%:AA/'NW7EAC_P 355 MQ3+I\/NWC_DHX,Z#M/R8=4]0[\F`YL'Z&+NFC&NMHDH5)'AKWZ[W\K%XGOXE 356 MO:E@.LN88MP::=-\G_:.J5D_^93#EVI3WGW"7TE67QZ9S[-]Y;DFJ=SGFH1V 357 MGVJLDC'S7%]GIHT4[E/]2BZZSS6/Z>]GKL5F2C/=\SRS$IMG997[1"N9/4WT 358 M'O>99T1_>IKG,\?*_-9)5E*YS[%RU,\<@QM_IA@@8)T9?JUG=I5*:]/[2F*Z 359 MS?`K_=@QP^NZ5DSPHY[)M4[I[)+(KI-+UDY,;DRLK_KZ!W*S__+7M[_^M[_\ 360 1?/_^W_^[G_X'$7*;('72```` 2 M'XL(",:>2%```V=C9'!?;"YR97,`[%O;CAQ'<GW75Q2(!7;8S:8R(^\22&!M 3 M`88`VS"@M1^Y*I%#:H#A##$<2;TV_.\^)R(SJT:D=A?P"H9DZ4%359W7N)P3 4 M$9G\ZH]??/FOR[+XY\NGGRZ_^_+5[S[YJG^2I\M\#D_Q\WR+?%O>O'SU[D_7 5 M3^_?WR^GY?KVYLUR?_G^_OWR^O:.ORTOU^N7WUVO]U>W-^^7M[>OEG=/YPCI 6 MP7A9Q_O#]?7RW<W5]^O=U7I_N=S<WISN[ZZ^OUJOE\OS^O;=]>7[Y>7MV\OE 7 M]=WM6\[P[VC\;T]?7Y[G0$4'LOGUUS]<O_MV99-MZOI@ZJ8]_OCMY9ACN;I9 8 M=`G?<+ZOU]\_6;Y^R?]=XG]/GS[%ML82OO[NYO[J_OKRE5SD3]]]ZA__?@SK 9 MG0Z+H=[?O_J7[Z[OL91_>OGJZ=7-7(?W^W5XL77<+E_<?C8_/I"Z-ZG?+F]U 10 MO"ZE#P3]P]7]M\N[]0ZKO+^\>S][/Y"XSYMN/83VSU_^P_((BGQZ??7-H\_G 11 M+_7Y@H]_NKJYNK]X_/DG_+L\?SX4?W/YP]/W]^O];-YZ\S<WMW>7%X_^\3^^ 12 M6K[\8ED^4[-ZA`&P_*W!9\O#!F,8<<_GVN2!D,2$=%I>?W?S4G<[I2D/1"5Q 13 MVYX\V+B8J;V_@JJO7O\9.KEXC`'?W5W=W*LL5TCP$H:(OUCDV_7ZZC\O7_&7 14 M;:KR8$"8T[N[VY?[(9>+Y=WM]9^7UT_L[YOE\6P.>_NO\1)@)8LU>?4,4URP 15 M!QI/!01A@U?;>^3[F.EB>?5D\?OFV-Q_SY>RB3$\L/G0NABQZ3?+G7\6Q+GP 16 MY/SDU>:@T>U[1+_),V)-.RTOCSX<Y?-'RX?*_DBS.61X_A=_CMM.(K1ILMU^ 17 MSL^[F+=/N[U'[/WU,^_RX?S"AU.J@0]RPA?')W^L+NF/[NASXU,[!2GX6X]> 18 MDJMX*L<JA9_R,677\)!.7FKA4SSZX&/$4SA)T@?95@*?>//,XS\.X^,I11=M 19 M)4U'YDI"?_3'X*L^N5.MVJ,=O8N!T]23C]5[78Q/*7#Q^11KXZ=TS$'$%I.J 20 M-%V,#[GF!ZM).]=*T.G>#6AZT-K9"X9H+9VQ'#[4,U:#!Y%SXX=0SY!+*MF= 21 M"[[G*.?,WZL_)WX/<L8B8CU#&O$L?_\!Q_IEMY=`'4-`V:MVRU$D)#[EDS25 22 M:#I&B%YU<"SB30?'%%LT)02O\O/^%(LX,X<:G%-SR)"IJJ"9IHJN+Z@&4G6B 23 M]E!SB*J!4ILJ`*I+:EERS"U`34</HPN;-B)M`X;H,P<5=\RYZ'+:$3/K4Z5Q 24 MC4VU&)MNZMA<*[JK$\35=Y6<[2F&OB6?1'*WJZ(&3<%'EY-NJI7DS:Y2::)V 25 ME6U6;,HE-?*C1+/Q$SW!;!S+$5TOGP*>3E6JVW:5=GK)'[<QZ-4Y[\X1BSAS 26 MQ"SI#"DER6>8K3CYF]J,67;>GM3;0_7<D,@I5Y6H>+JR>8.C<%6BD$%2T5/, 27 M^$]%5)9C21)-SO@8S'RPBAA,T+ZJN"!J+[$F$W;*S<RGBLH7HH:M>W/A4)R* 28 M^BA9\:&<0@M9)0UW+4E%#3PQ.`E-K09[=DXM"=O('I]@KLYO@C9H@3IUK^X4 29 M#86P+:"-=[:O*L&V!?LLYA*084RVJ9!U8=Q43*IR[*JZYFQ3-90.3#Y*2MTK 30 M2BYJ0,"M(`:3/JL3P"^<694BDYD0_*(8,D57APD9#,LQ57K6L=8T]Y5W()5_ 31 M`J3^O@:4=U"2P__:@'XA]I-WM)I!J[]*6\J[/98?V]+/84IU-V%35BHQ<N,A 32 M'TM1W@F)VU5`#M26;CR$(^A:GQB;.)5Y\$=,H;T1G(1:=*,TB)#872K$JM\@ 33 M+96'P.92+FJG6'40904!?B?5CH`?7"QFVUY:\=VXJPH6FF_)&,B'SBSU"%;M 34 M#.1%=0-:]4ZD$RN&=FH7B&[$I4-GUF3A#4FO&`U!CSVZ:;59=%.B1E.DN:!A 35 M2Z'!Z8_Y5+*W4*LFM7:H78HZ#%P'K;*QD.!GZ!VQ5YN*+SL0*9[&G;SQ%ZE, 36 M<E"1G[P%<Q!Y+CI<\`@8-":`Q(LSHD,\Z%1SD+>7G+O`)8CO(H>*Q40>LHX- 37 MB8-SLTD\6ZP@D(5HT"D4A6G&8;XR1(XE&NN#IH-&>/"U7$+K,H>.6Y>Y^(XF 38 MP21"XC<=DODQ4&=^6(U%$G`V"RX;'J3[FHN57<#\53>(R"*IKA/]2E<(>;FJ 39 MKAM.N<.)C^J9QU#CYFMEAZ(E?-37()6(@.(,F<"NW5EM,`L^^%.&W9Z%D6$J 40 MY:S2@%C/AJP5T2/BGY;EK'*([DPA^-C:&697<L,/`8OW##=#RP@V.5)(&FRV 41 MZ,^-@O8(-4-%+$KUP;H0:>*UGA,L5SSC3!@$/#SD$,[J(%+.)WB;_V4O?JAE 42 M!_DE6<R,]5'A,0/>/2TI0O=1%`9BQ$=CE7`JW1[4BNT1YN6J6GF$'<>H\-60 43 MBU1%+WJ+^1>0H]FO^2A%IPD$CJK($)BU1/L*;RF::1$&T50,!L&4&M`'!U_, 44 M`P:=*$#0+?&?^A/8MRJ@"J)8"0:$]-5D;HDPV1P/SF_I%-PR9UT<%!F,KZ#* 45 MXA0;R8``T8Z$D&DR*(17I.Z7_-I9'GQ7>S@.U]#^2/0PN_EE=(H8<,MH<`S] 46 MXLERSNA&SAF4O\M)7#&GS+HHZL6@G7!NT*V[,/HKA0-`*&4'@SO^*T4YWK2= 47 MCDA-O*KXQ`Q354S%JL"CIFPZDS\U8Z#H`#"*Z8%TG338"978IP%+H%7&9$K& 48 M^BP:`M?!(Y(!;TW**,3=X)4H5,F^F9*!B;H0Z#AYQ6`@KSB5O9`ABF8V@-XH 49 MOB,O'"]VX&W!J(XNESKRPAW30-ZH*9,P&7*6;W$;V91\S%$9%3HN-?<X#ENP 50 M]##K@L54'))A*R=RAL(PVFC1G2!)\Z9C9(:UZY@+TDP2FVC>LGFQ7+5085YC 51 M.3QYM8$$7].'2(T'P]Y6C>`9#&$L]"];+%=V84=I'\5>*%I2.$?:H\-?C3)B 52 M.D/#`IR``V-RO,-_@5`^GJ%;)./A#.>%M@$L#&=+S&=Z;L`0<%OL6L[0)\@5 53 M@1$V#\R"M\96W1D$&H(_0X<14`@%UI@!EC`3!#+U+(3"@A4Q3@&NEC-51_2# 54 MWIA"*\!"P($`"[#$(A%Z^Q1*(L(F%XH!;,":/"LT50$62$%\+1(BX159<,4' 55 MM3F$<$38@ND)L8ZU!I9]1(L1L+5SI5_C;Z$0M!*!8)40V^`D9_J*PZ^!HQ:G 56 M(%MK/A]!T?XW$?_\(NXF7G?17?7D,1&-'A,%F)1)$B#.ZB4):C'O35:3T0!' 57 M(%DK<OB%>E%O3%11-(ALS*B,$15\%"T+ZS$6C&:&R`K0,2U:R'*&I\B_O.$I 58 MF+C#:>J#L@06=:G`4P*5`>K"M$<+?B1-J*@8:P:-^&D6H%QC3>C):_8)0&W- 59 M^#,LI]B41F`@WC7=%P`U5R5O`&JT_<%26BX]=0"O&<J6!0RCL]-BQ*I&A%21 60 M9)#:HJ4'A"%-5,UPFF4/"PS"!M4]:4A)\RD&E*PP14L6"H3N>F'.YZ#PF!:M 61 M5/8,(N?4:W/5`G9F$.(U96$&D55XL*@>,$!TP&/+CD%%S=)C21HCL%!6+'/$ 62 M9DV#"(^,9;"!IC/(@AQ-,367NA5+ZRZ>K8'<*=5JP`@3+#%U#,2*6E8[%4O7 63 M$Z`]6KI:D"Y:L3@OW$3K9AE4E3!+6I4SNPQ!MYAH[TFCD:0E!ZTD)+?0]UPW 64 MRV1YE)IE4O*E78*&F]EE*]7,DO:C+>-"/-%A@4Z(6I5=6"*TK!QV67I,YT[5 65 M4E/L*#6+XY:CF((8R"%RR<,HZS#*FJ.1_.!A!'(]IPRR8'?)+-+[IJ1(DXR^ 66 M<WRQ.`?XU6-#1''`-<MG3U91AXM5RY2)8:GG_-B+LQA/`!^C4M-"ZX4:Q@Q* 67 MVVU!C%YZJ09!J>\,'[W6=&"."!O=H>=6V(U98S\M@'\AI%7#DQ/23+5@K\5I 68 M*Q4C2%*A4#F6N-&][,@`UI@U9\RP,YU-DZML!)]]MF)-B%9=.@6A*!&WMZU4 69 M7'>!>TT?SZUH+K!H(G@!EI^U=E/P@0B>'-,*AF@^*((38WUB>*5)"(F*$,Z8 70 MIE:MV2/,]L3PUEQ2"/<LP@/"JW.LV$,BA2`.8#XC$`,4`L,#HD5B>`BD)Y9- 71 M,B$<2.'.IP(7^>4L=(A[%T+7!T=_M3XX1Y-G%W9XM3ZV\ZOE[=4-#Z:>K2^0 72 M#C!X75^$X_J")9&*Z'@]^GG>5MM^Y.:V\[;F/WK>]L%L/WWF]D'3.;0\_ZM- 73 MPO._81M;\YV=M@^/ZMJ'1W5M5[QO)M#75W?O[Y\L[WG4?_MZN?_V<KGS\PK` 74 M;-RFC*"\_R=%6W#N\VW7\JLLVB*ZV>TQ_J6B[4$KLH=1DCWTFNSAQX7;O]9N 75 M3)9V$^??BK?_1\5;3+G30_VM>/OS%V\1"F\BY^6EGR[>'D8!]#`KH(=1`CW, 76 M&NAA%D$/LPIZ&&70PZB#'F8A]#`JH8=>"CWT6NAA%D,/HQIZZ.700Z^''D9! 77 M]-`KHH=>$CWTFNBA%T4/HRIZ^%%-]]>TIZ'$'5'TRV4WMS\\V6[27=U\?WO] 78 M/=F?!+M>O[G\YFZ]>CGOOLW.>B!Z$7G4#^(W5PA.`&>(`>Q50H:[K/T%/-.; 79 M`?YF)\*4`U_V3IZE.^OBF;.GCF48:IO((50GA/8^?&4%=;67;#=XM&+1^/E% 80 MZ*[H$,#U3LQ#`_AJ'<`HJ:>GF*F,F9@4^(9?>B>\BBO.>BF^E?F=.7OOQ7LF 81 MD3NW7G@M1.K57FK/?UDS8$K>.V56N./HDX\LY%D7D$RT`C%1B07MWB5!J&[K 82 M`Z#RO+.TVDOK%U;0*E5^?M'110JOB?1.+%<F!!NKO;2BB3%;P;KF3"`R!"YS 83 M1^$HR*G[3'A)DR&DS(E`IG$8`U[82*P'+:/T-H@NIHH\4S`*ROK@-05XU=I? 84 MD(GU9L"X-M?FM+;C1B^-Z'+?$$P#C%[Z8Q"HRWHUH*.^B+Z`XHIMIVE<EOM7 85 MA`6]0V4I./4.>OVF6QP<,RD&HT7)H3<OO(LSC*UH2<B6A!36&\N2>1$4]`YY 86 MQ-"B+[[`)+4#`\^F)P5Y7ND#CNS<6`_I+\23[:9726`1>GJ51T3BIE]E*V"+ 87 MYJJE;'ZEA<C-KX!D)0V_0JA7NF,)XLB\.18"P[SY%9E8AF.!Q]L@PE;<YE<0 88 MX`._\K5#!7\KJ7,F!F.<NOE58'5@\ZLZ-8T7[Z7G[P+.]9MC/>BUERU?6K.8 89 M)X-KM548OE1JVUP+=M3"<"WI)2+][M+.M6)K?N=:C<<'ZW"[8#6LB"`DQ<VU 90 M?"#,3=>JI6M*L]E@U3`XF:N;).A.2=+F72"%ZC;OJG:)$=]+F5A+Q\DAIYU_ 91 M`2KS\"_02[_YF&II>^^*,6[>55W-T[E@LSWZ!_+X.IU+0'1A>A<V*,.[D+98 92 M$RW9#=^"S_DVG4N84YAO@?Q<;P)A;MX%NW!A<R]'!!KN91%-H8BFOQ,Y)4SW 93 M`B+6,-W+2H9[]\H[]_KH_9`+I%Q%5B!>R:N<)/J\TO_S8]+[\0+,%>L:3BFL 94 MH@7=E;@?'BOG7_`(,Y254:2DE;D!XK+UF%RKCS4:N``JHCL,R!4=0$I;M2S5 95 MV,!C`E\+1]`S60XAL=3U!.U$MG!HP;1J9?4=*2P'815MY=&L9Y.&%L##C!8M 96 MMLH&T%)86?\,;%"/%Z4DG0.HX&R.C"F:KK)@&Q$\Q_[5X6=$K5E6:$P<?LZ? 97 MJ!R$"X@(:=@](P5"_Y!;EX-6"CA`TP4$F/C*1-I)%P."H-:X`C";1XOH,!., 98 M6F(7`VNE6'2@.5$1Q65(H862AA1@EYXC(`86;C+"53!$E2Z$4P*[<I6N5,H: 99 M&1O7D+R8#&`HB4L,C7N$/T8*,8F)`-HW+V77B&1PM3>5P+"@NK,FO?QS$1SV 100 MN/DA<@`7=AZ71[2`?*5E-]TJ&5]TKY+FR^"LD+I;`65G@``D;;F&Z5?(Z09G 101 M,36S,D0MSD^W0@8CTZL**[[F5!BU^>Y>#"J'4Z4XB9<O/:#*W$$H@\CJ`,C$ 102 MJ[,#]!$--YZTK_:,!#;TKRV.#@!-GR=-1)[L%W-;_!(L`XN;V^[^B8`7WUEQ 103 MDRPB3\W;9WQ*5W`S/N5;;^4&.@N3]1DGD"\+KU%O/*JG*Z(7'MK`&HT\IUST 104 M+77,5.X,\TQ$XJ0!AJ=N0II>]65`V7]J1>L-7@^?-AJ`]N"[^^AT<%0EZ=51 105 MV&ZYS(GT3'':'E1;D9)/#@UAE`6$1W,[#D66,?F:-7[GZ^30W.M!O"RR!8": 106 M[^S#TU9F<)J*'8<SA*W3H'A=.<^UL3*D,5%_L>(`F=0'-Y<&"/8S,"-E8F%^ 107 MXT_S"_W.NQZ3/X&>,V2$)63>VACTZ;,=]?,LL$TF9`3JMJA>;^6W09Y94J^( 108 M":+X76P*=)YQ&%V[`8Z';_/R0!WT&>I8'4UASYXN=B&T8\MVNG7L.9-Y>84G 109 M;>09>432(U.`VF#//(0,+P]U"TT1%&_4Z5+_EP229@#%&"GEL6]&4WW;-`H[ 110 M]-E1I\C.!S]ZW>N"1``PWQ`<O$`4Y=>.VD0]DJM78E&D`W$`OSIF>UHZ01LQ 111 M/5L0V58#M8[:0#6R`O`,/Q/)5G;R';9/BMM$+W8&;JV\.J/LG3D\0D'2+^%J 112 M[7=15L,HM$BZ`+BGLD8`)XHA$^E7R2]^HEOC"#!@_IQM@>2[OD46!)WKM-CW 113 M!;#29=M/MI/!<#R3*)/B:'"VE59KWO.;I,ENW$J!ZC1,*1I(!'C[>D+`*;81 114 M"+"2@6/6*`)9`N*,DG4/0XN[7$/T=MA%9GW3K",@(JQN^!_>DA.SIZ!!H?C^ 115 M"#L;%BLDK!:'2?&U5-]A58$PC.\\:>^=8.>NS.2DZH%V1U6D7C7U1M#=]"0! 116 MC.F=M=ZI'+4DLMJSNH%]U6/%WH=XUL+,G7C_AL6:U5X0(N7^O?%HM'=BDLVD 117 MJG=B^I#'ZH!VTOIUI.C;G"@28R>A\W7((/($K)^Q!XO1K0OU7.<L3`J@:NO# 118 M8#&/>K"$&020YQ!=[\LRHDE>?PG]GVT@70]^^+R2FYM)$_/)QG\$THDOV)$! 119 M/XO;5N<T^A@L(0IPS<W\,363M^-YKI^8#RVW6@:`V6M+D_K@4>,?O^PZ,;39 120 MLA)27/!;70;PF<9C]KO\T0,_)^QK`2;+Y+X6M32MS4*>61.O)LJ6-6G"4&?^ 121 M"+[KU_T$,\VI&,?D.`E3PYH6)_O9D139CT>+N_PQ;)N*5M.=[%?L="J2=[;L 122 M.XR2U*S,^%QG9::U<6TBR0S#2'$UI%WV*$Q7!OWQ5*'3'W+.+4*ALFN=,]$D 123 M?)@$R&L?@P&%=SVV:+;.DH+>^(DS>W1VW*6EF9S&\H@&>1*4)HJ#_9KXWB!- 124 M+J_'N$4FZOYM!+E2M<K*KRG.8(8A3\A#S(6W/$,GP"9ZPE=V=+;+!$5O2C+S 125 M^Y_VOFU'EAO9[EU?H0<_[.E289)W$L:9;_"#GP4TRKVGC<;Q&",9_GW'6G$A 126 MJZ41QL;!@6&W@"UT)BM))AD,KHA8P0RO'2BH78P35W^)MJX"HP(G3%$^(W\6 127 MJ!+\K%2R`QUHQS9MJGE1BMWO6^2A#>6]8TGB$C$/5YIBY`V[#T_UUIIRN4+) 128 MT+@V?`1EN58:]B?]S:$W1?]LU<0PJ*M-:54U!OPLU]8S'>Z`>*3?!#H-UYJR 129 M=#6R([=+:'3`_KY5.A9)VTIS+N=P]A0V4,:J""\N>6NU5]>:38-:N'V5<*U! 130 M-?85PXW+:XWA:A/L-=.:O;08;I%^&9S8HQ`:'#6TYC!?F/Q9VV$MF,<LS(6: 131 MZC87E@9D8%3L%0QUV(Z'+L1MBBO-,70?X(]BY*@DZ]9D@@<1576?VS+W&7R9 132 M?1N6X`&&)$!GSMQ6Z,RE46C>;QOURJ)(*;Q3E(MR:,SIC)D)SLMV9<]P?D(S 133 MSN2Z#_#1N-*0BKH.CUM.)78!1"!3G>%P@[_$_FQJHWH`7A#NZ7'K80)!-BY5 134 M,*`&]=-D0"C_<+GE6?VI@LVIF\]MU,`YU(;YR68H8+^9TBS)?@0?R>%P$QF: 135 MIT-[=M]PY*(JOQS:,XT(;T`=PF+<.E.6V=@^MW'-X9JUK^US*ZD%`)&K:EH- 136 M:I.TAX4XH`^W)I`>_NR4+K<:6M-[?>,;+/4<GDVYZJM/]PW4BQ0)P*@5H9,. 137 M)^SE0@`;HH;94"Y%7J?9</A(\N\RE0F8*]Q1L@YH%5Q=L/4->[/`U0PP*^89 138 MX3.HH:]8L0O^))DV_J(2MXNB%;P[!!>^,L=:\#)271M_0M_<K`JH11F]@C0B 139 MR/@.NQ@_R+=OI0*C(_@.?]%=@+5`9M%"K$!0OPQ\H5,H%VM"C!?X`#)@M:SD 140 M;XNV`YPV59U[TI?[JK2(8-W(Z(KU`T=9I_4AT.:5X4?Z#R>\B]<%ZV,D^A=G 141 MG1=`_:3W46P",##P#F(.+2F'1P6O0.-(UIUTH&`0!%ABF-JD4TU$D#V0@<SU 142 MJO0M2I.OI`.6"P[,Z>[--6&1Y$[SJ+>,_HOV=[=>U1<8>(QQR`77I)B@X=83 143 M`_[B(*9$SV.5(9".K"NL0E'11>V:BD966S3A9(MP`THT(FTTO$*7%Q++Z*IA 144 M(*Z)4A#Y4"[_B<UT)3,/[U66-H8X<0IDQF`5Y9K"/,R3+[@67P#6$3W(15V; 145 MF38@-!%;72%>%[V%@ED6IJX*D(0`RK8=TB6:"!Y-6:U)[49.KL!7$Z^[R$FF 146 MRS,GM(V8,=NNRP1,I/6B<QAL#M0!:0=EQ>4+Q.M.XU2&`?(A@_E*RLLR$0/1 147 M2#VSE`!*FC2LWF6,CX"B2O?U@&-VR#;R*AL!7Y\"UE*FS7ZU3JM3*H1]FY,Z 148 M7F%YBA)#)P3GH(K9!]ZS575QZ_B)\<R5(HOG%9LJ>C%SGR9ELAU#!.B%II.< 149 M"TFD;KH?O3=WP"Z:MV)NR(S,GMV!+-J2SEU1C1RJ)IJ'[MNR/<@)9;"O!;>B 150 MG2IZ4KK::S=)$YV-2D26\*YP4]Q7HK2;+Z*II`YZ@<6<ER;FQ=7*Q5I4*Y6A 151 M;O9+`#R<%;(L3=Q:KQS-.=&!?HGP`!WGTXM<#N=F2>I%1O)48)R,[((#XXC^ 152 M38YQX,XVXHK4NTU06`)SV\>9#K.P#44C=+,-I?F-*>'DZH=35$38=C6YJ$-) 153 M,$"_M1\^4<#]PRF:N3O8WTN3?>@4;>'9@OG7-T[6(**[QHEY[+9HZH!&/#0B 154 M_&$:6MQ.T:FY2DEY,H=35+IP1A8'<L3"*9H53Y%-78^(/<R6`^=@_G;,_O(\ 155 M,-DHHG?PB88_&6A&-I/L**>7Y;<%GP8>J(C3S<,N%$FM$;'OJT3$OIX8)U]I 156 M@XA"_=["+]I*-L,0SH%H*C.C(?H'\1CF<5=*K1Z)@K4Z\A&W+Z)H#L^HH)<K 157 M#$,12\MN0U@V.@@)R/T(VXL=6\,U*G-8'>6("!RV89ECVX8=IU8HRH%GWBB6 158 M8O,?.&>.>IB'LA5M[VBQ#(%\K<,ZS"VL?;H"AIN'V1C;N'NU[1^53<R'3,!- 159 M,V0$?*NIDQ"&$!MDBG5'4@TF8KTL"#+4XFD;%I7#FUJ8;/!-X(:CLJ),B'"^ 160 MR3S@6!,W/K.R3_&KT<(:HELNY\-C)UM1[VY\KA1^O!`FL2G+MOSEJDV;7[KN 161 MJN9&8N!G8-^,\4UA9L/P7!YVEXMA&9JW'06&/9E:.8Q.$6AS9<M%TQ`(3-.I 162 M[BRW.C/P9YB=LGVD[:RS[+X.!]$Z#<^Z#0`X[THUJQWFII+P,X^96=%2O3&O 163 M)BQ/>/B:6YYB?*M1#*?>3*=:[OF*IQ#Q3>&P&SI!4-8CMV<>50\W&F+]RX-. 164 M=.8M]^OEN=])\PZ>/';3@ONXN,S*3<P("4,?#IFY36->7MGU<K$L8/DS'H%5 165 MV<:IE.4-<S"I1#$48U*)_18N#^C>[7%"E"+-S?>P'!5JY1G1/Q*G9CV-SQ91 166 M)UP4]]?!)1%/(>:X:B@6Y&,U5RR0@\7T"XUAE2?%O"+*08Z'<\J@F>W>5.:4 167 MJ>6>=_`-P:INRPBZ6%:8W9?-HQWN.H'S5^AR[/G.)X.HC.FWQ;8YM+)(0`EG 168 M8CXV7&267LUO7VE3;##1]213,=?+E/*R="LX+'211K@J)O9"SNH59J>1EJFW 169 M0P.)!L[3-YG%\;G<ZE3Z&;EUV5^%[J>84:CC,B(D+8NMV=W@K&!N]X;)S)PZ 170 M0AU/)@$C(W>VP_!,*YS0N+J:AZ5K<T:LSR(U07`6&\B(YM]H('SU3^KX"(64 171 M?Y!O([`4EH7L@(3O38PSV&;=\3UP!TT$P'PQ$6J#Y2,(UM"]6$W$YJ*Y@%A% 172 M>N3QB\@<V+Z`Q%%@S,$R02SN57ZJI`]$D&0E2>6K5YJ.%PD95S-8+VH$P1Y9 173 M-R13R+(5H&IFV:!9EB^UFA`V0YH#P/)BU(R8OER+42^L2S0O]9`54@S3BW## 174 M1+_+<H1=)6NH`=$SVD1:C*AJ]*^/AN[/`L.P7FI7%ABFJ]'P-,*)J#J!XHW& 175 M$>"\]"O1J&B(W,GK`RF+:7@$$]G!!3,,8$94P2NR;XM!>1$_N!!&(==#I(\6 176 MA1HVBVP10GDXL]7DD`'LO1@71.:&=F&JU\B<'$3UEB`<!?*)E5<C]92L=MF( 177 ML**\'0V>(M`#XRO6$PR!/F'0M"_A^1*>_W/A<;5T!"S*,++1"GC;2!()$DR; 178 M=`OH[LB+8;^2C3]`=*.G?VM)\ING;L0-Y\]==EM,C,"9R+FN,WRSC<ALJB9N 179 MB`XP1,?;*8*\K?'4#-\?&[;A9G:B7&@V,NZV*S1XO8E1'R]407G4O;%51H": 180 MW;XVKZB!&1#$*$W_-GNO@=M<F-R"/P?9$?H0R&-7X-.6:0\8=L>>K+G<^+/W 181 MZCM^T\-0@O64P("TH2,P+YIL3G))O!-<P'N\81N9#=N8QZ@95.3A1E"]PO&_ 182 M`^2543(+C52RFIO]#$XT1[451*$6EB\NNX?BD4B\-.<-]\EATH?`(0H9DJOJ 183 ME)M*_B4Y(<@]3CT>X>;K\*IV1B!UFI`Q#_*=_LF3.^P91-%7B3=J($BJ`%5F 184 M;A-Q\\^58A@JDH9:M`0HYA8!SJU1$E$%?+\VSPR3OF/^2-$'H4L?PM&)FC4# 185 M9V.)D6,@/:`]SD8Q:AH]64R1YX$IP5I%EK\Z(_2)),K!G"WR]U3[1OYB+KP] 186 M0D`>5D>]=K2R,E!D1["(%1F1@+)NHP=:Q*$2HUGXI9"0K:EKB`N$E!;,^PJ2 187 M`,YO$5VI#?&B%KN/Q-MX"B9:"EHM+H>'K.7",N/&;;:(V!2L_+"6"^7`(L+( 188 M'+^NR^_#=^D/B2#,XH-0<)S.97TC?XRDI4+.10AVP>(O^XUP.2RX*!>S^PE# 189 M?<42*LSBC&`NF=GF0RMD7FCB.GW[`6D+=JH19!9<KFF@5BZF9ID5[)AN0L$X 190 MAZ][V^VRTYBX\5"CT>P^CQ8(NUW$+0`]+Y</`VSZ>AG51LR(H'1FKOQQV.YI 191 M.H>246.+_T);;)=&YG*?!]FF#0/1C"#G9HGY,GK7&31NFVX*@LT*ZWVV:><P 192 MK;Z=@G"17+%%X-R>[J%/1I-7Y.*MD"!8ZR(<A_&>+(H)ULUEQS@U]B5<"\AR 193 MZ>4PWE.L(Y8I\P/&>YE[%&"MER-L+(K$8\V%(<GZ8A'DL#[)'HU)RKK^MT-U 194 M77ZV5&N[=_"?K768[O!^)3?=1ZMV0E%F/N5VJ.ZL!E)O2H\<J#DU"91<XAU9 195 M)+4B]A52:O(55!NP.^Q^.Z/&HM!#O)G@AIPU=ZB.,-U;VX%/`(:^[7TP])/1 196 M#.%<'>I&/'@6Y8C_X2#JO_[+MS7"F&WT^X4;K^%<)HN(XF\]2$O^FGN-*9CQ 197 MR2/L\<T#%^M:_JM@6`#`B!(,Q`)/4S;J)6`.\X@`?LJ(O()&_].,=NCT,S6# 198 M,J.R\7X/;P@03`XMV)A=TBY'.9EK0O\<>WT)AB'!*X".@!.3?%ST1:\5D<X, 199 M3I%@F%5R/*0LR^%()R4UZAO)8^5`.AGC?2"=7FPMR\72G-,&/]6FU0B$&2OV 200 M`KFJV2UIQ`M6<YQC9"_#.9#`@%07\MTO!SI-3U56,!3Z%@`&%,B-<V3`RQ4X 201 M9RP]ETRDH84+!5"F;O)\I?.W!,JI>HJ<_+E&1/PK,DBN$#JY[,VW>%%HL]I= 202 M'IL2*(=NCT`Y<!&.0#FU^YEZ;;].HXWD,R27Z\H!<@1)THL"*"3K.-H149B1 203 M0``P,RP@4!$=T$/8`'UJT*0JP[G!RL#E6BD@3DYZJ`_^G)L\6(,";1A'YJ<Y 204 MRAF:VPZ\TU-8&`)@RMPP%!ZF;DSV2N>CGRPCN#-'.R0YU'@C4D=+`)T,TU'_ 205 M+#LE#Q"FQR95>`*..5=Q<>GA[O+G/"`+V?`1%P&V&<5\:2BCG\TPSP;Q.-\F 206 M[3V'N*>96I>+UI(=9U@V>@72R<'F(]*9SHP5`2CD9"@`"D<[SO=*)]"!LS<Y 207 MTF$<7?\L5PL?,Z!-+IN""UW0KD`Z6/!V7UYU!#Z"TWF$)[(0`5\!=K(>Q(`3 208 M#'0)&-3!0>P!+8%\NI&B"JDO>FY59@;?$:58FVU8R(-R5`423+(?E>V-+=RW 209 M0NZ`:2X7UD('9+>?]1%4)40I$I/3`NJD:D!,+JJE=\A?.7SZ4XSYZXA1A"%# 210 M;*-'/?+/ODE>R(:9$6`$MNE&5R6_6$_!P*_4:`ND<VW]`TA#+:A_@[+9[/81 211 MRB0A;H2+V>ARR;&.3%\W@EQ.!W474UYW<`.G4?2`.OW*]B/0A0Z&7(9>WE`' 212 MH;$KH$YITZ".]'0<6">7O5^2%M?,]N:%'H.6$?S?O#IF.P71B]BG>C2)K./+ 213 MT`ZRSHZ4;QF*$4W9R7$1/V[)SFX$#NXG3:[MC!_&CTU<F?.M9Y0R@C%WS@;V 214 MAKJINW"%K+)C%<..AID<Y@/P@-2\`8\E'ME%S9<==#;&CCI#*#9(ZGIVD0<J 215 M4E$A3P=+JAX<@/J;,]"5)878')QX5\Y,24OI%3%YN)&:>N$FR2/*9KB+:3A> 216 MD5="+Q*\<(*`F=2WR*RIR(>[BXYDYD.]?9L],2<02:::3]>D!=&'*`?Y!WQU 217 MNKFZTAU@\L+/5N%F%-#P#=]9`'%G@EP#FV_45QQO079*@R-NB5E)UD:FIQ!& 218 M^RL.J&`?07`1@YQMB*G#3H"&#EK'JDR_8%J?(!92I.BL0[8I&"[L1&5:16-B 219 MH(S70AN=9+)9Z$VK\&?*`J4W4"P%E"^04T`C9`L=[LK9A_KSP#`:X%AI[F,% 220 MNZ7.R;=<22E$K="=BF&LE?089(#BV#`Z$^LJKW<<581R4%L*TTOQ=0HD)8(9 221 M`DHDG9T5-*%:Y8TP!)>FB.)(13@,,8@5+"&0DYC]22J26*]PI\H^S1K@#$Z) 222 M&:J0D'ROR'Z\K\8,E[)T$H;25N@N%?V%^F7;0PN%)*&L.3!CD9_31,.^`MQC 223 MC`M=PI=L%_@%G(RDWR013AR/@TX4#&);3.19E3Y?,75`1%H=PR#[W#=Y*50@ 224 M"@2=%,Q30>.B4[14:V'J:UXDT]4L8HV]!'[I@H%$S`Y>6QU)(-E7>/\P424S 225 M"98UU,8,&3B/L&#(S2D81U&,B>)JHC;9!Q64<G&FF;0C:`9]+&1"5;+Y,L>Q 226 M=OIMD;^-@5Y]P:U->E`F/RAQ!!836%-MR-(%LD8YV4&K:Q:NJ"5E<S6XI94/ 227 MAC&4E[U(*=-<X=7H.=8A(%.M00@+CQ"D[[Y@M8AVS<Y;0XR2807T4#8W"!M. 228 M0`G6FFA;^+:!$=C&**1["9)RVAH6JU*MP&Y$-LF%-*5.TB%I:U=']`%^<PXD 229 MO.RWHD2LS(2HC"QHO*@VH0[P=3EI#2M2:8E8>/R0B4@P:7A.C*00*BN0;2!_ 230 M2U;*3!:D**50'JNZ\)/`2E(?BR84]Q^H(^&"9EIR:I1\DA,IJ:8C<6H/!5NL 231 M%=0S+RQ^:#Q3DF*^:S,#D03PH%XU#]N4Y!W;"+632BVYIB3^)U.24#4%DS:O 232 M00ZGK"MD9EW%E:2@FT*B(/*V-<M<6A4CI5RF)OO2@$26`:!H(?49',IKN)84 233 MV6&"M8P1R:R52J(TJEKHR>0]%0.3/6V@P^*8:=.3.,2$W;@84S+!D$W`U>2E 234 MV7UY4@]-ABW&((V3BC(;%U'POV98"_`FW76$KER35,*J>>I91OWU+BNPF*ZL 235 MF9,!9S%W"\YI'6.8KA05QEQYF5726<7V9K;@=753EORZS\[R7MPM9$>X3%=B 236 MXWA5%R!#.[HAE<(51&V)CPQ5I8QF4FX[IZ*ZKD2(&EIB+<SX':=?()6>1$7H 237 M2NS'W`\@D4CR2]*"O*DK2LWRDT+N)A?Z24KP-$4)]BZUM;P"GN\@0LINE5Q3 238 MBBE(10G@B?"1&-'20\UY+,I,S1J?2II*+WBPD*9(IB-4I>R%?$?0)[EI9?!? 239 MU^#R@ZYL5]$*]!T%]'#+9,XC5*6@+#NSP/,Z,0JM%5>6=>J..ICI.+'.H4*R 240 MJ4JL=6Y:\-_H*(HNEEV_F*Y$Y(;$X\H((P)N.`WW,DV)[0*J$B5%L4<MW-0H 241 M"=25I3!A<E$+R1XK;]A3=TT)RX/S0$$J8J3(+%U:7#19$]1G!$:9>-I2992T 242 MA9K4*"K<+51AB&5BC/IF]V:5`PISQ?:&^>9^1359BN6(RE:!EX2LPNB?KB<1 243 M33%R-7==`6KRBYR5_JV1R*3)JU/W'"!<K%HQX$Q10F\C%#LUE)J`4N0Q5:3! 244 M2:T'/:V>G]J3S>/I$,P2!TG^]/CI[4\_"5I]_^GC3\>GY5)M3\_O+Q&*-/SN 245 M49?_N,X_./3R#QZ*YN9?_C=^?!R0UBX_V?(_R?_C)RWYZ9;/MX^QXX?*4(KL 246 M,AP5]?A9;(DWL1*^R[^/G_%Y@@LW+[E9Y6:6FW`(7/K;RWY;7]ZE0(2'OUYR 247 MM[U\ESL=L((_759!X2_KO>R?HH+V\LZZ&;WF`U-*NMP9/'O#;C1VX9V=&/MV 248 MU2ZPAG(?5U2`JKL4R+OPLPFX/UCQ=];2B=_\;M/^L9IZ]Y<<5L^0$IZQS[M= 249 M[@[6@1.7XE;7#OHX%825M*19'S&L<&[$(]7Z6%\^&(>2VXV5?[=ZX,#3>IJU 250 M4*R>ZN_:K(&F]?R<?=":-8#.MWM%^.HA-U@].UIT+)$RIP7=^EDYEAB$;"7- 251 M.MJDH[A7Y-YD+PN'4BII=GM8)ZMV4FLO5GO3.GZV@UFLI%DO^\WO9KF[K/9Q 252 M+W9G6L>KCC`^X&<EPWK>V'.]UZW/'0*@];+6[U9#OSVLSF)/UN-WPWH+.<S; 253 M&FX'&ZOA$*SG%22U2XU[\8@@\MVDO_?ELOD=KW:L&4A99F<YX4V'??#1:6NF 254 M^4^_8^5]7C`]EI+)Y&4WLXXLVQ^-$M!9[XHE4UT<OV/]<\CUT!:5(%M&G&4< 255 MOZ9WLW9-E\NMZ%WO6Z$43J]#[F9=/[:JJ@EFLS4$<]1N^V+++IK-"K+UF4M( 256 M`)U+IO>ZVB1?)E*^LK*N=!&5;B7%NJZ+""7+2K*_`)?1?6Y1]/65*8ZVE/*Q 257 MODI(Y+*28AVVM11RY2N)Z^:F+V(5S5@U;'JO"\K[(8,'W:9]/BD*\OB3BB5< 258 M,P]!"=_+.U!`?KS)W_D]?]R^O>&V_)5IJU[Y45@D)0AS/S)^^<[2!W[Z_E%8 259 MDAZ"+;_[4^E1Y'<?Y0=OX.U/?_[V.-OXL[9_-G2VLUO1WYX-Y:>&M!U_YR-N 260 MUU;L8E-/&K*M*5,C0#IU[%^/'>><+;^?0R#++6KR#495\8A[>]^K^/&*@GR( 261 MG7UKE&7C:0MDVPR([RVFQ8*D#W1K!1.O6^9=WTYT)X0`E1$%YUXHJW)&P;$7 262 M8G^(^[Z,ZSUKH[Z9^%;8[JU&@:U96X,@UAPZPN34*O?=Q/?#?BN[X-P.$2^* 263 M@F,[Q/KC?=\Y?-]KWG!Y>=[WBC7MJM\WLN.LIN-SC@F?<_SK(3A$/ZI!.:<. 264 M?4R,]N*6FZX1J8BN0X!*:)NL=T.H3$YTAW`-%SK&98KZA8=6S$.@JJ.>U6OL 265 M*?V4%]U5IJ,=X/A#M(JI[P&7\A:L%I)29^PWXY`2W6Z6RL<A8BI[`V;U.`2L 266 MALRL?,A7#XG)5VP_INHP^5NV2@@+7[\=*T-%I3JLR5O@\!6B0ZY<X/!AID.J 267 M:D@/ZZC'FE#9F8=$N:@AE'YL)RYHE0WF0Y`_Z>?C&YZI?SZ.Z)-^KM2H\YU^ 268 MQ4Z%^GV\UP_DPXH:AA;L<IFU^`UJNLDU'!!O>++*A?HD'XV/%GFTS$=]XY.% 269 M3[8J%6<^6O!H0=6%3Q<^/1^LK,AEH_Y=C\[GJ;BIK![MC15DU=!E2!.95616 270 MD2]IH^AF@TK01+6]P'RNZS%8!6H8C_[&IS^J%C9I0/<J/)VE=MN2NFT($S_G 271 MKZ'/'P./>W>3U(:'I:D?8C"Q&]7',9[<9.KC>4RE&=S\-+!_MHFQX=7>Q_CJ 272 M"G\>8:O\'&2K.I\#;767/=H\@LTZI<,-7L[C&&V>XOYIL*WN8[RMYKS'G-#. 273 MW@SU`(POW=MUW/&#_#B&77'*,?+HG&[Z.@[9=_WOT?=D8HJQ=Z$_0#(^YVH; 274 MM&H[Q*$>@(1O6V$2N%E!LO6MNK`<M[<JO&>_;5:HW)SPU#_=SUOWF4[=A:?^ 275 MXS%<WM`*5:Q*3M"&D::VF@]-=\M'T9.NLZ,V`D*PMGG/[3KNEU/IW6=>Z2C, 276 MI^J3=RME%Y[J[Y;LG+V-,K82%(N_I:.T/.E".%;+49J?5&*:N\A4MNR.]^)C 277 M;%#$VII(WSY*ZJE(X?]-1V%Y4J?%J-A/)HN9B4>5MA<AC.UWVZ'UB^Z=><RC 278 ML)X:&OR.\TG?`9J^;KZ.,D=&,![K]))Z[!#57JR?A;Y/J#59:SW*'"5ULW^/ 279 M(K=N<#*>W7;<X_:NF$E]'F6^]S2^V7.9XZC.%XMI.:T?,4GO4>"0R>W@?O=# 280 MJY_-GVZB>!2Y`30HBM[[`X)U]N\H<`,(3Y1CTSR,&GP>V0UK=S=5REB`L&)+ 281 M:A"94)MPA0E(FI?>>4*?.73(L386$1EQWP$O\]8?+MHX#BSTA@L;/Y#7DT/" 282 MP)N(8FUE$9+9>PT]44(DR[@,%+K8X/2"T`_ZL*RM>@+"O,4/&8VN$FH(7K$J 283 MMA@@R.C@KX0+A*>1Y6/UEY`HO%NL_1;"A%.1%!?:K&MO=<5KI?,^.%R^T'-( 284 M%;X6=JSR&B+5KQEKW&4C>\TJL"!'.2JD/C5GQPR?A&M3E;C9'5JZ(AVVS&=X 285 M*_`*$X!YG5@Q6QW]WJI#2]>;0_>+^+UKS*F:.#N,=.TW="SCOBN^N2?:5U&U 286 MVZ>]<ABZ_?,!-;]GZ%="'S7T"U&/;LV*=A3%./0P&#,4$&0#,@8'%,(H-'$4 287 MA^*BF[_B$MWX#9(0:S0:],6!!%&H(CP"!<&4'_4'[Z5["Z*CYBUXZNVGSCYU 288 MU9T&3[W-3[W=G?W<U?*IJ_FYJY5=M;$_ON"=\`5OQS/XT*(RI40'3%LI'WJ4 289 M0#&>M)2,E^V.X+=8+4-`B\*:!*FTVUFO4M1?MK,BY7M/<YU%VU^1+O-D[]+# 290 MQN0QA=/+VLMV:.!3L;G5LVC[-?`AJ6N=9:=K8_'[AN,H/IQJ4'4S6K0M$U4R 291 M'ZJ4LV3[1!)3F,99>+I%\))M7D_EAW>$ZF'8^<=:?/C?D.3A7Y+@WJ'AA82/ 292 MTQQOZ=NJ0C^>6+%F.4M/!XN,T&@EG<6GFP4?OFIV3((5A[>%@S1&.UM^,=\C 293 MM>^]C'A3VYRU3[+[YO)4='IK>!182>TL/YTV$,PZGY\_?#?8Z%9]>MJ!B>GO 294 MWM=1^F*^5^KPG8)@&%[=SC+&[=K#D#[YA3C(HST]>+J'9)![W2*3/CF)^+6^ 295 M>98ZOFFVNXWZ5'>X>+E)R+XSSJZ]F*N:.P7"X?'L]7)&9?C-DK3.PM-%Q61Y 296 M.ZS`BD]'E8CRZ,_%$:;1S?Z8(H^R+=^4;G7ULS#[+.C6-%8[^X7"XOM3V%GF 297 MG`H/ODQ2=1J]EIPA(ASI64<Z2D_W&A+[>TSP>GF*%<D$M9;.)MW/K>$]`/*S 298 MV>+3H_LFOW.V2[//S]2=W$RZ[6I+Z-22#=TL0<=1.U+%$VM*/\K.<!7.U`MY 299 MF2_/(2N>(QH*RB.2#NBGO&B,H+N-E[T)OT%>SD>+SYH&BU8]RK)/VE+<MHM0 300 M@.Y0&:[E$XW]Q6,C_.Y[GT?)&31+9.#7H_0,G.&[E34&SF*E@2#7;>S!\9"I 301 MF1(_Z]F=Y2BM/I53(5#S0WJW(<JY7&HNGWW*/I7R_,<NZB]G]`ZJT'-MM.R, 302 MY.$8]3F.PC.<AU,F/#MVAV[=BI'UYR>U;G?[LA?!!UO6459]'A?GL9[]*3Z/ 303 M>`V92"W!5AI!)GSRQ0>MZ>L%7,91D&M<1^D\,#,_^9I;/HK'`9[QJ:&ZCL*` 304 MT3I9K8ZSM/ED+:K%IU:KSQ1?H]Q]J5=]$4?B"5\S/HK6@<83J:#]?'(>H!Q? 305 M4`[9\0"U87-^ZNBLM]ML+,Y&]-0M<TX&>RJKRLJ*]320?>+A;/,L7P?`QQ?1 306 M0E@MTATH'QD?LUU'Z;"A72_F=MY%W<>5/9*!M;+L/7(;`1^N.LK<'IPZ.N5\ 307 M;MK@+$4]]2AR=SU;ZZXYO"TW,/#]Q"A9]FJ+RGH_X?$$5G7DS(W#MSU*F.DX 308 M\:!L0&O;QKX96#7=%#0?*%9WU'OK]/H;?#44RA,A6M+[&W^J`M1J#+?J-E:F 309 MMNB`M0240PI!0-5`E4D)BEJRT>2*KBM(_>!7F?$A[P.:&DP4Y(.$V0.3!D(D 310 M:8YFM`%2!X<RIQ5)%BS8H'#>E[UL>=E>0YS=W7,Y068`OL*/$\<CI\\0[R9+ 311 MY]KXTF&>S#..=E,O2L"[<7=^B^%*MHUC=<<\P61`-U'`*3WAR$!MR#IU+^_/ 312 MIU=1)J[CP+$`D([5)LC#UW@QSTU@M'[7_.R-#0.S`/&7>L+"`&`%#JPG3!C@ 313 M*X'74L<)"!UY+9ZU<(!!!UT#GP1J+^8J"K3%+T$'12ID$T'9[40ZW9.0%9P] 314 M=*"^@%'Y-M+IT0X(Q>_QU&CF<$QBJ[+^7MN`&"_F[][1R@!-U=D^RXT*!PVP 315 M54X`%Y"HW`I.I-[H+?!0`MB<!W)S+`1#%M^ZWZC-@1"=;K-MP.80J`4?:)WH 316 M)X@3!M6LN_![K>$>L=-+"F1^K7X`M``W.!WF!&>.:Z!?UW6ZY!W4S'OUFD(F 317 M9XSNW)C,<4R].=%DA+V@VSPIR`>H"IP"0);;@:@"I.`CXM5+3C?KHNX[@92C 318 M$P[O<N):6`;K:8"[`7_3:CXA#I("?L#-54^`%-"#YPM3NAP>.>S`\G;JD2LV 319 MW<31S.D4#+31[P>\\;9E93G_R/&Y[=OY!#0!(/`)4QPXO=&,PP<.UCRCS`X> 320 MQLV][XZ0N[VVC*$'B1T>ZQX=D6;?BVQ_]E%W$.)H8-Y/!!%[/;VHP51R9#KC 321 M199["QV6ZN9\<N,<"D[3MD>1P\#%OAT[]Q&4&Y_/$?OL3&P,2B.&V#24/-[[ 322 M!WQC%DCN<IDU[)PM*-WA3&L/BTIW>MK>&OUW';%":!Y&E<=[0U53(\I=KM3; 323 MUSVDW.06`JC%(LI5KI'?(()J0>4B=Z3*\F`#6:ZDJS(&G1%F"^Z*1'2-,EM@ 324 M%\QK#S-[8'?U9*%FN"$939:>%0M=5X91P8>B9[-^#$T9N1K#T1[IO5+7>'2$ 325 M>5ON%I*V*"\X]DG:+N;`[,IL0J"^J@=3JI9VI1WYF[1S?`SAL8ZH+Y,''O-M 326 M!WWON:XJ31]!7[IT.]N1&T.;N:3E2O^GU)Q1+PZ`\J`OV+2/]19!WXX?3/4# 327 MLP9L<])*@8=TWI3L^,"QUM\UM@_<(#6B!OQ>RQ<J^)@_N!RYN]<E:3M\MS`Q 328 MJOTXY8E1[<<GF?JS"N@I6(=<?9:J<!.'7&DS^5FTM*5R2)>V5#])6/XD89\% 329 M[+-X:6//`J9MY5/&M+'R6<S*)S'+OQ&SWTC9;V1,6PLITY;R)T&KOQ&T\AM! 330 MR[\1M,]R]DG*VB<AJY^$K'P6LOQ)R/JSC+5G$:LF8J[5CA#B&">S?\RGS(#Z 331 M+TJQ_T:._4^_S0L8ZWQZ7GSZ/[^_[4]6?__[W_Y5*OKQ]>]O/_[Z_K=?WNQ. 332 M^?%__M=?WW_\[Z]_?_W7MU_?_OY+5))8R>/]];_]]>V__/CKW[0O_HGK7Z+M 333 MF9_:+CLG8=;?S4GX1V_S!QD)__"1:*K]Y9_^Z3'J<_QN-L*<OYN-,(\\AG5] 334 M92-\92-\92,<ML$_D8VPTK&"\E<VPLM7-L*_>S;"*H<,UC^T*QX9>,(2#H`# 335 M0#?0;`%-+@#CWQ(0F!CPEID[X,D&'P7I".\?Y=^P)N]Y.]ZB?^44?.44_),Y 336 M!6L<@C._<@J^<@I"=OXM<PK6QLJR;_VAEJV/#@X\?#.#A'5D#K0WI<&3VS^- 337 M:E[FH[\9ASU7F%-FV2KW:BEO7.G_XTWIZ$@F$!M7C5)-62AF_TYU`Y`J/A[S 338 M35GFS!7H\H1:EP7M%#-AF21@QK+2L-8;F>6:$2"F.\U')!<T>8C&Z)WN&;-X 339 M-3-`?@8C,</OH>8E&JEJJ?Z@PV'O9"-28T"4-68CHLML#TK?8Z*L,1\24O1] 340 M2'1Q':-2CT%1.IF.BA+P?6!(Z]\CHTOL&)QS;/(>&R7MQ]"T8V3R,3+:K@V- 341 M<=QB>([1<9E*AWSE+\K^%V7_B[+_1=G_^8\H^_DJA\ZH7Y3]+\K^__>4_7RU 342 M8TWT/\1I]Y$03\,6?T\UY_G0O1M'%66XPADQ$!@G8OAH1FH'^%$&O#Z._9WP 343 MI+0F,`N4=CPQ`"24^>ZU9:7)R^_Z8WS`[]F`'=X!2Y(&]@!#?M`>&5S2'@FP 344 ML-X87++>6`*!]^BV>T.PI+V)GK`6ZX6B$W1#D0G[<8L^^`".8S#G%^_^BW?_ 345 M\L6[_^+=GX5?O/LH_>+=?_'NOWCW7[S[+][]S__/\>[S=?A_T_7%N__BW7_Q 346 M[K]X]U^\^R_>_1?O/D#(_XV\^YR.R%K*?^P1%'R(H]=`F:9+L#!>V3[`WRM+ 347 M8Y;]XR96;&;(DK':J_>F(4MPGIN(M44M^T>^MS09M&2P-K5F@=Q*3V!/%K1L 348 MB.OB08U;=ORXUMH9MV1P4NJ9&KE$:!*G?'<+72(^6<3:M,AE@T^/O=7P)4C; 349 M2_:K1TI*!>Z]3X8RR2RN,RT+9B*VV7,:%M"L'_KMH<N"FHUA88S/6U/JMVPV 350 M-3V2!G]QUC]H[6^,<(I5V(9&/Q'EO,L//?P)7C3&-ED0M'[H6",6W8SIW>I$ 351 MA]_`-<:7[4"/S^`IPZ!,B+X6LIX1`$1LO2JU6JLI4@TXW-:]ZRU_3'Q.1KHC 352 M`S#O],#V-XSKM!FO;YBAJ:'JSLW"9I[Q79MULO]]UN>>\G0=$ZZT<9OR&QGJ 353 M,>.:9+&GG%[?/>&:%^!Q>K#-]X0S=>*8\+*G^]:.J=;D`IUJXY'[7"M=/>;Z 354 MQMR+/==,[XBIOL<LWRS=0`/9I)''+).5OF>9.19[EIG*$9-\*\<$6\J"SC"I 355 MZ#;!-WJT]_PB1</GEZ??Z-QZIW1R25VWV66VA<WN+2;6UW_Y"]G8O_SZ^NO_ 356 3^.5;^M-__`\__"]`&]JY]M`````` 361 357 ` 362 358 end -
Tst/Long/gcdp_l.stat
r3aa7f9 r6dffa9 1 1 >> tst_memory_0 :: 13 14101593:3132- 13843 :3-1-3:ix86-Linux:mamawutz:3330242 1 >> tst_memory_1 :: 13 14101593:3132- 13843 :3-1-3:ix86-Linux:mamawutz:7968403 1 >> tst_memory_2 :: 13 14101593:3132- 13843 :3-1-3:ix86-Linux:mamawutz:39753524 1 >> tst_timer_1 :: 13 14101593:3132- 13843 :3-1-3:ix86-Linux:mamawutz:581 1 >> tst_memory_0 :: 1346936518:3150:3-1-5:ix86-Linux:mamawutz:332936 2 1 >> tst_memory_1 :: 1346936518:3150:3-1-5:ix86-Linux:mamawutz:2369728 3 1 >> tst_memory_2 :: 1346936518:3150:3-1-5:ix86-Linux:mamawutz:4499664 4 1 >> tst_timer_1 :: 1346936518:3150:3-1-5:ix86-Linux:mamawutz:63 -
Tst/Short.lst
r8181f5 r6dffa9 292 292 Short/ZidealAdd_s.tst 293 293 Short/sba_s.tst 294 Short/countedref_s.tst -
Tst/Short/factorizeQ_s.res.gz.uu
r3aa7f9 r6dffa9 1 1 begin 644 factorizeQ_s.res.gz 2 M'XL("!]4&E```V9A8W1O<FEZ95%?<RYR97,`75++:L,P$+S[*X;0@]48)9*= 3 M])%*A])+H!1">@M.2-/8"(P=+#FE+?WW2G:02B_2/F9G9U=:OSXM7P`PB>?E 4 M(T9&&UJIM]$B6E\R7,(&=ZI6)B:+R-V0$L7^8)I6?1U7.TWKXP?59F]\42KA 5 M[8SBU#8'F*,V0Y5&7"EM4"4X-=4G"N+!,XIO[\RI/7I$*<""I%L7+YH6L:H- 6 ME,M!X4%`6SV6>\-R8B/CL>=E4U?BF1EW+AQM>=WC-RK?5AON;N(;L<S!?KS; 7 MZRDA!(J`Z<54WN>VDZ_@+.R!VYZ3B6DILO3.!U.*5M4EVI68)G&7G$GR?@ID 8 MF;QL"`+==9R>QXQL><C/)(9-BO`@<1$FX'/Y;^^)R[+(CGP?6>$[:P@V6#P7 9 HW6"EN7"M(AOJ42QA"?><-W^&LM.[W^$>O],Q(XNKZ!<3F14Y4P(````` 2 M'XL("""V2%```V9A8W1O<FEZ95%?<RYR97,`[5??;]HP$'[GKSA->TC(C_K. 3 M9R=9ESQ,>ZDT3:JZMPJJP@I$0H!(Z+1-^]]G$^H`*7NHJE65*@2Q/W\^W]UG 4 MY_#5M\\77P$`"_AR\0G>U54=S\O1N_/>U6Z$"C#@3;DH:\\_[]DG%`5,;L?U 5 M<EW^NKN\J>+%W8^XJF]K-TD6X-H<PVJ]'$-]5]7-K`J\>5G5,`]AM9S_A(GO 6 MR"J&WZZC8_.S94QSP-:EU.*3Y1J\<E%#:<>@A(\Y5,8?8_L:![Y!@L#916&G 7 M.,M(M@O6[+2_Y5^7@^'\FNS3=PLA6]H?U]WZ,X4\ATG+V3HS=WTR*[D9A&T> 8 MR*QY=E:O8V"9.5#&L"X74UA?YB+T-N&]'WY?M<:XV&4(<MCT/7D?H#^D=EP5 9 MT&0R;P7Q)FT$I(NCO(=V%'LFY`\]X_B-:>38M&B0;YJ6'.1VJ9Z!MBP,,21G 10 M,]D+*G5!<>K`["$HX[4G0KB=A3`RWVHF_!"\\8Q"&,_0`FA;%IVW44NQBWIE 11 MIGNCV9#]OB$-.?`025+_=C:D_LC^&(M#BH[0B#C3PO1M3S:<X``+D%"GMLD/ 12 M)F0B=;]=BP)/H199JK0UW-`X0B$)LP2I!2DX($:89!))LUW,K#Z:-5,#J5)- 13 MBM)#G+I\XZI$K20>!\H1)TIHC9T1$Y[$3(A4B+TTH$+C56.Y304'E#(R'^,V 14 M!T2I,=&F228"E5"ZS11'FCD3;$AM]HQ%85;?8;[??XIJP2.J1?]+M>"$:M$) 15 MU;K\YU(M.*%:=$*UX&55,PI)ZIZU/2Q`5(H.54,2SW36.$%.T\Y9XXPI2W3W 16 MK!WQC0(B5<INJXYJ2C"KE+BK&F8J$[IQXN&LL>"$CE-ASIK&-$F2SL8V6YF% 17 M8MY334I-F!RHIA*M$Y7R@6J<D1":=ZJU;TU\I!:`M]IC4*<8K/Y5#-ZVPZO; 18 M#JY\OY7-5U<V&^WX2=J]%<^7+9X'_Y3-Q[UR]RY"TMPF[$W*7I0VE8?^^?O> 19 )7QE2;8Y_#0`` 10 20 ` 11 21 end -
Tst/Short/factorizeQ_s.stat
r3aa7f9 r6dffa9 1 1 >> tst_memory_0 :: 134 3902751:3150:3-1-5:ix86-Linux:mamawutz:1738402 1 >> tst_memory_1 :: 134 3902751:3150:3-1-5:ix86-Linux:mamawutz:22402843 1 >> tst_memory_2 :: 134 3902751:3150:3-1-5:ix86-Linux:mamawutz:22730684 1 >> tst_timer_1 :: 134 3902751:3150:3-1-5:ix86-Linux:mamawutz:31 1 >> tst_memory_0 :: 1346942495:3150:3-1-5:ix86-Linux:mamawutz:1005280 2 1 >> tst_memory_1 :: 1346942495:3150:3-1-5:ix86-Linux:mamawutz:2240284 3 1 >> tst_memory_2 :: 1346942495:3150:3-1-5:ix86-Linux:mamawutz:2273068 4 1 >> tst_timer_1 :: 1346942495:3150:3-1-5:ix86-Linux:mamawutz:188 -
Tst/Short/factorizeQ_s.tst
r3aa7f9 r6dffa9 19 19 testfactors (l,f); 20 20 21 //tr. 448 22 ring r = (0, ah, bh, sh0), (ch2, ch1, sh1, ch0), lp; 23 poly p= ((bh^4)*ch0^4+(11232*ah^2*bh^2*sh0^2-11232*ah^2*bh^2-24960*ah*bh^3*sh0^2+24960*ah*bh^3+12168*bh^4*sh0^2-13736*bh^4)*ch0^2+(51609856*ah^4*sh0^4-103219712*ah^4*sh0^2+51609856*ah^4-179312640*ah^3*bh*sh0^4+358625280*ah^3*bh*sh0^2-179312640*ah^3*bh+243165312*ah^2*bh^2*sh0^4-475066112*ah^2*bh^2*sh0^2+231900800*ah^2*bh^2-151856640*ah*bh^3*sh0^4+284144640*ah*bh^3*sh0^2-132288000*ah*bh^3+37015056*bh^4*sh0^4-64490400*bh^4*sh0^2+28090000*bh^4))*((bh^4)*ch0^4+(11232*ah^2*bh^2*sh0^2-11232*ah^2*bh^2+24960*ah*bh^3*sh0^2-24960*ah*bh^3+12168*bh^4*sh0^2-13736*bh^4)*ch0^2+(51609856*ah^4*sh0^4-103219712*ah^4*sh0^2+51609856*ah^4+179312640*ah^3*bh*sh0^4-358625280*ah^3*bh*sh0^2+179312640*ah^3*bh+243165312*ah^2*bh^2*sh0^4-475066112*ah^2*bh^2*sh0^2+231900800*ah^2*bh^2+151856640*ah*bh^3*sh0^4-284144640*ah*bh^3*sh0^2+132288000*ah*bh^3+37015056*bh^4*sh0^4-64490400*bh^4*sh0^2+28090000*bh^4))*((bh^4)*ch0^4+(11232*ah^2*bh^2*sh0^2-11232*ah^2*bh^2-24320*ah*bh^3*sh0^2+24320*ah*bh^3+11552*bh^4*sh0^2-13120*bh^4)*ch0^2+(51609856*ah^4*sh0^4-103219712*ah^4*sh0^2+51609856*ah^4-174714880*ah^3*bh*sh0^4+349429760*ah^3*bh*sh0^2-174714880*ah^3*bh+230855168*ah^2*bh^2*sh0^4-450445824*ah^2*bh^2*sh0^2+219590656*ah^2*bh^2-140472320*ah*bh^3*sh0^4+261877760*ah*bh^3*sh0^2-121405440*ah*bh^3+33362176*bh^4*sh0^4-57667584*bh^4*sh0^2+24920064*bh^4)); 24 list l= factorize (p); 25 testfactors (l,p); 26 21 27 tst_status(1);$ -
Tst/Short/gcdp_s.res.gz.uu
r3aa7f9 r6dffa9 1 1 begin 644 gcdp_s.res.gz 2 M'XL("$&94TX``V=C9'!?<RYR97,`W5I;;QNY%7[WKR""`"N-))L\Y/#BP`:V 3 M#;`(T!8+9-N'/F0ST<4:6)8,:9QH6_2_]_`R)$<C.8J3AZ(((G'(P\-SX\=O 4 M*+__[>V[OQ%"V"VYNB*OW\VNR=UT]OC[[K+9-80!<$:`4C-A;$*!,'K-X!K@ 5 MGV19K=?S'7E]\3YH@$L2V_P2M<4G89]RM1.R6VZV#6GFNV9'%INM'233:C5] 6 M6E5-O5GOR,-F1AXOHXJRHU`ZA3^O5N1I77^NMG75S,EZLYXTV_IS7:W(?%\] 7 M/*[0O.GF84X6V\V#7>'O*/SKY6*^CXJ44^37=Z,_KQZ7E15)2^O.TL;-^&TY 8 M;]<@]9HX$S[9]3Y6/XW)QZG]F./'Y>4ENM6:\/%IW=3-:CZ#@;QZO&+#GUJU 9 MC#JUJ&K7S/[ZM&K0E%^FL\MZ'>U@++>#@;=C0]YNKF-G)^S,AWU#'IR^$*5> 10 MH+_4S9(\5ENTLIEO=W%V)^),IN0R#-I?WOV)O,),7J[J3Z_>Q!%]2[#S]WI= 11 M-X/AFPO[36YOV\ROYU\N=TW51'$3Q._6F^U\\.K/_WA/WKTEY/HE9?@*UT-O 12 MD[YK\EWZ6B.!WD;/H9,"\"F8D,73>NIB&7,%G42`2,EC!%_*NQD*J%W]@ 13 MQ@=#5/BXK=>-RU2%^9ECF>,W^O10K>I_S6=V)"VE.@JQ6!^WFVFND@S(XV;U 14 M!UF,_?<=&49QK.9_MP\<:Y!XD=D-+C&P,U`XII>#%9BE9V&?VY4&9#8F+!=' 15 MY_X3'U0*(^_L*&Y"&-'I.[)E-QSSPL?[\2QM?T'S&8*E>`JT*:LA\JJOY<TK 16 MTJ^-(V)1);]]=E@D3P1FT\?V9F+*4A3[#V+"0)L26WS"*`6.+9A(8-A(.N1M 17 MR$7JR@(DM"\+BUV'B!9E,&PV271,*+I'V_Z2WK;]G`''(?L51YD?%;SD?J)M 18 MQ5&X[=1BU)VT\YY$6(7AOU9(=(728KE0F?PML5(.M"Y0VD9T+T8NGGL^<M'< 19 MP\C&<G^Q%Q/8\XG!#A'QO%3=E1=^V1<HTIEUIFL=6(^]A9D_DO:69OW02);T 20 M2DA9QL3N3J9:(II\8X%)3,%=G,(GG`MFY4:'<F7/ZCNT>`\3C(7_;"5E9KER 21 M!C$&TMHA,;),6OTEQI9+$ZST?7RDC;1KIT6U-8Y1Z20U>B&5]4*-O#9M-=E> 22 M;>=CWE#2^3M273WFN/%HA:248F(QK[X))WJ#)I6!O&+..668M0,/""&H='8J 23 M**4S$Z@!:^D$F`G&0LF#VT)RY_9$L9)V[%7@DL*$YM9=AB*465D&(U9BO&R3 24 MH>-:VJPQBG$U@CLKC%9V6-L`NYPJU,.5BY>45(20<>-+A$,PPG"A78%XFY,M 25 M_'CL+F+"589SJG-J*=E!;+@9>)BLAAXIR4.]MNAV4V'RM.*BJ#!W%58?8YJI 26 MHAJQB.RJ<WPIG9!=F:/(WEOM-+KW1%O5FMY^500WZM?=2.*0@J7YRPX%+7J' 27 M@LY`4ONH+^KMKAE[U-@L2(-$=,MZD*%5#U$/D%SK,Y!<FS.0W&2;Q["32%ZT 28 M"%RT$%SL6SQR(%Q8%+9]*!KUP4E`?YD^GMDJSL%UTT?(([AN,G0TZDQ<-_J; 29 M<=V8LW`=YY_$]6+??K6RZ4QB%+X'V5'DAR`[H^)99"\R$"\R;#_L;[65F8-^ 30 M%ZTW7\;I);%>?]ZL/EM`L-NI6MW-/VVK>AI?Z^)D=^X-@#&A+!B$N*0GQ`DF 31 M`!_`/8"2B-J5;QO,;M;R$_@P^>Q.Q8%DLM6&T2^Y#-KDJ,1UG;+0[QJJ]+CD 32 M3!%*!^DR3/5-0W7I6HAU/)J**8[RF`I%2VAME4K1T,)*;&T=`9Z$K7>XYXR7 33 MYR/)M3QPYOC1/+"'6RDK/BPP9P,7NHJ[H%58DYQ#-0'%Q-!N[H%K.EEN4SRP 34 MD@C#**DQP96'82>*S\Q*A=590B3&F,\9X-;REC,V*K5I@XRGK))QB&+.%--A 35 MS%B`X6',C("KX+(9E9X=C``HR"".AS.>_FU(\4EJFQS7!J&4]BTM)`TSE'6= 36 MA@G(*S0-25,XF7D)=-+(5!$<E(@E@5Q#AY+@C+FSWVY9H#(K3RY,K`I.C3*A 37 M++1DKC-EC3F",M`NLVUT$)-4"H^1I8G1`2T5Q/"(LN0A.FB"]O$I45D,#Y9? 38 M"H[@FH;@(*`X!F-;-&XF=-UHX#$Z4H,(P<%**7W$#%<I.(!\C,;@6)0V(3H` 39 M4CBRE#E[G`$-,(6"NZ)DND)@55Q6Z)NR1:FP*!54"#%HI[8E"[9DM=041R6. 40 M,HPPUBQN5HK#!DI338RM]@L[V2(3J[PH8C2VP8VU)HFL;G/*Q5B7<O&6MC3# 41 MSHLR8ZHS*]$IK(ZC=.I0TS-TJB?:JH9(ITZ+9&>,O3<)_&APSN&74@;\D"$Q 42 MR$+F[U:^PI#(8+>J[Y8-:GG8S.I%/9\-HX+^>VB7-3%01UE3T73H`/KR==Z$ 43 MW#Z9;N]>#GG3E57JD4VX\\U"G(4^1W1.<AQD)S^4,R'B9';R(YSIJCED38SW 44 M#_`^:V(\.YBY/(\U,:Z^E34QKL]C3?S$"^4QUB2R,T:X>T'R94[N-F2S]E>J 45 M;75%%D'6U4-RX\3%5=Q!U7@ZG@_':,-R?#\\<V?V)\7E<.O<UZL5"J<^T=NW 46 MSRC(<B5DNX-_Q<\DHMKMV>W6V4Q$(3?IQF-A,46P7N#_>\Q:Z"GFQ0*?^6B* 47 M([Q8%O>3N9-96JF$!NZFR^N:HIR=M<0,X7RKLUAV9`_WA)TW]M-1"J<M+A91 48 M."OXDD>#IQ^$,[,L['(+:PYN$^O`W)L6GIRI'\";X@TI[C-31#1[XA79J5Z- 49 M]1J2$O0<6B4'OA^^E73]R?98*3-G5'1FHGWT18BV',6.$/0/HNWB+J+WEJW$ 50 MCIB0<M0F$EW!V<Y;RPYC>D,Z["*3K->OXZ1%YIB.T6EE58@O;O#2&(T],L45 51 MXZRPIVPM0IWW$^T="V7`8VY$7!5]"X[Q(&'9;?35JQ(V_B'#/N.A`IA,CCD% 52 M-@BN\'B86G8R?@@KW60MEH$83(?%_<%3T"`SL)'YCQ!,0H<8B'!C/6C&^V%. 53 M#"3OS!*'OV+M_"]46T&J[1S/S,TN_&:UY2=^(6+2'[?39;6^0YAK-MZ&^%M8 54 M6EMVUE:)E$A]%`0/O7@&^GJB4;6Y_9I(=NO'[*W?RTB)O=4[("6*9XK%=Y(2 55 M>_?V/"E1\C0I:2Z:**;.("4J`VME?LRU/-/]VX@77<LSG=%(#4>H2-&G(KK/ 56 M\X]0$9WQ2%V>247LE=PW4A&MSJ,BA]=S37'R:I[IC$@:^NU4Q%[:/;<+'2D8 57 MGT-$3DZ)2T%+0T3JX[V=>G)ZEB53'B4A1AXE(49E,_6/(R'N0NX\$@*]2[D# 58 M$N*63CP$LHLY<!=S/Y*'@+NK^TX>`KV+ND->-;V81MDR<T?^KS,1H.K_CHD` 59 MU<^GRR"UGR(#$:7B4[B_L&U/1N`^Z@A_M6'_DN-I-V##-Z\O_@M3I="Z120` 60 !```` 2 M'XL("+N>2%```V=C9'!?<RYR97,`W5I;C]NX%7Z?7T$,`JPM6Q[>Q$N",;!M 3 M@")`6RR0;1^S46QY+(S'&MB:Q-MB__L>7D12ECWQ)'DHBD%LBCP\/#=^_$3G 4 M_:]OW_T3(43FZ.8&O7JW?'7UWG?1&0IM-H/A\,3-$[I;+!]_V\_:?8MRM%\W 5 MNQ:UU;[=HU6S,X-H46X63YNRK9OM'CTT2_0X"RJ*GD)A%?Z\V:"G;?VYW-5E 6 M6Z%ML\W;7?VY+C>H.I0/CYMJCQ;-0X56N^;!K/`O$/YEMJH.09&TBMSZ=O3G 7 MS>.Z-")Q:=5;6ML9OZZK;@U4;Y$UX9-9[V/YTQ1]7)B/"CYFLQFXU9GP\6G; 8 MUNVF6M*1N'F\(>.?.K4$6[6@:M\N__&T:<&4ORV6LWH;["`DM8-09T>#WC:O 9 M0V<O[,2%O4$/5I^/TB#07^IVC1[+'5C95KM]F-V+.!$QN02"]O=W?T'7D,G9 10 MIOYT_2:,J#F"SM_J;=V.QF^NS#>:S[O,;ZLOLWU;MD%<>_&[;;.K1M=__?=[ 11 M].XM0J]M75V#`C`_"KQ&?8%.#<7S8!OM!8FZ(.5H];1=6&]#-&DO5)1']VC/ 12 M<>I*;5]#JNO5[Y"3T1@4/N[J;6MC64($*RA$^`8C'\I-_9]J:4;B4K*G$,KI 13 M<=<L4I5HA!Z;S>]H-77?=V@<Q*'>_ML],*@2Y$26M[#$R,P`X9``1HW`,CYS 14 M\]RM-$++*2*I.#CW1WB0,8RL5_-,^S""TW=H1VX9Q9A-#]-EW*`<IS,XB?'D 15 M8%.2970]U/+F&@V3?4(LJ&3S9X=Y](1#-EUL;W-=%#P[?.`YH4H7T&(YP9@R 16 M:-%<4`*-J$/,?2YB5Q(@KEQ9&'0YQIP@`V$S2<)3A,$]W/47>-[U,T(9#)FO 17 M,$K<*&<%<Q--*XS2>:\6@^ZHG0TD_"H$_CHAWA>*BZ5"1?2W@$HYTKH":1/1 18 M`Y_8>![8Q$;S0"<FEH>K`\_I@>4:.GA`W$+V5UZY9;]!D4JLTWWKJ/'869CX 19 M(_!@:3(,C2!1KZ`QRY#8_=E4"T"3%Q:8@!3<A2DL9XP3(S<YEBL&5M^!Q0>: 20 M0RS<9R<I$LNE-8@0*HP=`B)+A-%?0&R9T-Y*U\<F2@NS=EQ4&>,(%E92@1=" 21 M&B_DQ&E31I/I568^Y`TDK;\3V=>C3QL/5@B,,206\NJ:]$ROUR03D)?$.B<U 22 M,7;HG'".A;53TD)8,RG6U%B:4Z*]L;1@WFTNF'4[EZ3`/7LEM4DA7#'C+@$1 23 M3(PLH1-20+Q,DX#C2IBL$0QQU9Q9*[229EB9`-N<2M##I(V7$)C[D#'M2H11 24 M;X1F7-D"<39'6]CIV%V%A,L$YV3OU)*BA]CT=N1@LAP[I$0/]=:@VVT)R5.2 25 M\:R$W)50?80H(K-R0@*RR][Q)55$=JE/(OM@M?/H/A#M5"L\_ZH(;-2ONQ'% 26 M:0R68M]V*"@^.!14`I+*17U5[_;MU*%<(M4,4=&4"&D@-$/4)RI2Y`<J4O 27 M0'*=;!Y-SB)YUB%PUD%P=NCPR()P9E#8](%HT$?/`OJWZ6.)K?P27-=#A#R! 28 MZSI!1RTOQ'6M7HSK6E^$ZS#_+*YGA^ZKDXUG$L'T>Y`=1'X(LA/,GT7V+`'Q 29 M+,'VX_Y.6Y$XZ';1MODRC:]Q]?9SL_EL`,%LIW)S5WW:E?4BO'B%R?;<&U%" 30 MN#1@X.,2GP`G"*?P0.T#E0)0NW1M#=E-6FX"&T>?[:DX$D1TVB#Z!1->FY@4 31 ML*Y5YOMM0Q8.EZPI7"HO7?BIKJFQ*FP+L(X%4R'%01Y2(7%!.UN%E-BWH!([ 32 M6R<43L+..]ASVLFSB6!*'#ES^F@>F<.M$"4;9Y"SD0U=R6S02JA)QFB94TGX 33 MV&SND6U:6692/#*2`,,@J2#!I8-A*PK/Q$CYU4E$)$*(RQF%K>4L)V12*-T% 34 M&4Y9*<(0AIQ)HOR8-@##_)B>4":]RWI2.'8PH113X<7A<(;3OPLI/`EEDF/; 35 ME$NI7$MQ@?T,:5S'?@+P"H5]TB1,)DX"G-0B5@2CDH>2`*ZA?$DP0NS9;[8L 36 MQ2(I3\9UJ`J&M=2^+)0@MC-FC5B",E(VLUUT`)-D#(\6A0[1H4I(&L+#BX+Y 37 MZ(`)RL6G`&4A/%!^,3B<*>R#`X!B&8QIX;"9P'6M*`O1$8IR'QRHE,)%3#,9 38 M@T.!C^$0'(/2VD>'4L$M64J</<V`1I!"SFQ1$E4"L$HF2O!-FJ*44)22E@`Q 39 M8*<R)4M-R2JA,(P*&"408:A9V*P8AC4M=)EK4^U79K)!)E(Z4<!H:%,[UIG$ 40 MD[I-*1<A?<K%.MK2CGLORH3(WJQ(IZ`Z3M*I8TW/T*F!:*>:!CIU7B0Y8\R] 41 MB>='HTL.OY@RRHX9$J%)R-S=RE<8$AKM-_7=N@4M#\VR7M75<AP4#-]#^ZR) 42 M4'F2-65MCPZ`+U_G3<#MH^GF[N68-]T8I0[9N#W?#,09Z+-$YRS'`7;R0SD3 43 M($YB)SO!F6[:8]9$V/``'[(FPI*#F8G+6!-A\J6LB3!U&6MB9UXH3[$FGIPQ 44 MW-X+HB\5NFM0LW67GEUU!1:!MN5#=./,Q5780>5T,:W&4[!A/;T?7[@SAY/" 45 M<K!U[NO-!H1C'Q_LVV<4)+GBHMO!O\!G%)'=]NQWJV0FH)"==.NP,%L`6*_@ 46 MWSUDS?=D5;:"9S99P`C+UME]7EF9M9&*:&!ONIRN!<B966O($,PW.K-U3_9X 47 M3YAY4S<=I%;PUTDFU5ZP8.WB`[<V%IE9:V5L@3UBK*^<7?[)VOF!.CN<%=E] 48 M8@</-N=.D9GJU!B7:50";M-.R9'CQZ\D?6>2#5:(Q!D9G,F5"SWWH1:3T.$C 49 M_H%W7<R&\]Y0E=`1LE%,NBR"*S#;>FNH8<BMSX59)$]ZW3I6FB>.J1"=3E;Z 50 M^,+N+K16T"-B7"'.$GJ*SB+0>9\KYYBO`19RP\.JX)MWC'D)0VV#KTX5-_'W 51 M&789]Q5`1'3,*C!!L%7'_-2BE_%C3#FJO+5G!8MQ=G_TY#6(!&E$^@L$$;3' 52 M"KB_KAZUT\,X906"]6;QXQ^9]NX'I!U'Y:Z"`[/9^Y^4=NS,#SA$N+-VL2ZW 53 M=X!Q;>-L"#]5Q;5%;VT9&8E0)Q'PV(MG<&\@&E3K^==$DBL_8J[\OHV1F"N] 54 M(T8B6:*8?R<C,1=OSS,2*<XSDO:J#6+R`D8B$Z26^L?<R1,UO(KXICMYHA(. 55 MJ>@)'I(->8@:DOP3/$0E)%(5%_(0<Q_W0AZBY&4\Y/ANKLW.WLL3E;!(C5_. 56 M0\R-W7.[T#*"Z24LY.R4L!3M.`B/?6RP4\].3[*DBY,,1(N3#$3+9*;Z<0S$ 57 MWL9=QD#HX$;N'`.AR7T<M?=Q/Y*!4'M%]YT,A`[NY_K.Y'QQM0BR1>*.^%_G 58 M(!3+_SL.0K%Z-ET+H!V.==#[_D,WW_]7"O/?*Y[V(S)^\^KJ3VAA:+ZK(P`` 61 59 ` 62 60 end -
Tst/Short/gcdp_s.stat
r3aa7f9 r6dffa9 1 1 >> tst_memory_0 :: 13 14101568:3132- 13843 :3-1-3:ix86-Linux:mamawutz:3091762 1 >> tst_memory_1 :: 13 14101568:3132- 13843 :3-1-3:ix86-Linux:mamawutz:7966883 1 >> tst_memory_2 :: 13 14101568:3132- 13843 :3-1-3:ix86-Linux:mamawutz:8294724 1 >> tst_timer_1 :: 13 14101568:3132- 13843 :3-1-3:ix86-Linux:mamawutz:81 1 >> tst_memory_0 :: 1346936506:3150:3-1-5:ix86-Linux:mamawutz:309112 2 1 >> tst_memory_1 :: 1346936506:3150:3-1-5:ix86-Linux:mamawutz:2369600 3 1 >> tst_memory_2 :: 1346936506:3150:3-1-5:ix86-Linux:mamawutz:2402384 4 1 >> tst_timer_1 :: 1346936506:3150:3-1-5:ix86-Linux:mamawutz:7 -
Tst/Short/ok_s.lst
r8181f5 r6dffa9 109 109 bug_tr380 110 110 brnoeth_s 111 countedref_s 111 112 cyc5_lp 112 113 bug_sres -
configure.ac
r3aa7f9 r6dffa9 125 125 fi 126 126 127 AC_ARG_ENABLE(debug, AS_HELP_STRING([-- disable-debug], [do NOTbuild the debugging version of the libraries]),127 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [build the debugging version of the libraries]), 128 128 [if test "x$enableval" = "xyes"; then 129 129 ENABLE_DEBUG=yes -
factory/algext.cc
r3aa7f9 r6dffa9 644 644 if(G.inCoeffDomain()) 645 645 return CanonicalForm(1); 646 return G/Lc(G); // return monic G 646 CanonicalForm lcinv= 1/Lc (G); 647 return G*lcinv; // return monic G 647 648 } 648 649 if(G.isZero()) // F is non-zero … … 650 651 if(F.inCoeffDomain()) 651 652 return CanonicalForm(1); 652 return F/Lc(F); // return monic F 653 CanonicalForm lcinv= 1/Lc (F); 654 return F*lcinv; // return monic F 653 655 } 654 656 if(F.inCoeffDomain() || G.inCoeffDomain()) -
factory/canonicalform.cc
r3aa7f9 r6dffa9 478 478 // have a taildegree larger than zero. 479 479 // 480 // tailcoeff( v ) returns the tail coefficient of CO where CO is 481 // considered an univariate polynomial in the polynomial variable 482 // v. 483 // Note: If v is less than the main variable of CO we have to 484 // swap variables which may be quite expensive. 485 // 480 486 // See also: InternalCF::tailcoeff(), InternalCF::tailcoeff(), 481 487 // InternalPoly::tailcoeff(), InternalPoly::taildegree, … … 490 496 else 491 497 return value->tailcoeff(); 498 } 499 500 CanonicalForm 501 CanonicalForm::tailcoeff (const Variable& v) const 502 { 503 if ( is_imm( value ) || value->inCoeffDomain() ) 504 return *this; 505 506 Variable x = value->variable(); 507 if ( v > x ) 508 return *this; 509 else if ( v == x ) 510 return value->tailcoeff(); 511 else { 512 CanonicalForm f = swapvar( *this, v, x ); 513 if ( f.mvar() == x ) 514 return swapvar( f.value->tailcoeff(), v, x ); 515 else 516 // v did not occur in f 517 return *this; 518 } 492 519 } 493 520 -
factory/canonicalform.h
r3aa7f9 r6dffa9 112 112 113 113 CanonicalForm tailcoeff () const; 114 CanonicalForm tailcoeff ( const Variable & v ) const; 114 115 int taildegree () const; 115 116 … … 295 296 tailcoeff ( const CanonicalForm & f ) { return f.tailcoeff(); } 296 297 298 inline CanonicalForm 299 tailcoeff (const CanonicalForm& f, const Variable& v) { return f.tailcoeff(v); } 300 297 301 inline int 298 302 level ( const CanonicalForm & f ) { return f.level(); } -
factory/cf_factor.cc
r3aa7f9 r6dffa9 127 127 if ( f.isImm() ) 128 128 { 129 printf("+%d",f.intval()); 129 if (CFFactory::gettype()==GaloisFieldDomain) 130 { 131 int a= imm2int (f.getval()); 132 if ( a == gf_q ) 133 printf ("+%d", a); 134 else if ( a == 0 ) 135 printf ("+1"); 136 else if ( a == 1 ) 137 printf ("+%c",gf_name); 138 else 139 { 140 printf ("+%c",gf_name); 141 printf ("^%d",a); 142 } 143 } 144 else 145 printf("+%ld",f.intval()); 130 146 } 131 147 else … … 377 393 if ( f.inCoeffDomain() ) 378 394 return CFFList( f ); 379 int mv=f.level();380 int org_v=mv;381 395 //out_cf("factorize:",f,"==================================\n"); 382 396 if (! f.isUnivariate() ) … … 409 423 if(isOn(SW_USE_NTL_SORT)) Unhomoglist.sort(cmpCF); 410 424 return Unhomoglist; 411 }412 mv=find_mvar(f);413 if ( getCharacteristic() == 0 )414 {415 if (mv!=f.level())416 {417 swapvar(f,Variable(mv),f.mvar());418 }419 }420 else421 {422 if (mv!=1)423 {424 swapvar(f,Variable(mv),Variable(1));425 org_v=1;426 }427 425 } 428 426 } … … 678 676 } 679 677 680 if ((mv!=org_v) && (! f.isUnivariate() ))681 {682 CFFListIterator J=F;683 for ( ; J.hasItem(); J++)684 {685 swapvar(J.getItem().factor(),Variable(mv),Variable(org_v));686 }687 swapvar(f,Variable(mv),Variable(org_v));688 }689 678 //out_cff(F); 690 679 if(isOn(SW_USE_NTL_SORT)) F.sort(cmpCF); -
factory/cf_gcd.cc
r3aa7f9 r6dffa9 36 36 37 37 static CanonicalForm cf_content ( const CanonicalForm &, const CanonicalForm & ); 38 static void cf_prepgcd( const CanonicalForm &, const CanonicalForm &, int &, int &, int & );39 38 40 39 void out_cf(const char *s1,const CanonicalForm &f,const char *s2); … … 595 594 pi = pi1; pi1 = pi2; 596 595 maxNumVars= tmax (getNumVars (pi), getNumVars (pi1)); 596 if (!(pi1.isUnivariate()) && (size (pi1)/maxNumVars > 500)) 597 { 598 On (SW_USE_FF_MOD_GCD); 599 C *= gcd (oldPi, oldPi1); 600 Off (SW_USE_FF_MOD_GCD); 601 return C; 602 } 597 603 if ( degree( pi1, v ) > 0 ) 598 604 { … … 697 703 { 698 704 CanonicalForm fc, gc, d1; 699 int mp, cc, p1, pe;700 mp = f.level()+1;701 705 bool fc_isUnivariate=f.isUnivariate(); 702 706 bool gc_isUnivariate=g.isUnivariate(); 703 707 bool fc_and_gc_Univariate=fc_isUnivariate && gc_isUnivariate; 704 cf_prepgcd( f, g, cc, p1, pe);705 if ( cc != 0 )706 {707 if ( cc > 0 )708 {709 fc = replacevar( f, Variable(cc), Variable(mp) );710 gc = g;711 }712 else713 {714 fc = replacevar( g, Variable(-cc), Variable(mp) );715 gc = f;716 }717 return cf_content( fc, gc );718 }719 // now each appearing variable is in f and g720 708 fc = f; 721 709 gc = g; … … 739 727 else 740 728 #endif 741 if ( p1 == fc.level() ) 742 fc = gcd_poly_p( fc, gc ); 743 else 744 { 745 fc = replacevar( fc, Variable(p1), Variable(mp) ); 746 gc = replacevar( gc, Variable(p1), Variable(mp) ); 747 fc = replacevar( gcd_poly_p( fc, gc ), Variable(mp), Variable(p1) ); 748 } 729 fc = gcd_poly_p( fc, gc ); 749 730 } 750 731 else if (!fc_and_gc_Univariate) 751 732 { 752 733 if ( isOn( SW_USE_EZGCD ) ) 753 {754 734 fc= ezgcd (fc, gc); 755 /*if ( pe == 1 ) 756 fc = ezgcd( fc, gc ); 757 else if ( pe > 0 )// no variable at position 1 758 { 759 fc = replacevar( fc, Variable(pe), Variable(1) ); 760 gc = replacevar( gc, Variable(pe), Variable(1) ); 761 fc = replacevar( ezgcd( fc, gc ), Variable(1), Variable(pe) ); 762 } 763 else 764 { 765 pe = -pe; 766 fc = swapvar( fc, Variable(pe), Variable(1) ); 767 gc = swapvar( gc, Variable(pe), Variable(1) ); 768 fc = swapvar( ezgcd( fc, gc ), Variable(1), Variable(pe) ); 769 }*/ 770 } 771 else if ( 772 isOn(SW_USE_CHINREM_GCD) 773 && (isPurePoly_m(fc)) && (isPurePoly_m(gc)) 774 ) 775 { 776 #if 0 777 if ( p1 == fc.level() ) 778 fc = chinrem_gcd( fc, gc ); 779 else 780 { 781 fc = replacevar( fc, Variable(p1), Variable(mp) ); 782 gc = replacevar( gc, Variable(p1), Variable(mp) ); 783 fc = replacevar( chinrem_gcd( fc, gc ), Variable(mp), Variable(p1) ); 784 } 785 #else 735 else if (isOn(SW_USE_CHINREM_GCD)) 786 736 fc = chinrem_gcd( fc, gc); 787 #endif788 }789 737 else 790 738 { … … 1100 1048 * p1 in "gcd_poly1" 1101 1049 */ 1102 static1050 /*static 1103 1051 void optvalues ( const int * df, const int * dg, const int n, int & p1, int &pe ) 1104 1052 { … … 1130 1078 i--; 1131 1079 } 1132 } 1080 }*/ 1133 1081 1134 1082 /* 1135 1083 * make some changes of variables, see optvalues 1136 1084 */ 1137 static void1085 /*static void 1138 1086 cf_prepgcd( const CanonicalForm & f, const CanonicalForm & g, int & cc, int & p1, int &pe ) 1139 1087 { … … 1182 1130 delete [] degsf; 1183 1131 delete [] degsg; 1184 } 1132 }*/ 1185 1133 1186 1134 -
factory/cf_gcd_smallp.cc
r3aa7f9 r6dffa9 818 818 CFList u, v; 819 819 DEBOUTLN (cerr, "ppH before mapDown= " << ppH); 820 ppH /= Lc(ppH); 820 821 ppH= mapDown (ppH, prim_elem, im_prim_elem, alpha, u, v); 821 822 ppCoF= mapDown (ppCoF, prim_elem, im_prim_elem, alpha, u, v); 822 823 ppCoF= mapDown (ppCoG, prim_elem, im_prim_elem, alpha, u, v); 823 ppH /= Lc(ppH);824 824 DEBOUTLN (cerr, "ppH after mapDown= " << ppH); 825 825 if (compressConvexDense) -
factory/configure.ac
r3aa7f9 r6dffa9 91 91 enable_debugoutput=no) 92 92 93 AC_ARG_ENABLE(debug, AS_HELP_STRING([-- disable-debug], [do NOTbuild the debugging version of the libraries]),93 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [build the debugging version of the libraries]), 94 94 [if test "x$enableval" = "xyes"; then 95 95 ENABLE_DEBUG=yes -
factory/facAlgExt.cc
r3aa7f9 r6dffa9 154 154 CFListIterator j; 155 155 156 CanonicalForm lcinv; 156 157 for (CFFListIterator i= sqrf; i.hasItem(); i++) 157 158 { … … 159 160 factorsSqrf= AlgExtSqrfFactorize (i.getItem().factor(), alpha); 160 161 for (j= factorsSqrf; j.hasItem(); j++) 161 factors.append (CFFactor (j.getItem()/Lc (j.getItem()), i.getItem().exp())); 162 { 163 lcinv= 1/Lc (j.getItem()); 164 factors.append (CFFactor (j.getItem()*lcinv, i.getItem().exp())); 165 } 162 166 } 163 167 -
factory/facBivar.cc
r3aa7f9 r6dffa9 645 645 } 646 646 647 A *= bCommonDen (A); 647 648 A= A (y + evaluation, y); 648 649 … … 723 724 } 724 725 726 On (SW_RATIONAL); 727 A *= bCommonDen (A); 728 Off (SW_RATIONAL); 729 725 730 factors= factorRecombination (uniFactors, A, MODl, degs, 1, 726 731 uniFactors.length()/2, b); -
factory/facFactorize.cc
r3aa7f9 r6dffa9 2 2 * Computer Algebra System SINGULAR 3 3 \*****************************************************************************/ 4 /** @file facF qFactorize.cc4 /** @file facFactorize.cc 5 5 * 6 6 * multivariate factorization over Q(a) … … 40 40 41 41 bool found= false; 42 bool allZero= true; 43 bool foundZero= false; 42 44 CanonicalForm deriv_x, gcd_deriv; 43 45 CFListIterator iter; … … 50 52 eval.insert (eval.getFirst()( E [i], i)); 51 53 result.append (E[i]); 54 if (!E[i].isZero()) 55 allZero= false; 56 else 57 foundZero= true; 58 if (!allZero && foundZero) 59 { 60 result= CFList(); 61 eval= CFList(); 62 bad= true; 63 foundZero= false; 64 break; 65 } 52 66 if (degree (eval.getFirst(), i - 1) != degree (F, i - 1)) 53 67 { … … 112 126 CFList factors; 113 127 CanonicalForm LCA= LC (A,1); 114 if (!LCA.inCoeffDomain()) 115 { 116 for (int j= 0; j < A.level() - 2; j++) 117 { 118 if (!Aeval[j].isEmpty() && (degree (LCA, j+3) > 0)) 119 { 120 v= Variable (Aeval[j].getFirst().level()); 121 122 factors= ratBiSqrfFactorize (Aeval[j].getFirst(), w); 123 124 if (factors.getFirst().inCoeffDomain()) 125 factors.removeFirst(); 126 127 if (minFactorsLength == 0) 128 minFactorsLength= factors.length(); 129 else 130 minFactorsLength= tmin (minFactorsLength, factors.length()); 131 132 if (factors.length() == 1) 133 { 134 irred= true; 135 return; 136 } 137 sortList (factors, x); 138 Aeval [j]= factors; 139 } 140 else if (!Aeval[j].isEmpty()) 141 { 142 Aeval[j]=CFList(); 143 } 144 } 145 } 146 else 147 { 148 for (int j= 0; j < A.level() - 2; j++) 149 Aeval[j]= CFList(); 128 for (int j= 0; j < A.level() - 2; j++) 129 { 130 if (!Aeval[j].isEmpty()) 131 { 132 v= Variable (Aeval[j].getFirst().level()); 133 134 factors= ratBiSqrfFactorize (Aeval[j].getFirst(), w); 135 if (factors.getFirst().inCoeffDomain()) 136 factors.removeFirst(); 137 138 if (minFactorsLength == 0) 139 minFactorsLength= factors.length(); 140 else 141 minFactorsLength= tmin (minFactorsLength, factors.length()); 142 143 if (factors.length() == 1) 144 { 145 irred= true; 146 return; 147 } 148 sortList (factors, x); 149 Aeval [j]= factors; 150 } 151 else if (!Aeval[j].isEmpty()) 152 Aeval[j]=CFList(); 150 153 } 151 154 } … … 184 187 CanonicalForm test= evalSqrfPartF.getFirst() (evalPoint[0], 2); 185 188 186 if (degree (test) != degree (sqrfPartF, 1) )189 if (degree (test) != degree (sqrfPartF, 1) || test.inCoeffDomain()) 187 190 return 0; 188 191 … … 267 270 } 268 271 269 CFMap N; 270 CanonicalForm F= compress (LCF, N); 272 CFMap N, M; 273 CFArray dummy= CFArray (2); 274 dummy [0]= LCF; 275 dummy [1]= Variable (2); 276 compress (dummy, M, N); 277 CanonicalForm F= M (LCF); 271 278 if (LCF.isUnivariate()) 272 279 { … … 305 312 result.insert (Lc (LCF)); 306 313 else 307 result.append (LCF); 314 { 315 for (CFListIterator i= result; i.hasItem(); i++) 316 i.getItem() *= LCF; 317 result.insert (LCF); 318 } 308 319 return result; 309 320 } … … 311 322 CFList factors= LCFFactors; 312 323 313 CFMap dummy;314 324 for (CFListIterator i= factors; i.hasItem(); i++) 315 i.getItem()= compress (i.getItem(), dummy);325 i.getItem()= M (i.getItem()); 316 326 317 327 CanonicalForm sqrfPartF; … … 319 329 CFList evalSqrfPartF, bufFactors; 320 330 CFArray evalPoint= CFArray (evaluation.length() - 1); 331 CFArray buf= CFArray (evaluation.length()); 332 CFArray swap= CFArray (evaluation.length()); 321 333 CFListIterator iter= evaluation; 322 for (int i= evaluation.length() - 2; i > -1; i--, iter++) 323 evalPoint[i]= iter.getItem(); 334 CanonicalForm vars=getVars (LCF)*Variable (2); 335 for (int i= evaluation.length() +1; i > 1; i--, iter++) 336 { 337 buf[i-2]=iter.getItem(); 338 if (degree (vars, i) > 0) 339 swap[M(Variable (i)).level()-1]=buf[i-2]; 340 } 341 buf= swap; 342 for (int i= 0; i < evaluation.length() - 1; i++) 343 evalPoint[i]= buf[i+1]; 344 324 345 //TODO sqrfPartF einmal berechnen nicht stÀndig 325 346 int pass= testFactors (F, factors, sqrfPartF, … … 333 354 { 334 355 int lev= 0; 335 for (int i= 1; i <= LCF.level(); i++) 336 { 337 if(degree (LCF, i) > 0) 338 { 339 lev= i - 1; 340 break; 341 } 342 } 356 CanonicalForm bufF; 357 CFList bufBufFactors; 343 358 for (int i= 0; i < length; i++) 344 359 { 345 CanonicalForm bufF, swap;346 CFList bufBufFactors;347 CFArray buf;348 360 if (!differentSecondVarLCs [i].isEmpty()) 349 361 { … … 355 367 allConstant= false; 356 368 y= Variable (iter.getItem().level()); 369 lev= M(y).level(); 357 370 } 358 371 } … … 364 377 iter.getItem()= swapvar (iter.getItem(), x, y); 365 378 bufF= F; 366 z= Variable ( y.level() -lev);379 z= Variable (lev); 367 380 bufF= swapvar (bufF, x, z); 368 381 bufBufFactors= bufFactors; 369 382 evalPoint= CFArray (evaluation.length() - 1); 370 buf= CFArray (evaluation.length()); 371 iter= evaluation; 372 int k= evaluation.length() - 1; 373 for (; iter.hasItem(); iter++, k--) 374 buf[k]= iter.getItem(); 375 swap= buf[z.level() - 1]; 376 buf[z.level() - 1]= buf[0]; 377 buf[0]= 0; 378 int l= 0; 379 for (k= 0; k < evaluation.length(); k++) 383 for (int k= 0; k < evaluation.length()-1; k++) 380 384 { 381 if ( buf[k].isZero())382 continue;383 e valPoint[l]= buf[k];384 l++;385 if (N (Variable (k+1)).level() != y.level()) 386 evalPoint[k]= buf[k+1]; 387 else 388 evalPoint[k]= buf[0]; 385 389 } 386 390 pass= testFactors (bufF, bufBufFactors, sqrfPartF, bufFactors, … … 402 406 result.append (LCF); 403 407 for (int j= 1; j <= factors.length(); j++) 404 result.append (LCF); 408 result.append (1); 409 result= distributeContent (result, differentSecondVarLCs, length); 410 if (!result.getFirst().inCoeffDomain()) 411 { 412 CFListIterator iter= result; 413 CanonicalForm tmp= iter.getItem(); 414 iter++; 415 for (; iter.hasItem(); iter++) 416 iter.getItem() *= tmp; 417 } 418 405 419 y= Variable (1); 406 420 delete [] bufSqrfFactors; … … 425 439 426 440 bufFactors= factors; 441 442 CFMap MM, NN; 443 dummy [0]= sqrfPartF; 444 dummy [1]= 1; 445 compress (dummy, MM, NN); 446 sqrfPartF= MM (sqrfPartF); 447 CanonicalForm varsSqrfPartF= getVars (sqrfPartF); 448 for (CFListIterator iter= factors; iter.hasItem(); iter++) 449 iter.getItem()= MM (iter.getItem()); 450 427 451 CFList evaluation2; 428 if (y == x) 429 evaluation2= evaluation; 430 else 431 { 432 CanonicalForm tmp; 433 evaluation2= evaluation; 434 int i= evaluation.length() + 1; 435 for (CFListIterator iter= evaluation2; iter.hasItem(); iter++, i--) 436 { 437 if (i == y.level()) 438 { 439 tmp= iter.getItem(); 440 iter.getItem()= evaluation2.getLast(); 441 evaluation2.removeLast(); 442 evaluation2.append (tmp); 443 break; 444 } 445 } 446 } 452 for (int i= 2; i <= varsSqrfPartF.level(); i++) 453 evaluation2.insert (evalPoint[NN (Variable (i)).level()-2]); 447 454 448 455 CFList interMedResult; 449 456 CanonicalForm oldSqrfPartF= sqrfPartF; 450 sqrfPartF= shift2Zero (sqrfPartF, evalSqrfPartF, evaluation2 , 1);457 sqrfPartF= shift2Zero (sqrfPartF, evalSqrfPartF, evaluation2); 451 458 if (factors.length() > 1) 452 459 { … … 456 463 leadingCoeffs.append (LC1); 457 464 458 CFList LC1eval= evaluateAtEval (LC1, evaluation2, 1);465 CFList LC1eval= evaluateAtEval (LC1, evaluation2,2); 459 466 CFList oldFactors= factors; 460 467 for (CFListIterator i= oldFactors; i.hasItem(); i++) … … 463 470 bool success= false; 464 471 CanonicalForm oldSqrfPartFPowLC= oldSqrfPartF*power(LC1,factors.length()-1); 472 CFList heuResult; 465 473 if (size (oldSqrfPartFPowLC)/getNumVars (oldSqrfPartFPowLC) < 500 && 466 474 LucksWangSparseHeuristic (oldSqrfPartFPowLC, 467 oldFactors, 1, leadingCoeffs, factors))468 { 469 interMedResult= recoverFactors (oldSqrfPartF, factors);475 oldFactors, 2, leadingCoeffs, heuResult)) 476 { 477 interMedResult= recoverFactors (oldSqrfPartF, heuResult); 470 478 if (oldFactors.length() == interMedResult.length()) 471 479 success= true; … … 480 488 481 489 for (CFListIterator i= factors; i.hasItem(); i++) 482 {483 i.getItem()= i.getItem() (x + evaluation2.getLast(), x);484 490 i.getItem() *= LC1 (0,2)/Lc (i.getItem()); 485 }486 491 factors.insert (1); 487 492 … … 527 532 } 528 533 for (CFListIterator iter= factors; iter.hasItem(); iter++) 529 iter.getItem()= reverseShift (iter.getItem(), evaluation2 , 1);534 iter.getItem()= reverseShift (iter.getItem(), evaluation2); 530 535 531 536 interMedResult= 532 recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2 ,1),537 recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2), 533 538 factors); 534 539 } … … 536 541 else 537 542 { 538 factors= CFList (oldSqrfPartF); 543 CanonicalForm contF=content (oldSqrfPartF,1); 544 factors= CFList (oldSqrfPartF/contF); 539 545 interMedResult= recoverFactors (oldSqrfPartF, factors); 540 546 } 547 548 for (CFListIterator iter= interMedResult; iter.hasItem(); iter++) 549 iter.getItem()= NN (iter.getItem()); 541 550 542 551 CFList result; … … 680 689 } 681 690 691 A *= bCommonDen (A); 682 692 // check main variable 683 693 CFList Aeval, list, evaluation, bufEvaluation, bufAeval; 684 int factorNums= 3;694 int factorNums= 1; 685 695 CanonicalForm bivarEval; 686 696 CFList biFactors, bufBiFactors; 687 697 CanonicalForm evalPoly; 688 int lift, bufLift ;689 CFList* bufAeval2= new CFList [ A.level() -2];690 CFList* Aeval2= new CFList [ A.level() -2];698 int lift, bufLift, lengthAeval2= A.level()-2; 699 CFList* bufAeval2= new CFList [lengthAeval2]; 700 CFList* Aeval2= new CFList [lengthAeval2]; 691 701 int counter; 692 702 int differentSecondVar= 0; … … 707 717 evaluationWRTDifferentSecondVars (bufAeval2, bufEvaluation, A); 708 718 709 for (int j= 0; j < A.level() - 1; j++)719 for (int j= 0; j < lengthAeval2; j++) 710 720 { 711 721 if (!bufAeval2[j].isEmpty()) … … 738 748 biFactors= bufBiFactors; 739 749 lift= bufLift; 740 for (int j= 0; j < A.level() -2; j++)750 for (int j= 0; j < lengthAeval2; j++) 741 751 Aeval2 [j]= bufAeval2 [j]; 742 752 differentSecondVar= counter; … … 752 762 biFactors= bufBiFactors; 753 763 lift= bufLift; 754 for (int j= 0; j < A.level() -2; j++)764 for (int j= 0; j < lengthAeval2; j++) 755 765 Aeval2 [j]= bufAeval2 [j]; 756 766 differentSecondVar= counter; … … 786 796 refineBiFactors (A, biFactors, Aeval2, evaluation, minFactorsLength); 787 797 788 if (differentSecondVar == A.level() -2)798 if (differentSecondVar == lengthAeval2) 789 799 { 790 800 bool zeroOccured= false; … … 799 809 if (!zeroOccured) 800 810 { 801 factors= sparseHeuristic (A, biFactors, Aeval2, evaluation, minFactorsLength); 811 factors= sparseHeuristic (A, biFactors, Aeval2, evaluation, 812 minFactorsLength); 802 813 if (factors.length() == biFactors.length()) 803 814 { … … 815 826 CFList uniFactors= buildUniFactors (biFactors, evaluation.getLast(), y); 816 827 817 CFList * oldAeval= new CFList [A.level() - 2]; 818 for (int i= 0; i < A.level() - 2; i++) 828 sortByUniFactors (Aeval2, lengthAeval2, uniFactors, evaluation); 829 830 CFList * oldAeval= new CFList [lengthAeval2]; 831 for (int i= 0; i < lengthAeval2; i++) 819 832 oldAeval[i]= Aeval2[i]; 820 833 … … 827 840 Variable w; 828 841 CFList leadingCoeffs= precomputeLeadingCoeff (LC (A, 1), biFactorsLCs, 829 evaluation, Aeval2, A.level() -2, w);842 evaluation, Aeval2, lengthAeval2, w); 830 843 831 844 if (w.level() != 1) 832 845 { 833 846 A= swapvar (A, y, w); 834 for (int i= 0; i < A.level() - 2; i++)835 {836 if (oldAeval[i].isEmpty())837 continue;838 if (oldAeval[i].getFirst().level() == w.level())839 {840 biFactors= CFList();841 for (CFListIterator iter= oldAeval [i]; iter.hasItem(); iter++)842 biFactors.append (swapvar (iter.getItem(), w, y));843 }844 }845 847 int i= A.level(); 846 848 CanonicalForm evalPoint; … … 856 858 } 857 859 } 860 for (i= 0; i < lengthAeval2; i++) 861 { 862 if (oldAeval[i].isEmpty()) 863 continue; 864 if (oldAeval[i].getFirst().level() == w.level()) 865 { 866 CFArray tmp= copy (oldAeval[i]); 867 oldAeval[i]= biFactors; 868 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 869 iter.getItem()= swapvar (iter.getItem(), w, y); 870 for (int ii= 0; ii < tmp.size(); ii++) 871 tmp[ii]= swapvar (tmp[ii], w, y); 872 CFArray tmp2= CFArray (tmp.size()); 873 CanonicalForm buf; 874 for (int ii= 0; ii < tmp.size(); ii++) 875 { 876 buf= tmp[ii] (evaluation.getLast(),y); 877 buf /= Lc (buf); 878 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 879 } 880 biFactors= CFList(); 881 for (int j= 0; j < tmp2.size(); j++) 882 biFactors.append (tmp2[j]); 883 } 884 } 858 885 } 859 886 … … 865 892 CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1); 866 893 A *= tmp; 867 Aeval= evaluateAtZero (A);868 894 tmp= leadingCoeffs.getFirst(); 869 895 iter= evaluation; … … 880 906 } 881 907 908 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); 909 bool LCmultiplierIsConst= LCmultiplier.inCoeffDomain(); 882 910 leadingCoeffs.removeFirst(); 883 911 884 912 //prepare leading coefficients 885 CFList* leadingCoeffs2= new CFList [ A.level() -2];913 CFList* leadingCoeffs2= new CFList [lengthAeval2]; 886 914 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors, 887 915 evaluation); … … 890 918 Aeval= evaluateAtEval (A, evaluation, 2); 891 919 892 CanonicalForm hh= Lc (Aeval.getFirst()); 893 894 for (CFListIterator i= Aeval; i.hasItem(); i++) 895 i.getItem() /= hh; 896 897 A /= hh; 898 899 if (size (A)/getNumVars (A) < 500 && 900 LucksWangSparseHeuristic (A, biFactors, 2, leadingCoeffs2 [A.level() - 3], 920 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 921 922 for (iter= Aeval; iter.hasItem(); iter++) 923 iter.getItem() *= hh; 924 925 A *= hh; 926 927 CFListIterator iter2; 928 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 929 bufBiFactors= biFactors; 930 bufA= A; 931 CanonicalForm bufLCmultiplier= LCmultiplier; 932 CanonicalForm testVars; 933 if (!LCmultiplierIsConst) 934 { 935 testVars= Variable (2); 936 for (int i= 0; i < lengthAeval2; i++) 937 { 938 if (!oldAeval[i].isEmpty()) 939 testVars *= oldAeval[i].getFirst().mvar(); 940 } 941 } 942 CFList bufFactors= CFList(); 943 bool LCheuristic= false; 944 if (LucksWangSparseHeuristic (A, biFactors, 2, leadingCoeffs2[lengthAeval2-1], 901 945 factors)) 902 946 { 903 int check= factors.length(); 904 factors= recoverFactors (A, factors); 947 int check= biFactors.length(); 948 int * index= new int [factors.length()]; 949 CFList oldFactors= factors; 950 factors= recoverFactors (A, factors, index); 905 951 906 952 if (check == factors.length()) 907 953 { 954 if (w.level() != 1) 955 { 956 for (iter= factors; iter.hasItem(); iter++) 957 iter.getItem()= swapvar (iter.getItem(), w, y); 958 } 959 908 960 appendSwapDecompress (factors, contentAFactors, N, 0, 0, x); 909 961 normalize (factors); 962 delete [] index; 910 963 delete [] Aeval2; 911 964 return factors; 912 965 } 966 else if (factors.length() > 0) 967 { 968 int oneCount= 0; 969 CFList l; 970 for (int i= 0; i < check; i++) 971 { 972 if (index[i] == 1) 973 { 974 iter=biFactors; 975 for (int j=1; j <= i-oneCount; j++) 976 iter++; 977 iter.remove (1); 978 for (int j= 0; j < lengthAeval2; j++) 979 { 980 l= leadingCoeffs2[j]; 981 iter= l; 982 for (int k=1; k <= i-oneCount; k++) 983 iter++; 984 iter.remove (1); 985 leadingCoeffs2[j]=l; 986 } 987 oneCount++; 988 } 989 } 990 bufFactors= factors; 991 factors= CFList(); 992 } 993 else if (!LCmultiplierIsConst && factors.length() == 0) 994 { 995 LCheuristic= true; 996 factors= oldFactors; 997 CanonicalForm cont; 998 CFList contents, LCs; 999 int index=1; 1000 bool foundTrueMultiplier= false; 1001 for (iter= factors; iter.hasItem(); iter++, index++) 1002 { 1003 cont= content (iter.getItem(), 1); 1004 cont= gcd (cont , LCmultiplier); 1005 contents.append (cont); 1006 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 1007 { 1008 foundTrueMultiplier= true; 1009 int index2= 1; 1010 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 1011 index2++) 1012 { 1013 if (index2 == index) 1014 continue; 1015 iter2.getItem() /= LCmultiplier; 1016 } 1017 A= oldA; 1018 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1019 for (int i= lengthAeval2-1; i > -1; i--) 1020 leadingCoeffs2[i]= CFList(); 1021 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, 1022 biFactors, evaluation ); 1023 Aeval= evaluateAtEval (A, evaluation, 2); 1024 1025 hh= 1/Lc (Aeval.getFirst()); 1026 1027 for (iter2= Aeval; iter2.hasItem(); iter2++) 1028 iter2.getItem() *= hh; 1029 1030 A *= hh; 1031 break; 1032 } 1033 else 1034 LCs.append (LC (iter.getItem()/cont, 1)); 1035 } 1036 if (!foundTrueMultiplier) 1037 { 1038 index= 1; 1039 iter2= factors; 1040 bool foundMultiplier= false; 1041 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 1042 { 1043 if (fdivides (iter.getItem(), LCmultiplier)) 1044 { 1045 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 1046 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 1047 { 1048 int index2= 1; 1049 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 1050 iter3.hasItem(); iter3++, index2++) 1051 { 1052 if (index2 == index) 1053 { 1054 iter3.getItem() /= LCmultiplier; 1055 break; 1056 } 1057 } 1058 A /= LCmultiplier; 1059 foundMultiplier= true; 1060 iter.getItem()= 1; 1061 } 1062 } 1063 } 1064 // coming from above: divide out more LCmultiplier if possible 1065 if (foundMultiplier) 1066 { 1067 foundMultiplier= false; 1068 index=1; 1069 iter2= factors; 1070 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 1071 { 1072 if (!iter.getItem().isOne() && 1073 fdivides (iter.getItem(), LCmultiplier)) 1074 { 1075 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 1076 { 1077 int index2= 1; 1078 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1079 iter2++, index2++) 1080 { 1081 if (index2 == index) 1082 { 1083 iter2.getItem() /= iter.getItem(); 1084 foundMultiplier= true; 1085 break; 1086 } 1087 } 1088 A /= iter.getItem(); 1089 LCmultiplier /= iter.getItem(); 1090 iter.getItem()= 1; 1091 } 1092 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 1093 { 1094 Variable xx= Variable (2); 1095 CanonicalForm vars; 1096 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 1097 xx)); 1098 for (int i= 0; i < lengthAeval2; i++) 1099 { 1100 if (oldAeval[i].isEmpty()) 1101 continue; 1102 xx= oldAeval[i].getFirst().mvar(); 1103 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 1104 xx)); 1105 } 1106 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 1107 /myGetVars (LCmultiplier) == vars) 1108 { 1109 int index2= 1; 1110 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1111 iter2++, index2++) 1112 { 1113 if (index2 == index) 1114 { 1115 iter2.getItem() /= LCmultiplier; 1116 foundMultiplier= true; 1117 break; 1118 } 1119 } 1120 A /= LCmultiplier; 1121 iter.getItem()= 1; 1122 } 1123 } 1124 } 1125 } 1126 } 1127 else 1128 { 1129 CanonicalForm pLCs= prod (LCs); 1130 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 1131 { 1132 A= oldA; 1133 iter2= leadingCoeffs2[lengthAeval2-1]; 1134 for (iter= contents; iter.hasItem(); iter++, iter2++) 1135 iter2.getItem() /= iter.getItem(); 1136 foundMultiplier= true; 1137 } 1138 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 1139 { 1140 Variable xx; 1141 CFList vars1; 1142 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 1143 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 1144 sqrfMultiplier.removeFirst(); 1145 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 1146 xx= Variable (2); 1147 for (iter= oldBiFactors; iter.hasItem(); iter++) 1148 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 1149 for (int i= 0; i < lengthAeval2; i++) 1150 { 1151 if (oldAeval[i].isEmpty()) 1152 continue; 1153 xx= oldAeval[i].getFirst().mvar(); 1154 iter2= vars1; 1155 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 1156 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx)); 1157 } 1158 CanonicalForm tmp; 1159 iter2= vars1; 1160 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, 1161 iter2++) 1162 { 1163 tmp= iter.getItem()/LCmultiplier; 1164 for (int i=1; i <= tmp.level(); i++) 1165 { 1166 if (degree(tmp,i) > 0 && 1167 (degree(iter2.getItem(),i) > degree (tmp,i))) 1168 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 1169 } 1170 } 1171 int multi; 1172 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 1173 { 1174 multi= 0; 1175 for (iter= vars1; iter.hasItem(); iter++) 1176 { 1177 tmp= iter.getItem(); 1178 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 1179 { 1180 multi++; 1181 tmp /= myGetVars (ii.getItem().factor()); 1182 } 1183 } 1184 if (multi == ii.getItem().exp()) 1185 { 1186 index= 1; 1187 for (iter= vars1; iter.hasItem(); iter++, index++) 1188 { 1189 while (fdivides (myGetVars(ii.getItem().factor()), 1190 iter.getItem() 1191 ) 1192 ) 1193 { 1194 int index2= 1; 1195 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1196 iter2++, index2++) 1197 { 1198 if (index2 == index) 1199 continue; 1200 else 1201 { 1202 tmp= ii.getItem().factor(); 1203 iter2.getItem() /= tmp; 1204 CFListIterator iter3= evaluation; 1205 for (int jj= A.level(); jj > 2; jj--, iter3++) 1206 tmp= tmp (iter3.getItem(), jj); 1207 if (!tmp.inCoeffDomain()) 1208 { 1209 int index3= 1; 1210 for (iter3= biFactors; iter3.hasItem(); iter3++, 1211 index3++) 1212 { 1213 if (index3 == index2) 1214 { 1215 iter3.getItem() /= tmp; 1216 iter3.getItem() /= Lc (iter3.getItem()); 1217 break; 1218 } 1219 } 1220 } 1221 A /= ii.getItem().factor(); 1222 } 1223 } 1224 iter.getItem() /= getVars (ii.getItem().factor()); 1225 } 1226 } 1227 } 1228 else 1229 { 1230 index= 1; 1231 for (iter= vars1; iter.hasItem(); iter++, index++) 1232 { 1233 if (!fdivides (myGetVars (ii.getItem().factor()), 1234 iter.getItem() 1235 ) 1236 ) 1237 { 1238 int index2= 1; 1239 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1240 iter2++, index2++) 1241 { 1242 if (index2 == index) 1243 { 1244 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 1245 iter2.getItem() /= tmp; 1246 A /= tmp; 1247 CFListIterator iter3= evaluation; 1248 for (int jj= A.level(); jj > 2; jj--, iter3++) 1249 tmp= tmp (iter3.getItem(), jj); 1250 if (!tmp.inCoeffDomain()) 1251 { 1252 int index3= 1; 1253 for (iter3= biFactors; iter3.hasItem(); iter3++, 1254 index3++) 1255 { 1256 if (index3 == index2) 1257 { 1258 iter3.getItem() /= tmp; 1259 iter3.getItem() /= Lc (iter3.getItem()); 1260 break; 1261 } 1262 } 1263 } 1264 } 1265 } 1266 } 1267 } 1268 } 1269 } 1270 } 1271 } 1272 1273 // patch everything together again 1274 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1275 for (int i= lengthAeval2-1; i > -1; i--) 1276 leadingCoeffs2[i]= CFList(); 1277 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 1278 evaluation); 1279 Aeval= evaluateAtEval (A, evaluation, 2); 1280 1281 hh= 1/Lc (Aeval.getFirst()); 1282 1283 for (CFListIterator i= Aeval; i.hasItem(); i++) 1284 i.getItem() *= hh; 1285 1286 A *= hh; 1287 } 1288 factors= CFList(); 1289 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) 1290 { 1291 LCheuristic= false; 1292 A= bufA; 1293 biFactors= bufBiFactors; 1294 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 1295 LCmultiplier= bufLCmultiplier; 1296 } 1297 } 913 1298 else 914 1299 factors= CFList(); 915 } 916 917 1300 delete [] index; 1301 } 1302 if (!LCheuristic && !LCmultiplierIsConst && bufFactors.isEmpty() 1303 && fdivides (getVars (LCmultiplier), testVars)) 1304 { 1305 LCheuristic= true; 1306 int index; 1307 Variable xx; 1308 CFList vars1; 1309 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 1310 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 1311 sqrfMultiplier.removeFirst(); 1312 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 1313 xx= Variable (2); 1314 for (iter= oldBiFactors; iter.hasItem(); iter++) 1315 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 1316 for (int i= 0; i < lengthAeval2; i++) 1317 { 1318 if (oldAeval[i].isEmpty()) 1319 continue; 1320 xx= oldAeval[i].getFirst().mvar(); 1321 iter2= vars1; 1322 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 1323 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 1324 } 1325 CanonicalForm tmp; 1326 iter2= vars1; 1327 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++) 1328 { 1329 tmp= iter.getItem()/LCmultiplier; 1330 for (int i=1; i <= tmp.level(); i++) 1331 { 1332 if (degree(tmp,i) > 0 && (degree(iter2.getItem(),i) > degree (tmp,i))) 1333 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 1334 } 1335 } 1336 int multi; 1337 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 1338 { 1339 multi= 0; 1340 for (iter= vars1; iter.hasItem(); iter++) 1341 { 1342 tmp= iter.getItem(); 1343 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 1344 { 1345 multi++; 1346 tmp /= myGetVars (ii.getItem().factor()); 1347 } 1348 } 1349 if (multi == ii.getItem().exp()) 1350 { 1351 index= 1; 1352 for (iter= vars1; iter.hasItem(); iter++, index++) 1353 { 1354 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 1355 { 1356 int index2= 1; 1357 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 1358 index2++) 1359 { 1360 if (index2 == index) 1361 continue; 1362 else 1363 { 1364 tmp= ii.getItem().factor(); 1365 iter2.getItem() /= tmp; 1366 CFListIterator iter3= evaluation; 1367 for (int jj= A.level(); jj > 2; jj--, iter3++) 1368 tmp= tmp (iter3.getItem(), jj); 1369 if (!tmp.inCoeffDomain()) 1370 { 1371 int index3= 1; 1372 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 1373 { 1374 if (index3 == index2) 1375 { 1376 iter3.getItem() /= tmp; 1377 iter3.getItem() /= Lc (iter3.getItem()); 1378 break; 1379 } 1380 } 1381 } 1382 A /= ii.getItem().factor(); 1383 } 1384 } 1385 iter.getItem() /= getVars (ii.getItem().factor()); 1386 } 1387 } 1388 } 1389 else 1390 { 1391 index= 1; 1392 for (iter= vars1; iter.hasItem(); iter++, index++) 1393 { 1394 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 1395 { 1396 int index2= 1; 1397 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 1398 index2++) 1399 { 1400 if (index2 == index) 1401 { 1402 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 1403 iter2.getItem() /= tmp; 1404 A /= tmp; 1405 CFListIterator iter3= evaluation; 1406 for (int jj= A.level(); jj > 2; jj--, iter3++) 1407 tmp= tmp (iter3.getItem(), jj); 1408 if (!tmp.inCoeffDomain()) 1409 { 1410 int index3= 1; 1411 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 1412 { 1413 if (index3 == index2) 1414 { 1415 iter3.getItem() /= tmp; 1416 iter3.getItem() /= Lc (iter3.getItem()); 1417 break; 1418 } 1419 } 1420 } 1421 } 1422 } 1423 } 1424 } 1425 } 1426 } 1427 1428 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1429 for (int i= lengthAeval2-1; i > -1; i--) 1430 leadingCoeffs2[i]= CFList(); 1431 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 1432 evaluation); 1433 Aeval= evaluateAtEval (A, evaluation, 2); 1434 1435 hh= 1/Lc (Aeval.getFirst()); 1436 1437 for (CFListIterator i= Aeval; i.hasItem(); i++) 1438 i.getItem() *= hh; 1439 1440 A *= hh; 1441 1442 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) 1443 { 1444 LCheuristic= false; 1445 A= bufA; 1446 biFactors= bufBiFactors; 1447 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 1448 LCmultiplier= bufLCmultiplier; 1449 } 1450 } 1451 1452 tryAgainWithoutHeu: 918 1453 //shifting to zero 919 1454 A= shift2Zero (A, Aeval, evaluation); … … 922 1457 iter.getItem()= iter.getItem () (y + evaluation.getLast(), y); 923 1458 924 for (int i= 0; i < A.level() - 2; i++) 925 { 926 if (i != A.level() - 3) 927 leadingCoeffs2[i]= CFList(); 928 } 929 for (iter= leadingCoeffs2[A.level() - 3]; iter.hasItem(); iter++) 1459 for (int i= 0; i < lengthAeval2-1; i++) 1460 leadingCoeffs2[i]= CFList(); 1461 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++) 930 1462 { 931 1463 iter.getItem()= shift2Zero (iter.getItem(), list, evaluation); 932 1464 for (int i= A.level() - 4; i > -1; i--) 933 1465 { 934 if (i + 1 == A.level() - 3)1466 if (i + 1 == lengthAeval2-1) 935 1467 leadingCoeffs2[i].append (iter.getItem() (0, i + 4)); 936 1468 else … … 949 1481 bool noOneToOne= false; 950 1482 1483 CFList commonDenominators; 1484 for (iter=biFactors; iter.hasItem(); iter++) 1485 commonDenominators.append (bCommonDen (iter.getItem())); 1486 CanonicalForm tmp1, tmp2, tmp3=1; 1487 for (int i= 0; i < lengthAeval2; i++) 1488 { 1489 iter2= commonDenominators; 1490 for (iter= leadingCoeffs2[i]; iter.hasItem(); iter++, iter2++) 1491 { 1492 tmp1= bCommonDen (iter.getItem()); 1493 Off (SW_RATIONAL); 1494 iter2.getItem()= lcm (iter2.getItem(), tmp1); 1495 On (SW_RATIONAL); 1496 } 1497 } 1498 tmp1= prod (commonDenominators); 1499 for (iter= Aeval; iter.hasItem(); iter++) 1500 { 1501 tmp2= bCommonDen (iter.getItem()); 1502 Off (SW_RATIONAL); 1503 tmp3= lcm (tmp2,tmp3); 1504 On (SW_RATIONAL); 1505 } 1506 CanonicalForm multiplier; 1507 multiplier= tmp3/tmp1; 1508 iter2= commonDenominators; 1509 for (iter=biFactors; iter.hasItem(); iter++, iter2++) 1510 iter.getItem() *= iter2.getItem()*multiplier; 1511 1512 for (iter= Aeval; iter.hasItem(); iter++) 1513 iter.getItem() *= tmp3*power (multiplier, biFactors.length() - 1); 1514 1515 for (int i= 0; i < lengthAeval2; i++) 1516 { 1517 iter2= commonDenominators; 1518 for (iter= leadingCoeffs2[i]; iter.hasItem(); iter++, iter2++) 1519 iter.getItem() *= iter2.getItem()*multiplier; 1520 } 1521 1522 951 1523 factors= nonMonicHenselLift (Aeval, biFactors, leadingCoeffs2, diophant, 952 1524 Pi, liftBounds, liftBoundsLength, noOneToOne); … … 959 1531 if (check != factors.length()) 960 1532 noOneToOne= true; 1533 else 1534 factors= Union (factors, bufFactors); 961 1535 } 962 1536 if (noOneToOne) 963 1537 { 1538 if (!LCmultiplierIsConst && LCheuristic) 1539 { 1540 A= bufA; 1541 biFactors= bufBiFactors; 1542 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 1543 delete [] liftBounds; 1544 LCheuristic= false; 1545 goto tryAgainWithoutHeu; 1546 //something probably went wrong in the heuristic 1547 } 1548 964 1549 A= shift2Zero (oldA, Aeval, evaluation); 965 1550 biFactors= oldBiFactors; -
factory/facFqBivar.cc
r3aa7f9 r6dffa9 269 269 return CFList(); 270 270 } 271 if (F.inCoeffDomain()) 272 return CFList(); 271 273 272 274 Variable alpha= info.getAlpha(); … … 478 480 return CFList (); 479 481 } 482 if (F.inCoeffDomain()) 483 return CFList(); 480 484 if (degs.getLength() <= 1 || factors.length() == 1) 481 485 { … … 492 496 (mod (b(LC (F, 1)*prodMod (factors, N)),N)/Lc (mod (b(LC (F, 1)*prodMod (factors, N)),N)) == F/Lc(F))); 493 497 #endif 498 494 499 CFList T, S; 495 500 … … 513 518 bool recombination= false; 514 519 CanonicalForm test; 515 bool isRat= (isOn (SW_RATIONAL) && getCharacteristic() == 0) || getCharacteristic() > 0; 520 bool isRat= (isOn (SW_RATIONAL) && getCharacteristic() == 0) || 521 getCharacteristic() > 0; 516 522 if (!isRat) 517 523 On (SW_RATIONAL); … … 519 525 if (!isRat) 520 526 Off (SW_RATIONAL); 521 buf0= buf(0,x)*LCBuf;522 527 while (T.length() >= 2*s && s <= thres) 523 528 { … … 584 589 recombination= true; 585 590 result.append (g); 586 buf= quot; 591 if (b.getp() != 0) 592 buf= quot*bCommonDen (quot); 593 else 594 buf= quot; 587 595 LCBuf= LC (buf, x); 588 596 T= Difference (T, S); … … 703 711 CanonicalForm buf= F; 704 712 Variable x= Variable (1); 705 CanonicalForm LCBuf= LC (buf, x);706 713 CanonicalForm g, quot; 707 714 CanonicalForm M= power (F.mvar(), deg); … … 711 718 if (!isRat) 712 719 On (SW_RATIONAL); 720 if (b.getp() != 0) 721 buf *= bCommonDen (buf); 722 CanonicalForm LCBuf= LC (buf, x); 713 723 CanonicalForm buf0= mulNTL (buf (0,x), LCBuf); 714 724 CanonicalForm buf1= mulNTL (buf (1,x), LCBuf); … … 746 756 reconstructedFactors.append (g); 747 757 factorsFoundIndex[l]= 1; 748 buf= quot; 758 if (b.getp() != 0) 759 buf= quot*bCommonDen(quot); 760 else 761 buf= quot; 749 762 d -= degree (g); 750 763 LCBuf= LC (buf, x); … … 762 775 if (bufDegs1.getLength() <= 1) 763 776 { 764 reconstructedFactors.append (buf); 777 if (!buf.inCoeffDomain()) 778 { 779 reconstructedFactors.append (buf); 780 F= 1; 781 } 765 782 break; 766 783 } … … 858 875 if (bufDegs1.getLength() <= 1) 859 876 { 860 buf= buf (y - eval, y); 861 buf /= Lc (buf); 862 appendMapDown (reconstructedFactors, buf, info, source, dest); 877 if (!buf.inCoeffDomain()) 878 { 879 buf= buf (y - eval, y); 880 buf /= Lc (buf); 881 appendMapDown (reconstructedFactors, buf, info, source, dest); 882 F= 1; 883 } 863 884 break; 864 885 } … … 5130 5151 else 5131 5152 { 5132 int * zeroOne= extractZeroOneVecs (NTLN); 5153 int * zeroOne; 5154 long numCols, numRows; 5155 if (alpha.level() == 1 || (alpha.level() != 1 && reduceFq2Fp)) 5156 { 5157 numCols= NTLN.NumCols(); 5158 numRows= NTLN.NumRows(); 5159 zeroOne= extractZeroOneVecs (NTLN); 5160 } 5161 else 5162 { 5163 numCols= NTLNe.NumCols(); 5164 numRows= NTLNe.NumRows(); 5165 zeroOne= extractZeroOneVecs (NTLNe); 5166 } 5133 5167 CFList bufBufUniFactors= bufUniFactors; 5134 5168 CFListIterator iter, iter2; … … 5136 5170 CFList factorsConsidered; 5137 5171 CanonicalForm tmp; 5138 for (int i= 0; i < NTLN.NumCols(); i++)5172 for (int i= 0; i < numCols; i++) 5139 5173 { 5140 5174 if (zeroOne [i] == 0) … … 5143 5177 buf= 1; 5144 5178 factorsConsidered= CFList(); 5145 for (int j= 0; j < NTLN.NumRows(); j++, iter++)5146 { 5147 if ( !IsZero (NTLN (j + 1,i + 1)))5179 for (int j= 0; j < numRows; j++, iter++) 5180 { 5181 if (alpha.level() == 1 || (alpha.level() != 1 && reduceFq2Fp)) 5148 5182 { 5149 factorsConsidered.append (iter.getItem()); 5150 buf *= mod (iter.getItem(), y); 5183 if (!IsZero (NTLN (j + 1,i + 1))) 5184 { 5185 factorsConsidered.append (iter.getItem()); 5186 buf *= mod (iter.getItem(), y); 5187 } 5188 } 5189 else 5190 { 5191 if (!IsZero (NTLNe (j + 1,i + 1))) 5192 { 5193 factorsConsidered.append (iter.getItem()); 5194 buf *= mod (iter.getItem(), y); 5195 } 5151 5196 } 5152 5197 } … … 5936 5981 false, false, N); 5937 5982 5938 normalize (factors); 5983 if (!extension) 5984 normalize (factors); 5939 5985 return factors; 5940 5986 } … … 5957 6003 append (factorsG, contentAyFactors); 5958 6004 decompress (factorsG, N); 5959 normalize (factors); 6005 if (!extension) 6006 normalize (factorsG); 5960 6007 return factorsG; 5961 6008 } … … 5977 6024 append (factorsG, contentAyFactors); 5978 6025 decompress (factorsG, N); 5979 normalize (factors); 6026 if (!extension) 6027 normalize (factorsG); 5980 6028 return factorsG; 5981 6029 } … … 6006 6054 swap, false, N); 6007 6055 6008 normalize (factors); 6056 if (!extension) 6057 normalize (factors); 6009 6058 return factors; 6010 6059 } … … 6111 6160 swap, swap2, N); 6112 6161 6113 normalize (factors); 6162 if (!extension) 6163 normalize (factors); 6114 6164 return factors; 6115 6165 } … … 6129 6179 appendSwapDecompress (factors, contentAxFactors, contentAyFactors, 6130 6180 swap, swap2, N); 6131 normalize (factors); 6181 if (!extension) 6182 normalize (factors); 6132 6183 return factors; 6133 6184 } … … 6146 6197 appendSwapDecompress (factors, contentAxFactors, contentAyFactors, 6147 6198 swap, swap2, N); 6148 normalize (factors); 6199 if (!extension) 6200 normalize (factors); 6149 6201 return factors; 6150 6202 } … … 6222 6274 appendSwapDecompress (factors, contentAxFactors, contentAyFactors, 6223 6275 swap, swap2, N); 6224 normalize (factors); 6276 if (!extension) 6277 normalize (factors); 6225 6278 return factors; 6226 6279 } … … 6424 6477 appendSwapDecompress (factors, contentAxFactors, contentAyFactors, 6425 6478 swap, swap2, N); 6426 normalize (factors); 6479 if (!extension) 6480 normalize (factors); 6427 6481 6428 6482 return factors; -
factory/facFqBivarUtil.cc
r3aa7f9 r6dffa9 269 269 void normalize (CFList& factors) 270 270 { 271 CanonicalForm lcinv; 271 272 for (CFListIterator i= factors; i.hasItem(); i++) 272 i.getItem() /= Lc(i.getItem()); 273 { 274 lcinv= 1/Lc (i.getItem()); 275 i.getItem() *= lcinv; 276 } 273 277 return; 274 278 } … … 276 280 void normalize (CFFList& factors) 277 281 { 282 CanonicalForm lcinv; 278 283 for (CFFListIterator i= factors; i.hasItem(); i++) 279 i.getItem()= CFFactor (i.getItem().factor()/Lc(i.getItem().factor()), 284 { 285 lcinv= 1/ Lc (i.getItem().factor()); 286 i.getItem()= CFFactor (i.getItem().factor()*lcinv, 280 287 i.getItem().exp()); 288 } 281 289 return; 282 290 } -
factory/facFqFactorize.cc
r3aa7f9 r6dffa9 63 63 listGCD (const CFList& L) 64 64 { 65 if (L.length() == 0) 66 return 0; 65 67 if (L.length() == 1) 66 68 return L.getFirst(); … … 140 142 while( degsf[i] == 0 ) i++; 141 143 swap[n][0]= i; 142 swap[n][1]= degsf[i];144 swap[n][1]= size (LC (F,i)); 143 145 if (i != n) 144 146 result= swapvar (result, Variable (n), Variable(i)); … … 153 155 for (int j= 1; j < n - i + 1; j++) 154 156 { 155 if (swap[j][1] <swap[j + 1][1])157 if (swap[j][1] > swap[j + 1][1]) 156 158 { 157 159 buf1= swap [j + 1] [0]; … … 703 705 } 704 706 707 #define CHAR_THRESHOLD 8 705 708 CFList 706 709 evalPoints (const CanonicalForm& F, CFList & eval, const Variable& alpha, … … 713 716 GFRandom genGF; 714 717 int p= getCharacteristic (); 718 if (p < CHAR_THRESHOLD) 719 { 720 if (!GF && alpha.level() == 1) 721 { 722 fail= true; 723 return CFList(); 724 } 725 else if (!GF && alpha.level() != 1) 726 { 727 if ((p == 2 && degree (getMipo (alpha)) < 6) || 728 (p == 3 && degree (getMipo (alpha)) < 4) || 729 (p == 5 && degree (getMipo (alpha)) < 3)) 730 { 731 fail= true; 732 return CFList(); 733 } 734 } 735 } 715 736 double bound; 716 737 if (alpha != x) 717 738 { 718 739 bound= pow ((double) p, (double) degree (getMipo(alpha))); 719 bound = pow ((double) bound, (double) k);740 bound *= (double) k; 720 741 } 721 742 else if (GF) 722 743 { 723 744 bound= pow ((double) p, (double) getGFDegree()); 724 bound = pow ((double) bound, (double) k);745 bound *= (double) k; 725 746 } 726 747 else … … 1182 1203 { 1183 1204 g= gcd (i.getItem().factor(), j.getItem().factor()); 1184 if (degree (g ) > 0)1205 if (degree (g,1) > 0) 1185 1206 { 1186 1207 j.getItem()= CFFactor (j.getItem().factor()/g, j.getItem().exp()); … … 1220 1241 { 1221 1242 CFListIterator iter1= result; 1222 for (CFListIterator iter2= differentSecondVarFactors[i]; 1243 for (CFListIterator iter2= differentSecondVarFactors[i];iter2.hasItem(); 1223 1244 iter2++, iter1++) 1224 1245 { … … 1233 1254 1234 1255 Variable v; 1235 CFListIterator iter1 ;1256 CFListIterator iter1, iter2; 1236 1257 CanonicalForm tmp, g; 1258 CFList multiplier; 1237 1259 for (int i= 0; i < length; i++) 1238 1260 { … … 1242 1264 iter1++; 1243 1265 1244 v= Variable (i + 3);1245 for ( CFListIteratoriter2= differentSecondVarFactors[i]; iter2.hasItem();1266 tmp= 1; 1267 for (iter2= differentSecondVarFactors[i]; iter2.hasItem(); 1246 1268 iter2++, iter1++) 1247 1269 { 1248 if (degree (iter2.getItem(),v) == degree (iter1.getItem(),v)) 1270 if (iter2.getItem().inCoeffDomain()) 1271 { 1272 multiplier.append (1); 1249 1273 continue; 1250 tmp= iter1.getItem();1251 for (int j= tmp.level(); j > 1; j--)1252 {1253 if (j == i + 3)1254 continue;1255 tmp= tmp (0, j);1274 } 1275 v= iter2.getItem().mvar(); 1276 if (degree (iter2.getItem()) == degree (iter1.getItem(),v)) 1277 { 1278 multiplier.append (1); 1279 continue; 1256 1280 } 1257 1281 g= gcd (iter2.getItem(), content); 1258 if (degree (g) > 0) 1259 { 1260 if (!tmp.isZero()) 1261 iter2.getItem() /= tmp; 1262 content /= g; 1263 iter1.getItem() *= g; 1264 } 1265 } 1282 if (!g.inCoeffDomain()) 1283 { 1284 tmp *= g; 1285 multiplier.append (g); 1286 } 1287 else 1288 multiplier.append (1); 1289 } 1290 if (!tmp.isOne() && fdivides (tmp, content)) 1291 { 1292 iter1= l; 1293 iter1++; 1294 content /= tmp; 1295 for (iter2= multiplier; iter2.hasItem(); iter1++, iter2++) 1296 iter1.getItem() *= iter2.getItem(); 1297 } 1298 multiplier= CFList(); 1266 1299 } 1267 1300 … … 1269 1302 l.insert (content); 1270 1303 return l; 1271 }1272 1273 CFList evaluateAtZero (const CanonicalForm& F)1274 {1275 CFList result;1276 CanonicalForm buf= F;1277 result.insert (buf);1278 for (int i= F.level(); i > 2; i--)1279 {1280 buf= buf (0, i);1281 result.insert (buf);1282 }1283 return result;1284 }1285 1286 CFList evaluateAtEval (const CanonicalForm& F, const CFArray& eval)1287 {1288 CFList result;1289 CanonicalForm buf= F;1290 result.insert (buf);1291 int k= eval.size();1292 for (int i= 1; i < k; i++)1293 {1294 buf= buf (eval[i], i + 2);1295 result.insert (buf);1296 }1297 return result;1298 }1299 1300 CFList evaluateAtEval (const CanonicalForm& F, const CFList& evaluation, int l)1301 {1302 CFList result;1303 CanonicalForm buf= F;1304 result.insert (buf);1305 int k= evaluation.length() + l - 1;1306 CFListIterator j= evaluation;1307 for (int i= k; j.hasItem() && i > l; i--, j++)1308 {1309 if (F.level() < i)1310 continue;1311 buf= buf (j.getItem(), i);1312 result.insert (buf);1313 }1314 return result;1315 1304 } 1316 1305 … … 1348 1337 CanonicalForm test= evalSqrfPartF.getFirst() (evalPoint[0], 2); 1349 1338 1350 if (degree (test) != degree (sqrfPartF, 1) )1339 if (degree (test) != degree (sqrfPartF, 1) || test.inCoeffDomain()) 1351 1340 return 0; 1352 1341 … … 1432 1421 } 1433 1422 1434 CFMap N; 1435 CanonicalForm F= compress (LCF, N); 1423 CFMap N, M; 1424 CFArray dummy= CFArray (2); 1425 dummy [0]= LCF; 1426 dummy [1]= Variable (2); 1427 compress (dummy, M, N); 1428 CanonicalForm F= M (LCF); 1436 1429 if (LCF.isUnivariate()) 1437 1430 { … … 1470 1463 result.insert (Lc (LCF)); 1471 1464 else 1472 result.append (LCF); 1465 { 1466 for (CFListIterator i= result; i.hasItem(); i++) 1467 i.getItem() *= LCF; 1468 result.insert (LCF); 1469 } 1473 1470 return result; 1474 1471 } … … 1476 1473 CFList factors= LCFFactors; 1477 1474 1478 CFMap dummy;1479 1475 for (CFListIterator i= factors; i.hasItem(); i++) 1480 i.getItem()= compress (i.getItem(), dummy);1476 i.getItem()= M (i.getItem()); 1481 1477 1482 1478 CanonicalForm sqrfPartF; … … 1484 1480 CFList evalSqrfPartF, bufFactors; 1485 1481 CFArray evalPoint= CFArray (evaluation.length() - 1); 1482 CFArray buf= CFArray (evaluation.length()); 1483 CFArray swap= CFArray (evaluation.length()); 1486 1484 CFListIterator iter= evaluation; 1487 for (int i= evaluation.length() - 2; i > -1; i--, iter++) 1488 evalPoint[i]= iter.getItem(); 1485 CanonicalForm vars=getVars (LCF)*Variable (2); 1486 for (int i= evaluation.length() +1; i > 1; i--, iter++) 1487 { 1488 buf[i-2]=iter.getItem(); 1489 if (degree (vars, i) > 0) 1490 swap[M(Variable (i)).level()-1]=buf[i-2]; 1491 } 1492 buf= swap; 1493 for (int i= 0; i < evaluation.length() - 1; i++) 1494 evalPoint[i]= buf[i+1]; 1489 1495 1490 1496 int pass= testFactors (F, factors, alpha, sqrfPartF, … … 1498 1504 int lev= 0; 1499 1505 // LCF is non-constant here 1500 for (int i= 1; i <= LCF.level(); i++)1501 {1502 if(degree (LCF, i) > 0)1503 {1504 lev= i - 1;1505 break;1506 }1507 }1508 1506 CFList bufBufFactors; 1509 CanonicalForm bufF, swap; 1510 CFArray buf; 1507 CanonicalForm bufF; 1511 1508 for (int i= 0; i < lSecondVarLCs; i++) 1512 1509 { … … 1520 1517 allConstant= false; 1521 1518 y= Variable (iter.getItem().level()); 1519 lev= M(y).level(); 1522 1520 } 1523 1521 } … … 1529 1527 iter.getItem()= swapvar (iter.getItem(), x, y); 1530 1528 bufF= F; 1531 z= Variable ( y.level() -lev);1529 z= Variable (lev); 1532 1530 bufF= swapvar (bufF, x, z); 1533 1531 bufBufFactors= bufFactors; 1534 1532 evalPoint= CFArray (evaluation.length() - 1); 1535 buf= CFArray (evaluation.length()); 1536 iter= evaluation; 1537 int k= evaluation.length() - 1; 1538 for (; iter.hasItem(); iter++, k--) 1539 buf[k]= iter.getItem(); 1540 swap= buf[z.level() - 1]; 1541 buf[z.level() - 1]= buf[0]; 1542 buf[0]= 0; 1543 int l= 0; 1544 for (k= 0; k < evaluation.length(); k++) 1545 { 1546 if (buf[k].isZero()) 1547 continue; 1548 evalPoint[l]= buf[k]; 1549 l++; 1533 for (int k= 0; k < evaluation.length()-1; k++) 1534 { 1535 if (N (Variable (k+1)).level() != y.level()) 1536 evalPoint[k]= buf[k+1]; 1537 else 1538 evalPoint[k]= buf[0]; 1550 1539 } 1551 1540 pass= testFactors (bufF, bufBufFactors, alpha, sqrfPartF, bufFactors, … … 1589 1578 1590 1579 bufFactors= factors; 1580 1581 CFMap MM, NN; 1582 dummy [0]= sqrfPartF; 1583 dummy [1]= 1; 1584 compress (dummy, MM, NN); 1585 sqrfPartF= MM (sqrfPartF); 1586 CanonicalForm varsSqrfPartF= getVars (sqrfPartF); 1587 for (CFListIterator iter= factors; iter.hasItem(); iter++) 1588 iter.getItem()= MM (iter.getItem()); 1589 1591 1590 CFList evaluation2; 1592 if (y == x) 1593 evaluation2= evaluation; 1594 else 1595 { 1596 CanonicalForm tmp; 1597 evaluation2= evaluation; 1598 int i= evaluation.length() + 1; 1599 for (CFListIterator iter= evaluation2; iter.hasItem(); iter++, i--) 1600 { 1601 if (i == y.level()) 1602 { 1603 tmp= iter.getItem(); 1604 iter.getItem()= evaluation2.getLast(); 1605 evaluation2.removeLast(); 1606 evaluation2.append (tmp); 1607 break; 1608 } 1609 } 1610 } 1591 for (int i= 2; i <= varsSqrfPartF.level(); i++) 1592 evaluation2.insert (evalPoint[NN (Variable (i)).level()-2]); 1611 1593 1612 1594 CFList interMedResult; 1613 1595 CanonicalForm oldSqrfPartF= sqrfPartF; 1614 sqrfPartF= shift2Zero (sqrfPartF, evalSqrfPartF, evaluation2 , 1);1596 sqrfPartF= shift2Zero (sqrfPartF, evalSqrfPartF, evaluation2); 1615 1597 if (factors.length() > 1) 1616 1598 { … … 1620 1602 leadingCoeffs.append (LC1); 1621 1603 1622 CFList LC1eval= evaluateAtEval (LC1, evaluation2, 1);1604 CFList LC1eval= evaluateAtEval (LC1, evaluation2, 2); 1623 1605 CFList oldFactors= factors; 1624 1606 for (CFListIterator i= oldFactors; i.hasItem(); i++) … … 1627 1609 bool success= false; 1628 1610 CanonicalForm oldSqrfPartFPowLC= oldSqrfPartF*power(LC1,factors.length()-1); 1611 CFList heuResult; 1629 1612 if (size (oldSqrfPartFPowLC)/getNumVars (oldSqrfPartFPowLC) < 500 && 1630 1613 LucksWangSparseHeuristic (oldSqrfPartFPowLC, 1631 oldFactors, 1, leadingCoeffs, factors))1632 { 1633 interMedResult= recoverFactors (oldSqrfPartF, factors);1614 oldFactors, 2, leadingCoeffs, heuResult)) 1615 { 1616 interMedResult= recoverFactors (oldSqrfPartF, heuResult); 1634 1617 if (oldFactors.length() == interMedResult.length()) 1635 1618 success= true; … … 1644 1627 1645 1628 for (CFListIterator i= factors; i.hasItem(); i++) 1646 {1647 i.getItem()= i.getItem() (x + evaluation2.getLast(), x);1648 1629 i.getItem() *= LC1 (0,2)/Lc (i.getItem()); 1649 }1650 1630 factors.insert (1); 1651 1631 … … 1691 1671 } 1692 1672 for (CFListIterator iter= factors; iter.hasItem(); iter++) 1693 iter.getItem()= reverseShift (iter.getItem(), evaluation2 , 1);1673 iter.getItem()= reverseShift (iter.getItem(), evaluation2); 1694 1674 1695 1675 interMedResult= 1696 recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2 ,1),1676 recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2), 1697 1677 factors); 1698 1678 } … … 1700 1680 else 1701 1681 { 1702 factors= CFList (oldSqrfPartF); 1682 CanonicalForm contF=content (oldSqrfPartF,1); 1683 factors= CFList (oldSqrfPartF/contF); 1703 1684 interMedResult= recoverFactors (oldSqrfPartF, factors); 1704 1685 } 1686 1687 for (CFListIterator iter= interMedResult; iter.hasItem(); iter++) 1688 iter.getItem()= NN (iter.getItem()); 1705 1689 1706 1690 CFList result; … … 1772 1756 CFList tmp2; 1773 1757 CFListIterator iter; 1758 bool preserveDegree= true; 1759 Variable x= Variable (1); 1760 int j, degAi, degA1= degree (A,1); 1774 1761 for (int i= A.level(); i > 2; i--) 1775 1762 { … … 1777 1764 tmp2= CFList(); 1778 1765 iter= evaluation; 1779 bool preserveDegree= true; 1780 for (int j= A.level(); j > 1; j--, iter++) 1766 preserveDegree= true; 1767 degAi= degree (A,i); 1768 for (j= A.level(); j > 1; j--, iter++) 1781 1769 { 1782 1770 if (j == i) … … 1786 1774 tmp= tmp (iter.getItem(), j); 1787 1775 tmp2.insert (tmp); 1788 if ((degree (tmp, i) != deg ree (A, i)) ||1789 (degree (tmp, 1) != deg ree (A, 1)))1776 if ((degree (tmp, i) != degAi) || 1777 (degree (tmp, 1) != degA1)) 1790 1778 { 1791 1779 preserveDegree= false; 1792 1780 break; 1793 1781 } 1794 if (!content(tmp).inCoeffDomain() || !content(tmp,1).inCoeffDomain()) 1795 { 1796 preserveDegree= false; 1797 break; 1798 } 1799 } 1800 } 1782 } 1783 } 1784 if (!content(tmp,1).inCoeffDomain()) 1785 preserveDegree= false; 1786 if (!(gcd (deriv (tmp,x), tmp)).inCoeffDomain()) 1787 preserveDegree= false; 1801 1788 if (preserveDegree) 1802 1789 Aeval [i - 3]= tmp2; … … 1837 1824 while (T.length() >= 2*s && s <= thres) 1838 1825 { 1839 while (nosubset == false) 1840 { 1841 if (T.length() == s) 1826 while (nosubset == false) 1827 { 1828 if (T.length() == s) 1842 1829 { 1843 1830 delete [] v; … … 1920 1907 } 1921 1908 1909 CFList conv (const CFArray & A) 1910 { 1911 CFList result; 1912 for (int i= A.max(); i >= A.min(); i--) 1913 result.insert (A[i]); 1914 return result; 1915 } 1916 1917 1922 1918 void getLeadingCoeffs (const CanonicalForm& A, CFList*& Aeval, 1919 const CFList& uniFactors, const CFList& evaluation 1920 ) 1921 { 1922 CFListIterator iter; 1923 CFList LCs; 1924 for (int j= 0; j < A.level() - 2; j++) 1925 { 1926 if (!Aeval[j].isEmpty()) 1927 { 1928 LCs= CFList(); 1929 for (iter= Aeval[j]; iter.hasItem(); iter++) 1930 LCs.append (LC (iter.getItem(), 1)); 1931 //normalize (LCs); 1932 Aeval[j]= LCs; 1933 } 1934 } 1935 } 1936 1937 void sortByUniFactors (CFList*& Aeval, int AevalLength, 1923 1938 const CFList& uniFactors, const CFList& evaluation 1924 1939 ) … … 1928 1943 CFListIterator iter, iter2; 1929 1944 Variable v; 1930 CFList l, LCs, buf; 1931 int pos; 1932 for (int j= 0; j < A.level() - 2; j++) 1945 CFList LCs, buf; 1946 CFArray l; 1947 int pos, index; 1948 for (int j= 0; j < AevalLength; j++) 1933 1949 { 1934 1950 if (!Aeval[j].isEmpty()) 1935 1951 { 1936 i= A.level();1952 i= evaluation.length() + 1; 1937 1953 for (iter= evaluation; iter.hasItem(); iter++, i--) 1938 1954 { … … 1950 1966 evalPoint, v); 1951 1967 1952 l= CFList();1953 1968 buf= buildUniFactors (Aeval[j], evalPoint, v); 1954 for (iter= uniFactors; iter.hasItem(); iter++) 1955 { 1956 pos= findItem (buf, iter.getItem()); 1969 l= CFArray (uniFactors.length()); 1970 index= 1; 1971 for (iter= buf; iter.hasItem(); iter++, index++) 1972 { 1973 pos= findItem (uniFactors, iter.getItem()); 1957 1974 if (pos) 1958 l.append (getItem (Aeval[j], pos)); 1959 } 1960 Aeval [j]= l; 1961 1962 LCs= CFList(); 1963 for (iter= Aeval[j]; iter.hasItem(); iter++) 1964 LCs.append (LC (iter.getItem(), 1)); 1965 normalize (LCs); 1966 Aeval[j]= LCs; 1975 l[pos-1]= getItem (Aeval[j], index); 1976 } 1977 buf= conv (l); 1978 Aeval [j]= buf; 1979 1980 buf= buildUniFactors (Aeval[j], evalPoint, v); 1967 1981 } 1968 1982 } … … 2046 2060 j.getItem() *= ii.getItem(); 2047 2061 } 2048 }2049 2050 CFList recoverFactors (const CanonicalForm& F, const CFList& factors)2051 {2052 CFList result;2053 CanonicalForm tmp, tmp2;2054 CanonicalForm G= F;2055 for (CFListIterator i= factors; i.hasItem(); i++)2056 {2057 tmp= i.getItem()/content (i.getItem(), 1);2058 if (fdivides (tmp, G, tmp2))2059 {2060 G= tmp2;2061 result.append (tmp);2062 }2063 }2064 return result;2065 }2066 2067 CFList recoverFactors (const CanonicalForm& F, const CFList& factors,2068 const CFList& evaluation)2069 {2070 CFList result;2071 CanonicalForm tmp, tmp2;2072 CanonicalForm G= F;2073 for (CFListIterator i= factors; i.hasItem(); i++)2074 {2075 tmp= reverseShift (i.getItem(), evaluation);2076 tmp /= content (tmp, 1);2077 if (fdivides (tmp, G, tmp2))2078 {2079 G= tmp2;2080 result.append (tmp);2081 }2082 }2083 return result;2084 2062 } 2085 2063 … … 2269 2247 } 2270 2248 decompress (contentAFactors, N); 2271 normalize (contentAFactors); 2249 if (!extension) 2250 normalize (contentAFactors); 2272 2251 return contentAFactors; 2273 2252 } … … 2318 2297 multiFactorize (gcdDerivZ, info)); 2319 2298 appendSwapDecompress (factorsG, contentAFactors, N, swapLevel, x); 2320 normalize (factorsG); 2299 if (!extension) 2300 normalize (factorsG); 2321 2301 return factorsG; 2322 2302 } … … 2338 2318 CFList biFactors, bufBiFactors; 2339 2319 CanonicalForm evalPoly; 2340 int lift, bufLift ;2320 int lift, bufLift, lengthAeval2= A.level()-2; 2341 2321 double logarithm= (double) ilog2 (totaldegree (A)); 2342 2322 logarithm /= log2exp; … … 2344 2324 if (factorNums < (int) logarithm) 2345 2325 factorNums= (int) logarithm; 2346 CFList* bufAeval2= new CFList [ A.level() -2];2347 CFList* Aeval2= new CFList [ A.level() -2];2326 CFList* bufAeval2= new CFList [lengthAeval2]; 2327 CFList* Aeval2= new CFList [lengthAeval2]; 2348 2328 int counter; 2349 2329 int differentSecondVar= 0; … … 2384 2364 multiFactorize (A/g, info)); 2385 2365 appendSwapDecompress (factorsG, contentAFactors, N, swapLevel, x); 2386 normalize (factorsG); 2366 if (!extension) 2367 normalize (factorsG); 2387 2368 delete [] bufAeval2; 2388 2369 delete [] Aeval2; … … 2402 2383 evaluationWRTDifferentSecondVars (bufAeval2, bufEvaluation, A); 2403 2384 2404 for (int j= 0; j < A.level() -2; j++)2385 for (int j= 0; j < lengthAeval2; j++) 2405 2386 { 2406 2387 if (!bufAeval2[j].isEmpty()) … … 2431 2412 appendSwapDecompress (factors, contentAFactors, N, swapLevel, 2432 2413 swapLevel2, x); 2433 normalize (factors); 2414 if (!extension) 2415 normalize (factors); 2434 2416 delete [] bufAeval2; 2435 2417 delete [] Aeval2; … … 2443 2425 biFactors= bufBiFactors; 2444 2426 lift= bufLift; 2445 for (int j= 0; j < A.level() -2; j++)2427 for (int j= 0; j < lengthAeval2; j++) 2446 2428 Aeval2 [j]= bufAeval2 [j]; 2447 2429 differentSecondVar= counter; … … 2457 2439 biFactors= bufBiFactors; 2458 2440 lift= bufLift; 2459 for (int j= 0; j < A.level() -2; j++)2441 for (int j= 0; j < lengthAeval2; j++) 2460 2442 Aeval2 [j]= bufAeval2 [j]; 2461 2443 differentSecondVar= counter; … … 2474 2456 int minFactorsLength; 2475 2457 bool irred= false; 2476 factorizationWRTDifferentSecondVars (A, Aeval2, info, minFactorsLength, 2458 factorizationWRTDifferentSecondVars (A, Aeval2, info, minFactorsLength,irred); 2477 2459 2478 2460 if (irred) … … 2486 2468 appendSwapDecompress (factors, contentAFactors, N, swapLevel, 2487 2469 swapLevel2, x); 2488 normalize (factors); 2470 if (!extension) 2471 normalize (factors); 2489 2472 delete [] Aeval2; 2490 2473 return factors; … … 2497 2480 minFactorsLength= tmin (minFactorsLength, biFactors.length()); 2498 2481 2499 if (differentSecondVar == A.level() -2)2482 if (differentSecondVar == lengthAeval2) 2500 2483 { 2501 2484 bool zeroOccured= false; … … 2510 2493 if (!zeroOccured) 2511 2494 { 2512 factors= sparseHeuristic (A, biFactors, Aeval2, evaluation, minFactorsLength); 2495 factors= sparseHeuristic (A, biFactors, Aeval2, evaluation, 2496 minFactorsLength); 2513 2497 if (factors.length() == biFactors.length()) 2514 2498 { … … 2518 2502 appendSwapDecompress (factors, contentAFactors, N, swapLevel, 2519 2503 swapLevel2, x); 2520 normalize (factors); 2504 if (!extension) 2505 normalize (factors); 2521 2506 delete [] Aeval2; 2522 2507 return factors; … … 2530 2515 CFList uniFactors= buildUniFactors (biFactors, evaluation.getLast(), y); 2531 2516 2532 CFList * oldAeval= new CFList [A.level() - 2]; //TODO use bufAeval2 for this 2533 for (int i= 0; i < A.level() - 2; i++) 2517 sortByUniFactors (Aeval2, lengthAeval2, uniFactors, evaluation); 2518 2519 CFList * oldAeval= new CFList [lengthAeval2]; //TODO use bufAeval2 for this 2520 for (int i= 0; i < lengthAeval2; i++) 2534 2521 oldAeval[i]= Aeval2[i]; 2535 2522 … … 2542 2529 Variable v; 2543 2530 CFList leadingCoeffs= precomputeLeadingCoeff (LC (A, 1), biFactorsLCs, alpha, 2544 evaluation, Aeval2, A.level() -2, v);2531 evaluation, Aeval2, lengthAeval2, v); 2545 2532 2546 2533 if (v.level() != 1) 2547 2534 { 2548 2535 A= swapvar (A, y, v); 2549 for (int i= 0; i < A.level() - 2; i++)2550 {2551 if (oldAeval[i].isEmpty())2552 continue;2553 if (oldAeval[i].getFirst().level() == v.level())2554 {2555 biFactors= CFList();2556 for (CFListIterator iter= oldAeval [i]; iter.hasItem(); iter++)2557 biFactors.append (swapvar (iter.getItem(), v, y));2558 }2559 }2560 2536 int i= A.level(); 2561 2537 CanonicalForm evalPoint; … … 2569 2545 evaluation.append (evalPoint); 2570 2546 break; 2547 } 2548 } 2549 for (i= 0; i < lengthAeval2; i++) 2550 { 2551 if (oldAeval[i].isEmpty()) 2552 continue; 2553 if (oldAeval[i].getFirst().level() == v.level()) 2554 { 2555 CFArray tmp= copy (oldAeval[i]); 2556 oldAeval[i]= biFactors; 2557 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 2558 iter.getItem()= swapvar (iter.getItem(), v, y); 2559 for (int ii= 0; ii < tmp.size(); ii++) 2560 tmp[ii]= swapvar (tmp[ii], v, y); 2561 CFArray tmp2= CFArray (tmp.size()); 2562 CanonicalForm buf; 2563 for (int ii= 0; ii < tmp.size(); ii++) 2564 { 2565 buf= tmp[ii] (evaluation.getLast(),y); 2566 buf /= Lc (buf); 2567 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 2568 } 2569 biFactors= CFList(); 2570 for (int j= 0; j < tmp2.size(); j++) 2571 biFactors.append (tmp2[j]); 2571 2572 } 2572 2573 } … … 2594 2595 } 2595 2596 2597 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); 2598 bool LCmultiplierIsConst= LCmultiplier.inCoeffDomain(); 2596 2599 leadingCoeffs.removeFirst(); 2597 2600 2598 2601 //prepare leading coefficients 2599 CFList* leadingCoeffs2= new CFList [ A.level() -2];2602 CFList* leadingCoeffs2= new CFList [lengthAeval2]; 2600 2603 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors, 2601 2604 evaluation); 2602 2605 2603 2606 Aeval= evaluateAtEval (A, evaluation, 2); 2604 CanonicalForm hh= Lc (Aeval.getFirst());2607 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 2605 2608 for (iter= Aeval; iter.hasItem(); iter++) 2606 iter.getItem() /= hh; 2607 2608 A /= hh; 2609 2610 if (size (A)/getNumVars (A) < 500 && 2611 LucksWangSparseHeuristic (A, biFactors, 2, leadingCoeffs2 [A.level() - 3], 2612 factors)) 2613 { 2614 int check= factors.length(); 2615 factors= recoverFactors (A, factors); 2609 iter.getItem() *= hh; 2610 2611 A *= hh; 2612 2613 2614 CFListIterator iter2; 2615 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 2616 bufBiFactors= biFactors; 2617 bufA= A; 2618 CanonicalForm bufLCmultiplier= LCmultiplier; 2619 CanonicalForm testVars; 2620 if (!LCmultiplierIsConst) 2621 { 2622 testVars= Variable (2); 2623 for (int i= 0; i < lengthAeval2; i++) 2624 { 2625 if (!oldAeval[i].isEmpty()) 2626 testVars *= oldAeval[i].getFirst().mvar(); 2627 } 2628 } 2629 CFList bufFactors= CFList(); 2630 bool LCheuristic= false; 2631 if (LucksWangSparseHeuristic (A, biFactors, 2, leadingCoeffs2[lengthAeval2-1], 2632 factors)) 2633 { 2634 int check= biFactors.length(); 2635 int * index= new int [factors.length()]; 2636 CFList oldFactors= factors; 2637 factors= recoverFactors (A, factors, index); 2616 2638 2617 2639 if (check == factors.length()) 2618 2640 { 2619 2641 if (extension) 2620 factors= extNonMonicFactorRecombination (factors, A, info);2642 factors= extNonMonicFactorRecombination (factors, bufA, info); 2621 2643 2622 2644 if (v.level() != 1) 2623 2645 { 2624 for ( CFListIteratoriter= factors; iter.hasItem(); iter++)2646 for (iter= factors; iter.hasItem(); iter++) 2625 2647 iter.getItem()= swapvar (iter.getItem(), v, y); 2626 2648 } 2649 2627 2650 appendSwapDecompress (factors, contentAFactors, N, swapLevel, 2628 2651 swapLevel2, x); 2629 normalize (factors); 2652 if (!extension) 2653 normalize (factors); 2654 delete [] index; 2630 2655 delete [] Aeval2; 2631 2656 return factors; 2632 2657 } 2658 else if (factors.length() > 0) 2659 { 2660 int oneCount= 0; 2661 CFList l; 2662 for (int i= 0; i < check; i++) 2663 { 2664 if (index[i] == 1) 2665 { 2666 iter=biFactors; 2667 for (int j=1; j <= i-oneCount; j++) 2668 iter++; 2669 iter.remove (1); 2670 for (int j= 0; j < lengthAeval2; j++) 2671 { 2672 l= leadingCoeffs2[j]; 2673 iter= l; 2674 for (int k=1; k <= i-oneCount; k++) 2675 iter++; 2676 iter.remove (1); 2677 leadingCoeffs2[j]=l; 2678 } 2679 oneCount++; 2680 } 2681 } 2682 bufFactors= factors; 2683 factors= CFList(); 2684 } 2685 else if (!LCmultiplierIsConst && factors.length() == 0) 2686 { 2687 LCheuristic= true; 2688 factors= oldFactors; 2689 CanonicalForm cont; 2690 CFList contents, LCs; 2691 int index=1; 2692 bool foundTrueMultiplier= false; 2693 for (iter= factors; iter.hasItem(); iter++, index++) 2694 { 2695 cont= content (iter.getItem(), 1); 2696 cont= gcd (cont , LCmultiplier); 2697 contents.append (cont); 2698 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 2699 { 2700 foundTrueMultiplier= true; 2701 int index2= 1; 2702 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 2703 index2++) 2704 { 2705 if (index2 == index) 2706 continue; 2707 iter2.getItem() /= LCmultiplier; 2708 } 2709 A= oldA; 2710 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 2711 for (int i= lengthAeval2-1; i > -1; i--) 2712 leadingCoeffs2[i]= CFList(); 2713 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, 2714 biFactors, evaluation ); 2715 Aeval= evaluateAtEval (A, evaluation, 2); 2716 2717 hh= 1/Lc (Aeval.getFirst()); 2718 2719 for (iter2= Aeval; iter2.hasItem(); iter2++) 2720 iter2.getItem() *= hh; 2721 2722 A *= hh; 2723 break; 2724 } 2725 else 2726 LCs.append (LC (iter.getItem()/cont, 1)); 2727 } 2728 if (!foundTrueMultiplier) 2729 { 2730 index= 1; 2731 iter2= factors; 2732 bool foundMultiplier= false; 2733 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2734 { 2735 if (fdivides (iter.getItem(), LCmultiplier)) 2736 { 2737 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 2738 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 2739 { 2740 int index2= 1; 2741 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 2742 iter3.hasItem(); iter3++, index2++) 2743 { 2744 if (index2 == index) 2745 { 2746 iter3.getItem() /= LCmultiplier; 2747 break; 2748 } 2749 } 2750 A /= LCmultiplier; 2751 foundMultiplier= true; 2752 iter.getItem()= 1; 2753 } 2754 } 2755 } 2756 // coming from above: divide out more LCmultiplier if possible 2757 if (foundMultiplier) 2758 { 2759 foundMultiplier= false; 2760 index=1; 2761 iter2= factors; 2762 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2763 { 2764 if (!iter.getItem().isOne() && 2765 fdivides (iter.getItem(), LCmultiplier)) 2766 { 2767 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 2768 { 2769 int index2= 1; 2770 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2771 iter2++, index2++) 2772 { 2773 if (index2 == index) 2774 { 2775 iter2.getItem() /= iter.getItem(); 2776 foundMultiplier= true; 2777 break; 2778 } 2779 } 2780 A /= iter.getItem(); 2781 LCmultiplier /= iter.getItem(); 2782 iter.getItem()= 1; 2783 } 2784 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 2785 { 2786 //TODO maybe use a sqrffree decomposition of LCmultiplier as below 2787 Variable xx= Variable (2); 2788 CanonicalForm vars; 2789 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2790 xx)); 2791 for (int i= 0; i < lengthAeval2; i++) 2792 { 2793 if (oldAeval[i].isEmpty()) 2794 continue; 2795 xx= oldAeval[i].getFirst().mvar(); 2796 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2797 xx)); 2798 } 2799 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 2800 /myGetVars (LCmultiplier) == vars) 2801 { 2802 int index2= 1; 2803 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2804 iter2++, index2++) 2805 { 2806 if (index2 == index) 2807 { 2808 iter2.getItem() /= LCmultiplier; 2809 foundMultiplier= true; 2810 break; 2811 } 2812 } 2813 A /= LCmultiplier; 2814 iter.getItem()= 1; 2815 } 2816 } 2817 } 2818 } 2819 } 2820 else 2821 { 2822 CanonicalForm pLCs= prod (LCs); 2823 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 2824 { 2825 A= oldA; 2826 iter2= leadingCoeffs2[lengthAeval2-1]; 2827 for (iter= contents; iter.hasItem(); iter++, iter2++) 2828 iter2.getItem() /= iter.getItem(); 2829 foundMultiplier= true; 2830 } 2831 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 2832 { 2833 Variable xx; 2834 CFList vars1; 2835 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 2836 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 2837 sqrfMultiplier.removeFirst(); 2838 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 2839 xx= Variable (2); 2840 for (iter= oldBiFactors; iter.hasItem(); iter++) 2841 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 2842 for (int i= 0; i < lengthAeval2; i++) 2843 { 2844 if (oldAeval[i].isEmpty()) 2845 continue; 2846 xx= oldAeval[i].getFirst().mvar(); 2847 iter2= vars1; 2848 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 2849 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx)); 2850 } 2851 CanonicalForm tmp; 2852 iter2= vars1; 2853 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, 2854 iter2++) 2855 { 2856 tmp= iter.getItem()/LCmultiplier; 2857 for (int i=1; i <= tmp.level(); i++) 2858 { 2859 if (degree(tmp,i) > 0 && 2860 (degree(iter2.getItem(),i) > degree (tmp,i))) 2861 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 2862 } 2863 } 2864 int multi; 2865 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 2866 { 2867 multi= 0; 2868 for (iter= vars1; iter.hasItem(); iter++) 2869 { 2870 tmp= iter.getItem(); 2871 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 2872 { 2873 multi++; 2874 tmp /= myGetVars (ii.getItem().factor()); 2875 } 2876 } 2877 if (multi == ii.getItem().exp()) 2878 { 2879 index= 1; 2880 for (iter= vars1; iter.hasItem(); iter++, index++) 2881 { 2882 while (fdivides (myGetVars(ii.getItem().factor()), 2883 iter.getItem() 2884 ) 2885 ) 2886 { 2887 int index2= 1; 2888 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2889 iter2++, index2++) 2890 { 2891 if (index2 == index) 2892 continue; 2893 else 2894 { 2895 tmp= ii.getItem().factor(); 2896 iter2.getItem() /= tmp; 2897 CFListIterator iter3= evaluation; 2898 for (int jj= A.level(); jj > 2; jj--, iter3++) 2899 tmp= tmp (iter3.getItem(), jj); 2900 if (!tmp.inCoeffDomain()) 2901 { 2902 int index3= 1; 2903 for (iter3= biFactors; iter3.hasItem(); iter3++, 2904 index3++) 2905 { 2906 if (index3 == index2) 2907 { 2908 iter3.getItem() /= tmp; 2909 iter3.getItem() /= Lc (iter3.getItem()); 2910 break; 2911 } 2912 } 2913 } 2914 A /= ii.getItem().factor(); 2915 } 2916 } 2917 iter.getItem() /= getVars (ii.getItem().factor()); 2918 } 2919 } 2920 } 2921 else 2922 { 2923 index= 1; 2924 for (iter= vars1; iter.hasItem(); iter++, index++) 2925 { 2926 if (!fdivides (myGetVars (ii.getItem().factor()), 2927 iter.getItem() 2928 ) 2929 ) 2930 { 2931 int index2= 1; 2932 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2933 iter2++, index2++) 2934 { 2935 if (index2 == index) 2936 { 2937 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 2938 iter2.getItem() /= tmp; 2939 A /= tmp; 2940 CFListIterator iter3= evaluation; 2941 for (int jj= A.level(); jj > 2; jj--, iter3++) 2942 tmp= tmp (iter3.getItem(), jj); 2943 if (!tmp.inCoeffDomain()) 2944 { 2945 int index3= 1; 2946 for (iter3= biFactors; iter3.hasItem(); iter3++, 2947 index3++) 2948 { 2949 if (index3 == index2) 2950 { 2951 iter3.getItem() /= tmp; 2952 iter3.getItem() /= Lc (iter3.getItem()); 2953 break; 2954 } 2955 } 2956 } 2957 } 2958 } 2959 } 2960 } 2961 } 2962 } 2963 } 2964 } 2965 2966 // patch everything together again 2967 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 2968 for (int i= lengthAeval2-1; i > -1; i--) 2969 leadingCoeffs2[i]= CFList(); 2970 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 2971 evaluation); 2972 Aeval= evaluateAtEval (A, evaluation, 2); 2973 2974 hh= 1/Lc (Aeval.getFirst()); 2975 2976 for (CFListIterator i= Aeval; i.hasItem(); i++) 2977 i.getItem() *= hh; 2978 2979 A *= hh; 2980 } 2981 factors= CFList(); 2982 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) 2983 { 2984 LCheuristic= false; 2985 A= bufA; 2986 biFactors= bufBiFactors; 2987 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 2988 LCmultiplier= bufLCmultiplier; 2989 } 2990 } 2633 2991 else 2634 2992 factors= CFList(); 2635 //TODO handle this case 2636 } 2637 2993 delete [] index; 2994 } 2995 2996 if (!LCheuristic && !LCmultiplierIsConst && bufFactors.isEmpty() 2997 && fdivides (getVars (LCmultiplier), testVars)) 2998 { 2999 LCheuristic= true; 3000 int index; 3001 Variable xx; 3002 CFList vars1; 3003 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 3004 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 3005 sqrfMultiplier.removeFirst(); 3006 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 3007 xx= Variable (2); 3008 for (iter= oldBiFactors; iter.hasItem(); iter++) 3009 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 3010 for (int i= 0; i < lengthAeval2; i++) 3011 { 3012 if (oldAeval[i].isEmpty()) 3013 continue; 3014 xx= oldAeval[i].getFirst().mvar(); 3015 iter2= vars1; 3016 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 3017 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 3018 } 3019 CanonicalForm tmp; 3020 iter2= vars1; 3021 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++) 3022 { 3023 tmp= iter.getItem()/LCmultiplier; 3024 for (int i=1; i <= tmp.level(); i++) 3025 { 3026 if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i))) 3027 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 3028 } 3029 } 3030 int multi; 3031 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 3032 { 3033 multi= 0; 3034 for (iter= vars1; iter.hasItem(); iter++) 3035 { 3036 tmp= iter.getItem(); 3037 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 3038 { 3039 multi++; 3040 tmp /= myGetVars (ii.getItem().factor()); 3041 } 3042 } 3043 if (multi == ii.getItem().exp()) 3044 { 3045 index= 1; 3046 for (iter= vars1; iter.hasItem(); iter++, index++) 3047 { 3048 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 3049 { 3050 int index2= 1; 3051 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();iter2++, 3052 index2++) 3053 { 3054 if (index2 == index) 3055 continue; 3056 else 3057 { 3058 tmp= ii.getItem().factor(); 3059 iter2.getItem() /= tmp; 3060 CFListIterator iter3= evaluation; 3061 for (int jj= A.level(); jj > 2; jj--, iter3++) 3062 tmp= tmp (iter3.getItem(), jj); 3063 if (!tmp.inCoeffDomain()) 3064 { 3065 int index3= 1; 3066 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 3067 { 3068 if (index3 == index2) 3069 { 3070 iter3.getItem() /= tmp; 3071 iter3.getItem() /= Lc (iter3.getItem()); 3072 break; 3073 } 3074 } 3075 } 3076 A /= ii.getItem().factor(); 3077 } 3078 } 3079 iter.getItem() /= getVars (ii.getItem().factor()); 3080 } 3081 } 3082 } 3083 else 3084 { 3085 index= 1; 3086 for (iter= vars1; iter.hasItem(); iter++, index++) 3087 { 3088 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 3089 { 3090 int index2= 1; 3091 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 3092 index2++) 3093 { 3094 if (index2 == index) 3095 { 3096 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 3097 iter2.getItem() /= tmp; 3098 A /= tmp; 3099 CFListIterator iter3= evaluation; 3100 for (int jj= A.level(); jj > 2; jj--, iter3++) 3101 tmp= tmp (iter3.getItem(), jj); 3102 if (!tmp.inCoeffDomain()) 3103 { 3104 int index3= 1; 3105 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 3106 { 3107 if (index3 == index2) 3108 { 3109 iter3.getItem() /= tmp; 3110 iter3.getItem() /= Lc (iter3.getItem()); 3111 break; 3112 } 3113 } 3114 } 3115 } 3116 } 3117 } 3118 } 3119 } 3120 } 3121 3122 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 3123 for (int i= lengthAeval2-1; i > -1; i--) 3124 leadingCoeffs2[i]= CFList(); 3125 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 3126 evaluation); 3127 Aeval= evaluateAtEval (A, evaluation, 2); 3128 3129 hh= 1/Lc (Aeval.getFirst()); 3130 3131 for (CFListIterator i= Aeval; i.hasItem(); i++) 3132 i.getItem() *= hh; 3133 3134 A *= hh; 3135 3136 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) 3137 { 3138 LCheuristic= false; 3139 A= bufA; 3140 biFactors= bufBiFactors; 3141 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 3142 LCmultiplier= bufLCmultiplier; 3143 } 3144 } 3145 3146 tryAgainWithoutHeu: 2638 3147 A= shift2Zero (A, Aeval, evaluation); 2639 3148 … … 2641 3150 iter.getItem()= iter.getItem () (y + evaluation.getLast(), y); 2642 3151 2643 for (int i= 0; i < A.level() - 2; i++) 2644 { 2645 if (i != A.level() - 3) 2646 leadingCoeffs2[i]= CFList(); 2647 } 2648 for (iter= leadingCoeffs2[A.level() - 3]; iter.hasItem(); iter++) 3152 for (int i= 0; i < lengthAeval2-1; i++) 3153 leadingCoeffs2[i]= CFList(); 3154 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++) 2649 3155 { 2650 3156 iter.getItem()= shift2Zero (iter.getItem(), list, evaluation); 2651 3157 for (int i= A.level() - 4; i > -1; i--) 2652 3158 { 2653 if (i + 1 == A.level() - 3)3159 if (i + 1 == lengthAeval2-1) 2654 3160 leadingCoeffs2[i].append (iter.getItem() (0, i + 4)); 2655 3161 else … … 2677 3183 if (check != factors.length()) 2678 3184 noOneToOne= true; 3185 else 3186 factors= Union (factors, bufFactors); 2679 3187 2680 3188 if (extension && !noOneToOne) … … 2683 3191 if (noOneToOne) 2684 3192 { 3193 3194 if (!LCmultiplierIsConst && LCheuristic) 3195 { 3196 A= bufA; 3197 biFactors= bufBiFactors; 3198 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 3199 delete [] liftBounds; 3200 LCheuristic= false; 3201 goto tryAgainWithoutHeu; 3202 //something probably went wrong in the heuristic 3203 } 3204 2685 3205 A= shift2Zero (oldA, Aeval, evaluation); 2686 3206 biFactors= oldBiFactors; … … 2694 3214 2695 3215 for (; i.hasItem(); i++) 2696 lift= tmax (lift, degree (i.getItem(), 2) + degree (LC (i.getItem(), 1)) + 1); 3216 lift= tmax (lift, 3217 degree (i.getItem(), 2) + degree (LC (i.getItem(), 1)) + 1); 2697 3218 2698 3219 lift= tmax (degree (Aeval.getFirst() , 2) + 1, lift); … … 2761 3282 append (factors, contentAFactors); 2762 3283 decompress (factors, N); 2763 normalize (factors); 3284 if (!extension) 3285 normalize (factors); 2764 3286 2765 3287 delete[] liftBounds; … … 2788 3310 bool extension= true; 2789 3311 int p= getCharacteristic(); 2790 if (p*p < (1<<16)) // pass to GF if possible 3312 if (p < 7) 3313 { 3314 if (p == 2) 3315 setCharacteristic (getCharacteristic(), 6, 'Z'); 3316 else if (p == 3) 3317 setCharacteristic (getCharacteristic(), 4, 'Z'); 3318 else if (p == 5) 3319 setCharacteristic (getCharacteristic(), 3, 'Z'); 3320 ExtensionInfo info= ExtensionInfo (extension); 3321 A= A.mapinto(); 3322 factors= multiFactorize (A, info); 3323 3324 CanonicalForm mipo= gf_mipo; 3325 setCharacteristic (getCharacteristic()); 3326 Variable vBuf= rootOf (mipo.mapinto()); 3327 for (CFListIterator j= factors; j.hasItem(); j++) 3328 j.getItem()= GF2FalphaRep (j.getItem(), vBuf); 3329 } 3330 else if (p >= 7 && p*p < (1<<16)) // pass to GF if possible 2791 3331 { 2792 3332 setCharacteristic (getCharacteristic(), 2, 'Z'); -
factory/facFqFactorize.h
r3aa7f9 r6dffa9 547 547 ); 548 548 549 /// evaluate F successively n-2 at 0550 ///551 /// @return returns a list of successive evaluations of F, ending with F552 CFList evaluateAtZero (const CanonicalForm& F ///< [in] some poly553 );554 555 /// divides factors by their content wrt. Variable(1) and checks if these polys556 /// divide F557 ///558 /// @return returns factors of F559 CFList recoverFactors (const CanonicalForm& F, ///< [in] some poly F560 const CFList& factors ///< [in] some list of561 ///< factor candidates562 );563 564 /// divides factors shifted by evaluation by their content wrt. Variable(1) and565 /// checks if these polys divide F566 ///567 /// @return returns factors of F568 CFList recoverFactors (const CanonicalForm& F, ///< [in] some poly F569 const CFList& factors, ///< [in] some list of570 ///< factor candidates571 const CFList& evaluation572 );573 574 549 /// refine a bivariate factorization of A with l factors to one with 575 550 /// minFactorsLength … … 595 570 ); 596 571 572 573 /// sort bivariate factors in Aeval such that their corresponding univariate 574 /// factors coincide with uniFactors 575 void sortByUniFactors (CFList*& Aeval, ///< [in,out] array of bivariate 576 ///< factors 577 int AevalLength, ///< [in] length of Aeval 578 const CFList& uniFactors,///< [in] univariate factors 579 const CFList& evaluation ///< [in] evaluation point 580 ); 581 597 582 /// extract leading coefficients wrt Variable(1) from bivariate factors obtained 598 583 /// from factorizations of A wrt different second variables … … 655 640 ); 656 641 657 /// evaluate @a F at @a evaluation658 ///659 /// @return @a evaluateAtEval returns a list containing the successive660 /// evaluations of @a F, last entry is @a F again661 CFList662 evaluateAtEval (const CanonicalForm& F, ///<[in] some poly663 const CFArray& evaluation ///<[in] some evaluation point664 );665 666 /// evaluate @a F at @a evaluation667 ///668 /// @return @a evaluateAtEval returns a list containing the successive669 /// evaluations of @a F starting at level @a l, last entry is @a F again670 CFList671 evaluateAtEval (const CanonicalForm& F, ///<[in] some poly672 const CFList& evaluation,///<[in] some evaluation point673 int l ///<[in] level to start at674 );675 676 642 #endif 677 643 /* FAC_FQ_FACTORIZE_H */ -
factory/facFqFactorizeUtil.cc
r3aa7f9 r6dffa9 15 15 #include "canonicalform.h" 16 16 #include "cf_map.h" 17 #include "cf_algorithm.h" 17 18 18 19 static inline … … 157 158 } 158 159 159 160 bool isOnlyLeadingCoeff (const CanonicalForm& F) 161 { 162 return (F-LC (F,1)*power (Variable(1),degree (F,1))).isZero(); 163 } 164 165 /// like getVars but including multiplicities 166 CanonicalForm myGetVars (const CanonicalForm& F) 167 { 168 CanonicalForm result= 1; 169 int deg; 170 for (int i= 1; i <= F.level(); i++) 171 { 172 if ((deg= degree (F, i)) > 0) 173 result *= power (Variable (i), deg); 174 } 175 return result; 176 } 177 178 int compareByNumberOfVars (const CFFactor& F, const CFFactor& G) 179 { 180 return getNumVars (F.factor()) < getNumVars (G.factor()); 181 } 182 183 CFFList 184 sortCFFListByNumOfVars (CFFList& F) 185 { 186 F.sort (compareByNumberOfVars); 187 CFFList result= F; 188 return result; 189 } 190 191 CFList evaluateAtZero (const CanonicalForm& F) 192 { 193 CFList result; 194 CanonicalForm buf= F; 195 result.insert (buf); 196 for (int i= F.level(); i > 2; i--) 197 { 198 buf= buf (0, i); 199 result.insert (buf); 200 } 201 return result; 202 } 203 204 CFList evaluateAtEval (const CanonicalForm& F, const CFArray& eval) 205 { 206 CFList result; 207 CanonicalForm buf= F; 208 result.insert (buf); 209 int k= eval.size(); 210 for (int i= 1; i < k; i++) 211 { 212 buf= buf (eval[i], i + 2); 213 result.insert (buf); 214 } 215 return result; 216 } 217 218 CFList evaluateAtEval (const CanonicalForm& F, const CFList& evaluation, int l) 219 { 220 CFList result; 221 CanonicalForm buf= F; 222 result.insert (buf); 223 int k= evaluation.length() + l - 1; 224 CFListIterator j= evaluation; 225 for (int i= k; j.hasItem() && i > l; i--, j++) 226 { 227 if (F.level() < i) 228 continue; 229 buf= buf (j.getItem(), i); 230 result.insert (buf); 231 } 232 return result; 233 } 234 235 236 CFList recoverFactors (const CanonicalForm& F, const CFList& factors) 237 { 238 CFList result; 239 CanonicalForm tmp, tmp2; 240 CanonicalForm G= F; 241 for (CFListIterator i= factors; i.hasItem(); i++) 242 { 243 tmp= i.getItem()/content (i.getItem(), 1); 244 if (fdivides (tmp, G, tmp2)) 245 { 246 G= tmp2; 247 result.append (tmp); 248 } 249 } 250 if (result.length() + 1 == factors.length()) 251 result.append (G/content (G,1)); 252 return result; 253 } 254 255 CFList recoverFactors (const CanonicalForm& F, const CFList& factors, 256 const CFList& evaluation) 257 { 258 CFList result; 259 CanonicalForm tmp, tmp2; 260 CanonicalForm G= F; 261 for (CFListIterator i= factors; i.hasItem(); i++) 262 { 263 tmp= reverseShift (i.getItem(), evaluation, 2); 264 tmp /= content (tmp, 1); 265 if (fdivides (tmp, G, tmp2)) 266 { 267 G= tmp2; 268 result.append (tmp); 269 } 270 } 271 if (result.length() + 1 == factors.length()) 272 result.append (G/content (G,1)); 273 return result; 274 } 275 276 CFList recoverFactors (CanonicalForm& F, const CFList& factors, int* index) 277 { 278 CFList result; 279 CanonicalForm tmp, tmp2; 280 CanonicalForm G= F; 281 int j= 0; 282 for (CFListIterator i= factors; i.hasItem(); i++, j++) 283 { 284 if (i.getItem().isZero()) 285 { 286 index[j]= 0; 287 continue; 288 } 289 tmp= i.getItem(); 290 if (fdivides (tmp, G, tmp2)) 291 { 292 G= tmp2; 293 tmp /=content (tmp, 1); 294 result.append (tmp); 295 index[j]= 1; 296 } 297 else 298 index[j]= 0; 299 } 300 if (result.length() + 1 == factors.length()) 301 { 302 result.append (G/content (G,1)); 303 F= G/content (G,1); 304 } 305 else 306 F= G; 307 return result; 308 } -
factory/facFqFactorizeUtil.h
r3aa7f9 r6dffa9 121 121 ); 122 122 123 /// check if @F consists of more than just the leading coeff wrt. Variable (1) 124 /// 125 /// @return as described above 126 bool isOnlyLeadingCoeff (const CanonicalForm& F ///< [in] some poly 127 ); 128 129 /// sort CFFList by the number variables in a factor 130 CFFList sortCFFListByNumOfVars (CFFList & F ///< [in,out] a list of factors 131 ); 132 133 /// like getVars but each variable x occuring in @F is raised to x^degree (F,x) 134 CanonicalForm myGetVars (const CanonicalForm& F ///< [in] a polynomial 135 ); 136 137 /// evaluate @a F at @a evaluation 138 /// 139 /// @return @a evaluateAtEval returns a list containing the successive 140 /// evaluations of @a F, last entry is @a F again 141 CFList 142 evaluateAtEval (const CanonicalForm& F, ///<[in] some poly 143 const CFArray& evaluation ///<[in] some evaluation point 144 ); 145 146 /// evaluate @a F at @a evaluation 147 /// 148 /// @return @a evaluateAtEval returns a list containing the successive 149 /// evaluations of @a F starting at level @a l, last entry is @a F again 150 CFList 151 evaluateAtEval (const CanonicalForm& F, ///<[in] some poly 152 const CFList& evaluation,///<[in] some evaluation point 153 int l ///<[in] level to start at 154 ); 155 156 /// evaluate F successively n-2 at 0 157 /// 158 /// @return returns a list of successive evaluations of F, ending with F 159 CFList evaluateAtZero (const CanonicalForm& F ///< [in] some poly 160 ); 161 162 /// divides factors by their content wrt. Variable(1) and checks if these polys 163 /// divide F 164 /// 165 /// @return returns factors of F 166 CFList recoverFactors (const CanonicalForm& F, ///< [in] some poly F 167 const CFList& factors ///< [in] some list of 168 ///< factor candidates 169 ); 170 171 /// divides factors shifted by evaluation by their content wrt. Variable(1) and 172 /// checks if these polys divide F 173 /// 174 /// @return returns factors of F 175 CFList recoverFactors (const CanonicalForm& F, ///< [in] some poly F 176 const CFList& factors, ///< [in] some list of 177 ///< factor candidates 178 const CFList& evaluation ///< [in] evaluation point 179 ); 180 181 /// checks if factors divide F, if so F is divided by this factor and the factor 182 /// is divided by its content wrt. Variable(1) and the entry in index at the 183 /// position of the factor is set to 1, otherwise the entry in index is set to 0 184 /// 185 /// @return returns factors of F 186 CFList recoverFactors (CanonicalForm& F, ///< [in,out] some poly F 187 const CFList& factors,///< [in] some list of 188 ///< factor candidates 189 int* index ///< [in] position of real factors 190 ); 191 123 192 #endif 124 193 /* FAC_FQ_FACTORIZE_UTIL_H */ -
factory/facIrredTest.cc
-
Property
mode
changed from
100755
to100644
-
Property
mode
changed from
-
factory/facIrredTest.h
-
Property
mode
changed from
100755
to100644
-
Property
mode
changed from
-
factory/facMul.cc
r3aa7f9 r6dffa9 2195 2195 if (F.inCoeffDomain() || G.inCoeffDomain()) 2196 2196 return F*G; 2197 2198 if (size (F) / MOD.length() < 100 || size (G) / MOD.length() < 100) 2199 return mod (F*G, MOD); 2200 2197 2201 Variable y= M.mvar(); 2198 2202 int degF= degree (F, y); -
factory/facSparseHensel.cc
r3aa7f9 r6dffa9 21 21 #include "facFqFactorize.h" 22 22 23 bool 23 int 24 24 LucksWangSparseHeuristic (const CanonicalForm& F, const CFList& factors, 25 25 int level, const CFList& leadingCoeffs, CFList& result) … … 66 66 delete [] monomsLead; 67 67 68 CFArray termsF= getTerms (F); 69 sort (termsF); 68 CFArray termsF= getBiTerms (F); 69 if (termsF.size() > 450) 70 { 71 delete [] monoms; 72 return 0; 73 } 74 sort (termsF, level); 70 75 71 76 CFList tmp; … … 80 85 CanonicalForm H= prod (tmp); 81 86 CFArray monomsH= getMonoms (H); 82 sort (monomsH); 83 84 groupTogether (termsF, level); 87 sort (monomsH,F.level()); 88 85 89 groupTogether (monomsH, F.level()); 86 90 … … 88 92 { 89 93 delete [] stripped2; 90 return false;94 return 0; 91 95 } 92 96 … … 99 103 { 100 104 delete [] stripped2; 101 return false;105 return 0; 102 106 } 103 107 104 108 CFArray A= getEquations (monomsH, termsF); 109 CFArray startingSolution= solution; 105 110 CFArray newSolution= CFArray (solution.size()); 111 result= CFList(); 106 112 do 107 113 { … … 112 118 { 113 119 delete [] stripped2; 114 return false;120 return 0; 115 121 } 116 122 if (isZero (newSolution)) 117 { 118 delete [] stripped2; 119 return false; 120 } 123 break; 121 124 if (!merge (solution, newSolution)) 122 { 123 delete [] stripped2; 124 return false; 125 } 125 break; 126 126 } while (1); 127 127 128 129 result= CFList(); 128 if (isEqual (startingSolution, solution)) 129 { 130 delete [] stripped2; 131 return 0; 132 } 130 133 CanonicalForm factor; 131 134 num= 0; … … 135 138 factor= 0; 136 139 for (j= 0; j < k; j++, num++) 140 { 141 if (solution [num].isZero()) 142 continue; 137 143 factor += solution [num]*stripped2[i][j]; 144 } 138 145 result.append (factor); 139 146 } 140 147 141 148 delete [] stripped2; 142 return true; 149 if (result.length() > 0) 150 return 1; 151 return 0; 143 152 } 144 153 -
factory/facSparseHensel.h
r3aa7f9 r6dffa9 18 18 #include "cf_iter.h" 19 19 #include "templates/ftmpl_functions.h" 20 #include "cf_algorithm.h" 21 #include "cf_map.h" 20 22 21 23 /// compare polynomials … … 81 83 /// quick sort helper function 82 84 inline 83 void quickSort (int lo, int hi, CFArray& A )85 void quickSort (int lo, int hi, CFArray& A, int l) 84 86 { 85 87 int i= lo, j= hi; … … 87 89 while (i <= j) 88 90 { 89 while (comp (A [i], tmp) < 0 && i < hi) i++; 90 while (comp (tmp, A[j]) < 0 && j > lo) j--; 91 if (l > 0) 92 { 93 while (comp (A [i], tmp, l) < 0 && i < hi) i++; 94 while (comp (tmp, A[j], l) < 0 && j > lo) j--; 95 } 96 else 97 { 98 while (comp (A [i], tmp) < 0 && i < hi) i++; 99 while (comp (tmp, A[j]) < 0 && j > lo) j--; 100 } 91 101 if (i <= j) 92 102 { … … 96 106 } 97 107 } 98 if (lo < j) quickSort (lo, j, A );99 if (i < hi) quickSort (i, hi, A );108 if (lo < j) quickSort (lo, j, A, l); 109 if (i < hi) quickSort (i, hi, A, l); 100 110 } 101 111 102 112 /// quick sort @a A 103 113 inline 104 void sort (CFArray& A) 105 { 106 quickSort (0, A.size() - 1, A); 107 } 114 void sort (CFArray& A, int l= 0) 115 { 116 quickSort (0, A.size() - 1, A, l); 117 } 118 108 119 109 120 /// find normalizing factors for @a biFactors and build monic univariate factors … … 187 198 } 188 199 200 /// helper function for getBiTerms 201 inline CFArray 202 getBiTerms_helper (const CanonicalForm& F, const CFMap& M) 203 { 204 CFArray buf= CFArray (size (F)); 205 int k= 0, level= F.level() - 1; 206 Variable x= F.mvar(); 207 Variable y= Variable (F.level() - 1); 208 Variable one= Variable (1); 209 Variable two= Variable (2); 210 CFIterator j; 211 for (CFIterator i= F; i.hasTerms(); i++) 212 { 213 if (i.coeff().level() < level) 214 { 215 buf[k]= M (i.coeff())*power (one,i.exp()); 216 k++; 217 continue; 218 } 219 j= i.coeff(); 220 for (;j.hasTerms(); j++, k++) 221 buf[k]= power (one,i.exp())*power (two,j.exp())*M (j.coeff()); 222 } 223 CFArray result= CFArray (k); 224 for (int i= 0; i < k; i++) 225 result[i]= buf[i]; 226 return result; 227 } 228 229 /// get terms of @a F where F is considered a bivariate poly in Variable(1), 230 /// Variable (2) 231 inline CFArray 232 getBiTerms (const CanonicalForm& F) 233 { 234 if (F.inCoeffDomain()) 235 { 236 CFArray result= CFArray (1); 237 result [0]= F; 238 return result; 239 } 240 if (F.isUnivariate()) 241 { 242 CFArray result= CFArray (size(F)); 243 int j= 0; 244 for (CFIterator i= F; i.hasTerms(); i++, j++) 245 result[j]= i.coeff()*power (F.mvar(), i.exp()); 246 return result; 247 } 248 249 CanonicalForm G= F; 250 251 CFMap M; 252 M.newpair (Variable (1), F.mvar()); 253 M.newpair (Variable (2), Variable (F.level() - 1)); 254 G= swapvar (F, Variable (1), F.mvar()); 255 G= swapvar (G, Variable (2), Variable (F.level() - 1)); 256 257 CFArray result= getBiTerms_helper (G, M); 258 return result; 259 } 260 189 261 /// build a poly from entries in @a A 190 262 inline CanonicalForm … … 197 269 } 198 270 199 /// group together elements in @a A, where entries in @a A are put puttogether271 /// group together elements in @a A, where entries in @a A are put together 200 272 /// if they coincide up to level @a level 201 273 inline void … … 213 285 } 214 286 } 287 if (A[n].isZero()) 288 k--; 215 289 CFArray B= CFArray (k); 216 290 n++; … … 509 583 /// 510 584 /// @return @a LucksWangSparseHeuristic returns true if it was successful 511 bool 585 int 512 586 LucksWangSparseHeuristic (const CanonicalForm& F, ///<[in] polynomial to be 513 587 ///< factored -
factory/fac_ezgcd.cc
r3aa7f9 r6dffa9 559 559 Db = Dbt; Fb = Fbt; Gb = Gbt; 560 560 } 561 }562 DEBOUTLN( cerr, "now after A4, delta = " << delta );563 /// ---> A5564 if (delta == degF)565 {566 if (degF <= degG && fdivides (F, G))567 {568 DEBDECLEVEL( cerr, "ezgcd" );569 if (!isRat)570 Off (SW_RATIONAL);571 return N (d*F);572 }573 else574 delta--;575 }576 else if (delta == degG)577 {578 if (degG <= degF && fdivides( G, F ))579 {580 DEBDECLEVEL( cerr, "ezgcd" );581 if (!isRat)582 Off (SW_RATIONAL);583 return N (d*G);584 }585 else586 delta--;561 DEBOUTLN( cerr, "now after A4, delta = " << delta ); 562 /// ---> A5 563 if (delta == degF) 564 { 565 if (degF <= degG && fdivides (F, G)) 566 { 567 DEBDECLEVEL( cerr, "ezgcd" ); 568 if (!isRat) 569 Off (SW_RATIONAL); 570 return N (d*F); 571 } 572 else 573 delta--; 574 } 575 else if (delta == degG) 576 { 577 if (degG <= degF && fdivides( G, F )) 578 { 579 DEBDECLEVEL( cerr, "ezgcd" ); 580 if (!isRat) 581 Off (SW_RATIONAL); 582 return N (d*G); 583 } 584 else 585 delta--; 586 } 587 587 } 588 588 if ( delta != degF && delta != degG ) -
factory/fac_sqrfree.cc
r3aa7f9 r6dffa9 160 160 CFFList F; 161 161 Variable v = aa.mvar(); 162 CanonicalForm lcinv; 162 163 while ( ! c.degree(v) == 0 ) 163 164 { … … 167 168 if (isOn (SW_RATIONAL)) 168 169 { 169 z /= Lc (z); 170 lcinv= 1/Lc (z); 171 z *= lcinv; 170 172 z *= bCommonDen (z); 171 173 } … … 181 183 if (isOn (SW_RATIONAL)) 182 184 { 183 w /= Lc (w); 185 lcinv= 1/Lc (w); 186 w *= lcinv; 184 187 w *= bCommonDen (w); 185 188 } -
factory/int_poly.cc
r3aa7f9 r6dffa9 2227 2227 InternalPoly::reduceTermList ( termList first, termList redterms, termList & last ) 2228 2228 { 2229 CanonicalForm coeff = redterms->coeff;2229 CanonicalForm coeff = CanonicalForm (1)/redterms->coeff; 2230 2230 CanonicalForm newcoeff; 2231 2231 int newexp; … … 2234 2234 while ( first && ( first->exp >= exp ) ) 2235 2235 { 2236 newcoeff = first->coeff /coeff;2236 newcoeff = first->coeff * coeff; 2237 2237 newexp = first->exp - exp; 2238 2238 dummy = first; -
factory/singext.h
r3aa7f9 r6dffa9 9 9 #include <factory/cf_gmp.h> 10 10 11 extern FILE * feFopen ( const char * path, const char * mode); 11 #include <findexec/feFopen.h> 12 12 13 13 /*BEGINPUBLIC*/ -
factory/test.cc
r3aa7f9 r6dffa9 1 1 #include <factory/factory.h> 2 #include <findexec/feFopen.h> 2 3 3 4 int mmInit(void) { … … 14 15 Expected in: flat namespace 15 16 */ 16 extern FILE * feFopen ( const char * path, const char * mode);17 17 const int f = (int)(long)(void*)feFopen; 18 18 return (f ^ f) + 1; -
findexec/Makefile.am
r3aa7f9 r6dffa9 8 8 9 9 libfindexec_LTLIBRARIES = libfindexec.la ${LIB_G} 10 libfindexecdir = $(libdir)/ singular10 libfindexecdir = $(libdir)/ 11 11 12 12 CXXTEMPLFLAGS = … … 30 30 libfindexec_g_la_SOURCES = $(SOURCES) 31 31 32 libfindexec_includedir =$(includedir)/ singular/findexec/32 libfindexec_includedir =$(includedir)/findexec/ 33 33 34 34 libfindexec_include_HEADERS = omFindExec.h feResource.h feFopen.h -
findexec/configure.ac
r3aa7f9 r6dffa9 58 58 SING_CHECK_PIPE 59 59 60 AC_ARG_ENABLE(debug, AS_HELP_STRING([-- disable-debug], [do NOTbuild the debugging version of the libraries]),60 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [build the debugging version of the libraries]), 61 61 [if test "x$enableval" = "xyes"; then 62 62 ENABLE_DEBUG=yes -
findexec/feFopen.cc
r3aa7f9 r6dffa9 151 151 } 152 152 153 FILE * feFopen(const char *path, const char *mode)154 {155 return feFopen (path, mode, 0,0,0);156 }157 158 153 // Make sure that mode contains binary option 159 154 FILE* myfopen(const char *path, const char *mode) -
findexec/feFopen.h
r3aa7f9 r6dffa9 9 9 #ifdef __cplusplus 10 10 11 FILE*feFopen(const char *path, const char *mode, char *where, short useWerror=0, short path_only=0); 12 FILE*feFopen(const char *path, const char *mode); 11 #include <stdio.h> 12 13 FILE*feFopen(const char *path, const char *mode, char *where=0, short useWerror=0, short path_only=0); 14 13 15 /* 14 16 // These are our versions of fopen and fread They are very similar to … … 19 21 // do never use fopen and fread 20 22 */ 21 22 23 FILE *myfopen(const char *path, const char *mode); 23 24 24 size_t myfread(void *ptr, size_t size, size_t nmemb, FILE *stream); 25 25 -
libpolys/coeffs/Makefile.am
r3aa7f9 r6dffa9 10 10 endif 11 11 12 lib _LTLIBRARIES = libcoeffs.la ${LIB_G}12 libcoeffs_LTLIBRARIES = libcoeffs.la ${LIB_G} 13 13 libcoeffsdir = $(libdir)/singular 14 14 -
libpolys/coeffs/longrat.cc
r3aa7f9 r6dffa9 69 69 #endif 70 70 71 /*-----------------------------------------------------------------*/ 72 /*3 73 * parameter s in number: 74 * 0 (or FALSE): not normalised rational 75 * 1 (or TRUE): normalised rational 76 * 3 : integer with n==NULL 77 */ 78 /*3 79 ** 'SR_INT' is the type of those integers small enough to fit into 29 bits. 80 ** Therefor the value range of this small integers is: $-2^{28}...2^{28}-1$. 81 ** 82 ** Small integers are represented by an immediate integer handle, containing 83 ** the value instead of pointing to it, which has the following form: 84 ** 85 ** +-------+-------+-------+-------+- - - -+-------+-------+-------+ 86 ** | guard | sign | bit | bit | | bit | tag | tag | 87 ** | bit | bit | 27 | 26 | | 0 | 0 | 1 | 88 ** +-------+-------+-------+-------+- - - -+-------+-------+-------+ 89 ** 90 ** Immediate integers handles carry the tag 'SR_INT', i.e. the last bit is 1. 91 ** This distuingishes immediate integers from other handles which point to 92 ** structures aligned on 4 byte boundaries and therefor have last bit zero. 93 ** (The second bit is reserved as tag to allow extensions of this scheme.) 94 ** Using immediates as pointers and dereferencing them gives address errors. 95 ** 96 ** To aid overflow check the most significant two bits must always be equal, 97 ** that is to say that the sign bit of immediate integers has a guard bit. 98 ** 99 ** The macros 'INT_TO_SR' and 'SR_TO_INT' should be used to convert between 100 ** a small integer value and its representation as immediate integer handle. 101 ** 102 ** Large integers and rationals are represented by z and n 103 ** where n may be undefined (if s==3) 104 ** NULL represents only deleted values 105 */ 106 #define SR_HDL(A) ((long)(A)) 71 //#define SR_HDL(A) ((long)(A)) 107 72 /*#define SR_INT 1L*/ 108 73 /*#define INT_TO_SR(INT) ((number) (((long)INT << 2) + SR_INT))*/ -
libpolys/coeffs/longrat.h
r3aa7f9 r6dffa9 13 13 #include <coeffs/coeffs.h> 14 14 15 struct snumber; 16 typedef struct snumber *number; 17 18 /*-----------------------------------------------------------------*/ 19 /** 20 ** 'SR_INT' is the type of those integers small enough to fit into 29 bits. 21 ** Therefor the value range of this small integers is: $-2^{28}...2^{28}-1$. 22 ** 23 ** Small integers are represented by an immediate integer handle, containing 24 ** the value instead of pointing to it, which has the following form: 25 ** 26 ** +-------+-------+-------+-------+- - - -+-------+-------+-------+ 27 ** | guard | sign | bit | bit | | bit | tag | tag | 28 ** | bit | bit | 27 | 26 | | 0 | 0 | 1 | 29 ** +-------+-------+-------+-------+- - - -+-------+-------+-------+ 30 ** 31 ** Immediate integers handles carry the tag 'SR_INT', i.e. the last bit is 1. 32 ** This distuingishes immediate integers from other handles which point to 33 ** structures aligned on 4 byte boundaries and therefor have last bit zero. 34 ** (The second bit is reserved as tag to allow extensions of this scheme.) 35 ** Using immediates as pointers and dereferencing them gives address errors. 36 ** 37 ** To aid overflow check the most significant two bits must always be equal, 38 ** that is to say that the sign bit of immediate integers has a guard bit. 39 ** 40 ** The macros 'INT_TO_SR' and 'SR_TO_INT' should be used to convert between 41 ** a small integer value and its representation as immediate integer handle. 42 ** 43 ** Large integers and rationals are represented by z and n 44 ** where n may be undefined (if s==3) 45 ** NULL represents only deleted values 46 */ 47 48 struct snumber 49 { 50 mpz_t z; //< Zaehler 51 mpz_t n; //< Nenner 52 #if defined(LDEBUG) 53 int debug; 54 #endif 55 56 /** 57 * parameter s in number: 58 * 0 (or FALSE): not normalised rational 59 * 1 (or TRUE): normalised rational 60 * 3 : integer with n==NULL 61 **/ 62 BOOLEAN s; //< integer parameter 63 }; 64 15 65 #define SR_HDL(A) ((long)(A)) 16 66 … … 22 72 23 73 24 struct snumber;25 typedef struct snumber *number;26 struct snumber27 {28 mpz_t z;29 mpz_t n;30 #if defined(LDEBUG)31 int debug;32 #endif33 BOOLEAN s;34 };35 74 36 75 // allow inlining only from p_Numbers.h and if ! LDEBUG -
libpolys/configure.ac
r3aa7f9 r6dffa9 109 109 fi 110 110 111 if test "x$prefix" != xNONE; then112 PREFIX="$prefix"113 else114 PREFIX="$ac_default_prefix"115 fi111 #if test "x$prefix" != xNONE; then 112 # PREFIX="$prefix" 113 #else 114 # PREFIX="$ac_default_prefix" 115 #fi 116 116 117 AC_ARG_ENABLE(debug, AS_HELP_STRING([-- disable-debug], [do NOTbuild the debugging version of the libraries]),117 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [build the debugging version of the libraries]), 118 118 [if test "x$enableval" = "xyes"; then 119 119 ENABLE_DEBUG=yes … … 123 123 124 124 # AC_SUBST(PREFIX) 125 AC_DEFINE_UNQUOTED(INSTALL_PREFIX,"$PREFIX",Prefix)125 # AC_DEFINE_UNQUOTED(INSTALL_PREFIX,"$PREFIX",Prefix) 126 126 127 127 AC_DEFINE([SINGULAR],[1],[SINGULAR]) -
libpolys/libpolys-config.in
r3aa7f9 r6dffa9 1 1 #! /bin/bash 2 2 3 prefix=@prefix@ 3 #C="$0" 4 #C=`readlink -f "$C"` 5 #C=`dirname "$C"` 6 #C=`ls -d1 "$C"` 7 8 # NOTE: if you moved this config please either use the above or 9 # make sure the following variables are up to date 10 prefix=@prefix@ 4 11 exec_prefix=@exec_prefix@ 5 12 includedir=@includedir@ -
libpolys/misc/Makefile.am
r3aa7f9 r6dffa9 10 10 endif 11 11 12 lib _LTLIBRARIES = libmisc.la ${LIB_G}12 libmisc_LTLIBRARIES = libmisc.la ${LIB_G} 13 13 libmiscdir = $(libdir)/singular 14 14 -
libpolys/reporter/Makefile.am
r3aa7f9 r6dffa9 10 10 endif 11 11 12 lib _LTLIBRARIES = libreporter.la ${LIB_G}12 libreporter_LTLIBRARIES = libreporter.la ${LIB_G} 13 13 libreporterdir = $(libdir)/singular 14 14 -
libsingular-config.in
r3aa7f9 r6dffa9 1 1 #! /bin/bash 2 2 3 prefix=@prefix@ 3 #C="$0" 4 #C=`readlink -f "$C"` 5 #C=`dirname "$C"` 6 #C=`ls -d1 "$C"` 7 8 # NOTE: if you moved this config please either use the above or 9 # make sure the following variables are up to date 10 prefix=@prefix@ 4 11 exec_prefix=@exec_prefix@ 5 12 includedir=@includedir@ -
omalloc/configure.ac
r3aa7f9 r6dffa9 24 24 dnl help for configure 25 25 dnl 26 AC_ARG_ENABLE(debug, AS_HELP_STRING([-- disable-debug], [do NOTbuild the debugging version of the libraries]),26 AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [build the debugging version of the libraries]), 27 27 [if test "x$enableval" = "xyes"; then 28 28 ENABLE_DEBUG=yes -
xalloc/Makefile.am
r3aa7f9 r6dffa9 7 7 endif 8 8 9 lib omalloc_LTLIBRARIES=libomalloc.la ${LIB_G}10 libomallocdir = $(libdir)/9 lib_LTLIBRARIES=libomalloc.la ${LIB_G} 10 ## libomallocdir = $(libdir)/ 11 11 12 12 libomalloc_includedir=$(includedir)/omalloc -
xalloc/configure.ac
r3aa7f9 r6dffa9 5 5 6 6 AM_MAINTAINER_MODE 7 AM_INIT_AUTOMAKE([-Wall foreign subdir-objects -Werror silent-rules -Wno-extra-portability])7 AM_INIT_AUTOMAKE([-Wall foreign subdir-objects silent-rules]) # -Wno-extra-portability -Werror 8 8 9 9 AC_PROG_MAKE_SET … … 20 20 LT_INIT 21 21 22 AM_CONDITIONAL(WANT_DEBUG, test x"${ENABLE_DEBUG}" == xyes) 23 22 24 AC_CONFIG_FILES([Makefile]) 23 25 AC_OUTPUT
Note: See TracChangeset
for help on using the changeset viewer.