private static final long10 mul(long10 xy, long10 x, long10 y) {
		/* sahn0:
		 * Using local variables to avoid class access.
		 * This seem to improve performance a bit...
		 */
		long
			x_0=x._0,x_1=x._1,x_2=x._2,x_3=x._3,x_4=x._4,
			x_5=x._5,x_6=x._6,x_7=x._7,x_8=x._8,x_9=x._9;
		long
			y_0=y._0,y_1=y._1,y_2=y._2,y_3=y._3,y_4=y._4,
			y_5=y._5,y_6=y._6,y_7=y._7,y_8=y._8,y_9=y._9;
		long t;
		t = (x_0*y_8) + (x_2*y_6) + (x_4*y_4) + (x_6*y_2) +
			(x_8*y_0) + 2 * ((x_1*y_7) + (x_3*y_5) +
					(x_5*y_3) + (x_7*y_1)) + 38 *
			(x_9*y_9);
		xy._8 = (t & ((1 << 26) - 1));
		t = (t >> 26) + (x_0*y_9) + (x_1*y_8) + (x_2*y_7) +
			(x_3*y_6) + (x_4*y_5) + (x_5*y_4) +
			(x_6*y_3) + (x_7*y_2) + (x_8*y_1) +
			(x_9*y_0);
		xy._9 = (t & ((1 << 25) - 1));
		t = (x_0*y_0) + 19 * ((t >> 25) + (x_2*y_8) + (x_4*y_6)
				+ (x_6*y_4) + (x_8*y_2)) + 38 *
			((x_1*y_9) + (x_3*y_7) + (x_5*y_5) +
			 (x_7*y_3) + (x_9*y_1));
		xy._0 = (t & ((1 << 26) - 1));
		t = (t >> 26) + (x_0*y_1) + (x_1*y_0) + 19 * ((x_2*y_9)
				+ (x_3*y_8) + (x_4*y_7) + (x_5*y_6) +
				(x_6*y_5) + (x_7*y_4) + (x_8*y_3) +
				(x_9*y_2));
		xy._1 = (t & ((1 << 25) - 1));
		t = (t >> 25) + (x_0*y_2) + (x_2*y_0) + 19 * ((x_4*y_8)
				+ (x_6*y_6) + (x_8*y_4)) + 2 * (x_1*y_1)
				+ 38 * ((x_3*y_9) + (x_5*y_7) +
						(x_7*y_5) + (x_9*y_3));
		xy._2 = (t & ((1 << 26) - 1));
		t = (t >> 26) + (x_0*y_3) + (x_1*y_2) + (x_2*y_1) +
			(x_3*y_0) + 19 * ((x_4*y_9) + (x_5*y_8) +
					(x_6*y_7) + (x_7*y_6) +
					(x_8*y_5) + (x_9*y_4));
		xy._3 = (t & ((1 << 25) - 1));
		t = (t >> 25) + (x_0*y_4) + (x_2*y_2) + (x_4*y_0) + 19 *
			((x_6*y_8) + (x_8*y_6)) + 2 * ((x_1*y_3) +
								 (x_3*y_1)) + 38 *
			((x_5*y_9) + (x_7*y_7) + (x_9*y_5));
		xy._4 = (t & ((1 << 26) - 1));
		t = (t >> 26) + (x_0*y_5) + (x_1*y_4) + (x_2*y_3) +
			(x_3*y_2) + (x_4*y_1) + (x_5*y_0) + 19 *
			((x_6*y_9) + (x_7*y_8) + (x_8*y_7) +
			 (x_9*y_6));
		xy._5 = (t & ((1 << 25) - 1));
		t = (t >> 25) + (x_0*y_6) + (x_2*y_4) + (x_4*y_2) +
			(x_6*y_0) + 19 * (x_8*y_8) + 2 * ((x_1*y_5) +
					(x_3*y_3) + (x_5*y_1)) + 38 *
			((x_7*y_9) + (x_9*y_7));
		xy._6 = (t & ((1 << 26) - 1));
		t = (t >> 26) + (x_0*y_7) + (x_1*y_6) + (x_2*y_5) +
			(x_3*y_4) + (x_4*y_3) + (x_5*y_2) +
			(x_6*y_1) + (x_7*y_0) + 19 * ((x_8*y_9) +
					(x_9*y_8));
		xy._7 = (t & ((1 << 25) - 1));
		t = (t >> 25) + xy._8;
		xy._8 = (t & ((1 << 26) - 1));
		xy._9 += (t >> 26);
		return xy;
	}
