fanuc_m430ia2f_manipulator_ikfast_solver.cpp
Go to the documentation of this file.
1 #define IKFAST_HAS_LIBRARY
21 #include "ikfast.h" // found inside share/openrave-X.Y/python/ikfast.h
22 using namespace ikfast;
23 
24 // check if the included ikfast version matches what this file was compiled with
25 #define IKFAST_COMPILE_ASSERT(x) extern int __dummy[(int)x]
27 
28 #include <cmath>
29 #include <vector>
30 #include <limits>
31 #include <algorithm>
32 #include <complex>
33 
34 #define IKFAST_STRINGIZE2(s) #s
35 #define IKFAST_STRINGIZE(s) IKFAST_STRINGIZE2(s)
36 
37 #ifndef IKFAST_ASSERT
38 #include <stdexcept>
39 #include <sstream>
40 #include <iostream>
41 
42 #ifdef _MSC_VER
43 #ifndef __PRETTY_FUNCTION__
44 #define __PRETTY_FUNCTION__ __FUNCDNAME__
45 #endif
46 #endif
47 
48 #ifndef __PRETTY_FUNCTION__
49 #define __PRETTY_FUNCTION__ __func__
50 #endif
51 
52 #define IKFAST_ASSERT(b) { if( !(b) ) { std::stringstream ss; ss << "ikfast exception: " << __FILE__ << ":" << __LINE__ << ": " <<__PRETTY_FUNCTION__ << ": Assertion '" << #b << "' failed"; throw std::runtime_error(ss.str()); } }
53 
54 #endif
55 
56 #if defined(_MSC_VER)
57 #define IKFAST_ALIGNED16(x) __declspec(align(16)) x
58 #else
59 #define IKFAST_ALIGNED16(x) x __attribute((aligned(16)))
60 #endif
61 
62 #define IK2PI ((IkReal)6.28318530717959)
63 #define IKPI ((IkReal)3.14159265358979)
64 #define IKPI_2 ((IkReal)1.57079632679490)
65 
66 #ifdef _MSC_VER
67 #ifndef isnan
68 #define isnan _isnan
69 #endif
70 #endif // _MSC_VER
71 
72 // lapack routines
73 extern "C" {
74  void dgetrf_ (const int* m, const int* n, double* a, const int* lda, int* ipiv, int* info);
75  void zgetrf_ (const int* m, const int* n, std::complex<double>* a, const int* lda, int* ipiv, int* info);
76  void dgetri_(const int* n, const double* a, const int* lda, int* ipiv, double* work, const int* lwork, int* info);
77  void dgesv_ (const int* n, const int* nrhs, double* a, const int* lda, int* ipiv, double* b, const int* ldb, int* info);
78  void dgetrs_(const char *trans, const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info);
79  void dgeev_(const char *jobvl, const char *jobvr, const int *n, double *a, const int *lda, double *wr, double *wi,double *vl, const int *ldvl, double *vr, const int *ldvr, double *work, const int *lwork, int *info);
80 }
81 
82 using namespace std; // necessary to get std math routines
83 
84 #ifdef IKFAST_NAMESPACE
85 namespace IKFAST_NAMESPACE {
86 #endif
87 
88 inline float IKabs(float f) { return fabsf(f); }
89 inline double IKabs(double f) { return fabs(f); }
90 
91 inline float IKsqr(float f) { return f*f; }
92 inline double IKsqr(double f) { return f*f; }
93 
94 inline float IKlog(float f) { return logf(f); }
95 inline double IKlog(double f) { return log(f); }
96 
97 // allows asin and acos to exceed 1
98 #ifndef IKFAST_SINCOS_THRESH
99 #define IKFAST_SINCOS_THRESH ((IkReal)0.000001)
100 #endif
101 
102 // used to check input to atan2 for degenerate cases
103 #ifndef IKFAST_ATAN2_MAGTHRESH
104 #define IKFAST_ATAN2_MAGTHRESH ((IkReal)2e-6)
105 #endif
106 
107 // minimum distance of separate solutions
108 #ifndef IKFAST_SOLUTION_THRESH
109 #define IKFAST_SOLUTION_THRESH ((IkReal)1e-6)
110 #endif
111 
112 inline float IKasin(float f)
113 {
114 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver
115 if( f <= -1 ) return float(-IKPI_2);
116 else if( f >= 1 ) return float(IKPI_2);
117 return asinf(f);
118 }
119 inline double IKasin(double f)
120 {
121 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver
122 if( f <= -1 ) return -IKPI_2;
123 else if( f >= 1 ) return IKPI_2;
124 return asin(f);
125 }
126 
127 // return positive value in [0,y)
128 inline float IKfmod(float x, float y)
129 {
130  while(x < 0) {
131  x += y;
132  }
133  return fmodf(x,y);
134 }
135 
136 // return positive value in [0,y)
137 inline double IKfmod(double x, double y)
138 {
139  while(x < 0) {
140  x += y;
141  }
142  return fmod(x,y);
143 }
144 
145 inline float IKacos(float f)
146 {
147 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver
148 if( f <= -1 ) return float(IKPI);
149 else if( f >= 1 ) return float(0);
150 return acosf(f);
151 }
152 inline double IKacos(double f)
153 {
154 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH ); // any more error implies something is wrong with the solver
155 if( f <= -1 ) return IKPI;
156 else if( f >= 1 ) return 0;
157 return acos(f);
158 }
159 inline float IKsin(float f) { return sinf(f); }
160 inline double IKsin(double f) { return sin(f); }
161 inline float IKcos(float f) { return cosf(f); }
162 inline double IKcos(double f) { return cos(f); }
163 inline float IKtan(float f) { return tanf(f); }
164 inline double IKtan(double f) { return tan(f); }
165 inline float IKsqrt(float f) { if( f <= 0.0f ) return 0.0f; return sqrtf(f); }
166 inline double IKsqrt(double f) { if( f <= 0.0 ) return 0.0; return sqrt(f); }
167 inline float IKatan2(float fy, float fx) {
168  if( isnan(fy) ) {
169  IKFAST_ASSERT(!isnan(fx)); // if both are nan, probably wrong value will be returned
170  return float(IKPI_2);
171  }
172  else if( isnan(fx) ) {
173  return 0;
174  }
175  return atan2f(fy,fx);
176 }
177 inline double IKatan2(double fy, double fx) {
178  if( isnan(fy) ) {
179  IKFAST_ASSERT(!isnan(fx)); // if both are nan, probably wrong value will be returned
180  return IKPI_2;
181  }
182  else if( isnan(fx) ) {
183  return 0;
184  }
185  return atan2(fy,fx);
186 }
187 
188 inline float IKsign(float f) {
189  if( f > 0 ) {
190  return float(1);
191  }
192  else if( f < 0 ) {
193  return float(-1);
194  }
195  return 0;
196 }
197 
198 inline double IKsign(double f) {
199  if( f > 0 ) {
200  return 1.0;
201  }
202  else if( f < 0 ) {
203  return -1.0;
204  }
205  return 0;
206 }
207 
210 IKFAST_API void ComputeFk(const IkReal* j, IkReal* eetrans, IkReal* eerot) {
211 IkReal x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20;
212 x0=IKcos(j[0]);
213 x1=IKcos(j[2]);
214 x2=IKsin(j[1]);
215 x3=IKcos(j[1]);
216 x4=IKsin(j[2]);
217 x5=IKsin(j[0]);
218 x6=IKcos(j[3]);
219 x7=IKsin(j[3]);
220 x8=IKcos(j[4]);
221 x9=IKsin(j[4]);
222 x10=((IkReal(1.00000000000000))*(x2));
223 x11=((IkReal(0.550000000000000))*(x3));
224 x12=((IkReal(0.0650000000000000))*(x3));
225 x13=((IkReal(0.550000000000000))*(x2));
226 x14=((IkReal(1.00000000000000))*(x3));
227 x15=((IkReal(0.0650000000000000))*(x2));
228 x16=((IkReal(0.350000000000000))*(x2));
229 x17=((x4)*(x5));
230 x18=((x0)*(x4));
231 x19=((x0)*(x1));
232 x20=((x1)*(x5));
233 eetrans[0]=((((x0)*(x16)))+(((x11)*(x18)))+(((IkReal(0.0950000000000000))*(x5)))+(((x6)*(((((x12)*(x18)))+(((x15)*(x19)))))))+(((x13)*(x19)))+(((x7)*(((((x12)*(x19)))+(((IkReal(-1.00000000000000))*(x15)*(x18))))))));
234 eetrans[1]=((((x16)*(x5)))+(((x7)*(((((x12)*(x20)))+(((IkReal(-1.00000000000000))*(x15)*(x17)))))))+(((IkReal(-0.0950000000000000))*(x0)))+(((x11)*(x17)))+(((x6)*(((((x15)*(x20)))+(((x12)*(x17)))))))+(((x13)*(x20))));
235 IkReal x21=((IkReal(1.00000000000000))*(x4));
236 eetrans[2]=((IkReal(0.440000000000000))+(((IkReal(0.350000000000000))*(x3)))+(((x7)*(((((IkReal(-1.00000000000000))*(x1)*(x15)))+(((IkReal(-1.00000000000000))*(x12)*(x21)))))))+(((x1)*(x11)))+(((x6)*(((((x1)*(x12)))+(((IkReal(-1.00000000000000))*(x15)*(x21)))))))+(((IkReal(-1.00000000000000))*(x13)*(x21))));
237 IkReal x22=((IkReal(1.00000000000000))*(x10));
238 eerot[0]=((((IkReal(-1.00000000000000))*(x5)*(x9)))+(((x8)*(((((x7)*(((((IkReal(-1.00000000000000))*(x19)*(x22)))+(((IkReal(-1.00000000000000))*(x14)*(x18)))))))+(((x6)*(((((x19)*(x3)))+(((IkReal(-1.00000000000000))*(x18)*(x22))))))))))));
239 IkReal x23=((IkReal(1.00000000000000))*(x10));
240 eerot[1]=((((x0)*(x9)))+(((x8)*(((((x6)*(((((x20)*(x3)))+(((IkReal(-1.00000000000000))*(x17)*(x23)))))))+(((x7)*(((((IkReal(-1.00000000000000))*(x20)*(x23)))+(((IkReal(-1.00000000000000))*(x14)*(x17))))))))))));
241 IkReal x24=((IkReal(1.00000000000000))*(x1));
242 eerot[2]=((x8)*(((((x6)*(((((IkReal(-1.00000000000000))*(x14)*(x4)))+(((IkReal(-1.00000000000000))*(x10)*(x24)))))))+(((x7)*(((((x2)*(x4)))+(((IkReal(-1.00000000000000))*(x14)*(x24))))))))));
243 }
244 
245 IKFAST_API int GetNumFreeParameters() { return 0; }
246 IKFAST_API int* GetFreeParameters() { return NULL; }
247 IKFAST_API int GetNumJoints() { return 5; }
248 
249 IKFAST_API int GetIkRealSize() { return sizeof(IkReal); }
250 
251 IKFAST_API int GetIkType() { return 0x56000007; }
252 
253 class IKSolver {
254 public:
255 IkReal j0,cj0,sj0,htj0,j1,cj1,sj1,htj1,j2,cj2,sj2,htj2,j3,cj3,sj3,htj3,j4,cj4,sj4,htj4,new_r00,r00,rxp0_0,new_r01,r01,rxp0_1,new_r02,r02,rxp0_2,new_px,px,npx,new_py,py,npy,new_pz,pz,npz,pp;
256 unsigned char _ij0[2], _nj0,_ij1[2], _nj1,_ij2[2], _nj2,_ij3[2], _nj3,_ij4[2], _nj4;
257 
258 bool ComputeIk(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, IkSolutionListBase<IkReal>& solutions) {
259 j0=numeric_limits<IkReal>::quiet_NaN(); _ij0[0] = -1; _ij0[1] = -1; _nj0 = -1; j1=numeric_limits<IkReal>::quiet_NaN(); _ij1[0] = -1; _ij1[1] = -1; _nj1 = -1; j2=numeric_limits<IkReal>::quiet_NaN(); _ij2[0] = -1; _ij2[1] = -1; _nj2 = -1; j3=numeric_limits<IkReal>::quiet_NaN(); _ij3[0] = -1; _ij3[1] = -1; _nj3 = -1; j4=numeric_limits<IkReal>::quiet_NaN(); _ij4[0] = -1; _ij4[1] = -1; _nj4 = -1;
260 for(int dummyiter = 0; dummyiter < 1; ++dummyiter) {
261  solutions.Clear();
262 px = eetrans[0]; py = eetrans[1]; pz = eetrans[2];
263 
264 r00 = eerot[0];
265 r01 = eerot[1];
266 r02 = eerot[2];
267 px = eetrans[0]; py = eetrans[1]; pz = eetrans[2];
268 new_r00=r00;
269 new_px=px;
270 new_r01=r01;
271 new_py=py;
272 new_r02=r02;
273 new_pz=((IkReal(-0.440000000000000))+(pz));
274 r00 = new_r00; r01 = new_r01; r02 = new_r02; px = new_px; py = new_py; pz = new_pz;
275 
276 pp=(((px)*(px))+((pz)*(pz))+((py)*(py)));
277 {
278 IkReal dummyeval[1];
279 dummyeval[0]=(((px)*(px))+((py)*(py)));
280 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
281 {
282 continue;
283 
284 } else
285 {
286 {
287 IkReal j0array[2], cj0array[2], sj0array[2];
288 bool j0valid[2]={false};
289 _nj0 = 2;
290 if( IKabs(py) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-1.00000000000000))*(px))) < IKFAST_ATAN2_MAGTHRESH )
291  continue;
292 IkReal x25=((IkReal(1.00000000000000))*(IKatan2(py, ((IkReal(-1.00000000000000))*(px)))));
293 if( ((((px)*(px))+((py)*(py)))) < (IkReal)-0.00001 )
294  continue;
295 if( (((IkReal(0.0950000000000000))*(((IKabs(IKabs(IKsqrt((((px)*(px))+((py)*(py)))))) != 0)?((IkReal)1/(IKabs(IKsqrt((((px)*(px))+((py)*(py))))))):(IkReal)1.0e30)))) < -1-IKFAST_SINCOS_THRESH || (((IkReal(0.0950000000000000))*(((IKabs(IKabs(IKsqrt((((px)*(px))+((py)*(py)))))) != 0)?((IkReal)1/(IKabs(IKsqrt((((px)*(px))+((py)*(py))))))):(IkReal)1.0e30)))) > 1+IKFAST_SINCOS_THRESH )
296  continue;
297 IkReal x26=IKasin(((IkReal(0.0950000000000000))*(((IKabs(IKabs(IKsqrt((((px)*(px))+((py)*(py)))))) != 0)?((IkReal)1/(IKabs(IKsqrt((((px)*(px))+((py)*(py))))))):(IkReal)1.0e30))));
298 j0array[0]=((((IkReal(-1.00000000000000))*(x26)))+(((IkReal(-1.00000000000000))*(x25))));
299 sj0array[0]=IKsin(j0array[0]);
300 cj0array[0]=IKcos(j0array[0]);
301 j0array[1]=((IkReal(3.14159265358979))+(x26)+(((IkReal(-1.00000000000000))*(x25))));
302 sj0array[1]=IKsin(j0array[1]);
303 cj0array[1]=IKcos(j0array[1]);
304 if( j0array[0] > IKPI )
305 {
306  j0array[0]-=IK2PI;
307 }
308 else if( j0array[0] < -IKPI )
309 { j0array[0]+=IK2PI;
310 }
311 j0valid[0] = true;
312 if( j0array[1] > IKPI )
313 {
314  j0array[1]-=IK2PI;
315 }
316 else if( j0array[1] < -IKPI )
317 { j0array[1]+=IK2PI;
318 }
319 j0valid[1] = true;
320 for(int ij0 = 0; ij0 < 2; ++ij0)
321 {
322 if( !j0valid[ij0] )
323 {
324  continue;
325 }
326 _ij0[0] = ij0; _ij0[1] = -1;
327 for(int iij0 = ij0+1; iij0 < 2; ++iij0)
328 {
329 if( j0valid[iij0] && IKabs(cj0array[ij0]-cj0array[iij0]) < IKFAST_SOLUTION_THRESH && IKabs(sj0array[ij0]-sj0array[iij0]) < IKFAST_SOLUTION_THRESH )
330 {
331  j0valid[iij0]=false; _ij0[1] = iij0; break;
332 }
333 }
334 j0 = j0array[ij0]; cj0 = cj0array[ij0]; sj0 = sj0array[ij0];
335 
336 IkReal op[4+1], zeror[4];
337 int numroots;
338 op[0]=((((IkReal(-2.80000000000000))*(r00)*(r02)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(0.163324000000000))*(px)*(sj0)*((r01)*(r01))))+(((IkReal(-4.00000000000000))*((cj0)*(cj0))*((px)*(px)*(px)*(px))*((r00)*(r00))))+(((IkReal(-8.00000000000000))*(pz)*(r00)*(r02)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(0.266000000000000))*(cj0)*(r01)*(r02)*((py)*(py))))+(((IkReal(-0.369600000000000))*(pp)*((r02)*(r02))))+(((IkReal(0.133000000000000))*(cj0)*(pp)*(r01)*(r02)))+(((IkReal(-0.532000000000000))*(px)*(py)*(r01)*(r02)*(sj0)))+(((IkReal(-0.240800000000000))*(px)*(pz)*(r00)*(r02)))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(px)*(py)*(sj0)*((r00)*(r00))))+(((IkReal(0.760000000000000))*(cj0)*(py)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(0.380000000000000))*(cj0)*(pp)*(px)*(r00)*(r01)))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-0.0341510400000000))*((r02)*(r02))))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(px)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(0.258720000000000))*(py)*(r01)*(r02)))+(((IkReal(0.279200000000000))*(px)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-0.00442225000000000))*((cj0)*(cj0))*((r01)*(r01))))+(((IkReal(1.71920000000000))*(px)*(py)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(-0.0361000000000000))*((px)*(px))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(1.71920000000000))*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.0228760000000000))*(cj0)*(pz)*(r01)*(r02)))+(((IkReal(-0.380000000000000))*(pp)*(py)*(r00)*(r01)*(sj0)))+(((IkReal(-2.80000000000000))*(pz)*((py)*(py))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(-1.00000000000000))*((pp)*(pp))*((r02)*(r02))))+(((IkReal(-8.00000000000000))*(px)*(r00)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(-8.00000000000000))*(py)*(r00)*(r01)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(4.00000000000000))*(pp)*(px)*(py)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(4.00000000000000))*(pp)*(px)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-0.266000000000000))*(cj0)*(r01)*(r02)*((px)*(px))))+(((IkReal(0.760000000000000))*(cj0)*(py)*((px)*(px))*((r00)*(r00))))+(((IkReal(-8.00000000000000))*(py)*(r01)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(0.760000000000000))*(cj0)*(pz)*(r01)*(r02)*((py)*(py))))+(((IkReal(4.00000000000000))*(pp)*(px)*(py)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(-0.0252700000000000))*(pz)*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(4.00000000000000))*(pp)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(0.266000000000000))*(r00)*(r02)*(sj0)*((py)*(py))))+(((IkReal(0.532000000000000))*(px)*(pz)*(sj0)*((r00)*(r00))))+(((IkReal(0.0931000000000000))*(px)*(sj0)*((r00)*(r00))))+(((IkReal(-4.00000000000000))*((py)*(py)*(py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.720000000000000))*((cj0)*(cj0))*((pz)*(pz))*((r00)*(r00))))+(((IkReal(1.51220000000000))*(cj0)*(px)*(py)*(sj0)*((r02)*(r02))))+(((IkReal(-0.760000000000000))*(cj0)*(py)*((pz)*(pz))*((r01)*(r01))))+(((IkReal(-0.760000000000000))*(cj0)*(py)*((px)*(px))*((r01)*(r01))))+(((IkReal(-0.760000000000000))*(cj0)*(pz)*(r01)*(r02)*((px)*(px))))+(((IkReal(2.80000000000000))*(pz)*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(0.720000000000000))*((py)*(py))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(4.00000000000000))*(pp)*(px)*(pz)*(r00)*(r02)))+(((IkReal(0.0722000000000000))*(py)*(pz)*(r01)*(r02)*((cj0)*(cj0))))+(((IkReal(2.80000000000000))*(cj0)*(px)*(py)*(pz)*(sj0)*((r00)*(r00))))+(((IkReal(-2.80000000000000))*(pz)*((py)*(py))*((r01)*(r01))))+(((IkReal(4.00000000000000))*(pp)*(py)*(pz)*(r01)*(r02)))+(((IkReal(-1.00000000000000))*((cj0)*(cj0))*((pp)*(pp))*((r00)*(r00))))+(((IkReal(-0.760000000000000))*(pz)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(1.71920000000000))*(px)*(py)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(-0.266000000000000))*(px)*(pz)*(sj0)*((r02)*(r02))))+(((IkReal(-1.52000000000000))*(px)*(py)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(0.760000000000000))*(py)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(0.0702240000000000))*(px)*(sj0)*((r02)*(r02))))+(((IkReal(4.00000000000000))*(pp)*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(-4.00000000000000))*((px)*(px))*((py)*(py))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(1.71920000000000))*(cj0)*(px)*(py)*(sj0)*((r00)*(r00))))+(((IkReal(1.71920000000000))*(cj0)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(1.71920000000000))*(cj0)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(0.0702240000000000))*(cj0)*(px)*(r00)*(r01)))+(((IkReal(-4.00000000000000))*((cj0)*(cj0))*((px)*(px))*((py)*(py))*((r01)*(r01))))+(((IkReal(0.0228760000000000))*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(0.380000000000000))*(cj0)*(pp)*(pz)*(r01)*(r02)))+(((IkReal(1.71920000000000))*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(-16.0000000000000))*(cj0)*(r00)*(r01)*(sj0)*((px)*(px))*((py)*(py))))+(((IkReal(0.760000000000000))*(r00)*(r02)*(sj0)*((pz)*(pz)*(pz))))+(((IkReal(-0.266000000000000))*(cj0)*(px)*(pz)*(r00)*(r01)))+(((IkReal(-0.0641615800000000))*(cj0)*(r00)*(r01)*(sj0)))+(((IkReal(4.00000000000000))*(pp)*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.541100000000000))*(cj0)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(-0.0361000000000000))*((px)*(px))*((r01)*(r01))))+(((IkReal(-0.0365030400000000))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-2.80000000000000))*(r01)*(r02)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(2.80000000000000))*(px)*(py)*(pz)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(-0.245280000000000))*(py)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-5.60000000000000))*(px)*(py)*(pz)*(r00)*(r01)))+(((IkReal(-2.80000000000000))*(pz)*((cj0)*(cj0))*((px)*(px))*((r02)*(r02))))+(((IkReal(-16.0000000000000))*(cj0)*(py)*(pz)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(-4.00000000000000))*((px)*(px))*((pz)*(pz))*((r00)*(r00))))+(((IkReal(-2.80000000000000))*(cj0)*(pp)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(2.80000000000000))*(pz)*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-8.00000000000000))*(py)*(pz)*(r01)*(r02)*((cj0)*(cj0))*((px)*(px))))+(((IkReal(0.380000000000000))*(pp)*(px)*(sj0)*((r01)*(r01))))+(((IkReal(1.40000000000000))*(pp)*(pz)*((r02)*(r02))))+(((IkReal(-0.270550000000000))*(cj0)*(px)*(r01)*(r02)*(sj0)))+(((IkReal(-0.760000000000000))*(cj0)*(r00)*(r01)*((px)*(px)*(px))))+(((IkReal(-0.245280000000000))*(px)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-0.240800000000000))*(py)*(pz)*(r01)*(r02)))+(((IkReal(-0.380000000000000))*(cj0)*(pp)*(py)*((r00)*(r00))))+(((IkReal(4.00000000000000))*(pp)*(py)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-8.00000000000000))*(pz)*(r01)*(r02)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(0.532000000000000))*(r00)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(0.720000000000000))*((pz)*(pz))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-5.60000000000000))*(cj0)*(px)*(py)*(pz)*(sj0)*((r02)*(r02))))+(((IkReal(-0.859600000000000))*(pp)*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.0361000000000000))*((cj0)*(cj0))*((py)*(py))*((r02)*(r02))))+(((IkReal(0.279200000000000))*(py)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(1.71920000000000))*(cj0)*(px)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-0.760000000000000))*(py)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-8.00000000000000))*(px)*(r00)*(r01)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(0.0252700000000000))*(px)*(r00)*(r02)*((sj0)*(sj0))))+(((IkReal(-0.490000000000000))*((py)*(py))*((r01)*(r01))))+(((IkReal(-5.60000000000000))*(cj0)*(px)*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(1.40000000000000))*(pp)*(py)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(0.249200000000000))*((pz)*(pz))*((r02)*(r02))))+(((IkReal(0.760000000000000))*(pz)*(r00)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-0.0361000000000000))*((cj0)*(cj0))*((pz)*(pz))*((r01)*(r01))))+(((IkReal(0.266000000000000))*(px)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(px)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-2.80000000000000))*((pz)*(pz)*(pz))*((r02)*(r02))))+(((IkReal(-8.00000000000000))*(cj0)*(py)*(sj0)*((px)*(px)*(px))*((r00)*(r00))))+(((IkReal(0.245280000000000))*(pz)*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.207000000000000))*(cj0)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.0361000000000000))*((py)*(py))*((r00)*(r00))))+(((IkReal(-1.40000000000000))*(pp)*(pz)*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.207000000000000))*(cj0)*(px)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(0.266000000000000))*(py)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(0.258720000000000))*(pz)*((r02)*(r02))))+(((IkReal(0.760000000000000))*(px)*(sj0)*((pz)*(pz))*((r00)*(r00))))+(((IkReal(0.258720000000000))*(px)*(r00)*(r02)))+(((IkReal(-4.00000000000000))*((py)*(py))*((pz)*(pz))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(-0.270550000000000))*(cj0)*(py)*(r00)*(r02)*(sj0)))+(((IkReal(-0.907800000000000))*(px)*(py)*(r00)*(r01)))+(((IkReal(1.52000000000000))*(cj0)*(px)*(py)*(pz)*(r00)*(r02)))+(((IkReal(0.760000000000000))*(px)*(sj0)*((py)*(py))*((r00)*(r00))))+(((IkReal(2.80000000000000))*(cj0)*(pz)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-0.380000000000000))*(pp)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.760000000000000))*(cj0)*(r01)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(-0.163324000000000))*(cj0)*(py)*((r00)*(r00))))+(((IkReal(0.720000000000000))*((cj0)*(cj0))*((px)*(px))*((r02)*(r02))))+(((IkReal(-2.80000000000000))*(pz)*((px)*(px))*((r00)*(r00))))+(((IkReal(-8.00000000000000))*(px)*(pz)*(r00)*(r02)*((py)*(py))*((sj0)*(sj0))))+(((IkReal(-5.60000000000000))*(cj0)*(py)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(-4.00000000000000))*((py)*(py))*((pz)*(pz))*((r01)*(r01))))+(((IkReal(-0.532000000000000))*(cj0)*(py)*(pz)*((r01)*(r01))))+(((IkReal(-2.00000000000000))*(cj0)*(r00)*(r01)*(sj0)*((pp)*(pp))))+(((IkReal(-0.859600000000000))*(pp)*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(-4.00000000000000))*((pz)*(pz)*(pz)*(pz))*((r02)*(r02))))+(((IkReal(1.40000000000000))*(pp)*(py)*(r01)*(r02)))+(((IkReal(-1.71920000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)))+(((IkReal(-0.133000000000000))*(pp)*(r00)*(r02)*(sj0)))+(((IkReal(2.80000000000000))*(cj0)*(py)*(r00)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(2.80000000000000))*(px)*(py)*(pz)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(2.80000000000000))*(cj0)*(pz)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(2.80000000000000))*(cj0)*(px)*(py)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(0.760000000000000))*(r00)*(r01)*(sj0)*((py)*(py)*(py))))+(((IkReal(1.40000000000000))*(cj0)*(pp)*(px)*(r01)*(r02)*(sj0)))+(((IkReal(0.0252700000000000))*(py)*(r01)*(r02)*((cj0)*(cj0))))+(((IkReal(-0.490000000000000))*((px)*(px))*((r00)*(r00))))+(((IkReal(2.80000000000000))*(cj0)*(px)*(r01)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(-8.00000000000000))*(px)*(py)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(-4.00000000000000))*((cj0)*(cj0))*((px)*(px))*((pz)*(pz))*((r02)*(r02))))+(((IkReal(1.51220000000000))*(cj0)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(-0.760000000000000))*(px)*(sj0)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-0.0931000000000000))*(cj0)*(py)*((r01)*(r01))))+(((IkReal(-2.80000000000000))*(py)*(r01)*(r02)*((cj0)*(cj0))*((px)*(px))))+(((IkReal(-0.760000000000000))*(px)*(sj0)*((py)*(py))*((r01)*(r01))))+(((IkReal(0.380000000000000))*(pp)*(px)*(sj0)*((r02)*(r02))))+(((IkReal(-8.00000000000000))*(cj0)*(px)*(py)*(sj0)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-0.380000000000000))*(cj0)*(pp)*(py)*((r02)*(r02))))+(((IkReal(-0.760000000000000))*(cj0)*(px)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(-5.60000000000000))*(px)*(r00)*(r02)*((pz)*(pz))))+(((IkReal(0.532000000000000))*(cj0)*(px)*(py)*(r00)*(r02)))+(((IkReal(-0.266000000000000))*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(2.80000000000000))*(py)*(r01)*(r02)*((pz)*(pz))*((sj0)*(sj0))))+(((IkReal(0.245280000000000))*(pz)*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(0.266000000000000))*(cj0)*(py)*(pz)*((r02)*(r02))))+(((IkReal(-1.00000000000000))*((pp)*(pp))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.0722000000000000))*(px)*(pz)*(r00)*(r02)*((sj0)*(sj0))))+(((IkReal(1.40000000000000))*(cj0)*(pp)*(py)*(r00)*(r02)*(sj0)))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-8.00000000000000))*(cj0)*(px)*(sj0)*((py)*(py)*(py))*((r01)*(r01))))+(((IkReal(-16.0000000000000))*(cj0)*(px)*(pz)*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(2.80000000000000))*(px)*(r00)*(r02)*((cj0)*(cj0))*((pz)*(pz))))+(((IkReal(-5.60000000000000))*(py)*(r01)*(r02)*((pz)*(pz))))+(((IkReal(-0.0365030400000000))*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(-1.40000000000000))*(pp)*(pz)*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(-0.0361000000000000))*((pz)*(pz))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(-0.0252700000000000))*(pz)*((cj0)*(cj0))*((r01)*(r01))))+(((IkReal(-0.0702240000000000))*(cj0)*(py)*((r02)*(r02))))+(((IkReal(-2.80000000000000))*(px)*(r00)*(r02)*((py)*(py))*((sj0)*(sj0))))+(((IkReal(0.0245784000000000))*(cj0)*(r01)*(r02)))+(((IkReal(-0.532000000000000))*(cj0)*(r01)*(r02)*((pz)*(pz))))+(((IkReal(-0.0702240000000000))*(py)*(r00)*(r01)*(sj0)))+(((IkReal(0.760000000000000))*(cj0)*(px)*(r00)*(r01)*((py)*(py))))+(((IkReal(-0.00442225000000000))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(-0.266000000000000))*(cj0)*(py)*(pz)*((r00)*(r00))))+(((IkReal(1.40000000000000))*(pp)*(px)*(r00)*(r02)))+(((IkReal(-0.0245784000000000))*(r00)*(r02)*(sj0)))+(((IkReal(1.40000000000000))*(pp)*(px)*(r00)*(r02)*((cj0)*(cj0)))));
339 op[1]=((((IkReal(5.60000000000000))*(py)*(sj0)*((pz)*(pz))*((r01)*(r01))))+(((IkReal(-0.532000000000000))*(cj0)*(py)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(-0.532000000000000))*(r00)*(r01)*((py)*(py))*((sj0)*(sj0))))+(((IkReal(11.2000000000000))*(px)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(-0.266000000000000))*(pp)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(5.60000000000000))*(cj0)*(py)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(5.60000000000000))*(py)*(sj0)*((px)*(px))*((r00)*(r00))))+(((IkReal(0.532000000000000))*(px)*(py)*((cj0)*(cj0))*((r01)*(r01))))+(((IkReal(0.186200000000000))*(cj0)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(5.60000000000000))*(cj0)*(r00)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(-0.532000000000000))*(cj0)*(sj0)*((pz)*(pz))*((r00)*(r00))))+(((IkReal(0.186200000000000))*(pz)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(-0.490560000000000))*(py)*(sj0)*((r02)*(r02))))+(((IkReal(0.532000000000000))*(r00)*(r01)*((cj0)*(cj0))*((pz)*(pz))))+(((IkReal(5.60000000000000))*(cj0)*(px)*((py)*(py))*((r01)*(r01))))+(((IkReal(1.96000000000000))*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-0.186200000000000))*(pz)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(0.0491568000000000))*(cj0)*(sj0)*((r00)*(r00))))+(((IkReal(1.96000000000000))*(py)*(pz)*(sj0)*((r02)*(r02))))+(((IkReal(-0.186200000000000))*(cj0)*(pz)*(sj0)*((r00)*(r00))))+(((IkReal(1.96000000000000))*(px)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(2.80000000000000))*(pp)*(py)*(sj0)*((r02)*(r02))))+(((IkReal(-1.96000000000000))*(pp)*(r01)*(r02)*(sj0)))+(((IkReal(2.80000000000000))*(cj0)*(pp)*(px)*((r02)*(r02))))+(((IkReal(-0.532000000000000))*(px)*(py)*((r00)*(r00))))+(((IkReal(5.60000000000000))*(px)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.186200000000000))*(cj0)*(py)*(r01)*(r02)*(sj0)))+(((IkReal(0.532000000000000))*(px)*(py)*((cj0)*(cj0))*((r02)*(r02))))+(((IkReal(1.96000000000000))*(cj0)*(r00)*(r02)*((pz)*(pz))))+(((IkReal(-0.532000000000000))*(py)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-2.80000000000000))*(cj0)*(pp)*(py)*(r00)*(r01)))+(((IkReal(-0.532000000000000))*(px)*(py)*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(0.532000000000000))*(cj0)*(sj0)*((pz)*(pz))*((r01)*(r01))))+(((IkReal(0.532000000000000))*(px)*(pz)*(r01)*(r02)))+(((IkReal(5.60000000000000))*(cj0)*(px)*((pz)*(pz))*((r00)*(r00))))+(((IkReal(0.0505400000000000))*(cj0)*(px)*((r01)*(r01))))+(((IkReal(-5.60000000000000))*(pp)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(-0.00940800000000000))*(r01)*(r02)*(sj0)))+(((IkReal(-0.532000000000000))*(r00)*(r01)*((py)*(py))))+(((IkReal(5.60000000000000))*(sj0)*((py)*(py)*(py))*((r01)*(r01))))+(((IkReal(1.96000000000000))*(cj0)*(r00)*(r02)*((px)*(px))))+(((IkReal(0.266000000000000))*(cj0)*(pp)*(sj0)*((r00)*(r00))))+(((IkReal(0.532000000000000))*(cj0)*(sj0)*((py)*(py))*((r02)*(r02))))+(((IkReal(0.0505400000000000))*(py)*(sj0)*((r00)*(r00))))+(((IkReal(-0.0491568000000000))*(cj0)*(sj0)*((r01)*(r01))))+(((IkReal(1.96000000000000))*(cj0)*(py)*(pz)*(r00)*(r01)))+(((IkReal(-0.186200000000000))*(py)*(r00)*(r02)))+(((IkReal(-0.532000000000000))*(cj0)*(sj0)*((px)*(px))*((r00)*(r00))))+(((IkReal(-0.517440000000000))*(py)*(sj0)*((r01)*(r01))))+(((IkReal(1.96000000000000))*(py)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(-2.80000000000000))*(pp)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-0.567980000000000))*(cj0)*(py)*(r00)*(r01)))+(((IkReal(5.60000000000000))*(cj0)*(px)*(py)*(pz)*(r01)*(r02)))+(((IkReal(0.0491568000000000))*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(-0.532000000000000))*(cj0)*(sj0)*((px)*(px))*((r02)*(r02))))+(((IkReal(-0.186200000000000))*(py)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-5.60000000000000))*(cj0)*(pp)*(pz)*(r00)*(r02)))+(((IkReal(-2.80000000000000))*(pp)*(px)*(r00)*(r01)*(sj0)))+(((IkReal(1.96000000000000))*(cj0)*(px)*(pz)*((r00)*(r00))))+(((IkReal(1.96000000000000))*(r01)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(5.60000000000000))*(pz)*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-0.266000000000000))*(cj0)*(pp)*(sj0)*((r01)*(r01))))+(((IkReal(-0.490560000000000))*(cj0)*(px)*((r02)*(r02))))+(((IkReal(0.186200000000000))*(cj0)*(px)*(r00)*(r02)*(sj0)))+(((IkReal(0.266000000000000))*(pp)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(5.60000000000000))*(cj0)*((px)*(px)*(px))*((r00)*(r00))))+(((IkReal(0.186200000000000))*(px)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-1.96000000000000))*(cj0)*(pp)*(r00)*(r02)))+(((IkReal(1.96000000000000))*(cj0)*(px)*(pz)*((r02)*(r02))))+(((IkReal(-0.0268800000000000))*(cj0)*(pz)*(r00)*(r02)))+(((IkReal(0.532000000000000))*(r00)*(r01)*((cj0)*(cj0))*((px)*(px))))+(((IkReal(0.532000000000000))*(px)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(5.60000000000000))*(px)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(-2.80000000000000))*(cj0)*(pp)*(px)*((r00)*(r00))))+(((IkReal(0.532000000000000))*(px)*(py)*((r01)*(r01))))+(((IkReal(-0.0268800000000000))*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(11.2000000000000))*(cj0)*(py)*(r00)*(r01)*((px)*(px))))+(((IkReal(-0.00940800000000000))*(cj0)*(r00)*(r02)))+(((IkReal(0.532000000000000))*(cj0)*(sj0)*((py)*(py))*((r01)*(r01))))+(((IkReal(-0.532000000000000))*(py)*(pz)*(r00)*(r02)))+(((IkReal(-0.532000000000000))*(r00)*(r01)*((pz)*(pz))*((sj0)*(sj0))))+(((IkReal(-0.517440000000000))*(cj0)*(px)*((r00)*(r00))))+(((IkReal(-0.567980000000000))*(px)*(r00)*(r01)*(sj0)))+(((IkReal(0.532000000000000))*(cj0)*(px)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(5.60000000000000))*(r01)*(r02)*(sj0)*((pz)*(pz)*(pz))))+(((IkReal(-0.0491568000000000))*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(0.186200000000000))*(px)*(r01)*(r02)))+(((IkReal(1.96000000000000))*(px)*(py)*(r00)*(r02)*(sj0)))+(((IkReal(-0.532000000000000))*(px)*(py)*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(0.532000000000000))*(r00)*(r01)*((px)*(px))))+(((IkReal(5.60000000000000))*(cj0)*(pz)*(r00)*(r02)*((px)*(px))))+(((IkReal(1.96000000000000))*(cj0)*(px)*(py)*(r01)*(r02))));
340 op[2]=((((IkReal(-16.0000000000000))*(pz)*(r01)*(r02)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(-0.0722000000000000))*((py)*(py))*((r00)*(r00))))+(((IkReal(8.00000000000000))*(pp)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-32.0000000000000))*(cj0)*(px)*(pz)*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-16.0000000000000))*(px)*(r00)*(r01)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(-8.00000000000000))*((px)*(px))*((pz)*(pz))*((r00)*(r00))))+(((IkReal(8.00000000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-8.00000000000000))*((py)*(py))*((pz)*(pz))*((r01)*(r01))))+(((IkReal(1.44000000000000))*((pz)*(pz))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(1.44000000000000))*((cj0)*(cj0))*((px)*(px))*((r02)*(r02))))+(((IkReal(-0.0722000000000000))*((cj0)*(cj0))*((pz)*(pz))*((r01)*(r01))))+(((IkReal(0.231952000000000))*(py)*(r00)*(r01)*(sj0)))+(((IkReal(-1.52000000000000))*(px)*(sj0)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-0.0777100800000000))*((r02)*(r02))))+(((IkReal(-1.52000000000000))*(cj0)*(py)*((pz)*(pz))*((r01)*(r01))))+(((IkReal(0.760000000000000))*(pp)*(px)*(sj0)*((r02)*(r02))))+(((IkReal(1.52000000000000))*(pz)*(r00)*(r02)*(sj0)*((py)*(py))))+(((IkReal(8.00000000000000))*(pp)*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.760000000000000))*(pp)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.481600000000000))*(cj0)*(px)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-16.0000000000000))*(cj0)*(py)*(sj0)*((px)*(px)*(px))*((r00)*(r00))))+(((IkReal(0.760000000000000))*(pp)*(px)*(sj0)*((r01)*(r01))))+(((IkReal(-0.481600000000000))*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-1.52000000000000))*(cj0)*(r00)*(r01)*((px)*(px)*(px))))+(((IkReal(-1.52000000000000))*(cj0)*(r01)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(3.43840000000000))*(py)*(pz)*(r01)*(r02)))+(((IkReal(0.326648000000000))*(cj0)*(pz)*(r01)*(r02)))+(((IkReal(-2.00000000000000))*((pp)*(pp))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.326648000000000))*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.0635980800000000))*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(1.52000000000000))*(r00)*(r02)*(sj0)*((pz)*(pz)*(pz))))+(((IkReal(-2.00000000000000))*((pp)*(pp))*((r02)*(r02))))+(((IkReal(0.240800000000000))*(pp)*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.144400000000000))*(py)*(pz)*(r01)*(r02)*((cj0)*(cj0))))+(((IkReal(-0.481600000000000))*(cj0)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-1.52000000000000))*(py)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-16.0000000000000))*(py)*(pz)*(r01)*(r02)*((cj0)*(cj0))*((px)*(px))))+(((IkReal(-0.0635980800000000))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.760000000000000))*(pp)*(py)*(r00)*(r01)*(sj0)))+(((IkReal(8.00000000000000))*(pp)*(py)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-16.0000000000000))*(pz)*(r00)*(r02)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(8.00000000000000))*(pp)*(px)*(py)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(8.00000000000000))*(pp)*(px)*(pz)*(r00)*(r02)))+(((IkReal(0.481600000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)))+(((IkReal(0.760000000000000))*(cj0)*(pp)*(px)*(r00)*(r01)))+(((IkReal(-32.0000000000000))*(cj0)*(py)*(pz)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(-0.481600000000000))*(px)*(py)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(4.41840000000000))*((pz)*(pz))*((r02)*(r02))))+(((IkReal(1.52000000000000))*(r00)*(r01)*(sj0)*((py)*(py)*(py))))+(((IkReal(-0.00884450000000000))*((cj0)*(cj0))*((r01)*(r01))))+(((IkReal(-0.512848000000000))*(cj0)*(py)*((r02)*(r02))))+(((IkReal(-0.0722000000000000))*((px)*(px))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(-2.00000000000000))*((cj0)*(cj0))*((pp)*(pp))*((r00)*(r00))))+(((IkReal(-0.109507160000000))*(cj0)*(r00)*(r01)*(sj0)))+(((IkReal(1.52000000000000))*(cj0)*(px)*(r00)*(r01)*((py)*(py))))+(((IkReal(-0.00884450000000000))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(-16.0000000000000))*(py)*(r01)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(-4.00000000000000))*(cj0)*(r00)*(r01)*(sj0)*((pp)*(pp))))+(((IkReal(8.00000000000000))*(cj0)*(pp)*(px)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(-0.186200000000000))*(cj0)*(py)*((r01)*(r01))))+(((IkReal(1.52000000000000))*(cj0)*(py)*((px)*(px))*((r00)*(r00))))+(((IkReal(-0.481600000000000))*(cj0)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(3.02440000000000))*(cj0)*(px)*(py)*(sj0)*((r02)*(r02))))+(((IkReal(-3.50600000000000))*(cj0)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.980000000000000))*((py)*(py))*((r01)*(r01))))+(((IkReal(1.52000000000000))*(px)*(sj0)*((pz)*(pz))*((r00)*(r00))))+(((IkReal(-3.36160000000000))*(px)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-16.0000000000000))*(px)*(pz)*(r00)*(r02)*((py)*(py))*((sj0)*(sj0))))+(((IkReal(1.52000000000000))*(py)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(-1.52000000000000))*(pz)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(-16.0000000000000))*(cj0)*(px)*(py)*(sj0)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-0.760000000000000))*(cj0)*(pp)*(py)*((r00)*(r00))))+(((IkReal(-0.0722000000000000))*((cj0)*(cj0))*((py)*(py))*((r02)*(r02))))+(((IkReal(-1.52000000000000))*(cj0)*(pz)*(r01)*(r02)*((px)*(px))))+(((IkReal(3.02440000000000))*(cj0)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(-1.81560000000000))*(px)*(py)*(r00)*(r01)))+(((IkReal(-1.52000000000000))*(px)*(sj0)*((py)*(py))*((r01)*(r01))))+(((IkReal(0.0457520000000000))*(cj0)*(py)*((r00)*(r00))))+(((IkReal(0.186200000000000))*(px)*(sj0)*((r00)*(r00))))+(((IkReal(-8.00000000000000))*((cj0)*(cj0))*((px)*(px)*(px)*(px))*((r00)*(r00))))+(((IkReal(0.144400000000000))*(px)*(pz)*(r00)*(r02)*((sj0)*(sj0))))+(((IkReal(-0.481600000000000))*(cj0)*(px)*(py)*(sj0)*((r00)*(r00))))+(((IkReal(-16.0000000000000))*(px)*(r00)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(3.04000000000000))*(cj0)*(px)*(py)*(pz)*(r00)*(r02)))+(((IkReal(-8.00000000000000))*((cj0)*(cj0))*((px)*(px))*((py)*(py))*((r01)*(r01))))+(((IkReal(-2.69920000000000))*(pp)*((r02)*(r02))))+(((IkReal(1.44000000000000))*((py)*(py))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(3.43840000000000))*(px)*(pz)*(r00)*(r02)))+(((IkReal(8.00000000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(-1.52000000000000))*(cj0)*(px)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(1.52000000000000))*(cj0)*(py)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-16.0000000000000))*(px)*(py)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(0.512848000000000))*(px)*(sj0)*((r02)*(r02))))+(((IkReal(-3.36160000000000))*(py)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-8.00000000000000))*((py)*(py)*(py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(1.52000000000000))*(cj0)*(pz)*(r01)*(r02)*((py)*(py))))+(((IkReal(8.00000000000000))*(pp)*(px)*(py)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(-0.980000000000000))*((px)*(px))*((r00)*(r00))))+(((IkReal(-8.00000000000000))*((px)*(px))*((py)*(py))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(-0.0457520000000000))*(px)*(sj0)*((r01)*(r01))))+(((IkReal(1.52000000000000))*(px)*(sj0)*((py)*(py))*((r00)*(r00))))+(((IkReal(-32.0000000000000))*(cj0)*(r00)*(r01)*(sj0)*((px)*(px))*((py)*(py))))+(((IkReal(1.44000000000000))*((cj0)*(cj0))*((pz)*(pz))*((r00)*(r00))))+(((IkReal(-0.481600000000000))*(px)*(py)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(8.00000000000000))*(cj0)*(pp)*(px)*(py)*(sj0)*((r00)*(r00))))+(((IkReal(-0.231952000000000))*(cj0)*(px)*(r00)*(r01)))+(((IkReal(-0.0722000000000000))*((px)*(px))*((r01)*(r01))))+(((IkReal(-8.00000000000000))*((py)*(py))*((pz)*(pz))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(-16.0000000000000))*(cj0)*(px)*(sj0)*((py)*(py)*(py))*((r01)*(r01))))+(((IkReal(-0.481600000000000))*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(8.00000000000000))*(pp)*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(0.240800000000000))*(pp)*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(-16.0000000000000))*(py)*(r00)*(r01)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(8.00000000000000))*(cj0)*(pp)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(0.760000000000000))*(cj0)*(pp)*(pz)*(r01)*(r02)))+(((IkReal(-1.52000000000000))*(cj0)*(py)*((px)*(px))*((r01)*(r01))))+(((IkReal(-0.760000000000000))*(cj0)*(pp)*(py)*((r02)*(r02))))+(((IkReal(8.00000000000000))*(cj0)*(pp)*(px)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-8.00000000000000))*((cj0)*(cj0))*((px)*(px))*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-3.04000000000000))*(px)*(py)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(8.00000000000000))*(pp)*(px)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-8.00000000000000))*((pz)*(pz)*(pz)*(pz))*((r02)*(r02))))+(((IkReal(-0.0722000000000000))*((pz)*(pz))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(-3.50600000000000))*(cj0)*(px)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(8.00000000000000))*(pp)*(py)*(pz)*(r01)*(r02))));
341 op[3]=((((IkReal(5.60000000000000))*(py)*(sj0)*((pz)*(pz))*((r01)*(r01))))+(((IkReal(-0.532000000000000))*(cj0)*(py)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(-0.532000000000000))*(r00)*(r01)*((py)*(py))*((sj0)*(sj0))))+(((IkReal(11.2000000000000))*(px)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(-0.266000000000000))*(pp)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(5.60000000000000))*(cj0)*(py)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(5.60000000000000))*(py)*(sj0)*((px)*(px))*((r00)*(r00))))+(((IkReal(0.532000000000000))*(px)*(py)*((cj0)*(cj0))*((r01)*(r01))))+(((IkReal(5.60000000000000))*(cj0)*(r00)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(-0.532000000000000))*(cj0)*(sj0)*((pz)*(pz))*((r00)*(r00))))+(((IkReal(-0.490560000000000))*(py)*(sj0)*((r02)*(r02))))+(((IkReal(-0.186200000000000))*(px)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(0.186200000000000))*(cj0)*(py)*(r01)*(r02)*(sj0)))+(((IkReal(-0.186200000000000))*(pz)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(0.532000000000000))*(r00)*(r01)*((cj0)*(cj0))*((pz)*(pz))))+(((IkReal(5.60000000000000))*(cj0)*(px)*((py)*(py))*((r01)*(r01))))+(((IkReal(0.0491568000000000))*(cj0)*(sj0)*((r00)*(r00))))+(((IkReal(2.80000000000000))*(pp)*(py)*(sj0)*((r02)*(r02))))+(((IkReal(0.186200000000000))*(cj0)*(pz)*(sj0)*((r00)*(r00))))+(((IkReal(2.80000000000000))*(cj0)*(pp)*(px)*((r02)*(r02))))+(((IkReal(-0.532000000000000))*(px)*(py)*((r00)*(r00))))+(((IkReal(5.60000000000000))*(px)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(0.00940800000000000))*(cj0)*(r00)*(r02)))+(((IkReal(-1.96000000000000))*(cj0)*(r00)*(r02)*((pz)*(pz))))+(((IkReal(0.532000000000000))*(px)*(py)*((cj0)*(cj0))*((r02)*(r02))))+(((IkReal(-0.532000000000000))*(py)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-2.80000000000000))*(cj0)*(pp)*(py)*(r00)*(r01)))+(((IkReal(1.96000000000000))*(cj0)*(pp)*(r00)*(r02)))+(((IkReal(-0.532000000000000))*(px)*(py)*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(0.532000000000000))*(cj0)*(sj0)*((pz)*(pz))*((r01)*(r01))))+(((IkReal(-1.96000000000000))*(cj0)*(py)*(pz)*(r00)*(r01)))+(((IkReal(-0.186200000000000))*(cj0)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(0.532000000000000))*(px)*(pz)*(r01)*(r02)))+(((IkReal(5.60000000000000))*(cj0)*(px)*((pz)*(pz))*((r00)*(r00))))+(((IkReal(-1.96000000000000))*(py)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(0.0505400000000000))*(cj0)*(px)*((r01)*(r01))))+(((IkReal(-5.60000000000000))*(pp)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(-1.96000000000000))*(px)*(py)*(r00)*(r02)*(sj0)))+(((IkReal(-0.532000000000000))*(r00)*(r01)*((py)*(py))))+(((IkReal(5.60000000000000))*(sj0)*((py)*(py)*(py))*((r01)*(r01))))+(((IkReal(0.186200000000000))*(py)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(0.266000000000000))*(cj0)*(pp)*(sj0)*((r00)*(r00))))+(((IkReal(-1.96000000000000))*(px)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(0.532000000000000))*(cj0)*(sj0)*((py)*(py))*((r02)*(r02))))+(((IkReal(-1.96000000000000))*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(0.0505400000000000))*(py)*(sj0)*((r00)*(r00))))+(((IkReal(-0.0491568000000000))*(cj0)*(sj0)*((r01)*(r01))))+(((IkReal(-1.96000000000000))*(cj0)*(px)*(py)*(r01)*(r02)))+(((IkReal(-0.532000000000000))*(cj0)*(sj0)*((px)*(px))*((r00)*(r00))))+(((IkReal(-0.517440000000000))*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-2.80000000000000))*(pp)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-0.186200000000000))*(px)*(r01)*(r02)))+(((IkReal(-0.567980000000000))*(cj0)*(py)*(r00)*(r01)))+(((IkReal(5.60000000000000))*(cj0)*(px)*(py)*(pz)*(r01)*(r02)))+(((IkReal(0.0491568000000000))*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(-0.532000000000000))*(cj0)*(sj0)*((px)*(px))*((r02)*(r02))))+(((IkReal(0.186200000000000))*(py)*(r00)*(r02)))+(((IkReal(-5.60000000000000))*(cj0)*(pp)*(pz)*(r00)*(r02)))+(((IkReal(-2.80000000000000))*(pp)*(px)*(r00)*(r01)*(sj0)))+(((IkReal(5.60000000000000))*(pz)*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-0.266000000000000))*(cj0)*(pp)*(sj0)*((r01)*(r01))))+(((IkReal(-1.96000000000000))*(r01)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(-1.96000000000000))*(cj0)*(r00)*(r02)*((px)*(px))))+(((IkReal(-0.490560000000000))*(cj0)*(px)*((r02)*(r02))))+(((IkReal(-1.96000000000000))*(cj0)*(px)*(pz)*((r02)*(r02))))+(((IkReal(0.266000000000000))*(pp)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(5.60000000000000))*(cj0)*((px)*(px)*(px))*((r00)*(r00))))+(((IkReal(-0.186200000000000))*(cj0)*(px)*(r00)*(r02)*(sj0)))+(((IkReal(-0.0268800000000000))*(cj0)*(pz)*(r00)*(r02)))+(((IkReal(1.96000000000000))*(pp)*(r01)*(r02)*(sj0)))+(((IkReal(0.532000000000000))*(r00)*(r01)*((cj0)*(cj0))*((px)*(px))))+(((IkReal(0.532000000000000))*(px)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(5.60000000000000))*(px)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(-2.80000000000000))*(cj0)*(pp)*(px)*((r00)*(r00))))+(((IkReal(0.532000000000000))*(px)*(py)*((r01)*(r01))))+(((IkReal(-0.0268800000000000))*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(11.2000000000000))*(cj0)*(py)*(r00)*(r01)*((px)*(px))))+(((IkReal(0.532000000000000))*(cj0)*(sj0)*((py)*(py))*((r01)*(r01))))+(((IkReal(-0.532000000000000))*(py)*(pz)*(r00)*(r02)))+(((IkReal(-0.532000000000000))*(r00)*(r01)*((pz)*(pz))*((sj0)*(sj0))))+(((IkReal(-0.517440000000000))*(cj0)*(px)*((r00)*(r00))))+(((IkReal(-0.567980000000000))*(px)*(r00)*(r01)*(sj0)))+(((IkReal(0.532000000000000))*(cj0)*(px)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(5.60000000000000))*(r01)*(r02)*(sj0)*((pz)*(pz)*(pz))))+(((IkReal(-0.0491568000000000))*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(0.00940800000000000))*(r01)*(r02)*(sj0)))+(((IkReal(-1.96000000000000))*(cj0)*(px)*(pz)*((r00)*(r00))))+(((IkReal(-0.532000000000000))*(px)*(py)*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(0.186200000000000))*(pz)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(0.532000000000000))*(r00)*(r01)*((px)*(px))))+(((IkReal(5.60000000000000))*(cj0)*(pz)*(r00)*(r02)*((px)*(px))))+(((IkReal(-1.96000000000000))*(py)*(pz)*(sj0)*((r02)*(r02)))));
342 op[4]=((((IkReal(0.163324000000000))*(px)*(sj0)*((r01)*(r01))))+(((IkReal(2.80000000000000))*(r01)*(r02)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(-4.00000000000000))*((cj0)*(cj0))*((px)*(px)*(px)*(px))*((r00)*(r00))))+(((IkReal(-8.00000000000000))*(pz)*(r00)*(r02)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(-0.369600000000000))*(pp)*((r02)*(r02))))+(((IkReal(-2.80000000000000))*(cj0)*(py)*(r00)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(-2.80000000000000))*(px)*(py)*(pz)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(-0.240800000000000))*(px)*(pz)*(r00)*(r02)))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(px)*(py)*(sj0)*((r00)*(r00))))+(((IkReal(5.60000000000000))*(py)*(r01)*(r02)*((pz)*(pz))))+(((IkReal(-0.532000000000000))*(cj0)*(px)*(py)*(r00)*(r02)))+(((IkReal(0.0252700000000000))*(pz)*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(0.760000000000000))*(cj0)*(py)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-2.80000000000000))*(pz)*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(0.380000000000000))*(cj0)*(pp)*(px)*(r00)*(r01)))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-0.0341510400000000))*((r02)*(r02))))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(px)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(-0.258720000000000))*(px)*(r00)*(r02)))+(((IkReal(0.279200000000000))*(px)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-0.00442225000000000))*((cj0)*(cj0))*((r01)*(r01))))+(((IkReal(1.71920000000000))*(px)*(py)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(-0.0361000000000000))*((px)*(px))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(1.71920000000000))*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.0252700000000000))*(px)*(r00)*(r02)*((sj0)*(sj0))))+(((IkReal(-0.0228760000000000))*(cj0)*(pz)*(r01)*(r02)))+(((IkReal(-0.380000000000000))*(pp)*(py)*(r00)*(r01)*(sj0)))+(((IkReal(-2.80000000000000))*(py)*(r01)*(r02)*((pz)*(pz))*((sj0)*(sj0))))+(((IkReal(-1.00000000000000))*((pp)*(pp))*((r02)*(r02))))+(((IkReal(2.80000000000000))*(pz)*((py)*(py))*((r01)*(r01))))+(((IkReal(-8.00000000000000))*(px)*(r00)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(-8.00000000000000))*(py)*(r00)*(r01)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(4.00000000000000))*(pp)*(px)*(py)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(4.00000000000000))*(pp)*(px)*(pz)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(0.760000000000000))*(cj0)*(py)*((px)*(px))*((r00)*(r00))))+(((IkReal(-8.00000000000000))*(py)*(r01)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(0.760000000000000))*(cj0)*(pz)*(r01)*(r02)*((py)*(py))))+(((IkReal(4.00000000000000))*(pp)*(px)*(py)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(5.60000000000000))*(px)*(py)*(pz)*(r00)*(r01)))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(4.00000000000000))*(pp)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(0.0931000000000000))*(px)*(sj0)*((r00)*(r00))))+(((IkReal(0.270550000000000))*(cj0)*(px)*(r01)*(r02)*(sj0)))+(((IkReal(-4.00000000000000))*((py)*(py)*(py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.720000000000000))*((cj0)*(cj0))*((pz)*(pz))*((r00)*(r00))))+(((IkReal(1.51220000000000))*(cj0)*(px)*(py)*(sj0)*((r02)*(r02))))+(((IkReal(0.532000000000000))*(px)*(py)*(r01)*(r02)*(sj0)))+(((IkReal(-0.760000000000000))*(cj0)*(py)*((pz)*(pz))*((r01)*(r01))))+(((IkReal(-0.760000000000000))*(cj0)*(py)*((px)*(px))*((r01)*(r01))))+(((IkReal(-0.266000000000000))*(cj0)*(r01)*(r02)*((py)*(py))))+(((IkReal(-0.760000000000000))*(cj0)*(pz)*(r01)*(r02)*((px)*(px))))+(((IkReal(-0.258720000000000))*(pz)*((r02)*(r02))))+(((IkReal(-1.40000000000000))*(pp)*(px)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(0.720000000000000))*((py)*(py))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(4.00000000000000))*(pp)*(px)*(pz)*(r00)*(r02)))+(((IkReal(0.0722000000000000))*(py)*(pz)*(r01)*(r02)*((cj0)*(cj0))))+(((IkReal(4.00000000000000))*(pp)*(py)*(pz)*(r01)*(r02)))+(((IkReal(-2.80000000000000))*(cj0)*(pz)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(-1.00000000000000))*((cj0)*(cj0))*((pp)*(pp))*((r00)*(r00))))+(((IkReal(-2.80000000000000))*(px)*(py)*(pz)*(r00)*(r01)*((cj0)*(cj0))))+(((IkReal(-0.760000000000000))*(pz)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(1.71920000000000))*(px)*(py)*(r00)*(r01)*((sj0)*(sj0))))+(((IkReal(-0.258720000000000))*(py)*(r01)*(r02)))+(((IkReal(-1.52000000000000))*(px)*(py)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(0.760000000000000))*(py)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(0.0702240000000000))*(px)*(sj0)*((r02)*(r02))))+(((IkReal(4.00000000000000))*(pp)*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(-4.00000000000000))*((px)*(px))*((py)*(py))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(1.71920000000000))*(cj0)*(px)*(py)*(sj0)*((r00)*(r00))))+(((IkReal(-0.266000000000000))*(cj0)*(py)*(pz)*((r02)*(r02))))+(((IkReal(1.71920000000000))*(cj0)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-0.532000000000000))*(r00)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(1.71920000000000))*(cj0)*(r00)*(r01)*(sj0)*((py)*(py))))+(((IkReal(0.0702240000000000))*(cj0)*(px)*(r00)*(r01)))+(((IkReal(-4.00000000000000))*((cj0)*(cj0))*((px)*(px))*((py)*(py))*((r01)*(r01))))+(((IkReal(0.0228760000000000))*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(0.380000000000000))*(cj0)*(pp)*(pz)*(r01)*(r02)))+(((IkReal(0.532000000000000))*(cj0)*(py)*(pz)*((r01)*(r01))))+(((IkReal(1.71920000000000))*((cj0)*(cj0))*((px)*(px))*((r00)*(r00))))+(((IkReal(-16.0000000000000))*(cj0)*(r00)*(r01)*(sj0)*((px)*(px))*((py)*(py))))+(((IkReal(0.760000000000000))*(r00)*(r02)*(sj0)*((pz)*(pz)*(pz))))+(((IkReal(-0.0641615800000000))*(cj0)*(r00)*(r01)*(sj0)))+(((IkReal(4.00000000000000))*(pp)*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.0361000000000000))*((px)*(px))*((r01)*(r01))))+(((IkReal(0.270550000000000))*(cj0)*(py)*(r00)*(r02)*(sj0)))+(((IkReal(-0.0365030400000000))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-1.40000000000000))*(pp)*(px)*(r00)*(r02)))+(((IkReal(-16.0000000000000))*(cj0)*(py)*(pz)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(-4.00000000000000))*((px)*(px))*((pz)*(pz))*((r00)*(r00))))+(((IkReal(0.0252700000000000))*(pz)*((cj0)*(cj0))*((r01)*(r01))))+(((IkReal(-8.00000000000000))*(py)*(pz)*(r01)*(r02)*((cj0)*(cj0))*((px)*(px))))+(((IkReal(0.380000000000000))*(pp)*(px)*(sj0)*((r01)*(r01))))+(((IkReal(2.80000000000000))*(pz)*((py)*(py))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(-0.760000000000000))*(cj0)*(r00)*(r01)*((px)*(px)*(px))))+(((IkReal(-0.240800000000000))*(py)*(pz)*(r01)*(r02)))+(((IkReal(-0.380000000000000))*(cj0)*(pp)*(py)*((r00)*(r00))))+(((IkReal(0.266000000000000))*(cj0)*(r01)*(r02)*((px)*(px))))+(((IkReal(4.00000000000000))*(pp)*(py)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-8.00000000000000))*(pz)*(r01)*(r02)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(-0.266000000000000))*(px)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(0.532000000000000))*(cj0)*(r01)*(r02)*((pz)*(pz))))+(((IkReal(0.720000000000000))*((pz)*(pz))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-1.40000000000000))*(pp)*(py)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-0.859600000000000))*(pp)*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.245280000000000))*(pz)*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-0.0361000000000000))*((cj0)*(cj0))*((py)*(py))*((r02)*(r02))))+(((IkReal(0.279200000000000))*(py)*(pz)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(1.71920000000000))*(cj0)*(px)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-0.760000000000000))*(py)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-0.541100000000000))*(cj0)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(-8.00000000000000))*(px)*(r00)*(r01)*((py)*(py)*(py))*((sj0)*(sj0))))+(((IkReal(2.80000000000000))*(pz)*((cj0)*(cj0))*((px)*(px))*((r02)*(r02))))+(((IkReal(-0.490000000000000))*((py)*(py))*((r01)*(r01))))+(((IkReal(-0.532000000000000))*(px)*(pz)*(sj0)*((r00)*(r00))))+(((IkReal(0.249200000000000))*((pz)*(pz))*((r02)*(r02))))+(((IkReal(0.760000000000000))*(pz)*(r00)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-0.0361000000000000))*((cj0)*(cj0))*((pz)*(pz))*((r01)*(r01))))+(((IkReal(1.40000000000000))*(pp)*(pz)*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(2.80000000000000))*(py)*(r01)*(r02)*((cj0)*(cj0))*((px)*(px))))+(((IkReal(-0.0252700000000000))*(py)*(r01)*(r02)*((cj0)*(cj0))))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(px)*(py)*(sj0)*((r01)*(r01))))+(((IkReal(-8.00000000000000))*(cj0)*(py)*(sj0)*((px)*(px)*(px))*((r00)*(r00))))+(((IkReal(0.207000000000000))*(cj0)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.0361000000000000))*((py)*(py))*((r00)*(r00))))+(((IkReal(0.207000000000000))*(cj0)*(px)*(pz)*(r01)*(r02)*(sj0)))+(((IkReal(-2.80000000000000))*(cj0)*(pz)*(r00)*(r01)*(sj0)*((px)*(px))))+(((IkReal(-2.80000000000000))*(pz)*((py)*(py))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.760000000000000))*(px)*(sj0)*((pz)*(pz))*((r00)*(r00))))+(((IkReal(-4.00000000000000))*((py)*(py))*((pz)*(pz))*((r02)*(r02))*((sj0)*(sj0))))+(((IkReal(-0.266000000000000))*(r00)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-0.133000000000000))*(cj0)*(pp)*(r01)*(r02)))+(((IkReal(-2.80000000000000))*(cj0)*(px)*(r01)*(r02)*(sj0)*((pz)*(pz))))+(((IkReal(-0.907800000000000))*(px)*(py)*(r00)*(r01)))+(((IkReal(-1.40000000000000))*(cj0)*(pp)*(px)*(r01)*(r02)*(sj0)))+(((IkReal(2.80000000000000))*((pz)*(pz)*(pz))*((r02)*(r02))))+(((IkReal(1.52000000000000))*(cj0)*(px)*(py)*(pz)*(r00)*(r02)))+(((IkReal(0.760000000000000))*(px)*(sj0)*((py)*(py))*((r00)*(r00))))+(((IkReal(-0.380000000000000))*(pp)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-0.760000000000000))*(cj0)*(r01)*(r02)*((pz)*(pz)*(pz))))+(((IkReal(0.245280000000000))*(px)*(r00)*(r02)*((cj0)*(cj0))))+(((IkReal(-0.245280000000000))*(pz)*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(-0.0245784000000000))*(cj0)*(r01)*(r02)))+(((IkReal(-0.163324000000000))*(cj0)*(py)*((r00)*(r00))))+(((IkReal(0.720000000000000))*((cj0)*(cj0))*((px)*(px))*((r02)*(r02))))+(((IkReal(-8.00000000000000))*(px)*(pz)*(r00)*(r02)*((py)*(py))*((sj0)*(sj0))))+(((IkReal(-4.00000000000000))*((py)*(py))*((pz)*(pz))*((r01)*(r01))))+(((IkReal(1.40000000000000))*(pp)*(pz)*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(-2.00000000000000))*(cj0)*(r00)*(r01)*(sj0)*((pp)*(pp))))+(((IkReal(-0.859600000000000))*(pp)*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(-4.00000000000000))*((pz)*(pz)*(pz)*(pz))*((r02)*(r02))))+(((IkReal(5.60000000000000))*(px)*(r00)*(r02)*((pz)*(pz))))+(((IkReal(-0.266000000000000))*(py)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(0.0245784000000000))*(r00)*(r02)*(sj0)))+(((IkReal(-1.71920000000000))*(cj0)*(pp)*(r00)*(r01)*(sj0)))+(((IkReal(0.760000000000000))*(r00)*(r01)*(sj0)*((py)*(py)*(py))))+(((IkReal(5.60000000000000))*(cj0)*(px)*(py)*(pz)*(sj0)*((r02)*(r02))))+(((IkReal(5.60000000000000))*(cj0)*(px)*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(-1.40000000000000))*(pp)*(py)*(r01)*(r02)))+(((IkReal(-2.80000000000000))*(cj0)*(px)*(py)*(pz)*(sj0)*((r01)*(r01))))+(((IkReal(-0.490000000000000))*((px)*(px))*((r00)*(r00))))+(((IkReal(-8.00000000000000))*(px)*(py)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(-1.40000000000000))*(cj0)*(pp)*(py)*(r00)*(r02)*(sj0)))+(((IkReal(2.80000000000000))*(px)*(r00)*(r02)*((py)*(py))*((sj0)*(sj0))))+(((IkReal(-4.00000000000000))*((cj0)*(cj0))*((px)*(px))*((pz)*(pz))*((r02)*(r02))))+(((IkReal(1.51220000000000))*(cj0)*(r00)*(r01)*(sj0)*((pz)*(pz))))+(((IkReal(-0.760000000000000))*(px)*(sj0)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-0.0931000000000000))*(cj0)*(py)*((r01)*(r01))))+(((IkReal(2.80000000000000))*(r00)*(r02)*((cj0)*(cj0))*((px)*(px)*(px))))+(((IkReal(0.266000000000000))*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(-0.760000000000000))*(px)*(sj0)*((py)*(py))*((r01)*(r01))))+(((IkReal(-2.80000000000000))*(cj0)*(px)*(py)*(pz)*(sj0)*((r00)*(r00))))+(((IkReal(2.80000000000000))*(cj0)*(pp)*(pz)*(r00)*(r01)*(sj0)))+(((IkReal(0.380000000000000))*(pp)*(px)*(sj0)*((r02)*(r02))))+(((IkReal(-8.00000000000000))*(cj0)*(px)*(py)*(sj0)*((pz)*(pz))*((r02)*(r02))))+(((IkReal(-1.40000000000000))*(pp)*(pz)*((r02)*(r02))))+(((IkReal(2.80000000000000))*(pz)*((px)*(px))*((r00)*(r00))))+(((IkReal(-0.380000000000000))*(cj0)*(pp)*(py)*((r02)*(r02))))+(((IkReal(-0.760000000000000))*(cj0)*(px)*(r00)*(r01)*((pz)*(pz))))+(((IkReal(-1.00000000000000))*((pp)*(pp))*((r01)*(r01))*((sj0)*(sj0))))+(((IkReal(0.133000000000000))*(pp)*(r00)*(r02)*(sj0)))+(((IkReal(0.0722000000000000))*(px)*(pz)*(r00)*(r02)*((sj0)*(sj0))))+(((IkReal(0.266000000000000))*(cj0)*(py)*(pz)*((r00)*(r00))))+(((IkReal(5.60000000000000))*(cj0)*(py)*(r00)*(r02)*(sj0)*((px)*(px))))+(((IkReal(4.00000000000000))*(cj0)*(pp)*(py)*(pz)*(r00)*(r02)*(sj0)))+(((IkReal(-8.00000000000000))*(cj0)*(px)*(sj0)*((py)*(py)*(py))*((r01)*(r01))))+(((IkReal(-16.0000000000000))*(cj0)*(px)*(pz)*(r01)*(r02)*(sj0)*((py)*(py))))+(((IkReal(0.245280000000000))*(py)*(r01)*(r02)*((sj0)*(sj0))))+(((IkReal(-0.0365030400000000))*((cj0)*(cj0))*((r00)*(r00))))+(((IkReal(0.266000000000000))*(cj0)*(px)*(pz)*(r00)*(r01)))+(((IkReal(-0.0361000000000000))*((pz)*(pz))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(-0.0702240000000000))*(cj0)*(py)*((r02)*(r02))))+(((IkReal(-0.0702240000000000))*(py)*(r00)*(r01)*(sj0)))+(((IkReal(0.760000000000000))*(cj0)*(px)*(r00)*(r01)*((py)*(py))))+(((IkReal(-0.00442225000000000))*((r00)*(r00))*((sj0)*(sj0))))+(((IkReal(0.266000000000000))*(px)*(pz)*(sj0)*((r02)*(r02))))+(((IkReal(-2.80000000000000))*(px)*(r00)*(r02)*((cj0)*(cj0))*((pz)*(pz)))));
343 polyroots4(op,zeror,numroots);
344 IkReal j1array[4], cj1array[4], sj1array[4], tempj1array[1];
345 int numsolutions = 0;
346 for(int ij1 = 0; ij1 < numroots; ++ij1)
347 {
348 IkReal htj1 = zeror[ij1];
349 tempj1array[0]=((IkReal(2.00000000000000))*(atan(htj1)));
350 for(int kj1 = 0; kj1 < 1; ++kj1)
351 {
352 j1array[numsolutions] = tempj1array[kj1];
353 if( j1array[numsolutions] > IKPI )
354 {
355  j1array[numsolutions]-=IK2PI;
356 }
357 else if( j1array[numsolutions] < -IKPI )
358 {
359  j1array[numsolutions]+=IK2PI;
360 }
361 sj1array[numsolutions] = IKsin(j1array[numsolutions]);
362 cj1array[numsolutions] = IKcos(j1array[numsolutions]);
363 numsolutions++;
364 }
365 }
366 bool j1valid[4]={true,true,true,true};
367 _nj1 = 4;
368 for(int ij1 = 0; ij1 < numsolutions; ++ij1)
369  {
370 if( !j1valid[ij1] )
371 {
372  continue;
373 }
374  j1 = j1array[ij1]; cj1 = cj1array[ij1]; sj1 = sj1array[ij1];
375 htj1 = IKtan(j1/2);
376 
377 _ij1[0] = ij1; _ij1[1] = -1;
378 for(int iij1 = ij1+1; iij1 < numsolutions; ++iij1)
379 {
380 if( j1valid[iij1] && IKabs(cj1array[ij1]-cj1array[iij1]) < IKFAST_SOLUTION_THRESH && IKabs(sj1array[ij1]-sj1array[iij1]) < IKFAST_SOLUTION_THRESH )
381 {
382  j1valid[iij1]=false; _ij1[1] = iij1; break;
383 }
384 }
385 {
386 IkReal j4array[2], cj4array[2], sj4array[2];
387 bool j4valid[2]={false};
388 _nj4 = 2;
389 sj4array[0]=((((IkReal(-1.00000000000000))*(r00)*(sj0)))+(((cj0)*(r01))));
390 if( sj4array[0] >= -1-IKFAST_SINCOS_THRESH && sj4array[0] <= 1+IKFAST_SINCOS_THRESH )
391 {
392  j4valid[0] = j4valid[1] = true;
393  j4array[0] = IKasin(sj4array[0]);
394  cj4array[0] = IKcos(j4array[0]);
395  sj4array[1] = sj4array[0];
396  j4array[1] = j4array[0] > 0 ? (IKPI-j4array[0]) : (-IKPI-j4array[0]);
397  cj4array[1] = -cj4array[0];
398 }
399 else if( isnan(sj4array[0]) )
400 {
401  // probably any value will work
402  j4valid[0] = true;
403  cj4array[0] = 1; sj4array[0] = 0; j4array[0] = 0;
404 }
405 for(int ij4 = 0; ij4 < 2; ++ij4)
406 {
407 if( !j4valid[ij4] )
408 {
409  continue;
410 }
411 _ij4[0] = ij4; _ij4[1] = -1;
412 for(int iij4 = ij4+1; iij4 < 2; ++iij4)
413 {
414 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
415 {
416  j4valid[iij4]=false; _ij4[1] = iij4; break;
417 }
418 }
419 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
420 
421 {
422 IkReal dummyeval[1];
423 IkReal gconst0;
424 gconst0=IKsign(cj4);
425 dummyeval[0]=cj4;
426 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
427 {
428 {
429 IkReal dummyeval[1];
430 dummyeval[0]=cj4;
431 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
432 {
433 {
434 IkReal evalcond[9];
435 IkReal x27=(py)*(py);
436 IkReal x28=(px)*(px);
437 IkReal x29=(pz)*(pz);
438 IkReal x30=((cj1)*(r02));
439 IkReal x31=((IkReal(0.190000000000000))*(pz));
440 IkReal x32=((cj0)*(sj1));
441 IkReal x33=((cj1)*(r00));
442 IkReal x34=((IkReal(0.190000000000000))*(py));
443 IkReal x35=((px)*(sj0));
444 IkReal x36=((IkReal(2.00000000000000))*(r00));
445 IkReal x37=((r00)*(sj1));
446 IkReal x38=((px)*(r01));
447 IkReal x39=((IkReal(0.190000000000000))*(sj1));
448 IkReal x40=((IkReal(2.00000000000000))*(py));
449 IkReal x41=((py)*(r01));
450 IkReal x42=((IkReal(1.00000000000000))*(cj0));
451 IkReal x43=((r02)*(sj1));
452 IkReal x44=((r00)*(sj0));
453 IkReal x45=((IkReal(0.700000000000000))*(r00));
454 IkReal x46=((pz)*(r01));
455 IkReal x47=((IkReal(2.00000000000000))*(pz));
456 IkReal x48=((cj0)*(r01));
457 IkReal x49=((pz)*(r02));
458 IkReal x50=((cj0)*(pz));
459 IkReal x51=((r01)*(sj0)*(sj1));
460 IkReal x52=((cj0)*(px)*(r02));
461 IkReal x53=((sj1)*(x47));
462 IkReal x54=((py)*(r02)*(sj0));
463 IkReal x55=((cj1)*(r01)*(sj0));
464 IkReal x56=((IkReal(2.00000000000000))*(x27));
465 IkReal x57=((IkReal(2.00000000000000))*(x29));
466 IkReal x58=((sj0)*(x40)*(x49));
467 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j4)), IkReal(6.28318530717959))));
468 evalcond[1]=((IkReal(-0.0950000000000000))+(x35)+(((IkReal(-1.00000000000000))*(py)*(x42))));
469 evalcond[2]=((IkReal(1.00000000000000))+(x44)+(((IkReal(-1.00000000000000))*(r01)*(x42))));
470 evalcond[3]=((x51)+(x30)+(((r00)*(x32))));
471 evalcond[4]=((((IkReal(-1.00000000000000))*(x55)))+(x43)+(((IkReal(-1.00000000000000))*(x33)*(x42))));
472 evalcond[5]=((((IkReal(-0.0950000000000000))*(x48)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((IkReal(0.350000000000000))*(x51)))+(((IkReal(-1.00000000000000))*(x41)))+(((IkReal(-1.00000000000000))*(x49)))+(((IkReal(0.350000000000000))*(r00)*(x32)))+(((IkReal(0.0950000000000000))*(x44)))+(((IkReal(0.350000000000000))*(x30))));
473 evalcond[6]=((((IkReal(0.350000000000000))*(x43)))+(((IkReal(-1.00000000000000))*(x54)))+(((sj0)*(x46)))+(((IkReal(-0.350000000000000))*(x55)))+(((r00)*(x50)))+(((IkReal(-0.350000000000000))*(cj0)*(x33)))+(((IkReal(-1.00000000000000))*(px)*(r02)*(x42))));
474 evalcond[7]=((((IkReal(-1.00000000000000))*(pz)*(sj0)*(x40)*(x43)))+(((pp)*(x51)))+(((IkReal(-1.00000000000000))*(x38)*(x39)))+(((sj0)*(x31)*(x33)))+(((IkReal(-0.113475000000000))*(x30)))+(((x34)*(x37)))+(((IkReal(0.700000000000000))*(x41)))+(((IkReal(-1.00000000000000))*(py)*(sj1)*(x35)*(x36)))+(((IkReal(0.0665000000000000))*(x48)))+(((IkReal(-1.00000000000000))*(cj1)*(x31)*(x48)))+(((IkReal(-1.00000000000000))*(x30)*(x57)))+(((IkReal(-0.190000000000000))*(x30)*(x35)))+(((IkReal(-0.0665000000000000))*(x44)))+(((IkReal(-0.113475000000000))*(r00)*(x32)))+(((IkReal(-1.00000000000000))*(x28)*(x32)*(x36)))+(((px)*(x45)))+(((IkReal(-1.00000000000000))*(px)*(r02)*(x32)*(x47)))+(((cj0)*(x30)*(x34)))+(((pp)*(x30)))+(((IkReal(-1.00000000000000))*(px)*(x33)*(x47)))+(((IkReal(0.700000000000000))*(x49)))+(((IkReal(-1.00000000000000))*(x32)*(x38)*(x40)))+(((IkReal(-1.00000000000000))*(x51)*(x56)))+(((IkReal(-0.113475000000000))*(x51)))+(((pp)*(r00)*(x32)))+(((IkReal(-1.00000000000000))*(cj1)*(x40)*(x46))));
475 evalcond[8]=((((IkReal(0.131525000000000))*(x43)))+(((IkReal(2.00000000000000))*(cj0)*(x28)*(x33)))+(((r02)*(x32)*(x34)))+(((cj0)*(px)*(x30)*(x47)))+(((IkReal(-0.131525000000000))*(cj0)*(x33)))+(((pp)*(x43)))+(((IkReal(0.700000000000000))*(sj0)*(x46)))+(((pz)*(sj0)*(x30)*(x40)))+(((cj0)*(cj1)*(x38)*(x40)))+(((IkReal(-1.00000000000000))*(r02)*(x35)*(x39)))+(((IkReal(0.190000000000000))*(cj1)*(x38)))+(((IkReal(-1.00000000000000))*(x33)*(x34)))+(((IkReal(-1.00000000000000))*(x43)*(x57)))+(((IkReal(-1.00000000000000))*(px)*(pz)*(sj1)*(x36)))+(((IkReal(-1.00000000000000))*(pp)*(x55)))+(((sj0)*(x31)*(x37)))+(((IkReal(-1.00000000000000))*(r01)*(x31)*(x32)))+(((IkReal(-1.00000000000000))*(sj1)*(x40)*(x46)))+(((IkReal(-0.131525000000000))*(x55)))+(((IkReal(-1.00000000000000))*(pp)*(x33)*(x42)))+(((IkReal(-0.700000000000000))*(x52)))+(((IkReal(-0.700000000000000))*(x54)))+(((x45)*(x50)))+(((x33)*(x35)*(x40)))+(((x55)*(x56))));
476 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 )
477 {
478 {
479 IkReal j3array[2], cj3array[2], sj3array[2];
480 bool j3valid[2]={false};
481 _nj3 = 2;
482 IkReal x59=((IkReal(9.79020979020979))*(sj1));
483 cj3array[0]=((IkReal(-2.45034965034965))+(((IkReal(2.65734265734266))*(cj0)*(py)))+(((IkReal(-1.00000000000000))*(cj0)*(px)*(x59)))+(((IkReal(-1.00000000000000))*(py)*(sj0)*(x59)))+(((IkReal(-2.65734265734266))*(px)*(sj0)))+(((IkReal(-9.79020979020979))*(cj1)*(pz)))+(((IkReal(13.9860139860140))*(pp))));
484 if( cj3array[0] >= -1-IKFAST_SINCOS_THRESH && cj3array[0] <= 1+IKFAST_SINCOS_THRESH )
485 {
486  j3valid[0] = j3valid[1] = true;
487  j3array[0] = IKacos(cj3array[0]);
488  sj3array[0] = IKsin(j3array[0]);
489  cj3array[1] = cj3array[0];
490  j3array[1] = -j3array[0];
491  sj3array[1] = -sj3array[0];
492 }
493 else if( isnan(cj3array[0]) )
494 {
495  // probably any value will work
496  j3valid[0] = true;
497  cj3array[0] = 1; sj3array[0] = 0; j3array[0] = 0;
498 }
499 for(int ij3 = 0; ij3 < 2; ++ij3)
500 {
501 if( !j3valid[ij3] )
502 {
503  continue;
504 }
505 _ij3[0] = ij3; _ij3[1] = -1;
506 for(int iij3 = ij3+1; iij3 < 2; ++iij3)
507 {
508 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
509 {
510  j3valid[iij3]=false; _ij3[1] = iij3; break;
511 }
512 }
513 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
514 {
515 IkReal evalcond[1];
516 IkReal x60=((IkReal(2.00000000000000))*(sj0));
517 IkReal x61=((px)*(r01));
518 IkReal x62=((r00)*(sj1));
519 IkReal x63=((IkReal(0.700000000000000))*(py));
520 IkReal x64=((r00)*(sj0));
521 IkReal x65=((IkReal(0.700000000000000))*(cj1));
522 IkReal x66=((px)*(r02));
523 IkReal x67=((IkReal(2.00000000000000))*(cj0));
524 IkReal x68=((px)*(r00));
525 IkReal x69=((cj0)*(r01));
526 IkReal x70=((pz)*(r02));
527 IkReal x71=((cj1)*(r02));
528 evalcond[0]=((IkReal(0.306725000000000))+(((IkReal(0.190000000000000))*(x70)))+(((IkReal(-1.00000000000000))*(pp)*(x69)))+(((IkReal(-1.00000000000000))*(pz)*(x60)*(x66)))+(((sj0)*(x65)*(x66)))+(((IkReal(-1.00000000000000))*(x62)*(x63)))+(((IkReal(0.0715000000000000))*(IKcos(j3))))+(((IkReal(0.190000000000000))*(py)*(r01)))+(((IkReal(-0.113475000000000))*(x69)))+(((IkReal(0.113475000000000))*(x64)))+(((r01)*(x67)*((py)*(py))))+(((IkReal(-0.0665000000000000))*(r01)*(sj0)*(sj1)))+(((pp)*(x64)))+(((IkReal(-1.00000000000000))*(py)*(x60)*(x61)))+(((IkReal(-1.00000000000000))*(pz)*(x64)*(x65)))+(((IkReal(-0.0665000000000000))*(cj0)*(x62)))+(((pz)*(x65)*(x69)))+(((IkReal(-1.00000000000000))*(px)*(x60)*(x68)))+(((py)*(x67)*(x68)))+(((IkReal(0.700000000000000))*(sj1)*(x61)))+(((py)*(x67)*(x70)))+(((IkReal(-0.0665000000000000))*(x71)))+(((IkReal(-1.00000000000000))*(cj0)*(x63)*(x71)))+(((IkReal(0.190000000000000))*(x68))));
529 if( IKabs(evalcond[0]) > 0.000001 )
530 {
531 continue;
532 }
533 }
534 
535 {
536 IkReal dummyeval[1];
537 IkReal gconst9;
538 gconst9=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
539 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
540 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
541 {
542 {
543 IkReal dummyeval[1];
544 IkReal gconst10;
545 gconst10=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
546 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
547 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
548 {
549 continue;
550 
551 } else
552 {
553 {
554 IkReal j2array[1], cj2array[1], sj2array[1];
555 bool j2valid[1]={false};
556 _nj2 = 1;
557 IkReal x72=((cj1)*(cj3));
558 IkReal x73=((sj0)*(sj1));
559 IkReal x74=((IkReal(22000.0000000000))*(pz));
560 IkReal x75=((IkReal(2600.00000000000))*(pz));
561 IkReal x76=((r02)*(sj1));
562 IkReal x77=((IkReal(2600.00000000000))*(sj3));
563 IkReal x78=((cj1)*(sj3));
564 IkReal x79=((r01)*(sj0));
565 IkReal x80=((cj0)*(sj1));
566 IkReal x81=((IkReal(2600.00000000000))*(cj3));
567 IkReal x82=((IkReal(2090.00000000000))*(cj1));
568 IkReal x83=((IkReal(22000.0000000000))*(px));
569 IkReal x84=((px)*(r02));
570 IkReal x85=((IkReal(22000.0000000000))*(py));
571 IkReal x86=((py)*(r00));
572 IkReal x87=((px)*(r01));
573 IkReal x88=((IkReal(247.000000000000))*(cj0)*(r00));
574 IkReal x89=((x77)*(x80));
575 if( IKabs(((gconst10)*(((((cj0)*(r00)*(x82)))+(((py)*(x73)*(x77)))+(((px)*(x89)))+(((cj1)*(r00)*(x85)))+(((IkReal(-1.00000000000000))*(cj0)*(x76)*(x85)))+(((x72)*(x88)))+(((IkReal(-247.000000000000))*(cj3)*(x76)))+(((r02)*(x73)*(x83)))+(((IkReal(-1.00000000000000))*(cj3)*(r00)*(x73)*(x75)))+(((IkReal(247.000000000000))*(x72)*(x79)))+(((IkReal(2600.00000000000))*(x72)*(x86)))+(((x79)*(x82)))+(((r01)*(x74)*(x80)))+(((IkReal(-910.000000000000))*(sj3)))+(((cj3)*(r01)*(x75)*(x80)))+(((IkReal(-2090.00000000000))*(x76)))+(((IkReal(-2600.00000000000))*(x72)*(x87)))+(((x75)*(x78)))+(((IkReal(-1.00000000000000))*(r00)*(x73)*(x74)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x83)))+(((x73)*(x81)*(x84)))+(((IkReal(-1.00000000000000))*(cj0)*(py)*(x76)*(x81))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst10)*(((IkReal(7700.00000000000))+(((x78)*(x88)))+(((IkReal(-1.00000000000000))*(cj0)*(py)*(x76)*(x77)))+(((IkReal(-1.00000000000000))*(x72)*(x75)))+(((r01)*(sj3)*(x75)*(x80)))+(((IkReal(-1.00000000000000))*(r00)*(sj3)*(x73)*(x75)))+(((cj1)*(x77)*(x86)))+(((IkReal(-1.00000000000000))*(px)*(x80)*(x81)))+(((IkReal(-1.00000000000000))*(x80)*(x83)))+(((IkReal(-1.00000000000000))*(py)*(x73)*(x81)))+(((x73)*(x77)*(x84)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(x73)*(x85)))+(((IkReal(-247.000000000000))*(sj3)*(x76)))+(((IkReal(247.000000000000))*(x78)*(x79)))+(((IkReal(-1.00000000000000))*(cj1)*(x74)))+(((IkReal(-1.00000000000000))*(cj1)*(x77)*(x87))))))) < IKFAST_ATAN2_MAGTHRESH )
576  continue;
577 j2array[0]=IKatan2(((gconst10)*(((((cj0)*(r00)*(x82)))+(((py)*(x73)*(x77)))+(((px)*(x89)))+(((cj1)*(r00)*(x85)))+(((IkReal(-1.00000000000000))*(cj0)*(x76)*(x85)))+(((x72)*(x88)))+(((IkReal(-247.000000000000))*(cj3)*(x76)))+(((r02)*(x73)*(x83)))+(((IkReal(-1.00000000000000))*(cj3)*(r00)*(x73)*(x75)))+(((IkReal(247.000000000000))*(x72)*(x79)))+(((IkReal(2600.00000000000))*(x72)*(x86)))+(((x79)*(x82)))+(((r01)*(x74)*(x80)))+(((IkReal(-910.000000000000))*(sj3)))+(((cj3)*(r01)*(x75)*(x80)))+(((IkReal(-2090.00000000000))*(x76)))+(((IkReal(-2600.00000000000))*(x72)*(x87)))+(((x75)*(x78)))+(((IkReal(-1.00000000000000))*(r00)*(x73)*(x74)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x83)))+(((x73)*(x81)*(x84)))+(((IkReal(-1.00000000000000))*(cj0)*(py)*(x76)*(x81)))))), ((gconst10)*(((IkReal(7700.00000000000))+(((x78)*(x88)))+(((IkReal(-1.00000000000000))*(cj0)*(py)*(x76)*(x77)))+(((IkReal(-1.00000000000000))*(x72)*(x75)))+(((r01)*(sj3)*(x75)*(x80)))+(((IkReal(-1.00000000000000))*(r00)*(sj3)*(x73)*(x75)))+(((cj1)*(x77)*(x86)))+(((IkReal(-1.00000000000000))*(px)*(x80)*(x81)))+(((IkReal(-1.00000000000000))*(x80)*(x83)))+(((IkReal(-1.00000000000000))*(py)*(x73)*(x81)))+(((x73)*(x77)*(x84)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(x73)*(x85)))+(((IkReal(-247.000000000000))*(sj3)*(x76)))+(((IkReal(247.000000000000))*(x78)*(x79)))+(((IkReal(-1.00000000000000))*(cj1)*(x74)))+(((IkReal(-1.00000000000000))*(cj1)*(x77)*(x87)))))));
578 sj2array[0]=IKsin(j2array[0]);
579 cj2array[0]=IKcos(j2array[0]);
580 if( j2array[0] > IKPI )
581 {
582  j2array[0]-=IK2PI;
583 }
584 else if( j2array[0] < -IKPI )
585 { j2array[0]+=IK2PI;
586 }
587 j2valid[0] = true;
588 for(int ij2 = 0; ij2 < 1; ++ij2)
589 {
590 if( !j2valid[ij2] )
591 {
592  continue;
593 }
594 _ij2[0] = ij2; _ij2[1] = -1;
595 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
596 {
597 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
598 {
599  j2valid[iij2]=false; _ij2[1] = iij2; break;
600 }
601 }
602 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
603 {
604 IkReal evalcond[4];
605 IkReal x90=IKcos(j2);
606 IkReal x91=IKsin(j2);
607 IkReal x92=((px)*(sj1));
608 IkReal x93=((py)*(sj1));
609 IkReal x94=((cj1)*(sj0));
610 IkReal x95=((IkReal(1.00000000000000))*(px));
611 IkReal x96=((r00)*(sj0));
612 IkReal x97=((IkReal(0.0950000000000000))*(r01));
613 IkReal x98=((IkReal(0.0650000000000000))*(cj3));
614 IkReal x99=((cj0)*(r01));
615 IkReal x100=((IkReal(0.0950000000000000))*(cj1));
616 IkReal x101=((pz)*(sj1));
617 IkReal x102=((cj0)*(r00));
618 IkReal x103=((IkReal(0.0950000000000000))*(sj1));
619 IkReal x104=((cj0)*(cj1));
620 IkReal x105=((cj1)*(pz));
621 IkReal x106=((IkReal(0.0650000000000000))*(sj3));
622 IkReal x107=((IkReal(0.550000000000000))*(x91));
623 IkReal x108=((IkReal(0.550000000000000))*(x90));
624 IkReal x109=((x91)*(x98));
625 IkReal x110=((x106)*(x90));
626 IkReal x111=((x90)*(x98));
627 IkReal x112=((x106)*(x91));
628 IkReal x113=((x108)+(x111));
629 IkReal x114=((x109)+(x107)+(x110));
630 evalcond[0]=((IkReal(-0.350000000000000))+(((sj0)*(x93)))+(((cj0)*(x92)))+(x105)+(x112)+(((IkReal(-1.00000000000000))*(x113))));
631 evalcond[1]=((((IkReal(-1.00000000000000))*(py)*(x94)))+(x101)+(x114)+(((IkReal(-1.00000000000000))*(x104)*(x95))));
632 evalcond[2]=((((r02)*(sj0)*(x92)))+(((IkReal(-1.00000000000000))*(r02)*(x103)))+(((cj1)*(py)*(r00)))+(((x100)*(x102)))+(((IkReal(-1.00000000000000))*(x101)*(x96)))+(x114)+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x95)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x93)))+(((x101)*(x99)))+(((x94)*(x97))));
633 evalcond[3]=((((IkReal(-1.00000000000000))*(r02)*(x94)*(x95)))+(((IkReal(-0.350000000000000))*(x96)))+(((sj0)*(sj1)*(x97)))+(((IkReal(-1.00000000000000))*(r01)*(x92)))+(((IkReal(-1.00000000000000))*(x105)*(x99)))+(((r00)*(x93)))+(((x102)*(x103)))+(((py)*(r02)*(x104)))+(((IkReal(0.350000000000000))*(x99)))+(((IkReal(-1.00000000000000))*(x112)))+(x113)+(((r02)*(x100)))+(((pz)*(r00)*(x94))));
634 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
635 {
636 continue;
637 }
638 }
639 
640 {
641 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
642 vinfos[0].jointtype = 1;
643 vinfos[0].foffset = j0;
644 vinfos[0].indices[0] = _ij0[0];
645 vinfos[0].indices[1] = _ij0[1];
646 vinfos[0].maxsolutions = _nj0;
647 vinfos[1].jointtype = 1;
648 vinfos[1].foffset = j1;
649 vinfos[1].indices[0] = _ij1[0];
650 vinfos[1].indices[1] = _ij1[1];
651 vinfos[1].maxsolutions = _nj1;
652 vinfos[2].jointtype = 1;
653 vinfos[2].foffset = j2;
654 vinfos[2].indices[0] = _ij2[0];
655 vinfos[2].indices[1] = _ij2[1];
656 vinfos[2].maxsolutions = _nj2;
657 vinfos[3].jointtype = 1;
658 vinfos[3].foffset = j3;
659 vinfos[3].indices[0] = _ij3[0];
660 vinfos[3].indices[1] = _ij3[1];
661 vinfos[3].maxsolutions = _nj3;
662 vinfos[4].jointtype = 1;
663 vinfos[4].foffset = j4;
664 vinfos[4].indices[0] = _ij4[0];
665 vinfos[4].indices[1] = _ij4[1];
666 vinfos[4].maxsolutions = _nj4;
667 std::vector<int> vfree(0);
668 solutions.AddSolution(vinfos,vfree);
669 }
670 }
671 }
672 
673 }
674 
675 }
676 
677 } else
678 {
679 {
680 IkReal j2array[1], cj2array[1], sj2array[1];
681 bool j2valid[1]={false};
682 _nj2 = 1;
683 IkReal x115=((IkReal(2600.00000000000))*(sj3));
684 IkReal x116=((py)*(sj0));
685 IkReal x117=((pz)*(sj1));
686 IkReal x118=((IkReal(2600.00000000000))*(cj3));
687 IkReal x119=((cj1)*(pz));
688 IkReal x120=((IkReal(22000.0000000000))*(cj1));
689 IkReal x121=((cj0)*(px));
690 IkReal x122=((sj1)*(x121));
691 if( IKabs(((gconst9)*(((((IkReal(-1.00000000000000))*(x116)*(x120)))+(((x117)*(x118)))+(((IkReal(-1.00000000000000))*(cj1)*(x118)*(x121)))+(((x115)*(x122)))+(((IkReal(22000.0000000000))*(x117)))+(((IkReal(-1.00000000000000))*(cj1)*(x116)*(x118)))+(((IkReal(-910.000000000000))*(sj3)))+(((sj1)*(x115)*(x116)))+(((IkReal(-1.00000000000000))*(x120)*(x121)))+(((x115)*(x119))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst9)*(((IkReal(7700.00000000000))+(((IkReal(-22000.0000000000))*(x122)))+(((x115)*(x117)))+(((IkReal(-1.00000000000000))*(cj1)*(x115)*(x116)))+(((IkReal(-22000.0000000000))*(sj1)*(x116)))+(((IkReal(-1.00000000000000))*(x118)*(x119)))+(((IkReal(-1.00000000000000))*(cj1)*(x115)*(x121)))+(((IkReal(-1.00000000000000))*(x118)*(x122)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-22000.0000000000))*(x119)))+(((IkReal(-1.00000000000000))*(sj1)*(x116)*(x118))))))) < IKFAST_ATAN2_MAGTHRESH )
692  continue;
693 j2array[0]=IKatan2(((gconst9)*(((((IkReal(-1.00000000000000))*(x116)*(x120)))+(((x117)*(x118)))+(((IkReal(-1.00000000000000))*(cj1)*(x118)*(x121)))+(((x115)*(x122)))+(((IkReal(22000.0000000000))*(x117)))+(((IkReal(-1.00000000000000))*(cj1)*(x116)*(x118)))+(((IkReal(-910.000000000000))*(sj3)))+(((sj1)*(x115)*(x116)))+(((IkReal(-1.00000000000000))*(x120)*(x121)))+(((x115)*(x119)))))), ((gconst9)*(((IkReal(7700.00000000000))+(((IkReal(-22000.0000000000))*(x122)))+(((x115)*(x117)))+(((IkReal(-1.00000000000000))*(cj1)*(x115)*(x116)))+(((IkReal(-22000.0000000000))*(sj1)*(x116)))+(((IkReal(-1.00000000000000))*(x118)*(x119)))+(((IkReal(-1.00000000000000))*(cj1)*(x115)*(x121)))+(((IkReal(-1.00000000000000))*(x118)*(x122)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-22000.0000000000))*(x119)))+(((IkReal(-1.00000000000000))*(sj1)*(x116)*(x118)))))));
694 sj2array[0]=IKsin(j2array[0]);
695 cj2array[0]=IKcos(j2array[0]);
696 if( j2array[0] > IKPI )
697 {
698  j2array[0]-=IK2PI;
699 }
700 else if( j2array[0] < -IKPI )
701 { j2array[0]+=IK2PI;
702 }
703 j2valid[0] = true;
704 for(int ij2 = 0; ij2 < 1; ++ij2)
705 {
706 if( !j2valid[ij2] )
707 {
708  continue;
709 }
710 _ij2[0] = ij2; _ij2[1] = -1;
711 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
712 {
713 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
714 {
715  j2valid[iij2]=false; _ij2[1] = iij2; break;
716 }
717 }
718 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
719 {
720 IkReal evalcond[4];
721 IkReal x123=IKcos(j2);
722 IkReal x124=IKsin(j2);
723 IkReal x125=((px)*(sj1));
724 IkReal x126=((py)*(sj1));
725 IkReal x127=((cj1)*(sj0));
726 IkReal x128=((IkReal(1.00000000000000))*(px));
727 IkReal x129=((r00)*(sj0));
728 IkReal x130=((IkReal(0.0950000000000000))*(r01));
729 IkReal x131=((IkReal(0.0650000000000000))*(cj3));
730 IkReal x132=((cj0)*(r01));
731 IkReal x133=((IkReal(0.0950000000000000))*(cj1));
732 IkReal x134=((pz)*(sj1));
733 IkReal x135=((cj0)*(r00));
734 IkReal x136=((IkReal(0.0950000000000000))*(sj1));
735 IkReal x137=((cj0)*(cj1));
736 IkReal x138=((cj1)*(pz));
737 IkReal x139=((IkReal(0.0650000000000000))*(sj3));
738 IkReal x140=((IkReal(0.550000000000000))*(x124));
739 IkReal x141=((IkReal(0.550000000000000))*(x123));
740 IkReal x142=((x124)*(x131));
741 IkReal x143=((x123)*(x139));
742 IkReal x144=((x123)*(x131));
743 IkReal x145=((x124)*(x139));
744 IkReal x146=((x141)+(x144));
745 IkReal x147=((x140)+(x142)+(x143));
746 evalcond[0]=((IkReal(-0.350000000000000))+(((sj0)*(x126)))+(((IkReal(-1.00000000000000))*(x146)))+(((cj0)*(x125)))+(x138)+(x145));
747 evalcond[1]=((((IkReal(-1.00000000000000))*(py)*(x127)))+(x134)+(x147)+(((IkReal(-1.00000000000000))*(x128)*(x137))));
748 evalcond[2]=((((IkReal(-1.00000000000000))*(r02)*(x136)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x128)))+(((r02)*(sj0)*(x125)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x126)))+(((IkReal(-1.00000000000000))*(x129)*(x134)))+(((x133)*(x135)))+(((cj1)*(py)*(r00)))+(((x127)*(x130)))+(((x132)*(x134)))+(x147));
749 evalcond[3]=((((r00)*(x126)))+(((IkReal(-1.00000000000000))*(x132)*(x138)))+(((IkReal(-0.350000000000000))*(x129)))+(((IkReal(0.350000000000000))*(x132)))+(((IkReal(-1.00000000000000))*(x145)))+(((x135)*(x136)))+(((r02)*(x133)))+(((IkReal(-1.00000000000000))*(r01)*(x125)))+(((IkReal(-1.00000000000000))*(r02)*(x127)*(x128)))+(((py)*(r02)*(x137)))+(x146)+(((pz)*(r00)*(x127)))+(((sj0)*(sj1)*(x130))));
750 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
751 {
752 continue;
753 }
754 }
755 
756 {
757 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
758 vinfos[0].jointtype = 1;
759 vinfos[0].foffset = j0;
760 vinfos[0].indices[0] = _ij0[0];
761 vinfos[0].indices[1] = _ij0[1];
762 vinfos[0].maxsolutions = _nj0;
763 vinfos[1].jointtype = 1;
764 vinfos[1].foffset = j1;
765 vinfos[1].indices[0] = _ij1[0];
766 vinfos[1].indices[1] = _ij1[1];
767 vinfos[1].maxsolutions = _nj1;
768 vinfos[2].jointtype = 1;
769 vinfos[2].foffset = j2;
770 vinfos[2].indices[0] = _ij2[0];
771 vinfos[2].indices[1] = _ij2[1];
772 vinfos[2].maxsolutions = _nj2;
773 vinfos[3].jointtype = 1;
774 vinfos[3].foffset = j3;
775 vinfos[3].indices[0] = _ij3[0];
776 vinfos[3].indices[1] = _ij3[1];
777 vinfos[3].maxsolutions = _nj3;
778 vinfos[4].jointtype = 1;
779 vinfos[4].foffset = j4;
780 vinfos[4].indices[0] = _ij4[0];
781 vinfos[4].indices[1] = _ij4[1];
782 vinfos[4].maxsolutions = _nj4;
783 std::vector<int> vfree(0);
784 solutions.AddSolution(vinfos,vfree);
785 }
786 }
787 }
788 
789 }
790 
791 }
792 }
793 }
794 
795 } else
796 {
797 IkReal x148=(py)*(py);
798 IkReal x149=(px)*(px);
799 IkReal x150=(pz)*(pz);
800 IkReal x151=((cj1)*(r02));
801 IkReal x152=((IkReal(0.190000000000000))*(pz));
802 IkReal x153=((cj0)*(sj1));
803 IkReal x154=((cj1)*(r00));
804 IkReal x155=((IkReal(0.190000000000000))*(py));
805 IkReal x156=((px)*(sj0));
806 IkReal x157=((IkReal(2.00000000000000))*(r00));
807 IkReal x158=((r00)*(sj1));
808 IkReal x159=((px)*(r01));
809 IkReal x160=((IkReal(0.190000000000000))*(sj1));
810 IkReal x161=((IkReal(2.00000000000000))*(py));
811 IkReal x162=((py)*(r01));
812 IkReal x163=((IkReal(1.00000000000000))*(cj0));
813 IkReal x164=((r02)*(sj1));
814 IkReal x165=((r00)*(sj0));
815 IkReal x166=((IkReal(0.700000000000000))*(r00));
816 IkReal x167=((pz)*(r01));
817 IkReal x168=((IkReal(2.00000000000000))*(pz));
818 IkReal x169=((cj0)*(r01));
819 IkReal x170=((pz)*(r02));
820 IkReal x171=((cj0)*(pz));
821 IkReal x172=((r01)*(sj0)*(sj1));
822 IkReal x173=((cj0)*(px)*(r02));
823 IkReal x174=((sj1)*(x168));
824 IkReal x175=((py)*(r02)*(sj0));
825 IkReal x176=((cj1)*(r01)*(sj0));
826 IkReal x177=((IkReal(2.00000000000000))*(x148));
827 IkReal x178=((IkReal(2.00000000000000))*(x150));
828 IkReal x179=((sj0)*(x161)*(x170));
829 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j4)), IkReal(6.28318530717959))));
830 evalcond[1]=((IkReal(-0.0950000000000000))+(x156)+(((IkReal(-1.00000000000000))*(py)*(x163))));
831 evalcond[2]=((IkReal(-1.00000000000000))+(x165)+(((IkReal(-1.00000000000000))*(r01)*(x163))));
832 evalcond[3]=((x172)+(x151)+(((r00)*(x153))));
833 evalcond[4]=((((IkReal(-1.00000000000000))*(x154)*(x163)))+(x164)+(((IkReal(-1.00000000000000))*(x176))));
834 evalcond[5]=((((IkReal(-1.00000000000000))*(x170)))+(((IkReal(0.0950000000000000))*(x165)))+(((IkReal(0.350000000000000))*(x151)))+(((IkReal(-1.00000000000000))*(x162)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((IkReal(0.350000000000000))*(r00)*(x153)))+(((IkReal(-0.0950000000000000))*(x169)))+(((IkReal(0.350000000000000))*(x172))));
835 evalcond[6]=((((sj0)*(x167)))+(((IkReal(-1.00000000000000))*(x175)))+(((IkReal(-0.350000000000000))*(x176)))+(((r00)*(x171)))+(((IkReal(-0.350000000000000))*(cj0)*(x154)))+(((IkReal(-1.00000000000000))*(px)*(r02)*(x163)))+(((IkReal(0.350000000000000))*(x164))));
836 evalcond[7]=((((IkReal(-1.00000000000000))*(x172)*(x177)))+(((sj0)*(x152)*(x154)))+(((IkReal(-0.113475000000000))*(x151)))+(((IkReal(-1.00000000000000))*(pz)*(sj0)*(x161)*(x164)))+(((pp)*(x151)))+(((IkReal(-1.00000000000000))*(x149)*(x153)*(x157)))+(((IkReal(0.700000000000000))*(x170)))+(((IkReal(-1.00000000000000))*(x159)*(x160)))+(((pp)*(x172)))+(((px)*(x166)))+(((x155)*(x158)))+(((IkReal(-1.00000000000000))*(cj1)*(x161)*(x167)))+(((IkReal(0.0665000000000000))*(x169)))+(((IkReal(-1.00000000000000))*(cj1)*(x152)*(x169)))+(((cj0)*(x151)*(x155)))+(((pp)*(r00)*(x153)))+(((IkReal(-1.00000000000000))*(x153)*(x159)*(x161)))+(((IkReal(-1.00000000000000))*(x151)*(x178)))+(((IkReal(0.700000000000000))*(x162)))+(((IkReal(-1.00000000000000))*(px)*(x154)*(x168)))+(((IkReal(-0.113475000000000))*(r00)*(x153)))+(((IkReal(-1.00000000000000))*(py)*(sj1)*(x156)*(x157)))+(((IkReal(-0.113475000000000))*(x172)))+(((IkReal(-1.00000000000000))*(px)*(r02)*(x153)*(x168)))+(((IkReal(-0.190000000000000))*(x151)*(x156)))+(((IkReal(-0.0665000000000000))*(x165))));
837 evalcond[8]=((((IkReal(0.700000000000000))*(sj0)*(x167)))+(((IkReal(2.00000000000000))*(cj0)*(x149)*(x154)))+(((IkReal(-1.00000000000000))*(px)*(pz)*(sj1)*(x157)))+(((IkReal(-1.00000000000000))*(x154)*(x155)))+(((cj0)*(cj1)*(x159)*(x161)))+(((x176)*(x177)))+(((IkReal(-1.00000000000000))*(r01)*(x152)*(x153)))+(((IkReal(-1.00000000000000))*(pp)*(x154)*(x163)))+(((IkReal(-1.00000000000000))*(r02)*(x156)*(x160)))+(((pz)*(sj0)*(x151)*(x161)))+(((IkReal(-0.700000000000000))*(x175)))+(((IkReal(0.190000000000000))*(cj1)*(x159)))+(((IkReal(-1.00000000000000))*(pp)*(x176)))+(((IkReal(0.131525000000000))*(x164)))+(((r02)*(x153)*(x155)))+(((IkReal(-1.00000000000000))*(sj1)*(x161)*(x167)))+(((IkReal(-0.131525000000000))*(x176)))+(((IkReal(-0.700000000000000))*(x173)))+(((sj0)*(x152)*(x158)))+(((IkReal(-0.131525000000000))*(cj0)*(x154)))+(((x166)*(x171)))+(((pp)*(x164)))+(((IkReal(-1.00000000000000))*(x164)*(x178)))+(((cj0)*(px)*(x151)*(x168)))+(((x154)*(x156)*(x161))));
838 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 )
839 {
840 {
841 IkReal j3array[2], cj3array[2], sj3array[2];
842 bool j3valid[2]={false};
843 _nj3 = 2;
844 IkReal x180=((IkReal(9.79020979020979))*(sj1));
845 cj3array[0]=((IkReal(-2.45034965034965))+(((IkReal(2.65734265734266))*(cj0)*(py)))+(((IkReal(-2.65734265734266))*(px)*(sj0)))+(((IkReal(-9.79020979020979))*(cj1)*(pz)))+(((IkReal(-1.00000000000000))*(cj0)*(px)*(x180)))+(((IkReal(13.9860139860140))*(pp)))+(((IkReal(-1.00000000000000))*(py)*(sj0)*(x180))));
846 if( cj3array[0] >= -1-IKFAST_SINCOS_THRESH && cj3array[0] <= 1+IKFAST_SINCOS_THRESH )
847 {
848  j3valid[0] = j3valid[1] = true;
849  j3array[0] = IKacos(cj3array[0]);
850  sj3array[0] = IKsin(j3array[0]);
851  cj3array[1] = cj3array[0];
852  j3array[1] = -j3array[0];
853  sj3array[1] = -sj3array[0];
854 }
855 else if( isnan(cj3array[0]) )
856 {
857  // probably any value will work
858  j3valid[0] = true;
859  cj3array[0] = 1; sj3array[0] = 0; j3array[0] = 0;
860 }
861 for(int ij3 = 0; ij3 < 2; ++ij3)
862 {
863 if( !j3valid[ij3] )
864 {
865  continue;
866 }
867 _ij3[0] = ij3; _ij3[1] = -1;
868 for(int iij3 = ij3+1; iij3 < 2; ++iij3)
869 {
870 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
871 {
872  j3valid[iij3]=false; _ij3[1] = iij3; break;
873 }
874 }
875 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
876 {
877 IkReal evalcond[1];
878 IkReal x181=((IkReal(2.00000000000000))*(sj0));
879 IkReal x182=((px)*(r01));
880 IkReal x183=((r00)*(sj1));
881 IkReal x184=((IkReal(0.700000000000000))*(py));
882 IkReal x185=((r00)*(sj0));
883 IkReal x186=((IkReal(0.700000000000000))*(cj1));
884 IkReal x187=((px)*(r02));
885 IkReal x188=((IkReal(2.00000000000000))*(cj0));
886 IkReal x189=((px)*(r00));
887 IkReal x190=((cj0)*(r01));
888 IkReal x191=((pz)*(r02));
889 IkReal x192=((cj1)*(r02));
890 evalcond[0]=((IkReal(-0.306725000000000))+(((py)*(x188)*(x191)))+(((IkReal(-1.00000000000000))*(pz)*(x181)*(x187)))+(((IkReal(-0.0665000000000000))*(cj0)*(x183)))+(((IkReal(-1.00000000000000))*(cj0)*(x184)*(x192)))+(((IkReal(-0.113475000000000))*(x190)))+(((IkReal(-1.00000000000000))*(py)*(x181)*(x182)))+(((IkReal(0.190000000000000))*(py)*(r01)))+(((IkReal(0.700000000000000))*(sj1)*(x182)))+(((IkReal(0.190000000000000))*(x189)))+(((IkReal(-1.00000000000000))*(pp)*(x190)))+(((IkReal(0.190000000000000))*(x191)))+(((IkReal(-1.00000000000000))*(x183)*(x184)))+(((r01)*(x188)*((py)*(py))))+(((IkReal(-0.0665000000000000))*(r01)*(sj0)*(sj1)))+(((pz)*(x186)*(x190)))+(((IkReal(0.113475000000000))*(x185)))+(((IkReal(-1.00000000000000))*(pz)*(x185)*(x186)))+(((py)*(x188)*(x189)))+(((IkReal(-0.0665000000000000))*(x192)))+(((pp)*(x185)))+(((sj0)*(x186)*(x187)))+(((IkReal(-1.00000000000000))*(px)*(x181)*(x189)))+(((IkReal(-0.0715000000000000))*(IKcos(j3)))));
891 if( IKabs(evalcond[0]) > 0.000001 )
892 {
893 continue;
894 }
895 }
896 
897 {
898 IkReal dummyeval[1];
899 IkReal gconst11;
900 gconst11=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
901 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
902 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
903 {
904 {
905 IkReal dummyeval[1];
906 IkReal gconst12;
907 gconst12=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
908 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
909 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
910 {
911 continue;
912 
913 } else
914 {
915 {
916 IkReal j2array[1], cj2array[1], sj2array[1];
917 bool j2valid[1]={false};
918 _nj2 = 1;
919 IkReal x193=((cj1)*(cj3));
920 IkReal x194=((sj0)*(sj1));
921 IkReal x195=((IkReal(22000.0000000000))*(pz));
922 IkReal x196=((IkReal(2600.00000000000))*(pz));
923 IkReal x197=((r02)*(sj1));
924 IkReal x198=((IkReal(2600.00000000000))*(sj3));
925 IkReal x199=((cj1)*(sj3));
926 IkReal x200=((r01)*(sj0));
927 IkReal x201=((cj0)*(sj1));
928 IkReal x202=((IkReal(2600.00000000000))*(cj3));
929 IkReal x203=((IkReal(2090.00000000000))*(cj1));
930 IkReal x204=((IkReal(22000.0000000000))*(px));
931 IkReal x205=((px)*(r02));
932 IkReal x206=((IkReal(22000.0000000000))*(py));
933 IkReal x207=((py)*(r00));
934 IkReal x208=((px)*(r01));
935 IkReal x209=((IkReal(247.000000000000))*(cj0)*(r00));
936 IkReal x210=((x198)*(x201));
937 if( IKabs(((gconst12)*(((((px)*(x210)))+(((IkReal(-1.00000000000000))*(x193)*(x209)))+(((py)*(x194)*(x198)))+(((cj3)*(r00)*(x194)*(x196)))+(((x196)*(x199)))+(((IkReal(-1.00000000000000))*(cj1)*(r00)*(x206)))+(((IkReal(2600.00000000000))*(x193)*(x208)))+(((cj0)*(py)*(x197)*(x202)))+(((cj1)*(r01)*(x204)))+(((IkReal(-1.00000000000000))*(x194)*(x202)*(x205)))+(((IkReal(247.000000000000))*(cj3)*(x197)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-247.000000000000))*(x193)*(x200)))+(((IkReal(2090.00000000000))*(x197)))+(((IkReal(-1.00000000000000))*(cj0)*(r00)*(x203)))+(((IkReal(-1.00000000000000))*(x200)*(x203)))+(((IkReal(-1.00000000000000))*(r02)*(x194)*(x204)))+(((IkReal(-2600.00000000000))*(x193)*(x207)))+(((cj0)*(x197)*(x206)))+(((r00)*(x194)*(x195)))+(((IkReal(-1.00000000000000))*(r01)*(x195)*(x201)))+(((IkReal(-1.00000000000000))*(cj3)*(r01)*(x196)*(x201))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst12)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(x194)*(x198)*(x205)))+(((IkReal(-1.00000000000000))*(x193)*(x196)))+(((IkReal(-1.00000000000000))*(x199)*(x209)))+(((IkReal(-1.00000000000000))*(cj1)*(x195)))+(((cj0)*(py)*(x197)*(x198)))+(((IkReal(-1.00000000000000))*(px)*(x201)*(x202)))+(((r00)*(sj3)*(x194)*(x196)))+(((IkReal(-247.000000000000))*(x199)*(x200)))+(((cj1)*(x198)*(x208)))+(((IkReal(-1.00000000000000))*(cj1)*(x198)*(x207)))+(((IkReal(247.000000000000))*(sj3)*(x197)))+(((IkReal(-1.00000000000000))*(x194)*(x206)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(py)*(x194)*(x202)))+(((IkReal(-1.00000000000000))*(r01)*(sj3)*(x196)*(x201)))+(((IkReal(-1.00000000000000))*(x201)*(x204))))))) < IKFAST_ATAN2_MAGTHRESH )
938  continue;
939 j2array[0]=IKatan2(((gconst12)*(((((px)*(x210)))+(((IkReal(-1.00000000000000))*(x193)*(x209)))+(((py)*(x194)*(x198)))+(((cj3)*(r00)*(x194)*(x196)))+(((x196)*(x199)))+(((IkReal(-1.00000000000000))*(cj1)*(r00)*(x206)))+(((IkReal(2600.00000000000))*(x193)*(x208)))+(((cj0)*(py)*(x197)*(x202)))+(((cj1)*(r01)*(x204)))+(((IkReal(-1.00000000000000))*(x194)*(x202)*(x205)))+(((IkReal(247.000000000000))*(cj3)*(x197)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-247.000000000000))*(x193)*(x200)))+(((IkReal(2090.00000000000))*(x197)))+(((IkReal(-1.00000000000000))*(cj0)*(r00)*(x203)))+(((IkReal(-1.00000000000000))*(x200)*(x203)))+(((IkReal(-1.00000000000000))*(r02)*(x194)*(x204)))+(((IkReal(-2600.00000000000))*(x193)*(x207)))+(((cj0)*(x197)*(x206)))+(((r00)*(x194)*(x195)))+(((IkReal(-1.00000000000000))*(r01)*(x195)*(x201)))+(((IkReal(-1.00000000000000))*(cj3)*(r01)*(x196)*(x201)))))), ((gconst12)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(x194)*(x198)*(x205)))+(((IkReal(-1.00000000000000))*(x193)*(x196)))+(((IkReal(-1.00000000000000))*(x199)*(x209)))+(((IkReal(-1.00000000000000))*(cj1)*(x195)))+(((cj0)*(py)*(x197)*(x198)))+(((IkReal(-1.00000000000000))*(px)*(x201)*(x202)))+(((r00)*(sj3)*(x194)*(x196)))+(((IkReal(-247.000000000000))*(x199)*(x200)))+(((cj1)*(x198)*(x208)))+(((IkReal(-1.00000000000000))*(cj1)*(x198)*(x207)))+(((IkReal(247.000000000000))*(sj3)*(x197)))+(((IkReal(-1.00000000000000))*(x194)*(x206)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(py)*(x194)*(x202)))+(((IkReal(-1.00000000000000))*(r01)*(sj3)*(x196)*(x201)))+(((IkReal(-1.00000000000000))*(x201)*(x204)))))));
940 sj2array[0]=IKsin(j2array[0]);
941 cj2array[0]=IKcos(j2array[0]);
942 if( j2array[0] > IKPI )
943 {
944  j2array[0]-=IK2PI;
945 }
946 else if( j2array[0] < -IKPI )
947 { j2array[0]+=IK2PI;
948 }
949 j2valid[0] = true;
950 for(int ij2 = 0; ij2 < 1; ++ij2)
951 {
952 if( !j2valid[ij2] )
953 {
954  continue;
955 }
956 _ij2[0] = ij2; _ij2[1] = -1;
957 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
958 {
959 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
960 {
961  j2valid[iij2]=false; _ij2[1] = iij2; break;
962 }
963 }
964 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
965 {
966 IkReal evalcond[4];
967 IkReal x211=IKcos(j2);
968 IkReal x212=IKsin(j2);
969 IkReal x213=((px)*(sj1));
970 IkReal x214=((py)*(sj1));
971 IkReal x215=((cj1)*(sj0));
972 IkReal x216=((IkReal(1.00000000000000))*(px));
973 IkReal x217=((r00)*(sj0));
974 IkReal x218=((IkReal(0.0950000000000000))*(r01));
975 IkReal x219=((IkReal(0.0650000000000000))*(cj3));
976 IkReal x220=((cj0)*(r01));
977 IkReal x221=((IkReal(0.0950000000000000))*(cj1));
978 IkReal x222=((pz)*(sj1));
979 IkReal x223=((cj0)*(r00));
980 IkReal x224=((IkReal(0.0950000000000000))*(sj1));
981 IkReal x225=((cj0)*(cj1));
982 IkReal x226=((cj1)*(pz));
983 IkReal x227=((IkReal(0.0650000000000000))*(sj3));
984 IkReal x228=((IkReal(0.550000000000000))*(x212));
985 IkReal x229=((IkReal(0.550000000000000))*(x211));
986 IkReal x230=((x212)*(x219));
987 IkReal x231=((x211)*(x227));
988 IkReal x232=((x212)*(x227));
989 IkReal x233=((x211)*(x219));
990 IkReal x234=((x233)+(x229));
991 IkReal x235=((x230)+(x231)+(x228));
992 evalcond[0]=((IkReal(-0.350000000000000))+(x232)+(((cj0)*(x213)))+(x226)+(((IkReal(-1.00000000000000))*(x234)))+(((sj0)*(x214))));
993 evalcond[1]=((x235)+(((IkReal(-1.00000000000000))*(py)*(x215)))+(((IkReal(-1.00000000000000))*(x216)*(x225)))+(x222));
994 evalcond[2]=((((IkReal(-1.00000000000000))*(x235)))+(((cj1)*(py)*(r00)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x216)))+(((r02)*(sj0)*(x213)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x214)))+(((IkReal(-1.00000000000000))*(r02)*(x224)))+(((x215)*(x218)))+(((x220)*(x222)))+(((x221)*(x223)))+(((IkReal(-1.00000000000000))*(x217)*(x222))));
995 evalcond[3]=((((IkReal(0.350000000000000))*(x220)))+(x232)+(((py)*(r02)*(x225)))+(((r02)*(x221)))+(((r00)*(x214)))+(((IkReal(-0.350000000000000))*(x217)))+(((x223)*(x224)))+(((IkReal(-1.00000000000000))*(x234)))+(((IkReal(-1.00000000000000))*(x220)*(x226)))+(((pz)*(r00)*(x215)))+(((IkReal(-1.00000000000000))*(r01)*(x213)))+(((IkReal(-1.00000000000000))*(r02)*(x215)*(x216)))+(((sj0)*(sj1)*(x218))));
996 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
997 {
998 continue;
999 }
1000 }
1001 
1002 {
1003 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1004 vinfos[0].jointtype = 1;
1005 vinfos[0].foffset = j0;
1006 vinfos[0].indices[0] = _ij0[0];
1007 vinfos[0].indices[1] = _ij0[1];
1008 vinfos[0].maxsolutions = _nj0;
1009 vinfos[1].jointtype = 1;
1010 vinfos[1].foffset = j1;
1011 vinfos[1].indices[0] = _ij1[0];
1012 vinfos[1].indices[1] = _ij1[1];
1013 vinfos[1].maxsolutions = _nj1;
1014 vinfos[2].jointtype = 1;
1015 vinfos[2].foffset = j2;
1016 vinfos[2].indices[0] = _ij2[0];
1017 vinfos[2].indices[1] = _ij2[1];
1018 vinfos[2].maxsolutions = _nj2;
1019 vinfos[3].jointtype = 1;
1020 vinfos[3].foffset = j3;
1021 vinfos[3].indices[0] = _ij3[0];
1022 vinfos[3].indices[1] = _ij3[1];
1023 vinfos[3].maxsolutions = _nj3;
1024 vinfos[4].jointtype = 1;
1025 vinfos[4].foffset = j4;
1026 vinfos[4].indices[0] = _ij4[0];
1027 vinfos[4].indices[1] = _ij4[1];
1028 vinfos[4].maxsolutions = _nj4;
1029 std::vector<int> vfree(0);
1030 solutions.AddSolution(vinfos,vfree);
1031 }
1032 }
1033 }
1034 
1035 }
1036 
1037 }
1038 
1039 } else
1040 {
1041 {
1042 IkReal j2array[1], cj2array[1], sj2array[1];
1043 bool j2valid[1]={false};
1044 _nj2 = 1;
1045 IkReal x236=((IkReal(2600.00000000000))*(sj3));
1046 IkReal x237=((py)*(sj0));
1047 IkReal x238=((pz)*(sj1));
1048 IkReal x239=((IkReal(2600.00000000000))*(cj3));
1049 IkReal x240=((cj1)*(pz));
1050 IkReal x241=((IkReal(22000.0000000000))*(cj1));
1051 IkReal x242=((cj0)*(px));
1052 IkReal x243=((sj1)*(x242));
1053 if( IKabs(((gconst11)*(((((IkReal(22000.0000000000))*(x238)))+(((x236)*(x243)))+(((IkReal(-1.00000000000000))*(cj1)*(x237)*(x239)))+(((IkReal(-1.00000000000000))*(x237)*(x241)))+(((IkReal(-1.00000000000000))*(x241)*(x242)))+(((x236)*(x240)))+(((IkReal(-1.00000000000000))*(cj1)*(x239)*(x242)))+(((IkReal(-910.000000000000))*(sj3)))+(((x238)*(x239)))+(((sj1)*(x236)*(x237))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst11)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(x239)*(x243)))+(((IkReal(-1.00000000000000))*(cj1)*(x236)*(x242)))+(((IkReal(-1.00000000000000))*(x239)*(x240)))+(((IkReal(-1.00000000000000))*(sj1)*(x237)*(x239)))+(((x236)*(x238)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x236)*(x237)))+(((IkReal(-22000.0000000000))*(x243)))+(((IkReal(-22000.0000000000))*(sj1)*(x237)))+(((IkReal(-22000.0000000000))*(x240))))))) < IKFAST_ATAN2_MAGTHRESH )
1054  continue;
1055 j2array[0]=IKatan2(((gconst11)*(((((IkReal(22000.0000000000))*(x238)))+(((x236)*(x243)))+(((IkReal(-1.00000000000000))*(cj1)*(x237)*(x239)))+(((IkReal(-1.00000000000000))*(x237)*(x241)))+(((IkReal(-1.00000000000000))*(x241)*(x242)))+(((x236)*(x240)))+(((IkReal(-1.00000000000000))*(cj1)*(x239)*(x242)))+(((IkReal(-910.000000000000))*(sj3)))+(((x238)*(x239)))+(((sj1)*(x236)*(x237)))))), ((gconst11)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(x239)*(x243)))+(((IkReal(-1.00000000000000))*(cj1)*(x236)*(x242)))+(((IkReal(-1.00000000000000))*(x239)*(x240)))+(((IkReal(-1.00000000000000))*(sj1)*(x237)*(x239)))+(((x236)*(x238)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x236)*(x237)))+(((IkReal(-22000.0000000000))*(x243)))+(((IkReal(-22000.0000000000))*(sj1)*(x237)))+(((IkReal(-22000.0000000000))*(x240)))))));
1056 sj2array[0]=IKsin(j2array[0]);
1057 cj2array[0]=IKcos(j2array[0]);
1058 if( j2array[0] > IKPI )
1059 {
1060  j2array[0]-=IK2PI;
1061 }
1062 else if( j2array[0] < -IKPI )
1063 { j2array[0]+=IK2PI;
1064 }
1065 j2valid[0] = true;
1066 for(int ij2 = 0; ij2 < 1; ++ij2)
1067 {
1068 if( !j2valid[ij2] )
1069 {
1070  continue;
1071 }
1072 _ij2[0] = ij2; _ij2[1] = -1;
1073 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
1074 {
1075 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
1076 {
1077  j2valid[iij2]=false; _ij2[1] = iij2; break;
1078 }
1079 }
1080 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1081 {
1082 IkReal evalcond[4];
1083 IkReal x244=IKcos(j2);
1084 IkReal x245=IKsin(j2);
1085 IkReal x246=((px)*(sj1));
1086 IkReal x247=((py)*(sj1));
1087 IkReal x248=((cj1)*(sj0));
1088 IkReal x249=((IkReal(1.00000000000000))*(px));
1089 IkReal x250=((r00)*(sj0));
1090 IkReal x251=((IkReal(0.0950000000000000))*(r01));
1091 IkReal x252=((IkReal(0.0650000000000000))*(cj3));
1092 IkReal x253=((cj0)*(r01));
1093 IkReal x254=((IkReal(0.0950000000000000))*(cj1));
1094 IkReal x255=((pz)*(sj1));
1095 IkReal x256=((cj0)*(r00));
1096 IkReal x257=((IkReal(0.0950000000000000))*(sj1));
1097 IkReal x258=((cj0)*(cj1));
1098 IkReal x259=((cj1)*(pz));
1099 IkReal x260=((IkReal(0.0650000000000000))*(sj3));
1100 IkReal x261=((IkReal(0.550000000000000))*(x245));
1101 IkReal x262=((IkReal(0.550000000000000))*(x244));
1102 IkReal x263=((x245)*(x252));
1103 IkReal x264=((x244)*(x260));
1104 IkReal x265=((x245)*(x260));
1105 IkReal x266=((x244)*(x252));
1106 IkReal x267=((x266)+(x262));
1107 IkReal x268=((x264)+(x261)+(x263));
1108 evalcond[0]=((IkReal(-0.350000000000000))+(((IkReal(-1.00000000000000))*(x267)))+(x259)+(((cj0)*(x246)))+(x265)+(((sj0)*(x247))));
1109 evalcond[1]=((x255)+(x268)+(((IkReal(-1.00000000000000))*(x249)*(x258)))+(((IkReal(-1.00000000000000))*(py)*(x248))));
1110 evalcond[2]=((((IkReal(-1.00000000000000))*(cj0)*(r02)*(x247)))+(((x253)*(x255)))+(((r02)*(sj0)*(x246)))+(((IkReal(-1.00000000000000))*(x250)*(x255)))+(((cj1)*(py)*(r00)))+(((IkReal(-1.00000000000000))*(x268)))+(((x254)*(x256)))+(((x248)*(x251)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x249)))+(((IkReal(-1.00000000000000))*(r02)*(x257))));
1111 evalcond[3]=((((r02)*(x254)))+(((py)*(r02)*(x258)))+(((IkReal(-1.00000000000000))*(x267)))+(((IkReal(-1.00000000000000))*(x253)*(x259)))+(((IkReal(-0.350000000000000))*(x250)))+(((IkReal(0.350000000000000))*(x253)))+(((x256)*(x257)))+(((pz)*(r00)*(x248)))+(((r00)*(x247)))+(((IkReal(-1.00000000000000))*(r01)*(x246)))+(x265)+(((IkReal(-1.00000000000000))*(r02)*(x248)*(x249)))+(((sj0)*(sj1)*(x251))));
1112 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
1113 {
1114 continue;
1115 }
1116 }
1117 
1118 {
1119 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1120 vinfos[0].jointtype = 1;
1121 vinfos[0].foffset = j0;
1122 vinfos[0].indices[0] = _ij0[0];
1123 vinfos[0].indices[1] = _ij0[1];
1124 vinfos[0].maxsolutions = _nj0;
1125 vinfos[1].jointtype = 1;
1126 vinfos[1].foffset = j1;
1127 vinfos[1].indices[0] = _ij1[0];
1128 vinfos[1].indices[1] = _ij1[1];
1129 vinfos[1].maxsolutions = _nj1;
1130 vinfos[2].jointtype = 1;
1131 vinfos[2].foffset = j2;
1132 vinfos[2].indices[0] = _ij2[0];
1133 vinfos[2].indices[1] = _ij2[1];
1134 vinfos[2].maxsolutions = _nj2;
1135 vinfos[3].jointtype = 1;
1136 vinfos[3].foffset = j3;
1137 vinfos[3].indices[0] = _ij3[0];
1138 vinfos[3].indices[1] = _ij3[1];
1139 vinfos[3].maxsolutions = _nj3;
1140 vinfos[4].jointtype = 1;
1141 vinfos[4].foffset = j4;
1142 vinfos[4].indices[0] = _ij4[0];
1143 vinfos[4].indices[1] = _ij4[1];
1144 vinfos[4].maxsolutions = _nj4;
1145 std::vector<int> vfree(0);
1146 solutions.AddSolution(vinfos,vfree);
1147 }
1148 }
1149 }
1150 
1151 }
1152 
1153 }
1154 }
1155 }
1156 
1157 } else
1158 {
1159 if( 1 )
1160 {
1161 continue;
1162 
1163 } else
1164 {
1165 }
1166 }
1167 }
1168 }
1169 
1170 } else
1171 {
1172 {
1173 IkReal j3array[1], cj3array[1], sj3array[1];
1174 bool j3valid[1]={false};
1175 _nj3 = 1;
1176 IkReal x269=((sj0)*(sj1));
1177 IkReal x270=((cj0)*(sj1));
1178 if( IKabs(((IkReal(0.0909090909090909))*(((IKabs(cj4) != 0)?((IkReal)1/(cj4)):(IkReal)1.0e30))*(((((IkReal(-20.0000000000000))*(py)*(r01)))+(((IkReal(7.00000000000000))*(r00)*(x270)))+(((IkReal(-1.90000000000000))*(cj0)*(r01)))+(((IkReal(7.00000000000000))*(r01)*(x269)))+(((IkReal(-20.0000000000000))*(pz)*(r02)))+(((IkReal(-20.0000000000000))*(px)*(r00)))+(((IkReal(7.00000000000000))*(cj1)*(r02)))+(((IkReal(1.90000000000000))*(r00)*(sj0))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-2.45034965034965))+(((IkReal(2.65734265734266))*(cj0)*(py)))+(((IkReal(-2.65734265734266))*(px)*(sj0)))+(((IkReal(-9.79020979020979))*(py)*(x269)))+(((IkReal(-9.79020979020979))*(cj1)*(pz)))+(((IkReal(13.9860139860140))*(pp)))+(((IkReal(-9.79020979020979))*(px)*(x270))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(0.0909090909090909))*(((IKabs(cj4) != 0)?((IkReal)1/(cj4)):(IkReal)1.0e30))*(((((IkReal(-20.0000000000000))*(py)*(r01)))+(((IkReal(7.00000000000000))*(r00)*(x270)))+(((IkReal(-1.90000000000000))*(cj0)*(r01)))+(((IkReal(7.00000000000000))*(r01)*(x269)))+(((IkReal(-20.0000000000000))*(pz)*(r02)))+(((IkReal(-20.0000000000000))*(px)*(r00)))+(((IkReal(7.00000000000000))*(cj1)*(r02)))+(((IkReal(1.90000000000000))*(r00)*(sj0)))))))+IKsqr(((IkReal(-2.45034965034965))+(((IkReal(2.65734265734266))*(cj0)*(py)))+(((IkReal(-2.65734265734266))*(px)*(sj0)))+(((IkReal(-9.79020979020979))*(py)*(x269)))+(((IkReal(-9.79020979020979))*(cj1)*(pz)))+(((IkReal(13.9860139860140))*(pp)))+(((IkReal(-9.79020979020979))*(px)*(x270)))))-1) <= IKFAST_SINCOS_THRESH )
1179  continue;
1180 j3array[0]=IKatan2(((IkReal(0.0909090909090909))*(((IKabs(cj4) != 0)?((IkReal)1/(cj4)):(IkReal)1.0e30))*(((((IkReal(-20.0000000000000))*(py)*(r01)))+(((IkReal(7.00000000000000))*(r00)*(x270)))+(((IkReal(-1.90000000000000))*(cj0)*(r01)))+(((IkReal(7.00000000000000))*(r01)*(x269)))+(((IkReal(-20.0000000000000))*(pz)*(r02)))+(((IkReal(-20.0000000000000))*(px)*(r00)))+(((IkReal(7.00000000000000))*(cj1)*(r02)))+(((IkReal(1.90000000000000))*(r00)*(sj0)))))), ((IkReal(-2.45034965034965))+(((IkReal(2.65734265734266))*(cj0)*(py)))+(((IkReal(-2.65734265734266))*(px)*(sj0)))+(((IkReal(-9.79020979020979))*(py)*(x269)))+(((IkReal(-9.79020979020979))*(cj1)*(pz)))+(((IkReal(13.9860139860140))*(pp)))+(((IkReal(-9.79020979020979))*(px)*(x270)))));
1181 sj3array[0]=IKsin(j3array[0]);
1182 cj3array[0]=IKcos(j3array[0]);
1183 if( j3array[0] > IKPI )
1184 {
1185  j3array[0]-=IK2PI;
1186 }
1187 else if( j3array[0] < -IKPI )
1188 { j3array[0]+=IK2PI;
1189 }
1190 j3valid[0] = true;
1191 for(int ij3 = 0; ij3 < 1; ++ij3)
1192 {
1193 if( !j3valid[ij3] )
1194 {
1195  continue;
1196 }
1197 _ij3[0] = ij3; _ij3[1] = -1;
1198 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
1199 {
1200 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
1201 {
1202  j3valid[iij3]=false; _ij3[1] = iij3; break;
1203 }
1204 }
1205 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
1206 {
1207 IkReal evalcond[4];
1208 IkReal x271=IKcos(j3);
1209 IkReal x272=((r01)*(sj1));
1210 IkReal x273=((IkReal(0.350000000000000))*(sj0));
1211 IkReal x274=((cj0)*(r00));
1212 IkReal x275=((IkReal(0.350000000000000))*(cj1));
1213 IkReal x276=((px)*(r02));
1214 IkReal x277=((IkReal(1.00000000000000))*(cj0));
1215 IkReal x278=((IkReal(0.190000000000000))*(px));
1216 IkReal x279=((cj0)*(r01));
1217 IkReal x280=((r00)*(sj0));
1218 IkReal x281=((IkReal(0.700000000000000))*(sj1));
1219 IkReal x282=((IkReal(0.550000000000000))*(cj4));
1220 IkReal x283=((IkReal(0.700000000000000))*(cj1));
1221 IkReal x284=((py)*(sj0));
1222 IkReal x285=((IkReal(1.00000000000000))*(r02));
1223 IkReal x286=((cj0)*(py));
1224 IkReal x287=((IkReal(2.00000000000000))*(px));
1225 IkReal x288=((pz)*(sj0));
1226 IkReal x289=((pz)*(r02));
1227 IkReal x290=((IkReal(0.350000000000000))*(sj1));
1228 IkReal x291=((py)*(r01));
1229 IkReal x292=((IkReal(0.0715000000000000))*(x271));
1230 evalcond[0]=((IkReal(0.175200000000000))+(((x281)*(x284)))+(((sj0)*(x278)))+(((IkReal(-1.00000000000000))*(pp)))+(x292)+(((pz)*(x283)))+(((IkReal(-0.190000000000000))*(x286)))+(((cj0)*(px)*(x281))));
1231 evalcond[1]=((((IkReal(-1.00000000000000))*(x282)*(IKsin(j3))))+(((x272)*(x273)))+(((IkReal(0.0950000000000000))*(x280)))+(((x274)*(x290)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((IkReal(-1.00000000000000))*(x291)))+(((r02)*(x275)))+(((IkReal(-1.00000000000000))*(pz)*(x285)))+(((IkReal(-0.0950000000000000))*(x279))));
1232 evalcond[2]=((((r02)*(x290)))+(((r01)*(x288)))+(((IkReal(-1.00000000000000))*(x274)*(x275)))+(((IkReal(-1.00000000000000))*(x276)*(x277)))+(((IkReal(-0.0650000000000000))*(cj4)))+(((pz)*(x274)))+(((IkReal(-1.00000000000000))*(x284)*(x285)))+(((IkReal(-1.00000000000000))*(x271)*(x282)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x273))));
1233 evalcond[3]=((((IkReal(-2.00000000000000))*(x276)*(x288)))+(((IkReal(0.306725000000000))*(sj4)))+(((pp)*(x280)))+(((IkReal(-1.00000000000000))*(pp)*(r01)*(x277)))+(((IkReal(-0.0665000000000000))*(sj1)*(x274)))+(((IkReal(0.190000000000000))*(x289)))+(((IkReal(-1.00000000000000))*(r01)*(x284)*(x287)))+(((IkReal(-0.113475000000000))*(x279)))+(((IkReal(0.700000000000000))*(px)*(x272)))+(((IkReal(2.00000000000000))*(x286)*(x289)))+(((IkReal(-1.00000000000000))*(pz)*(x280)*(x283)))+(((IkReal(0.113475000000000))*(x280)))+(((sj4)*(x292)))+(((IkReal(-1.00000000000000))*(px)*(x280)*(x287)))+(((IkReal(2.00000000000000))*(x279)*((py)*(py))))+(((r00)*(x278)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x281)))+(((IkReal(-0.0665000000000000))*(sj0)*(x272)))+(((sj0)*(x276)*(x283)))+(((IkReal(-0.0665000000000000))*(cj1)*(r02)))+(((pz)*(x279)*(x283)))+(((IkReal(-1.00000000000000))*(r02)*(x283)*(x286)))+(((py)*(x274)*(x287)))+(((IkReal(0.190000000000000))*(x291))));
1234 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
1235 {
1236 continue;
1237 }
1238 }
1239 
1240 {
1241 IkReal dummyeval[1];
1242 IkReal gconst1;
1243 gconst1=IKsign(((((cj4)*((cj3)*(cj3))))+(((cj4)*((sj3)*(sj3))))));
1244 dummyeval[0]=((((cj4)*((cj3)*(cj3))))+(((cj4)*((sj3)*(sj3)))));
1245 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
1246 {
1247 {
1248 IkReal dummyeval[1];
1249 IkReal gconst2;
1250 IkReal x293=((IkReal(13.0000000000000))*(cj4));
1251 gconst2=IKsign(((((IkReal(-1.00000000000000))*(x293)*((sj3)*(sj3))))+(((IkReal(-110.000000000000))*(cj3)*(cj4)))+(((IkReal(-1.00000000000000))*(x293)*((cj3)*(cj3))))));
1252 IkReal x294=((IkReal(1.00000000000000))*(cj4));
1253 dummyeval[0]=((((IkReal(-1.00000000000000))*(x294)*((cj3)*(cj3))))+(((IkReal(-8.46153846153846))*(cj3)*(cj4)))+(((IkReal(-1.00000000000000))*(x294)*((sj3)*(sj3)))));
1254 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
1255 {
1256 {
1257 IkReal evalcond[11];
1258 IkReal x295=((IkReal(0.0715000000000000))*(cj3));
1259 IkReal x296=(py)*(py);
1260 IkReal x297=(px)*(px);
1261 IkReal x298=(pz)*(pz);
1262 IkReal x299=((r01)*(sj0));
1263 IkReal x300=((px)*(sj0));
1264 IkReal x301=((cj1)*(r00));
1265 IkReal x302=((IkReal(0.350000000000000))*(cj0));
1266 IkReal x303=((IkReal(0.113475000000000))*(sj1));
1267 IkReal x304=((r01)*(sj1));
1268 IkReal x305=((IkReal(2.00000000000000))*(pz));
1269 IkReal x306=((IkReal(0.190000000000000))*(px));
1270 IkReal x307=((py)*(sj0));
1271 IkReal x308=((IkReal(1.00000000000000))*(r02));
1272 IkReal x309=((IkReal(0.190000000000000))*(py));
1273 IkReal x310=((cj0)*(sj1));
1274 IkReal x311=((px)*(r02));
1275 IkReal x312=((px)*(r00));
1276 IkReal x313=((r02)*(sj1));
1277 IkReal x314=((IkReal(2.00000000000000))*(py));
1278 IkReal x315=((pp)*(r00));
1279 IkReal x316=((cj0)*(r01));
1280 IkReal x317=((IkReal(0.700000000000000))*(sj1));
1281 IkReal x318=((IkReal(0.190000000000000))*(pz));
1282 IkReal x319=((cj1)*(r01));
1283 IkReal x320=((cj0)*(r00));
1284 IkReal x321=((IkReal(0.700000000000000))*(pz));
1285 IkReal x322=((cj0)*(px));
1286 IkReal x323=((r00)*(sj0));
1287 IkReal x324=((cj1)*(r02));
1288 IkReal x325=((IkReal(1.00000000000000))*(pp));
1289 IkReal x326=((IkReal(1.00000000000000))*(py));
1290 IkReal x327=((IkReal(0.700000000000000))*(cj0));
1291 IkReal x328=((r00)*(sj1));
1292 IkReal x329=((IkReal(0.700000000000000))*(px));
1293 IkReal x330=((cj0)*(cj1));
1294 IkReal x331=((cj1)*(x325));
1295 IkReal x332=((IkReal(2.00000000000000))*(x298));
1296 IkReal x333=((IkReal(2.00000000000000))*(x296));
1297 IkReal x334=((IkReal(2.00000000000000))*(r00)*(x297));
1298 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j4)), IkReal(6.28318530717959))));
1299 evalcond[1]=((IkReal(-0.0950000000000000))+(x300)+(((IkReal(-1.00000000000000))*(cj0)*(x326))));
1300 evalcond[2]=((IkReal(1.00000000000000))+(((IkReal(-1.00000000000000))*(x316)))+(x323));
1301 evalcond[3]=((x324)+(((sj1)*(x299)))+(((r00)*(x310))));
1302 evalcond[4]=((((IkReal(-1.00000000000000))*(cj1)*(x299)))+(((IkReal(-1.00000000000000))*(cj0)*(x301)))+(x313));
1303 evalcond[5]=((IkReal(0.175200000000000))+(((IkReal(-1.00000000000000))*(x325)))+(((x307)*(x317)))+(((IkReal(-1.00000000000000))*(cj0)*(x309)))+(x295)+(((x310)*(x329)))+(((IkReal(0.190000000000000))*(x300)))+(((cj1)*(x321))));
1304 evalcond[6]=((((x302)*(x328)))+(((IkReal(-1.00000000000000))*(pz)*(x308)))+(((IkReal(-1.00000000000000))*(x312)))+(((IkReal(0.350000000000000))*(sj1)*(x299)))+(((IkReal(0.350000000000000))*(x324)))+(((IkReal(0.0950000000000000))*(x323)))+(((IkReal(-0.0950000000000000))*(x316)))+(((IkReal(-1.00000000000000))*(r01)*(x326))));
1305 evalcond[7]=((((IkReal(0.350000000000000))*(x313)))+(((IkReal(-1.00000000000000))*(x307)*(x308)))+(((IkReal(-1.00000000000000))*(x308)*(x322)))+(((pz)*(x320)))+(((IkReal(-1.00000000000000))*(x301)*(x302)))+(((pz)*(x299)))+(((IkReal(-0.350000000000000))*(cj1)*(x299))));
1306 evalcond[8]=((IkReal(0.306725000000000))+(((x304)*(x329)))+(((IkReal(-1.00000000000000))*(x316)*(x325)))+(((r02)*(x318)))+(((IkReal(0.700000000000000))*(x300)*(x324)))+(((IkReal(-0.0665000000000000))*(sj1)*(x299)))+(((sj0)*(x315)))+(((r00)*(x306)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x317)))+(((IkReal(0.113475000000000))*(x323)))+(((cj0)*(x312)*(x314)))+(((x316)*(x333)))+(((IkReal(-2.00000000000000))*(x297)*(x323)))+(x295)+(((r01)*(x309)))+(((IkReal(-1.00000000000000))*(px)*(x299)*(x314)))+(((cj0)*(py)*(r02)*(x305)))+(((cj1)*(x316)*(x321)))+(((IkReal(-0.0665000000000000))*(x324)))+(((IkReal(-1.00000000000000))*(py)*(x324)*(x327)))+(((IkReal(-0.113475000000000))*(x316)))+(((IkReal(-1.00000000000000))*(r02)*(x300)*(x305)))+(((IkReal(-0.0665000000000000))*(r00)*(x310)))+(((IkReal(-1.00000000000000))*(sj0)*(x301)*(x321))));
1307 evalcond[9]=((((IkReal(-1.00000000000000))*(cj1)*(x316)*(x318)))+(((IkReal(-1.00000000000000))*(py)*(x305)*(x319)))+(((IkReal(0.0665000000000000))*(x316)))+(((sj0)*(x301)*(x318)))+(((IkReal(-0.0665000000000000))*(x323)))+(((IkReal(-1.00000000000000))*(x324)*(x332)))+(((IkReal(0.700000000000000))*(x312)))+(((IkReal(-1.00000000000000))*(x304)*(x306)))+(((IkReal(-1.00000000000000))*(x310)*(x334)))+(((IkReal(-0.190000000000000))*(x300)*(x324)))+(((IkReal(-1.00000000000000))*(px)*(x301)*(x305)))+(((IkReal(-1.00000000000000))*(sj1)*(x299)*(x333)))+(((cj0)*(x309)*(x324)))+(((r02)*(x321)))+(((IkReal(-1.00000000000000))*(x304)*(x314)*(x322)))+(((IkReal(0.700000000000000))*(py)*(r01)))+(((IkReal(-1.00000000000000))*(x303)*(x320)))+(((IkReal(-1.00000000000000))*(x305)*(x307)*(x313)))+(((x310)*(x315)))+(((pp)*(sj1)*(x299)))+(((IkReal(-1.00000000000000))*(x299)*(x303)))+(((IkReal(-1.00000000000000))*(x305)*(x310)*(x311)))+(((IkReal(-1.00000000000000))*(x300)*(x314)*(x328)))+(((IkReal(-0.113475000000000))*(x324)))+(((pp)*(x324)))+(((x309)*(x328))));
1308 evalcond[10]=((((IkReal(-1.00000000000000))*(sj1)*(x305)*(x312)))+(((x320)*(x321)))+(((x306)*(x319)))+(((IkReal(-1.00000000000000))*(x301)*(x309)))+(((pp)*(x313)))+(((x299)*(x321)))+(((IkReal(-0.131525000000000))*(cj0)*(x301)))+(((x305)*(x311)*(x330)))+(((r02)*(x309)*(x310)))+(((IkReal(-1.00000000000000))*(cj0)*(x301)*(x325)))+(((IkReal(-0.190000000000000))*(x300)*(x313)))+(((IkReal(-0.131525000000000))*(cj1)*(x299)))+(((IkReal(0.131525000000000))*(x313)))+(((IkReal(-1.00000000000000))*(x299)*(x331)))+(((IkReal(-1.00000000000000))*(py)*(x304)*(x305)))+(((IkReal(-1.00000000000000))*(x311)*(x327)))+(((IkReal(-0.700000000000000))*(r02)*(x307)))+(((x300)*(x301)*(x314)))+(((IkReal(2.00000000000000))*(cj0)*(x297)*(x301)))+(((IkReal(-1.00000000000000))*(x313)*(x332)))+(((cj1)*(x299)*(x333)))+(((x305)*(x307)*(x324)))+(((IkReal(-1.00000000000000))*(cj0)*(x304)*(x318)))+(((sj1)*(x318)*(x323)))+(((cj1)*(px)*(x314)*(x316))));
1309 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 && IKabs(evalcond[9]) < 0.0000010000000000 && IKabs(evalcond[10]) < 0.0000010000000000 )
1310 {
1311 {
1312 IkReal dummyeval[1];
1313 IkReal gconst3;
1314 gconst3=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
1315 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
1316 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
1317 {
1318 {
1319 IkReal dummyeval[1];
1320 IkReal gconst4;
1321 gconst4=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
1322 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
1323 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
1324 {
1325 continue;
1326 
1327 } else
1328 {
1329 {
1330 IkReal j2array[1], cj2array[1], sj2array[1];
1331 bool j2valid[1]={false};
1332 _nj2 = 1;
1333 IkReal x335=((cj1)*(cj3));
1334 IkReal x336=((sj0)*(sj1));
1335 IkReal x337=((IkReal(22000.0000000000))*(pz));
1336 IkReal x338=((IkReal(2600.00000000000))*(pz));
1337 IkReal x339=((r02)*(sj1));
1338 IkReal x340=((cj1)*(sj3));
1339 IkReal x341=((cj1)*(r00));
1340 IkReal x342=((r01)*(sj0));
1341 IkReal x343=((cj0)*(sj1));
1342 IkReal x344=((IkReal(2600.00000000000))*(px));
1343 IkReal x345=((IkReal(22000.0000000000))*(px));
1344 IkReal x346=((IkReal(22000.0000000000))*(py));
1345 IkReal x347=((IkReal(2600.00000000000))*(py));
1346 IkReal x348=((IkReal(247.000000000000))*(cj0)*(r00));
1347 IkReal x349=((sj3)*(x347));
1348 IkReal x350=((IkReal(2600.00000000000))*(sj3)*(x343));
1349 if( IKabs(((gconst4)*(((((IkReal(2090.00000000000))*(cj1)*(x342)))+(((IkReal(-2090.00000000000))*(x339)))+(((IkReal(247.000000000000))*(x335)*(x342)))+(((r00)*(x335)*(x347)))+(((IkReal(-1.00000000000000))*(cj3)*(r00)*(x336)*(x338)))+(((IkReal(2090.00000000000))*(cj0)*(x341)))+(((x336)*(x349)))+(((cj3)*(r02)*(x336)*(x344)))+(((IkReal(-1.00000000000000))*(r00)*(x336)*(x337)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x345)))+(((r01)*(x337)*(x343)))+(((x338)*(x340)))+(((sj3)*(x343)*(x344)))+(((IkReal(-247.000000000000))*(cj3)*(x339)))+(((x341)*(x346)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-1.00000000000000))*(r01)*(x335)*(x344)))+(((IkReal(-1.00000000000000))*(cj0)*(x339)*(x346)))+(((r02)*(x336)*(x345)))+(((IkReal(-1.00000000000000))*(cj0)*(cj3)*(x339)*(x347)))+(((cj3)*(r01)*(x338)*(x343)))+(((x335)*(x348))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst4)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(cj1)*(x337)))+(((IkReal(-1.00000000000000))*(cj3)*(x343)*(x344)))+(((IkReal(-1.00000000000000))*(x343)*(x345)))+(((IkReal(-1.00000000000000))*(r01)*(x340)*(x344)))+(((IkReal(-1.00000000000000))*(x336)*(x346)))+(((IkReal(-1.00000000000000))*(cj3)*(x336)*(x347)))+(((x340)*(x348)))+(((r01)*(sj3)*(x338)*(x343)))+(((IkReal(-247.000000000000))*(sj3)*(x339)))+(((IkReal(-1.00000000000000))*(x335)*(x338)))+(((r02)*(sj3)*(x336)*(x344)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj0)*(x339)*(x349)))+(((IkReal(-1.00000000000000))*(r00)*(sj3)*(x336)*(x338)))+(((IkReal(247.000000000000))*(x340)*(x342)))+(((r00)*(x340)*(x347))))))) < IKFAST_ATAN2_MAGTHRESH )
1350  continue;
1351 j2array[0]=IKatan2(((gconst4)*(((((IkReal(2090.00000000000))*(cj1)*(x342)))+(((IkReal(-2090.00000000000))*(x339)))+(((IkReal(247.000000000000))*(x335)*(x342)))+(((r00)*(x335)*(x347)))+(((IkReal(-1.00000000000000))*(cj3)*(r00)*(x336)*(x338)))+(((IkReal(2090.00000000000))*(cj0)*(x341)))+(((x336)*(x349)))+(((cj3)*(r02)*(x336)*(x344)))+(((IkReal(-1.00000000000000))*(r00)*(x336)*(x337)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x345)))+(((r01)*(x337)*(x343)))+(((x338)*(x340)))+(((sj3)*(x343)*(x344)))+(((IkReal(-247.000000000000))*(cj3)*(x339)))+(((x341)*(x346)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-1.00000000000000))*(r01)*(x335)*(x344)))+(((IkReal(-1.00000000000000))*(cj0)*(x339)*(x346)))+(((r02)*(x336)*(x345)))+(((IkReal(-1.00000000000000))*(cj0)*(cj3)*(x339)*(x347)))+(((cj3)*(r01)*(x338)*(x343)))+(((x335)*(x348)))))), ((gconst4)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(cj1)*(x337)))+(((IkReal(-1.00000000000000))*(cj3)*(x343)*(x344)))+(((IkReal(-1.00000000000000))*(x343)*(x345)))+(((IkReal(-1.00000000000000))*(r01)*(x340)*(x344)))+(((IkReal(-1.00000000000000))*(x336)*(x346)))+(((IkReal(-1.00000000000000))*(cj3)*(x336)*(x347)))+(((x340)*(x348)))+(((r01)*(sj3)*(x338)*(x343)))+(((IkReal(-247.000000000000))*(sj3)*(x339)))+(((IkReal(-1.00000000000000))*(x335)*(x338)))+(((r02)*(sj3)*(x336)*(x344)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj0)*(x339)*(x349)))+(((IkReal(-1.00000000000000))*(r00)*(sj3)*(x336)*(x338)))+(((IkReal(247.000000000000))*(x340)*(x342)))+(((r00)*(x340)*(x347)))))));
1352 sj2array[0]=IKsin(j2array[0]);
1353 cj2array[0]=IKcos(j2array[0]);
1354 if( j2array[0] > IKPI )
1355 {
1356  j2array[0]-=IK2PI;
1357 }
1358 else if( j2array[0] < -IKPI )
1359 { j2array[0]+=IK2PI;
1360 }
1361 j2valid[0] = true;
1362 for(int ij2 = 0; ij2 < 1; ++ij2)
1363 {
1364 if( !j2valid[ij2] )
1365 {
1366  continue;
1367 }
1368 _ij2[0] = ij2; _ij2[1] = -1;
1369 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
1370 {
1371 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
1372 {
1373  j2valid[iij2]=false; _ij2[1] = iij2; break;
1374 }
1375 }
1376 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1377 {
1378 IkReal evalcond[4];
1379 IkReal x351=IKcos(j2);
1380 IkReal x352=IKsin(j2);
1381 IkReal x353=((px)*(sj1));
1382 IkReal x354=((py)*(sj1));
1383 IkReal x355=((cj1)*(sj0));
1384 IkReal x356=((IkReal(1.00000000000000))*(px));
1385 IkReal x357=((r00)*(sj0));
1386 IkReal x358=((IkReal(0.0950000000000000))*(r01));
1387 IkReal x359=((IkReal(0.0650000000000000))*(cj3));
1388 IkReal x360=((cj0)*(r01));
1389 IkReal x361=((IkReal(0.0950000000000000))*(cj1));
1390 IkReal x362=((pz)*(sj1));
1391 IkReal x363=((cj0)*(r00));
1392 IkReal x364=((IkReal(0.0950000000000000))*(sj1));
1393 IkReal x365=((cj0)*(cj1));
1394 IkReal x366=((cj1)*(pz));
1395 IkReal x367=((IkReal(0.0650000000000000))*(sj3));
1396 IkReal x368=((IkReal(0.550000000000000))*(x352));
1397 IkReal x369=((IkReal(0.550000000000000))*(x351));
1398 IkReal x370=((x352)*(x359));
1399 IkReal x371=((x351)*(x367));
1400 IkReal x372=((x351)*(x359));
1401 IkReal x373=((x352)*(x367));
1402 IkReal x374=((x372)+(x369));
1403 IkReal x375=((x371)+(x370)+(x368));
1404 evalcond[0]=((IkReal(-0.350000000000000))+(x373)+(((IkReal(-1.00000000000000))*(x374)))+(x366)+(((cj0)*(x353)))+(((sj0)*(x354))));
1405 evalcond[1]=((x375)+(((IkReal(-1.00000000000000))*(py)*(x355)))+(x362)+(((IkReal(-1.00000000000000))*(x356)*(x365))));
1406 evalcond[2]=((x375)+(((r02)*(sj0)*(x353)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x356)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x354)))+(((cj1)*(py)*(r00)))+(((x360)*(x362)))+(((IkReal(-1.00000000000000))*(x357)*(x362)))+(((IkReal(-1.00000000000000))*(r02)*(x364)))+(((x355)*(x358)))+(((x361)*(x363))));
1407 evalcond[3]=((((IkReal(-1.00000000000000))*(r02)*(x355)*(x356)))+(((r02)*(x361)))+(((IkReal(0.350000000000000))*(x360)))+(((py)*(r02)*(x365)))+(x374)+(((IkReal(-1.00000000000000))*(x360)*(x366)))+(((IkReal(-0.350000000000000))*(x357)))+(((IkReal(-1.00000000000000))*(r01)*(x353)))+(((x363)*(x364)))+(((r00)*(x354)))+(((sj0)*(sj1)*(x358)))+(((pz)*(r00)*(x355)))+(((IkReal(-1.00000000000000))*(x373))));
1408 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
1409 {
1410 continue;
1411 }
1412 }
1413 
1414 {
1415 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1416 vinfos[0].jointtype = 1;
1417 vinfos[0].foffset = j0;
1418 vinfos[0].indices[0] = _ij0[0];
1419 vinfos[0].indices[1] = _ij0[1];
1420 vinfos[0].maxsolutions = _nj0;
1421 vinfos[1].jointtype = 1;
1422 vinfos[1].foffset = j1;
1423 vinfos[1].indices[0] = _ij1[0];
1424 vinfos[1].indices[1] = _ij1[1];
1425 vinfos[1].maxsolutions = _nj1;
1426 vinfos[2].jointtype = 1;
1427 vinfos[2].foffset = j2;
1428 vinfos[2].indices[0] = _ij2[0];
1429 vinfos[2].indices[1] = _ij2[1];
1430 vinfos[2].maxsolutions = _nj2;
1431 vinfos[3].jointtype = 1;
1432 vinfos[3].foffset = j3;
1433 vinfos[3].indices[0] = _ij3[0];
1434 vinfos[3].indices[1] = _ij3[1];
1435 vinfos[3].maxsolutions = _nj3;
1436 vinfos[4].jointtype = 1;
1437 vinfos[4].foffset = j4;
1438 vinfos[4].indices[0] = _ij4[0];
1439 vinfos[4].indices[1] = _ij4[1];
1440 vinfos[4].maxsolutions = _nj4;
1441 std::vector<int> vfree(0);
1442 solutions.AddSolution(vinfos,vfree);
1443 }
1444 }
1445 }
1446 
1447 }
1448 
1449 }
1450 
1451 } else
1452 {
1453 {
1454 IkReal j2array[1], cj2array[1], sj2array[1];
1455 bool j2valid[1]={false};
1456 _nj2 = 1;
1457 IkReal x376=((IkReal(2600.00000000000))*(sj3));
1458 IkReal x377=((py)*(sj0));
1459 IkReal x378=((pz)*(sj1));
1460 IkReal x379=((IkReal(2600.00000000000))*(cj3));
1461 IkReal x380=((cj1)*(pz));
1462 IkReal x381=((IkReal(22000.0000000000))*(cj1));
1463 IkReal x382=((cj0)*(px));
1464 IkReal x383=((sj1)*(x382));
1465 if( IKabs(((gconst3)*(((((x376)*(x383)))+(((IkReal(22000.0000000000))*(x378)))+(((IkReal(-1.00000000000000))*(x381)*(x382)))+(((sj1)*(x376)*(x377)))+(((IkReal(-1.00000000000000))*(cj1)*(x379)*(x382)))+(((x378)*(x379)))+(((IkReal(-1.00000000000000))*(cj1)*(x377)*(x379)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-1.00000000000000))*(x377)*(x381)))+(((x376)*(x380))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst3)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(sj1)*(x377)*(x379)))+(((IkReal(-1.00000000000000))*(x379)*(x380)))+(((IkReal(-1.00000000000000))*(cj1)*(x376)*(x377)))+(((IkReal(-22000.0000000000))*(sj1)*(x377)))+(((IkReal(-22000.0000000000))*(x380)))+(((IkReal(-1.00000000000000))*(cj1)*(x376)*(x382)))+(((IkReal(-22000.0000000000))*(x383)))+(((IkReal(910.000000000000))*(cj3)))+(((x376)*(x378)))+(((IkReal(-1.00000000000000))*(x379)*(x383))))))) < IKFAST_ATAN2_MAGTHRESH )
1466  continue;
1467 j2array[0]=IKatan2(((gconst3)*(((((x376)*(x383)))+(((IkReal(22000.0000000000))*(x378)))+(((IkReal(-1.00000000000000))*(x381)*(x382)))+(((sj1)*(x376)*(x377)))+(((IkReal(-1.00000000000000))*(cj1)*(x379)*(x382)))+(((x378)*(x379)))+(((IkReal(-1.00000000000000))*(cj1)*(x377)*(x379)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-1.00000000000000))*(x377)*(x381)))+(((x376)*(x380)))))), ((gconst3)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(sj1)*(x377)*(x379)))+(((IkReal(-1.00000000000000))*(x379)*(x380)))+(((IkReal(-1.00000000000000))*(cj1)*(x376)*(x377)))+(((IkReal(-22000.0000000000))*(sj1)*(x377)))+(((IkReal(-22000.0000000000))*(x380)))+(((IkReal(-1.00000000000000))*(cj1)*(x376)*(x382)))+(((IkReal(-22000.0000000000))*(x383)))+(((IkReal(910.000000000000))*(cj3)))+(((x376)*(x378)))+(((IkReal(-1.00000000000000))*(x379)*(x383)))))));
1468 sj2array[0]=IKsin(j2array[0]);
1469 cj2array[0]=IKcos(j2array[0]);
1470 if( j2array[0] > IKPI )
1471 {
1472  j2array[0]-=IK2PI;
1473 }
1474 else if( j2array[0] < -IKPI )
1475 { j2array[0]+=IK2PI;
1476 }
1477 j2valid[0] = true;
1478 for(int ij2 = 0; ij2 < 1; ++ij2)
1479 {
1480 if( !j2valid[ij2] )
1481 {
1482  continue;
1483 }
1484 _ij2[0] = ij2; _ij2[1] = -1;
1485 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
1486 {
1487 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
1488 {
1489  j2valid[iij2]=false; _ij2[1] = iij2; break;
1490 }
1491 }
1492 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1493 {
1494 IkReal evalcond[4];
1495 IkReal x384=IKcos(j2);
1496 IkReal x385=IKsin(j2);
1497 IkReal x386=((px)*(sj1));
1498 IkReal x387=((py)*(sj1));
1499 IkReal x388=((cj1)*(sj0));
1500 IkReal x389=((IkReal(1.00000000000000))*(px));
1501 IkReal x390=((r00)*(sj0));
1502 IkReal x391=((IkReal(0.0950000000000000))*(r01));
1503 IkReal x392=((IkReal(0.0650000000000000))*(cj3));
1504 IkReal x393=((cj0)*(r01));
1505 IkReal x394=((IkReal(0.0950000000000000))*(cj1));
1506 IkReal x395=((pz)*(sj1));
1507 IkReal x396=((cj0)*(r00));
1508 IkReal x397=((IkReal(0.0950000000000000))*(sj1));
1509 IkReal x398=((cj0)*(cj1));
1510 IkReal x399=((cj1)*(pz));
1511 IkReal x400=((IkReal(0.0650000000000000))*(sj3));
1512 IkReal x401=((IkReal(0.550000000000000))*(x385));
1513 IkReal x402=((IkReal(0.550000000000000))*(x384));
1514 IkReal x403=((x385)*(x392));
1515 IkReal x404=((x384)*(x400));
1516 IkReal x405=((x384)*(x392));
1517 IkReal x406=((x385)*(x400));
1518 IkReal x407=((x402)+(x405));
1519 IkReal x408=((x401)+(x403)+(x404));
1520 evalcond[0]=((IkReal(-0.350000000000000))+(((sj0)*(x387)))+(((IkReal(-1.00000000000000))*(x407)))+(((cj0)*(x386)))+(x406)+(x399));
1521 evalcond[1]=((((IkReal(-1.00000000000000))*(x389)*(x398)))+(((IkReal(-1.00000000000000))*(py)*(x388)))+(x408)+(x395));
1522 evalcond[2]=((((IkReal(-1.00000000000000))*(x390)*(x395)))+(((x388)*(x391)))+(((x393)*(x395)))+(((cj1)*(py)*(r00)))+(((r02)*(sj0)*(x386)))+(((x394)*(x396)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x389)))+(((IkReal(-1.00000000000000))*(r02)*(x397)))+(x408)+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x387))));
1523 evalcond[3]=((((pz)*(r00)*(x388)))+(((IkReal(-1.00000000000000))*(r01)*(x386)))+(((IkReal(-1.00000000000000))*(r02)*(x388)*(x389)))+(((r00)*(x387)))+(((r02)*(x394)))+(((sj0)*(sj1)*(x391)))+(((IkReal(-0.350000000000000))*(x390)))+(((IkReal(-1.00000000000000))*(x406)))+(((IkReal(-1.00000000000000))*(x393)*(x399)))+(x407)+(((x396)*(x397)))+(((py)*(r02)*(x398)))+(((IkReal(0.350000000000000))*(x393))));
1524 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
1525 {
1526 continue;
1527 }
1528 }
1529 
1530 {
1531 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1532 vinfos[0].jointtype = 1;
1533 vinfos[0].foffset = j0;
1534 vinfos[0].indices[0] = _ij0[0];
1535 vinfos[0].indices[1] = _ij0[1];
1536 vinfos[0].maxsolutions = _nj0;
1537 vinfos[1].jointtype = 1;
1538 vinfos[1].foffset = j1;
1539 vinfos[1].indices[0] = _ij1[0];
1540 vinfos[1].indices[1] = _ij1[1];
1541 vinfos[1].maxsolutions = _nj1;
1542 vinfos[2].jointtype = 1;
1543 vinfos[2].foffset = j2;
1544 vinfos[2].indices[0] = _ij2[0];
1545 vinfos[2].indices[1] = _ij2[1];
1546 vinfos[2].maxsolutions = _nj2;
1547 vinfos[3].jointtype = 1;
1548 vinfos[3].foffset = j3;
1549 vinfos[3].indices[0] = _ij3[0];
1550 vinfos[3].indices[1] = _ij3[1];
1551 vinfos[3].maxsolutions = _nj3;
1552 vinfos[4].jointtype = 1;
1553 vinfos[4].foffset = j4;
1554 vinfos[4].indices[0] = _ij4[0];
1555 vinfos[4].indices[1] = _ij4[1];
1556 vinfos[4].maxsolutions = _nj4;
1557 std::vector<int> vfree(0);
1558 solutions.AddSolution(vinfos,vfree);
1559 }
1560 }
1561 }
1562 
1563 }
1564 
1565 }
1566 
1567 } else
1568 {
1569 IkReal x409=((IkReal(0.0715000000000000))*(cj3));
1570 IkReal x410=(py)*(py);
1571 IkReal x411=(px)*(px);
1572 IkReal x412=(pz)*(pz);
1573 IkReal x413=((r01)*(sj0));
1574 IkReal x414=((px)*(sj0));
1575 IkReal x415=((cj1)*(r00));
1576 IkReal x416=((IkReal(0.350000000000000))*(cj0));
1577 IkReal x417=((IkReal(0.113475000000000))*(sj1));
1578 IkReal x418=((r01)*(sj1));
1579 IkReal x419=((IkReal(2.00000000000000))*(pz));
1580 IkReal x420=((IkReal(0.190000000000000))*(px));
1581 IkReal x421=((py)*(sj0));
1582 IkReal x422=((IkReal(1.00000000000000))*(r02));
1583 IkReal x423=((IkReal(0.190000000000000))*(py));
1584 IkReal x424=((cj0)*(sj1));
1585 IkReal x425=((px)*(r02));
1586 IkReal x426=((px)*(r00));
1587 IkReal x427=((r02)*(sj1));
1588 IkReal x428=((IkReal(2.00000000000000))*(py));
1589 IkReal x429=((pp)*(r00));
1590 IkReal x430=((cj0)*(r01));
1591 IkReal x431=((IkReal(0.700000000000000))*(sj1));
1592 IkReal x432=((IkReal(0.190000000000000))*(pz));
1593 IkReal x433=((cj1)*(r01));
1594 IkReal x434=((cj0)*(r00));
1595 IkReal x435=((IkReal(0.700000000000000))*(pz));
1596 IkReal x436=((cj0)*(px));
1597 IkReal x437=((r00)*(sj0));
1598 IkReal x438=((cj1)*(r02));
1599 IkReal x439=((IkReal(1.00000000000000))*(pp));
1600 IkReal x440=((IkReal(1.00000000000000))*(py));
1601 IkReal x441=((IkReal(0.700000000000000))*(cj0));
1602 IkReal x442=((r00)*(sj1));
1603 IkReal x443=((IkReal(0.700000000000000))*(px));
1604 IkReal x444=((cj0)*(cj1));
1605 IkReal x445=((cj1)*(x439));
1606 IkReal x446=((IkReal(2.00000000000000))*(x412));
1607 IkReal x447=((IkReal(2.00000000000000))*(x410));
1608 IkReal x448=((IkReal(2.00000000000000))*(r00)*(x411));
1609 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j4)), IkReal(6.28318530717959))));
1610 evalcond[1]=((IkReal(-0.0950000000000000))+(((IkReal(-1.00000000000000))*(cj0)*(x440)))+(x414));
1611 evalcond[2]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(x430)))+(x437));
1612 evalcond[3]=((x438)+(((sj1)*(x413)))+(((r00)*(x424))));
1613 evalcond[4]=((((IkReal(-1.00000000000000))*(cj0)*(x415)))+(x427)+(((IkReal(-1.00000000000000))*(cj1)*(x413))));
1614 evalcond[5]=((IkReal(0.175200000000000))+(((x424)*(x443)))+(((cj1)*(x435)))+(((x421)*(x431)))+(x409)+(((IkReal(-1.00000000000000))*(cj0)*(x423)))+(((IkReal(-1.00000000000000))*(x439)))+(((IkReal(0.190000000000000))*(x414))));
1615 evalcond[6]=((((IkReal(-1.00000000000000))*(x426)))+(((IkReal(0.0950000000000000))*(x437)))+(((IkReal(0.350000000000000))*(x438)))+(((IkReal(-1.00000000000000))*(pz)*(x422)))+(((x416)*(x442)))+(((IkReal(-1.00000000000000))*(r01)*(x440)))+(((IkReal(-0.0950000000000000))*(x430)))+(((IkReal(0.350000000000000))*(sj1)*(x413))));
1616 evalcond[7]=((((IkReal(-1.00000000000000))*(x415)*(x416)))+(((pz)*(x413)))+(((IkReal(0.350000000000000))*(x427)))+(((IkReal(-1.00000000000000))*(x421)*(x422)))+(((IkReal(-0.350000000000000))*(cj1)*(x413)))+(((pz)*(x434)))+(((IkReal(-1.00000000000000))*(x422)*(x436))));
1617 evalcond[8]=((IkReal(-0.306725000000000))+(((IkReal(0.113475000000000))*(x437)))+(((IkReal(-0.113475000000000))*(x430)))+(((x418)*(x443)))+(((r02)*(x432)))+(((IkReal(-1.00000000000000))*(x430)*(x439)))+(((IkReal(-2.00000000000000))*(x411)*(x437)))+(((sj0)*(x429)))+(((IkReal(-0.0665000000000000))*(x438)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x431)))+(((r00)*(x420)))+(((IkReal(-1.00000000000000))*(x409)))+(((cj0)*(py)*(r02)*(x419)))+(((IkReal(0.700000000000000))*(x414)*(x438)))+(((cj1)*(x430)*(x435)))+(((IkReal(-1.00000000000000))*(sj0)*(x415)*(x435)))+(((IkReal(-1.00000000000000))*(r02)*(x414)*(x419)))+(((r01)*(x423)))+(((x430)*(x447)))+(((IkReal(-1.00000000000000))*(px)*(x413)*(x428)))+(((IkReal(-0.0665000000000000))*(sj1)*(x413)))+(((IkReal(-1.00000000000000))*(py)*(x438)*(x441)))+(((cj0)*(x426)*(x428)))+(((IkReal(-0.0665000000000000))*(r00)*(x424))));
1618 evalcond[9]=((((IkReal(-1.00000000000000))*(x438)*(x446)))+(((IkReal(-1.00000000000000))*(py)*(x419)*(x433)))+(((IkReal(-0.190000000000000))*(x414)*(x438)))+(((IkReal(-1.00000000000000))*(sj1)*(x413)*(x447)))+(((IkReal(-1.00000000000000))*(x419)*(x421)*(x427)))+(((x423)*(x442)))+(((pp)*(x438)))+(((IkReal(-1.00000000000000))*(x418)*(x428)*(x436)))+(((x424)*(x429)))+(((IkReal(-1.00000000000000))*(px)*(x415)*(x419)))+(((IkReal(-1.00000000000000))*(x419)*(x424)*(x425)))+(((IkReal(-1.00000000000000))*(x414)*(x428)*(x442)))+(((IkReal(-0.113475000000000))*(x438)))+(((IkReal(0.0665000000000000))*(x430)))+(((cj0)*(x423)*(x438)))+(((IkReal(0.700000000000000))*(py)*(r01)))+(((IkReal(-1.00000000000000))*(x424)*(x448)))+(((sj0)*(x415)*(x432)))+(((r02)*(x435)))+(((IkReal(-1.00000000000000))*(x413)*(x417)))+(((IkReal(0.700000000000000))*(x426)))+(((pp)*(sj1)*(x413)))+(((IkReal(-1.00000000000000))*(cj1)*(x430)*(x432)))+(((IkReal(-1.00000000000000))*(x417)*(x434)))+(((IkReal(-1.00000000000000))*(x418)*(x420)))+(((IkReal(-0.0665000000000000))*(x437))));
1619 evalcond[10]=((((IkReal(-1.00000000000000))*(x427)*(x446)))+(((sj1)*(x432)*(x437)))+(((IkReal(-0.131525000000000))*(cj1)*(x413)))+(((x434)*(x435)))+(((IkReal(-1.00000000000000))*(x413)*(x445)))+(((cj1)*(px)*(x428)*(x430)))+(((IkReal(-1.00000000000000))*(sj1)*(x419)*(x426)))+(((r02)*(x423)*(x424)))+(((pp)*(x427)))+(((IkReal(-0.131525000000000))*(cj0)*(x415)))+(((x414)*(x415)*(x428)))+(((x420)*(x433)))+(((IkReal(-1.00000000000000))*(cj0)*(x415)*(x439)))+(((IkReal(-1.00000000000000))*(x425)*(x441)))+(((IkReal(-1.00000000000000))*(x415)*(x423)))+(((x413)*(x435)))+(((IkReal(-0.190000000000000))*(x414)*(x427)))+(((x419)*(x425)*(x444)))+(((IkReal(2.00000000000000))*(cj0)*(x411)*(x415)))+(((IkReal(-1.00000000000000))*(cj0)*(x418)*(x432)))+(((IkReal(-1.00000000000000))*(py)*(x418)*(x419)))+(((x419)*(x421)*(x438)))+(((IkReal(0.131525000000000))*(x427)))+(((IkReal(-0.700000000000000))*(r02)*(x421)))+(((cj1)*(x413)*(x447))));
1620 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 && IKabs(evalcond[9]) < 0.0000010000000000 && IKabs(evalcond[10]) < 0.0000010000000000 )
1621 {
1622 {
1623 IkReal dummyeval[1];
1624 IkReal gconst5;
1625 gconst5=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
1626 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
1627 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
1628 {
1629 {
1630 IkReal dummyeval[1];
1631 IkReal gconst6;
1632 gconst6=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
1633 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
1634 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
1635 {
1636 continue;
1637 
1638 } else
1639 {
1640 {
1641 IkReal j2array[1], cj2array[1], sj2array[1];
1642 bool j2valid[1]={false};
1643 _nj2 = 1;
1644 IkReal x449=((cj1)*(cj3));
1645 IkReal x450=((sj0)*(sj1));
1646 IkReal x451=((IkReal(22000.0000000000))*(pz));
1647 IkReal x452=((IkReal(2600.00000000000))*(pz));
1648 IkReal x453=((r02)*(sj1));
1649 IkReal x454=((IkReal(2600.00000000000))*(sj3));
1650 IkReal x455=((cj1)*(sj3));
1651 IkReal x456=((r01)*(sj0));
1652 IkReal x457=((cj0)*(sj1));
1653 IkReal x458=((IkReal(2600.00000000000))*(cj3));
1654 IkReal x459=((IkReal(2090.00000000000))*(cj1));
1655 IkReal x460=((IkReal(22000.0000000000))*(px));
1656 IkReal x461=((px)*(r02));
1657 IkReal x462=((IkReal(22000.0000000000))*(py));
1658 IkReal x463=((py)*(r00));
1659 IkReal x464=((px)*(r01));
1660 IkReal x465=((IkReal(247.000000000000))*(cj0)*(r00));
1661 IkReal x466=((x454)*(x457));
1662 if( IKabs(((gconst6)*(((((IkReal(-1.00000000000000))*(x450)*(x458)*(x461)))+(((cj3)*(r00)*(x450)*(x452)))+(((IkReal(-1.00000000000000))*(r02)*(x450)*(x460)))+(((IkReal(-1.00000000000000))*(cj1)*(r00)*(x462)))+(((IkReal(247.000000000000))*(cj3)*(x453)))+(((IkReal(-1.00000000000000))*(x456)*(x459)))+(((IkReal(2600.00000000000))*(x449)*(x464)))+(((px)*(x466)))+(((IkReal(2090.00000000000))*(x453)))+(((IkReal(-2600.00000000000))*(x449)*(x463)))+(((IkReal(-1.00000000000000))*(r01)*(x451)*(x457)))+(((IkReal(-1.00000000000000))*(x449)*(x465)))+(((cj0)*(x453)*(x462)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-247.000000000000))*(x449)*(x456)))+(((cj1)*(r01)*(x460)))+(((x452)*(x455)))+(((py)*(x450)*(x454)))+(((r00)*(x450)*(x451)))+(((IkReal(-1.00000000000000))*(cj0)*(r00)*(x459)))+(((IkReal(-1.00000000000000))*(cj3)*(r01)*(x452)*(x457)))+(((cj0)*(py)*(x453)*(x458))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst6)*(((IkReal(7700.00000000000))+(((cj1)*(x454)*(x464)))+(((IkReal(-1.00000000000000))*(x450)*(x454)*(x461)))+(((IkReal(-1.00000000000000))*(x449)*(x452)))+(((r00)*(sj3)*(x450)*(x452)))+(((IkReal(-1.00000000000000))*(py)*(x450)*(x458)))+(((IkReal(-247.000000000000))*(x455)*(x456)))+(((IkReal(-1.00000000000000))*(px)*(x457)*(x458)))+(((IkReal(247.000000000000))*(sj3)*(x453)))+(((IkReal(-1.00000000000000))*(x455)*(x465)))+(((IkReal(-1.00000000000000))*(r01)*(sj3)*(x452)*(x457)))+(((IkReal(-1.00000000000000))*(x457)*(x460)))+(((IkReal(-1.00000000000000))*(x450)*(x462)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x451)))+(((IkReal(-1.00000000000000))*(cj1)*(x454)*(x463)))+(((cj0)*(py)*(x453)*(x454))))))) < IKFAST_ATAN2_MAGTHRESH )
1663  continue;
1664 j2array[0]=IKatan2(((gconst6)*(((((IkReal(-1.00000000000000))*(x450)*(x458)*(x461)))+(((cj3)*(r00)*(x450)*(x452)))+(((IkReal(-1.00000000000000))*(r02)*(x450)*(x460)))+(((IkReal(-1.00000000000000))*(cj1)*(r00)*(x462)))+(((IkReal(247.000000000000))*(cj3)*(x453)))+(((IkReal(-1.00000000000000))*(x456)*(x459)))+(((IkReal(2600.00000000000))*(x449)*(x464)))+(((px)*(x466)))+(((IkReal(2090.00000000000))*(x453)))+(((IkReal(-2600.00000000000))*(x449)*(x463)))+(((IkReal(-1.00000000000000))*(r01)*(x451)*(x457)))+(((IkReal(-1.00000000000000))*(x449)*(x465)))+(((cj0)*(x453)*(x462)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-247.000000000000))*(x449)*(x456)))+(((cj1)*(r01)*(x460)))+(((x452)*(x455)))+(((py)*(x450)*(x454)))+(((r00)*(x450)*(x451)))+(((IkReal(-1.00000000000000))*(cj0)*(r00)*(x459)))+(((IkReal(-1.00000000000000))*(cj3)*(r01)*(x452)*(x457)))+(((cj0)*(py)*(x453)*(x458)))))), ((gconst6)*(((IkReal(7700.00000000000))+(((cj1)*(x454)*(x464)))+(((IkReal(-1.00000000000000))*(x450)*(x454)*(x461)))+(((IkReal(-1.00000000000000))*(x449)*(x452)))+(((r00)*(sj3)*(x450)*(x452)))+(((IkReal(-1.00000000000000))*(py)*(x450)*(x458)))+(((IkReal(-247.000000000000))*(x455)*(x456)))+(((IkReal(-1.00000000000000))*(px)*(x457)*(x458)))+(((IkReal(247.000000000000))*(sj3)*(x453)))+(((IkReal(-1.00000000000000))*(x455)*(x465)))+(((IkReal(-1.00000000000000))*(r01)*(sj3)*(x452)*(x457)))+(((IkReal(-1.00000000000000))*(x457)*(x460)))+(((IkReal(-1.00000000000000))*(x450)*(x462)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x451)))+(((IkReal(-1.00000000000000))*(cj1)*(x454)*(x463)))+(((cj0)*(py)*(x453)*(x454)))))));
1665 sj2array[0]=IKsin(j2array[0]);
1666 cj2array[0]=IKcos(j2array[0]);
1667 if( j2array[0] > IKPI )
1668 {
1669  j2array[0]-=IK2PI;
1670 }
1671 else if( j2array[0] < -IKPI )
1672 { j2array[0]+=IK2PI;
1673 }
1674 j2valid[0] = true;
1675 for(int ij2 = 0; ij2 < 1; ++ij2)
1676 {
1677 if( !j2valid[ij2] )
1678 {
1679  continue;
1680 }
1681 _ij2[0] = ij2; _ij2[1] = -1;
1682 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
1683 {
1684 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
1685 {
1686  j2valid[iij2]=false; _ij2[1] = iij2; break;
1687 }
1688 }
1689 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1690 {
1691 IkReal evalcond[4];
1692 IkReal x467=IKcos(j2);
1693 IkReal x468=IKsin(j2);
1694 IkReal x469=((px)*(sj1));
1695 IkReal x470=((py)*(sj1));
1696 IkReal x471=((cj1)*(sj0));
1697 IkReal x472=((IkReal(1.00000000000000))*(px));
1698 IkReal x473=((r00)*(sj0));
1699 IkReal x474=((IkReal(0.0950000000000000))*(r01));
1700 IkReal x475=((IkReal(0.0650000000000000))*(cj3));
1701 IkReal x476=((cj0)*(r01));
1702 IkReal x477=((IkReal(0.0950000000000000))*(cj1));
1703 IkReal x478=((pz)*(sj1));
1704 IkReal x479=((cj0)*(r00));
1705 IkReal x480=((IkReal(0.0950000000000000))*(sj1));
1706 IkReal x481=((cj0)*(cj1));
1707 IkReal x482=((cj1)*(pz));
1708 IkReal x483=((IkReal(0.0650000000000000))*(sj3));
1709 IkReal x484=((IkReal(0.550000000000000))*(x468));
1710 IkReal x485=((IkReal(0.550000000000000))*(x467));
1711 IkReal x486=((x468)*(x475));
1712 IkReal x487=((x467)*(x483));
1713 IkReal x488=((x468)*(x483));
1714 IkReal x489=((x467)*(x475));
1715 IkReal x490=((x489)+(x485));
1716 IkReal x491=((x484)+(x487)+(x486));
1717 evalcond[0]=((IkReal(-0.350000000000000))+(((IkReal(-1.00000000000000))*(x490)))+(((sj0)*(x470)))+(x488)+(x482)+(((cj0)*(x469))));
1718 evalcond[1]=((x478)+(((IkReal(-1.00000000000000))*(py)*(x471)))+(x491)+(((IkReal(-1.00000000000000))*(x472)*(x481))));
1719 evalcond[2]=((((IkReal(-1.00000000000000))*(x491)))+(((cj1)*(py)*(r00)))+(((x476)*(x478)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x470)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x472)))+(((IkReal(-1.00000000000000))*(r02)*(x480)))+(((IkReal(-1.00000000000000))*(x473)*(x478)))+(((x477)*(x479)))+(((x471)*(x474)))+(((r02)*(sj0)*(x469))));
1720 evalcond[3]=((((x479)*(x480)))+(((IkReal(-1.00000000000000))*(r01)*(x469)))+(((pz)*(r00)*(x471)))+(((IkReal(-1.00000000000000))*(x490)))+(((IkReal(-1.00000000000000))*(x476)*(x482)))+(((r02)*(x477)))+(((py)*(r02)*(x481)))+(((r00)*(x470)))+(((IkReal(-0.350000000000000))*(x473)))+(x488)+(((IkReal(0.350000000000000))*(x476)))+(((IkReal(-1.00000000000000))*(r02)*(x471)*(x472)))+(((sj0)*(sj1)*(x474))));
1721 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
1722 {
1723 continue;
1724 }
1725 }
1726 
1727 {
1728 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1729 vinfos[0].jointtype = 1;
1730 vinfos[0].foffset = j0;
1731 vinfos[0].indices[0] = _ij0[0];
1732 vinfos[0].indices[1] = _ij0[1];
1733 vinfos[0].maxsolutions = _nj0;
1734 vinfos[1].jointtype = 1;
1735 vinfos[1].foffset = j1;
1736 vinfos[1].indices[0] = _ij1[0];
1737 vinfos[1].indices[1] = _ij1[1];
1738 vinfos[1].maxsolutions = _nj1;
1739 vinfos[2].jointtype = 1;
1740 vinfos[2].foffset = j2;
1741 vinfos[2].indices[0] = _ij2[0];
1742 vinfos[2].indices[1] = _ij2[1];
1743 vinfos[2].maxsolutions = _nj2;
1744 vinfos[3].jointtype = 1;
1745 vinfos[3].foffset = j3;
1746 vinfos[3].indices[0] = _ij3[0];
1747 vinfos[3].indices[1] = _ij3[1];
1748 vinfos[3].maxsolutions = _nj3;
1749 vinfos[4].jointtype = 1;
1750 vinfos[4].foffset = j4;
1751 vinfos[4].indices[0] = _ij4[0];
1752 vinfos[4].indices[1] = _ij4[1];
1753 vinfos[4].maxsolutions = _nj4;
1754 std::vector<int> vfree(0);
1755 solutions.AddSolution(vinfos,vfree);
1756 }
1757 }
1758 }
1759 
1760 }
1761 
1762 }
1763 
1764 } else
1765 {
1766 {
1767 IkReal j2array[1], cj2array[1], sj2array[1];
1768 bool j2valid[1]={false};
1769 _nj2 = 1;
1770 IkReal x492=((IkReal(2600.00000000000))*(sj3));
1771 IkReal x493=((py)*(sj0));
1772 IkReal x494=((pz)*(sj1));
1773 IkReal x495=((IkReal(2600.00000000000))*(cj3));
1774 IkReal x496=((cj1)*(pz));
1775 IkReal x497=((IkReal(22000.0000000000))*(cj1));
1776 IkReal x498=((cj0)*(px));
1777 IkReal x499=((sj1)*(x498));
1778 if( IKabs(((gconst5)*(((((x492)*(x499)))+(((sj1)*(x492)*(x493)))+(((x494)*(x495)))+(((x492)*(x496)))+(((IkReal(22000.0000000000))*(x494)))+(((IkReal(-1.00000000000000))*(cj1)*(x495)*(x498)))+(((IkReal(-1.00000000000000))*(cj1)*(x493)*(x495)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-1.00000000000000))*(x497)*(x498)))+(((IkReal(-1.00000000000000))*(x493)*(x497))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst5)*(((IkReal(7700.00000000000))+(((IkReal(-22000.0000000000))*(x496)))+(((IkReal(-1.00000000000000))*(x495)*(x499)))+(((IkReal(-1.00000000000000))*(cj1)*(x492)*(x493)))+(((IkReal(-1.00000000000000))*(x495)*(x496)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-22000.0000000000))*(sj1)*(x493)))+(((IkReal(-1.00000000000000))*(sj1)*(x493)*(x495)))+(((IkReal(-22000.0000000000))*(x499)))+(((x492)*(x494)))+(((IkReal(-1.00000000000000))*(cj1)*(x492)*(x498))))))) < IKFAST_ATAN2_MAGTHRESH )
1779  continue;
1780 j2array[0]=IKatan2(((gconst5)*(((((x492)*(x499)))+(((sj1)*(x492)*(x493)))+(((x494)*(x495)))+(((x492)*(x496)))+(((IkReal(22000.0000000000))*(x494)))+(((IkReal(-1.00000000000000))*(cj1)*(x495)*(x498)))+(((IkReal(-1.00000000000000))*(cj1)*(x493)*(x495)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(-1.00000000000000))*(x497)*(x498)))+(((IkReal(-1.00000000000000))*(x493)*(x497)))))), ((gconst5)*(((IkReal(7700.00000000000))+(((IkReal(-22000.0000000000))*(x496)))+(((IkReal(-1.00000000000000))*(x495)*(x499)))+(((IkReal(-1.00000000000000))*(cj1)*(x492)*(x493)))+(((IkReal(-1.00000000000000))*(x495)*(x496)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-22000.0000000000))*(sj1)*(x493)))+(((IkReal(-1.00000000000000))*(sj1)*(x493)*(x495)))+(((IkReal(-22000.0000000000))*(x499)))+(((x492)*(x494)))+(((IkReal(-1.00000000000000))*(cj1)*(x492)*(x498)))))));
1781 sj2array[0]=IKsin(j2array[0]);
1782 cj2array[0]=IKcos(j2array[0]);
1783 if( j2array[0] > IKPI )
1784 {
1785  j2array[0]-=IK2PI;
1786 }
1787 else if( j2array[0] < -IKPI )
1788 { j2array[0]+=IK2PI;
1789 }
1790 j2valid[0] = true;
1791 for(int ij2 = 0; ij2 < 1; ++ij2)
1792 {
1793 if( !j2valid[ij2] )
1794 {
1795  continue;
1796 }
1797 _ij2[0] = ij2; _ij2[1] = -1;
1798 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
1799 {
1800 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
1801 {
1802  j2valid[iij2]=false; _ij2[1] = iij2; break;
1803 }
1804 }
1805 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1806 {
1807 IkReal evalcond[4];
1808 IkReal x500=IKcos(j2);
1809 IkReal x501=IKsin(j2);
1810 IkReal x502=((px)*(sj1));
1811 IkReal x503=((py)*(sj1));
1812 IkReal x504=((cj1)*(sj0));
1813 IkReal x505=((IkReal(1.00000000000000))*(px));
1814 IkReal x506=((r00)*(sj0));
1815 IkReal x507=((IkReal(0.0950000000000000))*(r01));
1816 IkReal x508=((IkReal(0.0650000000000000))*(cj3));
1817 IkReal x509=((cj0)*(r01));
1818 IkReal x510=((IkReal(0.0950000000000000))*(cj1));
1819 IkReal x511=((pz)*(sj1));
1820 IkReal x512=((cj0)*(r00));
1821 IkReal x513=((IkReal(0.0950000000000000))*(sj1));
1822 IkReal x514=((cj0)*(cj1));
1823 IkReal x515=((cj1)*(pz));
1824 IkReal x516=((IkReal(0.0650000000000000))*(sj3));
1825 IkReal x517=((IkReal(0.550000000000000))*(x501));
1826 IkReal x518=((IkReal(0.550000000000000))*(x500));
1827 IkReal x519=((x501)*(x508));
1828 IkReal x520=((x500)*(x516));
1829 IkReal x521=((x501)*(x516));
1830 IkReal x522=((x500)*(x508));
1831 IkReal x523=((x518)+(x522));
1832 IkReal x524=((x519)+(x517)+(x520));
1833 evalcond[0]=((IkReal(-0.350000000000000))+(((sj0)*(x503)))+(x515)+(((cj0)*(x502)))+(((IkReal(-1.00000000000000))*(x523)))+(x521));
1834 evalcond[1]=((x511)+(((IkReal(-1.00000000000000))*(x505)*(x514)))+(((IkReal(-1.00000000000000))*(py)*(x504)))+(x524));
1835 evalcond[2]=((((x509)*(x511)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x505)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x503)))+(((IkReal(-1.00000000000000))*(x524)))+(((IkReal(-1.00000000000000))*(x506)*(x511)))+(((cj1)*(py)*(r00)))+(((x510)*(x512)))+(((x504)*(x507)))+(((IkReal(-1.00000000000000))*(r02)*(x513)))+(((r02)*(sj0)*(x502))));
1836 evalcond[3]=((((sj0)*(sj1)*(x507)))+(((r02)*(x510)))+(((pz)*(r00)*(x504)))+(((r00)*(x503)))+(((py)*(r02)*(x514)))+(((x512)*(x513)))+(((IkReal(-1.00000000000000))*(x509)*(x515)))+(((IkReal(-0.350000000000000))*(x506)))+(((IkReal(-1.00000000000000))*(r02)*(x504)*(x505)))+(((IkReal(0.350000000000000))*(x509)))+(((IkReal(-1.00000000000000))*(x523)))+(x521)+(((IkReal(-1.00000000000000))*(r01)*(x502))));
1837 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
1838 {
1839 continue;
1840 }
1841 }
1842 
1843 {
1844 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1845 vinfos[0].jointtype = 1;
1846 vinfos[0].foffset = j0;
1847 vinfos[0].indices[0] = _ij0[0];
1848 vinfos[0].indices[1] = _ij0[1];
1849 vinfos[0].maxsolutions = _nj0;
1850 vinfos[1].jointtype = 1;
1851 vinfos[1].foffset = j1;
1852 vinfos[1].indices[0] = _ij1[0];
1853 vinfos[1].indices[1] = _ij1[1];
1854 vinfos[1].maxsolutions = _nj1;
1855 vinfos[2].jointtype = 1;
1856 vinfos[2].foffset = j2;
1857 vinfos[2].indices[0] = _ij2[0];
1858 vinfos[2].indices[1] = _ij2[1];
1859 vinfos[2].maxsolutions = _nj2;
1860 vinfos[3].jointtype = 1;
1861 vinfos[3].foffset = j3;
1862 vinfos[3].indices[0] = _ij3[0];
1863 vinfos[3].indices[1] = _ij3[1];
1864 vinfos[3].maxsolutions = _nj3;
1865 vinfos[4].jointtype = 1;
1866 vinfos[4].foffset = j4;
1867 vinfos[4].indices[0] = _ij4[0];
1868 vinfos[4].indices[1] = _ij4[1];
1869 vinfos[4].maxsolutions = _nj4;
1870 std::vector<int> vfree(0);
1871 solutions.AddSolution(vinfos,vfree);
1872 }
1873 }
1874 }
1875 
1876 }
1877 
1878 }
1879 
1880 } else
1881 {
1882 IkReal x525=((r01)*(sj1));
1883 IkReal x526=((IkReal(0.350000000000000))*(sj0));
1884 IkReal x527=((px)*(r02));
1885 IkReal x528=((IkReal(1.00000000000000))*(cj0));
1886 IkReal x529=((cj0)*(r00));
1887 IkReal x530=((IkReal(0.350000000000000))*(cj1));
1888 IkReal x531=((IkReal(0.700000000000000))*(sj1));
1889 IkReal x532=((IkReal(0.190000000000000))*(px));
1890 IkReal x533=((r00)*(sj0));
1891 IkReal x534=((px)*(sj0));
1892 IkReal x535=((IkReal(0.700000000000000))*(cj1));
1893 IkReal x536=((py)*(r02));
1894 IkReal x537=((IkReal(0.190000000000000))*(py));
1895 IkReal x538=((IkReal(2.00000000000000))*(py));
1896 IkReal x539=((pz)*(r01));
1897 IkReal x540=((IkReal(2.00000000000000))*(cj0));
1898 IkReal x541=((IkReal(0.350000000000000))*(sj1));
1899 IkReal x542=((pz)*(r02));
1900 IkReal x543=((cj0)*(r01));
1901 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.45233765858574))+(j3)), IkReal(6.28318530717959))));
1902 evalcond[1]=((IkReal(-0.0950000000000000))+(((IkReal(-1.00000000000000))*(py)*(x528)))+(x534));
1903 evalcond[2]=((sj4)+(((IkReal(-1.00000000000000))*(r01)*(x528)))+(x533));
1904 evalcond[3]=((IkReal(0.166749999870000))+(((cj0)*(px)*(x531)))+(((sj0)*(x532)))+(((pz)*(x535)))+(((IkReal(-1.00000000000000))*(pp)))+(((IkReal(-1.00000000000000))*(cj0)*(x537)))+(((py)*(sj0)*(x531))));
1905 evalcond[4]=((((IkReal(-1.00000000000000))*(py)*(r01)))+(((IkReal(-0.546145583500000))*(cj4)))+(((r02)*(x530)))+(((IkReal(0.0950000000000000))*(x533)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((IkReal(-1.00000000000000))*(x542)))+(((x529)*(x541)))+(((IkReal(-0.0950000000000000))*(x543)))+(((x525)*(x526))));
1906 evalcond[5]=((((IkReal(-1.00000000000000))*(sj0)*(x536)))+(((IkReal(1.00000000000000e-9))*(cj4)))+(((IkReal(-1.00000000000000))*(x527)*(x528)))+(((pz)*(x529)))+(((sj0)*(x539)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x526)))+(((r02)*(x541)))+(((IkReal(-1.00000000000000))*(x529)*(x530))));
1907 evalcond[6]=((((px)*(x529)*(x538)))+(((IkReal(-0.0665000000000000))*(sj0)*(x525)))+(((IkReal(-1.00000000000000))*(pp)*(r01)*(x528)))+(((pz)*(x536)*(x540)))+(((sj0)*(x527)*(x535)))+(((IkReal(-0.113475000000000))*(x543)))+(((pp)*(x533)))+(((IkReal(-2.00000000000000))*(x533)*((px)*(px))))+(((IkReal(-1.00000000000000))*(r01)*(x534)*(x538)))+(((IkReal(-0.0665000000000000))*(sj1)*(x529)))+(((IkReal(-1.00000000000000))*(cj0)*(x535)*(x536)))+(((IkReal(-1.00000000000000))*(pz)*(x533)*(x535)))+(((IkReal(0.298274999870000))*(sj4)))+(((r01)*(x537)))+(((IkReal(-0.0665000000000000))*(cj1)*(r02)))+(((IkReal(-2.00000000000000))*(pz)*(sj0)*(x527)))+(((IkReal(0.113475000000000))*(x533)))+(((IkReal(0.700000000000000))*(px)*(x525)))+(((cj0)*(x535)*(x539)))+(((r00)*(x532)))+(((py)*(x538)*(x543)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x531)))+(((IkReal(0.190000000000000))*(x542))));
1908 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 )
1909 {
1910 {
1911 IkReal j2array[1], cj2array[1], sj2array[1];
1912 bool j2valid[1]={false};
1913 _nj2 = 1;
1914 IkReal x544=((IkReal(1.81818181870518))*(sj1));
1915 IkReal x545=((py)*(sj0));
1916 IkReal x546=((IkReal(0.216392517249668))*(sj1));
1917 IkReal x547=((cj0)*(px));
1918 IkReal x548=((IkReal(0.216392517249668))*(cj1));
1919 IkReal x549=((IkReal(1.81818181870518))*(cj1));
1920 if( IKabs(((IkReal(0.0757373810373838))+(((x545)*(x549)))+(((IkReal(-1.00000000000000))*(x545)*(x546)))+(((IkReal(-1.00000000000000))*(pz)*(x544)))+(((IkReal(-1.00000000000000))*(pz)*(x548)))+(((x547)*(x549)))+(((IkReal(-1.00000000000000))*(x546)*(x547))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-0.636363636546814))+(((x545)*(x548)))+(((pz)*(x549)))+(((x544)*(x547)))+(((x547)*(x548)))+(((IkReal(-1.00000000000000))*(pz)*(x546)))+(((x544)*(x545))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(0.0757373810373838))+(((x545)*(x549)))+(((IkReal(-1.00000000000000))*(x545)*(x546)))+(((IkReal(-1.00000000000000))*(pz)*(x544)))+(((IkReal(-1.00000000000000))*(pz)*(x548)))+(((x547)*(x549)))+(((IkReal(-1.00000000000000))*(x546)*(x547)))))+IKsqr(((IkReal(-0.636363636546814))+(((x545)*(x548)))+(((pz)*(x549)))+(((x544)*(x547)))+(((x547)*(x548)))+(((IkReal(-1.00000000000000))*(pz)*(x546)))+(((x544)*(x545)))))-1) <= IKFAST_SINCOS_THRESH )
1921  continue;
1922 j2array[0]=IKatan2(((IkReal(0.0757373810373838))+(((x545)*(x549)))+(((IkReal(-1.00000000000000))*(x545)*(x546)))+(((IkReal(-1.00000000000000))*(pz)*(x544)))+(((IkReal(-1.00000000000000))*(pz)*(x548)))+(((x547)*(x549)))+(((IkReal(-1.00000000000000))*(x546)*(x547)))), ((IkReal(-0.636363636546814))+(((x545)*(x548)))+(((pz)*(x549)))+(((x544)*(x547)))+(((x547)*(x548)))+(((IkReal(-1.00000000000000))*(pz)*(x546)))+(((x544)*(x545)))));
1923 sj2array[0]=IKsin(j2array[0]);
1924 cj2array[0]=IKcos(j2array[0]);
1925 if( j2array[0] > IKPI )
1926 {
1927  j2array[0]-=IK2PI;
1928 }
1929 else if( j2array[0] < -IKPI )
1930 { j2array[0]+=IK2PI;
1931 }
1932 j2valid[0] = true;
1933 for(int ij2 = 0; ij2 < 1; ++ij2)
1934 {
1935 if( !j2valid[ij2] )
1936 {
1937  continue;
1938 }
1939 _ij2[0] = ij2; _ij2[1] = -1;
1940 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
1941 {
1942 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
1943 {
1944  j2valid[iij2]=false; _ij2[1] = iij2; break;
1945 }
1946 }
1947 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1948 {
1949 IkReal evalcond[8];
1950 IkReal x550=IKsin(j2);
1951 IkReal x551=IKcos(j2);
1952 IkReal x552=(py)*(py);
1953 IkReal x553=(px)*(px);
1954 IkReal x554=(pz)*(pz);
1955 IkReal x555=((sj0)*(sj1));
1956 IkReal x556=((py)*(r00));
1957 IkReal x557=((IkReal(0.190000000000000))*(cj1));
1958 IkReal x558=((cj0)*(r02));
1959 IkReal x559=((py)*(r01));
1960 IkReal x560=((px)*(r01));
1961 IkReal x561=((IkReal(0.190000000000000))*(sj1));
1962 IkReal x562=((cj1)*(r02));
1963 IkReal x563=((pz)*(r00));
1964 IkReal x564=((cj1)*(sj0));
1965 IkReal x565=((cj0)*(r00));
1966 IkReal x566=((IkReal(2.00000000000000))*(sj1));
1967 IkReal x567=((IkReal(0.700000000000000))*(px));
1968 IkReal x568=((IkReal(1.00000000000000))*(cj1));
1969 IkReal x569=((IkReal(2.00000000000000))*(px));
1970 IkReal x570=((pp)*(r01));
1971 IkReal x571=((pp)*(sj1));
1972 IkReal x572=((r02)*(sj1));
1973 IkReal x573=((pz)*(r01));
1974 IkReal x574=((px)*(r02));
1975 IkReal x575=((IkReal(0.700000000000000))*(sj0));
1976 IkReal x576=((cj0)*(sj1));
1977 IkReal x577=((r00)*(sj0));
1978 IkReal x578=((cj0)*(r01));
1979 IkReal x579=((IkReal(1.00000000000000))*(py));
1980 IkReal x580=((pz)*(r02));
1981 IkReal x581=((IkReal(2.00000000000000))*(py));
1982 IkReal x582=((cj1)*(pz));
1983 IkReal x583=((IkReal(0.0950000000000000))*(r01));
1984 IkReal x584=((cj0)*(px));
1985 IkReal x585=((pz)*(x566));
1986 IkReal x586=((cj4)*(x550));
1987 IkReal x587=((cj4)*(x551));
1988 IkReal x588=((sj4)*(x550));
1989 IkReal x589=((IkReal(0.0645444780500000))*(x551));
1990 IkReal x590=((IkReal(0.542318181700000))*(x551));
1991 IkReal x591=((IkReal(2.00000000000000))*(r01)*(x552));
1992 evalcond[0]=((x562)+(((r01)*(x555)))+(((sj1)*(x565)))+(((IkReal(0.992991970000000))*(x587)))+(((IkReal(-0.118181820000000))*(x586))));
1993 evalcond[1]=((IkReal(-0.350000000000000))+(((IkReal(-1.00000000000000))*(x590)))+(((py)*(x555)))+(((px)*(x576)))+(((IkReal(0.0645444780500000))*(x550)))+(x582));
1994 evalcond[2]=((x572)+(((IkReal(-0.118181820000000))*(x587)))+(((IkReal(-1.00000000000000))*(x565)*(x568)))+(((IkReal(-0.992991970000000))*(x586)))+(((IkReal(-1.00000000000000))*(r01)*(x564))));
1995 evalcond[3]=((((IkReal(-1.00000000000000))*(x564)*(x579)))+(((pz)*(sj1)))+(((IkReal(-1.00000000000000))*(x568)*(x584)))+(((IkReal(0.542318181700000))*(x550)))+(x589));
1996 evalcond[4]=((((IkReal(-0.0950000000000000))*(x572)))+(((IkReal(-1.00000000000000))*(x560)*(x568)))+(((x573)*(x576)))+(((IkReal(-1.00000000000000))*(sj1)*(x558)*(x579)))+(((sj4)*(x589)))+(((x555)*(x574)))+(((IkReal(-1.00000000000000))*(x555)*(x563)))+(((IkReal(0.0950000000000000))*(cj1)*(x565)))+(((IkReal(0.542318181700000))*(x588)))+(((x564)*(x583)))+(((cj1)*(x556))));
1997 evalcond[5]=((((IkReal(0.0950000000000000))*(x562)))+(((IkReal(0.350000000000000))*(x578)))+(((sj4)*(x590)))+(((sj1)*(x556)))+(((x563)*(x564)))+(((x555)*(x583)))+(((IkReal(-1.00000000000000))*(cj0)*(x568)*(x573)))+(((IkReal(-0.350000000000000))*(x577)))+(((IkReal(-0.0645444780500000))*(x588)))+(((IkReal(-1.00000000000000))*(px)*(sj0)*(x562)))+(((IkReal(-1.00000000000000))*(sj1)*(x560)))+(((cj1)*(py)*(x558)))+(((IkReal(0.0950000000000000))*(sj1)*(x565))));
1998 evalcond[6]=((((IkReal(-1.00000000000000))*(cj1)*(x563)*(x569)))+(((IkReal(-0.0665000000000000))*(x577)))+(((py)*(x557)*(x558)))+(((IkReal(-0.113475000000000))*(sj1)*(x565)))+(((IkReal(-1.00000000000000))*(px)*(x558)*(x585)))+(((IkReal(-0.296184679851750))*(x587)))+(((x556)*(x561)))+(((IkReal(-0.113475000000000))*(x562)))+(((IkReal(-0.113475000000000))*(r01)*(x555)))+(((x565)*(x571)))+(((x555)*(x570)))+(((IkReal(-1.00000000000000))*(x555)*(x556)*(x569)))+(((sj0)*(x557)*(x563)))+(((IkReal(-1.00000000000000))*(cj0)*(x557)*(x573)))+(((IkReal(-2.00000000000000))*(x554)*(x562)))+(((IkReal(0.700000000000000))*(x559)))+(((IkReal(-1.00000000000000))*(x553)*(x565)*(x566)))+(((IkReal(-1.00000000000000))*(sj0)*(x557)*(x574)))+(((IkReal(-1.00000000000000))*(x555)*(x580)*(x581)))+(((IkReal(0.0352506812605000))*(x586)))+(((IkReal(-1.00000000000000))*(x560)*(x561)))+(((IkReal(0.0665000000000000))*(x578)))+(((IkReal(-1.00000000000000))*(x559)*(x566)*(x584)))+(((IkReal(-2.00000000000000))*(x559)*(x582)))+(((IkReal(0.700000000000000))*(x580)))+(((IkReal(-1.00000000000000))*(x555)*(x591)))+(((r00)*(x567)))+(((pp)*(x562))));
1999 evalcond[7]=((((IkReal(-0.131525000000000))*(cj1)*(x565)))+(((py)*(x558)*(x561)))+(((r02)*(x571)))+(((IkReal(0.296184679851750))*(x586)))+(((IkReal(-1.00000000000000))*(x556)*(x557)))+(((IkReal(-1.00000000000000))*(x558)*(x567)))+(((x558)*(x569)*(x582)))+(((x556)*(x564)*(x569)))+(((IkReal(-1.00000000000000))*(x559)*(x585)))+(((IkReal(-1.00000000000000))*(py)*(r02)*(x575)))+(((x564)*(x591)))+(((IkReal(0.0352506812605000))*(x587)))+(((IkReal(-1.00000000000000))*(px)*(x563)*(x566)))+(((IkReal(-0.190000000000000))*(x555)*(x574)))+(((IkReal(2.00000000000000))*(cj1)*(x553)*(x565)))+(((x557)*(x560)))+(((IkReal(-1.00000000000000))*(x564)*(x570)))+(((IkReal(0.190000000000000))*(x555)*(x563)))+(((cj0)*(cj1)*(x559)*(x569)))+(((x573)*(x575)))+(((IkReal(-1.00000000000000))*(r02)*(x554)*(x566)))+(((IkReal(-0.131525000000000))*(r01)*(x564)))+(((IkReal(-1.00000000000000))*(pp)*(x565)*(x568)))+(((IkReal(-1.00000000000000))*(cj0)*(x561)*(x573)))+(((IkReal(0.700000000000000))*(cj0)*(x563)))+(((pz)*(sj0)*(x562)*(x581)))+(((IkReal(0.131525000000000))*(x572))));
2000 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
2001 {
2002 continue;
2003 }
2004 }
2005 
2006 {
2007 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
2008 vinfos[0].jointtype = 1;
2009 vinfos[0].foffset = j0;
2010 vinfos[0].indices[0] = _ij0[0];
2011 vinfos[0].indices[1] = _ij0[1];
2012 vinfos[0].maxsolutions = _nj0;
2013 vinfos[1].jointtype = 1;
2014 vinfos[1].foffset = j1;
2015 vinfos[1].indices[0] = _ij1[0];
2016 vinfos[1].indices[1] = _ij1[1];
2017 vinfos[1].maxsolutions = _nj1;
2018 vinfos[2].jointtype = 1;
2019 vinfos[2].foffset = j2;
2020 vinfos[2].indices[0] = _ij2[0];
2021 vinfos[2].indices[1] = _ij2[1];
2022 vinfos[2].maxsolutions = _nj2;
2023 vinfos[3].jointtype = 1;
2024 vinfos[3].foffset = j3;
2025 vinfos[3].indices[0] = _ij3[0];
2026 vinfos[3].indices[1] = _ij3[1];
2027 vinfos[3].maxsolutions = _nj3;
2028 vinfos[4].jointtype = 1;
2029 vinfos[4].foffset = j4;
2030 vinfos[4].indices[0] = _ij4[0];
2031 vinfos[4].indices[1] = _ij4[1];
2032 vinfos[4].maxsolutions = _nj4;
2033 std::vector<int> vfree(0);
2034 solutions.AddSolution(vinfos,vfree);
2035 }
2036 }
2037 }
2038 
2039 } else
2040 {
2041 IkReal x592=((r01)*(sj1));
2042 IkReal x593=((IkReal(0.350000000000000))*(sj0));
2043 IkReal x594=((px)*(r02));
2044 IkReal x595=((IkReal(1.00000000000000))*(cj0));
2045 IkReal x596=((cj0)*(r00));
2046 IkReal x597=((IkReal(0.350000000000000))*(cj1));
2047 IkReal x598=((IkReal(0.700000000000000))*(sj1));
2048 IkReal x599=((IkReal(0.190000000000000))*(px));
2049 IkReal x600=((r00)*(sj0));
2050 IkReal x601=((px)*(sj0));
2051 IkReal x602=((IkReal(0.700000000000000))*(cj1));
2052 IkReal x603=((py)*(r02));
2053 IkReal x604=((IkReal(0.190000000000000))*(py));
2054 IkReal x605=((IkReal(2.00000000000000))*(py));
2055 IkReal x606=((pz)*(r01));
2056 IkReal x607=((IkReal(2.00000000000000))*(cj0));
2057 IkReal x608=((IkReal(0.350000000000000))*(sj1));
2058 IkReal x609=((pz)*(r02));
2059 IkReal x610=((cj0)*(r01));
2060 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.83084764859385))+(j3)), IkReal(6.28318530717959))));
2061 evalcond[1]=((IkReal(-0.0950000000000000))+(((IkReal(-1.00000000000000))*(py)*(x595)))+(x601));
2062 evalcond[2]=((sj4)+(((IkReal(-1.00000000000000))*(r01)*(x595)))+(x600));
2063 evalcond[3]=((IkReal(0.166749999870000))+(((pz)*(x602)))+(((IkReal(-1.00000000000000))*(cj0)*(x604)))+(((IkReal(-1.00000000000000))*(pp)))+(((cj0)*(px)*(x598)))+(((py)*(sj0)*(x598)))+(((sj0)*(x599))));
2064 evalcond[4]=((((IkReal(-1.00000000000000))*(py)*(r01)))+(((IkReal(-1.00000000000000))*(x609)))+(((r02)*(x597)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((IkReal(0.0950000000000000))*(x600)))+(((x592)*(x593)))+(((IkReal(-0.0950000000000000))*(x610)))+(((x596)*(x608)))+(((IkReal(0.546145583500000))*(cj4))));
2065 evalcond[5]=((((sj0)*(x606)))+(((IkReal(1.00000000000000e-9))*(cj4)))+(((r02)*(x608)))+(((IkReal(-1.00000000000000))*(sj0)*(x603)))+(((IkReal(-1.00000000000000))*(x596)*(x597)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x593)))+(((pz)*(x596)))+(((IkReal(-1.00000000000000))*(x594)*(x595))));
2066 evalcond[6]=((((IkReal(0.700000000000000))*(px)*(x592)))+(((pz)*(x603)*(x607)))+(((IkReal(0.190000000000000))*(x609)))+(((sj0)*(x594)*(x602)))+(((IkReal(-1.00000000000000))*(pp)*(r01)*(x595)))+(((IkReal(-0.0665000000000000))*(sj0)*(x592)))+(((r01)*(x604)))+(((IkReal(-1.00000000000000))*(r01)*(x601)*(x605)))+(((px)*(x596)*(x605)))+(((IkReal(0.113475000000000))*(x600)))+(((r00)*(x599)))+(((cj0)*(x602)*(x606)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x598)))+(((IkReal(-2.00000000000000))*(pz)*(sj0)*(x594)))+(((py)*(x605)*(x610)))+(((IkReal(-0.113475000000000))*(x610)))+(((pp)*(x600)))+(((IkReal(0.298274999870000))*(sj4)))+(((IkReal(-0.0665000000000000))*(cj1)*(r02)))+(((IkReal(-1.00000000000000))*(cj0)*(x602)*(x603)))+(((IkReal(-1.00000000000000))*(pz)*(x600)*(x602)))+(((IkReal(-0.0665000000000000))*(sj1)*(x596)))+(((IkReal(-2.00000000000000))*(x600)*((px)*(px)))));
2067 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 )
2068 {
2069 {
2070 IkReal j2array[1], cj2array[1], sj2array[1];
2071 bool j2valid[1]={false};
2072 _nj2 = 1;
2073 IkReal x611=((IkReal(1.81818181870518))*(sj1));
2074 IkReal x612=((py)*(sj0));
2075 IkReal x613=((IkReal(0.216392517249668))*(sj1));
2076 IkReal x614=((cj0)*(px));
2077 IkReal x615=((IkReal(0.216392517249668))*(cj1));
2078 IkReal x616=((IkReal(1.81818181870518))*(cj1));
2079 if( IKabs(((IkReal(-0.0757373810373838))+(((x614)*(x616)))+(((x612)*(x616)))+(((IkReal(-1.00000000000000))*(pz)*(x611)))+(((x612)*(x613)))+(((pz)*(x615)))+(((x613)*(x614))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-0.636363636546814))+(((x611)*(x614)))+(((pz)*(x613)))+(((pz)*(x616)))+(((IkReal(-1.00000000000000))*(x614)*(x615)))+(((IkReal(-1.00000000000000))*(x612)*(x615)))+(((x611)*(x612))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(-0.0757373810373838))+(((x614)*(x616)))+(((x612)*(x616)))+(((IkReal(-1.00000000000000))*(pz)*(x611)))+(((x612)*(x613)))+(((pz)*(x615)))+(((x613)*(x614)))))+IKsqr(((IkReal(-0.636363636546814))+(((x611)*(x614)))+(((pz)*(x613)))+(((pz)*(x616)))+(((IkReal(-1.00000000000000))*(x614)*(x615)))+(((IkReal(-1.00000000000000))*(x612)*(x615)))+(((x611)*(x612)))))-1) <= IKFAST_SINCOS_THRESH )
2080  continue;
2081 j2array[0]=IKatan2(((IkReal(-0.0757373810373838))+(((x614)*(x616)))+(((x612)*(x616)))+(((IkReal(-1.00000000000000))*(pz)*(x611)))+(((x612)*(x613)))+(((pz)*(x615)))+(((x613)*(x614)))), ((IkReal(-0.636363636546814))+(((x611)*(x614)))+(((pz)*(x613)))+(((pz)*(x616)))+(((IkReal(-1.00000000000000))*(x614)*(x615)))+(((IkReal(-1.00000000000000))*(x612)*(x615)))+(((x611)*(x612)))));
2082 sj2array[0]=IKsin(j2array[0]);
2083 cj2array[0]=IKcos(j2array[0]);
2084 if( j2array[0] > IKPI )
2085 {
2086  j2array[0]-=IK2PI;
2087 }
2088 else if( j2array[0] < -IKPI )
2089 { j2array[0]+=IK2PI;
2090 }
2091 j2valid[0] = true;
2092 for(int ij2 = 0; ij2 < 1; ++ij2)
2093 {
2094 if( !j2valid[ij2] )
2095 {
2096  continue;
2097 }
2098 _ij2[0] = ij2; _ij2[1] = -1;
2099 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
2100 {
2101 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
2102 {
2103  j2valid[iij2]=false; _ij2[1] = iij2; break;
2104 }
2105 }
2106 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
2107 {
2108 IkReal evalcond[8];
2109 IkReal x617=IKsin(j2);
2110 IkReal x618=IKcos(j2);
2111 IkReal x619=(py)*(py);
2112 IkReal x620=(px)*(px);
2113 IkReal x621=(pz)*(pz);
2114 IkReal x622=((sj0)*(sj1));
2115 IkReal x623=((py)*(r00));
2116 IkReal x624=((IkReal(0.190000000000000))*(cj1));
2117 IkReal x625=((cj0)*(r02));
2118 IkReal x626=((py)*(r01));
2119 IkReal x627=((px)*(r01));
2120 IkReal x628=((IkReal(0.190000000000000))*(sj1));
2121 IkReal x629=((cj1)*(r02));
2122 IkReal x630=((pz)*(r00));
2123 IkReal x631=((cj1)*(sj0));
2124 IkReal x632=((cj0)*(r00));
2125 IkReal x633=((IkReal(2.00000000000000))*(sj1));
2126 IkReal x634=((IkReal(0.700000000000000))*(px));
2127 IkReal x635=((IkReal(1.00000000000000))*(cj1));
2128 IkReal x636=((IkReal(2.00000000000000))*(px));
2129 IkReal x637=((pp)*(r01));
2130 IkReal x638=((pp)*(sj1));
2131 IkReal x639=((r02)*(sj1));
2132 IkReal x640=((pz)*(r01));
2133 IkReal x641=((px)*(r02));
2134 IkReal x642=((IkReal(0.700000000000000))*(sj0));
2135 IkReal x643=((cj0)*(sj1));
2136 IkReal x644=((r00)*(sj0));
2137 IkReal x645=((cj0)*(r01));
2138 IkReal x646=((IkReal(1.00000000000000))*(py));
2139 IkReal x647=((pz)*(r02));
2140 IkReal x648=((IkReal(2.00000000000000))*(py));
2141 IkReal x649=((cj1)*(pz));
2142 IkReal x650=((IkReal(0.0950000000000000))*(r01));
2143 IkReal x651=((cj0)*(px));
2144 IkReal x652=((pz)*(x633));
2145 IkReal x653=((cj4)*(x617));
2146 IkReal x654=((cj4)*(x618));
2147 IkReal x655=((sj4)*(x617));
2148 IkReal x656=((IkReal(0.0645444780500000))*(x618));
2149 IkReal x657=((IkReal(0.542318181700000))*(x618));
2150 IkReal x658=((IkReal(2.00000000000000))*(r01)*(x619));
2151 evalcond[0]=((((sj1)*(x632)))+(((r01)*(x622)))+(((IkReal(-0.118181820000000))*(x653)))+(x629)+(((IkReal(-0.992991970000000))*(x654))));
2152 evalcond[1]=((IkReal(-0.350000000000000))+(x649)+(((py)*(x622)))+(((IkReal(-0.0645444780500000))*(x617)))+(((px)*(x643)))+(((IkReal(-1.00000000000000))*(x657))));
2153 evalcond[2]=((((IkReal(-1.00000000000000))*(r01)*(x631)))+(((IkReal(-1.00000000000000))*(x632)*(x635)))+(((IkReal(0.992991970000000))*(x653)))+(x639)+(((IkReal(-0.118181820000000))*(x654))));
2154 evalcond[3]=((((pz)*(sj1)))+(((IkReal(0.542318181700000))*(x617)))+(((IkReal(-1.00000000000000))*(x635)*(x651)))+(((IkReal(-1.00000000000000))*(x656)))+(((IkReal(-1.00000000000000))*(x631)*(x646))));
2155 evalcond[4]=((((IkReal(0.542318181700000))*(x655)))+(((IkReal(-1.00000000000000))*(x627)*(x635)))+(((IkReal(-1.00000000000000))*(x622)*(x630)))+(((IkReal(-1.00000000000000))*(sj4)*(x656)))+(((IkReal(-1.00000000000000))*(sj1)*(x625)*(x646)))+(((x640)*(x643)))+(((x631)*(x650)))+(((IkReal(0.0950000000000000))*(cj1)*(x632)))+(((x622)*(x641)))+(((cj1)*(x623)))+(((IkReal(-0.0950000000000000))*(x639))));
2156 evalcond[5]=((((IkReal(0.0950000000000000))*(x629)))+(((x630)*(x631)))+(((sj1)*(x623)))+(((IkReal(-1.00000000000000))*(px)*(sj0)*(x629)))+(((sj4)*(x657)))+(((x622)*(x650)))+(((IkReal(-0.350000000000000))*(x644)))+(((IkReal(0.0645444780500000))*(x655)))+(((cj1)*(py)*(x625)))+(((IkReal(0.0950000000000000))*(sj1)*(x632)))+(((IkReal(-1.00000000000000))*(sj1)*(x627)))+(((IkReal(0.350000000000000))*(x645)))+(((IkReal(-1.00000000000000))*(cj0)*(x635)*(x640))));
2157 evalcond[6]=((((IkReal(-1.00000000000000))*(x627)*(x628)))+(((IkReal(-1.00000000000000))*(x626)*(x633)*(x651)))+(((IkReal(-0.113475000000000))*(x629)))+(((IkReal(0.296184679851750))*(x654)))+(((IkReal(-0.113475000000000))*(sj1)*(x632)))+(((IkReal(-1.00000000000000))*(x622)*(x623)*(x636)))+(((IkReal(0.700000000000000))*(x647)))+(((IkReal(-1.00000000000000))*(x622)*(x658)))+(((IkReal(-2.00000000000000))*(x621)*(x629)))+(((sj0)*(x624)*(x630)))+(((py)*(x624)*(x625)))+(((pp)*(x629)))+(((x622)*(x637)))+(((x632)*(x638)))+(((IkReal(-0.113475000000000))*(r01)*(x622)))+(((IkReal(-1.00000000000000))*(cj1)*(x630)*(x636)))+(((IkReal(-1.00000000000000))*(x622)*(x647)*(x648)))+(((IkReal(0.0665000000000000))*(x645)))+(((IkReal(-1.00000000000000))*(x620)*(x632)*(x633)))+(((IkReal(-1.00000000000000))*(cj0)*(x624)*(x640)))+(((IkReal(0.0352506812605000))*(x653)))+(((x623)*(x628)))+(((IkReal(-1.00000000000000))*(sj0)*(x624)*(x641)))+(((IkReal(-1.00000000000000))*(px)*(x625)*(x652)))+(((IkReal(-0.0665000000000000))*(x644)))+(((IkReal(0.700000000000000))*(x626)))+(((IkReal(-2.00000000000000))*(x626)*(x649)))+(((r00)*(x634))));
2158 evalcond[7]=((((x623)*(x631)*(x636)))+(((x625)*(x636)*(x649)))+(((IkReal(-1.00000000000000))*(x626)*(x652)))+(((x631)*(x658)))+(((IkReal(-0.296184679851750))*(x653)))+(((IkReal(-0.131525000000000))*(r01)*(x631)))+(((r02)*(x638)))+(((IkReal(0.131525000000000))*(x639)))+(((IkReal(-0.131525000000000))*(cj1)*(x632)))+(((x640)*(x642)))+(((x624)*(x627)))+(((pz)*(sj0)*(x629)*(x648)))+(((IkReal(-1.00000000000000))*(r02)*(x621)*(x633)))+(((IkReal(-1.00000000000000))*(py)*(r02)*(x642)))+(((IkReal(-1.00000000000000))*(x631)*(x637)))+(((IkReal(0.190000000000000))*(x622)*(x630)))+(((IkReal(-1.00000000000000))*(pp)*(x632)*(x635)))+(((IkReal(-1.00000000000000))*(x623)*(x624)))+(((IkReal(-0.190000000000000))*(x622)*(x641)))+(((IkReal(0.700000000000000))*(cj0)*(x630)))+(((IkReal(-1.00000000000000))*(px)*(x630)*(x633)))+(((IkReal(0.0352506812605000))*(x654)))+(((IkReal(-1.00000000000000))*(cj0)*(x628)*(x640)))+(((IkReal(2.00000000000000))*(cj1)*(x620)*(x632)))+(((IkReal(-1.00000000000000))*(x625)*(x634)))+(((cj0)*(cj1)*(x626)*(x636)))+(((py)*(x625)*(x628))));
2159 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
2160 {
2161 continue;
2162 }
2163 }
2164 
2165 {
2166 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
2167 vinfos[0].jointtype = 1;
2168 vinfos[0].foffset = j0;
2169 vinfos[0].indices[0] = _ij0[0];
2170 vinfos[0].indices[1] = _ij0[1];
2171 vinfos[0].maxsolutions = _nj0;
2172 vinfos[1].jointtype = 1;
2173 vinfos[1].foffset = j1;
2174 vinfos[1].indices[0] = _ij1[0];
2175 vinfos[1].indices[1] = _ij1[1];
2176 vinfos[1].maxsolutions = _nj1;
2177 vinfos[2].jointtype = 1;
2178 vinfos[2].foffset = j2;
2179 vinfos[2].indices[0] = _ij2[0];
2180 vinfos[2].indices[1] = _ij2[1];
2181 vinfos[2].maxsolutions = _nj2;
2182 vinfos[3].jointtype = 1;
2183 vinfos[3].foffset = j3;
2184 vinfos[3].indices[0] = _ij3[0];
2185 vinfos[3].indices[1] = _ij3[1];
2186 vinfos[3].maxsolutions = _nj3;
2187 vinfos[4].jointtype = 1;
2188 vinfos[4].foffset = j4;
2189 vinfos[4].indices[0] = _ij4[0];
2190 vinfos[4].indices[1] = _ij4[1];
2191 vinfos[4].maxsolutions = _nj4;
2192 std::vector<int> vfree(0);
2193 solutions.AddSolution(vinfos,vfree);
2194 }
2195 }
2196 }
2197 
2198 } else
2199 {
2200 if( 1 )
2201 {
2202 continue;
2203 
2204 } else
2205 {
2206 }
2207 }
2208 }
2209 }
2210 }
2211 }
2212 
2213 } else
2214 {
2215 {
2216 IkReal j2array[1], cj2array[1], sj2array[1];
2217 bool j2valid[1]={false};
2218 _nj2 = 1;
2219 IkReal x659=((cj0)*(sj1));
2220 IkReal x660=((IkReal(13.0000000000000))*(r00));
2221 IkReal x661=((cj1)*(pz));
2222 IkReal x662=((sj0)*(sj1));
2223 IkReal x663=((IkReal(13.0000000000000))*(sj3));
2224 IkReal x664=((cj1)*(r02));
2225 IkReal x665=((IkReal(70.0000000000000))*(cj4));
2226 IkReal x666=((IkReal(13.0000000000000))*(cj3));
2227 IkReal x667=((IkReal(200.000000000000))*(cj4)*(sj3));
2228 IkReal x668=((IkReal(200.000000000000))*(cj3)*(cj4));
2229 if( IKabs(((gconst2)*(((((r01)*(x662)*(x666)))+(((IkReal(110.000000000000))*(r00)*(x659)))+(((IkReal(110.000000000000))*(r01)*(x662)))+(((x661)*(x667)))+(((IkReal(110.000000000000))*(x664)))+(((IkReal(-1.00000000000000))*(sj3)*(x665)))+(((cj3)*(x659)*(x660)))+(((x664)*(x666)))+(((px)*(x659)*(x667)))+(((py)*(x662)*(x667))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst2)*(((((r01)*(x662)*(x663)))+(((cj3)*(x665)))+(((sj3)*(x659)*(x660)))+(((IkReal(-1.00000000000000))*(px)*(x659)*(x668)))+(((x663)*(x664)))+(((IkReal(-1.00000000000000))*(x661)*(x668)))+(((IkReal(-1.00000000000000))*(py)*(x662)*(x668))))))) < IKFAST_ATAN2_MAGTHRESH )
2230  continue;
2231 j2array[0]=IKatan2(((gconst2)*(((((r01)*(x662)*(x666)))+(((IkReal(110.000000000000))*(r00)*(x659)))+(((IkReal(110.000000000000))*(r01)*(x662)))+(((x661)*(x667)))+(((IkReal(110.000000000000))*(x664)))+(((IkReal(-1.00000000000000))*(sj3)*(x665)))+(((cj3)*(x659)*(x660)))+(((x664)*(x666)))+(((px)*(x659)*(x667)))+(((py)*(x662)*(x667)))))), ((gconst2)*(((((r01)*(x662)*(x663)))+(((cj3)*(x665)))+(((sj3)*(x659)*(x660)))+(((IkReal(-1.00000000000000))*(px)*(x659)*(x668)))+(((x663)*(x664)))+(((IkReal(-1.00000000000000))*(x661)*(x668)))+(((IkReal(-1.00000000000000))*(py)*(x662)*(x668)))))));
2232 sj2array[0]=IKsin(j2array[0]);
2233 cj2array[0]=IKcos(j2array[0]);
2234 if( j2array[0] > IKPI )
2235 {
2236  j2array[0]-=IK2PI;
2237 }
2238 else if( j2array[0] < -IKPI )
2239 { j2array[0]+=IK2PI;
2240 }
2241 j2valid[0] = true;
2242 for(int ij2 = 0; ij2 < 1; ++ij2)
2243 {
2244 if( !j2valid[ij2] )
2245 {
2246  continue;
2247 }
2248 _ij2[0] = ij2; _ij2[1] = -1;
2249 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
2250 {
2251 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
2252 {
2253  j2valid[iij2]=false; _ij2[1] = iij2; break;
2254 }
2255 }
2256 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
2257 {
2258 IkReal evalcond[8];
2259 IkReal x669=IKsin(j2);
2260 IkReal x670=IKcos(j2);
2261 IkReal x671=(py)*(py);
2262 IkReal x672=(px)*(px);
2263 IkReal x673=(pz)*(pz);
2264 IkReal x674=((sj0)*(sj1));
2265 IkReal x675=((py)*(r00));
2266 IkReal x676=((IkReal(0.190000000000000))*(cj1));
2267 IkReal x677=((cj0)*(r02));
2268 IkReal x678=((py)*(r01));
2269 IkReal x679=((r01)*(sj1));
2270 IkReal x680=((IkReal(0.190000000000000))*(px));
2271 IkReal x681=((cj1)*(r02));
2272 IkReal x682=((pz)*(r00));
2273 IkReal x683=((cj1)*(sj0));
2274 IkReal x684=((cj0)*(r00));
2275 IkReal x685=((IkReal(2.00000000000000))*(sj1));
2276 IkReal x686=((cj0)*(pz));
2277 IkReal x687=((IkReal(1.00000000000000))*(r01));
2278 IkReal x688=((cj1)*(px));
2279 IkReal x689=((IkReal(2.00000000000000))*(px));
2280 IkReal x690=((pp)*(sj1));
2281 IkReal x691=((r02)*(sj1));
2282 IkReal x692=((px)*(r02));
2283 IkReal x693=((IkReal(0.700000000000000))*(pz));
2284 IkReal x694=((cj0)*(px));
2285 IkReal x695=((r00)*(sj0));
2286 IkReal x696=((IkReal(1.00000000000000))*(px));
2287 IkReal x697=((cj0)*(r01));
2288 IkReal x698=((IkReal(1.00000000000000))*(cj1));
2289 IkReal x699=((IkReal(1.00000000000000))*(py));
2290 IkReal x700=((IkReal(0.700000000000000))*(px));
2291 IkReal x701=((IkReal(0.190000000000000))*(sj1));
2292 IkReal x702=((IkReal(0.298275000000000))*(sj3));
2293 IkReal x703=((cj1)*(pz));
2294 IkReal x704=((IkReal(0.0950000000000000))*(r01));
2295 IkReal x705=((IkReal(0.306725000000000))*(cj3)*(cj4));
2296 IkReal x706=((pz)*(x685));
2297 IkReal x707=((IkReal(0.550000000000000))*(x670));
2298 IkReal x708=((cj4)*(x670));
2299 IkReal x709=((IkReal(0.550000000000000))*(x669));
2300 IkReal x710=((IkReal(2.00000000000000))*(py)*(pz));
2301 IkReal x711=((IkReal(0.0650000000000000))*(cj3)*(sj4));
2302 IkReal x712=((IkReal(0.0650000000000000))*(x669));
2303 IkReal x713=((cj4)*(x669));
2304 IkReal x714=((IkReal(2.00000000000000))*(r01)*(x671));
2305 IkReal x715=((IkReal(0.0650000000000000))*(sj3)*(x670));
2306 evalcond[0]=((((r01)*(x674)))+(((sj1)*(x684)))+(((cj3)*(x713)))+(x681)+(((sj3)*(x708))));
2307 evalcond[1]=((IkReal(-0.350000000000000))+(((sj1)*(x694)))+(((IkReal(-0.0650000000000000))*(cj3)*(x670)))+(((sj3)*(x712)))+(x703)+(((py)*(x674)))+(((IkReal(-1.00000000000000))*(x707))));
2308 evalcond[2]=((((IkReal(-1.00000000000000))*(x683)*(x687)))+(x691)+(((IkReal(-1.00000000000000))*(x684)*(x698)))+(((cj3)*(x708)))+(((IkReal(-1.00000000000000))*(sj3)*(x713))));
2309 evalcond[3]=((((IkReal(-1.00000000000000))*(cj0)*(x688)))+(((pz)*(sj1)))+(x709)+(((cj3)*(x712)))+(x715)+(((IkReal(-1.00000000000000))*(x683)*(x699))));
2310 evalcond[4]=((((x679)*(x686)))+(((IkReal(-0.0950000000000000))*(x691)))+(((IkReal(0.0950000000000000))*(cj1)*(x684)))+(((x674)*(x692)))+(((IkReal(-1.00000000000000))*(x674)*(x682)))+(((IkReal(-1.00000000000000))*(sj1)*(x677)*(x699)))+(((sj4)*(x709)))+(((x683)*(x704)))+(((sj4)*(x715)))+(((cj1)*(x675)))+(((IkReal(-1.00000000000000))*(x687)*(x688)))+(((x669)*(x711))));
2311 evalcond[5]=((((sj1)*(x675)))+(((x670)*(x711)))+(((IkReal(-1.00000000000000))*(cj1)*(x686)*(x687)))+(((IkReal(0.0950000000000000))*(sj1)*(x684)))+(((IkReal(-1.00000000000000))*(x679)*(x696)))+(((x674)*(x704)))+(((IkReal(-0.350000000000000))*(x695)))+(((x682)*(x683)))+(((IkReal(-1.00000000000000))*(sj0)*(x681)*(x696)))+(((cj1)*(py)*(x677)))+(((IkReal(0.350000000000000))*(x697)))+(((IkReal(-1.00000000000000))*(sj3)*(sj4)*(x712)))+(((IkReal(0.0950000000000000))*(x681)))+(((sj4)*(x707))));
2312 evalcond[6]=((((x684)*(x690)))+(((py)*(x676)*(x677)))+(((r00)*(x700)))+(((IkReal(-1.00000000000000))*(x674)*(x675)*(x689)))+(((IkReal(-1.00000000000000))*(x702)*(x708)))+(((x669)*(x705)))+(((IkReal(-0.113475000000000))*(r01)*(x674)))+(((IkReal(-2.00000000000000))*(x673)*(x681)))+(((IkReal(-1.00000000000000))*(r02)*(x674)*(x710)))+(((IkReal(-1.00000000000000))*(x674)*(x714)))+(((sj0)*(x676)*(x682)))+(((IkReal(-1.00000000000000))*(sj0)*(x676)*(x692)))+(((IkReal(-0.113475000000000))*(x681)))+(((IkReal(-2.00000000000000))*(x678)*(x703)))+(((IkReal(-2.00000000000000))*(x682)*(x688)))+(((IkReal(0.0665000000000000))*(x697)))+(((IkReal(-1.00000000000000))*(r01)*(x676)*(x686)))+(((IkReal(0.0715000000000000))*(x713)))+(((IkReal(-1.00000000000000))*(x672)*(x684)*(x685)))+(((r02)*(x693)))+(((pp)*(x681)))+(((IkReal(-1.00000000000000))*(px)*(x677)*(x706)))+(((IkReal(0.700000000000000))*(x678)))+(((IkReal(-1.00000000000000))*(x679)*(x680)))+(((x675)*(x701)))+(((IkReal(-1.00000000000000))*(x678)*(x685)*(x694)))+(((IkReal(-0.113475000000000))*(sj1)*(x684)))+(((pp)*(r01)*(x674)))+(((IkReal(-0.0665000000000000))*(x695))));
2313 evalcond[7]=((((IkReal(-1.00000000000000))*(r02)*(x674)*(x680)))+(((IkReal(-1.00000000000000))*(x678)*(x706)))+(((x670)*(x705)))+(((IkReal(0.190000000000000))*(x674)*(x682)))+(((px)*(r01)*(x676)))+(((IkReal(2.00000000000000))*(cj1)*(x672)*(x684)))+(((IkReal(0.0715000000000000))*(x708)))+(((x683)*(x714)))+(((IkReal(0.700000000000000))*(cj0)*(x682)))+(((IkReal(-0.190000000000000))*(x679)*(x686)))+(((r01)*(sj0)*(x693)))+(((x702)*(x713)))+(((IkReal(-1.00000000000000))*(x675)*(x676)))+(((py)*(x677)*(x701)))+(((sj0)*(x681)*(x710)))+(((IkReal(-1.00000000000000))*(r02)*(x673)*(x685)))+(((IkReal(-1.00000000000000))*(px)*(x682)*(x685)))+(((IkReal(-1.00000000000000))*(x677)*(x700)))+(((IkReal(-0.131525000000000))*(r01)*(x683)))+(((IkReal(-0.700000000000000))*(py)*(r02)*(sj0)))+(((IkReal(2.00000000000000))*(pz)*(x677)*(x688)))+(((x675)*(x683)*(x689)))+(((IkReal(-1.00000000000000))*(pp)*(x683)*(x687)))+(((IkReal(-0.131525000000000))*(cj1)*(x684)))+(((r02)*(x690)))+(((IkReal(-1.00000000000000))*(pp)*(x684)*(x698)))+(((IkReal(2.00000000000000))*(cj0)*(x678)*(x688)))+(((IkReal(0.131525000000000))*(x691))));
2314 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
2315 {
2316 continue;
2317 }
2318 }
2319 
2320 {
2321 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
2322 vinfos[0].jointtype = 1;
2323 vinfos[0].foffset = j0;
2324 vinfos[0].indices[0] = _ij0[0];
2325 vinfos[0].indices[1] = _ij0[1];
2326 vinfos[0].maxsolutions = _nj0;
2327 vinfos[1].jointtype = 1;
2328 vinfos[1].foffset = j1;
2329 vinfos[1].indices[0] = _ij1[0];
2330 vinfos[1].indices[1] = _ij1[1];
2331 vinfos[1].maxsolutions = _nj1;
2332 vinfos[2].jointtype = 1;
2333 vinfos[2].foffset = j2;
2334 vinfos[2].indices[0] = _ij2[0];
2335 vinfos[2].indices[1] = _ij2[1];
2336 vinfos[2].maxsolutions = _nj2;
2337 vinfos[3].jointtype = 1;
2338 vinfos[3].foffset = j3;
2339 vinfos[3].indices[0] = _ij3[0];
2340 vinfos[3].indices[1] = _ij3[1];
2341 vinfos[3].maxsolutions = _nj3;
2342 vinfos[4].jointtype = 1;
2343 vinfos[4].foffset = j4;
2344 vinfos[4].indices[0] = _ij4[0];
2345 vinfos[4].indices[1] = _ij4[1];
2346 vinfos[4].maxsolutions = _nj4;
2347 std::vector<int> vfree(0);
2348 solutions.AddSolution(vinfos,vfree);
2349 }
2350 }
2351 }
2352 
2353 }
2354 
2355 }
2356 
2357 } else
2358 {
2359 {
2360 IkReal j2array[1], cj2array[1], sj2array[1];
2361 bool j2valid[1]={false};
2362 _nj2 = 1;
2363 IkReal x716=((IkReal(1.00000000000000))*(sj1));
2364 IkReal x717=((IkReal(1.00000000000000))*(sj3));
2365 IkReal x718=((cj0)*(r00));
2366 IkReal x719=((r01)*(sj0));
2367 IkReal x720=((cj3)*(r02));
2368 IkReal x721=((cj3)*(x719));
2369 IkReal x722=((cj1)*(x718));
2370 if( IKabs(((gconst1)*(((((IkReal(-1.00000000000000))*(cj3)*(x716)*(x718)))+(((IkReal(-1.00000000000000))*(x716)*(x721)))+(((r02)*(sj1)*(sj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x717)*(x719)))+(((IkReal(-1.00000000000000))*(cj1)*(x720)))+(((IkReal(-1.00000000000000))*(x717)*(x722))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst1)*(((((IkReal(-1.00000000000000))*(sj3)*(x716)*(x718)))+(((cj3)*(x722)))+(((cj1)*(x721)))+(((IkReal(-1.00000000000000))*(sj3)*(x716)*(x719)))+(((IkReal(-1.00000000000000))*(x716)*(x720)))+(((IkReal(-1.00000000000000))*(cj1)*(r02)*(x717))))))) < IKFAST_ATAN2_MAGTHRESH )
2371  continue;
2372 j2array[0]=IKatan2(((gconst1)*(((((IkReal(-1.00000000000000))*(cj3)*(x716)*(x718)))+(((IkReal(-1.00000000000000))*(x716)*(x721)))+(((r02)*(sj1)*(sj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x717)*(x719)))+(((IkReal(-1.00000000000000))*(cj1)*(x720)))+(((IkReal(-1.00000000000000))*(x717)*(x722)))))), ((gconst1)*(((((IkReal(-1.00000000000000))*(sj3)*(x716)*(x718)))+(((cj3)*(x722)))+(((cj1)*(x721)))+(((IkReal(-1.00000000000000))*(sj3)*(x716)*(x719)))+(((IkReal(-1.00000000000000))*(x716)*(x720)))+(((IkReal(-1.00000000000000))*(cj1)*(r02)*(x717)))))));
2373 sj2array[0]=IKsin(j2array[0]);
2374 cj2array[0]=IKcos(j2array[0]);
2375 if( j2array[0] > IKPI )
2376 {
2377  j2array[0]-=IK2PI;
2378 }
2379 else if( j2array[0] < -IKPI )
2380 { j2array[0]+=IK2PI;
2381 }
2382 j2valid[0] = true;
2383 for(int ij2 = 0; ij2 < 1; ++ij2)
2384 {
2385 if( !j2valid[ij2] )
2386 {
2387  continue;
2388 }
2389 _ij2[0] = ij2; _ij2[1] = -1;
2390 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
2391 {
2392 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
2393 {
2394  j2valid[iij2]=false; _ij2[1] = iij2; break;
2395 }
2396 }
2397 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
2398 {
2399 IkReal evalcond[8];
2400 IkReal x723=IKsin(j2);
2401 IkReal x724=IKcos(j2);
2402 IkReal x725=(py)*(py);
2403 IkReal x726=(px)*(px);
2404 IkReal x727=(pz)*(pz);
2405 IkReal x728=((sj0)*(sj1));
2406 IkReal x729=((py)*(r00));
2407 IkReal x730=((IkReal(0.190000000000000))*(cj1));
2408 IkReal x731=((cj0)*(r02));
2409 IkReal x732=((py)*(r01));
2410 IkReal x733=((r01)*(sj1));
2411 IkReal x734=((IkReal(0.190000000000000))*(px));
2412 IkReal x735=((cj1)*(r02));
2413 IkReal x736=((pz)*(r00));
2414 IkReal x737=((cj1)*(sj0));
2415 IkReal x738=((cj0)*(r00));
2416 IkReal x739=((IkReal(2.00000000000000))*(sj1));
2417 IkReal x740=((cj0)*(pz));
2418 IkReal x741=((IkReal(1.00000000000000))*(r01));
2419 IkReal x742=((cj1)*(px));
2420 IkReal x743=((IkReal(2.00000000000000))*(px));
2421 IkReal x744=((pp)*(sj1));
2422 IkReal x745=((r02)*(sj1));
2423 IkReal x746=((px)*(r02));
2424 IkReal x747=((IkReal(0.700000000000000))*(pz));
2425 IkReal x748=((cj0)*(px));
2426 IkReal x749=((r00)*(sj0));
2427 IkReal x750=((IkReal(1.00000000000000))*(px));
2428 IkReal x751=((cj0)*(r01));
2429 IkReal x752=((IkReal(1.00000000000000))*(cj1));
2430 IkReal x753=((IkReal(1.00000000000000))*(py));
2431 IkReal x754=((IkReal(0.700000000000000))*(px));
2432 IkReal x755=((IkReal(0.190000000000000))*(sj1));
2433 IkReal x756=((IkReal(0.298275000000000))*(sj3));
2434 IkReal x757=((cj1)*(pz));
2435 IkReal x758=((IkReal(0.0950000000000000))*(r01));
2436 IkReal x759=((IkReal(0.306725000000000))*(cj3)*(cj4));
2437 IkReal x760=((pz)*(x739));
2438 IkReal x761=((IkReal(0.550000000000000))*(x724));
2439 IkReal x762=((cj4)*(x724));
2440 IkReal x763=((IkReal(0.550000000000000))*(x723));
2441 IkReal x764=((IkReal(2.00000000000000))*(py)*(pz));
2442 IkReal x765=((IkReal(0.0650000000000000))*(cj3)*(sj4));
2443 IkReal x766=((IkReal(0.0650000000000000))*(x723));
2444 IkReal x767=((cj4)*(x723));
2445 IkReal x768=((IkReal(2.00000000000000))*(r01)*(x725));
2446 IkReal x769=((IkReal(0.0650000000000000))*(sj3)*(x724));
2447 evalcond[0]=((((sj1)*(x738)))+(x735)+(((cj3)*(x767)))+(((r01)*(x728)))+(((sj3)*(x762))));
2448 evalcond[1]=((IkReal(-0.350000000000000))+(((sj1)*(x748)))+(((py)*(x728)))+(x757)+(((sj3)*(x766)))+(((IkReal(-0.0650000000000000))*(cj3)*(x724)))+(((IkReal(-1.00000000000000))*(x761))));
2449 evalcond[2]=((((cj3)*(x762)))+(((IkReal(-1.00000000000000))*(sj3)*(x767)))+(((IkReal(-1.00000000000000))*(x738)*(x752)))+(x745)+(((IkReal(-1.00000000000000))*(x737)*(x741))));
2450 evalcond[3]=((((IkReal(-1.00000000000000))*(cj0)*(x742)))+(((pz)*(sj1)))+(x769)+(x763)+(((IkReal(-1.00000000000000))*(x737)*(x753)))+(((cj3)*(x766))));
2451 evalcond[4]=((((sj4)*(x769)))+(((IkReal(-1.00000000000000))*(sj1)*(x731)*(x753)))+(((x728)*(x746)))+(((x737)*(x758)))+(((x723)*(x765)))+(((IkReal(-1.00000000000000))*(x741)*(x742)))+(((cj1)*(x729)))+(((IkReal(0.0950000000000000))*(cj1)*(x738)))+(((IkReal(-1.00000000000000))*(x728)*(x736)))+(((sj4)*(x763)))+(((x733)*(x740)))+(((IkReal(-0.0950000000000000))*(x745))));
2452 evalcond[5]=((((cj1)*(py)*(x731)))+(((IkReal(-0.350000000000000))*(x749)))+(((IkReal(-1.00000000000000))*(sj0)*(x735)*(x750)))+(((IkReal(0.0950000000000000))*(x735)))+(((x736)*(x737)))+(((IkReal(0.350000000000000))*(x751)))+(((sj1)*(x729)))+(((x724)*(x765)))+(((IkReal(-1.00000000000000))*(cj1)*(x740)*(x741)))+(((IkReal(0.0950000000000000))*(sj1)*(x738)))+(((IkReal(-1.00000000000000))*(x733)*(x750)))+(((x728)*(x758)))+(((IkReal(-1.00000000000000))*(sj3)*(sj4)*(x766)))+(((sj4)*(x761))));
2453 evalcond[6]=((((x723)*(x759)))+(((sj0)*(x730)*(x736)))+(((pp)*(x735)))+(((IkReal(-1.00000000000000))*(r02)*(x728)*(x764)))+(((IkReal(-1.00000000000000))*(px)*(x731)*(x760)))+(((IkReal(-1.00000000000000))*(x728)*(x768)))+(((IkReal(-1.00000000000000))*(r01)*(x730)*(x740)))+(((IkReal(-1.00000000000000))*(sj0)*(x730)*(x746)))+(((IkReal(0.0715000000000000))*(x767)))+(((pp)*(r01)*(x728)))+(((py)*(x730)*(x731)))+(((IkReal(-2.00000000000000))*(x727)*(x735)))+(((IkReal(-1.00000000000000))*(x756)*(x762)))+(((r02)*(x747)))+(((IkReal(-1.00000000000000))*(x733)*(x734)))+(((IkReal(-1.00000000000000))*(x732)*(x739)*(x748)))+(((IkReal(-1.00000000000000))*(x726)*(x738)*(x739)))+(((IkReal(-0.113475000000000))*(x735)))+(((IkReal(-2.00000000000000))*(x732)*(x757)))+(((r00)*(x754)))+(((IkReal(-1.00000000000000))*(x728)*(x729)*(x743)))+(((IkReal(-0.0665000000000000))*(x749)))+(((IkReal(0.0665000000000000))*(x751)))+(((IkReal(-2.00000000000000))*(x736)*(x742)))+(((IkReal(-0.113475000000000))*(r01)*(x728)))+(((x738)*(x744)))+(((x729)*(x755)))+(((IkReal(-0.113475000000000))*(sj1)*(x738)))+(((IkReal(0.700000000000000))*(x732))));
2454 evalcond[7]=((((IkReal(2.00000000000000))*(pz)*(x731)*(x742)))+(((sj0)*(x735)*(x764)))+(((IkReal(0.190000000000000))*(x728)*(x736)))+(((x756)*(x767)))+(((IkReal(-1.00000000000000))*(pp)*(x738)*(x752)))+(((py)*(x731)*(x755)))+(((IkReal(-0.131525000000000))*(r01)*(x737)))+(((IkReal(-0.190000000000000))*(x733)*(x740)))+(((IkReal(2.00000000000000))*(cj0)*(x732)*(x742)))+(((IkReal(-0.131525000000000))*(cj1)*(x738)))+(((IkReal(0.700000000000000))*(cj0)*(x736)))+(((IkReal(-1.00000000000000))*(x732)*(x760)))+(((IkReal(-1.00000000000000))*(pp)*(x737)*(x741)))+(((IkReal(-1.00000000000000))*(x731)*(x754)))+(((r01)*(sj0)*(x747)))+(((IkReal(-1.00000000000000))*(r02)*(x728)*(x734)))+(((IkReal(-1.00000000000000))*(r02)*(x727)*(x739)))+(((IkReal(-1.00000000000000))*(x729)*(x730)))+(((px)*(r01)*(x730)))+(((IkReal(-1.00000000000000))*(px)*(x736)*(x739)))+(((IkReal(0.131525000000000))*(x745)))+(((r02)*(x744)))+(((IkReal(-0.700000000000000))*(py)*(r02)*(sj0)))+(((x737)*(x768)))+(((IkReal(0.0715000000000000))*(x762)))+(((x729)*(x737)*(x743)))+(((IkReal(2.00000000000000))*(cj1)*(x726)*(x738)))+(((x724)*(x759))));
2455 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
2456 {
2457 continue;
2458 }
2459 }
2460 
2461 {
2462 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
2463 vinfos[0].jointtype = 1;
2464 vinfos[0].foffset = j0;
2465 vinfos[0].indices[0] = _ij0[0];
2466 vinfos[0].indices[1] = _ij0[1];
2467 vinfos[0].maxsolutions = _nj0;
2468 vinfos[1].jointtype = 1;
2469 vinfos[1].foffset = j1;
2470 vinfos[1].indices[0] = _ij1[0];
2471 vinfos[1].indices[1] = _ij1[1];
2472 vinfos[1].maxsolutions = _nj1;
2473 vinfos[2].jointtype = 1;
2474 vinfos[2].foffset = j2;
2475 vinfos[2].indices[0] = _ij2[0];
2476 vinfos[2].indices[1] = _ij2[1];
2477 vinfos[2].maxsolutions = _nj2;
2478 vinfos[3].jointtype = 1;
2479 vinfos[3].foffset = j3;
2480 vinfos[3].indices[0] = _ij3[0];
2481 vinfos[3].indices[1] = _ij3[1];
2482 vinfos[3].maxsolutions = _nj3;
2483 vinfos[4].jointtype = 1;
2484 vinfos[4].foffset = j4;
2485 vinfos[4].indices[0] = _ij4[0];
2486 vinfos[4].indices[1] = _ij4[1];
2487 vinfos[4].maxsolutions = _nj4;
2488 std::vector<int> vfree(0);
2489 solutions.AddSolution(vinfos,vfree);
2490 }
2491 }
2492 }
2493 
2494 }
2495 
2496 }
2497 }
2498 }
2499 
2500 }
2501 
2502 }
2503 
2504 } else
2505 {
2506 {
2507 IkReal j3array[1], cj3array[1], sj3array[1];
2508 bool j3valid[1]={false};
2509 _nj3 = 1;
2510 IkReal x770=((IkReal(20.0000000000000))*(r02));
2511 IkReal x771=((IkReal(7.00000000000000))*(sj1));
2512 IkReal x772=((r01)*(sj0));
2513 IkReal x773=((cj0)*(r00));
2514 IkReal x774=((IkReal(20.0000000000000))*(pz));
2515 IkReal x775=((IkReal(7.00000000000000))*(cj1));
2516 if( IKabs(((gconst0)*(((((IkReal(-1.00000000000000))*(pz)*(x770)))+(((r02)*(x775)))+(((x771)*(x773)))+(((IkReal(-20.0000000000000))*(py)*(r01)))+(((x771)*(x772)))+(((IkReal(-1.90000000000000))*(cj0)*(r01)))+(((IkReal(-20.0000000000000))*(px)*(r00)))+(((IkReal(1.90000000000000))*(r00)*(sj0))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst0)*(((((IkReal(-1.00000000000000))*(py)*(sj0)*(x770)))+(((r02)*(x771)))+(((x772)*(x774)))+(((x773)*(x774)))+(((IkReal(-1.00000000000000))*(cj0)*(px)*(x770)))+(((IkReal(-1.00000000000000))*(x772)*(x775)))+(((IkReal(-1.00000000000000))*(x773)*(x775)))+(((IkReal(-1.30000000000000))*(cj4))))))) < IKFAST_ATAN2_MAGTHRESH )
2517  continue;
2518 j3array[0]=IKatan2(((gconst0)*(((((IkReal(-1.00000000000000))*(pz)*(x770)))+(((r02)*(x775)))+(((x771)*(x773)))+(((IkReal(-20.0000000000000))*(py)*(r01)))+(((x771)*(x772)))+(((IkReal(-1.90000000000000))*(cj0)*(r01)))+(((IkReal(-20.0000000000000))*(px)*(r00)))+(((IkReal(1.90000000000000))*(r00)*(sj0)))))), ((gconst0)*(((((IkReal(-1.00000000000000))*(py)*(sj0)*(x770)))+(((r02)*(x771)))+(((x772)*(x774)))+(((x773)*(x774)))+(((IkReal(-1.00000000000000))*(cj0)*(px)*(x770)))+(((IkReal(-1.00000000000000))*(x772)*(x775)))+(((IkReal(-1.00000000000000))*(x773)*(x775)))+(((IkReal(-1.30000000000000))*(cj4)))))));
2519 sj3array[0]=IKsin(j3array[0]);
2520 cj3array[0]=IKcos(j3array[0]);
2521 if( j3array[0] > IKPI )
2522 {
2523  j3array[0]-=IK2PI;
2524 }
2525 else if( j3array[0] < -IKPI )
2526 { j3array[0]+=IK2PI;
2527 }
2528 j3valid[0] = true;
2529 for(int ij3 = 0; ij3 < 1; ++ij3)
2530 {
2531 if( !j3valid[ij3] )
2532 {
2533  continue;
2534 }
2535 _ij3[0] = ij3; _ij3[1] = -1;
2536 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
2537 {
2538 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
2539 {
2540  j3valid[iij3]=false; _ij3[1] = iij3; break;
2541 }
2542 }
2543 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
2544 {
2545 IkReal evalcond[4];
2546 IkReal x776=IKcos(j3);
2547 IkReal x777=((r01)*(sj1));
2548 IkReal x778=((IkReal(0.350000000000000))*(sj0));
2549 IkReal x779=((cj0)*(r00));
2550 IkReal x780=((IkReal(0.350000000000000))*(cj1));
2551 IkReal x781=((px)*(r02));
2552 IkReal x782=((IkReal(1.00000000000000))*(cj0));
2553 IkReal x783=((IkReal(0.190000000000000))*(px));
2554 IkReal x784=((cj0)*(r01));
2555 IkReal x785=((r00)*(sj0));
2556 IkReal x786=((IkReal(0.700000000000000))*(sj1));
2557 IkReal x787=((IkReal(0.550000000000000))*(cj4));
2558 IkReal x788=((IkReal(0.700000000000000))*(cj1));
2559 IkReal x789=((py)*(sj0));
2560 IkReal x790=((IkReal(1.00000000000000))*(r02));
2561 IkReal x791=((cj0)*(py));
2562 IkReal x792=((IkReal(2.00000000000000))*(px));
2563 IkReal x793=((pz)*(sj0));
2564 IkReal x794=((pz)*(r02));
2565 IkReal x795=((IkReal(0.350000000000000))*(sj1));
2566 IkReal x796=((py)*(r01));
2567 IkReal x797=((IkReal(0.0715000000000000))*(x776));
2568 evalcond[0]=((IkReal(0.175200000000000))+(((IkReal(-0.190000000000000))*(x791)))+(((pz)*(x788)))+(((IkReal(-1.00000000000000))*(pp)))+(x797)+(((cj0)*(px)*(x786)))+(((sj0)*(x783)))+(((x786)*(x789))));
2569 evalcond[1]=((((r02)*(x780)))+(((x779)*(x795)))+(((x777)*(x778)))+(((IkReal(-1.00000000000000))*(x787)*(IKsin(j3))))+(((IkReal(0.0950000000000000))*(x785)))+(((IkReal(-1.00000000000000))*(pz)*(x790)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((IkReal(-0.0950000000000000))*(x784)))+(((IkReal(-1.00000000000000))*(x796))));
2570 evalcond[2]=((((IkReal(-1.00000000000000))*(x789)*(x790)))+(((r02)*(x795)))+(((IkReal(-1.00000000000000))*(x781)*(x782)))+(((IkReal(-1.00000000000000))*(x779)*(x780)))+(((IkReal(-0.0650000000000000))*(cj4)))+(((IkReal(-1.00000000000000))*(x776)*(x787)))+(((pz)*(x779)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x778)))+(((r01)*(x793))));
2571 evalcond[3]=((((sj0)*(x781)*(x788)))+(((IkReal(-1.00000000000000))*(pp)*(r01)*(x782)))+(((IkReal(0.306725000000000))*(sj4)))+(((IkReal(-1.00000000000000))*(r01)*(x789)*(x792)))+(((IkReal(0.700000000000000))*(px)*(x777)))+(((py)*(x779)*(x792)))+(((IkReal(2.00000000000000))*(x784)*((py)*(py))))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x786)))+(((IkReal(-1.00000000000000))*(px)*(x785)*(x792)))+(((pz)*(x784)*(x788)))+(((pp)*(x785)))+(((sj4)*(x797)))+(((r00)*(x783)))+(((IkReal(0.113475000000000))*(x785)))+(((IkReal(-1.00000000000000))*(pz)*(x785)*(x788)))+(((IkReal(-0.0665000000000000))*(sj1)*(x779)))+(((IkReal(-1.00000000000000))*(r02)*(x788)*(x791)))+(((IkReal(-0.0665000000000000))*(cj1)*(r02)))+(((IkReal(-0.113475000000000))*(x784)))+(((IkReal(-2.00000000000000))*(x781)*(x793)))+(((IkReal(0.190000000000000))*(x794)))+(((IkReal(-0.0665000000000000))*(sj0)*(x777)))+(((IkReal(0.190000000000000))*(x796)))+(((IkReal(2.00000000000000))*(x791)*(x794))));
2572 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
2573 {
2574 continue;
2575 }
2576 }
2577 
2578 {
2579 IkReal dummyeval[1];
2580 IkReal gconst1;
2581 gconst1=IKsign(((((cj4)*((cj3)*(cj3))))+(((cj4)*((sj3)*(sj3))))));
2582 dummyeval[0]=((((cj4)*((cj3)*(cj3))))+(((cj4)*((sj3)*(sj3)))));
2583 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
2584 {
2585 {
2586 IkReal dummyeval[1];
2587 IkReal gconst2;
2588 IkReal x798=((IkReal(13.0000000000000))*(cj4));
2589 gconst2=IKsign(((((IkReal(-1.00000000000000))*(x798)*((sj3)*(sj3))))+(((IkReal(-1.00000000000000))*(x798)*((cj3)*(cj3))))+(((IkReal(-110.000000000000))*(cj3)*(cj4)))));
2590 IkReal x799=((IkReal(1.00000000000000))*(cj4));
2591 dummyeval[0]=((((IkReal(-1.00000000000000))*(x799)*((cj3)*(cj3))))+(((IkReal(-8.46153846153846))*(cj3)*(cj4)))+(((IkReal(-1.00000000000000))*(x799)*((sj3)*(sj3)))));
2592 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
2593 {
2594 {
2595 IkReal evalcond[11];
2596 IkReal x800=((IkReal(0.0715000000000000))*(cj3));
2597 IkReal x801=(py)*(py);
2598 IkReal x802=(px)*(px);
2599 IkReal x803=(pz)*(pz);
2600 IkReal x804=((r01)*(sj0));
2601 IkReal x805=((px)*(sj0));
2602 IkReal x806=((cj1)*(r00));
2603 IkReal x807=((IkReal(0.350000000000000))*(cj0));
2604 IkReal x808=((IkReal(0.113475000000000))*(sj1));
2605 IkReal x809=((r01)*(sj1));
2606 IkReal x810=((IkReal(2.00000000000000))*(pz));
2607 IkReal x811=((IkReal(0.190000000000000))*(px));
2608 IkReal x812=((py)*(sj0));
2609 IkReal x813=((IkReal(1.00000000000000))*(r02));
2610 IkReal x814=((IkReal(0.190000000000000))*(py));
2611 IkReal x815=((cj0)*(sj1));
2612 IkReal x816=((px)*(r02));
2613 IkReal x817=((px)*(r00));
2614 IkReal x818=((r02)*(sj1));
2615 IkReal x819=((IkReal(2.00000000000000))*(py));
2616 IkReal x820=((pp)*(r00));
2617 IkReal x821=((cj0)*(r01));
2618 IkReal x822=((IkReal(0.700000000000000))*(sj1));
2619 IkReal x823=((IkReal(0.190000000000000))*(pz));
2620 IkReal x824=((cj1)*(r01));
2621 IkReal x825=((cj0)*(r00));
2622 IkReal x826=((IkReal(0.700000000000000))*(pz));
2623 IkReal x827=((cj0)*(px));
2624 IkReal x828=((r00)*(sj0));
2625 IkReal x829=((cj1)*(r02));
2626 IkReal x830=((IkReal(1.00000000000000))*(pp));
2627 IkReal x831=((IkReal(1.00000000000000))*(py));
2628 IkReal x832=((IkReal(0.700000000000000))*(cj0));
2629 IkReal x833=((r00)*(sj1));
2630 IkReal x834=((IkReal(0.700000000000000))*(px));
2631 IkReal x835=((cj0)*(cj1));
2632 IkReal x836=((cj1)*(x830));
2633 IkReal x837=((IkReal(2.00000000000000))*(x803));
2634 IkReal x838=((IkReal(2.00000000000000))*(x801));
2635 IkReal x839=((IkReal(2.00000000000000))*(r00)*(x802));
2636 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.57079632679490))+(j4)), IkReal(6.28318530717959))));
2637 evalcond[1]=((IkReal(-0.0950000000000000))+(x805)+(((IkReal(-1.00000000000000))*(cj0)*(x831))));
2638 evalcond[2]=((IkReal(1.00000000000000))+(x828)+(((IkReal(-1.00000000000000))*(x821))));
2639 evalcond[3]=((x829)+(((r00)*(x815)))+(((sj1)*(x804))));
2640 evalcond[4]=((((IkReal(-1.00000000000000))*(cj0)*(x806)))+(((IkReal(-1.00000000000000))*(cj1)*(x804)))+(x818));
2641 evalcond[5]=((IkReal(0.175200000000000))+(x800)+(((IkReal(-1.00000000000000))*(x830)))+(((IkReal(-1.00000000000000))*(cj0)*(x814)))+(((x815)*(x834)))+(((cj1)*(x826)))+(((x812)*(x822)))+(((IkReal(0.190000000000000))*(x805))));
2642 evalcond[6]=((((IkReal(-1.00000000000000))*(pz)*(x813)))+(((IkReal(0.350000000000000))*(sj1)*(x804)))+(((IkReal(-1.00000000000000))*(x817)))+(((IkReal(-1.00000000000000))*(r01)*(x831)))+(((IkReal(0.350000000000000))*(x829)))+(((IkReal(-0.0950000000000000))*(x821)))+(((IkReal(0.0950000000000000))*(x828)))+(((x807)*(x833))));
2643 evalcond[7]=((((IkReal(-1.00000000000000))*(x806)*(x807)))+(((IkReal(-1.00000000000000))*(x813)*(x827)))+(((IkReal(-0.350000000000000))*(cj1)*(x804)))+(((IkReal(-1.00000000000000))*(x812)*(x813)))+(((IkReal(0.350000000000000))*(x818)))+(((pz)*(x825)))+(((pz)*(x804))));
2644 evalcond[8]=((IkReal(0.306725000000000))+(((cj1)*(x821)*(x826)))+(((r02)*(x823)))+(x800)+(((IkReal(-1.00000000000000))*(py)*(x829)*(x832)))+(((IkReal(-1.00000000000000))*(r02)*(x805)*(x810)))+(((cj0)*(py)*(r02)*(x810)))+(((IkReal(0.700000000000000))*(x805)*(x829)))+(((cj0)*(x817)*(x819)))+(((r00)*(x811)))+(((r01)*(x814)))+(((IkReal(-0.0665000000000000))*(r00)*(x815)))+(((sj0)*(x820)))+(((IkReal(0.113475000000000))*(x828)))+(((IkReal(-0.0665000000000000))*(x829)))+(((x809)*(x834)))+(((IkReal(-1.00000000000000))*(x821)*(x830)))+(((IkReal(-1.00000000000000))*(sj0)*(x806)*(x826)))+(((IkReal(-2.00000000000000))*(x802)*(x828)))+(((IkReal(-0.113475000000000))*(x821)))+(((x821)*(x838)))+(((IkReal(-0.0665000000000000))*(sj1)*(x804)))+(((IkReal(-1.00000000000000))*(px)*(x804)*(x819)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x822))));
2645 evalcond[9]=((((pp)*(sj1)*(x804)))+(((sj0)*(x806)*(x823)))+(((r02)*(x826)))+(((IkReal(-1.00000000000000))*(cj1)*(x821)*(x823)))+(((IkReal(-1.00000000000000))*(x810)*(x812)*(x818)))+(((IkReal(-1.00000000000000))*(x815)*(x839)))+(((IkReal(-1.00000000000000))*(x829)*(x837)))+(((pp)*(x829)))+(((x815)*(x820)))+(((IkReal(0.0665000000000000))*(x821)))+(((IkReal(-0.190000000000000))*(x805)*(x829)))+(((IkReal(-1.00000000000000))*(x810)*(x815)*(x816)))+(((cj0)*(x814)*(x829)))+(((IkReal(-1.00000000000000))*(x809)*(x819)*(x827)))+(((IkReal(-1.00000000000000))*(x804)*(x808)))+(((IkReal(0.700000000000000))*(x817)))+(((IkReal(0.700000000000000))*(py)*(r01)))+(((x814)*(x833)))+(((IkReal(-0.0665000000000000))*(x828)))+(((IkReal(-1.00000000000000))*(sj1)*(x804)*(x838)))+(((IkReal(-1.00000000000000))*(py)*(x810)*(x824)))+(((IkReal(-1.00000000000000))*(x809)*(x811)))+(((IkReal(-1.00000000000000))*(x808)*(x825)))+(((IkReal(-1.00000000000000))*(x805)*(x819)*(x833)))+(((IkReal(-0.113475000000000))*(x829)))+(((IkReal(-1.00000000000000))*(px)*(x806)*(x810))));
2646 evalcond[10]=((((x825)*(x826)))+(((IkReal(-1.00000000000000))*(sj1)*(x810)*(x817)))+(((IkReal(-0.131525000000000))*(cj0)*(x806)))+(((pp)*(x818)))+(((cj1)*(px)*(x819)*(x821)))+(((x805)*(x806)*(x819)))+(((sj1)*(x823)*(x828)))+(((x811)*(x824)))+(((IkReal(0.131525000000000))*(x818)))+(((IkReal(-0.190000000000000))*(x805)*(x818)))+(((IkReal(-0.700000000000000))*(r02)*(x812)))+(((IkReal(-1.00000000000000))*(x804)*(x836)))+(((IkReal(-1.00000000000000))*(x806)*(x814)))+(((IkReal(-1.00000000000000))*(py)*(x809)*(x810)))+(((cj1)*(x804)*(x838)))+(((IkReal(-0.131525000000000))*(cj1)*(x804)))+(((x810)*(x816)*(x835)))+(((IkReal(-1.00000000000000))*(x818)*(x837)))+(((r02)*(x814)*(x815)))+(((IkReal(-1.00000000000000))*(x816)*(x832)))+(((IkReal(2.00000000000000))*(cj0)*(x802)*(x806)))+(((x804)*(x826)))+(((IkReal(-1.00000000000000))*(cj0)*(x806)*(x830)))+(((IkReal(-1.00000000000000))*(cj0)*(x809)*(x823)))+(((x810)*(x812)*(x829))));
2647 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 && IKabs(evalcond[9]) < 0.0000010000000000 && IKabs(evalcond[10]) < 0.0000010000000000 )
2648 {
2649 {
2650 IkReal dummyeval[1];
2651 IkReal gconst3;
2652 gconst3=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
2653 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
2654 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
2655 {
2656 {
2657 IkReal dummyeval[1];
2658 IkReal gconst4;
2659 gconst4=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
2660 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
2661 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
2662 {
2663 continue;
2664 
2665 } else
2666 {
2667 {
2668 IkReal j2array[1], cj2array[1], sj2array[1];
2669 bool j2valid[1]={false};
2670 _nj2 = 1;
2671 IkReal x840=((cj1)*(cj3));
2672 IkReal x841=((sj0)*(sj1));
2673 IkReal x842=((IkReal(22000.0000000000))*(pz));
2674 IkReal x843=((IkReal(2600.00000000000))*(pz));
2675 IkReal x844=((r02)*(sj1));
2676 IkReal x845=((cj1)*(sj3));
2677 IkReal x846=((cj1)*(r00));
2678 IkReal x847=((r01)*(sj0));
2679 IkReal x848=((cj0)*(sj1));
2680 IkReal x849=((IkReal(2600.00000000000))*(px));
2681 IkReal x850=((IkReal(22000.0000000000))*(px));
2682 IkReal x851=((IkReal(22000.0000000000))*(py));
2683 IkReal x852=((IkReal(2600.00000000000))*(py));
2684 IkReal x853=((IkReal(247.000000000000))*(cj0)*(r00));
2685 IkReal x854=((sj3)*(x852));
2686 IkReal x855=((IkReal(2600.00000000000))*(sj3)*(x848));
2687 if( IKabs(((gconst4)*(((((r02)*(x841)*(x850)))+(((x843)*(x845)))+(((r01)*(x842)*(x848)))+(((IkReal(-1.00000000000000))*(r01)*(x840)*(x849)))+(((IkReal(-247.000000000000))*(cj3)*(x844)))+(((IkReal(-1.00000000000000))*(r00)*(x841)*(x842)))+(((sj3)*(x848)*(x849)))+(((IkReal(2090.00000000000))*(cj1)*(x847)))+(((cj3)*(r02)*(x841)*(x849)))+(((IkReal(2090.00000000000))*(cj0)*(x846)))+(((IkReal(247.000000000000))*(x840)*(x847)))+(((r00)*(x840)*(x852)))+(((IkReal(-2090.00000000000))*(x844)))+(((IkReal(-1.00000000000000))*(cj0)*(cj3)*(x844)*(x852)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x850)))+(((cj3)*(r01)*(x843)*(x848)))+(((x846)*(x851)))+(((IkReal(-910.000000000000))*(sj3)))+(((x840)*(x853)))+(((IkReal(-1.00000000000000))*(cj0)*(x844)*(x851)))+(((IkReal(-1.00000000000000))*(cj3)*(r00)*(x841)*(x843)))+(((x841)*(x854))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst4)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(cj0)*(x844)*(x854)))+(((r00)*(x845)*(x852)))+(((IkReal(-1.00000000000000))*(cj3)*(x841)*(x852)))+(((IkReal(-1.00000000000000))*(r00)*(sj3)*(x841)*(x843)))+(((IkReal(-1.00000000000000))*(cj3)*(x848)*(x849)))+(((IkReal(-1.00000000000000))*(cj1)*(x842)))+(((IkReal(-1.00000000000000))*(x840)*(x843)))+(((r02)*(sj3)*(x841)*(x849)))+(((IkReal(-1.00000000000000))*(x841)*(x851)))+(((x845)*(x853)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(247.000000000000))*(x845)*(x847)))+(((IkReal(-1.00000000000000))*(r01)*(x845)*(x849)))+(((r01)*(sj3)*(x843)*(x848)))+(((IkReal(-1.00000000000000))*(x848)*(x850)))+(((IkReal(-247.000000000000))*(sj3)*(x844))))))) < IKFAST_ATAN2_MAGTHRESH )
2688  continue;
2689 j2array[0]=IKatan2(((gconst4)*(((((r02)*(x841)*(x850)))+(((x843)*(x845)))+(((r01)*(x842)*(x848)))+(((IkReal(-1.00000000000000))*(r01)*(x840)*(x849)))+(((IkReal(-247.000000000000))*(cj3)*(x844)))+(((IkReal(-1.00000000000000))*(r00)*(x841)*(x842)))+(((sj3)*(x848)*(x849)))+(((IkReal(2090.00000000000))*(cj1)*(x847)))+(((cj3)*(r02)*(x841)*(x849)))+(((IkReal(2090.00000000000))*(cj0)*(x846)))+(((IkReal(247.000000000000))*(x840)*(x847)))+(((r00)*(x840)*(x852)))+(((IkReal(-2090.00000000000))*(x844)))+(((IkReal(-1.00000000000000))*(cj0)*(cj3)*(x844)*(x852)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x850)))+(((cj3)*(r01)*(x843)*(x848)))+(((x846)*(x851)))+(((IkReal(-910.000000000000))*(sj3)))+(((x840)*(x853)))+(((IkReal(-1.00000000000000))*(cj0)*(x844)*(x851)))+(((IkReal(-1.00000000000000))*(cj3)*(r00)*(x841)*(x843)))+(((x841)*(x854)))))), ((gconst4)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(cj0)*(x844)*(x854)))+(((r00)*(x845)*(x852)))+(((IkReal(-1.00000000000000))*(cj3)*(x841)*(x852)))+(((IkReal(-1.00000000000000))*(r00)*(sj3)*(x841)*(x843)))+(((IkReal(-1.00000000000000))*(cj3)*(x848)*(x849)))+(((IkReal(-1.00000000000000))*(cj1)*(x842)))+(((IkReal(-1.00000000000000))*(x840)*(x843)))+(((r02)*(sj3)*(x841)*(x849)))+(((IkReal(-1.00000000000000))*(x841)*(x851)))+(((x845)*(x853)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(247.000000000000))*(x845)*(x847)))+(((IkReal(-1.00000000000000))*(r01)*(x845)*(x849)))+(((r01)*(sj3)*(x843)*(x848)))+(((IkReal(-1.00000000000000))*(x848)*(x850)))+(((IkReal(-247.000000000000))*(sj3)*(x844)))))));
2690 sj2array[0]=IKsin(j2array[0]);
2691 cj2array[0]=IKcos(j2array[0]);
2692 if( j2array[0] > IKPI )
2693 {
2694  j2array[0]-=IK2PI;
2695 }
2696 else if( j2array[0] < -IKPI )
2697 { j2array[0]+=IK2PI;
2698 }
2699 j2valid[0] = true;
2700 for(int ij2 = 0; ij2 < 1; ++ij2)
2701 {
2702 if( !j2valid[ij2] )
2703 {
2704  continue;
2705 }
2706 _ij2[0] = ij2; _ij2[1] = -1;
2707 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
2708 {
2709 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
2710 {
2711  j2valid[iij2]=false; _ij2[1] = iij2; break;
2712 }
2713 }
2714 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
2715 {
2716 IkReal evalcond[4];
2717 IkReal x856=IKcos(j2);
2718 IkReal x857=IKsin(j2);
2719 IkReal x858=((px)*(sj1));
2720 IkReal x859=((py)*(sj1));
2721 IkReal x860=((cj1)*(sj0));
2722 IkReal x861=((IkReal(1.00000000000000))*(px));
2723 IkReal x862=((r00)*(sj0));
2724 IkReal x863=((IkReal(0.0950000000000000))*(r01));
2725 IkReal x864=((IkReal(0.0650000000000000))*(cj3));
2726 IkReal x865=((cj0)*(r01));
2727 IkReal x866=((IkReal(0.0950000000000000))*(cj1));
2728 IkReal x867=((pz)*(sj1));
2729 IkReal x868=((cj0)*(r00));
2730 IkReal x869=((IkReal(0.0950000000000000))*(sj1));
2731 IkReal x870=((cj0)*(cj1));
2732 IkReal x871=((cj1)*(pz));
2733 IkReal x872=((IkReal(0.0650000000000000))*(sj3));
2734 IkReal x873=((IkReal(0.550000000000000))*(x857));
2735 IkReal x874=((IkReal(0.550000000000000))*(x856));
2736 IkReal x875=((x857)*(x864));
2737 IkReal x876=((x856)*(x872));
2738 IkReal x877=((x856)*(x864));
2739 IkReal x878=((x857)*(x872));
2740 IkReal x879=((x874)+(x877));
2741 IkReal x880=((x873)+(x875)+(x876));
2742 evalcond[0]=((IkReal(-0.350000000000000))+(((sj0)*(x859)))+(((cj0)*(x858)))+(x878)+(x871)+(((IkReal(-1.00000000000000))*(x879))));
2743 evalcond[1]=((x880)+(((IkReal(-1.00000000000000))*(py)*(x860)))+(((IkReal(-1.00000000000000))*(x861)*(x870)))+(x867));
2744 evalcond[2]=((x880)+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x861)))+(((x860)*(x863)))+(((IkReal(-1.00000000000000))*(x862)*(x867)))+(((cj1)*(py)*(r00)))+(((x866)*(x868)))+(((x865)*(x867)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x859)))+(((r02)*(sj0)*(x858)))+(((IkReal(-1.00000000000000))*(r02)*(x869))));
2745 evalcond[3]=((((IkReal(-1.00000000000000))*(x865)*(x871)))+(((IkReal(-0.350000000000000))*(x862)))+(((IkReal(-1.00000000000000))*(r01)*(x858)))+(((IkReal(-1.00000000000000))*(r02)*(x860)*(x861)))+(((sj0)*(sj1)*(x863)))+(((x868)*(x869)))+(((IkReal(0.350000000000000))*(x865)))+(((r00)*(x859)))+(((IkReal(-1.00000000000000))*(x878)))+(x879)+(((pz)*(r00)*(x860)))+(((r02)*(x866)))+(((py)*(r02)*(x870))));
2746 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
2747 {
2748 continue;
2749 }
2750 }
2751 
2752 {
2753 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
2754 vinfos[0].jointtype = 1;
2755 vinfos[0].foffset = j0;
2756 vinfos[0].indices[0] = _ij0[0];
2757 vinfos[0].indices[1] = _ij0[1];
2758 vinfos[0].maxsolutions = _nj0;
2759 vinfos[1].jointtype = 1;
2760 vinfos[1].foffset = j1;
2761 vinfos[1].indices[0] = _ij1[0];
2762 vinfos[1].indices[1] = _ij1[1];
2763 vinfos[1].maxsolutions = _nj1;
2764 vinfos[2].jointtype = 1;
2765 vinfos[2].foffset = j2;
2766 vinfos[2].indices[0] = _ij2[0];
2767 vinfos[2].indices[1] = _ij2[1];
2768 vinfos[2].maxsolutions = _nj2;
2769 vinfos[3].jointtype = 1;
2770 vinfos[3].foffset = j3;
2771 vinfos[3].indices[0] = _ij3[0];
2772 vinfos[3].indices[1] = _ij3[1];
2773 vinfos[3].maxsolutions = _nj3;
2774 vinfos[4].jointtype = 1;
2775 vinfos[4].foffset = j4;
2776 vinfos[4].indices[0] = _ij4[0];
2777 vinfos[4].indices[1] = _ij4[1];
2778 vinfos[4].maxsolutions = _nj4;
2779 std::vector<int> vfree(0);
2780 solutions.AddSolution(vinfos,vfree);
2781 }
2782 }
2783 }
2784 
2785 }
2786 
2787 }
2788 
2789 } else
2790 {
2791 {
2792 IkReal j2array[1], cj2array[1], sj2array[1];
2793 bool j2valid[1]={false};
2794 _nj2 = 1;
2795 IkReal x881=((IkReal(2600.00000000000))*(sj3));
2796 IkReal x882=((py)*(sj0));
2797 IkReal x883=((pz)*(sj1));
2798 IkReal x884=((IkReal(2600.00000000000))*(cj3));
2799 IkReal x885=((cj1)*(pz));
2800 IkReal x886=((IkReal(22000.0000000000))*(cj1));
2801 IkReal x887=((cj0)*(px));
2802 IkReal x888=((sj1)*(x887));
2803 if( IKabs(((gconst3)*(((((IkReal(-1.00000000000000))*(x882)*(x886)))+(((IkReal(-1.00000000000000))*(cj1)*(x884)*(x887)))+(((IkReal(22000.0000000000))*(x883)))+(((sj1)*(x881)*(x882)))+(((IkReal(-1.00000000000000))*(cj1)*(x882)*(x884)))+(((IkReal(-1.00000000000000))*(x886)*(x887)))+(((IkReal(-910.000000000000))*(sj3)))+(((x881)*(x885)))+(((x881)*(x888)))+(((x883)*(x884))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst3)*(((IkReal(7700.00000000000))+(((IkReal(-22000.0000000000))*(x885)))+(((IkReal(-1.00000000000000))*(x884)*(x885)))+(((x881)*(x883)))+(((IkReal(-1.00000000000000))*(sj1)*(x882)*(x884)))+(((IkReal(-22000.0000000000))*(sj1)*(x882)))+(((IkReal(-1.00000000000000))*(x884)*(x888)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-22000.0000000000))*(x888)))+(((IkReal(-1.00000000000000))*(cj1)*(x881)*(x887)))+(((IkReal(-1.00000000000000))*(cj1)*(x881)*(x882))))))) < IKFAST_ATAN2_MAGTHRESH )
2804  continue;
2805 j2array[0]=IKatan2(((gconst3)*(((((IkReal(-1.00000000000000))*(x882)*(x886)))+(((IkReal(-1.00000000000000))*(cj1)*(x884)*(x887)))+(((IkReal(22000.0000000000))*(x883)))+(((sj1)*(x881)*(x882)))+(((IkReal(-1.00000000000000))*(cj1)*(x882)*(x884)))+(((IkReal(-1.00000000000000))*(x886)*(x887)))+(((IkReal(-910.000000000000))*(sj3)))+(((x881)*(x885)))+(((x881)*(x888)))+(((x883)*(x884)))))), ((gconst3)*(((IkReal(7700.00000000000))+(((IkReal(-22000.0000000000))*(x885)))+(((IkReal(-1.00000000000000))*(x884)*(x885)))+(((x881)*(x883)))+(((IkReal(-1.00000000000000))*(sj1)*(x882)*(x884)))+(((IkReal(-22000.0000000000))*(sj1)*(x882)))+(((IkReal(-1.00000000000000))*(x884)*(x888)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-22000.0000000000))*(x888)))+(((IkReal(-1.00000000000000))*(cj1)*(x881)*(x887)))+(((IkReal(-1.00000000000000))*(cj1)*(x881)*(x882)))))));
2806 sj2array[0]=IKsin(j2array[0]);
2807 cj2array[0]=IKcos(j2array[0]);
2808 if( j2array[0] > IKPI )
2809 {
2810  j2array[0]-=IK2PI;
2811 }
2812 else if( j2array[0] < -IKPI )
2813 { j2array[0]+=IK2PI;
2814 }
2815 j2valid[0] = true;
2816 for(int ij2 = 0; ij2 < 1; ++ij2)
2817 {
2818 if( !j2valid[ij2] )
2819 {
2820  continue;
2821 }
2822 _ij2[0] = ij2; _ij2[1] = -1;
2823 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
2824 {
2825 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
2826 {
2827  j2valid[iij2]=false; _ij2[1] = iij2; break;
2828 }
2829 }
2830 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
2831 {
2832 IkReal evalcond[4];
2833 IkReal x889=IKcos(j2);
2834 IkReal x890=IKsin(j2);
2835 IkReal x891=((px)*(sj1));
2836 IkReal x892=((py)*(sj1));
2837 IkReal x893=((cj1)*(sj0));
2838 IkReal x894=((IkReal(1.00000000000000))*(px));
2839 IkReal x895=((r00)*(sj0));
2840 IkReal x896=((IkReal(0.0950000000000000))*(r01));
2841 IkReal x897=((IkReal(0.0650000000000000))*(cj3));
2842 IkReal x898=((cj0)*(r01));
2843 IkReal x899=((IkReal(0.0950000000000000))*(cj1));
2844 IkReal x900=((pz)*(sj1));
2845 IkReal x901=((cj0)*(r00));
2846 IkReal x902=((IkReal(0.0950000000000000))*(sj1));
2847 IkReal x903=((cj0)*(cj1));
2848 IkReal x904=((cj1)*(pz));
2849 IkReal x905=((IkReal(0.0650000000000000))*(sj3));
2850 IkReal x906=((IkReal(0.550000000000000))*(x890));
2851 IkReal x907=((IkReal(0.550000000000000))*(x889));
2852 IkReal x908=((x890)*(x897));
2853 IkReal x909=((x889)*(x905));
2854 IkReal x910=((x889)*(x897));
2855 IkReal x911=((x890)*(x905));
2856 IkReal x912=((x907)+(x910));
2857 IkReal x913=((x906)+(x908)+(x909));
2858 evalcond[0]=((IkReal(-0.350000000000000))+(((IkReal(-1.00000000000000))*(x912)))+(x904)+(((cj0)*(x891)))+(x911)+(((sj0)*(x892))));
2859 evalcond[1]=((((IkReal(-1.00000000000000))*(py)*(x893)))+(x900)+(((IkReal(-1.00000000000000))*(x894)*(x903)))+(x913));
2860 evalcond[2]=((((x893)*(x896)))+(((cj1)*(py)*(r00)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x894)))+(((r02)*(sj0)*(x891)))+(((IkReal(-1.00000000000000))*(x895)*(x900)))+(((IkReal(-1.00000000000000))*(r02)*(x902)))+(x913)+(((x898)*(x900)))+(((x899)*(x901)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x892))));
2861 evalcond[3]=((((sj0)*(sj1)*(x896)))+(((IkReal(0.350000000000000))*(x898)))+(((x901)*(x902)))+(((IkReal(-1.00000000000000))*(x911)))+(((IkReal(-1.00000000000000))*(r01)*(x891)))+(((r02)*(x899)))+(((pz)*(r00)*(x893)))+(((r00)*(x892)))+(x912)+(((IkReal(-0.350000000000000))*(x895)))+(((IkReal(-1.00000000000000))*(x898)*(x904)))+(((IkReal(-1.00000000000000))*(r02)*(x893)*(x894)))+(((py)*(r02)*(x903))));
2862 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
2863 {
2864 continue;
2865 }
2866 }
2867 
2868 {
2869 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
2870 vinfos[0].jointtype = 1;
2871 vinfos[0].foffset = j0;
2872 vinfos[0].indices[0] = _ij0[0];
2873 vinfos[0].indices[1] = _ij0[1];
2874 vinfos[0].maxsolutions = _nj0;
2875 vinfos[1].jointtype = 1;
2876 vinfos[1].foffset = j1;
2877 vinfos[1].indices[0] = _ij1[0];
2878 vinfos[1].indices[1] = _ij1[1];
2879 vinfos[1].maxsolutions = _nj1;
2880 vinfos[2].jointtype = 1;
2881 vinfos[2].foffset = j2;
2882 vinfos[2].indices[0] = _ij2[0];
2883 vinfos[2].indices[1] = _ij2[1];
2884 vinfos[2].maxsolutions = _nj2;
2885 vinfos[3].jointtype = 1;
2886 vinfos[3].foffset = j3;
2887 vinfos[3].indices[0] = _ij3[0];
2888 vinfos[3].indices[1] = _ij3[1];
2889 vinfos[3].maxsolutions = _nj3;
2890 vinfos[4].jointtype = 1;
2891 vinfos[4].foffset = j4;
2892 vinfos[4].indices[0] = _ij4[0];
2893 vinfos[4].indices[1] = _ij4[1];
2894 vinfos[4].maxsolutions = _nj4;
2895 std::vector<int> vfree(0);
2896 solutions.AddSolution(vinfos,vfree);
2897 }
2898 }
2899 }
2900 
2901 }
2902 
2903 }
2904 
2905 } else
2906 {
2907 IkReal x914=((IkReal(0.0715000000000000))*(cj3));
2908 IkReal x915=(py)*(py);
2909 IkReal x916=(px)*(px);
2910 IkReal x917=(pz)*(pz);
2911 IkReal x918=((r01)*(sj0));
2912 IkReal x919=((px)*(sj0));
2913 IkReal x920=((cj1)*(r00));
2914 IkReal x921=((IkReal(0.350000000000000))*(cj0));
2915 IkReal x922=((IkReal(0.113475000000000))*(sj1));
2916 IkReal x923=((r01)*(sj1));
2917 IkReal x924=((IkReal(2.00000000000000))*(pz));
2918 IkReal x925=((IkReal(0.190000000000000))*(px));
2919 IkReal x926=((py)*(sj0));
2920 IkReal x927=((IkReal(1.00000000000000))*(r02));
2921 IkReal x928=((IkReal(0.190000000000000))*(py));
2922 IkReal x929=((cj0)*(sj1));
2923 IkReal x930=((px)*(r02));
2924 IkReal x931=((px)*(r00));
2925 IkReal x932=((r02)*(sj1));
2926 IkReal x933=((IkReal(2.00000000000000))*(py));
2927 IkReal x934=((pp)*(r00));
2928 IkReal x935=((cj0)*(r01));
2929 IkReal x936=((IkReal(0.700000000000000))*(sj1));
2930 IkReal x937=((IkReal(0.190000000000000))*(pz));
2931 IkReal x938=((cj1)*(r01));
2932 IkReal x939=((cj0)*(r00));
2933 IkReal x940=((IkReal(0.700000000000000))*(pz));
2934 IkReal x941=((cj0)*(px));
2935 IkReal x942=((r00)*(sj0));
2936 IkReal x943=((cj1)*(r02));
2937 IkReal x944=((IkReal(1.00000000000000))*(pp));
2938 IkReal x945=((IkReal(1.00000000000000))*(py));
2939 IkReal x946=((IkReal(0.700000000000000))*(cj0));
2940 IkReal x947=((r00)*(sj1));
2941 IkReal x948=((IkReal(0.700000000000000))*(px));
2942 IkReal x949=((cj0)*(cj1));
2943 IkReal x950=((cj1)*(x944));
2944 IkReal x951=((IkReal(2.00000000000000))*(x917));
2945 IkReal x952=((IkReal(2.00000000000000))*(x915));
2946 IkReal x953=((IkReal(2.00000000000000))*(r00)*(x916));
2947 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.71238898038469))+(j4)), IkReal(6.28318530717959))));
2948 evalcond[1]=((IkReal(-0.0950000000000000))+(x919)+(((IkReal(-1.00000000000000))*(cj0)*(x945))));
2949 evalcond[2]=((IkReal(-1.00000000000000))+(x942)+(((IkReal(-1.00000000000000))*(x935))));
2950 evalcond[3]=((((r00)*(x929)))+(x943)+(((sj1)*(x918))));
2951 evalcond[4]=((x932)+(((IkReal(-1.00000000000000))*(cj1)*(x918)))+(((IkReal(-1.00000000000000))*(cj0)*(x920))));
2952 evalcond[5]=((IkReal(0.175200000000000))+(((x929)*(x948)))+(((cj1)*(x940)))+(((IkReal(-1.00000000000000))*(cj0)*(x928)))+(((IkReal(-1.00000000000000))*(x944)))+(((IkReal(0.190000000000000))*(x919)))+(x914)+(((x926)*(x936))));
2953 evalcond[6]=((((IkReal(-1.00000000000000))*(pz)*(x927)))+(((IkReal(0.350000000000000))*(sj1)*(x918)))+(((IkReal(0.350000000000000))*(x943)))+(((IkReal(-1.00000000000000))*(x931)))+(((x921)*(x947)))+(((IkReal(-1.00000000000000))*(r01)*(x945)))+(((IkReal(0.0950000000000000))*(x942)))+(((IkReal(-0.0950000000000000))*(x935))));
2954 evalcond[7]=((((IkReal(-1.00000000000000))*(x927)*(x941)))+(((IkReal(-1.00000000000000))*(x920)*(x921)))+(((pz)*(x918)))+(((IkReal(-0.350000000000000))*(cj1)*(x918)))+(((pz)*(x939)))+(((IkReal(-1.00000000000000))*(x926)*(x927)))+(((IkReal(0.350000000000000))*(x932))));
2955 evalcond[8]=((IkReal(-0.306725000000000))+(((IkReal(-2.00000000000000))*(x916)*(x942)))+(((IkReal(-0.113475000000000))*(x935)))+(((IkReal(0.113475000000000))*(x942)))+(((IkReal(-1.00000000000000))*(py)*(x943)*(x946)))+(((r01)*(x928)))+(((r02)*(x937)))+(((x935)*(x952)))+(((cj0)*(py)*(r02)*(x924)))+(((IkReal(-1.00000000000000))*(r02)*(x919)*(x924)))+(((IkReal(-1.00000000000000))*(px)*(x918)*(x933)))+(((cj0)*(x931)*(x933)))+(((IkReal(-1.00000000000000))*(x935)*(x944)))+(((IkReal(-0.0665000000000000))*(sj1)*(x918)))+(((IkReal(-1.00000000000000))*(sj0)*(x920)*(x940)))+(((IkReal(0.700000000000000))*(x919)*(x943)))+(((x923)*(x948)))+(((IkReal(-1.00000000000000))*(x914)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x936)))+(((IkReal(-0.0665000000000000))*(x943)))+(((sj0)*(x934)))+(((r00)*(x925)))+(((cj1)*(x935)*(x940)))+(((IkReal(-0.0665000000000000))*(r00)*(x929))));
2956 evalcond[9]=((((IkReal(-1.00000000000000))*(x943)*(x951)))+(((IkReal(-1.00000000000000))*(x924)*(x926)*(x932)))+(((pp)*(x943)))+(((IkReal(-1.00000000000000))*(py)*(x924)*(x938)))+(((IkReal(-1.00000000000000))*(x918)*(x922)))+(((sj0)*(x920)*(x937)))+(((IkReal(-0.190000000000000))*(x919)*(x943)))+(((x929)*(x934)))+(((pp)*(sj1)*(x918)))+(((IkReal(-1.00000000000000))*(sj1)*(x918)*(x952)))+(((IkReal(-0.113475000000000))*(x943)))+(((IkReal(-1.00000000000000))*(x923)*(x925)))+(((cj0)*(x928)*(x943)))+(((IkReal(-1.00000000000000))*(x929)*(x953)))+(((IkReal(-0.0665000000000000))*(x942)))+(((IkReal(0.700000000000000))*(x931)))+(((IkReal(-1.00000000000000))*(cj1)*(x935)*(x937)))+(((IkReal(0.700000000000000))*(py)*(r01)))+(((IkReal(-1.00000000000000))*(x919)*(x933)*(x947)))+(((IkReal(-1.00000000000000))*(x923)*(x933)*(x941)))+(((IkReal(-1.00000000000000))*(x924)*(x929)*(x930)))+(((r02)*(x940)))+(((IkReal(0.0665000000000000))*(x935)))+(((x928)*(x947)))+(((IkReal(-1.00000000000000))*(px)*(x920)*(x924)))+(((IkReal(-1.00000000000000))*(x922)*(x939))));
2957 evalcond[10]=((((IkReal(-1.00000000000000))*(cj0)*(x920)*(x944)))+(((x925)*(x938)))+(((IkReal(-1.00000000000000))*(x932)*(x951)))+(((cj1)*(x918)*(x952)))+(((IkReal(-0.131525000000000))*(cj1)*(x918)))+(((IkReal(2.00000000000000))*(cj0)*(x916)*(x920)))+(((pp)*(x932)))+(((x919)*(x920)*(x933)))+(((x939)*(x940)))+(((x924)*(x930)*(x949)))+(((IkReal(-1.00000000000000))*(py)*(x923)*(x924)))+(((IkReal(-1.00000000000000))*(x930)*(x946)))+(((sj1)*(x937)*(x942)))+(((x924)*(x926)*(x943)))+(((IkReal(-1.00000000000000))*(cj0)*(x923)*(x937)))+(((cj1)*(px)*(x933)*(x935)))+(((IkReal(-0.700000000000000))*(r02)*(x926)))+(((x918)*(x940)))+(((IkReal(-0.131525000000000))*(cj0)*(x920)))+(((r02)*(x928)*(x929)))+(((IkReal(-1.00000000000000))*(sj1)*(x924)*(x931)))+(((IkReal(-1.00000000000000))*(x920)*(x928)))+(((IkReal(-0.190000000000000))*(x919)*(x932)))+(((IkReal(-1.00000000000000))*(x918)*(x950)))+(((IkReal(0.131525000000000))*(x932))));
2958 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 && IKabs(evalcond[7]) < 0.0000010000000000 && IKabs(evalcond[8]) < 0.0000010000000000 && IKabs(evalcond[9]) < 0.0000010000000000 && IKabs(evalcond[10]) < 0.0000010000000000 )
2959 {
2960 {
2961 IkReal dummyeval[1];
2962 IkReal gconst5;
2963 gconst5=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
2964 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
2965 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
2966 {
2967 {
2968 IkReal dummyeval[1];
2969 IkReal gconst6;
2970 gconst6=IKsign(((IkReal(-12100.0000000000))+(((IkReal(-169.000000000000))*((cj3)*(cj3))))+(((IkReal(-2860.00000000000))*(cj3)))+(((IkReal(-169.000000000000))*((sj3)*(sj3))))));
2971 dummyeval[0]=((IkReal(-71.5976331360947))+(((IkReal(-16.9230769230769))*(cj3)))+(((IkReal(-1.00000000000000))*((cj3)*(cj3))))+(((IkReal(-1.00000000000000))*((sj3)*(sj3)))));
2972 if( IKabs(dummyeval[0]) < 0.0000010000000000 )
2973 {
2974 continue;
2975 
2976 } else
2977 {
2978 {
2979 IkReal j2array[1], cj2array[1], sj2array[1];
2980 bool j2valid[1]={false};
2981 _nj2 = 1;
2982 IkReal x954=((cj1)*(cj3));
2983 IkReal x955=((sj0)*(sj1));
2984 IkReal x956=((IkReal(22000.0000000000))*(pz));
2985 IkReal x957=((IkReal(2600.00000000000))*(pz));
2986 IkReal x958=((r02)*(sj1));
2987 IkReal x959=((IkReal(2600.00000000000))*(sj3));
2988 IkReal x960=((cj1)*(sj3));
2989 IkReal x961=((r01)*(sj0));
2990 IkReal x962=((cj0)*(sj1));
2991 IkReal x963=((IkReal(2600.00000000000))*(cj3));
2992 IkReal x964=((IkReal(2090.00000000000))*(cj1));
2993 IkReal x965=((IkReal(22000.0000000000))*(px));
2994 IkReal x966=((px)*(r02));
2995 IkReal x967=((IkReal(22000.0000000000))*(py));
2996 IkReal x968=((py)*(r00));
2997 IkReal x969=((px)*(r01));
2998 IkReal x970=((IkReal(247.000000000000))*(cj0)*(r00));
2999 IkReal x971=((x959)*(x962));
3000 if( IKabs(((gconst6)*(((((cj0)*(py)*(x958)*(x963)))+(((cj3)*(r00)*(x955)*(x957)))+(((IkReal(-1.00000000000000))*(cj1)*(r00)*(x967)))+(((IkReal(-1.00000000000000))*(cj0)*(r00)*(x964)))+(((IkReal(2090.00000000000))*(x958)))+(((IkReal(-2600.00000000000))*(x954)*(x968)))+(((x957)*(x960)))+(((IkReal(-1.00000000000000))*(cj3)*(r01)*(x957)*(x962)))+(((IkReal(-1.00000000000000))*(x961)*(x964)))+(((IkReal(-1.00000000000000))*(x955)*(x963)*(x966)))+(((IkReal(-1.00000000000000))*(r02)*(x955)*(x965)))+(((cj0)*(x958)*(x967)))+(((IkReal(-1.00000000000000))*(x954)*(x970)))+(((px)*(x971)))+(((py)*(x955)*(x959)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(2600.00000000000))*(x954)*(x969)))+(((r00)*(x955)*(x956)))+(((IkReal(247.000000000000))*(cj3)*(x958)))+(((cj1)*(r01)*(x965)))+(((IkReal(-247.000000000000))*(x954)*(x961)))+(((IkReal(-1.00000000000000))*(r01)*(x956)*(x962))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst6)*(((IkReal(7700.00000000000))+(((cj1)*(x959)*(x969)))+(((IkReal(-1.00000000000000))*(x955)*(x959)*(x966)))+(((r00)*(sj3)*(x955)*(x957)))+(((IkReal(-1.00000000000000))*(x954)*(x957)))+(((IkReal(-1.00000000000000))*(cj1)*(x959)*(x968)))+(((IkReal(-1.00000000000000))*(r01)*(sj3)*(x957)*(x962)))+(((IkReal(-1.00000000000000))*(x962)*(x965)))+(((IkReal(-1.00000000000000))*(x955)*(x967)))+(((IkReal(-1.00000000000000))*(cj1)*(x956)))+(((IkReal(247.000000000000))*(sj3)*(x958)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(px)*(x962)*(x963)))+(((IkReal(-1.00000000000000))*(x960)*(x970)))+(((cj0)*(py)*(x958)*(x959)))+(((IkReal(-1.00000000000000))*(py)*(x955)*(x963)))+(((IkReal(-247.000000000000))*(x960)*(x961))))))) < IKFAST_ATAN2_MAGTHRESH )
3001  continue;
3002 j2array[0]=IKatan2(((gconst6)*(((((cj0)*(py)*(x958)*(x963)))+(((cj3)*(r00)*(x955)*(x957)))+(((IkReal(-1.00000000000000))*(cj1)*(r00)*(x967)))+(((IkReal(-1.00000000000000))*(cj0)*(r00)*(x964)))+(((IkReal(2090.00000000000))*(x958)))+(((IkReal(-2600.00000000000))*(x954)*(x968)))+(((x957)*(x960)))+(((IkReal(-1.00000000000000))*(cj3)*(r01)*(x957)*(x962)))+(((IkReal(-1.00000000000000))*(x961)*(x964)))+(((IkReal(-1.00000000000000))*(x955)*(x963)*(x966)))+(((IkReal(-1.00000000000000))*(r02)*(x955)*(x965)))+(((cj0)*(x958)*(x967)))+(((IkReal(-1.00000000000000))*(x954)*(x970)))+(((px)*(x971)))+(((py)*(x955)*(x959)))+(((IkReal(-910.000000000000))*(sj3)))+(((IkReal(2600.00000000000))*(x954)*(x969)))+(((r00)*(x955)*(x956)))+(((IkReal(247.000000000000))*(cj3)*(x958)))+(((cj1)*(r01)*(x965)))+(((IkReal(-247.000000000000))*(x954)*(x961)))+(((IkReal(-1.00000000000000))*(r01)*(x956)*(x962)))))), ((gconst6)*(((IkReal(7700.00000000000))+(((cj1)*(x959)*(x969)))+(((IkReal(-1.00000000000000))*(x955)*(x959)*(x966)))+(((r00)*(sj3)*(x955)*(x957)))+(((IkReal(-1.00000000000000))*(x954)*(x957)))+(((IkReal(-1.00000000000000))*(cj1)*(x959)*(x968)))+(((IkReal(-1.00000000000000))*(r01)*(sj3)*(x957)*(x962)))+(((IkReal(-1.00000000000000))*(x962)*(x965)))+(((IkReal(-1.00000000000000))*(x955)*(x967)))+(((IkReal(-1.00000000000000))*(cj1)*(x956)))+(((IkReal(247.000000000000))*(sj3)*(x958)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(px)*(x962)*(x963)))+(((IkReal(-1.00000000000000))*(x960)*(x970)))+(((cj0)*(py)*(x958)*(x959)))+(((IkReal(-1.00000000000000))*(py)*(x955)*(x963)))+(((IkReal(-247.000000000000))*(x960)*(x961)))))));
3003 sj2array[0]=IKsin(j2array[0]);
3004 cj2array[0]=IKcos(j2array[0]);
3005 if( j2array[0] > IKPI )
3006 {
3007  j2array[0]-=IK2PI;
3008 }
3009 else if( j2array[0] < -IKPI )
3010 { j2array[0]+=IK2PI;
3011 }
3012 j2valid[0] = true;
3013 for(int ij2 = 0; ij2 < 1; ++ij2)
3014 {
3015 if( !j2valid[ij2] )
3016 {
3017  continue;
3018 }
3019 _ij2[0] = ij2; _ij2[1] = -1;
3020 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
3021 {
3022 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
3023 {
3024  j2valid[iij2]=false; _ij2[1] = iij2; break;
3025 }
3026 }
3027 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
3028 {
3029 IkReal evalcond[4];
3030 IkReal x972=IKcos(j2);
3031 IkReal x973=IKsin(j2);
3032 IkReal x974=((px)*(sj1));
3033 IkReal x975=((py)*(sj1));
3034 IkReal x976=((cj1)*(sj0));
3035 IkReal x977=((IkReal(1.00000000000000))*(px));
3036 IkReal x978=((r00)*(sj0));
3037 IkReal x979=((IkReal(0.0950000000000000))*(r01));
3038 IkReal x980=((IkReal(0.0650000000000000))*(cj3));
3039 IkReal x981=((cj0)*(r01));
3040 IkReal x982=((IkReal(0.0950000000000000))*(cj1));
3041 IkReal x983=((pz)*(sj1));
3042 IkReal x984=((cj0)*(r00));
3043 IkReal x985=((IkReal(0.0950000000000000))*(sj1));
3044 IkReal x986=((cj0)*(cj1));
3045 IkReal x987=((cj1)*(pz));
3046 IkReal x988=((IkReal(0.0650000000000000))*(sj3));
3047 IkReal x989=((IkReal(0.550000000000000))*(x973));
3048 IkReal x990=((IkReal(0.550000000000000))*(x972));
3049 IkReal x991=((x973)*(x980));
3050 IkReal x992=((x972)*(x988));
3051 IkReal x993=((x973)*(x988));
3052 IkReal x994=((x972)*(x980));
3053 IkReal x995=((x990)+(x994));
3054 IkReal x996=((x989)+(x992)+(x991));
3055 evalcond[0]=((IkReal(-0.350000000000000))+(x987)+(((IkReal(-1.00000000000000))*(x995)))+(x993)+(((cj0)*(x974)))+(((sj0)*(x975))));
3056 evalcond[1]=((((IkReal(-1.00000000000000))*(x977)*(x986)))+(x983)+(((IkReal(-1.00000000000000))*(py)*(x976)))+(x996));
3057 evalcond[2]=((((x981)*(x983)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x977)))+(((x982)*(x984)))+(((IkReal(-1.00000000000000))*(x978)*(x983)))+(((cj1)*(py)*(r00)))+(((IkReal(-1.00000000000000))*(r02)*(x985)))+(((x976)*(x979)))+(((IkReal(-1.00000000000000))*(x996)))+(((r02)*(sj0)*(x974)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x975))));
3058 evalcond[3]=((((r00)*(x975)))+(((IkReal(-0.350000000000000))*(x978)))+(((x984)*(x985)))+(((IkReal(-1.00000000000000))*(x981)*(x987)))+(((IkReal(0.350000000000000))*(x981)))+(((pz)*(r00)*(x976)))+(((py)*(r02)*(x986)))+(((IkReal(-1.00000000000000))*(r01)*(x974)))+(((sj0)*(sj1)*(x979)))+(((r02)*(x982)))+(((IkReal(-1.00000000000000))*(r02)*(x976)*(x977)))+(((IkReal(-1.00000000000000))*(x995)))+(x993));
3059 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
3060 {
3061 continue;
3062 }
3063 }
3064 
3065 {
3066 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
3067 vinfos[0].jointtype = 1;
3068 vinfos[0].foffset = j0;
3069 vinfos[0].indices[0] = _ij0[0];
3070 vinfos[0].indices[1] = _ij0[1];
3071 vinfos[0].maxsolutions = _nj0;
3072 vinfos[1].jointtype = 1;
3073 vinfos[1].foffset = j1;
3074 vinfos[1].indices[0] = _ij1[0];
3075 vinfos[1].indices[1] = _ij1[1];
3076 vinfos[1].maxsolutions = _nj1;
3077 vinfos[2].jointtype = 1;
3078 vinfos[2].foffset = j2;
3079 vinfos[2].indices[0] = _ij2[0];
3080 vinfos[2].indices[1] = _ij2[1];
3081 vinfos[2].maxsolutions = _nj2;
3082 vinfos[3].jointtype = 1;
3083 vinfos[3].foffset = j3;
3084 vinfos[3].indices[0] = _ij3[0];
3085 vinfos[3].indices[1] = _ij3[1];
3086 vinfos[3].maxsolutions = _nj3;
3087 vinfos[4].jointtype = 1;
3088 vinfos[4].foffset = j4;
3089 vinfos[4].indices[0] = _ij4[0];
3090 vinfos[4].indices[1] = _ij4[1];
3091 vinfos[4].maxsolutions = _nj4;
3092 std::vector<int> vfree(0);
3093 solutions.AddSolution(vinfos,vfree);
3094 }
3095 }
3096 }
3097 
3098 }
3099 
3100 }
3101 
3102 } else
3103 {
3104 {
3105 IkReal j2array[1], cj2array[1], sj2array[1];
3106 bool j2valid[1]={false};
3107 _nj2 = 1;
3108 IkReal x997=((IkReal(2600.00000000000))*(sj3));
3109 IkReal x998=((py)*(sj0));
3110 IkReal x999=((pz)*(sj1));
3111 IkReal x1000=((IkReal(2600.00000000000))*(cj3));
3112 IkReal x1001=((cj1)*(pz));
3113 IkReal x1002=((IkReal(22000.0000000000))*(cj1));
3114 IkReal x1003=((cj0)*(px));
3115 IkReal x1004=((sj1)*(x1003));
3116 if( IKabs(((gconst5)*(((((IkReal(-1.00000000000000))*(cj1)*(x1000)*(x1003)))+(((x1000)*(x999)))+(((IkReal(-1.00000000000000))*(x1002)*(x1003)))+(((sj1)*(x997)*(x998)))+(((IkReal(-1.00000000000000))*(cj1)*(x1000)*(x998)))+(((IkReal(-910.000000000000))*(sj3)))+(((x1001)*(x997)))+(((x1004)*(x997)))+(((IkReal(22000.0000000000))*(x999)))+(((IkReal(-1.00000000000000))*(x1002)*(x998))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst5)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(sj1)*(x1000)*(x998)))+(((IkReal(-1.00000000000000))*(x1000)*(x1001)))+(((IkReal(-1.00000000000000))*(cj1)*(x1003)*(x997)))+(((IkReal(-1.00000000000000))*(x1000)*(x1004)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x997)*(x998)))+(((IkReal(-22000.0000000000))*(x1001)))+(((IkReal(-22000.0000000000))*(sj1)*(x998)))+(((IkReal(-22000.0000000000))*(x1004)))+(((x997)*(x999))))))) < IKFAST_ATAN2_MAGTHRESH )
3117  continue;
3118 j2array[0]=IKatan2(((gconst5)*(((((IkReal(-1.00000000000000))*(cj1)*(x1000)*(x1003)))+(((x1000)*(x999)))+(((IkReal(-1.00000000000000))*(x1002)*(x1003)))+(((sj1)*(x997)*(x998)))+(((IkReal(-1.00000000000000))*(cj1)*(x1000)*(x998)))+(((IkReal(-910.000000000000))*(sj3)))+(((x1001)*(x997)))+(((x1004)*(x997)))+(((IkReal(22000.0000000000))*(x999)))+(((IkReal(-1.00000000000000))*(x1002)*(x998)))))), ((gconst5)*(((IkReal(7700.00000000000))+(((IkReal(-1.00000000000000))*(sj1)*(x1000)*(x998)))+(((IkReal(-1.00000000000000))*(x1000)*(x1001)))+(((IkReal(-1.00000000000000))*(cj1)*(x1003)*(x997)))+(((IkReal(-1.00000000000000))*(x1000)*(x1004)))+(((IkReal(910.000000000000))*(cj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x997)*(x998)))+(((IkReal(-22000.0000000000))*(x1001)))+(((IkReal(-22000.0000000000))*(sj1)*(x998)))+(((IkReal(-22000.0000000000))*(x1004)))+(((x997)*(x999)))))));
3119 sj2array[0]=IKsin(j2array[0]);
3120 cj2array[0]=IKcos(j2array[0]);
3121 if( j2array[0] > IKPI )
3122 {
3123  j2array[0]-=IK2PI;
3124 }
3125 else if( j2array[0] < -IKPI )
3126 { j2array[0]+=IK2PI;
3127 }
3128 j2valid[0] = true;
3129 for(int ij2 = 0; ij2 < 1; ++ij2)
3130 {
3131 if( !j2valid[ij2] )
3132 {
3133  continue;
3134 }
3135 _ij2[0] = ij2; _ij2[1] = -1;
3136 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
3137 {
3138 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
3139 {
3140  j2valid[iij2]=false; _ij2[1] = iij2; break;
3141 }
3142 }
3143 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
3144 {
3145 IkReal evalcond[4];
3146 IkReal x1005=IKcos(j2);
3147 IkReal x1006=IKsin(j2);
3148 IkReal x1007=((px)*(sj1));
3149 IkReal x1008=((py)*(sj1));
3150 IkReal x1009=((cj1)*(sj0));
3151 IkReal x1010=((IkReal(1.00000000000000))*(px));
3152 IkReal x1011=((r00)*(sj0));
3153 IkReal x1012=((IkReal(0.0950000000000000))*(r01));
3154 IkReal x1013=((IkReal(0.0650000000000000))*(cj3));
3155 IkReal x1014=((cj0)*(r01));
3156 IkReal x1015=((IkReal(0.0950000000000000))*(cj1));
3157 IkReal x1016=((pz)*(sj1));
3158 IkReal x1017=((cj0)*(r00));
3159 IkReal x1018=((IkReal(0.0950000000000000))*(sj1));
3160 IkReal x1019=((cj0)*(cj1));
3161 IkReal x1020=((cj1)*(pz));
3162 IkReal x1021=((IkReal(0.0650000000000000))*(sj3));
3163 IkReal x1022=((IkReal(0.550000000000000))*(x1006));
3164 IkReal x1023=((IkReal(0.550000000000000))*(x1005));
3165 IkReal x1024=((x1006)*(x1013));
3166 IkReal x1025=((x1005)*(x1021));
3167 IkReal x1026=((x1006)*(x1021));
3168 IkReal x1027=((x1005)*(x1013));
3169 IkReal x1028=((x1027)+(x1023));
3170 IkReal x1029=((x1025)+(x1024)+(x1022));
3171 evalcond[0]=((IkReal(-0.350000000000000))+(((cj0)*(x1007)))+(((IkReal(-1.00000000000000))*(x1028)))+(((sj0)*(x1008)))+(x1026)+(x1020));
3172 evalcond[1]=((((IkReal(-1.00000000000000))*(py)*(x1009)))+(((IkReal(-1.00000000000000))*(x1010)*(x1019)))+(x1016)+(x1029));
3173 evalcond[2]=((((x1014)*(x1016)))+(((x1009)*(x1012)))+(((r02)*(sj0)*(x1007)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x1010)))+(((cj1)*(py)*(r00)))+(((IkReal(-1.00000000000000))*(cj0)*(r02)*(x1008)))+(((IkReal(-1.00000000000000))*(x1011)*(x1016)))+(((IkReal(-1.00000000000000))*(r02)*(x1018)))+(((IkReal(-1.00000000000000))*(x1029)))+(((x1015)*(x1017))));
3174 evalcond[3]=((((r02)*(x1015)))+(((IkReal(-1.00000000000000))*(x1014)*(x1020)))+(((IkReal(-0.350000000000000))*(x1011)))+(((IkReal(-1.00000000000000))*(x1028)))+(((IkReal(0.350000000000000))*(x1014)))+(((IkReal(-1.00000000000000))*(r01)*(x1007)))+(((x1017)*(x1018)))+(((py)*(r02)*(x1019)))+(((pz)*(r00)*(x1009)))+(x1026)+(((sj0)*(sj1)*(x1012)))+(((r00)*(x1008)))+(((IkReal(-1.00000000000000))*(r02)*(x1009)*(x1010))));
3175 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 )
3176 {
3177 continue;
3178 }
3179 }
3180 
3181 {
3182 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
3183 vinfos[0].jointtype = 1;
3184 vinfos[0].foffset = j0;
3185 vinfos[0].indices[0] = _ij0[0];
3186 vinfos[0].indices[1] = _ij0[1];
3187 vinfos[0].maxsolutions = _nj0;
3188 vinfos[1].jointtype = 1;
3189 vinfos[1].foffset = j1;
3190 vinfos[1].indices[0] = _ij1[0];
3191 vinfos[1].indices[1] = _ij1[1];
3192 vinfos[1].maxsolutions = _nj1;
3193 vinfos[2].jointtype = 1;
3194 vinfos[2].foffset = j2;
3195 vinfos[2].indices[0] = _ij2[0];
3196 vinfos[2].indices[1] = _ij2[1];
3197 vinfos[2].maxsolutions = _nj2;
3198 vinfos[3].jointtype = 1;
3199 vinfos[3].foffset = j3;
3200 vinfos[3].indices[0] = _ij3[0];
3201 vinfos[3].indices[1] = _ij3[1];
3202 vinfos[3].maxsolutions = _nj3;
3203 vinfos[4].jointtype = 1;
3204 vinfos[4].foffset = j4;
3205 vinfos[4].indices[0] = _ij4[0];
3206 vinfos[4].indices[1] = _ij4[1];
3207 vinfos[4].maxsolutions = _nj4;
3208 std::vector<int> vfree(0);
3209 solutions.AddSolution(vinfos,vfree);
3210 }
3211 }
3212 }
3213 
3214 }
3215 
3216 }
3217 
3218 } else
3219 {
3220 IkReal x1030=((r01)*(sj1));
3221 IkReal x1031=((IkReal(0.350000000000000))*(sj0));
3222 IkReal x1032=((px)*(r02));
3223 IkReal x1033=((IkReal(1.00000000000000))*(cj0));
3224 IkReal x1034=((cj0)*(r00));
3225 IkReal x1035=((IkReal(0.350000000000000))*(cj1));
3226 IkReal x1036=((IkReal(0.700000000000000))*(sj1));
3227 IkReal x1037=((IkReal(0.190000000000000))*(px));
3228 IkReal x1038=((r00)*(sj0));
3229 IkReal x1039=((px)*(sj0));
3230 IkReal x1040=((IkReal(0.700000000000000))*(cj1));
3231 IkReal x1041=((py)*(r02));
3232 IkReal x1042=((IkReal(0.190000000000000))*(py));
3233 IkReal x1043=((IkReal(2.00000000000000))*(py));
3234 IkReal x1044=((pz)*(r01));
3235 IkReal x1045=((IkReal(2.00000000000000))*(cj0));
3236 IkReal x1046=((IkReal(0.350000000000000))*(sj1));
3237 IkReal x1047=((pz)*(r02));
3238 IkReal x1048=((cj0)*(r01));
3239 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(1.45233765858574))+(j3)), IkReal(6.28318530717959))));
3240 evalcond[1]=((IkReal(-0.0950000000000000))+(((IkReal(-1.00000000000000))*(py)*(x1033)))+(x1039));
3241 evalcond[2]=((sj4)+(x1038)+(((IkReal(-1.00000000000000))*(r01)*(x1033))));
3242 evalcond[3]=((IkReal(0.166749999870000))+(((pz)*(x1040)))+(((py)*(sj0)*(x1036)))+(((cj0)*(px)*(x1036)))+(((IkReal(-1.00000000000000))*(pp)))+(((sj0)*(x1037)))+(((IkReal(-1.00000000000000))*(cj0)*(x1042))));
3243 evalcond[4]=((((IkReal(-1.00000000000000))*(py)*(r01)))+(((IkReal(-0.546145583500000))*(cj4)))+(((x1034)*(x1046)))+(((IkReal(-0.0950000000000000))*(x1048)))+(((x1030)*(x1031)))+(((r02)*(x1035)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((IkReal(0.0950000000000000))*(x1038)))+(((IkReal(-1.00000000000000))*(x1047))));
3244 evalcond[5]=((((r02)*(x1046)))+(((IkReal(1.00000000000000e-9))*(cj4)))+(((IkReal(-1.00000000000000))*(x1034)*(x1035)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x1031)))+(((sj0)*(x1044)))+(((IkReal(-1.00000000000000))*(x1032)*(x1033)))+(((pz)*(x1034)))+(((IkReal(-1.00000000000000))*(sj0)*(x1041))));
3245 evalcond[6]=((((py)*(x1043)*(x1048)))+(((IkReal(-1.00000000000000))*(r01)*(x1039)*(x1043)))+(((IkReal(0.190000000000000))*(x1047)))+(((IkReal(-1.00000000000000))*(cj0)*(x1040)*(x1041)))+(((IkReal(0.700000000000000))*(px)*(x1030)))+(((pz)*(x1041)*(x1045)))+(((IkReal(-0.113475000000000))*(x1048)))+(((sj0)*(x1032)*(x1040)))+(((IkReal(-1.00000000000000))*(pz)*(x1038)*(x1040)))+(((IkReal(-2.00000000000000))*(x1038)*((px)*(px))))+(((IkReal(-2.00000000000000))*(pz)*(sj0)*(x1032)))+(((pp)*(x1038)))+(((IkReal(-0.0665000000000000))*(sj1)*(x1034)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x1036)))+(((r00)*(x1037)))+(((IkReal(0.113475000000000))*(x1038)))+(((px)*(x1034)*(x1043)))+(((IkReal(0.298274999870000))*(sj4)))+(((IkReal(-0.0665000000000000))*(cj1)*(r02)))+(((IkReal(-1.00000000000000))*(pp)*(r01)*(x1033)))+(((IkReal(-0.0665000000000000))*(sj0)*(x1030)))+(((r01)*(x1042)))+(((cj0)*(x1040)*(x1044))));
3246 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 )
3247 {
3248 {
3249 IkReal j2array[1], cj2array[1], sj2array[1];
3250 bool j2valid[1]={false};
3251 _nj2 = 1;
3252 IkReal x1049=((IkReal(1.81818181870518))*(sj1));
3253 IkReal x1050=((py)*(sj0));
3254 IkReal x1051=((IkReal(0.216392517249668))*(sj1));
3255 IkReal x1052=((cj0)*(px));
3256 IkReal x1053=((IkReal(0.216392517249668))*(cj1));
3257 IkReal x1054=((IkReal(1.81818181870518))*(cj1));
3258 if( IKabs(((IkReal(0.0757373810373838))+(((IkReal(-1.00000000000000))*(pz)*(x1053)))+(((x1052)*(x1054)))+(((x1050)*(x1054)))+(((IkReal(-1.00000000000000))*(x1051)*(x1052)))+(((IkReal(-1.00000000000000))*(pz)*(x1049)))+(((IkReal(-1.00000000000000))*(x1050)*(x1051))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-0.636363636546814))+(((x1052)*(x1053)))+(((x1049)*(x1052)))+(((x1050)*(x1053)))+(((x1049)*(x1050)))+(((pz)*(x1054)))+(((IkReal(-1.00000000000000))*(pz)*(x1051))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(0.0757373810373838))+(((IkReal(-1.00000000000000))*(pz)*(x1053)))+(((x1052)*(x1054)))+(((x1050)*(x1054)))+(((IkReal(-1.00000000000000))*(x1051)*(x1052)))+(((IkReal(-1.00000000000000))*(pz)*(x1049)))+(((IkReal(-1.00000000000000))*(x1050)*(x1051)))))+IKsqr(((IkReal(-0.636363636546814))+(((x1052)*(x1053)))+(((x1049)*(x1052)))+(((x1050)*(x1053)))+(((x1049)*(x1050)))+(((pz)*(x1054)))+(((IkReal(-1.00000000000000))*(pz)*(x1051)))))-1) <= IKFAST_SINCOS_THRESH )
3259  continue;
3260 j2array[0]=IKatan2(((IkReal(0.0757373810373838))+(((IkReal(-1.00000000000000))*(pz)*(x1053)))+(((x1052)*(x1054)))+(((x1050)*(x1054)))+(((IkReal(-1.00000000000000))*(x1051)*(x1052)))+(((IkReal(-1.00000000000000))*(pz)*(x1049)))+(((IkReal(-1.00000000000000))*(x1050)*(x1051)))), ((IkReal(-0.636363636546814))+(((x1052)*(x1053)))+(((x1049)*(x1052)))+(((x1050)*(x1053)))+(((x1049)*(x1050)))+(((pz)*(x1054)))+(((IkReal(-1.00000000000000))*(pz)*(x1051)))));
3261 sj2array[0]=IKsin(j2array[0]);
3262 cj2array[0]=IKcos(j2array[0]);
3263 if( j2array[0] > IKPI )
3264 {
3265  j2array[0]-=IK2PI;
3266 }
3267 else if( j2array[0] < -IKPI )
3268 { j2array[0]+=IK2PI;
3269 }
3270 j2valid[0] = true;
3271 for(int ij2 = 0; ij2 < 1; ++ij2)
3272 {
3273 if( !j2valid[ij2] )
3274 {
3275  continue;
3276 }
3277 _ij2[0] = ij2; _ij2[1] = -1;
3278 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
3279 {
3280 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
3281 {
3282  j2valid[iij2]=false; _ij2[1] = iij2; break;
3283 }
3284 }
3285 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
3286 {
3287 IkReal evalcond[8];
3288 IkReal x1055=IKsin(j2);
3289 IkReal x1056=IKcos(j2);
3290 IkReal x1057=(py)*(py);
3291 IkReal x1058=(px)*(px);
3292 IkReal x1059=(pz)*(pz);
3293 IkReal x1060=((sj0)*(sj1));
3294 IkReal x1061=((py)*(r00));
3295 IkReal x1062=((IkReal(0.190000000000000))*(cj1));
3296 IkReal x1063=((cj0)*(r02));
3297 IkReal x1064=((py)*(r01));
3298 IkReal x1065=((px)*(r01));
3299 IkReal x1066=((IkReal(0.190000000000000))*(sj1));
3300 IkReal x1067=((cj1)*(r02));
3301 IkReal x1068=((pz)*(r00));
3302 IkReal x1069=((cj1)*(sj0));
3303 IkReal x1070=((cj0)*(r00));
3304 IkReal x1071=((IkReal(2.00000000000000))*(sj1));
3305 IkReal x1072=((IkReal(0.700000000000000))*(px));
3306 IkReal x1073=((IkReal(1.00000000000000))*(cj1));
3307 IkReal x1074=((IkReal(2.00000000000000))*(px));
3308 IkReal x1075=((pp)*(r01));
3309 IkReal x1076=((pp)*(sj1));
3310 IkReal x1077=((r02)*(sj1));
3311 IkReal x1078=((pz)*(r01));
3312 IkReal x1079=((px)*(r02));
3313 IkReal x1080=((IkReal(0.700000000000000))*(sj0));
3314 IkReal x1081=((cj0)*(sj1));
3315 IkReal x1082=((r00)*(sj0));
3316 IkReal x1083=((cj0)*(r01));
3317 IkReal x1084=((IkReal(1.00000000000000))*(py));
3318 IkReal x1085=((pz)*(r02));
3319 IkReal x1086=((IkReal(2.00000000000000))*(py));
3320 IkReal x1087=((cj1)*(pz));
3321 IkReal x1088=((IkReal(0.0950000000000000))*(r01));
3322 IkReal x1089=((cj0)*(px));
3323 IkReal x1090=((pz)*(x1071));
3324 IkReal x1091=((cj4)*(x1055));
3325 IkReal x1092=((cj4)*(x1056));
3326 IkReal x1093=((sj4)*(x1055));
3327 IkReal x1094=((IkReal(0.0645444780500000))*(x1056));
3328 IkReal x1095=((IkReal(0.542318181700000))*(x1056));
3329 IkReal x1096=((IkReal(2.00000000000000))*(r01)*(x1057));
3330 evalcond[0]=((((sj1)*(x1070)))+(((IkReal(0.992991970000000))*(x1092)))+(x1067)+(((r01)*(x1060)))+(((IkReal(-0.118181820000000))*(x1091))));
3331 evalcond[1]=((IkReal(-0.350000000000000))+(((py)*(x1060)))+(x1087)+(((px)*(x1081)))+(((IkReal(-1.00000000000000))*(x1095)))+(((IkReal(0.0645444780500000))*(x1055))));
3332 evalcond[2]=((((IkReal(-1.00000000000000))*(x1070)*(x1073)))+(((IkReal(-0.992991970000000))*(x1091)))+(((IkReal(-0.118181820000000))*(x1092)))+(((IkReal(-1.00000000000000))*(r01)*(x1069)))+(x1077));
3333 evalcond[3]=((((IkReal(0.542318181700000))*(x1055)))+(((IkReal(-1.00000000000000))*(x1069)*(x1084)))+(((pz)*(sj1)))+(((IkReal(-1.00000000000000))*(x1073)*(x1089)))+(x1094));
3334 evalcond[4]=((((IkReal(-1.00000000000000))*(x1060)*(x1068)))+(((x1078)*(x1081)))+(((IkReal(0.0950000000000000))*(cj1)*(x1070)))+(((x1060)*(x1079)))+(((IkReal(-1.00000000000000))*(x1065)*(x1073)))+(((IkReal(-0.0950000000000000))*(x1077)))+(((sj4)*(x1094)))+(((cj1)*(x1061)))+(((IkReal(0.542318181700000))*(x1093)))+(((x1069)*(x1088)))+(((IkReal(-1.00000000000000))*(sj1)*(x1063)*(x1084))));
3335 evalcond[5]=((((sj1)*(x1061)))+(((x1068)*(x1069)))+(((IkReal(-0.0645444780500000))*(x1093)))+(((IkReal(-1.00000000000000))*(px)*(sj0)*(x1067)))+(((IkReal(0.0950000000000000))*(x1067)))+(((IkReal(0.350000000000000))*(x1083)))+(((x1060)*(x1088)))+(((IkReal(-1.00000000000000))*(cj0)*(x1073)*(x1078)))+(((IkReal(-0.350000000000000))*(x1082)))+(((cj1)*(py)*(x1063)))+(((IkReal(-1.00000000000000))*(sj1)*(x1065)))+(((IkReal(0.0950000000000000))*(sj1)*(x1070)))+(((sj4)*(x1095))));
3336 evalcond[6]=((((IkReal(-0.0665000000000000))*(x1082)))+(((IkReal(-1.00000000000000))*(x1058)*(x1070)*(x1071)))+(((py)*(x1062)*(x1063)))+(((IkReal(-0.113475000000000))*(sj1)*(x1070)))+(((IkReal(-1.00000000000000))*(px)*(x1063)*(x1090)))+(((IkReal(-0.296184679851750))*(x1092)))+(((IkReal(0.0665000000000000))*(x1083)))+(((IkReal(0.700000000000000))*(x1064)))+(((IkReal(-1.00000000000000))*(sj0)*(x1062)*(x1079)))+(((pp)*(x1067)))+(((sj0)*(x1062)*(x1068)))+(((x1061)*(x1066)))+(((IkReal(0.700000000000000))*(x1085)))+(((IkReal(-1.00000000000000))*(x1064)*(x1071)*(x1089)))+(((IkReal(-1.00000000000000))*(cj1)*(x1068)*(x1074)))+(((IkReal(-1.00000000000000))*(x1060)*(x1061)*(x1074)))+(((IkReal(-1.00000000000000))*(x1060)*(x1085)*(x1086)))+(((IkReal(-1.00000000000000))*(x1060)*(x1096)))+(((x1060)*(x1075)))+(((IkReal(0.0352506812605000))*(x1091)))+(((IkReal(-0.113475000000000))*(x1067)))+(((r00)*(x1072)))+(((IkReal(-2.00000000000000))*(x1064)*(x1087)))+(((IkReal(-2.00000000000000))*(x1059)*(x1067)))+(((IkReal(-1.00000000000000))*(x1065)*(x1066)))+(((IkReal(-0.113475000000000))*(r01)*(x1060)))+(((IkReal(-1.00000000000000))*(cj0)*(x1062)*(x1078)))+(((x1070)*(x1076))));
3337 evalcond[7]=((((IkReal(-1.00000000000000))*(py)*(r02)*(x1080)))+(((IkReal(0.296184679851750))*(x1091)))+(((IkReal(0.700000000000000))*(cj0)*(x1068)))+(((IkReal(-1.00000000000000))*(x1064)*(x1090)))+(((IkReal(-0.131525000000000))*(cj1)*(x1070)))+(((py)*(x1063)*(x1066)))+(((IkReal(-1.00000000000000))*(px)*(x1068)*(x1071)))+(((cj0)*(cj1)*(x1064)*(x1074)))+(((x1061)*(x1069)*(x1074)))+(((x1078)*(x1080)))+(((IkReal(0.131525000000000))*(x1077)))+(((IkReal(-1.00000000000000))*(r02)*(x1059)*(x1071)))+(((x1069)*(x1096)))+(((IkReal(-1.00000000000000))*(pp)*(x1070)*(x1073)))+(((IkReal(-1.00000000000000))*(x1063)*(x1072)))+(((IkReal(-1.00000000000000))*(cj0)*(x1066)*(x1078)))+(((IkReal(-1.00000000000000))*(x1069)*(x1075)))+(((x1062)*(x1065)))+(((IkReal(0.190000000000000))*(x1060)*(x1068)))+(((IkReal(-1.00000000000000))*(x1061)*(x1062)))+(((x1063)*(x1074)*(x1087)))+(((IkReal(2.00000000000000))*(cj1)*(x1058)*(x1070)))+(((IkReal(-0.131525000000000))*(r01)*(x1069)))+(((r02)*(x1076)))+(((pz)*(sj0)*(x1067)*(x1086)))+(((IkReal(0.0352506812605000))*(x1092)))+(((IkReal(-0.190000000000000))*(x1060)*(x1079))));
3338 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
3339 {
3340 continue;
3341 }
3342 }
3343 
3344 {
3345 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
3346 vinfos[0].jointtype = 1;
3347 vinfos[0].foffset = j0;
3348 vinfos[0].indices[0] = _ij0[0];
3349 vinfos[0].indices[1] = _ij0[1];
3350 vinfos[0].maxsolutions = _nj0;
3351 vinfos[1].jointtype = 1;
3352 vinfos[1].foffset = j1;
3353 vinfos[1].indices[0] = _ij1[0];
3354 vinfos[1].indices[1] = _ij1[1];
3355 vinfos[1].maxsolutions = _nj1;
3356 vinfos[2].jointtype = 1;
3357 vinfos[2].foffset = j2;
3358 vinfos[2].indices[0] = _ij2[0];
3359 vinfos[2].indices[1] = _ij2[1];
3360 vinfos[2].maxsolutions = _nj2;
3361 vinfos[3].jointtype = 1;
3362 vinfos[3].foffset = j3;
3363 vinfos[3].indices[0] = _ij3[0];
3364 vinfos[3].indices[1] = _ij3[1];
3365 vinfos[3].maxsolutions = _nj3;
3366 vinfos[4].jointtype = 1;
3367 vinfos[4].foffset = j4;
3368 vinfos[4].indices[0] = _ij4[0];
3369 vinfos[4].indices[1] = _ij4[1];
3370 vinfos[4].maxsolutions = _nj4;
3371 std::vector<int> vfree(0);
3372 solutions.AddSolution(vinfos,vfree);
3373 }
3374 }
3375 }
3376 
3377 } else
3378 {
3379 IkReal x1097=((r01)*(sj1));
3380 IkReal x1098=((IkReal(0.350000000000000))*(sj0));
3381 IkReal x1099=((px)*(r02));
3382 IkReal x1100=((IkReal(1.00000000000000))*(cj0));
3383 IkReal x1101=((cj0)*(r00));
3384 IkReal x1102=((IkReal(0.350000000000000))*(cj1));
3385 IkReal x1103=((IkReal(0.700000000000000))*(sj1));
3386 IkReal x1104=((IkReal(0.190000000000000))*(px));
3387 IkReal x1105=((r00)*(sj0));
3388 IkReal x1106=((px)*(sj0));
3389 IkReal x1107=((IkReal(0.700000000000000))*(cj1));
3390 IkReal x1108=((py)*(r02));
3391 IkReal x1109=((IkReal(0.190000000000000))*(py));
3392 IkReal x1110=((IkReal(2.00000000000000))*(py));
3393 IkReal x1111=((pz)*(r01));
3394 IkReal x1112=((IkReal(2.00000000000000))*(cj0));
3395 IkReal x1113=((IkReal(0.350000000000000))*(sj1));
3396 IkReal x1114=((pz)*(r02));
3397 IkReal x1115=((cj0)*(r01));
3398 evalcond[0]=((IkReal(-3.14159265358979))+(IKfmod(((IkReal(4.83084764859385))+(j3)), IkReal(6.28318530717959))));
3399 evalcond[1]=((IkReal(-0.0950000000000000))+(((IkReal(-1.00000000000000))*(py)*(x1100)))+(x1106));
3400 evalcond[2]=((x1105)+(sj4)+(((IkReal(-1.00000000000000))*(r01)*(x1100))));
3401 evalcond[3]=((IkReal(0.166749999870000))+(((py)*(sj0)*(x1103)))+(((IkReal(-1.00000000000000))*(pp)))+(((IkReal(-1.00000000000000))*(cj0)*(x1109)))+(((sj0)*(x1104)))+(((pz)*(x1107)))+(((cj0)*(px)*(x1103))));
3402 evalcond[4]=((((IkReal(-1.00000000000000))*(py)*(r01)))+(((r02)*(x1102)))+(((IkReal(-1.00000000000000))*(px)*(r00)))+(((x1101)*(x1113)))+(((x1097)*(x1098)))+(((IkReal(-1.00000000000000))*(x1114)))+(((IkReal(0.546145583500000))*(cj4)))+(((IkReal(-0.0950000000000000))*(x1115)))+(((IkReal(0.0950000000000000))*(x1105))));
3403 evalcond[5]=((((r02)*(x1113)))+(((IkReal(1.00000000000000e-9))*(cj4)))+(((IkReal(-1.00000000000000))*(sj0)*(x1108)))+(((pz)*(x1101)))+(((IkReal(-1.00000000000000))*(x1101)*(x1102)))+(((IkReal(-1.00000000000000))*(cj1)*(r01)*(x1098)))+(((IkReal(-1.00000000000000))*(x1099)*(x1100)))+(((sj0)*(x1111))));
3404 evalcond[6]=((((IkReal(0.190000000000000))*(x1114)))+(((IkReal(-0.0665000000000000))*(sj0)*(x1097)))+(((pz)*(x1108)*(x1112)))+(((IkReal(-1.00000000000000))*(cj0)*(x1107)*(x1108)))+(((IkReal(-1.00000000000000))*(r01)*(x1106)*(x1110)))+(((IkReal(-1.00000000000000))*(py)*(r00)*(x1103)))+(((IkReal(-0.113475000000000))*(x1115)))+(((IkReal(-2.00000000000000))*(x1105)*((px)*(px))))+(((IkReal(-1.00000000000000))*(pp)*(r01)*(x1100)))+(((pp)*(x1105)))+(((IkReal(0.113475000000000))*(x1105)))+(((py)*(x1110)*(x1115)))+(((px)*(x1101)*(x1110)))+(((IkReal(-1.00000000000000))*(pz)*(x1105)*(x1107)))+(((IkReal(-2.00000000000000))*(pz)*(sj0)*(x1099)))+(((IkReal(0.298274999870000))*(sj4)))+(((IkReal(-0.0665000000000000))*(cj1)*(r02)))+(((cj0)*(x1107)*(x1111)))+(((IkReal(0.700000000000000))*(px)*(x1097)))+(((r01)*(x1109)))+(((r00)*(x1104)))+(((sj0)*(x1099)*(x1107)))+(((IkReal(-0.0665000000000000))*(sj1)*(x1101))));
3405 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 && IKabs(evalcond[5]) < 0.0000010000000000 && IKabs(evalcond[6]) < 0.0000010000000000 )
3406 {
3407 {
3408 IkReal j2array[1], cj2array[1], sj2array[1];
3409 bool j2valid[1]={false};
3410 _nj2 = 1;
3411 IkReal x1116=((IkReal(1.81818181870518))*(sj1));
3412 IkReal x1117=((py)*(sj0));
3413 IkReal x1118=((IkReal(0.216392517249668))*(sj1));
3414 IkReal x1119=((cj0)*(px));
3415 IkReal x1120=((IkReal(0.216392517249668))*(cj1));
3416 IkReal x1121=((IkReal(1.81818181870518))*(cj1));
3417 if( IKabs(((IkReal(-0.0757373810373838))+(((x1119)*(x1121)))+(((x1118)*(x1119)))+(((pz)*(x1120)))+(((x1117)*(x1118)))+(((IkReal(-1.00000000000000))*(pz)*(x1116)))+(((x1117)*(x1121))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((IkReal(-0.636363636546814))+(((pz)*(x1118)))+(((IkReal(-1.00000000000000))*(x1119)*(x1120)))+(((IkReal(-1.00000000000000))*(x1117)*(x1120)))+(((x1116)*(x1117)))+(((pz)*(x1121)))+(((x1116)*(x1119))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((IkReal(-0.0757373810373838))+(((x1119)*(x1121)))+(((x1118)*(x1119)))+(((pz)*(x1120)))+(((x1117)*(x1118)))+(((IkReal(-1.00000000000000))*(pz)*(x1116)))+(((x1117)*(x1121)))))+IKsqr(((IkReal(-0.636363636546814))+(((pz)*(x1118)))+(((IkReal(-1.00000000000000))*(x1119)*(x1120)))+(((IkReal(-1.00000000000000))*(x1117)*(x1120)))+(((x1116)*(x1117)))+(((pz)*(x1121)))+(((x1116)*(x1119)))))-1) <= IKFAST_SINCOS_THRESH )
3418  continue;
3419 j2array[0]=IKatan2(((IkReal(-0.0757373810373838))+(((x1119)*(x1121)))+(((x1118)*(x1119)))+(((pz)*(x1120)))+(((x1117)*(x1118)))+(((IkReal(-1.00000000000000))*(pz)*(x1116)))+(((x1117)*(x1121)))), ((IkReal(-0.636363636546814))+(((pz)*(x1118)))+(((IkReal(-1.00000000000000))*(x1119)*(x1120)))+(((IkReal(-1.00000000000000))*(x1117)*(x1120)))+(((x1116)*(x1117)))+(((pz)*(x1121)))+(((x1116)*(x1119)))));
3420 sj2array[0]=IKsin(j2array[0]);
3421 cj2array[0]=IKcos(j2array[0]);
3422 if( j2array[0] > IKPI )
3423 {
3424  j2array[0]-=IK2PI;
3425 }
3426 else if( j2array[0] < -IKPI )
3427 { j2array[0]+=IK2PI;
3428 }
3429 j2valid[0] = true;
3430 for(int ij2 = 0; ij2 < 1; ++ij2)
3431 {
3432 if( !j2valid[ij2] )
3433 {
3434  continue;
3435 }
3436 _ij2[0] = ij2; _ij2[1] = -1;
3437 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
3438 {
3439 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
3440 {
3441  j2valid[iij2]=false; _ij2[1] = iij2; break;
3442 }
3443 }
3444 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
3445 {
3446 IkReal evalcond[8];
3447 IkReal x1122=IKsin(j2);
3448 IkReal x1123=IKcos(j2);
3449 IkReal x1124=(py)*(py);
3450 IkReal x1125=(px)*(px);
3451 IkReal x1126=(pz)*(pz);
3452 IkReal x1127=((sj0)*(sj1));
3453 IkReal x1128=((py)*(r00));
3454 IkReal x1129=((IkReal(0.190000000000000))*(cj1));
3455 IkReal x1130=((cj0)*(r02));
3456 IkReal x1131=((py)*(r01));
3457 IkReal x1132=((px)*(r01));
3458 IkReal x1133=((IkReal(0.190000000000000))*(sj1));
3459 IkReal x1134=((cj1)*(r02));
3460 IkReal x1135=((pz)*(r00));
3461 IkReal x1136=((cj1)*(sj0));
3462 IkReal x1137=((cj0)*(r00));
3463 IkReal x1138=((IkReal(2.00000000000000))*(sj1));
3464 IkReal x1139=((IkReal(0.700000000000000))*(px));
3465 IkReal x1140=((IkReal(1.00000000000000))*(cj1));
3466 IkReal x1141=((IkReal(2.00000000000000))*(px));
3467 IkReal x1142=((pp)*(r01));
3468 IkReal x1143=((pp)*(sj1));
3469 IkReal x1144=((r02)*(sj1));
3470 IkReal x1145=((pz)*(r01));
3471 IkReal x1146=((px)*(r02));
3472 IkReal x1147=((IkReal(0.700000000000000))*(sj0));
3473 IkReal x1148=((cj0)*(sj1));
3474 IkReal x1149=((r00)*(sj0));
3475 IkReal x1150=((cj0)*(r01));
3476 IkReal x1151=((IkReal(1.00000000000000))*(py));
3477 IkReal x1152=((pz)*(r02));
3478 IkReal x1153=((IkReal(2.00000000000000))*(py));
3479 IkReal x1154=((cj1)*(pz));
3480 IkReal x1155=((IkReal(0.0950000000000000))*(r01));
3481 IkReal x1156=((cj0)*(px));
3482 IkReal x1157=((pz)*(x1138));
3483 IkReal x1158=((cj4)*(x1122));
3484 IkReal x1159=((cj4)*(x1123));
3485 IkReal x1160=((sj4)*(x1122));
3486 IkReal x1161=((IkReal(0.0645444780500000))*(x1123));
3487 IkReal x1162=((IkReal(0.542318181700000))*(x1123));
3488 IkReal x1163=((IkReal(2.00000000000000))*(r01)*(x1124));
3489 evalcond[0]=((x1134)+(((IkReal(-0.992991970000000))*(x1159)))+(((r01)*(x1127)))+(((IkReal(-0.118181820000000))*(x1158)))+(((sj1)*(x1137))));
3490 evalcond[1]=((IkReal(-0.350000000000000))+(((px)*(x1148)))+(((IkReal(-0.0645444780500000))*(x1122)))+(((IkReal(-1.00000000000000))*(x1162)))+(((py)*(x1127)))+(x1154));
3491 evalcond[2]=((x1144)+(((IkReal(0.992991970000000))*(x1158)))+(((IkReal(-0.118181820000000))*(x1159)))+(((IkReal(-1.00000000000000))*(r01)*(x1136)))+(((IkReal(-1.00000000000000))*(x1137)*(x1140))));
3492 evalcond[3]=((((IkReal(-1.00000000000000))*(x1161)))+(((IkReal(0.542318181700000))*(x1122)))+(((pz)*(sj1)))+(((IkReal(-1.00000000000000))*(x1136)*(x1151)))+(((IkReal(-1.00000000000000))*(x1140)*(x1156))));
3493 evalcond[4]=((((x1145)*(x1148)))+(((IkReal(-1.00000000000000))*(x1127)*(x1135)))+(((IkReal(0.0950000000000000))*(cj1)*(x1137)))+(((IkReal(-0.0950000000000000))*(x1144)))+(((x1136)*(x1155)))+(((IkReal(-1.00000000000000))*(sj4)*(x1161)))+(((IkReal(-1.00000000000000))*(x1132)*(x1140)))+(((x1127)*(x1146)))+(((cj1)*(x1128)))+(((IkReal(-1.00000000000000))*(sj1)*(x1130)*(x1151)))+(((IkReal(0.542318181700000))*(x1160))));
3494 evalcond[5]=((((x1135)*(x1136)))+(((sj4)*(x1162)))+(((IkReal(-1.00000000000000))*(px)*(sj0)*(x1134)))+(((IkReal(-0.350000000000000))*(x1149)))+(((IkReal(0.350000000000000))*(x1150)))+(((x1127)*(x1155)))+(((IkReal(-1.00000000000000))*(sj1)*(x1132)))+(((IkReal(-1.00000000000000))*(cj0)*(x1140)*(x1145)))+(((IkReal(0.0950000000000000))*(sj1)*(x1137)))+(((sj1)*(x1128)))+(((cj1)*(py)*(x1130)))+(((IkReal(0.0950000000000000))*(x1134)))+(((IkReal(0.0645444780500000))*(x1160))));
3495 evalcond[6]=((((IkReal(-0.113475000000000))*(x1134)))+(((IkReal(-0.113475000000000))*(sj1)*(x1137)))+(((IkReal(-2.00000000000000))*(x1131)*(x1154)))+(((IkReal(0.0665000000000000))*(x1150)))+(((IkReal(-1.00000000000000))*(cj0)*(x1129)*(x1145)))+(((IkReal(-1.00000000000000))*(x1127)*(x1163)))+(((IkReal(-1.00000000000000))*(px)*(x1130)*(x1157)))+(((IkReal(-1.00000000000000))*(x1127)*(x1152)*(x1153)))+(((IkReal(-1.00000000000000))*(sj0)*(x1129)*(x1146)))+(((sj0)*(x1129)*(x1135)))+(((IkReal(-1.00000000000000))*(cj1)*(x1135)*(x1141)))+(((IkReal(-1.00000000000000))*(x1131)*(x1138)*(x1156)))+(((IkReal(-0.0665000000000000))*(x1149)))+(((x1127)*(x1142)))+(((IkReal(0.700000000000000))*(x1152)))+(((pp)*(x1134)))+(((x1137)*(x1143)))+(((r00)*(x1139)))+(((IkReal(-0.113475000000000))*(r01)*(x1127)))+(((x1128)*(x1133)))+(((py)*(x1129)*(x1130)))+(((IkReal(0.296184679851750))*(x1159)))+(((IkReal(-1.00000000000000))*(x1125)*(x1137)*(x1138)))+(((IkReal(-2.00000000000000))*(x1126)*(x1134)))+(((IkReal(0.0352506812605000))*(x1158)))+(((IkReal(-1.00000000000000))*(x1132)*(x1133)))+(((IkReal(0.700000000000000))*(x1131)))+(((IkReal(-1.00000000000000))*(x1127)*(x1128)*(x1141))));
3496 evalcond[7]=((((IkReal(-0.190000000000000))*(x1127)*(x1146)))+(((IkReal(0.190000000000000))*(x1127)*(x1135)))+(((py)*(x1130)*(x1133)))+(((IkReal(2.00000000000000))*(cj1)*(x1125)*(x1137)))+(((IkReal(-1.00000000000000))*(x1130)*(x1139)))+(((IkReal(-0.296184679851750))*(x1158)))+(((IkReal(-1.00000000000000))*(px)*(x1135)*(x1138)))+(((x1129)*(x1132)))+(((IkReal(-0.131525000000000))*(cj1)*(x1137)))+(((x1145)*(x1147)))+(((cj0)*(cj1)*(x1131)*(x1141)))+(((IkReal(-0.131525000000000))*(r01)*(x1136)))+(((x1136)*(x1163)))+(((x1128)*(x1136)*(x1141)))+(((IkReal(0.131525000000000))*(x1144)))+(((r02)*(x1143)))+(((IkReal(-1.00000000000000))*(x1131)*(x1157)))+(((IkReal(-1.00000000000000))*(cj0)*(x1133)*(x1145)))+(((x1130)*(x1141)*(x1154)))+(((IkReal(0.700000000000000))*(cj0)*(x1135)))+(((IkReal(-1.00000000000000))*(py)*(r02)*(x1147)))+(((IkReal(-1.00000000000000))*(pp)*(x1137)*(x1140)))+(((IkReal(0.0352506812605000))*(x1159)))+(((pz)*(sj0)*(x1134)*(x1153)))+(((IkReal(-1.00000000000000))*(x1136)*(x1142)))+(((IkReal(-1.00000000000000))*(x1128)*(x1129)))+(((IkReal(-1.00000000000000))*(r02)*(x1126)*(x1138))));
3497 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
3498 {
3499 continue;
3500 }
3501 }
3502 
3503 {
3504 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
3505 vinfos[0].jointtype = 1;
3506 vinfos[0].foffset = j0;
3507 vinfos[0].indices[0] = _ij0[0];
3508 vinfos[0].indices[1] = _ij0[1];
3509 vinfos[0].maxsolutions = _nj0;
3510 vinfos[1].jointtype = 1;
3511 vinfos[1].foffset = j1;
3512 vinfos[1].indices[0] = _ij1[0];
3513 vinfos[1].indices[1] = _ij1[1];
3514 vinfos[1].maxsolutions = _nj1;
3515 vinfos[2].jointtype = 1;
3516 vinfos[2].foffset = j2;
3517 vinfos[2].indices[0] = _ij2[0];
3518 vinfos[2].indices[1] = _ij2[1];
3519 vinfos[2].maxsolutions = _nj2;
3520 vinfos[3].jointtype = 1;
3521 vinfos[3].foffset = j3;
3522 vinfos[3].indices[0] = _ij3[0];
3523 vinfos[3].indices[1] = _ij3[1];
3524 vinfos[3].maxsolutions = _nj3;
3525 vinfos[4].jointtype = 1;
3526 vinfos[4].foffset = j4;
3527 vinfos[4].indices[0] = _ij4[0];
3528 vinfos[4].indices[1] = _ij4[1];
3529 vinfos[4].maxsolutions = _nj4;
3530 std::vector<int> vfree(0);
3531 solutions.AddSolution(vinfos,vfree);
3532 }
3533 }
3534 }
3535 
3536 } else
3537 {
3538 if( 1 )
3539 {
3540 continue;
3541 
3542 } else
3543 {
3544 }
3545 }
3546 }
3547 }
3548 }
3549 }
3550 
3551 } else
3552 {
3553 {
3554 IkReal j2array[1], cj2array[1], sj2array[1];
3555 bool j2valid[1]={false};
3556 _nj2 = 1;
3557 IkReal x1164=((cj0)*(sj1));
3558 IkReal x1165=((IkReal(13.0000000000000))*(r00));
3559 IkReal x1166=((cj1)*(pz));
3560 IkReal x1167=((sj0)*(sj1));
3561 IkReal x1168=((IkReal(13.0000000000000))*(sj3));
3562 IkReal x1169=((cj1)*(r02));
3563 IkReal x1170=((IkReal(70.0000000000000))*(cj4));
3564 IkReal x1171=((IkReal(13.0000000000000))*(cj3));
3565 IkReal x1172=((IkReal(200.000000000000))*(cj4)*(sj3));
3566 IkReal x1173=((IkReal(200.000000000000))*(cj3)*(cj4));
3567 if( IKabs(((gconst2)*(((((cj3)*(x1164)*(x1165)))+(((py)*(x1167)*(x1172)))+(((IkReal(110.000000000000))*(r01)*(x1167)))+(((px)*(x1164)*(x1172)))+(((IkReal(-1.00000000000000))*(sj3)*(x1170)))+(((IkReal(110.000000000000))*(x1169)))+(((x1169)*(x1171)))+(((r01)*(x1167)*(x1171)))+(((x1166)*(x1172)))+(((IkReal(110.000000000000))*(r00)*(x1164))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst2)*(((((cj3)*(x1170)))+(((r01)*(x1167)*(x1168)))+(((x1168)*(x1169)))+(((IkReal(-1.00000000000000))*(px)*(x1164)*(x1173)))+(((IkReal(-1.00000000000000))*(x1166)*(x1173)))+(((IkReal(-1.00000000000000))*(py)*(x1167)*(x1173)))+(((sj3)*(x1164)*(x1165))))))) < IKFAST_ATAN2_MAGTHRESH )
3568  continue;
3569 j2array[0]=IKatan2(((gconst2)*(((((cj3)*(x1164)*(x1165)))+(((py)*(x1167)*(x1172)))+(((IkReal(110.000000000000))*(r01)*(x1167)))+(((px)*(x1164)*(x1172)))+(((IkReal(-1.00000000000000))*(sj3)*(x1170)))+(((IkReal(110.000000000000))*(x1169)))+(((x1169)*(x1171)))+(((r01)*(x1167)*(x1171)))+(((x1166)*(x1172)))+(((IkReal(110.000000000000))*(r00)*(x1164)))))), ((gconst2)*(((((cj3)*(x1170)))+(((r01)*(x1167)*(x1168)))+(((x1168)*(x1169)))+(((IkReal(-1.00000000000000))*(px)*(x1164)*(x1173)))+(((IkReal(-1.00000000000000))*(x1166)*(x1173)))+(((IkReal(-1.00000000000000))*(py)*(x1167)*(x1173)))+(((sj3)*(x1164)*(x1165)))))));
3570 sj2array[0]=IKsin(j2array[0]);
3571 cj2array[0]=IKcos(j2array[0]);
3572 if( j2array[0] > IKPI )
3573 {
3574  j2array[0]-=IK2PI;
3575 }
3576 else if( j2array[0] < -IKPI )
3577 { j2array[0]+=IK2PI;
3578 }
3579 j2valid[0] = true;
3580 for(int ij2 = 0; ij2 < 1; ++ij2)
3581 {
3582 if( !j2valid[ij2] )
3583 {
3584  continue;
3585 }
3586 _ij2[0] = ij2; _ij2[1] = -1;
3587 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
3588 {
3589 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
3590 {
3591  j2valid[iij2]=false; _ij2[1] = iij2; break;
3592 }
3593 }
3594 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
3595 {
3596 IkReal evalcond[8];
3597 IkReal x1174=IKsin(j2);
3598 IkReal x1175=IKcos(j2);
3599 IkReal x1176=(py)*(py);
3600 IkReal x1177=(px)*(px);
3601 IkReal x1178=(pz)*(pz);
3602 IkReal x1179=((sj0)*(sj1));
3603 IkReal x1180=((py)*(r00));
3604 IkReal x1181=((IkReal(0.190000000000000))*(cj1));
3605 IkReal x1182=((cj0)*(r02));
3606 IkReal x1183=((py)*(r01));
3607 IkReal x1184=((r01)*(sj1));
3608 IkReal x1185=((IkReal(0.190000000000000))*(px));
3609 IkReal x1186=((cj1)*(r02));
3610 IkReal x1187=((pz)*(r00));
3611 IkReal x1188=((cj1)*(sj0));
3612 IkReal x1189=((cj0)*(r00));
3613 IkReal x1190=((IkReal(2.00000000000000))*(sj1));
3614 IkReal x1191=((cj0)*(pz));
3615 IkReal x1192=((IkReal(1.00000000000000))*(r01));
3616 IkReal x1193=((cj1)*(px));
3617 IkReal x1194=((IkReal(2.00000000000000))*(px));
3618 IkReal x1195=((pp)*(sj1));
3619 IkReal x1196=((r02)*(sj1));
3620 IkReal x1197=((px)*(r02));
3621 IkReal x1198=((IkReal(0.700000000000000))*(pz));
3622 IkReal x1199=((cj0)*(px));
3623 IkReal x1200=((r00)*(sj0));
3624 IkReal x1201=((IkReal(1.00000000000000))*(px));
3625 IkReal x1202=((cj0)*(r01));
3626 IkReal x1203=((IkReal(1.00000000000000))*(cj1));
3627 IkReal x1204=((IkReal(1.00000000000000))*(py));
3628 IkReal x1205=((IkReal(0.700000000000000))*(px));
3629 IkReal x1206=((IkReal(0.190000000000000))*(sj1));
3630 IkReal x1207=((IkReal(0.298275000000000))*(sj3));
3631 IkReal x1208=((cj1)*(pz));
3632 IkReal x1209=((IkReal(0.0950000000000000))*(r01));
3633 IkReal x1210=((IkReal(0.306725000000000))*(cj3)*(cj4));
3634 IkReal x1211=((pz)*(x1190));
3635 IkReal x1212=((IkReal(0.550000000000000))*(x1175));
3636 IkReal x1213=((cj4)*(x1175));
3637 IkReal x1214=((IkReal(0.550000000000000))*(x1174));
3638 IkReal x1215=((IkReal(2.00000000000000))*(py)*(pz));
3639 IkReal x1216=((IkReal(0.0650000000000000))*(cj3)*(sj4));
3640 IkReal x1217=((IkReal(0.0650000000000000))*(x1174));
3641 IkReal x1218=((cj4)*(x1174));
3642 IkReal x1219=((IkReal(2.00000000000000))*(r01)*(x1176));
3643 IkReal x1220=((IkReal(0.0650000000000000))*(sj3)*(x1175));
3644 evalcond[0]=((((sj3)*(x1213)))+(((r01)*(x1179)))+(x1186)+(((cj3)*(x1218)))+(((sj1)*(x1189))));
3645 evalcond[1]=((IkReal(-0.350000000000000))+(((py)*(x1179)))+(((IkReal(-0.0650000000000000))*(cj3)*(x1175)))+(((sj1)*(x1199)))+(((sj3)*(x1217)))+(((IkReal(-1.00000000000000))*(x1212)))+(x1208));
3646 evalcond[2]=((x1196)+(((IkReal(-1.00000000000000))*(x1189)*(x1203)))+(((IkReal(-1.00000000000000))*(sj3)*(x1218)))+(((IkReal(-1.00000000000000))*(x1188)*(x1192)))+(((cj3)*(x1213))));
3647 evalcond[3]=((((pz)*(sj1)))+(x1220)+(((IkReal(-1.00000000000000))*(x1188)*(x1204)))+(((cj3)*(x1217)))+(x1214)+(((IkReal(-1.00000000000000))*(cj0)*(x1193))));
3648 evalcond[4]=((((IkReal(-0.0950000000000000))*(x1196)))+(((sj4)*(x1214)))+(((cj1)*(x1180)))+(((x1174)*(x1216)))+(((x1188)*(x1209)))+(((x1184)*(x1191)))+(((sj4)*(x1220)))+(((IkReal(-1.00000000000000))*(x1179)*(x1187)))+(((IkReal(-1.00000000000000))*(x1192)*(x1193)))+(((x1179)*(x1197)))+(((IkReal(0.0950000000000000))*(cj1)*(x1189)))+(((IkReal(-1.00000000000000))*(sj1)*(x1182)*(x1204))));
3649 evalcond[5]=((((IkReal(0.0950000000000000))*(x1186)))+(((IkReal(-1.00000000000000))*(x1184)*(x1201)))+(((IkReal(0.350000000000000))*(x1202)))+(((sj1)*(x1180)))+(((x1179)*(x1209)))+(((IkReal(-0.350000000000000))*(x1200)))+(((sj4)*(x1212)))+(((cj1)*(py)*(x1182)))+(((IkReal(-1.00000000000000))*(cj1)*(x1191)*(x1192)))+(((x1175)*(x1216)))+(((x1187)*(x1188)))+(((IkReal(0.0950000000000000))*(sj1)*(x1189)))+(((IkReal(-1.00000000000000))*(sj0)*(x1186)*(x1201)))+(((IkReal(-1.00000000000000))*(sj3)*(sj4)*(x1217))));
3650 evalcond[6]=((((IkReal(-0.113475000000000))*(sj1)*(x1189)))+(((IkReal(-1.00000000000000))*(x1179)*(x1180)*(x1194)))+(((IkReal(-2.00000000000000))*(x1183)*(x1208)))+(((pp)*(r01)*(x1179)))+(((r00)*(x1205)))+(((IkReal(-2.00000000000000))*(x1187)*(x1193)))+(((sj0)*(x1181)*(x1187)))+(((pp)*(x1186)))+(((IkReal(-1.00000000000000))*(x1184)*(x1185)))+(((x1174)*(x1210)))+(((IkReal(-0.113475000000000))*(x1186)))+(((IkReal(-1.00000000000000))*(x1177)*(x1189)*(x1190)))+(((IkReal(-1.00000000000000))*(x1179)*(x1219)))+(((IkReal(-1.00000000000000))*(x1207)*(x1213)))+(((IkReal(-1.00000000000000))*(r01)*(x1181)*(x1191)))+(((x1189)*(x1195)))+(((IkReal(-0.0665000000000000))*(x1200)))+(((r02)*(x1198)))+(((IkReal(-1.00000000000000))*(sj0)*(x1181)*(x1197)))+(((IkReal(0.700000000000000))*(x1183)))+(((IkReal(-1.00000000000000))*(x1183)*(x1190)*(x1199)))+(((IkReal(-1.00000000000000))*(px)*(x1182)*(x1211)))+(((IkReal(0.0715000000000000))*(x1218)))+(((IkReal(0.0665000000000000))*(x1202)))+(((x1180)*(x1206)))+(((py)*(x1181)*(x1182)))+(((IkReal(-2.00000000000000))*(x1178)*(x1186)))+(((IkReal(-0.113475000000000))*(r01)*(x1179)))+(((IkReal(-1.00000000000000))*(r02)*(x1179)*(x1215))));
3651 evalcond[7]=((((IkReal(-1.00000000000000))*(r02)*(x1178)*(x1190)))+(((IkReal(-0.131525000000000))*(cj1)*(x1189)))+(((IkReal(0.0715000000000000))*(x1213)))+(((IkReal(-0.131525000000000))*(r01)*(x1188)))+(((IkReal(0.131525000000000))*(x1196)))+(((x1188)*(x1219)))+(((IkReal(-1.00000000000000))*(px)*(x1187)*(x1190)))+(((IkReal(-1.00000000000000))*(pp)*(x1188)*(x1192)))+(((IkReal(-1.00000000000000))*(r02)*(x1179)*(x1185)))+(((IkReal(-1.00000000000000))*(x1180)*(x1181)))+(((py)*(x1182)*(x1206)))+(((r02)*(x1195)))+(((IkReal(-1.00000000000000))*(pp)*(x1189)*(x1203)))+(((sj0)*(x1186)*(x1215)))+(((x1207)*(x1218)))+(((IkReal(-1.00000000000000))*(x1183)*(x1211)))+(((IkReal(-1.00000000000000))*(x1182)*(x1205)))+(((IkReal(2.00000000000000))*(cj1)*(x1177)*(x1189)))+(((IkReal(-0.700000000000000))*(py)*(r02)*(sj0)))+(((x1180)*(x1188)*(x1194)))+(((IkReal(2.00000000000000))*(pz)*(x1182)*(x1193)))+(((IkReal(0.700000000000000))*(cj0)*(x1187)))+(((IkReal(0.190000000000000))*(x1179)*(x1187)))+(((px)*(r01)*(x1181)))+(((IkReal(-0.190000000000000))*(x1184)*(x1191)))+(((x1175)*(x1210)))+(((r01)*(sj0)*(x1198)))+(((IkReal(2.00000000000000))*(cj0)*(x1183)*(x1193))));
3652 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
3653 {
3654 continue;
3655 }
3656 }
3657 
3658 {
3659 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
3660 vinfos[0].jointtype = 1;
3661 vinfos[0].foffset = j0;
3662 vinfos[0].indices[0] = _ij0[0];
3663 vinfos[0].indices[1] = _ij0[1];
3664 vinfos[0].maxsolutions = _nj0;
3665 vinfos[1].jointtype = 1;
3666 vinfos[1].foffset = j1;
3667 vinfos[1].indices[0] = _ij1[0];
3668 vinfos[1].indices[1] = _ij1[1];
3669 vinfos[1].maxsolutions = _nj1;
3670 vinfos[2].jointtype = 1;
3671 vinfos[2].foffset = j2;
3672 vinfos[2].indices[0] = _ij2[0];
3673 vinfos[2].indices[1] = _ij2[1];
3674 vinfos[2].maxsolutions = _nj2;
3675 vinfos[3].jointtype = 1;
3676 vinfos[3].foffset = j3;
3677 vinfos[3].indices[0] = _ij3[0];
3678 vinfos[3].indices[1] = _ij3[1];
3679 vinfos[3].maxsolutions = _nj3;
3680 vinfos[4].jointtype = 1;
3681 vinfos[4].foffset = j4;
3682 vinfos[4].indices[0] = _ij4[0];
3683 vinfos[4].indices[1] = _ij4[1];
3684 vinfos[4].maxsolutions = _nj4;
3685 std::vector<int> vfree(0);
3686 solutions.AddSolution(vinfos,vfree);
3687 }
3688 }
3689 }
3690 
3691 }
3692 
3693 }
3694 
3695 } else
3696 {
3697 {
3698 IkReal j2array[1], cj2array[1], sj2array[1];
3699 bool j2valid[1]={false};
3700 _nj2 = 1;
3701 IkReal x1221=((IkReal(1.00000000000000))*(sj1));
3702 IkReal x1222=((IkReal(1.00000000000000))*(sj3));
3703 IkReal x1223=((cj0)*(r00));
3704 IkReal x1224=((r01)*(sj0));
3705 IkReal x1225=((cj3)*(r02));
3706 IkReal x1226=((cj3)*(x1224));
3707 IkReal x1227=((cj1)*(x1223));
3708 if( IKabs(((gconst1)*(((((r02)*(sj1)*(sj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x1225)))+(((IkReal(-1.00000000000000))*(x1222)*(x1227)))+(((IkReal(-1.00000000000000))*(cj1)*(x1222)*(x1224)))+(((IkReal(-1.00000000000000))*(x1221)*(x1226)))+(((IkReal(-1.00000000000000))*(cj3)*(x1221)*(x1223))))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((gconst1)*(((((cj3)*(x1227)))+(((IkReal(-1.00000000000000))*(cj1)*(r02)*(x1222)))+(((IkReal(-1.00000000000000))*(x1221)*(x1225)))+(((cj1)*(x1226)))+(((IkReal(-1.00000000000000))*(sj3)*(x1221)*(x1223)))+(((IkReal(-1.00000000000000))*(sj3)*(x1221)*(x1224))))))) < IKFAST_ATAN2_MAGTHRESH )
3709  continue;
3710 j2array[0]=IKatan2(((gconst1)*(((((r02)*(sj1)*(sj3)))+(((IkReal(-1.00000000000000))*(cj1)*(x1225)))+(((IkReal(-1.00000000000000))*(x1222)*(x1227)))+(((IkReal(-1.00000000000000))*(cj1)*(x1222)*(x1224)))+(((IkReal(-1.00000000000000))*(x1221)*(x1226)))+(((IkReal(-1.00000000000000))*(cj3)*(x1221)*(x1223)))))), ((gconst1)*(((((cj3)*(x1227)))+(((IkReal(-1.00000000000000))*(cj1)*(r02)*(x1222)))+(((IkReal(-1.00000000000000))*(x1221)*(x1225)))+(((cj1)*(x1226)))+(((IkReal(-1.00000000000000))*(sj3)*(x1221)*(x1223)))+(((IkReal(-1.00000000000000))*(sj3)*(x1221)*(x1224)))))));
3711 sj2array[0]=IKsin(j2array[0]);
3712 cj2array[0]=IKcos(j2array[0]);
3713 if( j2array[0] > IKPI )
3714 {
3715  j2array[0]-=IK2PI;
3716 }
3717 else if( j2array[0] < -IKPI )
3718 { j2array[0]+=IK2PI;
3719 }
3720 j2valid[0] = true;
3721 for(int ij2 = 0; ij2 < 1; ++ij2)
3722 {
3723 if( !j2valid[ij2] )
3724 {
3725  continue;
3726 }
3727 _ij2[0] = ij2; _ij2[1] = -1;
3728 for(int iij2 = ij2+1; iij2 < 1; ++iij2)
3729 {
3730 if( j2valid[iij2] && IKabs(cj2array[ij2]-cj2array[iij2]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij2]-sj2array[iij2]) < IKFAST_SOLUTION_THRESH )
3731 {
3732  j2valid[iij2]=false; _ij2[1] = iij2; break;
3733 }
3734 }
3735 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
3736 {
3737 IkReal evalcond[8];
3738 IkReal x1228=IKsin(j2);
3739 IkReal x1229=IKcos(j2);
3740 IkReal x1230=(py)*(py);
3741 IkReal x1231=(px)*(px);
3742 IkReal x1232=(pz)*(pz);
3743 IkReal x1233=((sj0)*(sj1));
3744 IkReal x1234=((py)*(r00));
3745 IkReal x1235=((IkReal(0.190000000000000))*(cj1));
3746 IkReal x1236=((cj0)*(r02));
3747 IkReal x1237=((py)*(r01));
3748 IkReal x1238=((r01)*(sj1));
3749 IkReal x1239=((IkReal(0.190000000000000))*(px));
3750 IkReal x1240=((cj1)*(r02));
3751 IkReal x1241=((pz)*(r00));
3752 IkReal x1242=((cj1)*(sj0));
3753 IkReal x1243=((cj0)*(r00));
3754 IkReal x1244=((IkReal(2.00000000000000))*(sj1));
3755 IkReal x1245=((cj0)*(pz));
3756 IkReal x1246=((IkReal(1.00000000000000))*(r01));
3757 IkReal x1247=((cj1)*(px));
3758 IkReal x1248=((IkReal(2.00000000000000))*(px));
3759 IkReal x1249=((pp)*(sj1));
3760 IkReal x1250=((r02)*(sj1));
3761 IkReal x1251=((px)*(r02));
3762 IkReal x1252=((IkReal(0.700000000000000))*(pz));
3763 IkReal x1253=((cj0)*(px));
3764 IkReal x1254=((r00)*(sj0));
3765 IkReal x1255=((IkReal(1.00000000000000))*(px));
3766 IkReal x1256=((cj0)*(r01));
3767 IkReal x1257=((IkReal(1.00000000000000))*(cj1));
3768 IkReal x1258=((IkReal(1.00000000000000))*(py));
3769 IkReal x1259=((IkReal(0.700000000000000))*(px));
3770 IkReal x1260=((IkReal(0.190000000000000))*(sj1));
3771 IkReal x1261=((IkReal(0.298275000000000))*(sj3));
3772 IkReal x1262=((cj1)*(pz));
3773 IkReal x1263=((IkReal(0.0950000000000000))*(r01));
3774 IkReal x1264=((IkReal(0.306725000000000))*(cj3)*(cj4));
3775 IkReal x1265=((pz)*(x1244));
3776 IkReal x1266=((IkReal(0.550000000000000))*(x1229));
3777 IkReal x1267=((cj4)*(x1229));
3778 IkReal x1268=((IkReal(0.550000000000000))*(x1228));
3779 IkReal x1269=((IkReal(2.00000000000000))*(py)*(pz));
3780 IkReal x1270=((IkReal(0.0650000000000000))*(cj3)*(sj4));
3781 IkReal x1271=((IkReal(0.0650000000000000))*(x1228));
3782 IkReal x1272=((cj4)*(x1228));
3783 IkReal x1273=((IkReal(2.00000000000000))*(r01)*(x1230));
3784 IkReal x1274=((IkReal(0.0650000000000000))*(sj3)*(x1229));
3785 evalcond[0]=((x1240)+(((r01)*(x1233)))+(((cj3)*(x1272)))+(((sj1)*(x1243)))+(((sj3)*(x1267))));
3786 evalcond[1]=((IkReal(-0.350000000000000))+(((py)*(x1233)))+(((IkReal(-1.00000000000000))*(x1266)))+(((sj3)*(x1271)))+(((IkReal(-0.0650000000000000))*(cj3)*(x1229)))+(((sj1)*(x1253)))+(x1262));
3787 evalcond[2]=((((IkReal(-1.00000000000000))*(x1243)*(x1257)))+(((IkReal(-1.00000000000000))*(sj3)*(x1272)))+(((cj3)*(x1267)))+(x1250)+(((IkReal(-1.00000000000000))*(x1242)*(x1246))));
3788 evalcond[3]=((((cj3)*(x1271)))+(((pz)*(sj1)))+(((IkReal(-1.00000000000000))*(cj0)*(x1247)))+(x1274)+(((IkReal(-1.00000000000000))*(x1242)*(x1258)))+(x1268));
3789 evalcond[4]=((((cj1)*(x1234)))+(((x1228)*(x1270)))+(((x1242)*(x1263)))+(((IkReal(-1.00000000000000))*(x1246)*(x1247)))+(((IkReal(-1.00000000000000))*(sj1)*(x1236)*(x1258)))+(((x1233)*(x1251)))+(((IkReal(-0.0950000000000000))*(x1250)))+(((IkReal(0.0950000000000000))*(cj1)*(x1243)))+(((x1238)*(x1245)))+(((IkReal(-1.00000000000000))*(x1233)*(x1241)))+(((sj4)*(x1268)))+(((sj4)*(x1274))));
3790 evalcond[5]=((((IkReal(-1.00000000000000))*(cj1)*(x1245)*(x1246)))+(((x1229)*(x1270)))+(((IkReal(0.350000000000000))*(x1256)))+(((IkReal(0.0950000000000000))*(sj1)*(x1243)))+(((IkReal(-1.00000000000000))*(sj0)*(x1240)*(x1255)))+(((sj1)*(x1234)))+(((sj4)*(x1266)))+(((x1241)*(x1242)))+(((IkReal(0.0950000000000000))*(x1240)))+(((IkReal(-1.00000000000000))*(sj3)*(sj4)*(x1271)))+(((cj1)*(py)*(x1236)))+(((IkReal(-1.00000000000000))*(x1238)*(x1255)))+(((IkReal(-0.350000000000000))*(x1254)))+(((x1233)*(x1263))));
3791 evalcond[6]=((((IkReal(-1.00000000000000))*(px)*(x1236)*(x1265)))+(((IkReal(-2.00000000000000))*(x1241)*(x1247)))+(((x1228)*(x1264)))+(((x1234)*(x1260)))+(((IkReal(-1.00000000000000))*(r01)*(x1235)*(x1245)))+(((IkReal(-1.00000000000000))*(x1231)*(x1243)*(x1244)))+(((r02)*(x1252)))+(((IkReal(-0.113475000000000))*(x1240)))+(((IkReal(-1.00000000000000))*(x1233)*(x1273)))+(((IkReal(-2.00000000000000))*(x1237)*(x1262)))+(((r00)*(x1259)))+(((IkReal(-0.113475000000000))*(r01)*(x1233)))+(((IkReal(0.0665000000000000))*(x1256)))+(((IkReal(0.0715000000000000))*(x1272)))+(((IkReal(-1.00000000000000))*(x1233)*(x1234)*(x1248)))+(((IkReal(-1.00000000000000))*(r02)*(x1233)*(x1269)))+(((IkReal(-1.00000000000000))*(x1238)*(x1239)))+(((pp)*(x1240)))+(((IkReal(0.700000000000000))*(x1237)))+(((IkReal(-1.00000000000000))*(x1261)*(x1267)))+(((sj0)*(x1235)*(x1241)))+(((pp)*(r01)*(x1233)))+(((IkReal(-0.113475000000000))*(sj1)*(x1243)))+(((IkReal(-2.00000000000000))*(x1232)*(x1240)))+(((IkReal(-1.00000000000000))*(x1237)*(x1244)*(x1253)))+(((IkReal(-0.0665000000000000))*(x1254)))+(((x1243)*(x1249)))+(((py)*(x1235)*(x1236)))+(((IkReal(-1.00000000000000))*(sj0)*(x1235)*(x1251))));
3792 evalcond[7]=((((IkReal(0.190000000000000))*(x1233)*(x1241)))+(((r01)*(sj0)*(x1252)))+(((x1261)*(x1272)))+(((IkReal(0.131525000000000))*(x1250)))+(((r02)*(x1249)))+(((x1242)*(x1273)))+(((IkReal(-1.00000000000000))*(x1236)*(x1259)))+(((sj0)*(x1240)*(x1269)))+(((IkReal(2.00000000000000))*(cj0)*(x1237)*(x1247)))+(((IkReal(2.00000000000000))*(pz)*(x1236)*(x1247)))+(((IkReal(-1.00000000000000))*(r02)*(x1232)*(x1244)))+(((IkReal(0.700000000000000))*(cj0)*(x1241)))+(((IkReal(-1.00000000000000))*(pp)*(x1243)*(x1257)))+(((IkReal(-1.00000000000000))*(x1237)*(x1265)))+(((IkReal(-1.00000000000000))*(r02)*(x1233)*(x1239)))+(((IkReal(-0.190000000000000))*(x1238)*(x1245)))+(((IkReal(-0.131525000000000))*(r01)*(x1242)))+(((IkReal(0.0715000000000000))*(x1267)))+(((IkReal(-1.00000000000000))*(pp)*(x1242)*(x1246)))+(((IkReal(-0.131525000000000))*(cj1)*(x1243)))+(((IkReal(-0.700000000000000))*(py)*(r02)*(sj0)))+(((x1234)*(x1242)*(x1248)))+(((px)*(r01)*(x1235)))+(((IkReal(-1.00000000000000))*(x1234)*(x1235)))+(((py)*(x1236)*(x1260)))+(((IkReal(2.00000000000000))*(cj1)*(x1231)*(x1243)))+(((x1229)*(x1264)))+(((IkReal(-1.00000000000000))*(px)*(x1241)*(x1244))));
3793 if( IKabs(evalcond[0]) > 0.000001 || IKabs(evalcond[1]) > 0.000001 || IKabs(evalcond[2]) > 0.000001 || IKabs(evalcond[3]) > 0.000001 || IKabs(evalcond[4]) > 0.000001 || IKabs(evalcond[5]) > 0.000001 || IKabs(evalcond[6]) > 0.000001 || IKabs(evalcond[7]) > 0.000001 )
3794 {
3795 continue;
3796 }
3797 }
3798 
3799 {
3800 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
3801 vinfos[0].jointtype = 1;
3802 vinfos[0].foffset = j0;
3803 vinfos[0].indices[0] = _ij0[0];
3804 vinfos[0].indices[1] = _ij0[1];
3805 vinfos[0].maxsolutions = _nj0;
3806 vinfos[1].jointtype = 1;
3807 vinfos[1].foffset = j1;
3808 vinfos[1].indices[0] = _ij1[0];
3809 vinfos[1].indices[1] = _ij1[1];
3810 vinfos[1].maxsolutions = _nj1;
3811 vinfos[2].jointtype = 1;
3812 vinfos[2].foffset = j2;
3813 vinfos[2].indices[0] = _ij2[0];
3814 vinfos[2].indices[1] = _ij2[1];
3815 vinfos[2].maxsolutions = _nj2;
3816 vinfos[3].jointtype = 1;
3817 vinfos[3].foffset = j3;
3818 vinfos[3].indices[0] = _ij3[0];
3819 vinfos[3].indices[1] = _ij3[1];
3820 vinfos[3].maxsolutions = _nj3;
3821 vinfos[4].jointtype = 1;
3822 vinfos[4].foffset = j4;
3823 vinfos[4].indices[0] = _ij4[0];
3824 vinfos[4].indices[1] = _ij4[1];
3825 vinfos[4].maxsolutions = _nj4;
3826 std::vector<int> vfree(0);
3827 solutions.AddSolution(vinfos,vfree);
3828 }
3829 }
3830 }
3831 
3832 }
3833 
3834 }
3835 }
3836 }
3837 
3838 }
3839 
3840 }
3841 }
3842 }
3843  }
3844 }
3845 }
3846 
3847 }
3848 
3849 }
3850 }
3851 return solutions.GetNumSolutions()>0;
3852 }
3853 static inline void polyroots4(IkReal rawcoeffs[4+1], IkReal rawroots[4], int& numroots)
3854 {
3855  using std::complex;
3856  IKFAST_ASSERT(rawcoeffs[0] != 0);
3857  const IkReal tol = 128.0*std::numeric_limits<IkReal>::epsilon();
3858  const IkReal tolsqrt = sqrt(std::numeric_limits<IkReal>::epsilon());
3859  complex<IkReal> coeffs[4];
3860  const int maxsteps = 110;
3861  for(int i = 0; i < 4; ++i) {
3862  coeffs[i] = complex<IkReal>(rawcoeffs[i+1]/rawcoeffs[0]);
3863  }
3864  complex<IkReal> roots[4];
3865  IkReal err[4];
3866  roots[0] = complex<IkReal>(1,0);
3867  roots[1] = complex<IkReal>(0.4,0.9); // any complex number not a root of unity works
3868  err[0] = 1.0;
3869  err[1] = 1.0;
3870  for(int i = 2; i < 4; ++i) {
3871  roots[i] = roots[i-1]*roots[1];
3872  err[i] = 1.0;
3873  }
3874  for(int step = 0; step < maxsteps; ++step) {
3875  bool changed = false;
3876  for(int i = 0; i < 4; ++i) {
3877  if ( err[i] >= tol ) {
3878  changed = true;
3879  // evaluate
3880  complex<IkReal> x = roots[i] + coeffs[0];
3881  for(int j = 1; j < 4; ++j) {
3882  x = roots[i] * x + coeffs[j];
3883  }
3884  for(int j = 0; j < 4; ++j) {
3885  if( i != j ) {
3886  if( roots[i] != roots[j] ) {
3887  x /= (roots[i] - roots[j]);
3888  }
3889  }
3890  }
3891  roots[i] -= x;
3892  err[i] = abs(x);
3893  }
3894  }
3895  if( !changed ) {
3896  break;
3897  }
3898  }
3899 
3900  numroots = 0;
3901  bool visited[4] = {false};
3902  for(int i = 0; i < 4; ++i) {
3903  if( !visited[i] ) {
3904  // might be a multiple root, in which case it will have more error than the other roots
3905  // find any neighboring roots, and take the average
3906  complex<IkReal> newroot=roots[i];
3907  int n = 1;
3908  for(int j = i+1; j < 4; ++j) {
3909  if( abs(roots[i]-roots[j]) < 8*tolsqrt ) {
3910  newroot += roots[j];
3911  n += 1;
3912  visited[j] = true;
3913  }
3914  }
3915  if( n > 1 ) {
3916  newroot /= n;
3917  }
3918  // there are still cases where even the mean is not accurate enough, until a better multi-root algorithm is used, need to use the sqrt
3919  if( IKabs(imag(newroot)) < tolsqrt ) {
3920  rawroots[numroots++] = real(newroot);
3921  }
3922  }
3923  }
3924 }
3925 };
3926 
3927 
3930 IKFAST_API bool ComputeIk(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, IkSolutionListBase<IkReal>& solutions) {
3931 IKSolver solver;
3932 return solver.ComputeIk(eetrans,eerot,pfree,solutions);
3933 }
3934 
3935 IKFAST_API const char* GetKinematicsHash() { return "d2942246f1616a588c32a0fec55a0c4b"; }
3936 
3937 IKFAST_API const char* GetIkFastVersion() { return IKFAST_STRINGIZE(IKFAST_VERSION); }
3938 
3939 #ifdef IKFAST_NAMESPACE
3940 } // end namespace
3941 #endif
3942 
3943 #ifndef IKFAST_NO_MAIN
3944 #include <stdio.h>
3945 #include <stdlib.h>
3946 #ifdef IKFAST_NAMESPACE
3947 using namespace IKFAST_NAMESPACE;
3948 #endif
3949 int main(int argc, char** argv)
3950 {
3951  if( argc != 12+GetNumFreeParameters()+1 ) {
3952  printf("\nUsage: ./ik r00 r01 r02 t0 r10 r11 r12 t1 r20 r21 r22 t2 free0 ...\n\n"
3953  "Returns the ik solutions given the transformation of the end effector specified by\n"
3954  "a 3x3 rotation R (rXX), and a 3x1 translation (tX).\n"
3955  "There are %d free parameters that have to be specified.\n\n",GetNumFreeParameters());
3956  return 1;
3957  }
3958 
3959  IkSolutionList<IkReal> solutions;
3960  std::vector<IkReal> vfree(GetNumFreeParameters());
3961  IkReal eerot[9],eetrans[3];
3962  eerot[0] = atof(argv[1]); eerot[1] = atof(argv[2]); eerot[2] = atof(argv[3]); eetrans[0] = atof(argv[4]);
3963  eerot[3] = atof(argv[5]); eerot[4] = atof(argv[6]); eerot[5] = atof(argv[7]); eetrans[1] = atof(argv[8]);
3964  eerot[6] = atof(argv[9]); eerot[7] = atof(argv[10]); eerot[8] = atof(argv[11]); eetrans[2] = atof(argv[12]);
3965  for(std::size_t i = 0; i < vfree.size(); ++i)
3966  vfree[i] = atof(argv[13+i]);
3967  bool bSuccess = ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions);
3968 
3969  if( !bSuccess ) {
3970  fprintf(stderr,"Failed to get ik solution\n");
3971  return -1;
3972  }
3973 
3974  printf("Found %d ik solutions:\n", (int)solutions.GetNumSolutions());
3975  std::vector<IkReal> solvalues(GetNumJoints());
3976  for(std::size_t i = 0; i < solutions.GetNumSolutions(); ++i) {
3977  const IkSolutionBase<IkReal>& sol = solutions.GetSolution(i);
3978  printf("sol%d (free=%d): ", (int)i, (int)sol.GetFree().size());
3979  std::vector<IkReal> vsolfree(sol.GetFree().size());
3980  sol.GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL);
3981  for( std::size_t j = 0; j < solvalues.size(); ++j)
3982  printf("%.15f, ", solvalues[j]);
3983  printf("\n");
3984  }
3985  return 0;
3986 }
3987 
3988 #endif
virtual const IkSolutionBase< T > & GetSolution(size_t index) const
returns the solution pointer
void dgetrf_(const int *m, const int *n, double *a, const int *lda, int *ipiv, int *info)
IKFAST_API int GetIkType()
INLINE Rall1d< T, V, S > log(const Rall1d< T, V, S > &arg)
virtual size_t GetNumSolutions() const
returns the number of solutions stored
IKFAST_API const char * GetIkFastVersion()
The discrete solutions are returned in this structure.
IKFAST_API const char * GetKinematicsHash()
void dgeev_(const char *jobvl, const char *jobvr, const int *n, double *a, const int *lda, double *wr, double *wi, double *vl, const int *ldvl, double *vr, const int *ldvr, double *work, const int *lwork, int *info)
IKFAST_API void ComputeFk(const IkReal *j, IkReal *eetrans, IkReal *eerot)
virtual const std::vector< int > & GetFree() const =0
Gets the indices of the configuration space that have to be preset before a full solution can be retu...
void dgetri_(const int *n, const double *a, const int *lda, int *ipiv, double *work, const int *lwork, int *info)
float IKatan2(float fy, float fx)
virtual size_t AddSolution(const std::vector< IkSingleDOFSolutionBase< T > > &vinfos, const std::vector< int > &vfree)=0
add one solution and return its index for later retrieval
INLINE Rall1d< T, V, S > atan(const Rall1d< T, V, S > &x)
INLINE Rall1d< T, V, S > asin(const Rall1d< T, V, S > &x)
float IKfmod(float x, float y)
IKFAST_API int * GetFreeParameters()
#define IKFAST_VERSION
Header file for all ikfast c++ files/shared objects.
virtual void Clear()=0
clears all current solutions, note that any memory addresses returned from GetSolution will be invali...
IKFAST_API bool ComputeIk(const IkReal *eetrans, const IkReal *eerot, const IkReal *pfree, IkSolutionListBase< IkReal > &solutions)
void dgesv_(const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info)
INLINE Rall1d< T, V, S > sqrt(const Rall1d< T, V, S > &arg)
IKFAST_API int GetNumFreeParameters()
void dgetrs_(const char *trans, const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info)
int main(int argc, char **argv)
virtual void GetSolution(T *solution, const T *freevalues) const =0
gets a concrete solution
bool ComputeIk(const IkReal *eetrans, const IkReal *eerot, const IkReal *pfree, IkSolutionListBase< IkReal > &solutions)
static void polyroots4(IkReal rawcoeffs[4+1], IkReal rawroots[4], int &numroots)
unsigned int step
INLINE Rall1d< T, V, S > acos(const Rall1d< T, V, S > &x)
INLINE Rall1d< T, V, S > abs(const Rall1d< T, V, S > &x)
Default implementation of IkSolutionListBase.
INLINE Rall1d< T, V, S > atan2(const Rall1d< T, V, S > &y, const Rall1d< T, V, S > &x)
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
INLINE Rall1d< T, V, S > tan(const Rall1d< T, V, S > &arg)
double x
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
IKFAST_API int GetIkRealSize()
virtual size_t GetNumSolutions() const =0
returns the number of solutions stored
void zgetrf_(const int *m, const int *n, std::complex< double > *a, const int *lda, int *ipiv, int *info)
IKFAST_API int GetNumJoints()


fanuc_m430ia_moveit_plugins
Author(s): G.A. vd. Hoorn (TU Delft Robotics Institute)
autogenerated on Sun Apr 4 2021 02:20:47