private static final long10 mul ( long10 xy , long10 x , long10 y ) { long x_0 = x . _0 , x_1 = x . _1 , x_2 = x . _2 , x_3 = x . _3 , x_4 = x . _4 , x_5 = x . _5 , x_6 = x . _6 , x_7 = x . _7 , x_8 = x . _8 , x_9 = x . _9 ; long y_0 = y . _0 , y_1 = y . _1 , y_2 = y . _2 , y_3 = y . _3 , y_4 = y . _4 , y_5 = y . _5 , y_6 = y . _6 , y_7 = y . _7 , y_8 = y . _8 , y_9 = y . _9 ; long t ; t = ( x_0 * y_8 ) + ( x_2 * y_6 ) + ( x_4 * y_4 ) + ( x_6 * y_2 ) + ( x_8 * y_0 ) + 2 * ( ( x_1 * y_7 ) + ( x_3 * y_5 ) + ( x_5 * y_3 ) + ( x_7 * y_1 ) ) + 38 * ( x_9 * y_9 ) ; xy . _8 = ( t & ( ( 1 << 26 ) - 1 ) ) ; t = ( t > > 26 ) + ( x_0 * y_9 ) + ( x_1 * y_8 ) + ( x_2 * y_7 ) + ( x_3 * y_6 ) + ( x_4 * y_5 ) + ( x_5 * y_4 ) + ( x_6 * y_3 ) + ( x_7 * y_2 ) + ( x_8 * y_1 ) + ( x_9 * y_0 ) ; xy . _9 = ( t & ( ( 1 << 25 ) - 1 ) ) ; t = ( x_0 * y_0 ) + 19 * ( ( t > > 25 ) + ( x_2 * y_8 ) + ( x_4 * y_6 ) + ( x_6 * y_4 ) + ( x_8 * y_2 ) ) + 38 * ( ( x_1 * y_9 ) + ( x_3 * y_7 ) + ( x_5 * y_5 ) + ( x_7 * y_3 ) + ( x_9 * y_1 ) ) ; xy . _0 = ( t & ( ( 1 << 26 ) - 1 ) ) ; t = ( t > > 26 ) + ( x_0 * y_1 ) + ( x_1 * y_0 ) + 19 * ( ( x_2 * y_9 ) + ( x_3 * y_8 ) + ( x_4 * y_7 ) + ( x_5 * y_6 ) + ( x_6 * y_5 ) + ( x_7 * y_4 ) + ( x_8 * y_3 ) + ( x_9 * y_2 ) ) ; xy . _1 = ( t & ( ( 1 << 25 ) - 1 ) ) ; t = ( t > > 25 ) + ( x_0 * y_2 ) + ( x_2 * y_0 ) + 19 * ( ( x_4 * y_8 ) + ( x_6 * y_6 ) + ( x_8 * y_4 ) ) + 2 * ( x_1 * y_1 ) + 38 * ( ( x_3 * y_9 ) + ( x_5 * y_7 ) + ( x_7 * y_5 ) + ( x_9 * y_3 ) ) ; xy . _2 = ( t & ( ( 1 << 26 ) - 1 ) ) ; t = ( t > > 26 ) + ( x_0 * y_3 ) + ( x_1 * y_2 ) + ( x_2 * y_1 ) + ( x_3 * y_0 ) + 19 * ( ( x_4 * y_9 ) + ( x_5 * y_8 ) + ( x_6 * y_7 ) + ( x_7 * y_6 ) + ( x_8 * y_5 ) + ( x_9 * y_4 ) ) ; xy . _3 = ( t & ( ( 1 << 25 ) - 1 ) ) ; t = ( t > > 25 ) + ( x_0 * y_4 ) + ( x_2 * y_2 ) + ( x_4 * y_0 ) + 19 * ( ( x_6 * y_8 ) + ( x_8 * y_6 ) ) + 2 * ( ( x_1 * y_3 ) + ( x_3 * y_1 ) ) + 38 * ( ( x_5 * y_9 ) + ( x_7 * y_7 ) + ( x_9 * y_5 ) ) ; xy . _4 = ( t & ( ( 1 << 26 ) - 1 ) ) ; t = ( t > > 26 ) + ( x_0 * y_5 ) + ( x_1 * y_4 ) + ( x_2 * y_3 ) + ( x_3 * y_2 ) + ( x_4 * y_1 ) + ( x_5 * y_0 ) + 19 * ( ( x_6 * y_9 ) + ( x_7 * y_8 ) + ( x_8 * y_7 ) + ( x_9 * y_6 ) ) ; xy . _5 = ( t & ( ( 1 << 25 ) - 1 ) ) ; t = ( t > > 25 ) + ( x_0 * y_6 ) + ( x_2 * y_4 ) + ( x_4 * y_2 ) + ( x_6 * y_0 ) + 19 * ( x_8 * y_8 ) + 2 * ( ( x_1 * y_5 ) + ( x_3 * y_3 ) + ( x_5 * y_1 ) ) + 38 * ( ( x_7 * y_9 ) + ( x_9 * y_7 ) ) ; xy . _6 = ( t & ( ( 1 << 26 ) - 1 ) ) ; t = ( t > > 26 ) + ( x_0 * y_7 ) + ( x_1 * y_6 ) + ( x_2 * y_5 ) + ( x_3 * y_4 ) + ( x_4 * y_3 ) + ( x_5 * y_2 ) + ( x_6 * y_1 ) + ( x_7 * y_0 ) + 19 * ( ( x_8 * y_9 ) + ( x_9 * y_8 ) ) ; xy . _7 = ( t & ( ( 1 << 25 ) - 1 ) ) ; t = ( t > > 25 ) + xy . _8 ; xy . _8 = ( t & ( ( 1 << 26 ) - 1 ) ) ; xy . _9 += ( t > > 26 ) ; return xy ; }
/* Multiply two numbers.  The output is in reduced form, the inputs need not
be.