#include <iostream>
#include <vector>
#include <assert.h>

#include <Debug.hh>
#include <Mathematics/Bsplines.hh>

using namespace::std;
using namespace::PatternGeneratorJRL;


Bsplines::Bsplines(int degree)
{
    m_degree = degree;
    m_control_points.clear();
    m_knot.clear();
}

Bsplines::~Bsplines()
{
}

void Bsplines::GenerateDegree()
{
    int degree = (m_knot.size()-1) - (m_control_points.size()-1) -1;
    if (degree < 0)
    {
        cout << " Attention !! degree is smaller than 0 " << endl;
    }
    m_degree = (unsigned)degree ;
}

//void Bsplines::GenerateKnotVector(std::string method)
//{
//    /*Calculer set of parameters*/
//    unsigned int i,j;
//    vector<double> set_of_pam;

//        if (method == "centripetal")
//        {
//            //cout << "centripetal" << endl;
//            set_of_pam.clear();
//            set_of_pam.reserve(m_control_points.size());
//            cout << m_control_points.size() << endl;
//            double L = 0.0;
//            double D = 0.0;
//            for (i=0;i<m_control_points.size()-1;i++)
//            {
//                L += sqrt ( sqrt(((m_control_points[i].x - m_control_points[i+1].x)*(m_control_points[i].x - m_control_points[i+1].x)) +
//                              ((m_control_points[i].y - m_control_points[i+1].y)*(m_control_points[i].y - m_control_points[i+1].y)) ) );
//            }
//            for (i=0;i<m_control_points.size();i++)
//            {
//                if (i == 0)
//                {
//                    set_of_pam.push_back(0.0);
//                }
//                else if (i == m_control_points.size()-1)
//                {
//                    set_of_pam.push_back(1.0);
//                }
//                else
//                {
//                    D += sqrt ( sqrt(((m_control_points[i].x - m_control_points[i+1].x)*(m_control_points[i].x - m_control_points[i+1].x)) +
//                              ((m_control_points[i].y - m_control_points[i+1].y)*(m_control_points[i].y - m_control_points[i+1].y)) ) );
//                    set_of_pam.push_back(D/L);
//                }
//            }

//            m_knot.clear();
//            double U = 0.0;
//            for (i=0;i<=m_degree;i++)
//            {
//                m_knot.push_back(0.0);
//            }

//            if (m_control_points.size()-1>=m_degree)
//            {
//                for (j=1;j<=m_control_points.size()-1-m_degree;j++)
//                {
//                    i=j;
//                    U=0.0;
//                    while (i<=m_degree-1+j)
//                    {
//                        U +=set_of_pam[i];
//                        i++;
//                    }
//                    m_knot.push_back(U/double(m_degree));
//                }
//            }

//            for (i=0;i<=m_degree;i++)
//            {
//                m_knot.push_back(1.0);
//            }
//            if (m_knot.size() - 1 != m_control_points.size() + m_degree)
//            {
//                cout << "Knot vector cant be created. m_control_points.size()-1>=m_degree "<< endl;
//                m_knot.clear();
//            }

//        }

//        else if (method =="universal")
//        {
//            m_knot.clear();
//            //cout << "universal" << endl;
//            double U=0;
//            for (i=0;i<=m_degree;i++)
//            {
//                m_knot.push_back(0.0);
//            }
//            for (i=1;i<=m_control_points.size()-1-m_degree;i++)
//            {
//                U = double(i)/(m_control_points.size()-1-m_degree+1);
//                m_knot.push_back(U);
//            }
//            for (i=0;i<=m_degree;i++)
//            {
//                m_knot.push_back(1.0);
//            }

//        }
//}

int Bsplines::ComputeBasisFunctions(double t)
{
  m_basis_functions.resize(m_knot.size()-m_degree-1);
  // number of basis function for one specific order
  unsigned int n;
  // temporary variables usefull t test divisions by 0
  double tmp1 (0.0), tmp2 (0.0), tmp3 (0.0), tmp4(0.0) ;
  // handle limit conditions
  bool is_in ;

  // compute the basis function of t : Nij(t)
  for(unsigned int j=0 ; j <= m_degree ; j++)
  {
    n = m_knot.size() - j - 2;
    m_basis_functions[j].resize(n+1,0.0);

    for(unsigned int i=0 ; i<=n ; i++)
    {
      if ( j == 0)
      {
        if(t==1)
          is_in = (m_knot[i] <  t) && (t <= m_knot[i+1]);
        else
          is_in = (m_knot[i] <= t) && (t <  m_knot[i+1]);

        if ( is_in )
          m_basis_functions[j][i] = 1.0;
        else
          m_basis_functions[j][i] = 0.0;
      }
      else
      {
        if ( m_knot[i] == m_knot[i+j] )
          tmp1 = 0.0 ;
        else
          tmp1 = (t - m_knot[i]) / (m_knot[i+j]-m_knot[i]) * m_basis_functions[j-1][i] ;

        if (m_knot[i+j+1] == m_knot[i+1])
          tmp2 = 0.0 ;
        else
          tmp2 = (m_knot[i+j+1] - t) / (m_knot[i+j+1]-m_knot[i+1] ) * m_basis_functions[j-1][i+1] ;

        m_basis_functions[j][i] = tmp1 + tmp2  ;
      }
    }
  }

  // compute their time derivative for the m_degree p=m_m_degree : d Nip(t) /dt
  m_basis_functions_derivative.resize(m_basis_functions[m_degree].size());
  for (unsigned int i = 0 ; i < m_basis_functions_derivative.size() ; ++i)
  {
    tmp1=0.0;tmp2=0.0;
    if ( m_knot[i+m_degree] == m_knot[i] )
      tmp1 = 0.0 ;
    else
      tmp1 = m_degree / (m_knot[i+m_degree]-m_knot[i]) * m_basis_functions[m_degree-1][i] ;

    if (m_knot[i+m_degree+1] == m_knot[i+1])
      tmp2 = 0.0 ;
    else
      tmp2 = m_degree / (m_knot[i+m_degree+1]-m_knot[i+1] ) * m_basis_functions[m_degree-1][i+1] ;
    m_basis_functions_derivative[i] = tmp1 - tmp2 ;
  }



  //compute their time second derivative for the degree p=m_degree : dd Nip(t) /dt
  m_basis_functions_sec_derivative.resize(m_basis_functions[m_degree].size());
  double factor = m_degree*(m_degree-1) ;
  double den1(0.0),den2(0.0),den3(0.0),den4(0.0);
  for (unsigned int i = 0 ; i < m_basis_functions_derivative.size() ; ++i)
  {
    tmp1=0.0;tmp2=0.0;tmp3=0.0;tmp4=0.0;
    den1=0.0;den2=0.0;den3=0.0;den4=0.0;

    den1 = (m_knot[i+m_degree]-m_knot[i]) * (m_knot[i+m_degree-1]-m_knot[i])       ;
    den2 = (m_knot[i+m_degree]-m_knot[i]) * (m_knot[i+m_degree]-m_knot[i+1])       ;
    den3 = (m_knot[i+m_degree+1]-m_knot[i+1]) * (m_knot[i+m_degree]-m_knot[i+1])   ;
    den4 = (m_knot[i+m_degree+1]-m_knot[i+1]) * (m_knot[i+m_degree+1]-m_knot[i+2]) ;

    if ( den1 == 0 )
      tmp1 = 0.0 ;
    else
      tmp1 = factor / den1 ;

    if ( den2 == 0 )
      tmp2 = 0.0 ;
    else
      tmp2 = -factor / den2 ;

    if ( den3 == 0 )
      tmp3 = 0.0 ;
    else
      tmp3 = -factor / den3 ;

    if ( den4 == 0 )
      tmp4 = 0.0 ;
    else
      tmp4 = factor / den4 ;

    m_basis_functions_sec_derivative[i] =
        tmp1 * m_basis_functions[m_degree-2][i]   +
        tmp2 * m_basis_functions[m_degree-2][i+1] +
        tmp3 * m_basis_functions[m_degree-2][i+1] +
        tmp4 * m_basis_functions[m_degree-2][i+2] ;
  }
  return 1 ;

}

int Bsplines::ComputeBasisFunctionsRecursively(double t, std::deque<double> &m_knot, unsigned int m_degree)
{
  vector<double> basis_functions (m_knot.size()-m_degree-1);
  for (unsigned int i = 0 ; i < basis_functions.size() ; ++i)
    basis_functions[i] = Nij_t(i,m_degree,t,m_knot);

  m_basis_functions[m_degree] = basis_functions ;
  return 0 ;
}

double Bsplines::Nij_t(int i, int j, double t, deque<double> & m_knot)
{
  double Nij_t = 0.0 ;
  // i is the time interval, j is the order
  if ( (j == 0 && m_knot[i] <= t && t < m_knot[i+1] && m_knot[i]<m_knot[i+1]) )
  {
    Nij_t = 1.0 ;
  }
  else if (j == 0)
  {
    Nij_t = 0.0;
  }
  else
  {
    double tmp1 (0.0), tmp2 (0.0) ;

    if ( m_knot[i] == m_knot[i+j] )
      tmp1 = 0.0 ;
    else
      tmp1 = (t - m_knot[i]) / (m_knot[i+j]-m_knot[i]) * Bsplines::Nij_t(i,j-1,t,m_knot) ;

    if (m_knot[i+j+1] == m_knot[i+1])
      tmp2 = 0.0 ;
    else
      tmp2 = (m_knot[i+j+1] - t) / (m_knot[i+j+1]-m_knot[i+1] ) * Bsplines::Nij_t(i+1,j-1,t,m_knot) ;

    Nij_t = tmp1 + tmp2  ;
  }
  return Nij_t ;
}

double Bsplines::ComputeBsplines(double t)
{
    ComputeBasisFunctions(t);
    double result = 0.0 ;
    if (m_degree!= m_knot.size() - m_control_points.size() -1 )
    {
        cout << "The parameters are not compatibles. Please recheck " << endl;
        return result;
    }
    for (unsigned int i=0;i<m_control_points.size();i++)
    {
        result += m_basis_functions[m_degree][i] * m_control_points[i];
    }
    return result;
}

Bsplines Bsplines::DerivativeBsplines()
{
    if (m_degree >=1)
    {
        Bsplines dB(m_degree-1);
        std::vector<double> dB_control_points(m_control_points.size()-1);
        std::deque<double> dB_knot_vector (m_knot.size()-2);


        for (unsigned int i=0 ; i<dB_control_points.size() ; ++i)
        {
            if(m_knot[i+m_degree+1] - m_knot[i+1]==0.0)
            {
              cout << "Knot no differenciable : result in the zero function\n" ;
              dB_control_points[i] = 0.0 ;
            }
            else
            {
              dB_control_points[i] = ((m_control_points[i+1] - m_control_points[i])*double(m_degree) )/ (m_knot[i+m_degree+1] - m_knot[i+1]);
            }
        }

        for (unsigned int i=0 ; i<dB_knot_vector.size() ; ++i)
          dB_knot_vector[i] = m_knot[i+1] ;


        dB.SetKnotVector(dB_knot_vector);
        dB.SetControlPoints(dB_control_points);
        return dB;
        }
    else
        {
            std::cout << "the function cannot be derivated " << std::endl;
            return Bsplines(m_degree);
        }
}

void Bsplines::SetDegree(int degree)
{
    m_degree = degree;
}

void Bsplines::SetControlPoints(std::vector<double> &control_points)
{
    if (control_points.size()>=2)
    {
        m_control_points = control_points;
    }
    else
    {
        std::cout << "You must give at least 2 control points" << std::endl;
    }
}

void Bsplines::SetKnotVector(std::deque<double> &knot_vector)
{
    m_knot = knot_vector;
}

int Bsplines::GetDegree() const
{
    return m_degree;
}

std::vector<double> Bsplines::GetControlPoints() const
{
    return m_control_points;
}

std::deque<double> Bsplines::GetKnotVector() const
{
    return m_knot;
}

void Bsplines::PrintKnotVector() const
{
    std::cout << "Knot Vector (" << m_knot.size() << ") : "<< std::endl;
    for (unsigned int i = 0;i<m_knot.size();i++)
    {
        std::cout << m_knot[i] << " , ";
    }
    std::cout <<" " <<std::endl;
}

void Bsplines::PrintControlPoints() const
{
    std::cout << "Control Points (" << m_control_points.size() << ") : "<< std::endl;
    for (unsigned int i = 0;i<m_control_points.size();i++)
    {
        std::cout << m_control_points[i] << " , " ;
    }
    cout << std::endl;
}

void Bsplines::PrintDegree() const
{
    std::cout << "Degree: " << m_degree << std::endl;
}


// Class ZBplines heritage of class Bsplines
// create a foot trajectory of Z in function of the time t


BSplinesFoot::BSplinesFoot(double FT,
                           double IP,
                           double FP,
                           vector<double> ToMP,
                           vector<double> MP,
                           double IS, double IA,
                           double FS, double FA):Bsplines(5)
{
  SetParameters(FT, IP , FP, ToMP, MP, IS, IA, FS, FA);
}

BSplinesFoot::~BSplinesFoot()
{

}

int BSplinesFoot::Compute(double t, double& x, double& dx, double& ddx)
{
  double time = t/m_FT ;
  if (time <= 0.0)
    time = 0.0 ;
  if (time >= 1.0)
    time = 1.0 ;

  ComputeBasisFunctions(time);
  x = 0.0 ;
  dx = 0.0 ;
  ddx = 0.0 ;
  for (unsigned int i=0;i<m_control_points.size();i++)
  {
    x += m_basis_functions[m_degree][i] * m_control_points[i];
    dx += m_basis_functions_derivative[i] * m_control_points[i];
    ddx += m_basis_functions_sec_derivative[i] * m_control_points[i];
  }
  return 1 ;
}

void  BSplinesFoot::SetParameters(double FT,
                                  double IP,
                                  double FP,
                                  std::vector<double>ToMP,
                                  std::vector<double> MP,
                                  double IS, double IA,
                                  double FS, double FA)
{
  // verify that each middle point has a reaching time parameter
  assert(ToMP.size()==MP.size());

  // save the parameters
  m_FT = FT ;

  m_IP = IP ;
  m_IS = IS ;
  m_IA = IA ;

  m_FP = FP ;
  m_FS = FS ;
  m_FA = FA ;

  m_ToMP = ToMP ;
  m_MP = MP ;


  // initialize some variables
  std::deque<double> knot;
  knot.resize(ToMP.size()+2*(m_degree+1));
  m_control_points.resize(ToMP.size()+m_degree+1);

  // generation of the knot vector
  switch (ToMP.size())
  {
    case 0 :
      // set the first three knots to 0.0
      // the next one to 50% of the final time
      // and the last three to the final time
      for (unsigned int i=0 ; i<=m_degree ; i++)
        {knot[i]=0.0;}

      for (unsigned int i=knot.size()-(m_degree+1) ; i<=knot.size() ; i++)
        {knot[i]=1.0;}

      SetKnotVector(knot);
      ComputeControlPointFrom2DataPoint();
      break ;

    case 1 :
      for (unsigned int i=0 ; i<=m_degree ; i++)
        {knot[i]=0.0;}

      knot[m_degree+1] = m_ToMP[0]/m_FT ;

      for (unsigned int i=knot.size()-(m_degree+1) ; i<=knot.size() ; i++)
        {knot[i]=1.0;}

      SetKnotVector(knot);
      ComputeControlPointFrom3DataPoint();

    break ;

    case 2 :
      for (unsigned int i=0 ; i<=m_degree ; i++)
        {knot[i]=0.0;}

      knot[m_degree+1] = m_ToMP[0]/m_FT ;
      knot[m_degree+2] = m_ToMP[1]/m_FT ;

      for (unsigned int i=knot.size()-(m_degree+1) ; i<=knot.size() ; i++)
        {knot[i]=1.0;}

      SetKnotVector(knot);
      ComputeControlPointFrom4DataPoint();

    break ;
  }// end switch case

  return ;
}

void BSplinesFoot::ComputeControlPointFrom2DataPoint(void)
{
  ComputeBasisFunctions(0);
  vector<double> dNi5T0  = m_basis_functions_derivative ;
  vector<double> ddNi5T0 = m_basis_functions_sec_derivative ;

//  for (unsigned int j = 0 ; j < m_basis_functions.size() ; ++j)
//  {
//    for (unsigned int i = 0 ; i < m_basis_functions[j].size() ; ++i)
//    {
//      cout << m_basis_functions[m_degree][i] << " " ;
//    }
//    cout << endl ;
//  }

//  for (unsigned int i = 0 ; i < dNi5T0.size() ; ++i)
//    cout << dNi5T0[i] << " " ;
//  cout << endl ;

//  for (unsigned int i = 0 ; i < ddNi5T0.size() ; ++i)
//    cout << ddNi5T0[i] << " " ;
//  cout << endl ;

  ComputeBasisFunctions(1);
  vector<double> dNi5T  = m_basis_functions_derivative ;
  vector<double> ddNi5T = m_basis_functions_sec_derivative ;

//  for (unsigned int j = 0 ; j < m_basis_functions.size() ; ++j)
//  {
//    for (unsigned int i = 0 ; i < m_basis_functions[j].size() ; ++i)
//    {
//      cout << m_basis_functions[m_degree][i] << " " ;
//    }
//    cout << endl ;
//  }

//  for (unsigned int i = 0 ; i < dNi5T.size() ; ++i)
//    cout << dNi5T[i] << " " ;
//  cout << endl ;

//  for (unsigned int i = 0 ; i < ddNi5T.size() ; ++i)
//    cout << ddNi5T[i] << " " ;
//  cout << endl ;


  double IP=m_IP ;
  double IS=m_IS ;
  double IA=m_IA ;
  double FP=m_FP ;
  double FS=m_FS ;
  double FA=m_FA ;

  double dN0T0 = dNi5T0[0] ;
  double dN1T0 = dNi5T0[1] ;
  double dN2T0 = dNi5T0[2] ;
  double dN3T0 = dNi5T0[3] ;
  double dN4T0 = dNi5T0[4] ;

  double dN1T = dNi5T[1] ;
  double dN2T = dNi5T[2] ;
  double dN3T = dNi5T[3] ;
  double dN4T = dNi5T[4] ;
  double dN5T = dNi5T[5] ;

  double ddN0T0 = ddNi5T0[0] ;
  double ddN1T0 = ddNi5T0[1] ;
  double ddN2T0 = ddNi5T0[2] ;
  double ddN3T0 = ddNi5T0[3] ;
  double ddN4T0 = ddNi5T0[4] ;

  double ddN1T  = ddNi5T[1] ;
  double ddN2T  = ddNi5T[2] ;
  double ddN3T  = ddNi5T[3] ;
  double ddN4T  = ddNi5T[4] ;
  double ddN5T  = ddNi5T[5] ;

  m_control_points[0]=IP ;
  m_control_points[1]=
      1.0/( dN2T*dN3T0*ddN1T*ddN4T0-dN3T*dN4T0*ddN2T*ddN1T0+dN1T*ddN4T0*ddN3T
           *dN2T0-dN2T*ddN3T0*dN4T0*ddN1T+ddN4T*dN1T*ddN2T0*dN3T0+dN1T0*dN3T
           *ddN4T0*ddN2T+dN4T*dN3T0*ddN2T*ddN1T0-dN1T*ddN2T0*dN4T0*ddN3T+dN2T
           *dN4T0*ddN3T*ddN1T0-dN1T*dN3T0*ddN4T0*ddN2T+ddN2T0*dN3T*dN4T0*ddN1T
           -ddN4T*ddN2T0*dN1T0*dN3T+dN2T*ddN4T*ddN3T0*dN1T0-dN3T*ddN1T*ddN4T0
           *dN2T0-dN4T*ddN2T0*dN3T0*ddN1T-dN2T*dN1T0*ddN4T0*ddN3T+dN4T*ddN2T0
           *dN1T0*ddN3T+ddN3T0*dN4T*ddN1T*dN2T0-dN4T*ddN3T*dN2T0*ddN1T0+ddN3T0
           *dN1T*dN4T0*ddN2T-dN2T*ddN4T*dN3T0*ddN1T0-ddN3T0*dN4T*dN1T0*ddN2T
           +ddN4T*dN3T*dN2T0*ddN1T0-ddN4T*ddN3T0*dN1T*dN2T0)
      *( FS*ddN4T*ddN2T0*dN3T0-IA*dN3T*dN4T0*ddN2T-ddN3T0*dN4T*ddN2T*IS-dN2T
         *ddN0T0*IP*dN4T0*ddN3T-dN4T*ddN2T0*dN3T0*FA+ddN3T0*dN4T*IP*dN0T0
         *ddN2T-ddN0T0*ddN4T*IP*dN3T*dN2T0-dN3T*ddN4T0*FA*dN2T0+ddN0T0*IP*dN3T
         *dN4T0*ddN2T+IA*dN2T*dN4T0*ddN3T+ddN4T*ddN3T0*FP*dN5T*dN2T0+ddN5T
         *dN2T*ddN3T0*dN4T0*FP+ddN0T0*dN4T*IP*ddN3T*dN2T0+dN3T0*ddN4T0*FP*dN5T
         *ddN2T-ddN3T0*dN4T0*FP*dN5T*ddN2T-dN4T*ddN2T0*IP*ddN3T*dN0T0-ddN4T
         *ddN2T0*dN3T0*FP*dN5T-IA*dN4T*ddN3T*dN2T0+ddN5T*dN3T*ddN4T0*FP*dN2T0
         -ddN5T*ddN2T0*dN3T*dN4T0*FP-dN2T*ddN4T*ddN3T0*IP*dN0T0+IA*ddN4T*dN3T
         *dN2T0-ddN5T*dN2T*dN3T0*ddN4T0*FP-ddN0T0*dN4T*IP*dN3T0*ddN2T+dN3T
         *ddN4T0*ddN2T*IS+ddN5T*dN4T*ddN2T0*dN3T0*FP+IA*dN4T*dN3T0*ddN2T-FS
         *ddN4T*ddN3T0*dN2T0+FS*ddN4T0*ddN3T*dN2T0-IP*dN3T*ddN4T0*dN0T0*ddN2T
         +dN4T*ddN2T0*ddN3T*IS+dN2T*IP*ddN4T0*ddN3T*dN0T0+FS*ddN3T0*dN4T0
         *ddN2T-dN2T*ddN3T0*dN4T0*FA+ddN3T0*dN4T*FA*dN2T0+ddN2T0*dN4T0*FP*dN5T
         *ddN3T-FS*ddN2T0*dN4T0*ddN3T+dN2T*ddN4T*ddN3T0*IS-dN2T*ddN4T0*ddN3T*IS
         -ddN4T0*FP*dN5T*ddN3T*dN2T0+dN2T*ddN0T0*ddN4T*IP*dN3T0-IA*dN2T*ddN4T
         *dN3T0+ddN2T0*dN3T*dN4T0*FA-FS*dN3T0*ddN4T0*ddN2T-ddN5T*ddN3T0*dN4T
         *FP*dN2T0+dN2T*dN3T0*ddN4T0*FA-ddN4T*ddN2T0*dN3T*IS+ddN4T*ddN2T0*IP*dN3T*dN0T0) ;
  m_control_points[2]=
      -1.0/( dN2T*dN3T0*ddN1T*ddN4T0-dN3T*dN4T0*ddN2T*ddN1T0+dN1T*ddN4T0*ddN3T
             *dN2T0-dN2T*ddN3T0*dN4T0*ddN1T+ddN4T*dN1T*ddN2T0*dN3T0+dN1T0*dN3T
             *ddN4T0*ddN2T+dN4T*dN3T0*ddN2T*ddN1T0-dN1T*ddN2T0*dN4T0*ddN3T+dN2T
             *dN4T0*ddN3T*ddN1T0-dN1T*dN3T0*ddN4T0*ddN2T+ddN2T0*dN3T*dN4T0*ddN1T
             -ddN4T*ddN2T0*dN1T0*dN3T+dN2T*ddN4T*ddN3T0*dN1T0-dN3T*ddN1T*ddN4T0
             *dN2T0-dN4T*ddN2T0*dN3T0*ddN1T-dN2T*dN1T0*ddN4T0*ddN3T+dN4T*ddN2T0
             *dN1T0*ddN3T+ddN3T0*dN4T*ddN1T*dN2T0-dN4T*ddN3T*dN2T0*ddN1T0+ddN3T0
             *dN1T*dN4T0*ddN2T-dN2T*ddN4T*dN3T0*ddN1T0-ddN3T0*dN4T*dN1T0*ddN2T
             +ddN4T*dN3T*dN2T0*ddN1T0-ddN4T*ddN3T0*dN1T*dN2T0)
      *( ddN0T0*dN4T*dN1T0*IP*ddN3T+ddN5T*ddN3T0*dN1T*dN4T0*FP-dN1T*ddN4T0*ddN3T*IS
         +dN1T*IP*ddN4T0*ddN3T*dN0T0+dN4T0*FP*dN5T*ddN3T*ddN1T0-ddN5T*ddN3T0*dN4T
         *dN1T0*FP+dN1T*dN3T0*ddN4T0*FA-ddN4T*dN3T0*FP*dN5T*ddN1T0-FS*dN4T0*ddN3T
         *ddN1T0-dN1T0*ddN4T0*FP*dN5T*ddN3T+ddN3T0*dN4T*IP*ddN1T*dN0T0-ddN0T0
         *dN4T*IP*dN3T0*ddN1T-IA*ddN4T*dN1T*dN3T0+IA*dN4T*dN3T0*ddN1T+IA*dN1T
         *dN4T0*ddN3T-IP*dN3T*ddN1T*ddN4T0*dN0T0-ddN4T*ddN3T0*dN1T*IP*dN0T0+FS*ddN3T0
         *dN4T0*ddN1T-IA*dN4T*dN1T0*ddN3T+ddN4T*ddN3T0*dN1T0*FP*dN5T-FS*dN3T0*ddN1T
         *ddN4T0+ddN4T*IP*dN3T*dN0T0*ddN1T0-dN1T0*dN3T*ddN4T0*FA+FS*ddN4T*dN3T0
         *ddN1T0-ddN3T0*dN4T*ddN1T*IS-ddN0T0*dN1T*IP*dN4T0*ddN3T-ddN3T0*dN4T0
         *ddN1T*FP*dN5T-ddN3T0*dN1T*dN4T0*FA-ddN5T*dN1T*dN3T0*ddN4T0*FP-dN4T
         *dN3T0*FA*ddN1T0+ddN3T0*dN4T*dN1T0*FA-ddN4T*dN3T*ddN1T0*IS+dN3T*ddN1T
         *ddN4T0*IS+dN3T*dN4T0*FA*ddN1T0-dN4T*IP*ddN3T*dN0T0*ddN1T0+ddN4T*ddN3T0
         *dN1T*IS+IA*ddN4T*dN1T0*dN3T+ddN0T0*ddN4T*dN1T*IP*dN3T0+dN3T0*ddN1T
         *ddN4T0*FP*dN5T-ddN0T0*ddN4T*dN1T0*IP*dN3T-FS*ddN4T*ddN3T0*dN1T0
         -IA*dN3T*dN4T0*ddN1T+ddN5T*dN4T*dN3T0*FP*ddN1T0+ddN0T0*IP*dN3T*dN4T0*ddN1T
         +dN4T*ddN3T*ddN1T0*IS-ddN5T*dN3T*dN4T0*FP*ddN1T0+FS*dN1T0*ddN4T0*ddN3T
         +ddN5T*dN1T0*dN3T*ddN4T0*FP);
  m_control_points[3]=
      -1.0/( dN2T*dN3T0*ddN1T*ddN4T0-dN3T*dN4T0*ddN2T*ddN1T0+dN1T*ddN4T0*ddN3T*dN2T0
             -dN2T*ddN3T0*dN4T0*ddN1T+ddN4T*dN1T*ddN2T0*dN3T0+dN1T0*dN3T*ddN4T0*ddN2T
             +dN4T*dN3T0*ddN2T*ddN1T0-dN1T*ddN2T0*dN4T0*ddN3T+dN2T*dN4T0*ddN3T*ddN1T0
             -dN1T*dN3T0*ddN4T0*ddN2T+ddN2T0*dN3T*dN4T0*ddN1T-ddN4T*ddN2T0*dN1T0*dN3T
             +dN2T*ddN4T*ddN3T0*dN1T0-dN3T*ddN1T*ddN4T0*dN2T0-dN4T*ddN2T0*dN3T0*ddN1T
             -dN2T*dN1T0*ddN4T0*ddN3T+dN4T*ddN2T0*dN1T0*ddN3T+ddN3T0*dN4T*ddN1T*dN2T0
             -dN4T*ddN3T*dN2T0*ddN1T0+ddN3T0*dN1T*dN4T0*ddN2T-dN2T*ddN4T*dN3T0*ddN1T0
             -ddN3T0*dN4T*dN1T0*ddN2T+ddN4T*dN3T*dN2T0*ddN1T0-ddN4T*ddN3T0*dN1T*dN2T0)
      *( dN2T*ddN0T0*ddN4T*dN1T0*IP+dN4T*IP*dN0T0*ddN2T*ddN1T0-ddN5T*dN4T*FP*dN2T0*ddN1T0
         -IA*dN1T*dN4T0*ddN2T+ddN5T*dN2T*dN4T0*FP*ddN1T0-ddN4T*ddN2T0*dN1T0*FP*dN5T
         -dN1T*ddN4T0*FA*dN2T0-ddN4T*dN1T*ddN2T0*IS+ddN4T*FP*dN5T*dN2T0*ddN1T0
         +dN2T*IP*ddN1T*ddN4T0*dN0T0-ddN5T*dN2T*dN1T0*ddN4T0*FP+FS*ddN1T*ddN4T0*dN2T0
         +IA*dN4T*dN1T0*ddN2T+ddN5T*dN4T*ddN2T0*dN1T0*FP+FS*ddN4T*ddN2T0*dN1T0
         +ddN2T0*dN4T0*ddN1T*FP*dN5T-dN2T*dN4T0*FA*ddN1T0-ddN1T*ddN4T0*FP*dN5T*dN2T0
         -dN2T*ddN1T*ddN4T0*IS-FS*ddN2T0*dN4T0*ddN1T+ddN5T*dN1T*ddN4T0*FP*dN2T0
         +dN1T*ddN2T0*dN4T0*FA-ddN0T0*dN4T*dN1T0*IP*ddN2T+dN1T0*ddN4T0*FP*dN5T*ddN2T
         -IA*dN4T*ddN1T*dN2T0+ddN0T0*dN4T*IP*ddN1T*dN2T0-dN1T*IP*ddN4T0*dN0T0*ddN2T
         +IA*ddN4T*dN1T*dN2T0-dN4T*ddN2T0*IP*ddN1T*dN0T0-dN2T*ddN4T*IP*dN0T0*ddN1T0
         -dN2T*ddN0T0*IP*dN4T0*ddN1T+dN4T*ddN2T0*ddN1T*IS+FS*dN4T0*ddN2T*ddN1T0
         -FS*dN1T0*ddN4T0*ddN2T+ddN4T*dN1T*ddN2T0*IP*dN0T0+IA*dN2T*dN4T0*ddN1T
         -dN4T*ddN2T0*dN1T0*FA-dN4T0*FP*dN5T*ddN2T*ddN1T0-dN4T*ddN2T*ddN1T0*IS
         -IA*dN2T*ddN4T*dN1T0+dN2T*dN1T0*ddN4T0*FA+dN1T*ddN4T0*ddN2T*IS
         +ddN0T0*dN1T*IP*dN4T0*ddN2T-ddN5T*dN1T*ddN2T0*dN4T0*FP+dN4T*FA*dN2T0*ddN1T0
         +dN2T*ddN4T*ddN1T0*IS-FS*ddN4T*dN2T0*ddN1T0-ddN0T0*ddN4T*dN1T*IP*dN2T0);
  m_control_points[4]=
      -1.0/( dN2T*dN3T0*ddN1T*ddN4T0-dN3T*dN4T0*ddN2T*ddN1T0+dN1T*ddN4T0*ddN3T*dN2T0
             -dN2T*ddN3T0*dN4T0*ddN1T+ddN4T*dN1T*ddN2T0*dN3T0+dN1T0*dN3T*ddN4T0*ddN2T
             +dN4T*dN3T0*ddN2T*ddN1T0-dN1T*ddN2T0*dN4T0*ddN3T+dN2T*dN4T0*ddN3T*ddN1T0
             -dN1T*dN3T0*ddN4T0*ddN2T+ddN2T0*dN3T*dN4T0*ddN1T-ddN4T*ddN2T0*dN1T0*dN3T
             +dN2T*ddN4T*ddN3T0*dN1T0-dN3T*ddN1T*ddN4T0*dN2T0-dN4T*ddN2T0*dN3T0*ddN1T
             -dN2T*dN1T0*ddN4T0*ddN3T+dN4T*ddN2T0*dN1T0*ddN3T+ddN3T0*dN4T*ddN1T*dN2T0
             -dN4T*ddN3T*dN2T0*ddN1T0+ddN3T0*dN1T*dN4T0*ddN2T-dN2T*ddN4T*dN3T0*ddN1T0
             -ddN3T0*dN4T*dN1T0*ddN2T+ddN4T*dN3T*dN2T0*ddN1T0-ddN4T*ddN3T0*dN1T*dN2T0)
      *( ddN2T0*dN1T0*dN3T*FA+ddN5T*dN1T*ddN2T0*dN3T0*FP-ddN0T0*IP*dN3T*ddN1T*dN2T0
         -IA*dN1T*ddN3T*dN2T0-ddN0T0*dN1T*IP*dN3T0*ddN2T-dN2T*ddN0T0*dN1T0*IP*ddN3T
         +dN3T*ddN2T*ddN1T0*IS-FS*dN3T0*ddN2T*ddN1T0+ddN2T0*dN1T0*FP*dN5T*ddN3T
         -ddN2T0*dN3T0*ddN1T*FP*dN5T+dN1T*ddN2T0*ddN3T*IS+ddN0T0*dN1T0*IP*dN3T*ddN2T
         +IA*dN3T*ddN1T*dN2T0+ddN5T*dN2T*ddN3T0*dN1T0*FP+dN3T0*FP*dN5T*ddN2T*ddN1T0
         +IA*dN2T*dN1T0*ddN3T+dN2T*ddN0T0*IP*dN3T0*ddN1T+dN2T*IP*ddN3T*dN0T0*ddN1T0
         -ddN3T0*dN1T*ddN2T*IS-FP*dN5T*ddN3T*dN2T0*ddN1T0-dN1T*ddN2T0*IP*ddN3T*dN0T0
         -dN3T*FA*dN2T0*ddN1T0-IA*dN2T*dN3T0*ddN1T-dN1T*ddN2T0*dN3T0*FA+ddN3T0*dN1T*IP*dN0T0*ddN2T
         -FS*ddN3T0*ddN1T*dN2T0+FS*ddN2T0*dN3T0*ddN1T-dN2T*ddN3T0*IP*ddN1T*dN0T0-ddN5T*ddN2T0*dN1T0*dN3T*FP
         +FS*ddN3T*dN2T0*ddN1T0+ddN3T0*ddN1T*FP*dN5T*dN2T0-dN2T*ddN3T*ddN1T0*IS
         -ddN3T0*dN1T0*FP*dN5T*ddN2T+ddN5T*dN3T*FP*dN2T0*ddN1T0-ddN5T*dN2T*dN3T0*FP*ddN1T0
         -ddN2T0*dN3T*ddN1T*IS-FS*ddN2T0*dN1T0*ddN3T-ddN5T*ddN3T0*dN1T*FP*dN2T0
         -dN2T*ddN3T0*dN1T0*FA+IA*dN1T*dN3T0*ddN2T+ddN0T0*dN1T*IP*ddN3T*dN2T0
         +FS*ddN3T0*dN1T0*ddN2T+dN2T*ddN3T0*ddN1T*IS+ddN2T0*IP*dN3T*ddN1T*dN0T0
         +dN2T*dN3T0*FA*ddN1T0-IA*dN1T0*dN3T*ddN2T-IP*dN3T*dN0T0*ddN2T*ddN1T0+ddN3T0*dN1T*FA*dN2T0);
  m_control_points[5]=FP ;
  return ;
}

void BSplinesFoot::ComputeControlPointFrom3DataPoint(void)
{
  ComputeBasisFunctions(0);
  vector<double> dNi5T0  = m_basis_functions_derivative ;
  vector<double> ddNi5T0 = m_basis_functions_sec_derivative ;

  ComputeBasisFunctions(m_ToMP[0]/m_FT);
  vector<double> Ni5Tm  = m_basis_functions[m_degree] ;

  ComputeBasisFunctions(1.0);
  vector<double> dNi5T  = m_basis_functions_derivative ;
  vector<double> ddNi5T = m_basis_functions_sec_derivative ;

  double IP=m_IP ;
  double IS=m_IS ;
  double IA=m_IA ;
  double FP=m_FP ;
  double FS=m_FS ;
  double FA=m_FA ;
  double MidP1=m_MP[0];

  double N1Tm = Ni5Tm[1] ;
  double N2Tm = Ni5Tm[2] ;
  double N3Tm = Ni5Tm[3] ;
  double N4Tm = Ni5Tm[4] ;
  double N5Tm = Ni5Tm[5] ;

  double dN0T0 = dNi5T0[0] ;
  double dN1T0 = dNi5T0[1] ;
  double dN2T0 = dNi5T0[2] ;
  double dN3T0 = dNi5T0[3] ;
  double dN4T0 = dNi5T0[4] ;

  double dN2T = dNi5T[2] ;
  double dN3T = dNi5T[3] ;
  double dN4T = dNi5T[4] ;
  double dN5T = dNi5T[5] ;
  double dN6T = dNi5T[6] ;

  double ddN0T0 = ddNi5T0[0] ;
  double ddN1T0 = ddNi5T0[1] ;
  double ddN2T0 = ddNi5T0[2] ;
  double ddN3T0 = ddNi5T0[3] ;
  double ddN4T0 = ddNi5T0[4] ;

  double ddN2T  = ddNi5T[2] ;
  double ddN3T  = ddNi5T[3] ;
  double ddN4T  = ddNi5T[4] ;
  double ddN5T  = ddNi5T[5] ;
  double ddN6T  = ddNi5T[6] ;

  m_control_points[0]=IP;
  m_control_points[1]=
      -( IA*N4Tm*dN3T0*dN5T*ddN2T-N4Tm*ddN2T0*IP*dN5T*ddN3T*dN0T0-ddN4T0*N2Tm*dN5T*ddN3T*IS
        +ddN5T*dN2T*MidP1*dN3T0*ddN4T0+MidP1*ddN3T0*dN4T0*dN5T*ddN2T+dN4T*ddN2T0*IP*ddN3T
        *dN0T0*N5Tm+ddN0T0*dN4T*IP*dN3T0*N5Tm*ddN2T+ddN5T*FS*ddN3T0*dN4T0*N2Tm+ddN0T0*ddN4T
        *IP*dN3T0*N2Tm*dN5T-ddN5T*MidP1*dN4T*ddN2T0*dN3T0+ddN3T0*dN4T0*dN6T*FP*N5Tm*ddN2T
        -ddN5T*IA*N3Tm*dN4T*dN2T0+ddN0T0*ddN4T*IP*dN3T*N5Tm*dN2T0+FS*ddN2T0*dN4T0*ddN3T
        *N5Tm-ddN5T*IP*dN3T*ddN4T0*N2Tm*dN0T0-ddN5T*N4Tm*ddN2T0*dN3T0*dN6T*FP-dN4T*ddN2T0
        *ddN3T*N5Tm*IS-N3Tm*ddN4T0*dN5T*FA*dN2T0+ddN5T*IA*dN4T*dN3T0*N2Tm-N4Tm*ddN2T0*dN3T0
        *dN5T*FA-N3Tm*IP*ddN4T0*dN5T*dN0T0*ddN2T-ddN0T0*IP*dN4T0*N2Tm*dN5T*ddN3T+ddN2T0*ddN6T
        *dN3T*dN4T0*FP*N5Tm+ddN5T*FS*N4Tm*ddN2T0*dN3T0-IA*dN4T*dN3T0*N5Tm*ddN2T+ddN5T*ddN0T0
        *N3Tm*dN4T*IP*dN2T0-ddN5T*dN2T*MidP1*ddN3T0*dN4T0+IA*ddN4T*N3Tm*dN5T*dN2T0+IA*dN3T
        *dN4T0*N5Tm*ddN2T+ddN5T*MidP1*ddN3T0*dN4T*dN2T0-MidP1*ddN2T0*dN4T0*dN5T*ddN3T-N3Tm
        *ddN2T0*ddN6T*dN4T0*FP*dN5T+ddN0T0*N4Tm*IP*dN5T*ddN3T*dN2T0+N4Tm*ddN2T0*ddN6T*dN3T0
        *FP*dN5T-ddN5T*ddN3T0*dN4T*N2Tm*IS-dN2T*ddN3T0*ddN6T*dN4T0*FP*N5Tm-ddN3T0*dN4T*IP
        *dN0T0*N5Tm*ddN2T-ddN5T*FS*N3Tm*ddN2T0*dN4T0+ddN5T*IA*N4Tm*dN3T*dN2T0-ddN5T*dN2T
        *ddN3T0*N4Tm*IP*dN0T0-ddN3T0*dN4T*FA*N5Tm*dN2T0-dN3T*ddN4T0*N5Tm*ddN2T*IS+N3Tm*ddN2T0
        *dN4T0*dN5T*FA+ddN5T*IA*dN2T*N3Tm*dN4T0-FS*ddN3T0*dN4T0*N5Tm*ddN2T+IA*dN4T0*N2Tm*dN5T
        *ddN3T-dN2T*ddN0T0*ddN4T*IP*dN3T0*N5Tm+ddN4T*MidP1*ddN2T0*dN3T0*dN5T+IA*dN2T*ddN4T
        *dN3T0*N5Tm-IA*N3Tm*dN4T0*dN5T*ddN2T+IP*dN3T*ddN4T0*dN0T0*N5Tm*ddN2T-ddN2T0*dN3T*dN4T0
        *FA*N5Tm-ddN6T*dN3T0*ddN4T0*FP*N2Tm*dN5T-ddN5T*FS*dN3T0*ddN4T0*N2Tm-ddN6T*dN3T*ddN4T0
        *FP*N5Tm*dN2T0-ddN0T0*IP*dN3T*dN4T0*N5Tm*ddN2T+ddN3T0*dN4T*ddN6T*FP*N5Tm*dN2T0-ddN5T
        *IA*dN2T*N4Tm*dN3T0-dN3T0*dN6T*ddN4T0*FP*N5Tm*ddN2T+ddN3T0*dN4T*N5Tm*ddN2T*IS-ddN5T
        *ddN0T0*dN4T*IP*dN3T0*N2Tm+ddN3T0*N4Tm*dN5T*FA*dN2T0+IP*ddN4T0*N2Tm*dN5T*ddN3T*dN0T0
        -dN2T*dN3T0*ddN4T0*FA*N5Tm+dN2T*ddN4T*ddN3T0*IP*dN0T0*N5Tm+dN3T*ddN4T0*FA*N5Tm*dN2T0
        +ddN5T*MidP1*ddN2T0*dN3T*dN4T0+ddN4T*ddN2T0*dN3T0*dN6T*FP*N5Tm-FS*ddN4T0*ddN3T*N5Tm
        *dN2T0+FS*ddN4T*ddN3T0*N5Tm*dN2T0+dN2T*ddN6T*dN3T0*ddN4T0*FP*N5Tm-dN4T*ddN2T0*ddN6T
        *dN3T0*FP*N5Tm-ddN5T*ddN0T0*N4Tm*IP*dN3T*dN2T0-ddN4T*N3Tm*ddN2T0*dN5T*IS+dN6T*ddN4T0
        *FP*ddN3T*N5Tm*dN2T0-ddN5T*MidP1*dN3T*ddN4T0*dN2T0-ddN4T*ddN2T0*IP*dN3T*dN0T0*N5Tm
        +MidP1*ddN4T0*dN5T*ddN3T*dN2T0+ddN5T*N3Tm*ddN2T0*dN4T0*dN6T*FP+N3Tm*ddN4T0*dN5T*ddN2T*IS
        -ddN2T0*dN4T0*dN6T*FP*ddN3T*N5Tm-ddN5T*N3Tm*dN4T*ddN2T0*IP*dN0T0-ddN5T*dN2T*N3Tm*ddN4T0*IS
        +ddN5T*dN2T*ddN0T0*N4Tm*IP*dN3T0-MidP1*dN3T0*ddN4T0*dN5T*ddN2T-ddN5T*dN2T*ddN0T0*N3Tm*IP*dN4T0
        +ddN4T*ddN2T0*dN3T*N5Tm*IS+ddN5T*N4Tm*ddN2T0*IP*dN3T*dN0T0-ddN3T0*N4Tm*ddN6T*FP*dN5T*dN2T0
        +IA*dN4T*ddN3T*N5Tm*dN2T0+ddN5T*ddN3T0*N4Tm*dN6T*FP*dN2T0-FS*ddN4T*ddN2T0*dN3T0*N5Tm
        +ddN4T*N3Tm*ddN2T0*IP*dN5T*dN0T0+dN4T*ddN2T0*dN3T0*FA*N5Tm-ddN5T*IA*dN3T*dN4T0*N2Tm
        +ddN5T*dN3T*ddN4T0*N2Tm*IS+ddN5T*ddN3T0*dN4T*IP*N2Tm*dN0T0+N3Tm*ddN6T*ddN4T0*FP*dN5T*dN2T0
        -ddN0T0*ddN4T*N3Tm*IP*dN5T*dN2T0-ddN0T0*dN4T*IP*ddN3T*N5Tm*dN2T0+dN2T*ddN0T0*IP*dN4T0*ddN3T*N5Tm
        +ddN5T*N3Tm*dN4T*ddN2T0*IS-ddN5T*FS*ddN3T0*N4Tm*dN2T0+ddN0T0*N3Tm*IP*dN4T0*dN5T*ddN2T
        +N4Tm*ddN2T0*dN5T*ddN3T*IS-IA*ddN4T*dN3T*N5Tm*dN2T0+ddN5T*ddN0T0*IP*dN3T*dN4T0*N2Tm
        +ddN3T0*N4Tm*IP*dN5T*dN0T0*ddN2T+ddN5T*dN3T0*dN6T*ddN4T0*FP*N2Tm-ddN3T0*N4Tm*dN5T*ddN2T*IS
        -ddN4T*MidP1*ddN3T0*dN5T*dN2T0-ddN5T*N4Tm*ddN2T0*dN3T*IS-IA*ddN4T*dN3T0*N2Tm*dN5T
        -ddN5T*N3Tm*dN6T*ddN4T0*FP*dN2T0-ddN4T*ddN3T0*dN6T*FP*N5Tm*dN2T0+FS*dN3T0*ddN4T0*N5Tm*ddN2T
        -dN2T*IP*ddN4T0*ddN3T*dN0T0*N5Tm+ddN5T*dN2T*ddN3T0*N4Tm*IS-ddN0T0*N4Tm*IP*dN3T0*dN5T*ddN2T
        +dN2T*ddN3T0*dN4T0*FA*N5Tm-ddN5T*ddN3T0*dN4T0*dN6T*FP*N2Tm-ddN4T*ddN3T0*IP*N2Tm*dN5T*dN0T0
        +dN3T0*ddN4T0*N2Tm*dN5T*FA+ddN5T*FS*N3Tm*ddN4T0*dN2T0-IA*dN2T*dN4T0*ddN3T*N5Tm-ddN3T0*dN4T0
        *N2Tm*dN5T*FA+ddN4T*ddN3T0*N2Tm*dN5T*IS-IA*N4Tm*dN5T*ddN3T*dN2T0-dN2T*ddN4T*ddN3T0*N5Tm*IS
        +dN2T*ddN4T0*ddN3T*N5Tm*IS+ddN5T*dN2T*N3Tm*IP*ddN4T0*dN0T0+ddN3T0*ddN6T*dN4T0*FP*N2Tm*dN5T)
      /( ddN5T*dN3T*dN4T0*N2Tm*ddN1T0-ddN5T*dN4T*dN3T0*N2Tm*ddN1T0-ddN5T*N1Tm*ddN3T0*dN4T*dN2T0+dN4T
         *dN3T0*N5Tm*ddN2T*ddN1T0-dN3T*dN4T0*N5Tm*ddN2T*ddN1T0+ddN5T*N1Tm*dN4T*ddN2T0*dN3T0-N1Tm*ddN4T0
         *dN5T*ddN3T*dN2T0-ddN4T*N3Tm*dN5T*dN2T0*ddN1T0+ddN5T*N4Tm*ddN2T0*dN1T0*dN3T-N1Tm*ddN3T0*dN4T0
         *dN5T*ddN2T-ddN5T*N1Tm*ddN2T0*dN3T*dN4T0-N4Tm*dN3T0*dN5T*ddN2T*ddN1T0+ddN5T*ddN3T0*dN4T*dN1T0
         *N2Tm+ddN4T*N3Tm*ddN2T0*dN1T0*dN5T+ddN5T*N1Tm*dN3T*ddN4T0*dN2T0+N1Tm*ddN4T*ddN3T0*dN5T*dN2T0
         -ddN4T*ddN2T0*dN1T0*dN3T*N5Tm-dN4T*ddN3T*N5Tm*dN2T0*ddN1T0+ddN5T*N3Tm*dN4T*dN2T0*ddN1T0+ddN5T
         *dN2T*N3Tm*dN1T0*ddN4T0-N3Tm*dN1T0*ddN4T0*dN5T*ddN2T-N4Tm*ddN2T0*dN1T0*dN5T*ddN3T+dN1T0*dN3T
         *ddN4T0*N5Tm*ddN2T+N1Tm*ddN2T0*dN4T0*dN5T*ddN3T+dN2T*dN4T0*ddN3T*N5Tm*ddN1T0-ddN4T*ddN3T0
         *dN1T0*N2Tm*dN5T-ddN5T*dN1T0*dN3T*ddN4T0*N2Tm+N4Tm*dN5T*ddN3T*dN2T0*ddN1T0+dN2T*ddN4T*ddN3T0
         *dN1T0*N5Tm-ddN5T*dN2T*ddN3T0*N4Tm*dN1T0-ddN5T*dN2T*N1Tm*dN3T0*ddN4T0+ddN5T*dN2T*N1Tm*ddN3T0
         *dN4T0+N1Tm*dN3T0*ddN4T0*dN5T*ddN2T-ddN5T*dN2T*N3Tm*dN4T0*ddN1T0-dN2T*dN1T0*ddN4T0*ddN3T*N5Tm
         +ddN4T*dN3T0*N2Tm*dN5T*ddN1T0-dN4T0*N2Tm*dN5T*ddN3T*ddN1T0+dN4T*ddN2T0*dN1T0*ddN3T*N5Tm-ddN3T0
         *dN4T*dN1T0*N5Tm*ddN2T-ddN5T*N4Tm*dN3T*dN2T0*ddN1T0+ddN4T*dN3T*N5Tm*dN2T0*ddN1T0+dN1T0*ddN4T0
         *N2Tm*dN5T*ddN3T-N1Tm*ddN4T*ddN2T0*dN3T0*dN5T+ddN5T*dN2T*N4Tm*dN3T0*ddN1T0+ddN3T0*N4Tm*dN1T0
         *dN5T*ddN2T-ddN5T*N3Tm*dN4T*ddN2T0*dN1T0-dN2T*ddN4T*dN3T0*N5Tm*ddN1T0+N3Tm*dN4T0*dN5T*ddN2T*ddN1T0);
  m_control_points[2]=
      ( ddN0T0*N1Tm*ddN4T*IP*dN3T0*dN5T-IA*N1Tm*ddN4T*dN3T0*dN5T+ddN5T*MidP1*dN3T*dN4T0*ddN1T0+dN4T*dN3T0
        *FA*N5Tm*ddN1T0-N1Tm*ddN3T0*dN4T0*dN5T*FA-N1Tm*ddN4T0*dN5T*ddN3T*IS-IA*ddN4T*dN1T0*dN3T*N5Tm
        -ddN5T*N4Tm*dN3T0*dN6T*FP*ddN1T0+N1Tm*IP*ddN4T0*dN5T*ddN3T*dN0T0+ddN6T*dN3T*dN4T0*FP*N5Tm*ddN1T0
        +N3Tm*dN1T0*ddN6T*ddN4T0*FP*dN5T+ddN5T*N4Tm*IP*dN3T*dN0T0*ddN1T0-IA*N4Tm*dN1T0*dN5T*ddN3T
        +ddN5T*FS*N3Tm*dN1T0*ddN4T0+ddN0T0*ddN4T*dN1T0*IP*dN3T*N5Tm-ddN5T*MidP1*dN1T0*dN3T*ddN4T0
        +ddN5T*N1Tm*dN3T0*dN6T*ddN4T0*FP+FS*dN4T0*ddN3T*N5Tm*ddN1T0+N4Tm*ddN6T*dN3T0*FP*dN5T*ddN1T0
        +dN1T0*dN6T*ddN4T0*FP*ddN3T*N5Tm+IA*ddN4T*N3Tm*dN1T0*dN5T-ddN5T*N1Tm*ddN3T0*dN4T*IS
        -ddN4T*ddN3T0*dN1T0*dN6T*FP*N5Tm-dN3T*dN4T0*FA*N5Tm*ddN1T0+ddN0T0*N4Tm*dN1T0*IP*dN5T*ddN3T
        -ddN5T*N1Tm*ddN3T0*dN4T0*dN6T*FP-MidP1*dN4T0*dN5T*ddN3T*ddN1T0+FS*ddN4T*ddN3T0*dN1T0*N5Tm
        -N3Tm*dN1T0*ddN4T0*dN5T*FA-ddN5T*IA*N1Tm*dN3T*dN4T0-dN4T*ddN6T*dN3T0*FP*N5Tm*ddN1T0
        -dN4T*ddN3T*N5Tm*ddN1T0*IS+ddN5T*N3Tm*dN4T*ddN1T0*IS+ddN5T*MidP1*ddN3T0*dN4T*dN1T0
        +ddN3T0*dN4T*dN1T0*ddN6T*FP*N5Tm+MidP1*dN1T0*ddN4T0*dN5T*ddN3T-N4Tm*IP*dN5T*ddN3T*dN0T0*ddN1T0
        +IA*dN4T*dN1T0*ddN3T*N5Tm-FS*ddN4T*dN3T0*N5Tm*ddN1T0-dN4T0*dN6T*FP*ddN3T*N5Tm*ddN1T0
        +N1Tm*ddN4T*ddN3T0*dN5T*IS-FS*dN1T0*ddN4T0*ddN3T*N5Tm+ddN5T*N1Tm*dN3T*ddN4T0*IS
        -ddN5T*IA*N3Tm*dN4T*dN1T0-ddN4T*N3Tm*dN5T*ddN1T0*IS+N3Tm*dN4T0*dN5T*FA*ddN1T0
        +dN1T0*dN3T*ddN4T0*FA*N5Tm+ddN4T*N3Tm*IP*dN5T*dN0T0*ddN1T0+ddN5T*IA*N1Tm*dN4T*dN3T0
        +ddN4T*dN3T*N5Tm*ddN1T0*IS-ddN5T*N4Tm*dN3T*ddN1T0*IS+ddN5T*ddN3T0*N4Tm*dN1T0*dN6T*FP
        +ddN4T*dN3T0*dN6T*FP*N5Tm*ddN1T0+N1Tm*dN3T0*ddN4T0*dN5T*FA-ddN5T*MidP1*dN4T*dN3T0*ddN1T0
        +IA*N1Tm*dN4T0*dN5T*ddN3T-ddN5T*N3Tm*dN1T0*dN6T*ddN4T0*FP-ddN5T*FS*N3Tm*dN4T0*ddN1T0
        -ddN0T0*dN4T*dN1T0*IP*ddN3T*N5Tm-ddN5T*ddN0T0*N1Tm*dN4T*IP*dN3T0-ddN4T*IP*dN3T*dN0T0*N5Tm*ddN1T0
        +N1Tm*ddN3T0*ddN6T*dN4T0*FP*dN5T+ddN5T*N3Tm*dN4T0*dN6T*FP*ddN1T0-dN1T0*ddN6T*dN3T*ddN4T0*FP*N5Tm
        -ddN5T*N3Tm*dN4T*IP*dN0T0*ddN1T0+ddN5T*N1Tm*ddN3T0*dN4T*IP*dN0T0+ddN3T0*N4Tm*dN1T0*dN5T*FA
        +ddN5T*FS*N4Tm*dN3T0*ddN1T0-ddN5T*ddN0T0*N4Tm*dN1T0*IP*dN3T-ddN5T*FS*ddN3T0*N4Tm*dN1T0
        -ddN3T0*N4Tm*dN1T0*ddN6T*FP*dN5T+ddN5T*N1Tm*FS*ddN3T0*dN4T0+dN4T*IP*ddN3T*dN0T0*N5Tm*ddN1T0
        -ddN0T0*N1Tm*IP*dN4T0*dN5T*ddN3T-N4Tm*dN3T0*dN5T*FA*ddN1T0+ddN5T*ddN0T0*N1Tm*IP*dN3T*dN4T0
        -ddN0T0*ddN4T*N3Tm*dN1T0*IP*dN5T-ddN3T0*dN4T*dN1T0*FA*N5Tm-ddN4T*MidP1*ddN3T0*dN1T0*dN5T
        +N4Tm*dN5T*ddN3T*ddN1T0*IS-ddN5T*N1Tm*IP*dN3T*ddN4T0*dN0T0+ddN5T*ddN0T0*N3Tm*dN4T*dN1T0*IP
        -N3Tm*ddN6T*dN4T0*FP*dN5T*ddN1T0-ddN5T*N1Tm*FS*dN3T0*ddN4T0-N1Tm*ddN4T*ddN3T0*IP*dN5T*dN0T0
        +ddN5T*IA*N4Tm*dN1T0*dN3T+ddN4T*MidP1*dN3T0*dN5T*ddN1T0-N1Tm*ddN6T*dN3T0*ddN4T0*FP*dN5T)
      /( ddN5T*dN3T*dN4T0*N2Tm*ddN1T0-ddN5T*dN4T*dN3T0*N2Tm*ddN1T0-ddN5T*N1Tm*ddN3T0*dN4T*dN2T0
         +dN4T*dN3T0*N5Tm*ddN2T*ddN1T0-dN3T*dN4T0*N5Tm*ddN2T*ddN1T0+ddN5T*N1Tm*dN4T*ddN2T0*dN3T0
         -N1Tm*ddN4T0*dN5T*ddN3T*dN2T0-ddN4T*N3Tm*dN5T*dN2T0*ddN1T0+ddN5T*N4Tm*ddN2T0*dN1T0*dN3T
         -N1Tm*ddN3T0*dN4T0*dN5T*ddN2T-ddN5T*N1Tm*ddN2T0*dN3T*dN4T0-N4Tm*dN3T0*dN5T*ddN2T*ddN1T0
         +ddN5T*ddN3T0*dN4T*dN1T0*N2Tm+ddN4T*N3Tm*ddN2T0*dN1T0*dN5T+ddN5T*N1Tm*dN3T*ddN4T0*dN2T0
         +N1Tm*ddN4T*ddN3T0*dN5T*dN2T0-ddN4T*ddN2T0*dN1T0*dN3T*N5Tm-dN4T*ddN3T*N5Tm*dN2T0*ddN1T0
         +ddN5T*N3Tm*dN4T*dN2T0*ddN1T0+ddN5T*dN2T*N3Tm*dN1T0*ddN4T0-N3Tm*dN1T0*ddN4T0*dN5T*ddN2T
         -N4Tm*ddN2T0*dN1T0*dN5T*ddN3T+dN1T0*dN3T*ddN4T0*N5Tm*ddN2T+N1Tm*ddN2T0*dN4T0*dN5T*ddN3T
         +dN2T*dN4T0*ddN3T*N5Tm*ddN1T0-ddN4T*ddN3T0*dN1T0*N2Tm*dN5T-ddN5T*dN1T0*dN3T*ddN4T0*N2Tm
         +N4Tm*dN5T*ddN3T*dN2T0*ddN1T0+dN2T*ddN4T*ddN3T0*dN1T0*N5Tm-ddN5T*dN2T*ddN3T0*N4Tm*dN1T0
         -ddN5T*dN2T*N1Tm*dN3T0*ddN4T0+ddN5T*dN2T*N1Tm*ddN3T0*dN4T0+N1Tm*dN3T0*ddN4T0*dN5T*ddN2T
         -ddN5T*dN2T*N3Tm*dN4T0*ddN1T0-dN2T*dN1T0*ddN4T0*ddN3T*N5Tm+ddN4T*dN3T0*N2Tm*dN5T*ddN1T0
         -dN4T0*N2Tm*dN5T*ddN3T*ddN1T0+dN4T*ddN2T0*dN1T0*ddN3T*N5Tm-ddN3T0*dN4T*dN1T0*N5Tm*ddN2T
         -ddN5T*N4Tm*dN3T*dN2T0*ddN1T0+ddN4T*dN3T*N5Tm*dN2T0*ddN1T0+dN1T0*ddN4T0*N2Tm*dN5T*ddN3T
         -N1Tm*ddN4T*ddN2T0*dN3T0*dN5T+ddN5T*dN2T*N4Tm*dN3T0*ddN1T0+ddN3T0*N4Tm*dN1T0*dN5T*ddN2T
         -ddN5T*N3Tm*dN4T*ddN2T0*dN1T0-dN2T*ddN4T*dN3T0*N5Tm*ddN1T0+N3Tm*dN4T0*dN5T*ddN2T*ddN1T0);
  m_control_points[3]=
      -( FS*ddN4T*ddN2T0*dN1T0*N5Tm+N1Tm*ddN4T0*dN5T*FA*dN2T0+ddN5T*IA*dN2T*N4Tm*dN1T0
         +ddN5T*dN2T*N4Tm*IP*dN0T0*ddN1T0+dN1T0*ddN6T*ddN4T0*FP*N2Tm*dN5T+MidP1*dN1T0*ddN4T0*dN5T*ddN2T
         +dN1T0*dN6T*ddN4T0*FP*N5Tm*ddN2T+ddN5T*dN2T*MidP1*dN4T0*ddN1T0+ddN5T*FS*dN1T0*ddN4T0*N2Tm
         +N4Tm*ddN6T*FP*dN5T*dN2T0*ddN1T0-dN4T0*dN6T*FP*N5Tm*ddN2T*ddN1T0-ddN5T*N1Tm*dN4T*ddN2T0*IS
         +ddN4T*IP*N2Tm*dN5T*dN0T0*ddN1T0+dN4T*ddN2T0*dN1T0*ddN6T*FP*N5Tm+ddN5T*MidP1*dN4T*ddN2T0*dN1T0
         -IA*N4Tm*dN1T0*dN5T*ddN2T+ddN5T*N1Tm*FS*ddN2T0*dN4T0+ddN5T*dN4T0*dN6T*FP*N2Tm*ddN1T0
         +ddN5T*IA*N1Tm*dN4T*dN2T0+ddN5T*N4Tm*ddN2T0*dN1T0*dN6T*FP-ddN5T*N1Tm*ddN2T0*dN4T0*dN6T*FP
         +dN2T*ddN4T*N5Tm*ddN1T0*IS-FS*dN1T0*ddN4T0*N5Tm*ddN2T+FS*dN4T0*N5Tm*ddN2T*ddN1T0
         -N1Tm*ddN2T0*dN4T0*dN5T*FA-N4Tm*ddN2T0*dN1T0*ddN6T*FP*dN5T+ddN4T*dN6T*FP*N5Tm*dN2T0*ddN1T0
         -ddN5T*dN2T*ddN0T0*N4Tm*dN1T0*IP+ddN0T0*N4Tm*dN1T0*IP*dN5T*ddN2T-ddN5T*dN2T*N1Tm*IP*ddN4T0*dN0T0
         +N1Tm*IP*ddN4T0*dN5T*dN0T0*ddN2T+N1Tm*ddN4T*ddN2T0*dN5T*IS+N4Tm*ddN2T0*dN1T0*dN5T*FA
         +IA*dN4T*dN1T0*N5Tm*ddN2T-ddN5T*FS*N4Tm*ddN2T0*dN1T0+dN4T*IP*dN0T0*N5Tm*ddN2T*ddN1T0
         +N1Tm*ddN2T0*ddN6T*dN4T0*FP*dN5T+dN2T*ddN6T*dN4T0*FP*N5Tm*ddN1T0+ddN4T*MidP1*dN5T*dN2T0*ddN1T0
         -N1Tm*ddN4T*ddN2T0*IP*dN5T*dN0T0+IA*ddN4T*dN1T0*N2Tm*dN5T-N4Tm*IP*dN5T*dN0T0*ddN2T*ddN1T0
         -ddN5T*N1Tm*FS*ddN4T0*dN2T0+N4Tm*dN5T*ddN2T*ddN1T0*IS-ddN5T*IA*dN4T*dN1T0*N2Tm
         +dN2T*ddN0T0*ddN4T*dN1T0*IP*N5Tm-MidP1*dN4T0*dN5T*ddN2T*ddN1T0-ddN0T0*N1Tm*IP*dN4T0*dN5T*ddN2T
         +ddN5T*N1Tm*dN4T*ddN2T0*IP*dN0T0-N1Tm*ddN4T0*dN5T*ddN2T*IS+dN4T*FA*N5Tm*dN2T0*ddN1T0
         -ddN5T*dN2T*MidP1*dN1T0*ddN4T0-FS*ddN4T*N5Tm*dN2T0*ddN1T0-ddN0T0*dN4T*dN1T0*IP*N5Tm*ddN2T
         -ddN0T0*ddN4T*dN1T0*IP*N2Tm*dN5T-ddN4T*N2Tm*dN5T*ddN1T0*IS-ddN5T*FS*dN4T0*N2Tm*ddN1T0
         -ddN5T*ddN0T0*N1Tm*dN4T*IP*dN2T0+ddN5T*dN4T*N2Tm*ddN1T0*IS-IA*N1Tm*ddN4T*dN5T*dN2T0
         -dN4T*ddN6T*FP*N5Tm*dN2T0*ddN1T0+ddN5T*ddN0T0*dN4T*dN1T0*IP*N2Tm-dN2T*ddN4T*IP*dN0T0*N5Tm*ddN1T0
         +ddN0T0*N1Tm*ddN4T*IP*dN5T*dN2T0+IA*N1Tm*dN4T0*dN5T*ddN2T-ddN5T*dN4T*IP*N2Tm*dN0T0*ddN1T0
         -dN1T0*ddN4T0*N2Tm*dN5T*FA-dN2T*dN1T0*ddN6T*ddN4T0*FP*N5Tm-dN4T*N5Tm*ddN2T*ddN1T0*IS
         +ddN5T*dN2T*N1Tm*ddN4T0*IS-ddN5T*N4Tm*dN6T*FP*dN2T0*ddN1T0-ddN5T*MidP1*dN4T*dN2T0*ddN1T0
         +ddN5T*dN2T*ddN0T0*N1Tm*IP*dN4T0-dN4T*ddN2T0*dN1T0*FA*N5Tm-N1Tm*ddN6T*ddN4T0*FP*dN5T*dN2T0
         -ddN5T*dN1T0*dN6T*ddN4T0*FP*N2Tm-dN2T*dN4T0*FA*N5Tm*ddN1T0+ddN5T*FS*N4Tm*dN2T0*ddN1T0
         -N4Tm*dN5T*FA*dN2T0*ddN1T0-ddN5T*dN2T*N4Tm*ddN1T0*IS-ddN4T*MidP1*ddN2T0*dN1T0*dN5T
         -ddN5T*IA*dN2T*N1Tm*dN4T0+ddN5T*N1Tm*dN6T*ddN4T0*FP*dN2T0-IA*dN2T*ddN4T*dN1T0*N5Tm
         +dN2T*dN1T0*ddN4T0*FA*N5Tm-ddN6T*dN4T0*FP*N2Tm*dN5T*ddN1T0-ddN4T*ddN2T0*dN1T0*dN6T*FP*N5Tm
         +dN4T0*N2Tm*dN5T*FA*ddN1T0)
      /( ddN5T*dN3T*dN4T0*N2Tm*ddN1T0-ddN5T*dN4T*dN3T0*N2Tm*ddN1T0-ddN5T*N1Tm*ddN3T0*dN4T*dN2T0
         +dN4T*dN3T0*N5Tm*ddN2T*ddN1T0-dN3T*dN4T0*N5Tm*ddN2T*ddN1T0+ddN5T*N1Tm*dN4T*ddN2T0*dN3T0
         -N1Tm*ddN4T0*dN5T*ddN3T*dN2T0-ddN4T*N3Tm*dN5T*dN2T0*ddN1T0+ddN5T*N4Tm*ddN2T0*dN1T0*dN3T
         -N1Tm*ddN3T0*dN4T0*dN5T*ddN2T-ddN5T*N1Tm*ddN2T0*dN3T*dN4T0-N4Tm*dN3T0*dN5T*ddN2T*ddN1T0
         +ddN5T*ddN3T0*dN4T*dN1T0*N2Tm+ddN4T*N3Tm*ddN2T0*dN1T0*dN5T+ddN5T*N1Tm*dN3T*ddN4T0*dN2T0
         +N1Tm*ddN4T*ddN3T0*dN5T*dN2T0-ddN4T*ddN2T0*dN1T0*dN3T*N5Tm-dN4T*ddN3T*N5Tm*dN2T0*ddN1T0
         +ddN5T*N3Tm*dN4T*dN2T0*ddN1T0+ddN5T*dN2T*N3Tm*dN1T0*ddN4T0-N3Tm*dN1T0*ddN4T0*dN5T*ddN2T
         -N4Tm*ddN2T0*dN1T0*dN5T*ddN3T+dN1T0*dN3T*ddN4T0*N5Tm*ddN2T+N1Tm*ddN2T0*dN4T0*dN5T*ddN3T
         +dN2T*dN4T0*ddN3T*N5Tm*ddN1T0-ddN4T*ddN3T0*dN1T0*N2Tm*dN5T-ddN5T*dN1T0*dN3T*ddN4T0*N2Tm
         +N4Tm*dN5T*ddN3T*dN2T0*ddN1T0+dN2T*ddN4T*ddN3T0*dN1T0*N5Tm-ddN5T*dN2T*ddN3T0*N4Tm*dN1T0
         -ddN5T*dN2T*N1Tm*dN3T0*ddN4T0+ddN5T*dN2T*N1Tm*ddN3T0*dN4T0+N1Tm*dN3T0*ddN4T0*dN5T*ddN2T
         -ddN5T*dN2T*N3Tm*dN4T0*ddN1T0-dN2T*dN1T0*ddN4T0*ddN3T*N5Tm+ddN4T*dN3T0*N2Tm*dN5T*ddN1T0
         -dN4T0*N2Tm*dN5T*ddN3T*ddN1T0+dN4T*ddN2T0*dN1T0*ddN3T*N5Tm-ddN3T0*dN4T*dN1T0*N5Tm*ddN2T
         -ddN5T*N4Tm*dN3T*dN2T0*ddN1T0+ddN4T*dN3T*N5Tm*dN2T0*ddN1T0+dN1T0*ddN4T0*N2Tm*dN5T*ddN3T
         -N1Tm*ddN4T*ddN2T0*dN3T0*dN5T+ddN5T*dN2T*N4Tm*dN3T0*ddN1T0+ddN3T0*N4Tm*dN1T0*dN5T*ddN2T
         -ddN5T*N3Tm*dN4T*ddN2T0*dN1T0-dN2T*ddN4T*dN3T0*N5Tm*ddN1T0+N3Tm*dN4T0*dN5T*ddN2T*ddN1T0);
  m_control_points[4]=
      ( dN2T*ddN6T*dN3T0*FP*N5Tm*ddN1T0-ddN3T0*dN1T0*N2Tm*dN5T*FA+dN3T0*N2Tm*dN5T*FA*ddN1T0
        -ddN5T*IA*dN2T*N1Tm*dN3T0-ddN6T*dN3T0*FP*N2Tm*dN5T*ddN1T0-ddN5T*ddN0T0*N1Tm*IP*dN3T*dN2T0
        -ddN5T*FS*dN3T0*N2Tm*ddN1T0-ddN5T*N1Tm*FS*ddN3T0*dN2T0-ddN5T*ddN3T0*dN1T0*dN6T*FP*N2Tm
        -ddN5T*N3Tm*dN6T*FP*dN2T0*ddN1T0-N1Tm*ddN3T0*ddN6T*FP*dN5T*dN2T0+dN2T*ddN3T0*dN1T0*FA*N5Tm
        +ddN5T*MidP1*ddN2T0*dN1T0*dN3T-ddN5T*dN2T*N3Tm*ddN1T0*IS+ddN5T*dN3T*N2Tm*ddN1T0*IS
        -IA*dN2T*dN1T0*ddN3T*N5Tm+ddN5T*FS*N3Tm*dN2T0*ddN1T0+ddN3T0*dN1T0*ddN6T*FP*N2Tm*dN5T
        -ddN0T0*N1Tm*IP*dN3T0*dN5T*ddN2T+FS*dN3T0*N5Tm*ddN2T*ddN1T0-ddN0T0*dN1T0*IP*N2Tm*dN5T*ddN3T
        +N1Tm*ddN3T0*dN5T*FA*dN2T0+ddN5T*dN2T*ddN0T0*N1Tm*IP*dN3T0-N3Tm*dN5T*FA*dN2T0*ddN1T0
        -ddN5T*IP*dN3T*N2Tm*dN0T0*ddN1T0-N3Tm*IP*dN5T*dN0T0*ddN2T*ddN1T0+MidP1*dN5T*ddN3T*dN2T0*ddN1T0
        -ddN5T*IA*dN1T0*dN3T*N2Tm+N1Tm*ddN2T0*dN5T*ddN3T*IS+N1Tm*ddN3T0*IP*dN5T*dN0T0*ddN2T
        +ddN5T*dN2T*N1Tm*ddN3T0*IS-FS*ddN3T*N5Tm*dN2T0*ddN1T0-ddN2T0*dN1T0*dN6T*FP*ddN3T*N5Tm
        +N3Tm*dN5T*ddN2T*ddN1T0*IS-ddN5T*dN2T*N1Tm*ddN3T0*IP*dN0T0+IP*N2Tm*dN5T*ddN3T*dN0T0*ddN1T0
        -ddN0T0*dN1T0*IP*dN3T*N5Tm*ddN2T+ddN5T*FS*ddN3T0*dN1T0*N2Tm+ddN5T*N1Tm*ddN2T0*IP*dN3T*dN0T0
        +IA*N1Tm*dN3T0*dN5T*ddN2T-ddN2T0*dN1T0*dN3T*FA*N5Tm-ddN5T*FS*N3Tm*ddN2T0*dN1T0
        -N1Tm*ddN3T0*dN5T*ddN2T*IS+dN6T*FP*ddN3T*N5Tm*dN2T0*ddN1T0+ddN5T*N3Tm*ddN2T0*dN1T0*dN6T*FP
        -ddN5T*MidP1*dN3T*dN2T0*ddN1T0-ddN5T*dN2T*MidP1*ddN3T0*dN1T0-IA*N1Tm*dN5T*ddN3T*dN2T0
        -ddN5T*dN2T*ddN0T0*N3Tm*dN1T0*IP-N2Tm*dN5T*ddN3T*ddN1T0*IS+IP*dN3T*dN0T0*N5Tm*ddN2T*ddN1T0
        -dN2T*dN3T0*FA*N5Tm*ddN1T0-dN3T*N5Tm*ddN2T*ddN1T0*IS+N3Tm*ddN6T*FP*dN5T*dN2T0*ddN1T0
        +IA*dN1T0*N2Tm*dN5T*ddN3T+dN2T*ddN3T*N5Tm*ddN1T0*IS-IA*N3Tm*dN1T0*dN5T*ddN2T
        +dN2T*ddN0T0*dN1T0*IP*ddN3T*N5Tm+ddN5T*dN3T0*dN6T*FP*N2Tm*ddN1T0+N3Tm*ddN2T0*dN1T0*dN5T*FA
        -ddN5T*N1Tm*ddN2T0*dN3T*IS+ddN0T0*N3Tm*dN1T0*IP*dN5T*ddN2T-FS*ddN3T0*dN1T0*N5Tm*ddN2T
        +ddN5T*N1Tm*FS*ddN2T0*dN3T0+ddN5T*dN2T*MidP1*dN3T0*ddN1T0+ddN2T0*dN1T0*ddN6T*dN3T*FP*N5Tm
        -MidP1*ddN2T0*dN1T0*dN5T*ddN3T+N1Tm*ddN2T0*ddN6T*dN3T0*FP*dN5T+ddN0T0*N1Tm*IP*dN5T*ddN3T*dN2T0
        +ddN3T0*dN1T0*dN6T*FP*N5Tm*ddN2T-dN2T*ddN3T0*dN1T0*ddN6T*FP*N5Tm-dN3T0*dN6T*FP*N5Tm*ddN2T*ddN1T0
        -N3Tm*ddN2T0*dN1T0*ddN6T*FP*dN5T+ddN5T*ddN0T0*dN1T0*IP*dN3T*N2Tm-N1Tm*ddN2T0*dN3T0*dN5T*FA
        +IA*dN1T0*dN3T*N5Tm*ddN2T+ddN5T*N1Tm*ddN3T0*dN6T*FP*dN2T0-MidP1*dN3T0*dN5T*ddN2T*ddN1T0
        -ddN5T*N1Tm*ddN2T0*dN3T0*dN6T*FP+FS*ddN2T0*dN1T0*ddN3T*N5Tm-ddN6T*dN3T*FP*N5Tm*dN2T0*ddN1T0
        +dN3T*FA*N5Tm*dN2T0*ddN1T0-N1Tm*ddN2T0*IP*dN5T*ddN3T*dN0T0+ddN5T*IA*dN2T*N3Tm*dN1T0
        -dN2T*IP*ddN3T*dN0T0*N5Tm*ddN1T0+MidP1*ddN3T0*dN1T0*dN5T*ddN2T+ddN5T*dN2T*N3Tm*IP*dN0T0*ddN1T0
        +ddN5T*IA*N1Tm*dN3T*dN2T0)
      /( ddN5T*dN3T*dN4T0*N2Tm*ddN1T0-ddN5T*dN4T*dN3T0*N2Tm*ddN1T0-ddN5T*N1Tm*ddN3T0*dN4T*dN2T0
         +dN4T*dN3T0*N5Tm*ddN2T*ddN1T0-dN3T*dN4T0*N5Tm*ddN2T*ddN1T0+ddN5T*N1Tm*dN4T*ddN2T0*dN3T0
         -N1Tm*ddN4T0*dN5T*ddN3T*dN2T0-ddN4T*N3Tm*dN5T*dN2T0*ddN1T0+ddN5T*N4Tm*ddN2T0*dN1T0*dN3T
         -N1Tm*ddN3T0*dN4T0*dN5T*ddN2T-ddN5T*N1Tm*ddN2T0*dN3T*dN4T0-N4Tm*dN3T0*dN5T*ddN2T*ddN1T0
         +ddN5T*ddN3T0*dN4T*dN1T0*N2Tm+ddN4T*N3Tm*ddN2T0*dN1T0*dN5T+ddN5T*N1Tm*dN3T*ddN4T0*dN2T0
         +N1Tm*ddN4T*ddN3T0*dN5T*dN2T0-ddN4T*ddN2T0*dN1T0*dN3T*N5Tm-dN4T*ddN3T*N5Tm*dN2T0*ddN1T0
         +ddN5T*N3Tm*dN4T*dN2T0*ddN1T0+ddN5T*dN2T*N3Tm*dN1T0*ddN4T0-N3Tm*dN1T0*ddN4T0*dN5T*ddN2T
         -N4Tm*ddN2T0*dN1T0*dN5T*ddN3T+dN1T0*dN3T*ddN4T0*N5Tm*ddN2T+N1Tm*ddN2T0*dN4T0*dN5T*ddN3T
         +dN2T*dN4T0*ddN3T*N5Tm*ddN1T0-ddN4T*ddN3T0*dN1T0*N2Tm*dN5T-ddN5T*dN1T0*dN3T*ddN4T0*N2Tm
         +N4Tm*dN5T*ddN3T*dN2T0*ddN1T0+dN2T*ddN4T*ddN3T0*dN1T0*N5Tm-ddN5T*dN2T*ddN3T0*N4Tm*dN1T0
         -ddN5T*dN2T*N1Tm*dN3T0*ddN4T0+ddN5T*dN2T*N1Tm*ddN3T0*dN4T0+N1Tm*dN3T0*ddN4T0*dN5T*ddN2T
         -ddN5T*dN2T*N3Tm*dN4T0*ddN1T0-dN2T*dN1T0*ddN4T0*ddN3T*N5Tm+ddN4T*dN3T0*N2Tm*dN5T*ddN1T0
         -dN4T0*N2Tm*dN5T*ddN3T*ddN1T0+dN4T*ddN2T0*dN1T0*ddN3T*N5Tm-ddN3T0*dN4T*dN1T0*N5Tm*ddN2T
         -ddN5T*N4Tm*dN3T*dN2T0*ddN1T0+ddN4T*dN3T*N5Tm*dN2T0*ddN1T0+dN1T0*ddN4T0*N2Tm*dN5T*ddN3T
         -N1Tm*ddN4T*ddN2T0*dN3T0*dN5T+ddN5T*dN2T*N4Tm*dN3T0*ddN1T0+ddN3T0*N4Tm*dN1T0*dN5T*ddN2T
         -ddN5T*N3Tm*dN4T*ddN2T0*dN1T0-dN2T*ddN4T*dN3T0*N5Tm*ddN1T0+N3Tm*dN4T0*dN5T*ddN2T*ddN1T0);
  m_control_points[5]=
      -( N1Tm*dN4T*ddN2T0*ddN3T*IS+FS*dN4T0*N2Tm*ddN3T*ddN1T0-N3Tm*dN1T0*dN6T*ddN4T0*FP*ddN2T
         +N1Tm*FS*ddN4T0*ddN3T*dN2T0-N1Tm*FS*ddN4T*ddN3T0*dN2T0-ddN0T0*dN4T*dN1T0*IP*N2Tm*ddN3T
         -N1Tm*dN4T*ddN2T0*IP*ddN3T*dN0T0+N1Tm*FS*ddN3T0*dN4T0*ddN2T+MidP1*ddN3T0*dN4T*dN1T0*ddN2T
         -N3Tm*dN4T*IP*dN0T0*ddN2T*ddN1T0+N1Tm*ddN3T0*dN4T*FA*dN2T0+IA*dN2T*N1Tm*dN4T0*ddN3T
         -ddN0T0*N1Tm*dN4T*IP*dN3T0*ddN2T-FS*ddN3T0*N4Tm*dN1T0*ddN2T+N1Tm*dN3T*ddN4T0*ddN2T*IS
         +N3Tm*dN4T0*dN6T*FP*ddN2T*ddN1T0+ddN3T0*N4Tm*dN1T0*dN6T*FP*ddN2T-FS*ddN4T*N3Tm*ddN2T0
         *dN1T0+FS*N4Tm*ddN2T0*dN1T0*ddN3T+N4Tm*dN3T*FA*dN2T0*ddN1T0-FS*N4Tm*ddN3T*dN2T0*ddN1T0
         -dN2T*N3Tm*dN1T0*ddN4T0*FA+N3Tm*dN4T*ddN2T0*dN1T0*FA+N3Tm*dN4T*ddN2T*ddN1T0*IS+dN2T
         *ddN0T0*N1Tm*ddN4T*IP*dN3T0-N1Tm*ddN4T*ddN2T0*dN3T0*dN6T*FP+dN4T*IP*N2Tm*ddN3T*dN0T0
         *ddN1T0+N1Tm*dN4T*ddN2T0*ddN6T*dN3T0*FP+N1Tm*ddN4T*ddN3T0*dN6T*FP*dN2T0-dN2T*N1Tm
         *ddN4T*ddN3T0*IP*dN0T0+N4Tm*IP*dN3T*dN0T0*ddN2T*ddN1T0-N4Tm*dN3T*ddN2T*ddN1T0*IS-MidP1
         *dN4T*ddN2T0*dN1T0*ddN3T-N1Tm*FS*dN3T0*ddN4T0*ddN2T-dN1T0*ddN6T*dN3T*ddN4T0*FP*N2Tm
         -dN2T*ddN4T*N3Tm*ddN1T0*IS+N1Tm*ddN2T0*dN3T*dN4T0*FA-N1Tm*ddN3T0*dN4T0*dN6T*FP*ddN2T
         -IA*N3Tm*dN4T*dN1T0*ddN2T+MidP1*dN4T*ddN3T*dN2T0*ddN1T0+N3Tm*dN4T*ddN6T*FP*dN2T0*ddN1T0
         +ddN4T*N3Tm*ddN2T0*dN1T0*dN6T*FP-ddN0T0*N4Tm*dN1T0*IP*dN3T*ddN2T-dN3T*dN4T0*N2Tm*FA
         *ddN1T0-N3Tm*dN4T*FA*dN2T0*ddN1T0+N1Tm*ddN3T0*dN4T*IP*dN0T0*ddN2T-N1Tm*ddN4T*ddN2T0
         *dN3T*IS-dN2T*ddN3T0*N4Tm*dN1T0*ddN6T*FP-dN2T*MidP1*dN4T0*ddN3T*ddN1T0+IA*dN2T*ddN4T
         *N3Tm*dN1T0+dN2T*ddN4T*N3Tm*IP*dN0T0*ddN1T0-N4Tm*ddN2T0*dN1T0*dN3T*FA-dN2T*ddN0T0*ddN4T
         *N3Tm*dN1T0*IP-ddN3T0*dN4T*dN1T0*N2Tm*FA-N4Tm*dN3T0*dN6T*FP*ddN2T*ddN1T0-N1Tm*dN6T
         *ddN4T0*FP*ddN3T*dN2T0+IA*N1Tm*dN4T*dN3T0*ddN2T+N1Tm*dN3T0*dN6T*ddN4T0*FP*ddN2T-N1Tm
         *FS*ddN2T0*dN4T0*ddN3T+dN2T*N1Tm*ddN3T0*ddN6T*dN4T0*FP+ddN4T*dN3T0*dN6T*FP*N2Tm*ddN1T0
         +dN4T*dN3T0*N2Tm*FA*ddN1T0+ddN4T*dN3T*N2Tm*ddN1T0*IS+ddN4T*MidP1*ddN2T0*dN1T0*dN3T-N1Tm
         *ddN3T0*dN4T*ddN6T*FP*dN2T0-dN4T0*dN6T*FP*N2Tm*ddN3T*ddN1T0+IA*N4Tm*dN1T0*dN3T*ddN2T
         -dN4T*N2Tm*ddN3T*ddN1T0*IS-N1Tm*dN3T*ddN4T0*FA*dN2T0-dN2T*N4Tm*dN3T0*FA*ddN1T0-dN2T*N3Tm
         *ddN6T*dN4T0*FP*ddN1T0+IA*N1Tm*ddN4T*dN3T*dN2T0-ddN0T0*N1Tm*ddN4T*IP*dN3T*dN2T0+dN2T
         *ddN4T*MidP1*dN3T0*ddN1T0-dN2T*N4Tm*IP*ddN3T*dN0T0*ddN1T0+dN2T*N1Tm*IP*ddN4T0*ddN3T*dN0T0
         +dN2T*MidP1*dN1T0*ddN4T0*ddN3T+N4Tm*ddN2T0*dN1T0*ddN6T*dN3T*FP-N1Tm*ddN2T0*ddN6T*dN3T
         *dN4T0*FP-IA*N1Tm*dN4T*ddN3T*dN2T0-FS*ddN4T*dN3T0*N2Tm*ddN1T0-dN2T*N1Tm*ddN3T0*dN4T0*FA
         +FS*N4Tm*dN3T0*ddN2T*ddN1T0+N1Tm*ddN4T*ddN2T0*IP*dN3T*dN0T0+dN2T*N3Tm*dN1T0*ddN6T*ddN4T0
         *FP-N1Tm*dN4T*ddN2T0*dN3T0*FA+ddN0T0*N1Tm*IP*dN3T*dN4T0*ddN2T-N1Tm*ddN3T0*dN4T*ddN2T*IS
         +dN2T*ddN0T0*N4Tm*dN1T0*IP*ddN3T+N1Tm*FS*ddN4T*ddN2T0*dN3T0+dN1T0*dN6T*ddN4T0*FP*N2Tm
         *ddN3T+ddN3T0*dN4T*dN1T0*ddN6T*FP*N2Tm+FS*ddN4T*N3Tm*dN2T0*ddN1T0-dN2T*ddN4T*MidP1*ddN3T0
         *dN1T0-N4Tm*ddN6T*dN3T*FP*dN2T0*ddN1T0+IA*dN4T*dN1T0*N2Tm*ddN3T-dN2T*N1Tm*ddN6T*dN3T0
         *ddN4T0*FP+MidP1*dN3T*dN4T0*ddN2T*ddN1T0+dN2T*N4Tm*ddN3T*ddN1T0*IS-dN4T*ddN6T*dN3T0*FP
         *N2Tm*ddN1T0-dN2T*ddN0T0*N1Tm*IP*dN4T0*ddN3T+FS*ddN4T*ddN3T0*dN1T0*N2Tm-IA*dN2T*N1Tm*ddN4T
         *dN3T0+N1Tm*ddN2T0*dN4T0*dN6T*FP*ddN3T+dN1T0*dN3T*ddN4T0*N2Tm*FA-ddN4T*ddN3T0*dN1T0*dN6T
         *FP*N2Tm-ddN4T*N3Tm*dN6T*FP*dN2T0*ddN1T0-N4Tm*ddN2T0*dN1T0*dN6T*FP*ddN3T-IA*dN2T*N4Tm*dN1T0
         *ddN3T-MidP1*dN4T*dN3T0*ddN2T*ddN1T0+ddN0T0*N1Tm*dN4T*IP*ddN3T*dN2T0+dN2T*N1Tm*ddN4T*ddN3T0
         *IS-dN2T*N1Tm*ddN4T0*ddN3T*IS-MidP1*dN1T0*dN3T*ddN4T0*ddN2T+dN2T*N3Tm*dN4T0*FA*ddN1T0+FS
         *N3Tm*dN1T0*ddN4T0*ddN2T+ddN0T0*ddN4T*dN1T0*IP*dN3T*N2Tm-N3Tm*dN4T*ddN2T0*dN1T0*ddN6T*FP
         -FS*N3Tm*dN4T0*ddN2T*ddN1T0-ddN4T*MidP1*dN3T*dN2T0*ddN1T0+dN2T*N4Tm*ddN6T*dN3T0*FP*ddN1T0
         +dN2T*N1Tm*dN3T0*ddN4T0*FA-ddN4T*IP*dN3T*N2Tm*dN0T0*ddN1T0+ddN6T*dN3T*dN4T0*FP*N2Tm*ddN1T0
         -N1Tm*IP*dN3T*ddN4T0*dN0T0*ddN2T-IA*N1Tm*dN3T*dN4T0*ddN2T+ddN0T0*N3Tm*dN4T*dN1T0*IP*ddN2T
         +N4Tm*dN6T*FP*ddN3T*dN2T0*ddN1T0+dN2T*ddN3T0*N4Tm*dN1T0*FA-FS*dN1T0*ddN4T0*N2Tm*ddN3T+N1Tm
         *ddN6T*dN3T*ddN4T0*FP*dN2T0-IA*ddN4T*dN1T0*dN3T*N2Tm)
      /( ddN5T*dN3T*dN4T0*N2Tm*ddN1T0-ddN5T*dN4T*dN3T0*N2Tm*ddN1T0-ddN5T*N1Tm*ddN3T0*dN4T*dN2T0
         +dN4T*dN3T0*N5Tm*ddN2T*ddN1T0-dN3T*dN4T0*N5Tm*ddN2T*ddN1T0+ddN5T*N1Tm*dN4T*ddN2T0*dN3T0
         -N1Tm*ddN4T0*dN5T*ddN3T*dN2T0-ddN4T*N3Tm*dN5T*dN2T0*ddN1T0+ddN5T*N4Tm*ddN2T0*dN1T0*dN3T
         -N1Tm*ddN3T0*dN4T0*dN5T*ddN2T-ddN5T*N1Tm*ddN2T0*dN3T*dN4T0-N4Tm*dN3T0*dN5T*ddN2T*ddN1T0
         +ddN5T*ddN3T0*dN4T*dN1T0*N2Tm+ddN4T*N3Tm*ddN2T0*dN1T0*dN5T+ddN5T*N1Tm*dN3T*ddN4T0*dN2T0
         +N1Tm*ddN4T*ddN3T0*dN5T*dN2T0-ddN4T*ddN2T0*dN1T0*dN3T*N5Tm-dN4T*ddN3T*N5Tm*dN2T0*ddN1T0
         +ddN5T*N3Tm*dN4T*dN2T0*ddN1T0+ddN5T*dN2T*N3Tm*dN1T0*ddN4T0-N3Tm*dN1T0*ddN4T0*dN5T*ddN2T
         -N4Tm*ddN2T0*dN1T0*dN5T*ddN3T+dN1T0*dN3T*ddN4T0*N5Tm*ddN2T+N1Tm*ddN2T0*dN4T0*dN5T*ddN3T
         +dN2T*dN4T0*ddN3T*N5Tm*ddN1T0-ddN4T*ddN3T0*dN1T0*N2Tm*dN5T-ddN5T*dN1T0*dN3T*ddN4T0*N2Tm
         +N4Tm*dN5T*ddN3T*dN2T0*ddN1T0+dN2T*ddN4T*ddN3T0*dN1T0*N5Tm-ddN5T*dN2T*ddN3T0*N4Tm*dN1T0
         -ddN5T*dN2T*N1Tm*dN3T0*ddN4T0+ddN5T*dN2T*N1Tm*ddN3T0*dN4T0+N1Tm*dN3T0*ddN4T0*dN5T*ddN2T
         -ddN5T*dN2T*N3Tm*dN4T0*ddN1T0-dN2T*dN1T0*ddN4T0*ddN3T*N5Tm+ddN4T*dN3T0*N2Tm*dN5T*ddN1T0
         -dN4T0*N2Tm*dN5T*ddN3T*ddN1T0+dN4T*ddN2T0*dN1T0*ddN3T*N5Tm-ddN3T0*dN4T*dN1T0*N5Tm*ddN2T
         -ddN5T*N4Tm*dN3T*dN2T0*ddN1T0+ddN4T*dN3T*N5Tm*dN2T0*ddN1T0+dN1T0*ddN4T0*N2Tm*dN5T*ddN3T
         -N1Tm*ddN4T*ddN2T0*dN3T0*dN5T+ddN5T*dN2T*N4Tm*dN3T0*ddN1T0+ddN3T0*N4Tm*dN1T0*dN5T*ddN2T
         -ddN5T*N3Tm*dN4T*ddN2T0*dN1T0-dN2T*ddN4T*dN3T0*N5Tm*ddN1T0+N3Tm*dN4T0*dN5T*ddN2T*ddN1T0);
  m_control_points[6]=FP ;
  return ;
}

void BSplinesFoot::ComputeControlPointFrom4DataPoint(void)
{
  ComputeBasisFunctions(0);
  vector<double> dNi5T0  = m_basis_functions_derivative ;
  vector<double> ddNi5T0 = m_basis_functions_sec_derivative ;

  ComputeBasisFunctions(m_ToMP[0]/m_FT);
  vector<double> Ni5Tm1  = m_basis_functions[m_degree] ;

  ComputeBasisFunctions(m_ToMP[1]/m_FT);
  vector<double> Ni5Tm2  = m_basis_functions[m_degree] ;

  ComputeBasisFunctions(1.0);
  vector<double> dNi5T  = m_basis_functions_derivative ;
  vector<double> ddNi5T = m_basis_functions_sec_derivative ;

  double IP=m_IP ;
  double IS=m_IS ;
  double IA=m_IA ;
  double FP=m_FP ;
  double FS=m_FS ;
  double FA=m_FA ;
  double MidP1=m_MP[0];
  double MidP2=m_MP[1];

  double N1Tm1 = Ni5Tm1[1] ;
  double N2Tm1 = Ni5Tm1[2] ;
  double N3Tm1 = Ni5Tm1[3] ;
  double N4Tm1 = Ni5Tm1[4] ;
  double N5Tm1 = Ni5Tm1[5] ;

  double N2Tm2 = Ni5Tm2[2] ;
  double N3Tm2 = Ni5Tm2[3] ;
  double N4Tm2 = Ni5Tm2[4] ;
  double N5Tm2 = Ni5Tm2[5] ;
  double N6Tm2 = Ni5Tm2[6] ;

  double dN0T0 = dNi5T0[0] ;
  double dN1T0 = dNi5T0[1] ;
  double dN2T0 = dNi5T0[2] ;
  double dN3T0 = dNi5T0[3] ;
  double dN4T0 = dNi5T0[4] ;

  double dN3T = dNi5T[3] ;
  double dN4T = dNi5T[4] ;
  double dN5T = dNi5T[5] ;
  double dN6T = dNi5T[6] ;
  double dN7T = dNi5T[7] ;

  double ddN0T0 = ddNi5T0[0] ;
  double ddN1T0 = ddNi5T0[1] ;
  double ddN2T0 = ddNi5T0[2] ;
  double ddN3T0 = ddNi5T0[3] ;
  double ddN4T0 = ddNi5T0[4] ;

  double ddN3T  = ddNi5T[3] ;
  double ddN4T  = ddNi5T[4] ;
  double ddN5T  = ddNi5T[5] ;
  double ddN6T  = ddNi5T[6] ;
  double ddN7T  = ddNi5T[7] ;

  m_control_points[0]=IP;
  m_control_points[1]=
    -1.0/( N3Tm1*ddN6T*dN5T*ddN1T0*N2Tm2*dN4T0+N4Tm1*N5Tm2*dN6T*dN2T0*ddN3T*ddN1T0-ddN2T0
           *ddN6T*N5Tm2*dN3T*N1Tm1*dN4T0+dN3T0*ddN2T0*N6Tm2*dN5T*N1Tm1*ddN4T-ddN2T0*N4Tm1
           *N6Tm2*dN3T*dN1T0*ddN5T-N2Tm1*N5Tm2*dN6T*ddN3T*ddN1T0*dN4T0-ddN3T0*dN6T*dN2T0
           *N1Tm1*ddN5T*N4Tm2-ddN2T0*N4Tm1*ddN6T*dN5T*dN1T0*N3Tm2-N4Tm1*ddN6T*N5Tm2*dN3T
           *dN2T0*ddN1T0-dN3T0*ddN2T0*ddN6T*dN5T*N1Tm1*N4Tm2-ddN3T0*dN4T*N6Tm2*N2Tm1*dN1T0*ddN5T
           -dN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*ddN1T0+ddN3T0*N6Tm2*N2Tm1*dN5T*dN1T0*ddN4T+N3Tm1*ddN2T0
           *N5Tm2*dN6T*dN1T0*ddN4T-N5Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN3T-dN3T0*dN6T*ddN4T0*N1Tm1
           *ddN5T*N2Tm2+ddN2T0*N6Tm2*dN3T*N1Tm1*ddN5T*dN4T0+N6Tm2*ddN4T0*dN2T0*dN5T*ddN3T*N1Tm1
           +N5Tm1*ddN6T*dN3T*dN2T0*ddN1T0*N4Tm2+dN6T*ddN4T0*dN2T0*N1Tm1*N3Tm2*ddN5T-N3Tm1*dN4T
           *ddN2T0*ddN6T*N5Tm2*dN1T0+N3Tm1*dN6T*dN2T0*ddN1T0*ddN5T*N4Tm2-N3Tm1*ddN2T0*N6Tm2*dN5T
           *dN1T0*ddN4T+N2Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*ddN3T+N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*ddN4T
           +N5Tm1*dN6T*ddN3T*ddN1T0*N2Tm2*dN4T0+dN3T0*dN4T*N6Tm2*N2Tm1*ddN1T0*ddN5T-dN3T0*N6Tm2
           *N2Tm1*dN5T*ddN1T0*ddN4T-ddN3T0*N6Tm2*dN2T0*dN5T*N1Tm1*ddN4T+ddN6T*N5Tm2*dN3T*ddN4T0
           *dN2T0*N1Tm1+N5Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN4T+ddN2T0*ddN6T*dN5T*N1Tm1*N3Tm2*dN4T0
           -ddN2T0*N6Tm2*dN5T*ddN3T*N1Tm1*dN4T0+dN3T0*ddN2T0*dN6T*N1Tm1*ddN5T*N4Tm2+ddN3T0*N2Tm1
           *dN6T*dN1T0*ddN5T*N4Tm2+N3Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*ddN4T-ddN3T0*N4Tm1*dN6T*dN1T0
           *ddN5T*N2Tm2+N4Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*ddN5T+N4Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N3Tm2
           +N3Tm1*ddN2T0*ddN6T*dN5T*dN1T0*N4Tm2-ddN3T0*ddN6T*dN5T*N1Tm1*N2Tm2*dN4T0-N3Tm1*dN6T
           *ddN1T0*ddN5T*N2Tm2*dN4T0+N5Tm1*ddN6T*dN3T*ddN4T0*dN1T0*N2Tm2-dN3T0*ddN2T0*N5Tm2*dN6T
           *N1Tm1*ddN4T-N5Tm1*ddN2T0*ddN6T*dN3T*dN1T0*N4Tm2+ddN3T0*N5Tm1*dN6T*dN1T0*N2Tm2*ddN4T
           -ddN6T*ddN4T0*dN2T0*dN5T*N1Tm1*N3Tm2+dN3T0*N2Tm1*N5Tm2*dN6T*ddN1T0*ddN4T+ddN3T0*dN4T
           *N2Tm1*ddN6T*N5Tm2*dN1T0+N2Tm1*ddN6T*N5Tm2*dN3T*ddN1T0*dN4T0-N5Tm1*ddN6T*dN3T*ddN1T0
           *N2Tm2*dN4T0-N3Tm1*N5Tm2*dN6T*dN2T0*ddN1T0*ddN4T+ddN3T0*N4Tm1*ddN6T*dN5T*dN1T0*N2Tm2
           -N3Tm1*ddN2T0*dN6T*dN1T0*ddN5T*N4Tm2-N2Tm1*dN6T*ddN4T0*dN1T0*N3Tm2*ddN5T-N5Tm2*dN6T
           *ddN4T0*dN2T0*ddN3T*N1Tm1+ddN3T0*N5Tm2*dN6T*dN2T0*N1Tm1*ddN4T-N5Tm1*dN6T*dN2T0*ddN3T
           *ddN1T0*N4Tm2+N3Tm1*dN4T*ddN6T*N5Tm2*dN2T0*ddN1T0-ddN3T0*N2Tm1*ddN6T*dN5T*dN1T0*N4Tm2
           +dN3T0*ddN6T*ddN4T0*dN5T*N1Tm1*N2Tm2-N2Tm1*ddN6T*dN5T*ddN1T0*N3Tm2*dN4T0+dN3T0*N5Tm1
           *dN4T*ddN6T*ddN1T0*N2Tm2-N6Tm2*N2Tm1*dN3T*ddN1T0*ddN5T*dN4T0+N3Tm1*dN6T*ddN4T0*dN1T0
           *ddN5T*N2Tm2-N6Tm2*dN3T*ddN4T0*dN2T0*N1Tm1*ddN5T-ddN2T0*N4Tm1*N5Tm2*dN6T*dN1T0*ddN3T
           +N3Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN5T-N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0*ddN3T-N5Tm1*ddN2T0
           *dN6T*dN1T0*N3Tm2*ddN4T-ddN3T0*dN4T*ddN6T*N5Tm2*dN2T0*N1Tm1+ddN2T0*N5Tm2*dN6T*ddN3T
           *N1Tm1*dN4T0+ddN2T0*N4Tm1*N6Tm2*dN5T*dN1T0*ddN3T+dN3T0*dN4T*ddN2T0*ddN6T*N5Tm2*N1Tm1
           -N5Tm1*dN4T*ddN6T*dN2T0*ddN1T0*N3Tm2-ddN3T0*N5Tm1*dN4T*ddN6T*dN1T0*N2Tm2+ddN3T0*dN4T
           *N6Tm2*dN2T0*N1Tm1*ddN5T-N4Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN5T-N2Tm1*ddN6T*N5Tm2*dN3T
           *ddN4T0*dN1T0+ddN2T0*N4Tm1*dN6T*dN1T0*N3Tm2*ddN5T+dN3T0*N2Tm1*ddN6T*dN5T*ddN1T0*N4Tm2
           +N5Tm1*ddN2T0*dN6T*dN1T0*ddN3T*N4Tm2+ddN3T0*dN6T*N1Tm1*ddN5T*N2Tm2*dN4T0-dN3T0*N4Tm1
           *ddN6T*dN5T*ddN1T0*N2Tm2-ddN2T0*dN6T*N1Tm1*N3Tm2*ddN5T*dN4T0-N5Tm1*N6Tm2*dN3T*dN2T0
           *ddN1T0*ddN4T-N3Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N2Tm2-ddN3T0*N2Tm1*N5Tm2*dN6T*dN1T0*ddN4T
           +ddN2T0*N4Tm1*ddN6T*N5Tm2*dN3T*dN1T0-N3Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*ddN5T-dN3T0*N5Tm1
           *dN6T*ddN1T0*N2Tm2*ddN4T-N5Tm1*dN6T*ddN4T0*dN1T0*ddN3T*N2Tm2+N6Tm2*N2Tm1*dN5T*ddN3T
           *ddN1T0*dN4T0-N3Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N4Tm2+N2Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N3Tm2
           +N5Tm1*dN4T*ddN2T0*ddN6T*dN1T0*N3Tm2+N2Tm1*dN6T*ddN1T0*N3Tm2*ddN5T*dN4T0+dN3T0*N4Tm1
           *dN6T*ddN1T0*ddN5T*N2Tm2-dN3T0*dN4T*ddN2T0*N6Tm2*N1Tm1*ddN5T+ddN3T0*ddN6T*dN2T0*dN5T
           *N1Tm1*N4Tm2+N5Tm1*dN4T*N6Tm2*dN2T0*ddN3T*ddN1T0-dN3T0*N2Tm1*dN6T*ddN1T0*ddN5T*N4Tm2
           -N4Tm1*N6Tm2*dN2T0*dN5T*ddN3T*ddN1T0+N6Tm2*N2Tm1*dN3T*ddN4T0*dN1T0*ddN5T)
      *( N3Tm1*IA*dN6T*ddN5T*N2Tm2*dN4T0+ddN3T0*N2Tm1*dN6T*IP*dN0T0*ddN5T*N4Tm2-ddN3T0*N2Tm1
         *N5Tm2*dN6T*FA*dN4T0+N2Tm1*N5Tm2*dN6T*ddN4T0*IP*ddN3T*dN0T0-N3Tm1*IS*dN6T*ddN4T0*ddN5T
         *N2Tm2+N5Tm1*ddN2T0*N6Tm2*ddN3T*dN7T*FP*dN4T0+N6Tm2*N2Tm1*IS*ddN4T0*dN5T*ddN3T+N3Tm1
         *dN6T*ddN4T0*IP*dN0T0*ddN5T*N2Tm2-ddN2T0*N5Tm2*dN6T*ddN3T*MidP1*dN4T0-N4Tm1*N6Tm2*IA
         *dN3T*dN2T0*ddN5T+dN3T0*ddN2T0*ddN6T*dN5T*N4Tm2*MidP1-N2Tm1*ddN6T*N5Tm2*dN3T*ddN4T0*IP
         *dN0T0-N2Tm1*N5Tm2*IS*dN6T*ddN4T0*ddN3T+ddN3T0*dN4T*N6Tm2*N2Tm1*IS*ddN5T-N5Tm1*dN6T
         *ddN4T0*dN2T0*ddN3T*MidP2-dN3T0*ddN7T*N2Tm1*N5Tm2*dN6T*ddN4T0*FP+dN3T0*N5Tm1*ddN2T0*dN6T
         *FA*N4Tm2+ddN3T0*N5Tm1*dN6T*dN2T0*MidP2*ddN4T-N5Tm1*ddN2T0*ddN6T*dN3T*MidP2*dN4T0+N2Tm1
         *N5Tm2*IA*dN6T*ddN3T*dN4T0-N6Tm2*ddN4T0*dN2T0*dN5T*ddN3T*MidP1+ddN3T0*ddN6T*dN5T*MidP1
         *N2Tm2*dN4T0-dN3T0*N5Tm1*ddN6T*ddN4T0*dN7T*FP*N2Tm2+ddN2T0*N4Tm1*N6Tm2*dN3T*IS*ddN5T
         +dN3T0*N6Tm2*N2Tm1*IA*dN5T*ddN4T-ddN2T0*N4Tm1*ddN6T*IP*dN5T*dN0T0*N3Tm2-N5Tm1*IA*dN6T
         *ddN3T*N2Tm2*dN4T0+N3Tm1*ddN2T0*ddN6T*dN5T*MidP2*dN4T0+dN3T0*ddN7T*N5Tm1*dN6T*ddN4T0
         *FP*N2Tm2+ddN7T*N3Tm1*N5Tm2*dN6T*ddN4T0*dN2T0*FP-N6Tm2*N2Tm1*ddN4T0*IP*dN5T*ddN3T*dN0T0
         +N3Tm1*dN6T*IP*dN2T0*ddN5T*N4Tm2*ddN0T0-N3Tm1*IA*dN6T*dN2T0*ddN5T*N4Tm2-ddN3T0*ddN7T
         *N6Tm2*N2Tm1*dN5T*FP*dN4T0-ddN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*IS+ddN3T0*N2Tm1*dN6T*ddN5T
         *MidP2*dN4T0-N3Tm1*ddN6T*N5Tm2*ddN4T0*dN2T0*dN7T*FP+N5Tm1*dN6T*IP*dN2T0*N3Tm2*ddN0T0
         *ddN4T+ddN2T0*N4Tm1*ddN6T*N5Tm2*dN3T*IP*dN0T0-ddN3T0*N4Tm1*ddN6T*IS*dN5T*N2Tm2-N3Tm1
         *dN4T*ddN6T*N5Tm2*IA*dN2T0+ddN3T0*N4Tm1*N6Tm2*dN2T0*FS*ddN5T+dN3T0*dN4T*N2Tm1*ddN6T
         *N5Tm2*IA-N5Tm1*ddN6T*dN3T*IP*N2Tm2*ddN0T0*dN4T0-N5Tm1*ddN2T0*dN6T*FA*N3Tm2*dN4T0
         -ddN3T0*N5Tm2*dN6T*dN2T0*MidP1*ddN4T+N3Tm1*ddN6T*N5Tm2*ddN4T0*dN2T0*FS-N5Tm1*IA*dN6T
         *dN2T0*N3Tm2*ddN4T-N4Tm1*dN6T*IP*dN2T0*N3Tm2*ddN5T*ddN0T0-dN3T0*dN4T*N2Tm1*ddN6T*N5Tm2
         *IP*ddN0T0+N3Tm1*ddN2T0*N5Tm2*dN6T*IP*dN0T0*ddN4T+N3Tm1*ddN6T*IA*dN2T0*dN5T*N4Tm2-dN3T0
         *ddN6T*ddN4T0*dN5T*MidP1*N2Tm2+N3Tm1*N5Tm2*IA*dN6T*dN2T0*ddN4T-N5Tm1*ddN6T*IA*dN3T*dN2T0
         *N4Tm2+N5Tm1*dN4T*N6Tm2*IP*dN2T0*ddN3T*ddN0T0-ddN6T*N5Tm2*dN3T*ddN4T0*dN2T0*MidP1+N2Tm1
         *IS*dN6T*ddN4T0*N3Tm2*ddN5T-dN3T0*ddN2T0*N4Tm1*ddN6T*dN5T*MidP2-ddN3T0*N2Tm1*ddN6T*N5Tm2
         *dN7T*FP*dN4T0+N3Tm1*N6Tm2*IP*dN2T0*dN5T*ddN0T0*ddN4T-N5Tm1*dN4T*ddN2T0*N6Tm2*IP*ddN3T
         *dN0T0-N3Tm1*N5Tm2*dN6T*IP*dN2T0*ddN0T0*ddN4T-N3Tm1*ddN2T0*N5Tm2*IS*dN6T*ddN4T-N3Tm1*N5Tm2
         *dN6T*ddN4T0*dN2T0*FA-dN3T0*N5Tm1*dN4T*ddN2T0*N6Tm2*FA+ddN3T0*N5Tm1*dN4T*N6Tm2*dN2T0*FA
         +ddN3T0*N2Tm1*ddN6T*IS*dN5T*N4Tm2-N3Tm1*dN4T*ddN2T0*ddN6T*N5Tm2*IP*dN0T0-ddN3T0*N4Tm1*N6Tm2
         *dN2T0*dN5T*FA-N3Tm1*ddN2T0*N6Tm2*IP*dN5T*dN0T0*ddN4T-N5Tm1*ddN6T*dN3T*IS*ddN4T0*N2Tm2
         +ddN3T0*N4Tm1*N5Tm2*dN6T*dN2T0*FA+N5Tm1*dN6T*IP*ddN3T*N2Tm2*ddN0T0*dN4T0-dN3T0*ddN7T*ddN2T0
         *N4Tm1*N6Tm2*dN5T*FP+N5Tm1*ddN2T0*dN6T*IP*ddN3T*dN0T0*N4Tm2-N5Tm1*ddN2T0*ddN6T*dN7T*FP
         *N3Tm2*dN4T0+N5Tm1*IS*dN6T*ddN4T0*ddN3T*N2Tm2+ddN7T*N5Tm1*N6Tm2*dN3T*ddN4T0*dN2T0*FP-ddN2T0
         *N4Tm1*ddN6T*N5Tm2*dN3T*IS+N6Tm2*N2Tm1*dN3T*ddN4T0*IP*dN0T0*ddN5T+N5Tm1*ddN6T*dN3T*ddN4T0
         *dN2T0*MidP2-ddN2T0*N6Tm2*dN3T*ddN5T*MidP1*dN4T0+N4Tm1*ddN6T*IP*dN2T0*dN5T*N3Tm2*ddN0T0
         +dN3T0*dN6T*ddN4T0*ddN5T*MidP1*N2Tm2+dN3T0*N2Tm1*IA*dN6T*ddN5T*N4Tm2+N5Tm1*ddN2T0*ddN6T
         *dN3T*IS*N4Tm2+N3Tm1*dN6T*ddN4T0*dN2T0*ddN5T*MidP2-dN3T0*N4Tm1*IA*dN6T*ddN5T*N2Tm2-ddN3T0
         *N5Tm1*ddN6T*dN2T0*dN7T*FP*N4Tm2-N5Tm1*dN4T*N6Tm2*IA*dN2T0*ddN3T-dN3T0*dN4T*N6Tm2*N2Tm1
         *IA*ddN5T-N2Tm1*ddN6T*IS*ddN4T0*dN5T*N3Tm2-dN3T0*N2Tm1*N5Tm2*IA*dN6T*ddN4T+N5Tm1*IA*dN6T
         *dN2T0*ddN3T*N4Tm2+ddN3T0*ddN7T*N5Tm1*dN6T*dN2T0*FP*N4Tm2+dN3T0*N5Tm1*IA*dN6T*N2Tm2*ddN4T
         +N2Tm1*dN6T*IP*N3Tm2*ddN5T*ddN0T0*dN4T0-N4Tm1*N5Tm2*IA*dN6T*dN2T0*ddN3T-ddN3T0*N2Tm1*IS
         *dN6T*ddN5T*N4Tm2+dN3T0*N2Tm1*ddN6T*N5Tm2*ddN4T0*dN7T*FP-ddN3T0*N2Tm1*ddN6T*IP*dN5T*dN0T0
         *N4Tm2-N5Tm1*ddN2T0*dN6T*IP*dN0T0*N3Tm2*ddN4T-ddN3T0*N5Tm1*ddN6T*FS*N2Tm2*dN4T0-N5Tm1*N6Tm2
         *dN3T*ddN4T0*dN2T0*FA-ddN2T0*N4Tm1*N6Tm2*IS*dN5T*ddN3T-N2Tm1*N5Tm2*dN6T*IP*ddN3T*ddN0T0
         *dN4T0+N5Tm1*dN4T*ddN2T0*ddN6T*IP*dN0T0*N3Tm2+N6Tm2*N2Tm1*IP*dN5T*ddN3T*ddN0T0*dN4T0+N3Tm1
         *ddN6T*IS*ddN4T0*dN5T*N2Tm2-ddN3T0*N4Tm1*N6Tm2*dN2T0*dN7T*FP*ddN5T-ddN2T0*ddN6T*dN5T*N3Tm2
         *MidP1*dN4T0-ddN3T0*N4Tm1*ddN6T*N5Tm2*dN2T0*FS+ddN3T0*N2Tm1*ddN6T*N5Tm2*FS*dN4T0-N5Tm1
         *ddN6T*ddN4T0*dN2T0*FS*N3Tm2-N3Tm1*ddN6T*ddN4T0*IP*dN5T*dN0T0*N2Tm2-N5Tm1*ddN2T0*N6Tm2*dN3T
         *IS*ddN4T+N5Tm1*dN4T*ddN2T0*N6Tm2*IS*ddN3T-ddN3T0*N5Tm1*IS*dN6T*N2Tm2*ddN4T+ddN2T0*N4Tm1
         *dN6T*IP*dN0T0*N3Tm2*ddN5T-N3Tm1*dN6T*IP*ddN5T*N2Tm2*ddN0T0*dN4T0-N5Tm1*ddN2T0*ddN6T*dN3T
         *IP*dN0T0*N4Tm2-N3Tm1*ddN6T*IP*dN2T0*dN5T*N4Tm2*ddN0T0-N5Tm1*ddN2T0*N6Tm2*ddN3T*FS*dN4T0
         +dN3T0*ddN7T*ddN2T0*N4Tm1*N5Tm2*dN6T*FP+dN3T0*dN4T*N6Tm2*N2Tm1*IP*ddN5T*ddN0T0-N3Tm1*ddN2T0
         *N6Tm2*dN7T*FP*ddN5T*dN4T0+dN3T0*ddN7T*N6Tm2*N2Tm1*ddN4T0*dN5T*FP+ddN3T0*N4Tm1*IS*dN6T
         *ddN5T*N2Tm2+N2Tm1*ddN6T*IA*dN5T*N3Tm2*dN4T0-N6Tm2*N2Tm1*dN3T*IP*ddN5T*ddN0T0*dN4T0-dN3T0
         *N2Tm1*dN6T*IP*ddN5T*N4Tm2*ddN0T0-ddN3T0*N5Tm1*N6Tm2*dN2T0*FS*ddN4T+N3Tm1*dN4T*ddN6T*N5Tm2
         *IP*dN2T0*ddN0T0+dN3T0*ddN7T*N5Tm1*dN4T*ddN2T0*N6Tm2*FP-N5Tm1*dN6T*ddN4T0*IP*ddN3T*dN0T0
         *N2Tm2+dN3T0*N5Tm1*dN4T*ddN6T*IP*N2Tm2*ddN0T0+N3Tm1*ddN2T0*IS*dN6T*ddN5T*N4Tm2+ddN6T*ddN4T0
         *dN2T0*dN5T*N3Tm2*MidP1+ddN3T0*N5Tm1*ddN6T*dN7T*FP*N2Tm2*dN4T0+N5Tm1*ddN2T0*N6Tm2*dN3T*FA
         *dN4T0-N2Tm1*ddN6T*IP*dN5T*N3Tm2*ddN0T0*dN4T0+N4Tm1*IA*dN6T*dN2T0*N3Tm2*ddN5T+N4Tm1*ddN6T
         *N5Tm2*IA*dN3T*dN2T0+ddN3T0*N4Tm1*ddN6T*N5Tm2*dN2T0*dN7T*FP-N6Tm2*N2Tm1*IA*dN5T*ddN3T*dN4T0
         -N3Tm1*ddN2T0*ddN6T*N5Tm2*FS*dN4T0-N5Tm1*N6Tm2*dN3T*IP*dN2T0*ddN0T0*ddN4T-N3Tm1*ddN2T0*N6Tm2
         *dN5T*FA*dN4T0-dN3T0*N6Tm2*N2Tm1*ddN4T0*dN7T*FP*ddN5T+ddN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*IP*dN0T0
         -ddN3T0*N6Tm2*N2Tm1*IS*dN5T*ddN4T-N2Tm1*IA*dN6T*N3Tm2*ddN5T*dN4T0-ddN3T0*N5Tm1*dN4T*ddN6T*IP
         *dN0T0*N2Tm2+ddN2T0*N4Tm1*ddN6T*IS*dN5T*N3Tm2-dN3T0*N2Tm1*ddN6T*N5Tm2*ddN4T0*FS-ddN3T0*N4Tm1
         *dN6T*dN2T0*ddN5T*MidP2-dN3T0*dN4T*ddN2T0*ddN6T*N5Tm2*MidP1-dN3T0*N5Tm1*ddN2T0*N6Tm2*dN7T*FP
         *ddN4T-N5Tm1*dN6T*IP*dN2T0*ddN3T*N4Tm2*ddN0T0-N3Tm1*dN4T*ddN2T0*N6Tm2*IS*ddN5T-N5Tm1*N6Tm2
         *ddN4T0*dN2T0*ddN3T*dN7T*FP-dN3T0*N5Tm1*dN4T*ddN6T*IA*N2Tm2+ddN3T0*N5Tm1*dN6T*IP*dN0T0*N2Tm2
         *ddN4T+ddN3T0*N5Tm1*ddN6T*dN2T0*FS*N4Tm2-ddN7T*N5Tm1*dN6T*ddN4T0*dN2T0*FP*N3Tm2+dN3T0*N4Tm1
         *ddN6T*IA*dN5T*N2Tm2-dN3T0*ddN2T0*N6Tm2*dN5T*MidP1*ddN4T-dN3T0*ddN2T0*N4Tm1*ddN6T*N5Tm2*dN7T
         *FP+ddN2T0*ddN6T*N5Tm2*dN3T*MidP1*dN4T0+N5Tm1*dN4T*ddN6T*IA*dN2T0*N3Tm2-dN3T0*N5Tm1*ddN2T0
         *dN6T*MidP2*ddN4T-ddN3T0*N5Tm1*dN6T*dN2T0*FA*N4Tm2+N3Tm1*ddN2T0*ddN6T*IP*dN5T*dN0T0*N4Tm2
         +N2Tm1*ddN6T*ddN4T0*IP*dN5T*dN0T0*N3Tm2+N5Tm1*N6Tm2*IA*dN3T*dN2T0*ddN4T+ddN3T0*ddN7T*N4Tm1
         *N6Tm2*dN2T0*dN5T*FP+ddN3T0*N6Tm2*N2Tm1*dN7T*FP*ddN5T*dN4T0+dN3T0*N5Tm1*ddN2T0*N6Tm2*FS*ddN4T
         +ddN3T0*N4Tm1*ddN6T*dN2T0*dN5T*MidP2-ddN7T*N3Tm1*ddN2T0*N5Tm2*dN6T*FP*dN4T0+N6Tm2*dN3T*ddN4T0
         *dN2T0*ddN5T*MidP1-ddN3T0*N4Tm1*dN6T*IP*dN0T0*ddN5T*N2Tm2+N5Tm1*ddN2T0*ddN6T*FS*N3Tm2*dN4T0
         +ddN2T0*N4Tm1*N5Tm2*IS*dN6T*ddN3T-ddN3T0*ddN7T*N5Tm1*dN4T*N6Tm2*dN2T0*FP+ddN3T0*dN6T*dN2T0*ddN5T
         *N4Tm2*MidP1+N3Tm1*ddN6T*IP*dN5T*N2Tm2*ddN0T0*dN4T0+ddN7T*N5Tm1*ddN2T0*dN6T*FP*N3Tm2*dN4T0
         -N4Tm1*ddN6T*IA*dN2T0*dN5T*N3Tm2-N3Tm1*N6Tm2*IA*dN2T0*dN5T*ddN4T-N2Tm1*ddN6T*N5Tm2*IA*dN3T
         *dN4T0+dN3T0*N2Tm1*N5Tm2*dN6T*ddN4T0*FA+N3Tm1*ddN2T0*N6Tm2*FS*ddN5T*dN4T0+dN3T0*N4Tm1*dN6T
         *IP*ddN5T*N2Tm2*ddN0T0+N3Tm1*dN4T*N6Tm2*IA*dN2T0*ddN5T+N5Tm1*ddN2T0*IS*dN6T*N3Tm2*ddN4T
         +N4Tm1*N6Tm2*dN3T*IP*dN2T0*ddN5T*ddN0T0+dN3T0*N5Tm1*ddN2T0*ddN6T*dN7T*FP*N4Tm2+ddN2T0*dN6T
         *N3Tm2*ddN5T*MidP1*dN4T0+N3Tm1*N6Tm2*ddN4T0*dN2T0*dN7T*FP*ddN5T-dN3T0*N2Tm1*ddN6T*IA*dN5T
         *N4Tm2-dN3T0*N6Tm2*N2Tm1*IP*dN5T*ddN0T0*ddN4T+dN3T0*ddN2T0*N4Tm1*dN6T*ddN5T*MidP2+N6Tm2
         *N2Tm1*IA*dN3T*ddN5T*dN4T0-N5Tm1*ddN2T0*IS*dN6T*ddN3T*N4Tm2+dN3T0*N2Tm1*N5Tm2*dN6T*IP*ddN0T0
         *ddN4T-ddN3T0*dN4T*N6Tm2*dN2T0*ddN5T*MidP1+ddN7T*N3Tm1*ddN2T0*N6Tm2*dN5T*FP*dN4T0-N6Tm2*N2Tm1
         *dN3T*IS*ddN4T0*ddN5T-dN3T0*N6Tm2*N2Tm1*ddN4T0*dN5T*FA-ddN2T0*N4Tm1*IS*dN6T*N3Tm2*ddN5T-N3Tm1
         *ddN2T0*dN6T*IP*dN0T0*ddN5T*N4Tm2-dN3T0*ddN7T*N5Tm1*ddN2T0*dN6T*FP*N4Tm2+dN3T0*N5Tm1*ddN6T
         *ddN4T0*FS*N2Tm2-N3Tm1*N6Tm2*ddN4T0*dN2T0*FS*ddN5T+N3Tm1*dN4T*ddN2T0*ddN6T*N5Tm2*IS-N2Tm1
         *dN6T*ddN4T0*IP*dN0T0*N3Tm2*ddN5T+N5Tm1*ddN6T*dN3T*IP*dN2T0*N4Tm2*ddN0T0+N5Tm2*dN6T*ddN4T0
         *dN2T0*ddN3T*MidP1-N4Tm1*ddN6T*N5Tm2*dN3T*IP*dN2T0*ddN0T0+dN3T0*ddN2T0*N5Tm2*dN6T*MidP1
         *ddN4T-ddN7T*N5Tm1*ddN2T0*N6Tm2*dN3T*FP*dN4T0+ddN3T0*N4Tm1*ddN6T*IP*dN5T*dN0T0*N2Tm2+ddN3T0
         *N5Tm1*N6Tm2*dN2T0*dN7T*FP*ddN4T-dN3T0*ddN2T0*N4Tm1*N5Tm2*dN6T*FA-ddN3T0*ddN7T*N5Tm1*dN6T
         *FP*N2Tm2*dN4T0-ddN3T0*dN4T*N6Tm2*N2Tm1*IP*dN0T0*ddN5T-ddN3T0*ddN6T*dN2T0*dN5T*N4Tm2*MidP1
         -dN3T0*N5Tm1*dN6T*ddN4T0*FA*N2Tm2-N5Tm1*dN4T*ddN6T*IP*dN2T0*N3Tm2*ddN0T0-dN3T0*N5Tm1*ddN2T0
         *ddN6T*FS*N4Tm2-ddN3T0*ddN7T*N4Tm1*N5Tm2*dN6T*dN2T0*FP+N3Tm1*N6Tm2*ddN4T0*dN2T0*dN5T*FA
         +N2Tm1*ddN6T*N5Tm2*dN3T*IS*ddN4T0-dN3T0*N5Tm1*dN6T*IP*N2Tm2*ddN0T0*ddN4T-ddN3T0*dN6T*ddN5T
         *MidP1*N2Tm2*dN4T0-dN3T0*N4Tm1*ddN6T*IP*dN5T*N2Tm2*ddN0T0+ddN2T0*N6Tm2*dN5T*ddN3T*MidP1
         *dN4T0+ddN3T0*N2Tm1*N5Tm2*IS*dN6T*ddN4T+N4Tm1*N5Tm2*dN6T*IP*dN2T0*ddN3T*ddN0T0+dN3T0*N5Tm1
         *dN4T*ddN2T0*ddN6T*MidP2+ddN3T0*N6Tm2*dN2T0*dN5T*MidP1*ddN4T-N4Tm1*N6Tm2*IP*dN2T0*dN5T*ddN3T
         *ddN0T0-N5Tm1*dN4T*ddN2T0*ddN6T*IS*N3Tm2-ddN3T0*N6Tm2*N2Tm1*FS*ddN5T*dN4T0+dN3T0*N2Tm1*ddN6T
         *ddN4T0*dN5T*MidP2+dN3T0*N6Tm2*N2Tm1*ddN4T0*FS*ddN5T-N3Tm1*ddN2T0*ddN6T*IS*dN5T*N4Tm2+dN3T0
         *N2Tm1*ddN6T*IP*dN5T*N4Tm2*ddN0T0+N5Tm1*ddN6T*dN3T*ddN4T0*IP*dN0T0*N2Tm2+ddN3T0*dN4T*ddN6T
         *N5Tm2*dN2T0*MidP1+N2Tm1*ddN6T*N5Tm2*dN3T*IP*ddN0T0*dN4T0+dN3T0*ddN2T0*N4Tm1*N6Tm2*dN7T*FP
         *ddN5T+N5Tm1*ddN2T0*dN6T*ddN3T*MidP2*dN4T0-dN3T0*ddN2T0*N4Tm1*N6Tm2*FS*ddN5T+ddN3T0*N6Tm2
         *N2Tm1*dN5T*FA*dN4T0-dN6T*ddN4T0*dN2T0*N3Tm2*ddN5T*MidP1-ddN2T0*N4Tm1*N5Tm2*dN6T*IP*ddN3T
         *dN0T0+N3Tm1*ddN2T0*N5Tm2*dN6T*FA*dN4T0+N5Tm1*N6Tm2*ddN4T0*dN2T0*ddN3T*FS-N3Tm1*ddN6T*IA
         *dN5T*N2Tm2*dN4T0+N3Tm1*dN4T*ddN2T0*N6Tm2*IP*dN0T0*ddN5T+N5Tm1*ddN2T0*N6Tm2*dN3T*IP*dN0T0
         *ddN4T+dN3T0*dN4T*ddN2T0*N6Tm2*ddN5T*MidP1-dN3T0*ddN2T0*dN6T*ddN5T*N4Tm2*MidP1+N5Tm1*dN6T
         *ddN4T0*dN2T0*FA*N3Tm2-ddN3T0*N2Tm1*N5Tm2*dN6T*IP*dN0T0*ddN4T-dN3T0*N2Tm1*dN6T*ddN4T0*ddN5T
         *MidP2+ddN3T0*N5Tm1*dN6T*FA*N2Tm2*dN4T0+ddN3T0*N6Tm2*N2Tm1*IP*dN5T*dN0T0*ddN4T+N5Tm1*ddN6T
         *IA*dN3T*N2Tm2*dN4T0-N3Tm1*dN4T*N6Tm2*IP*dN2T0*ddN5T*ddN0T0-ddN3T0*N5Tm1*dN4T*ddN6T*dN2T0
         *MidP2+ddN2T0*N4Tm1*N6Tm2*IP*dN5T*ddN3T*dN0T0+N5Tm1*ddN6T*ddN4T0*dN2T0*dN7T*FP*N3Tm2-ddN7T
         *N3Tm1*N6Tm2*ddN4T0*dN2T0*dN5T*FP+N3Tm1*ddN2T0*ddN6T*N5Tm2*dN7T*FP*dN4T0+ddN3T0*N5Tm1*dN4T
         *ddN6T*IS*N2Tm2-ddN2T0*N4Tm1*N6Tm2*dN3T*IP*dN0T0*ddN5T+dN3T0*ddN2T0*N4Tm1*ddN6T*N5Tm2*FS
         +dN3T0*ddN2T0*N4Tm1*N6Tm2*dN5T*FA+N4Tm1*N6Tm2*IA*dN2T0*dN5T*ddN3T-N3Tm1*ddN6T*ddN4T0*dN2T0
         *dN5T*MidP2-ddN3T0*N2Tm1*ddN6T*dN5T*MidP2*dN4T0+ddN3T0*ddN7T*N2Tm1*N5Tm2*dN6T*FP*dN4T0-N3Tm1
         *ddN2T0*dN6T*ddN5T*MidP2*dN4T0+N3Tm1*ddN2T0*N6Tm2*IS*dN5T*ddN4T);
  m_control_points[2]=
      ( N5Tm1*ddN6T*dN3T*ddN4T0*dN1T0*MidP2-N4Tm1*dN6T*IP*dN1T0*N3Tm2*ddN5T*ddN0T0-N3Tm1*dN4T*ddN6T
        *N5Tm2*IA*dN1T0-N3Tm1*ddN6T*IS*dN5T*ddN1T0*N4Tm2+N5Tm1*dN4T*N6Tm2*IS*ddN3T*ddN1T0+N5Tm2*IA
        *dN6T*ddN3T*N1Tm1*dN4T0-dN3T0*N6Tm2*IP*dN5T*N1Tm1*ddN0T0*ddN4T+ddN3T0*N4Tm1*N5Tm2*dN6T*dN1T0
        *FA+dN3T0*N4Tm1*N6Tm2*dN7T*ddN1T0*FP*ddN5T+ddN3T0*N5Tm2*IS*dN6T*N1Tm1*ddN4T+ddN3T0*dN6T*IP
        *dN0T0*N1Tm1*ddN5T*N4Tm2+ddN3T0*dN4T*ddN6T*N5Tm2*IP*dN0T0*N1Tm1+ddN7T*N5Tm1*N6Tm2*dN3T*ddN4T0
        *dN1T0*FP-ddN3T0*N4Tm1*dN6T*dN1T0*ddN5T*MidP2-ddN7T*N5Tm1*N6Tm2*dN3T*ddN1T0*FP*dN4T0+N4Tm1*IA
        *dN6T*dN1T0*N3Tm2*ddN5T-N4Tm1*N6Tm2*IS*dN5T*ddN3T*ddN1T0-N3Tm1*N5Tm2*IS*dN6T*ddN1T0*ddN4T-ddN3T0
        *N5Tm1*N6Tm2*dN1T0*FS*ddN4T-dN3T0*N4Tm1*N5Tm2*dN6T*FA*ddN1T0-N3Tm1*N6Tm2*dN7T*ddN1T0*FP*ddN5T
        *dN4T0-N6Tm2*IA*dN5T*ddN3T*N1Tm1*dN4T0-dN3T0*N5Tm1*dN6T*ddN1T0*MidP2*ddN4T-N5Tm1*N6Tm2*dN3T*IP
        *dN1T0*ddN0T0*ddN4T-ddN3T0*IS*dN6T*N1Tm1*ddN5T*N4Tm2+ddN3T0*ddN6T*IS*dN5T*N1Tm1*N4Tm2+ddN3T0
        *N4Tm1*ddN6T*N5Tm2*dN1T0*dN7T*FP+ddN6T*N5Tm2*dN3T*IS*ddN4T0*N1Tm1-N5Tm1*dN4T*N6Tm2*IA*dN1T0
        *ddN3T-dN3T0*ddN6T*N5Tm2*ddN4T0*FS*N1Tm1+N6Tm2*dN3T*ddN4T0*IP*dN0T0*N1Tm1*ddN5T+dN3T0*N5Tm1
        *dN6T*FA*ddN1T0*N4Tm2+dN3T0*N5Tm2*dN6T*IP*N1Tm1*ddN0T0*ddN4T+N4Tm1*ddN6T*N5Tm2*dN3T*IP*dN0T0
        *ddN1T0-N5Tm1*N6Tm2*dN3T*IS*ddN1T0*ddN4T-dN3T0*N5Tm2*IA*dN6T*N1Tm1*ddN4T+N3Tm1*ddN6T*IP*dN5T
        *dN0T0*ddN1T0*N4Tm2-ddN3T0*N4Tm1*ddN6T*N5Tm2*dN1T0*FS-N4Tm1*ddN6T*IP*dN5T*dN0T0*ddN1T0*N3Tm2
        -ddN3T0*ddN6T*N5Tm2*dN7T*FP*N1Tm1*dN4T0-N3Tm1*dN4T*N6Tm2*IS*ddN1T0*ddN5T-dN3T0*N4Tm1*N6Tm2*FS
        *ddN1T0*ddN5T-N4Tm1*N5Tm2*IA*dN6T*dN1T0*ddN3T+N3Tm1*ddN6T*N5Tm2*dN7T*ddN1T0*FP*dN4T0+dN3T0*
        N5Tm2*dN6T*ddN1T0*MidP1*ddN4T+N4Tm1*N6Tm2*dN3T*IP*dN1T0*ddN5T*ddN0T0-N5Tm1*N6Tm2*dN3T*ddN4T0
        *dN1T0*FA+N3Tm1*dN6T*IP*dN1T0*ddN5T*N4Tm2*ddN0T0+ddN3T0*dN4T*N6Tm2*IS*N1Tm1*ddN5T-ddN3T0*N5Tm1
        *dN6T*dN1T0*FA*N4Tm2-dN3T0*ddN6T*IA*dN5T*N1Tm1*N4Tm2+dN3T0*N5Tm1*ddN6T*dN7T*ddN1T0*FP*N4Tm2
        +N5Tm1*dN6T*IP*dN1T0*N3Tm2*ddN0T0*ddN4T+ddN3T0*dN6T*N1Tm1*ddN5T*MidP2*dN4T0-ddN7T*N5Tm1*dN6T
        *ddN4T0*dN1T0*FP*N3Tm2-N5Tm1*N6Tm2*ddN3T*FS*ddN1T0*dN4T0+ddN3T0*N5Tm1*ddN6T*dN1T0*FS*N4Tm2-N5Tm1
        *dN4T*ddN6T*IS*ddN1T0*N3Tm2+N6Tm2*IP*dN5T*ddN3T*N1Tm1*ddN0T0*dN4T0+N6Tm2*dN3T*ddN4T0*dN1T0*ddN5T
        *MidP1+IS*dN6T*ddN4T0*N1Tm1*N3Tm2*ddN5T+N4Tm1*dN6T*IP*dN0T0*ddN1T0*N3Tm2*ddN5T-dN3T0*dN6T*ddN4T0
        *N1Tm1*ddN5T*MidP2-N3Tm1*dN6T*IP*dN0T0*ddN1T0*ddN5T*N4Tm2+N6Tm2*IA*dN3T*N1Tm1*ddN5T*dN4T0+ddN6T
        *ddN4T0*dN5T*dN1T0*N3Tm2*MidP1-ddN6T*N5Tm2*IA*dN3T*N1Tm1*dN4T0+ddN3T0*ddN6T*N5Tm2*FS*N1Tm1*dN4T0
        +dN6T*ddN1T0*N3Tm2*ddN5T*MidP1*dN4T0-N5Tm1*dN4T*N6Tm2*IP*ddN3T*dN0T0*ddN1T0-N4Tm1*N6Tm2*IA*dN3T
        *dN1T0*ddN5T-N5Tm1*dN6T*FA*ddN1T0*N3Tm2*dN4T0+ddN3T0*N6Tm2*dN5T*FA*N1Tm1*dN4T0-N6Tm2*dN3T*IS
        *ddN4T0*N1Tm1*ddN5T-N5Tm1*dN4T*ddN6T*IP*dN1T0*N3Tm2*ddN0T0+dN3T0*N5Tm2*dN6T*ddN4T0*FA*N1Tm1
        -ddN3T0*N4Tm1*N6Tm2*dN1T0*dN7T*FP*ddN5T+N4Tm1*N5Tm2*dN6T*IP*dN1T0*ddN3T*ddN0T0-ddN7T*N3Tm1*N5Tm2
        *dN6T*ddN1T0*FP*dN4T0-N4Tm1*ddN6T*N5Tm2*dN3T*IS*ddN1T0+dN3T0*ddN6T*IP*dN5T*N1Tm1*N4Tm2*ddN0T0
        +dN3T0*ddN6T*N5Tm2*ddN4T0*dN7T*FP*N1Tm1+ddN7T*N3Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*FP+N5Tm1*ddN6T*FS
        *ddN1T0*N3Tm2*dN4T0-ddN3T0*dN4T*N6Tm2*dN1T0*ddN5T*MidP1-N3Tm1*ddN6T*N5Tm2*FS*ddN1T0*dN4T0-ddN6T
        *IS*ddN4T0*dN5T*N1Tm1*N3Tm2-N5Tm1*ddN6T*dN7T*ddN1T0*FP*N3Tm2*dN4T0-N3Tm1*N6Tm2*ddN4T0*dN1T0*FS*
        ddN5T-N3Tm1*N6Tm2*dN5T*FA*ddN1T0*dN4T0+N5Tm1*IS*dN6T*ddN1T0*N3Tm2*ddN4T+N5Tm1*N6Tm2*dN3T*IP*dN0T0
        *ddN1T0*ddN4T+N5Tm1*ddN6T*dN3T*IP*dN1T0*N4Tm2*ddN0T0+N5Tm2*dN6T*ddN4T0*dN1T0*ddN3T*MidP1+ddN3T0
        *N6Tm2*dN5T*dN1T0*MidP1*ddN4T+ddN6T*IA*dN5T*N1Tm1*N3Tm2*dN4T0-N4Tm1*N6Tm2*IP*dN5T*dN1T0*ddN3T
        *ddN0T0-ddN3T0*N4Tm1*N6Tm2*dN5T*dN1T0*FA-N6Tm2*dN3T*IP*N1Tm1*ddN5T*ddN0T0*dN4T0-N5Tm2*dN6T*IP*
        ddN3T*N1Tm1*ddN0T0*dN4T0+N3Tm1*N5Tm2*IA*dN6T*dN1T0*ddN4T+N6Tm2*dN5T*ddN3T*ddN1T0*MidP1*dN4T0
        -ddN3T0*ddN7T*N6Tm2*dN5T*FP*N1Tm1*dN4T0+N3Tm1*IS*dN6T*ddN1T0*ddN5T*N4Tm2-N3Tm1*dN4T*ddN6T*N5Tm2
        *IP*dN0T0*ddN1T0+dN3T0*ddN7T*N6Tm2*ddN4T0*dN5T*FP*N1Tm1+dN3T0*IA*dN6T*N1Tm1*ddN5T*N4Tm2+N3Tm1*
        ddN6T*N5Tm2*ddN4T0*dN1T0*FS-dN3T0*N5Tm1*dN4T*N6Tm2*FA*ddN1T0+ddN3T0*N5Tm1*dN4T*N6Tm2*dN1T0*FA-
        ddN3T0*ddN6T*IP*dN5T*dN0T0*N1Tm1*N4Tm2+N3Tm1*ddN6T*IA*dN5T*dN1T0*N4Tm2-ddN3T0*ddN6T*dN5T*dN1T0*
        N4Tm2*MidP1+N5Tm1*N6Tm2*ddN4T0*dN1T0*ddN3T*FS-N5Tm1*ddN6T*dN3T*ddN1T0*MidP2*dN4T0-N3Tm1*N5Tm2*
        dN6T*ddN4T0*dN1T0*FA+N5Tm1*dN6T*ddN4T0*dN1T0*FA*N3Tm2-dN3T0*ddN7T*N5Tm1*dN6T*ddN1T0*FP*N4Tm2-
        ddN6T*N5Tm2*dN3T*ddN4T0*dN1T0*MidP1-N3Tm1*dN4T*N6Tm2*IP*dN1T0*ddN5T*ddN0T0-N5Tm1*ddN6T*IA*dN3T
        *dN1T0*N4Tm2+dN3T0*N4Tm1*N6Tm2*dN5T*FA*ddN1T0+dN3T0*N4Tm1*ddN6T*N5Tm2*FS*ddN1T0+ddN6T*N5Tm2*dN3T
        *IP*N1Tm1*ddN0T0*dN4T0-ddN3T0*N5Tm1*ddN6T*dN1T0*dN7T*FP*N4Tm2-N4Tm1*ddN6T*N5Tm2*dN3T*IP*dN1T0
        *ddN0T0-dN3T0*ddN7T*N4Tm1*N6Tm2*dN5T*ddN1T0*FP-N3Tm1*dN6T*ddN1T0*ddN5T*MidP2*dN4T0+N4Tm1*N6Tm2
        *dN3T*IS*ddN1T0*ddN5T-ddN3T0*ddN6T*dN5T*N1Tm1*MidP2*dN4T0-ddN3T0*N6Tm2*IS*dN5T*N1Tm1*ddN4T+
        ddN3T0*N5Tm1*dN6T*dN1T0*MidP2*ddN4T+ddN3T0*dN6T*dN1T0*ddN5T*N4Tm2*MidP1+N4Tm1*N6Tm2*IP*dN5T*ddN3T
        *dN0T0*ddN1T0+dN3T0*N5Tm1*N6Tm2*FS*ddN1T0*ddN4T+N3Tm1*N6Tm2*IP*dN5T*dN1T0*ddN0T0*ddN4T-N3Tm1
        *ddN6T*N5Tm2*ddN4T0*dN1T0*dN7T*FP-ddN3T0*N6Tm2*FS*N1Tm1*ddN5T*dN4T0+ddN3T0*N6Tm2*dN7T*FP*N1Tm1
        *ddN5T*dN4T0+N3Tm1*N6Tm2*ddN4T0*dN5T*dN1T0*FA-N3Tm1*IA*dN6T*dN1T0*ddN5T*N4Tm2+N3Tm1*N5Tm2*dN6T
        *FA*ddN1T0*dN4T0-dN3T0*ddN7T*N5Tm2*dN6T*ddN4T0*FP*N1Tm1+N5Tm1*dN4T*ddN6T*IP*dN0T0*ddN1T0*N3Tm2
        +dN3T0*ddN7T*N5Tm1*dN4T*N6Tm2*ddN1T0*FP+N6Tm2*IS*ddN4T0*dN5T*ddN3T*N1Tm1+dN3T0*N4Tm1*dN6T*ddN1T0
        *ddN5T*MidP2+ddN6T*N5Tm2*dN3T*ddN1T0*MidP1*dN4T0-dN3T0*dN6T*ddN1T0*ddN5T*N4Tm2*MidP1-dN3T0*N4Tm1
        *ddN6T*N5Tm2*dN7T*ddN1T0*FP-ddN3T0*N5Tm2*dN6T*FA*N1Tm1*dN4T0+dN3T0*dN4T*ddN6T*N5Tm2*IA*N1Tm1+N3Tm1
        *N6Tm2*ddN4T0*dN1T0*dN7T*FP*ddN5T-N5Tm1*dN6T*ddN4T0*dN1T0*ddN3T*MidP2+N5Tm1*dN6T*ddN3T*ddN1T0*MidP2
        *dN4T0-N5Tm1*dN6T*IP*dN0T0*ddN1T0*N3Tm2*ddN4T+N4Tm1*ddN6T*IS*dN5T*ddN1T0*N3Tm2+ddN3T0*N6Tm2*IP*dN5T
        *dN0T0*N1Tm1*ddN4T+N4Tm1*N5Tm2*IS*dN6T*ddN3T*ddN1T0+N3Tm1*N6Tm2*IS*dN5T*ddN1T0*ddN4T+ddN7T*N3Tm1*N6Tm2
        *dN5T*ddN1T0*FP*dN4T0-ddN3T0*ddN7T*N4Tm1*N5Tm2*dN6T*dN1T0*FP-N3Tm1*N5Tm2*dN6T*IP*dN1T0*ddN0T0*ddN4T
        -ddN6T*dN5T*ddN1T0*N3Tm2*MidP1*dN4T0-N5Tm2*IS*dN6T*ddN4T0*ddN3T*N1Tm1-N5Tm1*IS*dN6T*ddN3T*ddN1T0*N4Tm2
        +N5Tm1*dN4T*N6Tm2*IP*dN1T0*ddN3T*ddN0T0-N3Tm1*ddN6T*ddN4T0*dN5T*dN1T0*MidP2+N4Tm1*N6Tm2*IA*dN5T*dN1T0
        *ddN3T-dN3T0*N5Tm1*ddN6T*FS*ddN1T0*N4Tm2-ddN6T*N5Tm2*dN3T*ddN4T0*IP*dN0T0*N1Tm1+ddN3T0*dN4T*ddN6T
        *N5Tm2*dN1T0*MidP1+N3Tm1*dN4T*N6Tm2*IP*dN0T0*ddN1T0*ddN5T-dN3T0*N5Tm1*N6Tm2*dN7T*ddN1T0*FP*ddN4T
        -ddN7T*N3Tm1*N6Tm2*ddN4T0*dN5T*dN1T0*FP+dN3T0*N6Tm2*IA*dN5T*N1Tm1*ddN4T-dN3T0*N4Tm1*ddN6T*dN5T*ddN1T0
        *MidP2+N4Tm1*ddN6T*N5Tm2*IA*dN3T*dN1T0+ddN6T*ddN4T0*IP*dN5T*dN0T0*N1Tm1*N3Tm2-N4Tm1*N5Tm2*dN6T*IP
        *ddN3T*dN0T0*ddN1T0-N6Tm2*ddN4T0*dN5T*dN1T0*ddN3T*MidP1-dN3T0*dN4T*N6Tm2*IA*N1Tm1*ddN5T+N5Tm2*dN6T
        *ddN4T0*IP*ddN3T*dN0T0*N1Tm1-ddN3T0*N5Tm2*dN6T*dN1T0*MidP1*ddN4T-N5Tm1*IA*dN6T*dN1T0*N3Tm2*ddN4T
        -ddN3T0*N5Tm2*dN6T*IP*dN0T0*N1Tm1*ddN4T-N5Tm1*ddN6T*dN3T*IP*dN0T0*ddN1T0*N4Tm2+ddN3T0*N4Tm1*N6Tm2
        *dN1T0*FS*ddN5T-N5Tm1*N6Tm2*ddN4T0*dN1T0*ddN3T*dN7T*FP-N5Tm1*dN6T*IP*dN1T0*ddN3T*N4Tm2*ddN0T0+ddN3T0
        *ddN7T*N5Tm2*dN6T*FP*N1Tm1*dN4T0-ddN3T0*N5Tm1*dN4T*ddN6T*dN1T0*MidP2+N5Tm1*ddN6T*dN3T*IS*ddN1T0
        *N4Tm2+dN6T*IP*N1Tm1*N3Tm2*ddN5T*ddN0T0*dN4T0-dN3T0*N6Tm2*ddN4T0*dN5T*FA*N1Tm1-ddN3T0*dN4T*ddN6T
        *N5Tm2*IS*N1Tm1-dN6T*ddN4T0*IP*dN0T0*N1Tm1*N3Tm2*ddN5T-N5Tm2*dN6T*ddN3T*ddN1T0*MidP1*dN4T0+N5Tm1
        *IA*dN6T*dN1T0*ddN3T*N4Tm2+ddN3T0*ddN7T*N5Tm1*dN6T*dN1T0*FP*N4Tm2+N3Tm1*dN4T*ddN6T*N5Tm2*IP*dN1T0
        *ddN0T0+dN3T0*dN4T*N6Tm2*ddN1T0*ddN5T*MidP1+ddN7T*N5Tm1*dN6T*ddN1T0*FP*N3Tm2*dN4T0-dN6T*ddN4T0*dN1T0
        *N3Tm2*ddN5T*MidP1-N3Tm1*ddN6T*IP*dN5T*dN1T0*N4Tm2*ddN0T0-N3Tm1*N6Tm2*IP*dN5T*dN0T0*ddN1T0*ddN4T
        +N5Tm1*N6Tm2*dN3T*FA*ddN1T0*dN4T0+N5Tm1*dN6T*IP*ddN3T*dN0T0*ddN1T0*N4Tm2-dN3T0*N6Tm2*ddN4T0*dN7T*FP
        *N1Tm1*ddN5T+dN3T0*N6Tm2*ddN4T0*FS*N1Tm1*ddN5T+N3Tm1*dN6T*ddN4T0*dN1T0*ddN5T*MidP2-N6Tm2*ddN4T0*IP
        *dN5T*ddN3T*dN0T0*N1Tm1-ddN6T*IP*dN5T*N1Tm1*N3Tm2*ddN0T0*dN4T0+N5Tm1*ddN6T*ddN4T0*dN1T0*dN7T*FP*N3Tm2
        -IA*dN6T*N1Tm1*N3Tm2*ddN5T*dN4T0+dN3T0*N5Tm1*dN4T*ddN6T*ddN1T0*MidP2+N5Tm1*N6Tm2*IA*dN3T*dN1T0*ddN4T
        +dN3T0*ddN6T*ddN4T0*dN5T*N1Tm1*MidP2-ddN3T0*ddN7T*N5Tm1*dN4T*N6Tm2*dN1T0*FP+N3Tm1*N5Tm2*dN6T*IP*dN0T0
        *ddN1T0*ddN4T+ddN3T0*N5Tm1*N6Tm2*dN1T0*dN7T*FP*ddN4T-dN3T0*dN4T*ddN6T*N5Tm2*IP*N1Tm1*ddN0T0+N3Tm1
        *dN4T*ddN6T*N5Tm2*IS*ddN1T0+dN3T0*ddN7T*N4Tm1*N5Tm2*dN6T*ddN1T0*FP-N3Tm1*N6Tm2*IA*dN5T*dN1T0*ddN4T
        -N4Tm1*ddN6T*IA*dN5T*dN1T0*N3Tm2+N5Tm1*dN4T*ddN6T*IA*dN1T0*N3Tm2+dN3T0*ddN6T*dN5T*ddN1T0*N4Tm2*MidP1
        +N3Tm1*dN4T*N6Tm2*IA*dN1T0*ddN5T-dN3T0*dN4T*ddN6T*N5Tm2*ddN1T0*MidP1+N4Tm1*ddN6T*IP*dN5T*dN1T0*N3Tm2
        *ddN0T0-dN3T0*dN6T*IP*N1Tm1*ddN5T*N4Tm2*ddN0T0+N5Tm1*N6Tm2*ddN3T*dN7T*ddN1T0*FP*dN4T0+ddN3T0*N4Tm1
        *ddN6T*dN5T*dN1T0*MidP2+ddN3T0*ddN7T*N4Tm1*N6Tm2*dN5T*dN1T0*FP+N3Tm1*N6Tm2*FS*ddN1T0*ddN5T*dN4T0+dN3T0
        *dN4T*N6Tm2*IP*N1Tm1*ddN5T*ddN0T0-N6Tm2*dN3T*ddN1T0*ddN5T*MidP1*dN4T0-N5Tm1*ddN6T*ddN4T0*dN1T0*FS
        *N3Tm2-dN3T0*N6Tm2*dN5T*ddN1T0*MidP1*ddN4T+N3Tm1*ddN6T*dN5T*ddN1T0*MidP2*dN4T0-N4Tm1*N6Tm2*dN3T*IP
        *dN0T0*ddN1T0*ddN5T-ddN3T0*dN4T*N6Tm2*IP*dN0T0*N1Tm1*ddN5T-N4Tm1*IS*dN6T*ddN1T0*N3Tm2*ddN5T)
      /( N3Tm1*ddN6T*dN5T*ddN1T0*N2Tm2*dN4T0+N4Tm1*N5Tm2*dN6T*dN2T0*ddN3T*ddN1T0-ddN2T0*ddN6T*N5Tm2*dN3T
         *N1Tm1*dN4T0+dN3T0*ddN2T0*N6Tm2*dN5T*N1Tm1*ddN4T-ddN2T0*N4Tm1*N6Tm2*dN3T*dN1T0*ddN5T-N2Tm1*N5Tm2
         *dN6T*ddN3T*ddN1T0*dN4T0-ddN3T0*dN6T*dN2T0*N1Tm1*ddN5T*N4Tm2-ddN2T0*N4Tm1*ddN6T*dN5T*dN1T0*N3Tm2
         -N4Tm1*ddN6T*N5Tm2*dN3T*dN2T0*ddN1T0-dN3T0*ddN2T0*ddN6T*dN5T*N1Tm1*N4Tm2-ddN3T0*dN4T*N6Tm2*N2Tm1
         *dN1T0*ddN5T-dN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*ddN1T0+ddN3T0*N6Tm2*N2Tm1*dN5T*dN1T0*ddN4T+N3Tm1*ddN2T0
         *N5Tm2*dN6T*dN1T0*ddN4T-N5Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN3T-dN3T0*dN6T*ddN4T0*N1Tm1*ddN5T*N2Tm2
         +ddN2T0*N6Tm2*dN3T*N1Tm1*ddN5T*dN4T0+N6Tm2*ddN4T0*dN2T0*dN5T*ddN3T*N1Tm1+N5Tm1*ddN6T*dN3T*dN2T0
         *ddN1T0*N4Tm2+dN6T*ddN4T0*dN2T0*N1Tm1*N3Tm2*ddN5T-N3Tm1*dN4T*ddN2T0*ddN6T*N5Tm2*dN1T0+N3Tm1*dN6T
         *dN2T0*ddN1T0*ddN5T*N4Tm2-N3Tm1*ddN2T0*N6Tm2*dN5T*dN1T0*ddN4T+N2Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*ddN3T
         +N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*ddN4T+N5Tm1*dN6T*ddN3T*ddN1T0*N2Tm2*dN4T0+dN3T0*dN4T*N6Tm2*N2Tm1
         *ddN1T0*ddN5T-dN3T0*N6Tm2*N2Tm1*dN5T*ddN1T0*ddN4T-ddN3T0*N6Tm2*dN2T0*dN5T*N1Tm1*ddN4T+ddN6T*N5Tm2
         *dN3T*ddN4T0*dN2T0*N1Tm1+N5Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN4T+ddN2T0*ddN6T*dN5T*N1Tm1*N3Tm2*dN4T0
         -ddN2T0*N6Tm2*dN5T*ddN3T*N1Tm1*dN4T0+dN3T0*ddN2T0*dN6T*N1Tm1*ddN5T*N4Tm2+ddN3T0*N2Tm1*dN6T*dN1T0
         *ddN5T*N4Tm2+N3Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*ddN4T-ddN3T0*N4Tm1*dN6T*dN1T0*ddN5T*N2Tm2+N4Tm1*N6Tm2
         *dN3T*dN2T0*ddN1T0*ddN5T+N4Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N3Tm2+N3Tm1*ddN2T0*ddN6T*dN5T*dN1T0*N4Tm2
         -ddN3T0*ddN6T*dN5T*N1Tm1*N2Tm2*dN4T0-N3Tm1*dN6T*ddN1T0*ddN5T*N2Tm2*dN4T0+N5Tm1*ddN6T*dN3T*ddN4T0
         *dN1T0*N2Tm2-dN3T0*ddN2T0*N5Tm2*dN6T*N1Tm1*ddN4T-N5Tm1*ddN2T0*ddN6T*dN3T*dN1T0*N4Tm2+ddN3T0*N5Tm1
         *dN6T*dN1T0*N2Tm2*ddN4T-ddN6T*ddN4T0*dN2T0*dN5T*N1Tm1*N3Tm2+dN3T0*N2Tm1*N5Tm2*dN6T*ddN1T0*ddN4T
         +ddN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*dN1T0+N2Tm1*ddN6T*N5Tm2*dN3T*ddN1T0*dN4T0-N5Tm1*ddN6T*dN3T*ddN1T0
         *N2Tm2*dN4T0-N3Tm1*N5Tm2*dN6T*dN2T0*ddN1T0*ddN4T+ddN3T0*N4Tm1*ddN6T*dN5T*dN1T0*N2Tm2-N3Tm1*ddN2T0
         *dN6T*dN1T0*ddN5T*N4Tm2-N2Tm1*dN6T*ddN4T0*dN1T0*N3Tm2*ddN5T-N5Tm2*dN6T*ddN4T0*dN2T0*ddN3T*N1Tm1
         +ddN3T0*N5Tm2*dN6T*dN2T0*N1Tm1*ddN4T-N5Tm1*dN6T*dN2T0*ddN3T*ddN1T0*N4Tm2+N3Tm1*dN4T*ddN6T*N5Tm2
         *dN2T0*ddN1T0-ddN3T0*N2Tm1*ddN6T*dN5T*dN1T0*N4Tm2+dN3T0*ddN6T*ddN4T0*dN5T*N1Tm1*N2Tm2-N2Tm1*ddN6T
         *dN5T*ddN1T0*N3Tm2*dN4T0+dN3T0*N5Tm1*dN4T*ddN6T*ddN1T0*N2Tm2-N6Tm2*N2Tm1*dN3T*ddN1T0*ddN5T*dN4T0
         +N3Tm1*dN6T*ddN4T0*dN1T0*ddN5T*N2Tm2-N6Tm2*dN3T*ddN4T0*dN2T0*N1Tm1*ddN5T-ddN2T0*N4Tm1*N5Tm2*dN6T
         *dN1T0*ddN3T+N3Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN5T-N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0*ddN3T-N5Tm1*ddN2T0
         *dN6T*dN1T0*N3Tm2*ddN4T-ddN3T0*dN4T*ddN6T*N5Tm2*dN2T0*N1Tm1+ddN2T0*N5Tm2*dN6T*ddN3T*N1Tm1*dN4T0+ddN2T0
         *N4Tm1*N6Tm2*dN5T*dN1T0*ddN3T+dN3T0*dN4T*ddN2T0*ddN6T*N5Tm2*N1Tm1-N5Tm1*dN4T*ddN6T*dN2T0*ddN1T0
         *N3Tm2-ddN3T0*N5Tm1*dN4T*ddN6T*dN1T0*N2Tm2+ddN3T0*dN4T*N6Tm2*dN2T0*N1Tm1*ddN5T-N4Tm1*dN6T*dN2T0
         *ddN1T0*N3Tm2*ddN5T-N2Tm1*ddN6T*N5Tm2*dN3T*ddN4T0*dN1T0+ddN2T0*N4Tm1*dN6T*dN1T0*N3Tm2*ddN5T+dN3T0
         *N2Tm1*ddN6T*dN5T*ddN1T0*N4Tm2+N5Tm1*ddN2T0*dN6T*dN1T0*ddN3T*N4Tm2+ddN3T0*dN6T*N1Tm1*ddN5T*N2Tm2
         *dN4T0-dN3T0*N4Tm1*ddN6T*dN5T*ddN1T0*N2Tm2-ddN2T0*dN6T*N1Tm1*N3Tm2*ddN5T*dN4T0-N5Tm1*N6Tm2*dN3T
         *dN2T0*ddN1T0*ddN4T-N3Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N2Tm2-ddN3T0*N2Tm1*N5Tm2*dN6T*dN1T0*ddN4T+ddN2T0
         *N4Tm1*ddN6T*N5Tm2*dN3T*dN1T0-N3Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*ddN5T-dN3T0*N5Tm1*dN6T*ddN1T0*N2Tm2
         *ddN4T-N5Tm1*dN6T*ddN4T0*dN1T0*ddN3T*N2Tm2+N6Tm2*N2Tm1*dN5T*ddN3T*ddN1T0*dN4T0-N3Tm1*ddN6T*dN2T0
         *dN5T*ddN1T0*N4Tm2+N2Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N3Tm2+N5Tm1*dN4T*ddN2T0*ddN6T*dN1T0*N3Tm2+N2Tm1
         *dN6T*ddN1T0*N3Tm2*ddN5T*dN4T0+dN3T0*N4Tm1*dN6T*ddN1T0*ddN5T*N2Tm2-dN3T0*dN4T*ddN2T0*N6Tm2*N1Tm1
         *ddN5T+ddN3T0*ddN6T*dN2T0*dN5T*N1Tm1*N4Tm2+N5Tm1*dN4T*N6Tm2*dN2T0*ddN3T*ddN1T0-dN3T0*N2Tm1*dN6T
         *ddN1T0*ddN5T*N4Tm2-N4Tm1*N6Tm2*dN2T0*dN5T*ddN3T*ddN1T0+N6Tm2*N2Tm1*dN3T*ddN4T0*dN1T0*ddN5T);
  m_control_points[3]=
      -1.0/( N3Tm1*ddN6T*dN5T*ddN1T0*N2Tm2*dN4T0+N4Tm1*N5Tm2*dN6T*dN2T0*ddN3T*ddN1T0-ddN2T0*ddN6T*N5Tm2*dN3T
             *N1Tm1*dN4T0+dN3T0*ddN2T0*N6Tm2*dN5T*N1Tm1*ddN4T-ddN2T0*N4Tm1*N6Tm2*dN3T*dN1T0*ddN5T-N2Tm1*N5Tm2
             *dN6T*ddN3T*ddN1T0*dN4T0-ddN3T0*dN6T*dN2T0*N1Tm1*ddN5T*N4Tm2-ddN2T0*N4Tm1*ddN6T*dN5T*dN1T0*N3Tm2
             -N4Tm1*ddN6T*N5Tm2*dN3T*dN2T0*ddN1T0-dN3T0*ddN2T0*ddN6T*dN5T*N1Tm1*N4Tm2-ddN3T0*dN4T*N6Tm2*N2Tm1
             *dN1T0*ddN5T-dN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*ddN1T0+ddN3T0*N6Tm2*N2Tm1*dN5T*dN1T0*ddN4T+N3Tm1*ddN2T0
             *N5Tm2*dN6T*dN1T0*ddN4T-N5Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN3T-dN3T0*dN6T*ddN4T0*N1Tm1*ddN5T*N2Tm2
             +ddN2T0*N6Tm2*dN3T*N1Tm1*ddN5T*dN4T0+N6Tm2*ddN4T0*dN2T0*dN5T*ddN3T*N1Tm1+N5Tm1*ddN6T*dN3T*dN2T0
             *ddN1T0*N4Tm2+dN6T*ddN4T0*dN2T0*N1Tm1*N3Tm2*ddN5T-N3Tm1*dN4T*ddN2T0*ddN6T*N5Tm2*dN1T0+N3Tm1*dN6T
             *dN2T0*ddN1T0*ddN5T*N4Tm2-N3Tm1*ddN2T0*N6Tm2*dN5T*dN1T0*ddN4T+N2Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*ddN3T
             +N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*ddN4T+N5Tm1*dN6T*ddN3T*ddN1T0*N2Tm2*dN4T0+dN3T0*dN4T*N6Tm2*N2Tm1
             *ddN1T0*ddN5T-dN3T0*N6Tm2*N2Tm1*dN5T*ddN1T0*ddN4T-ddN3T0*N6Tm2*dN2T0*dN5T*N1Tm1*ddN4T+ddN6T*N5Tm2
             *dN3T*ddN4T0*dN2T0*N1Tm1+N5Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN4T+ddN2T0*ddN6T*dN5T*N1Tm1*N3Tm2*dN4T0
             -ddN2T0*N6Tm2*dN5T*ddN3T*N1Tm1*dN4T0+dN3T0*ddN2T0*dN6T*N1Tm1*ddN5T*N4Tm2+ddN3T0*N2Tm1*dN6T*dN1T0
             *ddN5T*N4Tm2+N3Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*ddN4T-ddN3T0*N4Tm1*dN6T*dN1T0*ddN5T*N2Tm2+N4Tm1*N6Tm2
             *dN3T*dN2T0*ddN1T0*ddN5T+N4Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N3Tm2+N3Tm1*ddN2T0*ddN6T*dN5T*dN1T0*N4Tm2
             -ddN3T0*ddN6T*dN5T*N1Tm1*N2Tm2*dN4T0-N3Tm1*dN6T*ddN1T0*ddN5T*N2Tm2*dN4T0+N5Tm1*ddN6T*dN3T*ddN4T0
             *dN1T0*N2Tm2-dN3T0*ddN2T0*N5Tm2*dN6T*N1Tm1*ddN4T-N5Tm1*ddN2T0*ddN6T*dN3T*dN1T0*N4Tm2+ddN3T0*N5Tm1
             *dN6T*dN1T0*N2Tm2*ddN4T-ddN6T*ddN4T0*dN2T0*dN5T*N1Tm1*N3Tm2+dN3T0*N2Tm1*N5Tm2*dN6T*ddN1T0*ddN4T
             +ddN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*dN1T0+N2Tm1*ddN6T*N5Tm2*dN3T*ddN1T0*dN4T0-N5Tm1*ddN6T*dN3T*ddN1T0
             *N2Tm2*dN4T0-N3Tm1*N5Tm2*dN6T*dN2T0*ddN1T0*ddN4T+ddN3T0*N4Tm1*ddN6T*dN5T*dN1T0*N2Tm2-N3Tm1*ddN2T0
             *dN6T*dN1T0*ddN5T*N4Tm2-N2Tm1*dN6T*ddN4T0*dN1T0*N3Tm2*ddN5T-N5Tm2*dN6T*ddN4T0*dN2T0*ddN3T*N1Tm1
             +ddN3T0*N5Tm2*dN6T*dN2T0*N1Tm1*ddN4T-N5Tm1*dN6T*dN2T0*ddN3T*ddN1T0*N4Tm2+N3Tm1*dN4T*ddN6T*N5Tm2
             *dN2T0*ddN1T0-ddN3T0*N2Tm1*ddN6T*dN5T*dN1T0*N4Tm2+dN3T0*ddN6T*ddN4T0*dN5T*N1Tm1*N2Tm2-N2Tm1*ddN6T
             *dN5T*ddN1T0*N3Tm2*dN4T0+dN3T0*N5Tm1*dN4T*ddN6T*ddN1T0*N2Tm2-N6Tm2*N2Tm1*dN3T*ddN1T0*ddN5T*dN4T0
             +N3Tm1*dN6T*ddN4T0*dN1T0*ddN5T*N2Tm2-N6Tm2*dN3T*ddN4T0*dN2T0*N1Tm1*ddN5T-ddN2T0*N4Tm1*N5Tm2*dN6T
             *dN1T0*ddN3T+N3Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN5T-N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0*ddN3T-N5Tm1*ddN2T0
             *dN6T*dN1T0*N3Tm2*ddN4T-ddN3T0*dN4T*ddN6T*N5Tm2*dN2T0*N1Tm1+ddN2T0*N5Tm2*dN6T*ddN3T*N1Tm1*dN4T0
             +ddN2T0*N4Tm1*N6Tm2*dN5T*dN1T0*ddN3T+dN3T0*dN4T*ddN2T0*ddN6T*N5Tm2*N1Tm1-N5Tm1*dN4T*ddN6T*dN2T0*
             ddN1T0*N3Tm2-ddN3T0*N5Tm1*dN4T*ddN6T*dN1T0*N2Tm2+ddN3T0*dN4T*N6Tm2*dN2T0*N1Tm1*ddN5T-N4Tm1*dN6T
             *dN2T0*ddN1T0*N3Tm2*ddN5T-N2Tm1*ddN6T*N5Tm2*dN3T*ddN4T0*dN1T0+ddN2T0*N4Tm1*dN6T*dN1T0*N3Tm2*ddN5T
             +dN3T0*N2Tm1*ddN6T*dN5T*ddN1T0*N4Tm2+N5Tm1*ddN2T0*dN6T*dN1T0*ddN3T*N4Tm2+ddN3T0*dN6T*N1Tm1*ddN5T
             *N2Tm2*dN4T0-dN3T0*N4Tm1*ddN6T*dN5T*ddN1T0*N2Tm2-ddN2T0*dN6T*N1Tm1*N3Tm2*ddN5T*dN4T0-N5Tm1*N6Tm2
             *dN3T*dN2T0*ddN1T0*ddN4T-N3Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N2Tm2-ddN3T0*N2Tm1*N5Tm2*dN6T*dN1T0*ddN4T
             +ddN2T0*N4Tm1*ddN6T*N5Tm2*dN3T*dN1T0-N3Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*ddN5T-dN3T0*N5Tm1*dN6T*ddN1T0
             *N2Tm2*ddN4T-N5Tm1*dN6T*ddN4T0*dN1T0*ddN3T*N2Tm2+N6Tm2*N2Tm1*dN5T*ddN3T*ddN1T0*dN4T0-N3Tm1*ddN6T
             *dN2T0*dN5T*ddN1T0*N4Tm2+N2Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N3Tm2+N5Tm1*dN4T*ddN2T0*ddN6T*dN1T0*N3Tm2
             +N2Tm1*dN6T*ddN1T0*N3Tm2*ddN5T*dN4T0+dN3T0*N4Tm1*dN6T*ddN1T0*ddN5T*N2Tm2-dN3T0*dN4T*ddN2T0*N6Tm2
             *N1Tm1*ddN5T+ddN3T0*ddN6T*dN2T0*dN5T*N1Tm1*N4Tm2+N5Tm1*dN4T*N6Tm2*dN2T0*ddN3T*ddN1T0-dN3T0*N2Tm1
             *dN6T*ddN1T0*ddN5T*N4Tm2-N4Tm1*N6Tm2*dN2T0*dN5T*ddN3T*ddN1T0+N6Tm2*N2Tm1*dN3T*ddN4T0*dN1T0*ddN5T)
      *( ddN6T*IP*dN2T0*dN5T*N1Tm1*N4Tm2*ddN0T0+N5Tm2*dN6T*dN2T0*ddN1T0*MidP1*ddN4T+ddN7T*N5Tm1*dN6T*ddN1T0*FP
         *N2Tm2*dN4T0-ddN6T*dN5T*ddN1T0*MidP1*N2Tm2*dN4T0+N4Tm1*N6Tm2*dN2T0*dN5T*FA*ddN1T0+ddN7T*N2Tm1*N5Tm2
         *dN6T*ddN4T0*dN1T0*FP-dN4T*N6Tm2*N2Tm1*IS*ddN1T0*ddN5T-N5Tm1*dN4T*N6Tm2*dN2T0*FA*ddN1T0-ddN7T*ddN2T0
         *N6Tm2*dN5T*FP*N1Tm1*dN4T0+N6Tm2*N2Tm1*IP*dN5T*dN1T0*ddN0T0*ddN4T-N2Tm1*N5Tm2*dN6T*IP*dN1T0*ddN0T0
         *ddN4T-N2Tm1*ddN6T*N5Tm2*FS*ddN1T0*dN4T0-ddN2T0*N5Tm2*dN6T*IP*dN0T0*N1Tm1*ddN4T-dN6T*ddN4T0*dN1T0
         *ddN5T*MidP1*N2Tm2+N6Tm2*N2Tm1*ddN4T0*dN1T0*dN7T*FP*ddN5T-N5Tm1*ddN2T0*N6Tm2*dN1T0*FS*ddN4T-ddN7T
         *N2Tm1*N5Tm2*dN6T*ddN1T0*FP*dN4T0-ddN7T*N5Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*FP-dN4T*ddN2T0*N6Tm2*dN1T0
         *ddN5T*MidP1-N6Tm2*N2Tm1*ddN4T0*dN1T0*FS*ddN5T+N5Tm1*dN6T*ddN4T0*dN1T0*FA*N2Tm2-N6Tm2*N2Tm1*dN5T*FA
         *ddN1T0*dN4T0-IA*dN6T*N1Tm1*ddN5T*N2Tm2*dN4T0-N4Tm1*ddN6T*N5Tm2*dN2T0*dN7T*ddN1T0*FP-N2Tm1*ddN6T*N5Tm2
         *ddN4T0*dN1T0*dN7T*FP-N2Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*FA-ddN6T*IA*dN2T0*dN5T*N1Tm1*N4Tm2+N2Tm1*ddN6T
         *IA*dN5T*dN1T0*N4Tm2+ddN2T0*N6Tm2*IP*dN5T*dN0T0*N1Tm1*ddN4T-ddN7T*N5Tm2*dN6T*ddN4T0*dN2T0*FP*N1Tm1
         +ddN2T0*N4Tm1*ddN6T*dN5T*dN1T0*MidP2-dN4T*ddN6T*N5Tm2*IP*dN2T0*N1Tm1*ddN0T0+N2Tm1*IS*dN6T*ddN1T0*ddN5T
         *N4Tm2+N5Tm1*ddN2T0*ddN6T*dN1T0*FS*N4Tm2+N2Tm1*N5Tm2*IA*dN6T*dN1T0*ddN4T-dN4T*N6Tm2*IA*dN2T0*N1Tm1
         *ddN5T-N5Tm1*ddN2T0*dN6T*dN1T0*FA*N4Tm2+ddN2T0*N6Tm2*dN7T*FP*N1Tm1*ddN5T*dN4T0-dN4T*N6Tm2*N2Tm1*IP
         *dN1T0*ddN5T*ddN0T0+N2Tm1*ddN6T*N5Tm2*ddN4T0*dN1T0*FS+dN6T*IP*N1Tm1*ddN5T*N2Tm2*ddN0T0*dN4T0-ddN6T
         *IS*ddN4T0*dN5T*N1Tm1*N2Tm2+N5Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*FA+N4Tm1*ddN6T*IP*dN5T*dN1T0*N2Tm2*ddN0T0
         -dN4T*N2Tm1*ddN6T*N5Tm2*IP*dN0T0*ddN1T0-N4Tm1*ddN6T*IP*dN5T*dN0T0*ddN1T0*N2Tm2+dN4T*N2Tm1*ddN6T*N5Tm2
         *IS*ddN1T0-N2Tm1*N5Tm2*IS*dN6T*ddN1T0*ddN4T-ddN6T*IP*dN5T*N1Tm1*N2Tm2*ddN0T0*dN4T0+N2Tm1*N5Tm2*dN6T
         *IP*dN0T0*ddN1T0*ddN4T-ddN2T0*N5Tm2*dN6T*FA*N1Tm1*dN4T0-N6Tm2*N2Tm1*IP*dN5T*dN0T0*ddN1T0*ddN4T-dN6T
         *ddN4T0*dN2T0*N1Tm1*ddN5T*MidP2+dN4T*N6Tm2*IP*dN2T0*N1Tm1*ddN5T*ddN0T0-N4Tm1*N6Tm2*dN2T0*FS*ddN1T0
         *ddN5T-N5Tm1*dN4T*ddN6T*IS*ddN1T0*N2Tm2-N2Tm1*ddN6T*IS*dN5T*ddN1T0*N4Tm2-ddN7T*N5Tm1*dN6T*ddN4T0
         *dN1T0*FP*N2Tm2-N5Tm1*dN6T*IP*dN0T0*ddN1T0*N2Tm2*ddN4T-ddN6T*N5Tm2*ddN4T0*dN2T0*FS*N1Tm1-ddN2T0*N6Tm2
         *FS*N1Tm1*ddN5T*dN4T0+N4Tm1*dN6T*IP*dN0T0*ddN1T0*ddN5T*N2Tm2+IS*dN6T*ddN4T0*N1Tm1*ddN5T*N2Tm2+ddN2T0
         *dN6T*dN1T0*ddN5T*N4Tm2*MidP1-ddN2T0*N6Tm2*IS*dN5T*N1Tm1*ddN4T+dN4T*ddN6T*N5Tm2*IA*dN2T0*N1Tm1-N5Tm1
         *N6Tm2*dN2T0*dN7T*ddN1T0*FP*ddN4T-N5Tm1*dN6T*dN2T0*ddN1T0*MidP2*ddN4T-ddN2T0*ddN6T*dN5T*N1Tm1*MidP2
         *dN4T0-N2Tm1*ddN6T*IP*dN5T*dN1T0*N4Tm2*ddN0T0-ddN7T*N4Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*FP-dN4T*ddN6T*N5Tm2
         *dN2T0*ddN1T0*MidP1+N5Tm1*dN6T*dN2T0*FA*ddN1T0*N4Tm2-N5Tm1*ddN6T*dN2T0*FS*ddN1T0*N4Tm2+ddN2T0*N4Tm1
         *N6Tm2*dN1T0*FS*ddN5T+N5Tm2*dN6T*ddN4T0*dN2T0*FA*N1Tm1-N4Tm1*ddN6T*dN2T0*dN5T*ddN1T0*MidP2-dN4T*ddN2T0
         *N6Tm2*IP*dN0T0*N1Tm1*ddN5T+ddN7T*N5Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*FP-ddN2T0*N5Tm2*dN6T*dN1T0*MidP1*ddN4T
         -N5Tm1*ddN2T0*ddN6T*dN1T0*dN7T*FP*N4Tm2+N4Tm1*IA*dN6T*dN1T0*ddN5T*N2Tm2+ddN7T*N5Tm1*ddN2T0*dN6T*dN1T0
         *FP*N4Tm2+dN4T*ddN2T0*N6Tm2*IS*N1Tm1*ddN5T-N5Tm1*IA*dN6T*dN1T0*N2Tm2*ddN4T+N5Tm1*ddN2T0*dN6T*dN1T0
         *MidP2*ddN4T+N2Tm1*ddN6T*N5Tm2*dN7T*ddN1T0*FP*dN4T0+N5Tm1*dN4T*ddN6T*IA*dN1T0*N2Tm2-N5Tm1*dN4T*ddN6T
         *IP*dN1T0*N2Tm2*ddN0T0+N2Tm1*ddN6T*IP*dN5T*dN0T0*ddN1T0*N4Tm2-dN4T*ddN2T0*ddN6T*N5Tm2*IS*N1Tm1-N4Tm1
         *ddN6T*IA*dN5T*dN1T0*N2Tm2+N2Tm1*dN6T*ddN4T0*dN1T0*ddN5T*MidP2-N5Tm1*dN6T*FA*ddN1T0*N2Tm2*dN4T0-N6Tm2
         *N2Tm1*dN7T*ddN1T0*FP*ddN5T*dN4T0+ddN6T*dN2T0*dN5T*ddN1T0*N4Tm2*MidP1+N5Tm1*IS*dN6T*ddN1T0*N2Tm2*ddN4T
         -N2Tm1*dN6T*IP*dN0T0*ddN1T0*ddN5T*N4Tm2-ddN2T0*ddN6T*N5Tm2*dN7T*FP*N1Tm1*dN4T0-N5Tm1*ddN6T*dN7T*ddN1T0
         *FP*N2Tm2*dN4T0+ddN2T0*N6Tm2*dN5T*FA*N1Tm1*dN4T0+N5Tm1*ddN6T*FS*ddN1T0*N2Tm2*dN4T0+ddN6T*ddN4T0*dN2T0
         *dN5T*N1Tm1*MidP2+ddN7T*N4Tm1*N5Tm2*dN6T*dN2T0*ddN1T0*FP+dN4T*ddN2T0*ddN6T*N5Tm2*IP*dN0T0*N1Tm1+dN4T
         *N2Tm1*ddN6T*N5Tm2*IP*dN1T0*ddN0T0+ddN7T*ddN2T0*N4Tm1*N6Tm2*dN5T*dN1T0*FP-N5Tm1*ddN6T*ddN4T0*dN1T0*FS
         *N2Tm2+N2Tm1*dN6T*IP*dN1T0*ddN5T*N4Tm2*ddN0T0-N4Tm1*IS*dN6T*ddN1T0*ddN5T*N2Tm2+ddN2T0*ddN6T*N5Tm2*FS
         *N1Tm1*dN4T0+N5Tm2*dN6T*IP*dN2T0*N1Tm1*ddN0T0*ddN4T+ddN2T0*N4Tm1*ddN6T*N5Tm2*dN1T0*dN7T*FP-N6Tm2*IP
         *dN2T0*dN5T*N1Tm1*ddN0T0*ddN4T-dN6T*ddN4T0*IP*dN0T0*N1Tm1*ddN5T*N2Tm2+N4Tm1*ddN6T*N5Tm2*dN2T0*FS*ddN1T0
         -ddN7T*N5Tm1*dN6T*dN2T0*ddN1T0*FP*N4Tm2-N6Tm2*N2Tm1*IA*dN5T*dN1T0*ddN4T+N2Tm1*ddN6T*dN5T*ddN1T0*MidP2
         *dN4T0-dN6T*IP*dN2T0*N1Tm1*ddN5T*N4Tm2*ddN0T0+ddN6T*IA*dN5T*N1Tm1*N2Tm2*dN4T0-ddN2T0*ddN6T*dN5T*dN1T0
         *N4Tm2*MidP1+N5Tm1*dN6T*IP*dN1T0*N2Tm2*ddN0T0*ddN4T-dN4T*N2Tm1*ddN6T*N5Tm2*IA*dN1T0+ddN2T0*dN6T*IP*dN0T0
         *N1Tm1*ddN5T*N4Tm2+N5Tm1*ddN6T*dN2T0*dN7T*ddN1T0*FP*N4Tm2-N6Tm2*ddN4T0*dN2T0*dN5T*FA*N1Tm1+N6Tm2*N2Tm1
         *FS*ddN1T0*ddN5T*dN4T0+N5Tm1*ddN6T*ddN4T0*dN1T0*dN7T*FP*N2Tm2-ddN2T0*N4Tm1*N6Tm2*dN5T*dN1T0*FA+ddN2T0
         *N6Tm2*dN5T*dN1T0*MidP1*ddN4T-N4Tm1*dN6T*IP*dN1T0*ddN5T*N2Tm2*ddN0T0+ddN2T0*ddN6T*IS*dN5T*N1Tm1*N4Tm2
         -N6Tm2*ddN4T0*dN2T0*dN7T*FP*N1Tm1*ddN5T-ddN2T0*IS*dN6T*N1Tm1*ddN5T*N4Tm2+N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0
         *FA+ddN6T*ddN4T0*IP*dN5T*dN0T0*N1Tm1*N2Tm2-ddN2T0*ddN6T*IP*dN5T*dN0T0*N1Tm1*N4Tm2+N6Tm2*IA*dN2T0*dN5T
         *N1Tm1*ddN4T-ddN2T0*N4Tm1*dN6T*dN1T0*ddN5T*MidP2+dN4T*N6Tm2*N2Tm1*IA*dN1T0*ddN5T+N6Tm2*ddN4T0*dN2T0*FS
         *N1Tm1*ddN5T+ddN2T0*N4Tm1*N5Tm2*dN6T*dN1T0*FA-N2Tm1*dN6T*ddN1T0*ddN5T*MidP2*dN4T0+ddN2T0*N5Tm2*IS*dN6T
         *N1Tm1*ddN4T+N4Tm1*dN6T*dN2T0*ddN1T0*ddN5T*MidP2+ddN6T*N5Tm2*ddN4T0*dN2T0*dN7T*FP*N1Tm1+N2Tm1*N5Tm2*dN6T
         *FA*ddN1T0*dN4T0+N5Tm1*dN4T*ddN6T*dN2T0*ddN1T0*MidP2-N2Tm1*IA*dN6T*dN1T0*ddN5T*N4Tm2+ddN7T*ddN2T0*N5Tm2
         *dN6T*FP*N1Tm1*dN4T0+N6Tm2*N2Tm1*IS*dN5T*ddN1T0*ddN4T+ddN7T*N6Tm2*N2Tm1*dN5T*ddN1T0*FP*dN4T0+dN4T*ddN2T0
         *ddN6T*N5Tm2*dN1T0*MidP1-dN6T*dN2T0*ddN1T0*ddN5T*N4Tm2*MidP1+N5Tm1*ddN2T0*N6Tm2*dN1T0*dN7T*FP*ddN4T+dN4T
         *N6Tm2*N2Tm1*IP*dN0T0*ddN1T0*ddN5T-ddN7T*N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0*FP+ddN2T0*dN6T*N1Tm1*ddN5T*MidP2
         *dN4T0+ddN6T*ddN4T0*dN5T*dN1T0*MidP1*N2Tm2+N5Tm1*N6Tm2*dN2T0*FS*ddN1T0*ddN4T-N2Tm1*ddN6T*ddN4T0*dN5T
         *dN1T0*MidP2-N6Tm2*dN2T0*dN5T*ddN1T0*MidP1*ddN4T-ddN7T*ddN2T0*N4Tm1*N5Tm2*dN6T*dN1T0*FP+N5Tm1*dN4T*ddN6T
         *IP*dN0T0*ddN1T0*N2Tm2-N5Tm1*dN4T*ddN2T0*ddN6T*dN1T0*MidP2-N5Tm2*IA*dN6T*dN2T0*N1Tm1*ddN4T-ddN2T0*N4Tm1
         *ddN6T*N5Tm2*dN1T0*FS+dN6T*ddN1T0*ddN5T*MidP1*N2Tm2*dN4T0-ddN2T0*N4Tm1*N6Tm2*dN1T0*dN7T*FP*ddN5T+N4Tm1
         *N6Tm2*dN2T0*dN7T*ddN1T0*FP*ddN5T-N4Tm1*N5Tm2*dN6T*dN2T0*FA*ddN1T0+N4Tm1*ddN6T*IS*dN5T*ddN1T0*N2Tm2+dN4T
         *N6Tm2*dN2T0*ddN1T0*ddN5T*MidP1+ddN7T*N6Tm2*ddN4T0*dN2T0*dN5T*FP*N1Tm1+IA*dN6T*dN2T0*N1Tm1*ddN5T*N4Tm2);
  m_control_points[4]=
      -( N3Tm1*ddN6T*IA*dN5T*dN1T0*N2Tm2+ddN2T0*N6Tm2*dN3T*IP*dN0T0*N1Tm1*ddN5T-ddN3T0*ddN6T*IP*dN5T*dN0T0
         *N1Tm1*N2Tm2+ddN3T0*ddN6T*N5Tm2*dN2T0*FS*N1Tm1-N3Tm1*ddN2T0*ddN6T*N5Tm2*dN1T0*dN7T*FP-N5Tm1*ddN6T
         *IA*dN3T*dN1T0*N2Tm2-dN3T0*ddN7T*N5Tm1*dN6T*ddN1T0*FP*N2Tm2+dN3T0*ddN7T*ddN2T0*N6Tm2*dN5T*FP*N1Tm1
         -ddN3T0*N5Tm1*ddN6T*dN1T0*dN7T*FP*N2Tm2+dN3T0*N2Tm1*ddN6T*N5Tm2*FS*ddN1T0-ddN7T*N3Tm1*N5Tm2*dN6T
         *dN2T0*ddN1T0*FP-dN3T0*ddN2T0*N6Tm2*dN7T*FP*N1Tm1*ddN5T+ddN3T0*ddN7T*N6Tm2*N2Tm1*dN5T*dN1T0*FP
         +N3Tm1*IS*dN6T*ddN1T0*ddN5T*N2Tm2+N6Tm2*N2Tm1*IP*dN5T*ddN3T*dN0T0*ddN1T0-N2Tm1*N5Tm2*dN6T*IP*ddN3T
         *dN0T0*ddN1T0+dN3T0*ddN6T*dN5T*ddN1T0*MidP1*N2Tm2+N5Tm1*ddN2T0*N6Tm2*dN1T0*ddN3T*FS-dN3T0*dN6T*IP
         *N1Tm1*ddN5T*N2Tm2*ddN0T0+dN3T0*IA*dN6T*N1Tm1*ddN5T*N2Tm2-ddN6T*N5Tm2*IA*dN3T*dN2T0*N1Tm1+ddN3T0
         *dN6T*dN2T0*N1Tm1*ddN5T*MidP2+N5Tm1*ddN2T0*dN6T*dN1T0*FA*N3Tm2-N2Tm1*IS*dN6T*ddN1T0*N3Tm2*ddN5T
         -N5Tm1*ddN2T0*ddN6T*dN1T0*FS*N3Tm2-ddN6T*IP*dN2T0*dN5T*N1Tm1*N3Tm2*ddN0T0-N3Tm1*ddN6T*IP*dN5T*dN1T0
         *N2Tm2*ddN0T0+N5Tm1*N6Tm2*dN3T*dN2T0*FA*ddN1T0-N3Tm1*ddN6T*N5Tm2*dN2T0*FS*ddN1T0-N2Tm1*ddN6T*IA*dN5T
         *dN1T0*N3Tm2+ddN6T*IA*dN2T0*dN5T*N1Tm1*N3Tm2+ddN2T0*ddN6T*N5Tm2*dN3T*IS*N1Tm1+N3Tm1*ddN6T*N5Tm2*dN2T0
         *dN7T*ddN1T0*FP-N2Tm1*ddN6T*N5Tm2*dN3T*IP*dN1T0*ddN0T0-N3Tm1*ddN2T0*N6Tm2*dN1T0*FS*ddN5T+dN3T0*ddN2T0
         *ddN6T*dN5T*N1Tm1*MidP2+ddN6T*N5Tm2*dN3T*dN2T0*ddN1T0*MidP1-ddN3T0*N5Tm1*dN6T*dN1T0*FA*N2Tm2+N2Tm1*N5Tm2
         *IS*dN6T*ddN3T*ddN1T0+N6Tm2*IA*dN3T*dN2T0*N1Tm1*ddN5T+dN3T0*N5Tm1*ddN6T*dN7T*ddN1T0*FP*N2Tm2-dN3T0*ddN6T
         *IA*dN5T*N1Tm1*N2Tm2-N5Tm1*ddN6T*dN3T*dN2T0*ddN1T0*MidP2+N2Tm1*ddN6T*IS*dN5T*ddN1T0*N3Tm2+ddN3T0*N5Tm1
         *ddN6T*dN1T0*FS*N2Tm2-dN3T0*N2Tm1*ddN6T*N5Tm2*dN7T*ddN1T0*FP-ddN3T0*N2Tm1*ddN6T*N5Tm2*dN1T0*FS+N2Tm1*ddN6T
         *IP*dN5T*dN1T0*N3Tm2*ddN0T0+N6Tm2*N2Tm1*dN3T*IS*ddN1T0*ddN5T-ddN2T0*N6Tm2*IP*dN5T*ddN3T*dN0T0*N1Tm1-ddN7T
         *N5Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*FP-N3Tm1*dN6T*IP*dN0T0*ddN1T0*ddN5T*N2Tm2+dN3T0*N5Tm1*dN6T*FA*ddN1T0*N2Tm2
         +ddN3T0*N6Tm2*N2Tm1*dN1T0*FS*ddN5T-N5Tm1*dN6T*IP*dN1T0*ddN3T*N2Tm2*ddN0T0+N3Tm1*ddN6T*IP*dN5T*dN0T0*ddN1T0
         *N2Tm2-N5Tm2*dN6T*dN2T0*ddN3T*ddN1T0*MidP1-ddN2T0*ddN6T*N5Tm2*dN3T*dN1T0*MidP1-ddN3T0*N5Tm2*dN6T*dN2T0*FA
         *N1Tm1-ddN3T0*ddN7T*N6Tm2*dN2T0*dN5T*FP*N1Tm1-N3Tm1*dN6T*dN2T0*ddN1T0*ddN5T*MidP2+N3Tm1*ddN2T0*N6Tm2*dN1T0
         *dN7T*FP*ddN5T-ddN3T0*N2Tm1*dN6T*dN1T0*ddN5T*MidP2-dN3T0*ddN2T0*dN6T*N1Tm1*ddN5T*MidP2+ddN2T0*N5Tm2*dN6T*IP
         *ddN3T*dN0T0*N1Tm1+N5Tm1*ddN2T0*ddN6T*dN1T0*dN7T*FP*N3Tm2-dN3T0*ddN7T*ddN2T0*N5Tm2*dN6T*FP*N1Tm1+ddN3T0
         *N2Tm1*N5Tm2*dN6T*dN1T0*FA-dN3T0*ddN7T*N6Tm2*N2Tm1*dN5T*ddN1T0*FP-ddN2T0*N6Tm2*dN5T*dN1T0*ddN3T*MidP1
         -ddN3T0*IS*dN6T*N1Tm1*ddN5T*N2Tm2-dN3T0*dN6T*ddN1T0*ddN5T*MidP1*N2Tm2-N6Tm2*N2Tm1*dN3T*IP*dN0T0*ddN1T0
         *ddN5T+N6Tm2*N2Tm1*IA*dN5T*dN1T0*ddN3T+ddN2T0*N6Tm2*IS*dN5T*ddN3T*N1Tm1-ddN7T*N5Tm1*ddN2T0*dN6T*dN1T0
         *FP*N3Tm2+ddN3T0*ddN6T*IS*dN5T*N1Tm1*N2Tm2+N5Tm1*ddN2T0*ddN6T*dN3T*dN1T0*MidP2+N2Tm1*ddN6T*N5Tm2*IA*dN3T
         *dN1T0-N5Tm1*dN6T*dN2T0*FA*ddN1T0*N3Tm2-N5Tm1*N6Tm2*dN2T0*ddN3T*FS*ddN1T0+N3Tm1*N5Tm2*dN6T*dN2T0*FA*ddN1T0
         -N3Tm1*ddN6T*IS*dN5T*ddN1T0*N2Tm2-N3Tm1*ddN2T0*ddN6T*dN5T*dN1T0*MidP2-ddN3T0*ddN6T*N5Tm2*dN2T0*dN7T*FP
         *N1Tm1-dN3T0*N2Tm1*N5Tm2*dN6T*FA*ddN1T0-N5Tm1*ddN2T0*N6Tm2*dN1T0*ddN3T*dN7T*FP+N5Tm1*ddN6T*dN2T0*FS*ddN1T0
         *N3Tm2+ddN3T0*dN6T*dN1T0*ddN5T*MidP1*N2Tm2+ddN3T0*dN6T*IP*dN0T0*N1Tm1*ddN5T*N2Tm2-ddN2T0*dN6T*dN1T0*N3Tm2
         *ddN5T*MidP1+N2Tm1*dN6T*IP*dN0T0*ddN1T0*N3Tm2*ddN5T+N3Tm1*ddN2T0*dN6T*dN1T0*ddN5T*MidP2+N5Tm1*N6Tm2*dN2T0
         *ddN3T*dN7T*ddN1T0*FP+ddN2T0*ddN6T*dN5T*dN1T0*N3Tm2*MidP1-N3Tm1*ddN2T0*N5Tm2*dN6T*dN1T0*FA+dN3T0*ddN7T
         *N2Tm1*N5Tm2*dN6T*ddN1T0*FP-ddN3T0*N6Tm2*N2Tm1*dN5T*dN1T0*FA+dN6T*IP*dN2T0*N1Tm1*N3Tm2*ddN5T*ddN0T0-ddN3T0
         *ddN6T*dN5T*dN1T0*MidP1*N2Tm2-N6Tm2*N2Tm1*IA*dN3T*dN1T0*ddN5T-ddN3T0*N6Tm2*N2Tm1*dN1T0*dN7T*FP*ddN5T-N3Tm1
         *N6Tm2*dN2T0*dN5T*FA*ddN1T0-N2Tm1*ddN6T*N5Tm2*dN3T*IS*ddN1T0+ddN6T*N5Tm2*dN3T*IP*dN2T0*N1Tm1*ddN0T0+dN3T0
         *N6Tm2*N2Tm1*dN5T*FA*ddN1T0+ddN3T0*N2Tm1*ddN6T*dN5T*dN1T0*MidP2+N2Tm1*ddN6T*N5Tm2*dN3T*IP*dN0T0*ddN1T0
         +N5Tm1*dN6T*dN2T0*ddN3T*ddN1T0*MidP2-N2Tm1*ddN6T*IP*dN5T*dN0T0*ddN1T0*N3Tm2-ddN2T0*dN6T*IP*dN0T0*N1Tm1
         *N3Tm2*ddN5T+ddN3T0*ddN7T*N5Tm2*dN6T*dN2T0*FP*N1Tm1+N5Tm1*dN6T*IP*ddN3T*dN0T0*ddN1T0*N2Tm2+ddN3T0*N6Tm2
         *dN2T0*dN5T*FA*N1Tm1-N5Tm1*ddN6T*dN2T0*dN7T*ddN1T0*FP*N3Tm2+ddN7T*N3Tm1*ddN2T0*N5Tm2*dN6T*dN1T0*FP+ddN2T0
         *N6Tm2*dN3T*dN1T0*ddN5T*MidP1+dN3T0*ddN6T*IP*dN5T*N1Tm1*N2Tm2*ddN0T0+N3Tm1*ddN2T0*ddN6T*N5Tm2*dN1T0*FS
         +N6Tm2*dN2T0*dN5T*ddN3T*ddN1T0*MidP1+ddN7T*N5Tm1*dN6T*dN2T0*ddN1T0*FP*N3Tm2+dN3T0*ddN2T0*N5Tm2*dN6T*FA
         *N1Tm1+ddN2T0*N5Tm2*dN6T*dN1T0*ddN3T*MidP1+ddN3T0*ddN7T*N5Tm1*dN6T*dN1T0*FP*N2Tm2+N6Tm2*IP*dN2T0*dN5T
         *ddN3T*N1Tm1*ddN0T0-N2Tm1*dN6T*IP*dN1T0*N3Tm2*ddN5T*ddN0T0+N5Tm1*ddN6T*dN3T*IP*dN1T0*N2Tm2*ddN0T0+N5Tm1
         *IA*dN6T*dN1T0*ddN3T*N2Tm2-N5Tm2*dN6T*IP*dN2T0*ddN3T*N1Tm1*ddN0T0-ddN6T*dN2T0*dN5T*ddN1T0*N3Tm2*MidP1
         +N6Tm2*N2Tm1*dN3T*IP*dN1T0*ddN5T*ddN0T0+dN3T0*ddN2T0*N6Tm2*FS*N1Tm1*ddN5T-N6Tm2*dN3T*dN2T0*ddN1T0*ddN5T
         *MidP1+ddN3T0*N2Tm1*ddN6T*N5Tm2*dN1T0*dN7T*FP+dN3T0*ddN2T0*ddN6T*N5Tm2*dN7T*FP*N1Tm1-N5Tm1*ddN2T0*dN6T
         *dN1T0*ddN3T*MidP2-ddN3T0*N6Tm2*dN2T0*FS*N1Tm1*ddN5T+dN3T0*N6Tm2*N2Tm1*dN7T*ddN1T0*FP*ddN5T-dN3T0*N2Tm1
         *ddN6T*dN5T*ddN1T0*MidP2+dN6T*dN2T0*ddN1T0*N3Tm2*ddN5T*MidP1-N5Tm1*ddN6T*dN3T*IP*dN0T0*ddN1T0*N2Tm2+ddN7T
         *N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*FP+N5Tm1*ddN6T*dN3T*IS*ddN1T0*N2Tm2-N6Tm2*dN3T*IP*dN2T0*N1Tm1*ddN5T*ddN0T0
         -dN3T0*N6Tm2*N2Tm1*FS*ddN1T0*ddN5T-ddN2T0*N6Tm2*dN3T*IS*N1Tm1*ddN5T+N5Tm2*IA*dN6T*dN2T0*ddN3T*N1Tm1+N2Tm1
         *IA*dN6T*dN1T0*N3Tm2*ddN5T-ddN7T*N3Tm1*ddN2T0*N6Tm2*dN5T*dN1T0*FP+N3Tm1*dN6T*IP*dN1T0*ddN5T*N2Tm2*ddN0T0
         +ddN2T0*IS*dN6T*N1Tm1*N3Tm2*ddN5T-ddN2T0*ddN6T*IS*dN5T*N1Tm1*N3Tm2-N5Tm1*IS*dN6T*ddN3T*ddN1T0*N2Tm2-dN3T0
         *ddN2T0*ddN6T*N5Tm2*FS*N1Tm1+ddN2T0*ddN6T*IP*dN5T*dN0T0*N1Tm1*N3Tm2-N6Tm2*N2Tm1*IS*dN5T*ddN3T*ddN1T0-dN3T0
         *N5Tm1*ddN6T*FS*ddN1T0*N2Tm2-dN3T0*ddN2T0*N6Tm2*dN5T*FA*N1Tm1+N3Tm1*N6Tm2*dN2T0*FS*ddN1T0*ddN5T-ddN2T0
         *N5Tm2*IS*dN6T*ddN3T*N1Tm1+N3Tm1*ddN6T*dN2T0*dN5T*ddN1T0*MidP2-N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*FA+ddN7T
         *N3Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*FP-IA*dN6T*dN2T0*N1Tm1*N3Tm2*ddN5T-N3Tm1*N6Tm2*dN2T0*dN7T*ddN1T0*FP*ddN5T
         +ddN3T0*N6Tm2*dN2T0*dN7T*FP*N1Tm1*ddN5T-ddN2T0*ddN6T*N5Tm2*dN3T*IP*dN0T0*N1Tm1+N3Tm1*ddN2T0*N6Tm2
         *dN5T*dN1T0*FA-ddN3T0*ddN7T*N2Tm1*N5Tm2*dN6T*dN1T0*FP+N2Tm1*N5Tm2*dN6T*IP*dN1T0*ddN3T*ddN0T0-N6Tm2
         *N2Tm1*IP*dN5T*dN1T0*ddN3T*ddN0T0-N2Tm1*N5Tm2*IA*dN6T*dN1T0*ddN3T-N3Tm1*IA*dN6T*dN1T0*ddN5T*N2Tm2
         -N6Tm2*IA*dN2T0*dN5T*ddN3T*N1Tm1+dN3T0*N2Tm1*dN6T*ddN1T0*ddN5T*MidP2-ddN3T0*ddN6T*dN2T0*dN5T*N1Tm1*MidP2)
      /( N3Tm1*ddN6T*dN5T*ddN1T0*N2Tm2*dN4T0+N4Tm1*N5Tm2*dN6T*dN2T0*ddN3T*ddN1T0-ddN2T0*ddN6T*N5Tm2*dN3T*N1Tm1
         *dN4T0+dN3T0*ddN2T0*N6Tm2*dN5T*N1Tm1*ddN4T-ddN2T0*N4Tm1*N6Tm2*dN3T*dN1T0*ddN5T-N2Tm1*N5Tm2*dN6T*ddN3T
         *ddN1T0*dN4T0-ddN3T0*dN6T*dN2T0*N1Tm1*ddN5T*N4Tm2-ddN2T0*N4Tm1*ddN6T*dN5T*dN1T0*N3Tm2-N4Tm1*ddN6T
         *N5Tm2*dN3T*dN2T0*ddN1T0-dN3T0*ddN2T0*ddN6T*dN5T*N1Tm1*N4Tm2-ddN3T0*dN4T*N6Tm2*N2Tm1*dN1T0*ddN5T-dN3T0
         *dN4T*N2Tm1*ddN6T*N5Tm2*ddN1T0+ddN3T0*N6Tm2*N2Tm1*dN5T*dN1T0*ddN4T+N3Tm1*ddN2T0*N5Tm2*dN6T*dN1T0*ddN4T
         -N5Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN3T-dN3T0*dN6T*ddN4T0*N1Tm1*ddN5T*N2Tm2+ddN2T0*N6Tm2*dN3T*N1Tm1*ddN5T
         *dN4T0+N6Tm2*ddN4T0*dN2T0*dN5T*ddN3T*N1Tm1+N5Tm1*ddN6T*dN3T*dN2T0*ddN1T0*N4Tm2+dN6T*ddN4T0*dN2T0*N1Tm1
         *N3Tm2*ddN5T-N3Tm1*dN4T*ddN2T0*ddN6T*N5Tm2*dN1T0+N3Tm1*dN6T*dN2T0*ddN1T0*ddN5T*N4Tm2-N3Tm1*ddN2T0*N6Tm2
         *dN5T*dN1T0*ddN4T+N2Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*ddN3T+N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*ddN4T+N5Tm1*dN6T
         *ddN3T*ddN1T0*N2Tm2*dN4T0+dN3T0*dN4T*N6Tm2*N2Tm1*ddN1T0*ddN5T-dN3T0*N6Tm2*N2Tm1*dN5T*ddN1T0*ddN4T
         -ddN3T0*N6Tm2*dN2T0*dN5T*N1Tm1*ddN4T+ddN6T*N5Tm2*dN3T*ddN4T0*dN2T0*N1Tm1+N5Tm1*dN6T*dN2T0*ddN1T0
         *N3Tm2*ddN4T+ddN2T0*ddN6T*dN5T*N1Tm1*N3Tm2*dN4T0-ddN2T0*N6Tm2*dN5T*ddN3T*N1Tm1*dN4T0+dN3T0*ddN2T0
         *dN6T*N1Tm1*ddN5T*N4Tm2+ddN3T0*N2Tm1*dN6T*dN1T0*ddN5T*N4Tm2+N3Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*ddN4T-ddN3T0
         *N4Tm1*dN6T*dN1T0*ddN5T*N2Tm2+N4Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*ddN5T+N4Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N3Tm2
         +N3Tm1*ddN2T0*ddN6T*dN5T*dN1T0*N4Tm2-ddN3T0*ddN6T*dN5T*N1Tm1*N2Tm2*dN4T0-N3Tm1*dN6T*ddN1T0*ddN5T*N2Tm2
         *dN4T0+N5Tm1*ddN6T*dN3T*ddN4T0*dN1T0*N2Tm2-dN3T0*ddN2T0*N5Tm2*dN6T*N1Tm1*ddN4T-N5Tm1*ddN2T0*ddN6T*dN3T
         *dN1T0*N4Tm2+ddN3T0*N5Tm1*dN6T*dN1T0*N2Tm2*ddN4T-ddN6T*ddN4T0*dN2T0*dN5T*N1Tm1*N3Tm2+dN3T0*N2Tm1*N5Tm2
         *dN6T*ddN1T0*ddN4T+ddN3T0*dN4T*N2Tm1*ddN6T*N5Tm2*dN1T0+N2Tm1*ddN6T*N5Tm2*dN3T*ddN1T0*dN4T0-N5Tm1*ddN6T
         *dN3T*ddN1T0*N2Tm2*dN4T0-N3Tm1*N5Tm2*dN6T*dN2T0*ddN1T0*ddN4T+ddN3T0*N4Tm1*ddN6T*dN5T*dN1T0*N2Tm2-N3Tm1
         *ddN2T0*dN6T*dN1T0*ddN5T*N4Tm2-N2Tm1*dN6T*ddN4T0*dN1T0*N3Tm2*ddN5T-N5Tm2*dN6T*ddN4T0*dN2T0*ddN3T*N1Tm1
         +ddN3T0*N5Tm2*dN6T*dN2T0*N1Tm1*ddN4T-N5Tm1*dN6T*dN2T0*ddN3T*ddN1T0*N4Tm2+N3Tm1*dN4T*ddN6T*N5Tm2*dN2T0*
         ddN1T0-ddN3T0*N2Tm1*ddN6T*dN5T*dN1T0*N4Tm2+dN3T0*ddN6T*ddN4T0*dN5T*N1Tm1*N2Tm2-N2Tm1*ddN6T*dN5T*ddN1T0
         *N3Tm2*dN4T0+dN3T0*N5Tm1*dN4T*ddN6T*ddN1T0*N2Tm2-N6Tm2*N2Tm1*dN3T*ddN1T0*ddN5T*dN4T0+N3Tm1*dN6T*ddN4T0
         *dN1T0*ddN5T*N2Tm2-N6Tm2*dN3T*ddN4T0*dN2T0*N1Tm1*ddN5T-ddN2T0*N4Tm1*N5Tm2*dN6T*dN1T0*ddN3T+N3Tm1*dN4T*
         ddN2T0*N6Tm2*dN1T0*ddN5T-N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0*ddN3T-N5Tm1*ddN2T0*dN6T*dN1T0*N3Tm2*ddN4T-ddN3T0
         *dN4T*ddN6T*N5Tm2*dN2T0*N1Tm1+ddN2T0*N5Tm2*dN6T*ddN3T*N1Tm1*dN4T0+ddN2T0*N4Tm1*N6Tm2*dN5T*dN1T0*ddN3T+
         dN3T0*dN4T*ddN2T0*ddN6T*N5Tm2*N1Tm1-N5Tm1*dN4T*ddN6T*dN2T0*ddN1T0*N3Tm2-ddN3T0*N5Tm1*dN4T*ddN6T*dN1T0*
         N2Tm2+ddN3T0*dN4T*N6Tm2*dN2T0*N1Tm1*ddN5T-N4Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN5T-N2Tm1*ddN6T*N5Tm2*dN3T*
         ddN4T0*dN1T0+ddN2T0*N4Tm1*dN6T*dN1T0*N3Tm2*ddN5T+dN3T0*N2Tm1*ddN6T*dN5T*ddN1T0*N4Tm2+N5Tm1*ddN2T0*dN6T
         *dN1T0*ddN3T*N4Tm2+ddN3T0*dN6T*N1Tm1*ddN5T*N2Tm2*dN4T0-dN3T0*N4Tm1*ddN6T*dN5T*ddN1T0*N2Tm2-ddN2T0*dN6T
         *N1Tm1*N3Tm2*ddN5T*dN4T0-N5Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*ddN4T-N3Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N2Tm2-ddN3T0
         *N2Tm1*N5Tm2*dN6T*dN1T0*ddN4T+ddN2T0*N4Tm1*ddN6T*N5Tm2*dN3T*dN1T0-N3Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*ddN5T
         -dN3T0*N5Tm1*dN6T*ddN1T0*N2Tm2*ddN4T-N5Tm1*dN6T*ddN4T0*dN1T0*ddN3T*N2Tm2+N6Tm2*N2Tm1*dN5T*ddN3T*ddN1T0
         *dN4T0-N3Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N4Tm2+N2Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N3Tm2+N5Tm1*dN4T*ddN2T0*ddN6T
         *dN1T0*N3Tm2+N2Tm1*dN6T*ddN1T0*N3Tm2*ddN5T*dN4T0+dN3T0*N4Tm1*dN6T*ddN1T0*ddN5T*N2Tm2-dN3T0*dN4T*ddN2T0
         *N6Tm2*N1Tm1*ddN5T+ddN3T0*ddN6T*dN2T0*dN5T*N1Tm1*N4Tm2+N5Tm1*dN4T*N6Tm2*dN2T0*ddN3T*ddN1T0-dN3T0*N2Tm1
         *dN6T*ddN1T0*ddN5T*N4Tm2-N4Tm1*N6Tm2*dN2T0*dN5T*ddN3T*ddN1T0+N6Tm2*N2Tm1*dN3T*ddN4T0*dN1T0*ddN5T);
  m_control_points[5]=
      -( ddN2T0*N4Tm1*ddN6T*dN1T0*FS*N3Tm2-N3Tm1*ddN2T0*N6Tm2*dN1T0*dN7T*FP*ddN4T-N6Tm2*N2Tm1*ddN3T*FS*ddN1T0
         *dN4T0+N6Tm2*dN3T*IP*dN2T0*N1Tm1*ddN0T0*ddN4T-ddN6T*dN3T*ddN4T0*IP*dN0T0*N1Tm1*N2Tm2-ddN3T0*ddN6T*dN2T0
         *FS*N1Tm1*N4Tm2-ddN2T0*N4Tm1*dN6T*dN1T0*FA*N3Tm2+dN6T*IP*dN2T0*ddN3T*N1Tm1*N4Tm2*ddN0T0-ddN2T0*ddN6T
         *dN3T*IS*N1Tm1*N4Tm2+N6Tm2*ddN4T0*dN2T0*ddN3T*dN7T*FP*N1Tm1+ddN3T0*dN6T*dN2T0*FA*N1Tm1*N4Tm2+N3Tm1*IA
         *dN6T*dN1T0*N2Tm2*ddN4T-ddN7T*N3Tm1*ddN2T0*dN6T*dN1T0*FP*N4Tm2+dN3T0*dN4T*N2Tm1*ddN6T*ddN1T0*MidP2+dN4T
         *N6Tm2*N2Tm1*IP*dN1T0*ddN3T*ddN0T0-ddN3T0*N6Tm2*N2Tm1*dN1T0*FS*ddN4T+dN3T0*N2Tm1*ddN6T*dN7T*ddN1T0*FP*
         N4Tm2-dN4T*ddN2T0*N6Tm2*IS*ddN3T*N1Tm1+ddN3T0*ddN7T*dN6T*FP*N1Tm1*N2Tm2*dN4T0+dN4T*ddN2T0*ddN6T*IS
         *N1Tm1*N3Tm2-ddN6T*dN3T*ddN4T0*dN2T0*N1Tm1*MidP2-N3Tm1*dN6T*dN2T0*FA*ddN1T0*N4Tm2+ddN3T0*N2Tm1*dN6T
         *dN1T0*MidP2*ddN4T-N6Tm2*N2Tm1*dN3T*IS*ddN1T0*ddN4T+dN3T0*ddN2T0*dN6T*N1Tm1*MidP2*ddN4T+ddN2T0*IS*dN6T
         *ddN3T*N1Tm1*N4Tm2-ddN7T*N2Tm1*dN6T*ddN4T0*dN1T0*FP*N3Tm2+N2Tm1*ddN6T*dN3T*IP*dN1T0*N4Tm2*ddN0T0-N6Tm2
         *N2Tm1*dN3T*ddN4T0*dN1T0*FA-ddN7T*N3Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*FP-N2Tm1*ddN6T*dN7T*ddN1T0*FP*N3Tm2
         *dN4T0+N3Tm1*ddN6T*dN2T0*FS*ddN1T0*N4Tm2-N6Tm2*IA*dN3T*dN2T0*N1Tm1*ddN4T+dN3T0*ddN6T*ddN4T0*dN7T*FP
         *N1Tm1*N2Tm2-N3Tm1*dN4T*ddN6T*IP*dN0T0*ddN1T0*N2Tm2+N2Tm1*ddN6T*dN3T*ddN4T0*dN1T0*MidP2-dN6T*ddN3T*
         ddN1T0*MidP1*N2Tm2*dN4T0+N3Tm1*dN4T*ddN6T*IS*ddN1T0*N2Tm2+dN3T0*N4Tm1*ddN6T*FS*ddN1T0*N2Tm2-ddN7T*
         N6Tm2*N2Tm1*dN3T*ddN1T0*FP*dN4T0+ddN7T*N3Tm1*dN6T*ddN4T0*dN1T0*FP*N2Tm2-ddN3T0*ddN7T*dN6T*dN2T0*FP
         *N1Tm1*N4Tm2+dN4T*ddN6T*dN2T0*ddN1T0*N3Tm2*MidP1+dN4T*ddN2T0*N6Tm2*dN1T0*ddN3T*MidP1+N4Tm1*IS*dN6T
         *ddN3T*ddN1T0*N2Tm2+N3Tm1*dN6T*dN2T0*ddN1T0*MidP2*ddN4T-ddN2T0*N4Tm1*ddN6T*dN1T0*dN7T*FP*N3Tm2-dN6T
         *dN2T0*ddN1T0*N3Tm2*MidP1*ddN4T-IA*dN6T*dN2T0*ddN3T*N1Tm1*N4Tm2+dN4T*N2Tm1*ddN6T*IP*dN0T0*ddN1T0
         *N3Tm2+ddN2T0*N4Tm1*N6Tm2*dN1T0*ddN3T*dN7T*FP-ddN6T*dN3T*dN2T0*ddN1T0*N4Tm2*MidP1-ddN2T0*N4Tm1*N6Tm2
         *dN1T0*ddN3T*FS+dN4T*N2Tm1*ddN6T*IA*dN1T0*N3Tm2+N6Tm2*N2Tm1*dN3T*IP*dN0T0*ddN1T0*ddN4T-N4Tm1*ddN6T*
         dN3T*IS*ddN1T0*N2Tm2-ddN2T0*dN6T*dN1T0*ddN3T*N4Tm2*MidP1+dN3T0*ddN7T*dN4T*N6Tm2*N2Tm1*ddN1T0*FP+N4Tm1
         *ddN6T*dN3T*IP*dN0T0*ddN1T0*N2Tm2-dN3T0*N2Tm1*ddN6T*FS*ddN1T0*N4Tm2+ddN7T*N6Tm2*N2Tm1*dN3T*ddN4T0*dN1T0
         *FP+N6Tm2*dN3T*ddN4T0*dN2T0*FA*N1Tm1-N6Tm2*ddN4T0*dN2T0*ddN3T*FS*N1Tm1-ddN3T0*dN4T*ddN6T*IS*N1Tm1*N2Tm2
         -dN6T*IP*dN2T0*N1Tm1*N3Tm2*ddN0T0*ddN4T+N3Tm1*ddN2T0*dN6T*dN1T0*FA*N4Tm2+dN3T0*ddN7T*ddN2T0*dN6T*FP
         *N1Tm1*N4Tm2-N4Tm1*IA*dN6T*dN1T0*ddN3T*N2Tm2-N4Tm1*ddN6T*dN3T*IP*dN1T0*N2Tm2*ddN0T0+N6Tm2*N2Tm1*ddN4T0
         *dN1T0*ddN3T*FS-N3Tm1*ddN2T0*ddN6T*dN1T0*FS*N4Tm2-N3Tm1*dN6T*IP*dN1T0*N2Tm2*ddN0T0*ddN4T-ddN3T0*ddN7T
         *N4Tm1*dN6T*dN1T0*FP*N2Tm2-ddN2T0*N6Tm2*dN3T*dN1T0*MidP1*ddN4T-N3Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*FA-dN3T0
         *ddN2T0*dN6T*FA*N1Tm1*N4Tm2-dN4T*N6Tm2*dN2T0*ddN3T*ddN1T0*MidP1+ddN7T*ddN2T0*N4Tm1*dN6T*dN1T0*FP*N3Tm2
         -dN4T*N6Tm2*N2Tm1*IA*dN1T0*ddN3T+ddN3T0*dN4T*ddN6T*IP*dN0T0*N1Tm1*N2Tm2-ddN7T*N4Tm1*dN6T*dN2T0*ddN1T0
         *FP*N3Tm2-ddN2T0*dN6T*ddN3T*N1Tm1*MidP2*dN4T0+dN3T0*ddN2T0*N6Tm2*dN7T*FP*N1Tm1*ddN4T-ddN6T*dN3T*ddN4T0
         *dN1T0*MidP1*N2Tm2-ddN3T0*ddN7T*dN4T*N6Tm2*N2Tm1*dN1T0*FP-N2Tm1*ddN6T*dN3T*ddN1T0*MidP2*dN4T0+N6Tm2
         *dN3T*dN2T0*ddN1T0*MidP1*ddN4T-N3Tm1*ddN6T*ddN4T0*dN1T0*dN7T*FP*N2Tm2+dN4T*N6Tm2*N2Tm1*IS*ddN3T*ddN1T0
         -ddN3T0*dN6T*dN2T0*N1Tm1*MidP2*ddN4T-ddN6T*IA*dN3T*N1Tm1*N2Tm2*dN4T0-ddN3T0*dN4T*N2Tm1*ddN6T*dN1T0*
         MidP2+ddN2T0*ddN6T*dN3T*dN1T0*N4Tm2*MidP1-ddN3T0*dN4T*N6Tm2*dN2T0*FA*N1Tm1-ddN2T0*N4Tm1*ddN6T*dN3T*
         dN1T0*MidP2-N3Tm1*ddN6T*dN2T0*dN7T*ddN1T0*FP*N4Tm2-N2Tm1*ddN6T*IA*dN3T*dN1T0*N4Tm2+N4Tm1*ddN6T*dN2T0
         *dN7T*ddN1T0*FP*N3Tm2-N4Tm1*dN6T*IP*ddN3T*dN0T0*ddN1T0*N2Tm2+dN4T*N6Tm2*IA*dN2T0*ddN3T*N1Tm1+ddN3T0*
         ddN7T*N2Tm1*dN6T*dN1T0*FP*N4Tm2+ddN3T0*ddN6T*dN2T0*dN7T*FP*N1Tm1*N4Tm2+N2Tm1*dN6T*ddN4T0*dN1T0*FA*N3Tm2
         -ddN3T0*N2Tm1*ddN6T*dN1T0*dN7T*FP*N4Tm2-ddN2T0*N6Tm2*dN3T*IP*dN0T0*N1Tm1*ddN4T+dN4T*ddN2T0*N6Tm2*IP
         *ddN3T*dN0T0*N1Tm1-N2Tm1*dN6T*FA*ddN1T0*N3Tm2*dN4T0-N4Tm1*dN6T*dN2T0*ddN3T*ddN1T0*MidP2+N3Tm1*dN4T
         *ddN6T*IP*dN1T0*N2Tm2*ddN0T0+dN3T0*dN6T*ddN4T0*FA*N1Tm1*N2Tm2-ddN2T0*N6Tm2*dN3T*FA*N1Tm1*dN4T0+N3Tm1
         *ddN2T0*N6Tm2*dN1T0*FS*ddN4T+ddN7T*N3Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*FP-N3Tm1*dN6T*ddN4T0*dN1T0*FA*N2Tm2
         -dN3T0*ddN6T*ddN4T0*FS*N1Tm1*N2Tm2-dN3T0*ddN7T*dN6T*ddN4T0*FP*N1Tm1*N2Tm2-dN4T*ddN2T0*ddN6T*dN1T0
         *N3Tm2*MidP1-dN6T*ddN4T0*dN2T0*FA*N1Tm1*N3Tm2+N2Tm1*dN6T*IP*dN1T0*N3Tm2*ddN0T0*ddN4T-dN6T*IP*ddN3T
         *N1Tm1*N2Tm2*ddN0T0*dN4T0-ddN7T*N3Tm1*dN6T*ddN1T0*FP*N2Tm2*dN4T0-N6Tm2*N2Tm1*dN3T*IP*dN1T0*ddN0T0*ddN4T
         +ddN6T*ddN4T0*dN2T0*FS*N1Tm1*N3Tm2+N2Tm1*ddN6T*FS*ddN1T0*N3Tm2*dN4T0-ddN7T*N6Tm2*dN3T*ddN4T0*dN2T0
         *FP*N1Tm1-dN3T0*dN4T*ddN6T*ddN1T0*MidP1*N2Tm2+dN6T*ddN4T0*dN1T0*ddN3T*MidP1*N2Tm2-N4Tm1*N6Tm2*dN2T0
         *ddN3T*dN7T*ddN1T0*FP+dN3T0*dN4T*ddN2T0*N6Tm2*FA*N1Tm1+N2Tm1*IS*dN6T*ddN1T0*N3Tm2*ddN4T+N3Tm1*ddN6T
         *dN7T*ddN1T0*FP*N2Tm2*dN4T0+N3Tm1*dN4T*N6Tm2*dN2T0*FA*ddN1T0-ddN2T0*ddN6T*FS*N1Tm1*N3Tm2*dN4T0-N4Tm1
         *ddN6T*dN2T0*FS*ddN1T0*N3Tm2+ddN6T*dN3T*IS*ddN4T0*N1Tm1*N2Tm2+N3Tm1*dN4T*ddN2T0*ddN6T*dN1T0*MidP2+dN3T0
         *dN6T*IP*N1Tm1*N2Tm2*ddN0T0*ddN4T-N3Tm1*N6Tm2*dN2T0*FS*ddN1T0*ddN4T+ddN2T0*N6Tm2*ddN3T*FS*N1Tm1*dN4T0
         -N2Tm1*IS*dN6T*ddN3T*ddN1T0*N4Tm2-ddN3T0*dN6T*FA*N1Tm1*N2Tm2*dN4T0-ddN6T*ddN4T0*dN2T0*dN7T*FP*N1Tm1
         *N3Tm2+dN6T*dN2T0*ddN3T*ddN1T0*N4Tm2*MidP1-ddN2T0*IS*dN6T*N1Tm1*N3Tm2*ddN4T-dN3T0*N2Tm1*dN6T*ddN1T0
         *MidP2*ddN4T+N4Tm1*N6Tm2*dN2T0*ddN3T*FS*ddN1T0-IS*dN6T*ddN4T0*ddN3T*N1Tm1*N2Tm2-ddN3T0*dN6T*IP*dN0T0
         *N1Tm1*N2Tm2*ddN4T+N4Tm1*dN6T*dN2T0*FA*ddN1T0*N3Tm2+ddN2T0*dN6T*dN1T0*N3Tm2*MidP1*ddN4T+ddN2T0*N6Tm2
         *dN3T*IS*N1Tm1*ddN4T-N2Tm1*IA*dN6T*dN1T0*N3Tm2*ddN4T+ddN2T0*ddN6T*dN7T*FP*N1Tm1*N3Tm2*dN4T0+N2Tm1*dN6T
         *IP*ddN3T*dN0T0*ddN1T0*N4Tm2+dN3T0*N6Tm2*N2Tm1*FS*ddN1T0*ddN4T+ddN3T0*ddN6T*FS*N1Tm1*N2Tm2*dN4T0+ddN2T0
         *dN6T*FA*N1Tm1*N3Tm2*dN4T0+N2Tm1*ddN6T*dN3T*IS*ddN1T0*N4Tm2+N3Tm1*ddN2T0*ddN6T*dN1T0*dN7T*FP*N4Tm2+N2Tm1
         *ddN6T*ddN4T0*dN1T0*dN7T*FP*N3Tm2+ddN3T0*IS*dN6T*N1Tm1*N2Tm2*ddN4T+ddN3T0*N6Tm2*dN2T0*FS*N1Tm1*ddN4T
         -dN4T*N6Tm2*IP*dN2T0*ddN3T*N1Tm1*ddN0T0-dN3T0*N6Tm2*N2Tm1*dN7T*ddN1T0*FP*ddN4T+N6Tm2*N2Tm1*ddN3T*dN7T
         *ddN1T0*FP*dN4T0+dN6T*ddN4T0*dN2T0*ddN3T*N1Tm1*MidP2-ddN6T*dN3T*IP*dN2T0*N1Tm1*N4Tm2*ddN0T0-ddN3T0*
         N2Tm1*dN6T*dN1T0*FA*N4Tm2-ddN2T0*N6Tm2*ddN3T*dN7T*FP*N1Tm1*dN4T0+ddN3T0*N2Tm1*ddN6T*dN1T0*FS*N4Tm2
         +ddN2T0*ddN6T*dN3T*N1Tm1*MidP2*dN4T0-dN3T0*ddN7T*dN4T*ddN2T0*N6Tm2*FP*N1Tm1+ddN3T0*ddN7T*dN4T*N6Tm2
         *dN2T0*FP*N1Tm1-N3Tm1*dN4T*ddN6T*dN2T0*ddN1T0*MidP2+N4Tm1*dN6T*IP*dN1T0*ddN3T*N2Tm2*ddN0T0-dN3T0*N4Tm1
         *dN6T*FA*ddN1T0*N2Tm2-ddN3T0*N6Tm2*dN2T0*dN7T*FP*N1Tm1*ddN4T+N3Tm1*N6Tm2*dN2T0*dN7T*ddN1T0*FP*ddN4T
         +IA*dN6T*dN2T0*N1Tm1*N3Tm2*ddN4T+dN3T0*N2Tm1*dN6T*FA*ddN1T0*N4Tm2+ddN7T*N4Tm1*N6Tm2*dN3T*dN2T0*ddN1T0
         *FP+ddN2T0*ddN6T*dN3T*IP*dN0T0*N1Tm1*N4Tm2-ddN7T*ddN2T0*dN6T*FP*N1Tm1*N3Tm2*dN4T0+ddN6T*dN3T*IP*N1Tm1
         *N2Tm2*ddN0T0*dN4T0+ddN3T0*dN4T*ddN6T*dN2T0*N1Tm1*MidP2-ddN3T0*N4Tm1*ddN6T*dN1T0*FS*N2Tm2+N2Tm1*dN6T
         *ddN3T*ddN1T0*MidP2*dN4T0+IA*dN6T*ddN3T*N1Tm1*N2Tm2*dN4T0-N2Tm1*dN6T*ddN4T0*dN1T0*ddN3T*MidP2+dN3T0
         *dN4T*ddN6T*IA*N1Tm1*N2Tm2+N3Tm1*dN6T*IP*dN0T0*ddN1T0*N2Tm2*ddN4T+N4Tm1*ddN6T*dN3T*dN2T0*ddN1T0*MidP2
         -dN3T0*N4Tm1*ddN6T*dN7T*ddN1T0*FP*N2Tm2-dN4T*ddN2T0*ddN6T*IP*dN0T0*N1Tm1*N3Tm2+ddN3T0*N4Tm1*dN6T*dN1T0
         *FA*N2Tm2+ddN2T0*N4Tm1*N6Tm2*dN3T*dN1T0*FA-dN3T0*dN4T*ddN2T0*ddN6T*N1Tm1*MidP2+dN6T*ddN4T0*IP*ddN3T
         *dN0T0*N1Tm1*N2Tm2+dN3T0*ddN2T0*ddN6T*FS*N1Tm1*N4Tm2-dN3T0*dN4T*N6Tm2*N2Tm1*FA*ddN1T0+ddN3T0*N6Tm2
         *N2Tm1*dN1T0*dN7T*FP*ddN4T+ddN7T*N3Tm1*dN6T*dN2T0*ddN1T0*FP*N4Tm2+N6Tm2*N2Tm1*IA*dN3T*dN1T0*ddN4T
         -N4Tm1*N6Tm2*dN3T*dN2T0*FA*ddN1T0-dN3T0*ddN2T0*ddN6T*dN7T*FP*N1Tm1*N4Tm2-ddN2T0*dN6T*IP*ddN3T*dN0T0
         *N1Tm1*N4Tm2-N2Tm1*ddN6T*ddN4T0*dN1T0*FS*N3Tm2-N6Tm2*N2Tm1*ddN4T0*dN1T0*ddN3T*dN7T*FP+ddN3T0*dN4T
         *N6Tm2*N2Tm1*dN1T0*FA-N2Tm1*dN6T*IP*dN0T0*ddN1T0*N3Tm2*ddN4T-dN3T0*dN4T*ddN6T*IP*N1Tm1*N2Tm2*ddN0T0
         -dN4T*ddN6T*IA*dN2T0*N1Tm1*N3Tm2-ddN7T*ddN2T0*N4Tm1*N6Tm2*dN3T*dN1T0*FP-ddN3T0*ddN6T*dN7T*FP*N1Tm1
         *N2Tm2*dN4T0-dN3T0*ddN2T0*N6Tm2*FS*N1Tm1*ddN4T+ddN7T*dN6T*ddN4T0*dN2T0*FP*N1Tm1*N3Tm2+ddN2T0*N4Tm1
         *dN6T*dN1T0*ddN3T*MidP2-N3Tm1*IS*dN6T*ddN1T0*N2Tm2*ddN4T+N6Tm2*N2Tm1*dN3T*FA*ddN1T0*dN4T0-dN4T*N2Tm1
         *ddN6T*IS*ddN1T0*N3Tm2+dN4T*ddN6T*IP*dN2T0*N1Tm1*N3Tm2*ddN0T0-dN3T0*ddN7T*N2Tm1*dN6T*ddN1T0*FP*N4Tm2
         -dN4T*N6Tm2*N2Tm1*IP*ddN3T*dN0T0*ddN1T0+N3Tm1*ddN6T*ddN4T0*dN1T0*FS*N2Tm2-dN3T0*IA*dN6T*N1Tm1*N2Tm2
         *ddN4T+N2Tm1*IA*dN6T*dN1T0*ddN3T*N4Tm2+ddN3T0*dN4T*ddN6T*dN1T0*MidP1*N2Tm2-ddN3T0*dN6T*dN1T0*MidP1
         *N2Tm2*ddN4T-N3Tm1*ddN6T*FS*ddN1T0*N2Tm2*dN4T0+ddN7T*N2Tm1*dN6T*ddN1T0*FP*N3Tm2*dN4T0+ddN6T*dN3T
         *ddN1T0*MidP1*N2Tm2*dN4T0+ddN3T0*N4Tm1*ddN6T*dN1T0*dN7T*FP*N2Tm2-N2Tm1*dN6T*IP*dN1T0*ddN3T*N4Tm2
         *ddN0T0-N2Tm1*ddN6T*dN3T*IP*dN0T0*ddN1T0*N4Tm2+ddN6T*IA*dN3T*dN2T0*N1Tm1*N4Tm2+dN3T0*ddN7T*N4Tm1
         *dN6T*ddN1T0*FP*N2Tm2+ddN7T*ddN2T0*N6Tm2*dN3T*FP*N1Tm1*dN4T0+N4Tm1*ddN6T*IA*dN3T*dN1T0*N2Tm2-N3Tm1
         *ddN2T0*dN6T*dN1T0*MidP2*ddN4T-dN4T*N2Tm1*ddN6T*IP*dN1T0*N3Tm2*ddN0T0+dN3T0*dN6T*ddN1T0*MidP1*N2Tm2
         *ddN4T+N3Tm1*dN6T*FA*ddN1T0*N2Tm2*dN4T0+ddN2T0*dN6T*IP*dN0T0*N1Tm1*N3Tm2*ddN4T-N3Tm1*dN4T*ddN6T*IA
         *dN1T0*N2Tm2)
      /( N3Tm1*ddN6T*dN5T*ddN1T0*N2Tm2*dN4T0+N4Tm1*N5Tm2*dN6T*dN2T0*ddN3T*ddN1T0-ddN2T0*ddN6T*N5Tm2*dN3T*N1Tm1
         *dN4T0+dN3T0*ddN2T0*N6Tm2*dN5T*N1Tm1*ddN4T-ddN2T0*N4Tm1*N6Tm2*dN3T*dN1T0*ddN5T-N2Tm1*N5Tm2*dN6T*ddN3T
         *ddN1T0*dN4T0-ddN3T0*dN6T*dN2T0*N1Tm1*ddN5T*N4Tm2-ddN2T0*N4Tm1*ddN6T*dN5T*dN1T0*N3Tm2-N4Tm1*ddN6T*N5Tm2
         *dN3T*dN2T0*ddN1T0-dN3T0*ddN2T0*ddN6T*dN5T*N1Tm1*N4Tm2-ddN3T0*dN4T*N6Tm2*N2Tm1*dN1T0*ddN5T-dN3T0*dN4T
         *N2Tm1*ddN6T*N5Tm2*ddN1T0+ddN3T0*N6Tm2*N2Tm1*dN5T*dN1T0*ddN4T+N3Tm1*ddN2T0*N5Tm2*dN6T*dN1T0*ddN4T-N5Tm1
         *dN4T*ddN2T0*N6Tm2*dN1T0*ddN3T-dN3T0*dN6T*ddN4T0*N1Tm1*ddN5T*N2Tm2+ddN2T0*N6Tm2*dN3T*N1Tm1*ddN5T*dN4T0
         +N6Tm2*ddN4T0*dN2T0*dN5T*ddN3T*N1Tm1+N5Tm1*ddN6T*dN3T*dN2T0*ddN1T0*N4Tm2+dN6T*ddN4T0*dN2T0*N1Tm1*N3Tm2
         *ddN5T-N3Tm1*dN4T*ddN2T0*ddN6T*N5Tm2*dN1T0+N3Tm1*dN6T*dN2T0*ddN1T0*ddN5T*N4Tm2-N3Tm1*ddN2T0*N6Tm2*dN5T
         *dN1T0*ddN4T+N2Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*ddN3T+N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*ddN4T+N5Tm1*dN6T*ddN3T
         *ddN1T0*N2Tm2*dN4T0+dN3T0*dN4T*N6Tm2*N2Tm1*ddN1T0*ddN5T-dN3T0*N6Tm2*N2Tm1*dN5T*ddN1T0*ddN4T-ddN3T0*N6Tm2
         *dN2T0*dN5T*N1Tm1*ddN4T+ddN6T*N5Tm2*dN3T*ddN4T0*dN2T0*N1Tm1+N5Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN4T+ddN2T0
         *ddN6T*dN5T*N1Tm1*N3Tm2*dN4T0-ddN2T0*N6Tm2*dN5T*ddN3T*N1Tm1*dN4T0+dN3T0*ddN2T0*dN6T*N1Tm1*ddN5T*N4Tm2
         +ddN3T0*N2Tm1*dN6T*dN1T0*ddN5T*N4Tm2+N3Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*ddN4T-ddN3T0*N4Tm1*dN6T*dN1T0*ddN5T
         *N2Tm2+N4Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*ddN5T+N4Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N3Tm2+N3Tm1*ddN2T0*ddN6T*dN5T
         *dN1T0*N4Tm2-ddN3T0*ddN6T*dN5T*N1Tm1*N2Tm2*dN4T0-N3Tm1*dN6T*ddN1T0*ddN5T*N2Tm2*dN4T0+N5Tm1*ddN6T*dN3T
         *ddN4T0*dN1T0*N2Tm2-dN3T0*ddN2T0*N5Tm2*dN6T*N1Tm1*ddN4T-N5Tm1*ddN2T0*ddN6T*dN3T*dN1T0*N4Tm2+ddN3T0*N5Tm1
         *dN6T*dN1T0*N2Tm2*ddN4T-ddN6T*ddN4T0*dN2T0*dN5T*N1Tm1*N3Tm2+dN3T0*N2Tm1*N5Tm2*dN6T*ddN1T0*ddN4T+ddN3T0
         *dN4T*N2Tm1*ddN6T*N5Tm2*dN1T0+N2Tm1*ddN6T*N5Tm2*dN3T*ddN1T0*dN4T0-N5Tm1*ddN6T*dN3T*ddN1T0*N2Tm2*dN4T0
         -N3Tm1*N5Tm2*dN6T*dN2T0*ddN1T0*ddN4T+ddN3T0*N4Tm1*ddN6T*dN5T*dN1T0*N2Tm2-N3Tm1*ddN2T0*dN6T*dN1T0*ddN5T
         *N4Tm2-N2Tm1*dN6T*ddN4T0*dN1T0*N3Tm2*ddN5T-N5Tm2*dN6T*ddN4T0*dN2T0*ddN3T*N1Tm1+ddN3T0*N5Tm2*dN6T*dN2T0
         *N1Tm1*ddN4T-N5Tm1*dN6T*dN2T0*ddN3T*ddN1T0*N4Tm2+N3Tm1*dN4T*ddN6T*N5Tm2*dN2T0*ddN1T0-ddN3T0*N2Tm1*ddN6T
         *dN5T*dN1T0*N4Tm2+dN3T0*ddN6T*ddN4T0*dN5T*N1Tm1*N2Tm2-N2Tm1*ddN6T*dN5T*ddN1T0*N3Tm2*dN4T0+dN3T0*N5Tm1
         *dN4T*ddN6T*ddN1T0*N2Tm2-N6Tm2*N2Tm1*dN3T*ddN1T0*ddN5T*dN4T0+N3Tm1*dN6T*ddN4T0*dN1T0*ddN5T*N2Tm2-N6Tm2
         *dN3T*ddN4T0*dN2T0*N1Tm1*ddN5T-ddN2T0*N4Tm1*N5Tm2*dN6T*dN1T0*ddN3T+N3Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN5T
         -N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0*ddN3T-N5Tm1*ddN2T0*dN6T*dN1T0*N3Tm2*ddN4T-ddN3T0*dN4T*ddN6T*N5Tm2*dN2T0
         *N1Tm1+ddN2T0*N5Tm2*dN6T*ddN3T*N1Tm1*dN4T0+ddN2T0*N4Tm1*N6Tm2*dN5T*dN1T0*ddN3T+dN3T0*dN4T*ddN2T0*ddN6T
         *N5Tm2*N1Tm1-N5Tm1*dN4T*ddN6T*dN2T0*ddN1T0*N3Tm2-ddN3T0*N5Tm1*dN4T*ddN6T*dN1T0*N2Tm2+ddN3T0*dN4T*N6Tm2
         *dN2T0*N1Tm1*ddN5T-N4Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN5T-N2Tm1*ddN6T*N5Tm2*dN3T*ddN4T0*dN1T0+ddN2T0*N4Tm1
         *dN6T*dN1T0*N3Tm2*ddN5T+dN3T0*N2Tm1*ddN6T*dN5T*ddN1T0*N4Tm2+N5Tm1*ddN2T0*dN6T*dN1T0*ddN3T*N4Tm2+ddN3T0
         *dN6T*N1Tm1*ddN5T*N2Tm2*dN4T0-dN3T0*N4Tm1*ddN6T*dN5T*ddN1T0*N2Tm2-ddN2T0*dN6T*N1Tm1*N3Tm2*ddN5T*dN4T0
         -N5Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*ddN4T-N3Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N2Tm2-ddN3T0*N2Tm1*N5Tm2*dN6T*dN1T0
         *ddN4T+ddN2T0*N4Tm1*ddN6T*N5Tm2*dN3T*dN1T0-N3Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*ddN5T-dN3T0*N5Tm1*dN6T*ddN1T0
         *N2Tm2*ddN4T-N5Tm1*dN6T*ddN4T0*dN1T0*ddN3T*N2Tm2+N6Tm2*N2Tm1*dN5T*ddN3T*ddN1T0*dN4T0-N3Tm1*ddN6T*dN2T0
         *dN5T*ddN1T0*N4Tm2+N2Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N3Tm2+N5Tm1*dN4T*ddN2T0*ddN6T*dN1T0*N3Tm2+N2Tm1*dN6T
         *ddN1T0*N3Tm2*ddN5T*dN4T0+dN3T0*N4Tm1*dN6T*ddN1T0*ddN5T*N2Tm2-dN3T0*dN4T*ddN2T0*N6Tm2*N1Tm1*ddN5T
         +ddN3T0*ddN6T*dN2T0*dN5T*N1Tm1*N4Tm2+N5Tm1*dN4T*N6Tm2*dN2T0*ddN3T*ddN1T0-dN3T0*N2Tm1*dN6T*ddN1T0
         *ddN5T*N4Tm2-N4Tm1*N6Tm2*dN2T0*dN5T*ddN3T*ddN1T0+N6Tm2*N2Tm1*dN3T*ddN4T0*dN1T0*ddN5T);
  m_control_points[6]=
      -( ddN7T*N5Tm2*dN3T*ddN4T0*dN2T0*FP*N1Tm1+dN3T0*ddN7T*dN4T*ddN2T0*N5Tm2*FP*N1Tm1+IP*dN5T*ddN3T*N1Tm1
         *N2Tm2*ddN0T0*dN4T0+dN3T*ddN4T0*dN2T0*N1Tm1*ddN5T*MidP2-N5Tm1*dN2T0*FS*ddN1T0*N3Tm2*ddN4T+ddN3T0
         *N5Tm1*dN4T*dN1T0*FA*N2Tm2-N3Tm1*IP*dN5T*dN0T0*ddN1T0*N2Tm2*ddN4T+N4Tm1*N5Tm2*dN2T0*ddN3T*dN7T
         *ddN1T0*FP+ddN3T0*dN4T*N5Tm2*dN2T0*FA*N1Tm1-ddN7T*N4Tm1*N5Tm2*dN3T*dN2T0*ddN1T0*FP-N4Tm1*dN2T0
         *dN5T*FA*ddN1T0*N3Tm2+dN3T0*dN4T*IP*N1Tm1*ddN5T*N2Tm2*ddN0T0+IS*ddN4T0*dN5T*ddN3T*N1Tm1*N2Tm2
         -dN3T0*dN4T*IA*N1Tm1*ddN5T*N2Tm2-N5Tm1*dN4T*dN2T0*ddN3T*ddN1T0*MidP2-N5Tm1*ddN2T0*dN3T*dN1T0*MidP2
         *ddN4T-N4Tm1*dN3T*IP*dN0T0*ddN1T0*ddN5T*N2Tm2-N4Tm1*IP*dN5T*dN1T0*ddN3T*N2Tm2*ddN0T0-dN4T*ddN2T0*IS
         *N1Tm1*N3Tm2*ddN5T-N2Tm1*IS*dN5T*ddN1T0*N3Tm2*ddN4T-dN3T0*N5Tm1*dN4T*FA*ddN1T0*N2Tm2+N5Tm1*dN3T*IP
         *dN0T0*ddN1T0*N2Tm2*ddN4T+dN2T0*dN5T*ddN1T0*N3Tm2*MidP1*ddN4T-ddN7T*ddN2T0*N4Tm1*dN5T*dN1T0*FP*N3Tm2
         -N3Tm1*dN4T*N5Tm2*dN2T0*FA*ddN1T0+ddN3T0*N2Tm1*dN1T0*dN7T*FP*ddN5T*N4Tm2+dN3T0*ddN2T0*dN5T*FA*N1Tm1
         *N4Tm2-ddN7T*N5Tm1*dN3T*ddN1T0*FP*N2Tm2*dN4T0-N5Tm2*dN3T*dN2T0*ddN1T0*MidP1*ddN4T-ddN3T0*N5Tm2*dN2T0
         *FS*N1Tm1*ddN4T+dN3T0*ddN4T0*FS*N1Tm1*ddN5T*N2Tm2-N3Tm1*ddN2T0*dN5T*dN1T0*FA*N4Tm2+ddN2T0*N5Tm2*dN3T
         *IP*dN0T0*N1Tm1*ddN4T-ddN2T0*N5Tm2*dN3T*IS*N1Tm1*ddN4T-N2Tm1*IP*dN5T*ddN3T*dN0T0*ddN1T0*N4Tm2+N2Tm1
         *N5Tm2*dN3T*IP*dN1T0*ddN0T0*ddN4T+ddN4T0*dN2T0*dN5T*FA*N1Tm1*N3Tm2+ddN3T0*ddN7T*N4Tm1*dN5T*dN1T0*FP
         *N2Tm2-N3Tm1*dN5T*FA*ddN1T0*N2Tm2*dN4T0-N5Tm1*dN4T*ddN2T0*dN1T0*FA*N3Tm2+dN3T0*dN4T*N2Tm1*N5Tm2*FA
         *ddN1T0-dN3T0*dN5T*ddN1T0*MidP1*N2Tm2*ddN4T+N4Tm1*IA*dN5T*dN1T0*ddN3T*N2Tm2-dN3T0*ddN7T*ddN2T0*dN5T
         *FP*N1Tm1*N4Tm2-N4Tm1*N5Tm2*dN2T0*ddN3T*FS*ddN1T0-ddN3T0*ddN7T*N2Tm1*dN5T*dN1T0*FP*N4Tm2-ddN3T0*dN4T
         *N2Tm1*N5Tm2*dN1T0*FA+dN3T*ddN4T0*IP*dN0T0*N1Tm1*ddN5T*N2Tm2+dN3T0*N2Tm1*N5Tm2*dN7T*ddN1T0*FP*ddN4T
         -IA*dN2T0*dN5T*N1Tm1*N3Tm2*ddN4T+ddN3T0*IP*dN5T*dN0T0*N1Tm1*N2Tm2*ddN4T+ddN3T0*dN7T*FP*N1Tm1*ddN5T
         *N2Tm2*dN4T0-N2Tm1*ddN4T0*dN1T0*dN7T*FP*N3Tm2*ddN5T+ddN2T0*dN3T*IS*N1Tm1*ddN5T*N4Tm2-ddN7T*N2Tm1*dN5T
         *ddN1T0*FP*N3Tm2*dN4T0+dN3T*IP*dN2T0*N1Tm1*ddN5T*N4Tm2*ddN0T0+ddN3T0*dN5T*dN1T0*MidP1*N2Tm2*ddN4T
         -dN4T*N2Tm1*IA*dN1T0*N3Tm2*ddN5T+IA*dN3T*N1Tm1*ddN5T*N2Tm2*dN4T0-N3Tm1*ddN2T0*N5Tm2*dN1T0*FS*ddN4T
         -N5Tm1*dN3T*ddN4T0*dN1T0*FA*N2Tm2-ddN7T*N5Tm1*dN4T*dN2T0*ddN1T0*FP*N3Tm2-ddN2T0*N5Tm2*ddN3T*FS*N1Tm1
         *dN4T0-dN3T0*IP*dN5T*N1Tm1*N2Tm2*ddN0T0*ddN4T-N3Tm1*dN2T0*FS*ddN1T0*ddN5T*N4Tm2+ddN3T0*dN4T*IS*N1Tm1
         *ddN5T*N2Tm2+N2Tm1*ddN4T0*dN5T*dN1T0*ddN3T*MidP2+N3Tm1*N5Tm2*dN2T0*FS*ddN1T0*ddN4T-N3Tm1*ddN4T0*dN1T0
         *FS*ddN5T*N2Tm2-N3Tm1*dN4T*IS*ddN1T0*ddN5T*N2Tm2-N5Tm1*dN3T*dN2T0*FA*ddN1T0*N4Tm2-N4Tm1*IS*dN5T*ddN3T
         *ddN1T0*N2Tm2-N5Tm1*ddN2T0*dN1T0*dN7T*FP*N3Tm2*ddN4T+ddN2T0*N4Tm1*dN3T*dN1T0*ddN5T*MidP2+ddN3T0*dN2T0
         *FS*N1Tm1*ddN5T*N4Tm2-ddN2T0*dN5T*FA*N1Tm1*N3Tm2*dN4T0+ddN7T*N3Tm1*dN4T*N5Tm2*dN2T0*ddN1T0*FP-dN3T0
         *N5Tm1*dN7T*ddN1T0*FP*N2Tm2*ddN4T-dN3T0*N2Tm1*N5Tm2*FS*ddN1T0*ddN4T-ddN2T0*dN5T*dN1T0*N3Tm2*MidP1
         *ddN4T-N5Tm1*ddN2T0*dN1T0*ddN3T*FS*N4Tm2-ddN2T0*IP*dN5T*dN0T0*N1Tm1*N3Tm2*ddN4T+dN4T*N2Tm1*N5Tm2*IP
         *ddN3T*dN0T0*ddN1T0+N2Tm1*IP*dN5T*dN1T0*ddN3T*N4Tm2*ddN0T0+dN3T0*N4Tm1*dN7T*ddN1T0*FP*ddN5T*N2Tm2-N2Tm1
         *N5Tm2*dN3T*FA*ddN1T0*dN4T0+N5Tm2*ddN4T0*dN2T0*ddN3T*FS*N1Tm1-ddN2T0*dN7T*FP*N1Tm1*N3Tm2*ddN5T*dN4T0
         +dN4T*ddN2T0*N5Tm2*IS*ddN3T*N1Tm1+N5Tm1*dN4T*IP*dN1T0*ddN3T*N2Tm2*ddN0T0+dN3T0*ddN7T*N5Tm1*dN4T*ddN1T0
         *FP*N2Tm2+N2Tm1*IA*dN3T*dN1T0*ddN5T*N4Tm2-N5Tm2*dN3T*ddN4T0*dN2T0*FA*N1Tm1-ddN7T*ddN2T0*N5Tm2*dN3T*FP
         *N1Tm1*dN4T0+ddN3T0*dN5T*FA*N1Tm1*N2Tm2*dN4T0+ddN2T0*N4Tm1*dN1T0*dN7T*FP*N3Tm2*ddN5T+N3Tm1*dN4T*IP*dN0T0
         *ddN1T0*ddN5T*N2Tm2-ddN7T*N3Tm1*dN2T0*dN5T*ddN1T0*FP*N4Tm2+ddN3T0*dN4T*N2Tm1*dN1T0*ddN5T*MidP2+dN3T*ddN4T0
         *dN1T0*ddN5T*MidP1*N2Tm2+dN4T*N2Tm1*IP*dN1T0*N3Tm2*ddN5T*ddN0T0+ddN7T*N5Tm1*dN4T*ddN2T0*dN1T0*FP*N3Tm2
         -N3Tm1*IA*dN5T*dN1T0*N2Tm2*ddN4T-N5Tm1*ddN3T*FS*ddN1T0*N2Tm2*dN4T0+dN3T0*N5Tm1*FS*ddN1T0*N2Tm2*ddN4T
         -ddN3T0*dN4T*IP*dN0T0*N1Tm1*ddN5T*N2Tm2+N4Tm1*dN3T*IS*ddN1T0*ddN5T*N2Tm2+ddN7T*ddN2T0*dN5T*FP*N1Tm1*N3Tm2
         *dN4T0+N5Tm1*ddN3T*dN7T*ddN1T0*FP*N2Tm2*dN4T0-dN4T*N2Tm1*IP*dN0T0*ddN1T0*N3Tm2*ddN5T+N2Tm1*IP*dN5T*dN0T0
         *ddN1T0*N3Tm2*ddN4T-ddN3T0*N2Tm1*dN1T0*FS*ddN5T*N4Tm2+dN4T*ddN2T0*dN1T0*N3Tm2*ddN5T*MidP1+ddN7T*N3Tm1
         *ddN2T0*dN5T*dN1T0*FP*N4Tm2+N5Tm2*IA*dN3T*dN2T0*N1Tm1*ddN4T+ddN2T0*N4Tm1*N5Tm2*dN1T0*ddN3T*FS+ddN2T0
         *IP*dN5T*ddN3T*dN0T0*N1Tm1*N4Tm2-IA*dN5T*ddN3T*N1Tm1*N2Tm2*dN4T0+ddN2T0*N4Tm1*dN5T*dN1T0*FA*N3Tm2-N2Tm1
         *N5Tm2*dN3T*IP*dN0T0*ddN1T0*ddN4T-N2Tm1*dN5T*ddN3T*ddN1T0*MidP2*dN4T0+dN3T0*dN4T*ddN2T0*N1Tm1*ddN5T
         *MidP2-dN3T0*N4Tm1*FS*ddN1T0*ddN5T*N2Tm2-N5Tm1*dN3T*IS*ddN1T0*N2Tm2*ddN4T+N4Tm1*N5Tm2*dN3T*dN2T0*FA
         *ddN1T0+dN3T0*N2Tm1*FS*ddN1T0*ddN5T*N4Tm2-ddN4T0*dN5T*dN1T0*ddN3T*MidP1*N2Tm2-dN4T*ddN2T0*N5Tm2*dN1T0
         *ddN3T*MidP1+ddN7T*N5Tm1*dN3T*ddN4T0*dN1T0*FP*N2Tm2-ddN3T0*N5Tm1*dN1T0*FS*N2Tm2*ddN4T+N2Tm1*ddN4T0
         *dN1T0*FS*N3Tm2*ddN5T-N4Tm1*dN2T0*dN7T*ddN1T0*FP*N3Tm2*ddN5T+N5Tm1*dN3T*dN2T0*ddN1T0*MidP2*ddN4T
         +ddN3T0*N4Tm1*dN1T0*FS*ddN5T*N2Tm2-N2Tm1*N5Tm2*IA*dN3T*dN1T0*ddN4T+N3Tm1*FS*ddN1T0*ddN5T*N2Tm2*dN4T0
         +N3Tm1*dN2T0*dN7T*ddN1T0*FP*ddN5T*N4Tm2-ddN2T0*IS*dN5T*ddN3T*N1Tm1*N4Tm2-dN3T0*ddN2T0*dN5T*N1Tm1*MidP2
         *ddN4T-ddN3T0*N2Tm1*N5Tm2*dN1T0*dN7T*FP*ddN4T-ddN3T0*N2Tm1*dN5T*dN1T0*MidP2*ddN4T-ddN2T0*dN3T*dN1T0
         *ddN5T*N4Tm2*MidP1-N2Tm1*IA*dN5T*dN1T0*ddN3T*N4Tm2+N5Tm1*dN4T*IS*ddN3T*ddN1T0*N2Tm2+ddN3T0*N5Tm1*dN1T0
         *dN7T*FP*N2Tm2*ddN4T+dN3T0*IA*dN5T*N1Tm1*N2Tm2*ddN4T+N5Tm1*ddN4T0*dN1T0*ddN3T*FS*N2Tm2+dN3T0*ddN7T*N2Tm1
         *dN5T*ddN1T0*FP*N4Tm2+ddN7T*N5Tm1*dN3T*dN2T0*ddN1T0*FP*N4Tm2-dN4T*N2Tm1*N5Tm2*IS*ddN3T*ddN1T0+N3Tm1
         *ddN2T0*dN1T0*FS*ddN5T*N4Tm2-dN2T0*dN5T*ddN3T*ddN1T0*N4Tm2*MidP1-N5Tm1*ddN4T0*dN1T0*ddN3T*dN7T*FP*N2Tm2
         +N2Tm1*N5Tm2*ddN4T0*dN1T0*ddN3T*dN7T*FP+N4Tm1*dN3T*IP*dN1T0*ddN5T*N2Tm2*ddN0T0+ddN7T*N2Tm1*N5Tm2*dN3T
         *ddN1T0*FP*dN4T0+dN4T*N2Tm1*IS*ddN1T0*N3Tm2*ddN5T-ddN2T0*N4Tm1*N5Tm2*dN1T0*ddN3T*dN7T*FP+dN5T*ddN3T
         *ddN1T0*MidP1*N2Tm2*dN4T0+N3Tm1*IS*dN5T*ddN1T0*N2Tm2*ddN4T-ddN3T0*N4Tm1*dN1T0*dN7T*FP*ddN5T*N2Tm2
         -ddN2T0*N4Tm1*dN5T*dN1T0*ddN3T*MidP2-ddN3T0*dN2T0*dN5T*FA*N1Tm1*N4Tm2-N3Tm1*dN4T*ddN2T0*dN1T0*ddN5T
         *MidP2+dN4T*ddN2T0*IP*dN0T0*N1Tm1*N3Tm2*ddN5T-N3Tm1*dN7T*ddN1T0*FP*ddN5T*N2Tm2*dN4T0+ddN7T*N2Tm1
         *ddN4T0*dN5T*dN1T0*FP*N3Tm2+ddN4T0*dN2T0*dN7T*FP*N1Tm1*N3Tm2*ddN5T+N3Tm1*dN2T0*dN5T*FA*ddN1T0*N4Tm2
         -ddN7T*N2Tm1*N5Tm2*dN3T*ddN4T0*dN1T0*FP+IP*dN2T0*dN5T*N1Tm1*N3Tm2*ddN0T0*ddN4T+N5Tm1*ddN2T0*dN1T0
         *ddN3T*dN7T*FP*N4Tm2+ddN2T0*dN5T*ddN3T*N1Tm1*MidP2*dN4T0-N5Tm1*dN2T0*ddN3T*dN7T*ddN1T0*FP*N4Tm2
         +N3Tm1*ddN2T0*dN5T*dN1T0*MidP2*ddN4T-ddN2T0*N4Tm1*N5Tm2*dN3T*dN1T0*FA+dN4T*N2Tm1*N5Tm2*IA*dN1T0
         *ddN3T-dN3T0*ddN7T*N4Tm1*dN5T*ddN1T0*FP*N2Tm2-dN3T*IS*ddN4T0*N1Tm1*ddN5T*N2Tm2-dN4T*N2Tm1*N5Tm2
         *IP*dN1T0*ddN3T*ddN0T0+ddN7T*N3Tm1*dN5T*ddN1T0*FP*N2Tm2*dN4T0-ddN7T*N3Tm1*ddN4T0*dN5T*dN1T0*FP*N2Tm2
         -dN3T0*ddN4T0*dN7T*FP*N1Tm1*ddN5T*N2Tm2+ddN3T0*ddN7T*dN4T*N2Tm1*N5Tm2*dN1T0*FP+N5Tm1*ddN2T0*dN3T*dN1T0
         *FA*N4Tm2+N4Tm1*dN2T0*FS*ddN1T0*N3Tm2*ddN5T-N2Tm1*dN3T*ddN4T0*dN1T0*ddN5T*MidP2+IA*dN2T0*dN5T*ddN3T
         *N1Tm1*N4Tm2+N5Tm1*dN3T*FA*ddN1T0*N2Tm2*dN4T0+N2Tm1*N5Tm2*ddN3T*FS*ddN1T0*dN4T0+dN3T*dN2T0*ddN1T0
         *ddN5T*N4Tm2*MidP1-dN3T*IP*N1Tm1*ddN5T*N2Tm2*ddN0T0*dN4T0+ddN3T0*ddN7T*dN2T0*dN5T*FP*N1Tm1*N4Tm2
         -ddN3T0*dN4T*dN2T0*N1Tm1*ddN5T*MidP2-N3Tm1*dN2T0*dN5T*ddN1T0*MidP2*ddN4T-dN4T*IP*dN2T0*N1Tm1*N3Tm2
         *ddN5T*ddN0T0-dN3T*ddN1T0*ddN5T*MidP1*N2Tm2*dN4T0-N5Tm1*dN4T*IA*dN1T0*ddN3T*N2Tm2+N2Tm1*N5Tm2*dN3T
         *ddN4T0*dN1T0*FA+N2Tm1*dN5T*FA*ddN1T0*N3Tm2*dN4T0-N5Tm1*dN4T*IP*ddN3T*dN0T0*ddN1T0*N2Tm2+N2Tm1*N5Tm2
         *dN3T*IS*ddN1T0*ddN4T+N3Tm1*ddN2T0*N5Tm2*dN1T0*dN7T*FP*ddN4T+ddN7T*ddN2T0*N4Tm1*N5Tm2*dN3T*dN1T0*FP
         +dN3T0*ddN2T0*dN7T*FP*N1Tm1*ddN5T*N4Tm2+N5Tm1*ddN2T0*dN1T0*FS*N3Tm2*ddN4T-ddN7T*ddN4T0*dN2T0*dN5T*FP
         *N1Tm1*N3Tm2+dN3T0*ddN2T0*N5Tm2*FS*N1Tm1*ddN4T-N2Tm1*N5Tm2*ddN3T*dN7T*ddN1T0*FP*dN4T0-dN3T0*dN4T*N2Tm1
         *ddN1T0*ddN5T*MidP2-ddN2T0*N4Tm1*dN1T0*FS*N3Tm2*ddN5T+dN3T0*N4Tm1*dN5T*FA*ddN1T0*N2Tm2-ddN3T0*ddN7T*dN5T
         *FP*N1Tm1*N2Tm2*dN4T0+ddN3T0*N5Tm2*dN2T0*dN7T*FP*N1Tm1*ddN4T-ddN7T*N3Tm1*dN4T*ddN2T0*N5Tm2*dN1T0*FP-N3Tm1
         *N5Tm2*dN2T0*dN7T*ddN1T0*FP*ddN4T-ddN4T0*dN2T0*dN5T*ddN3T*N1Tm1*MidP2-ddN4T0*IP*dN5T*ddN3T*dN0T0*N1Tm1
         *N2Tm2+ddN3T0*N2Tm1*dN5T*dN1T0*FA*N4Tm2-N3Tm1*dN4T*IP*dN1T0*ddN5T*N2Tm2*ddN0T0-N2Tm1*IP*dN5T*dN1T0*N3Tm2
         *ddN0T0*ddN4T+ddN7T*N4Tm1*dN2T0*dN5T*ddN1T0*FP*N3Tm2-N2Tm1*dN3T*IS*ddN1T0*ddN5T*N4Tm2-ddN3T0*FS*N1Tm1
         *ddN5T*N2Tm2*dN4T0+N5Tm1*dN4T*ddN2T0*dN1T0*ddN3T*MidP2-ddN2T0*dN3T*N1Tm1*ddN5T*MidP2*dN4T0+ddN2T0*N5Tm2
         *ddN3T*dN7T*FP*N1Tm1*dN4T0+ddN3T0*dN2T0*dN5T*N1Tm1*MidP2*ddN4T+ddN2T0*FS*N1Tm1*N3Tm2*ddN5T*dN4T0+N3Tm1
         *dN4T*dN2T0*ddN1T0*ddN5T*MidP2-dN3T0*ddN7T*dN4T*N2Tm1*N5Tm2*ddN1T0*FP-dN3T0*dN4T*ddN2T0*N5Tm2*FA*N1Tm1
         -N2Tm1*dN3T*IP*dN1T0*ddN5T*N4Tm2*ddN0T0-ddN3T0*N4Tm1*dN5T*dN1T0*FA*N2Tm2+ddN3T0*N2Tm1*N5Tm2*dN1T0*FS*ddN4T
         +N5Tm1*dN2T0*dN7T*ddN1T0*FP*N3Tm2*ddN4T-dN3T0*N2Tm1*dN5T*FA*ddN1T0*N4Tm2+ddN2T0*N5Tm2*dN3T*FA*N1Tm1*dN4T0
         +N2Tm1*dN3T*IP*dN0T0*ddN1T0*ddN5T*N4Tm2-IA*dN3T*dN2T0*N1Tm1*ddN5T*N4Tm2-IP*dN2T0*dN5T*ddN3T*N1Tm1*N4Tm2
         *ddN0T0-N2Tm1*ddN4T0*dN5T*dN1T0*FA*N3Tm2-dN4T*dN2T0*ddN1T0*N3Tm2*ddN5T*MidP1-N4Tm1*IA*dN3T*dN1T0*ddN5T
         *N2Tm2-dN4T*N5Tm2*IA*dN2T0*ddN3T*N1Tm1+ddN2T0*dN5T*dN1T0*ddN3T*N4Tm2*MidP1+N4Tm1*IP*dN5T*ddN3T*dN0T0*ddN1T0
         *N2Tm2+dN3T0*N2Tm1*dN5T*ddN1T0*MidP2*ddN4T+ddN2T0*IS*dN5T*N1Tm1*N3Tm2*ddN4T-ddN3T0*dN2T0*dN7T*FP*N1Tm1
         *ddN5T*N4Tm2-ddN4T0*dN2T0*FS*N1Tm1*N3Tm2*ddN5T-N5Tm2*ddN4T0*dN2T0*ddN3T*dN7T*FP*N1Tm1-N5Tm1*dN3T*IP*dN1T0
         *N2Tm2*ddN0T0*ddN4T+dN3T0*dN4T*ddN1T0*ddN5T*MidP1*N2Tm2-dN4T*ddN2T0*N5Tm2*IP*ddN3T*dN0T0*N1Tm1-dN3T0*N2Tm1
         *dN7T*ddN1T0*FP*ddN5T*N4Tm2-dN3T0*ddN4T0*dN5T*FA*N1Tm1*N2Tm2+N3Tm1*dN4T*ddN2T0*N5Tm2*dN1T0*FA-N3Tm1*ddN2T0
         *dN1T0*dN7T*FP*ddN5T*N4Tm2+N4Tm1*dN2T0*dN5T*ddN3T*ddN1T0*MidP2+dN4T*N5Tm2*IP*dN2T0*ddN3T*N1Tm1*ddN0T0-N5Tm2
         *dN3T*IP*dN2T0*N1Tm1*ddN0T0*ddN4T-N2Tm1*N5Tm2*ddN4T0*dN1T0*ddN3T*FS-ddN7T*N5Tm1*ddN2T0*dN3T*dN1T0*FP*N4Tm2
         +dN3T0*ddN7T*ddN4T0*dN5T*FP*N1Tm1*N2Tm2-dN3T0*ddN2T0*FS*N1Tm1*ddN5T*N4Tm2+N2Tm1*IS*dN5T*ddN3T*ddN1T0*N4Tm2
         -N2Tm1*FS*ddN1T0*N3Tm2*ddN5T*dN4T0+N5Tm1*IA*dN3T*dN1T0*N2Tm2*ddN4T+N3Tm1*ddN4T0*dN5T*dN1T0*FA*N2Tm2+N2Tm1
         *dN3T*ddN1T0*ddN5T*MidP2*dN4T0+dN4T*N5Tm2*dN2T0*ddN3T*ddN1T0*MidP1-ddN3T0*ddN7T*dN4T*N5Tm2*dN2T0*FP*N1Tm1
         -ddN3T0*IS*dN5T*N1Tm1*N2Tm2*ddN4T+N3Tm1*dN4T*IA*dN1T0*ddN5T*N2Tm2-N4Tm1*dN3T*dN2T0*ddN1T0*ddN5T*MidP2
         -ddN3T0*dN4T*dN1T0*ddN5T*MidP1*N2Tm2-dN3T0*ddN2T0*N5Tm2*dN7T*FP*N1Tm1*ddN4T+N3Tm1*ddN4T0*dN1T0*dN7T*FP
         *ddN5T*N2Tm2+N2Tm1*IA*dN5T*dN1T0*N3Tm2*ddN4T-ddN2T0*dN3T*IP*dN0T0*N1Tm1*ddN5T*N4Tm2+N2Tm1*dN7T*ddN1T0*FP
         *N3Tm2*ddN5T*dN4T0+N5Tm1*dN2T0*ddN3T*FS*ddN1T0*N4Tm2+dN4T*IA*dN2T0*N1Tm1*N3Tm2*ddN5T+N3Tm1*IP*dN5T*dN1T0
         *N2Tm2*ddN0T0*ddN4T+ddN2T0*N5Tm2*dN3T*dN1T0*MidP1*ddN4T+N5Tm1*dN4T*dN2T0*FA*ddN1T0*N3Tm2-ddN3T0*ddN7T
         *N5Tm1*dN4T*dN1T0*FP*N2Tm2)
      /( N3Tm1*ddN6T*dN5T*ddN1T0*N2Tm2*dN4T0+N4Tm1*N5Tm2*dN6T*dN2T0*ddN3T*ddN1T0-ddN2T0*ddN6T*N5Tm2*dN3T*N1Tm1
         *dN4T0+dN3T0*ddN2T0*N6Tm2*dN5T*N1Tm1*ddN4T-ddN2T0*N4Tm1*N6Tm2*dN3T*dN1T0*ddN5T-N2Tm1*N5Tm2*dN6T*ddN3T
         *ddN1T0*dN4T0-ddN3T0*dN6T*dN2T0*N1Tm1*ddN5T*N4Tm2-ddN2T0*N4Tm1*ddN6T*dN5T*dN1T0*N3Tm2-N4Tm1*ddN6T*N5Tm2
         *dN3T*dN2T0*ddN1T0-dN3T0*ddN2T0*ddN6T*dN5T*N1Tm1*N4Tm2-ddN3T0*dN4T*N6Tm2*N2Tm1*dN1T0*ddN5T-dN3T0*dN4T
         *N2Tm1*ddN6T*N5Tm2*ddN1T0+ddN3T0*N6Tm2*N2Tm1*dN5T*dN1T0*ddN4T+N3Tm1*ddN2T0*N5Tm2*dN6T*dN1T0*ddN4T-N5Tm1
         *dN4T*ddN2T0*N6Tm2*dN1T0*ddN3T-dN3T0*dN6T*ddN4T0*N1Tm1*ddN5T*N2Tm2+ddN2T0*N6Tm2*dN3T*N1Tm1*ddN5T*dN4T0
         +N6Tm2*ddN4T0*dN2T0*dN5T*ddN3T*N1Tm1+N5Tm1*ddN6T*dN3T*dN2T0*ddN1T0*N4Tm2+dN6T*ddN4T0*dN2T0*N1Tm1*N3Tm2
         *ddN5T-N3Tm1*dN4T*ddN2T0*ddN6T*N5Tm2*dN1T0+N3Tm1*dN6T*dN2T0*ddN1T0*ddN5T*N4Tm2-N3Tm1*ddN2T0*N6Tm2*dN5T
         *dN1T0*ddN4T+N2Tm1*N5Tm2*dN6T*ddN4T0*dN1T0*ddN3T+N5Tm1*ddN2T0*N6Tm2*dN3T*dN1T0*ddN4T+N5Tm1*dN6T*ddN3T*
         ddN1T0*N2Tm2*dN4T0+dN3T0*dN4T*N6Tm2*N2Tm1*ddN1T0*ddN5T-dN3T0*N6Tm2*N2Tm1*dN5T*ddN1T0*ddN4T-ddN3T0*N6Tm2
         *dN2T0*dN5T*N1Tm1*ddN4T+ddN6T*N5Tm2*dN3T*ddN4T0*dN2T0*N1Tm1+N5Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN4T+ddN2T0
         *ddN6T*dN5T*N1Tm1*N3Tm2*dN4T0-ddN2T0*N6Tm2*dN5T*ddN3T*N1Tm1*dN4T0+dN3T0*ddN2T0*dN6T*N1Tm1*ddN5T*N4Tm2+
         ddN3T0*N2Tm1*dN6T*dN1T0*ddN5T*N4Tm2+N3Tm1*N6Tm2*dN2T0*dN5T*ddN1T0*ddN4T-ddN3T0*N4Tm1*dN6T*dN1T0*ddN5T*
         N2Tm2+N4Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*ddN5T+N4Tm1*ddN6T*dN2T0*dN5T*ddN1T0*N3Tm2+N3Tm1*ddN2T0*ddN6T*dN5T*
         dN1T0*N4Tm2-ddN3T0*ddN6T*dN5T*N1Tm1*N2Tm2*dN4T0-N3Tm1*dN6T*ddN1T0*ddN5T*N2Tm2*dN4T0+N5Tm1*ddN6T*dN3T*
         ddN4T0*dN1T0*N2Tm2-dN3T0*ddN2T0*N5Tm2*dN6T*N1Tm1*ddN4T-N5Tm1*ddN2T0*ddN6T*dN3T*dN1T0*N4Tm2+ddN3T0*N5Tm1
         *dN6T*dN1T0*N2Tm2*ddN4T-ddN6T*ddN4T0*dN2T0*dN5T*N1Tm1*N3Tm2+dN3T0*N2Tm1*N5Tm2*dN6T*ddN1T0*ddN4T+ddN3T0*
         dN4T*N2Tm1*ddN6T*N5Tm2*dN1T0+N2Tm1*ddN6T*N5Tm2*dN3T*ddN1T0*dN4T0-N5Tm1*ddN6T*dN3T*ddN1T0*N2Tm2*dN4T0-
         N3Tm1*N5Tm2*dN6T*dN2T0*ddN1T0*ddN4T+ddN3T0*N4Tm1*ddN6T*dN5T*dN1T0*N2Tm2-N3Tm1*ddN2T0*dN6T*dN1T0*ddN5T
         *N4Tm2-N2Tm1*dN6T*ddN4T0*dN1T0*N3Tm2*ddN5T-N5Tm2*dN6T*ddN4T0*dN2T0*ddN3T*N1Tm1+ddN3T0*N5Tm2*dN6T*dN2T0
         *N1Tm1*ddN4T-N5Tm1*dN6T*dN2T0*ddN3T*ddN1T0*N4Tm2+N3Tm1*dN4T*ddN6T*N5Tm2*dN2T0*ddN1T0-ddN3T0*N2Tm1*ddN6T
         *dN5T*dN1T0*N4Tm2+dN3T0*ddN6T*ddN4T0*dN5T*N1Tm1*N2Tm2-N2Tm1*ddN6T*dN5T*ddN1T0*N3Tm2*dN4T0+dN3T0*N5Tm1
         *dN4T*ddN6T*ddN1T0*N2Tm2-N6Tm2*N2Tm1*dN3T*ddN1T0*ddN5T*dN4T0+N3Tm1*dN6T*ddN4T0*dN1T0*ddN5T*N2Tm2-N6Tm2
         *dN3T*ddN4T0*dN2T0*N1Tm1*ddN5T-ddN2T0*N4Tm1*N5Tm2*dN6T*dN1T0*ddN3T+N3Tm1*dN4T*ddN2T0*N6Tm2*dN1T0*ddN5T
         -N6Tm2*N2Tm1*ddN4T0*dN5T*dN1T0*ddN3T-N5Tm1*ddN2T0*dN6T*dN1T0*N3Tm2*ddN4T-ddN3T0*dN4T*ddN6T*N5Tm2*dN2T0
         *N1Tm1+ddN2T0*N5Tm2*dN6T*ddN3T*N1Tm1*dN4T0+ddN2T0*N4Tm1*N6Tm2*dN5T*dN1T0*ddN3T+dN3T0*dN4T*ddN2T0*ddN6T
         *N5Tm2*N1Tm1-N5Tm1*dN4T*ddN6T*dN2T0*ddN1T0*N3Tm2-ddN3T0*N5Tm1*dN4T*ddN6T*dN1T0*N2Tm2+ddN3T0*dN4T*N6Tm2
         *dN2T0*N1Tm1*ddN5T-N4Tm1*dN6T*dN2T0*ddN1T0*N3Tm2*ddN5T-N2Tm1*ddN6T*N5Tm2*dN3T*ddN4T0*dN1T0+ddN2T0*N4Tm1
         *dN6T*dN1T0*N3Tm2*ddN5T+dN3T0*N2Tm1*ddN6T*dN5T*ddN1T0*N4Tm2+N5Tm1*ddN2T0*dN6T*dN1T0*ddN3T*N4Tm2+ddN3T0*
         dN6T*N1Tm1*ddN5T*N2Tm2*dN4T0-dN3T0*N4Tm1*ddN6T*dN5T*ddN1T0*N2Tm2-ddN2T0*dN6T*N1Tm1*N3Tm2*ddN5T*dN4T0
         -N5Tm1*N6Tm2*dN3T*dN2T0*ddN1T0*ddN4T-N3Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N2Tm2-ddN3T0*N2Tm1*N5Tm2*dN6T*dN1T0
         *ddN4T+ddN2T0*N4Tm1*ddN6T*N5Tm2*dN3T*dN1T0-N3Tm1*dN4T*N6Tm2*dN2T0*ddN1T0*ddN5T-dN3T0*N5Tm1*dN6T*ddN1T0
         *N2Tm2*ddN4T-N5Tm1*dN6T*ddN4T0*dN1T0*ddN3T*N2Tm2+N6Tm2*N2Tm1*dN5T*ddN3T*ddN1T0*dN4T0-N3Tm1*ddN6T*dN2T0
         *dN5T*ddN1T0*N4Tm2+N2Tm1*ddN6T*ddN4T0*dN5T*dN1T0*N3Tm2+N5Tm1*dN4T*ddN2T0*ddN6T*dN1T0*N3Tm2+N2Tm1*dN6T*
         ddN1T0*N3Tm2*ddN5T*dN4T0+dN3T0*N4Tm1*dN6T*ddN1T0*ddN5T*N2Tm2-dN3T0*dN4T*ddN2T0*N6Tm2*N1Tm1*ddN5T+ddN3T0
         *ddN6T*dN2T0*dN5T*N1Tm1*N4Tm2+N5Tm1*dN4T*N6Tm2*dN2T0*ddN3T*ddN1T0-dN3T0*N2Tm1*dN6T*ddN1T0*ddN5T*N4Tm2
         -N4Tm1*N6Tm2*dN2T0*dN5T*ddN3T*ddN1T0+N6Tm2*N2Tm1*dN3T*ddN4T0*dN1T0*ddN5T);
  m_control_points[7]=FP;

  return ;
}

void BSplinesFoot::GetParameters(double &FT,
				 double &IP,
				 double &FP,
				 vector<double> &ToMP,
				 vector<double> &MP)
{
    FT = m_FT ;
    FP = m_FP ;
    IP = m_IP ;
    ToMP = m_ToMP ;
    MP = m_MP ;
}

void BSplinesFoot::SetParametersWithoutMPAndToMP(double FT,
                                                 double IP,
                                                 double FP,
                                                 double IS, double IA,
                                                 double FS, double FA)
{
    m_FT = FT ;

    m_IP = IP ;
    m_IS = IS ;
    m_IA = IA ;

    m_FP = FP ;
    m_FS = FS ;
    m_FA = FA ;
}

void  BSplinesFoot::SetParametersWithInitFinalPose(double FT,
                                  double IP,
                                  double FP,
                                  std::vector<double> &ToMP,
                                  std::vector<double> &MP)
{
  // verify that each middle point has a reaching time parameter
  assert(ToMP.size()==MP.size());

  // save the parameters
  m_FT = FT ;
  m_IP = IP ;
  m_FP = FP ;
  m_ToMP = ToMP ;
  m_MP = MP ;


  // initialize some variables
  std::deque<double> knot;
  std::vector<double> control_points;
  knot.clear();
  control_points.clear();

  double alpha = 0.0;
  // generation of the knot vector
  switch (ToMP.size())
  {
    case 0 :
      // set the first three knots to 0.0
      // the next one to 50% of the final time
      // and the last three to the final time
      for (unsigned int i=0;i<=m_degree;i++)
        {knot.push_back(0.0);}

      for (unsigned int i=0 ; i<(m_degree-1) ; ++i)
        {knot.push_back ((double)(i+1) / (m_degree)) ;}

      for (unsigned int i =0;i<=m_degree;i++)
        {knot.push_back(1);}

      // Set the first three control point
      // to the initial pos and the last three
      // to the final pos
      for(unsigned int i=0 ; i<m_degree ; ++i)
        control_points.push_back(m_IP);

      for(unsigned int i=0 ; i<m_degree ; ++i)
        control_points.push_back(m_FP);
    break ;

    case 1 :
      for (unsigned int i=0 ; i<=m_degree ; ++i)
        {knot.push_back(0.0);}

      for (unsigned int i=1 ; i <=3 ; ++i)
        {knot.push_back((double)i/3.0*m_ToMP[0]/m_FT);}

      for (unsigned int i=0 ; i <3 ; ++i)
        {knot.push_back((m_ToMP[0]+(double)i/3*(m_FT-m_ToMP[0]))/m_FT);}

      for (unsigned int i =0 ; i<=m_degree ; ++i)
        {knot.push_back(1);}

      for(unsigned int i=0 ; i<m_degree ; ++i)
        control_points.push_back(m_IP);

      control_points.push_back(m_MP[0]);
      control_points.push_back(m_MP[0]);

      for(unsigned int i=0 ; i<m_degree ; ++i)
        control_points.push_back(m_FP);

    break ;

    case 2 :
      for (unsigned int i=0 ; i<=m_degree ; ++i)
        {knot.push_back(0.0);}

      for (unsigned int i=1 ; i <=2 ; ++i)
        {knot.push_back((double)i/2.0*m_ToMP[0]/m_FT);}

      for (unsigned int i=0 ; i <2 ; ++i)
        {knot.push_back( (m_ToMP[0]+m_ToMP[1])*0.5 /m_FT);}

      for (unsigned int i=0 ; i <2 ; ++i)
        {knot.push_back((m_ToMP[1]+(double)i/2*(m_FT-m_ToMP[1]))/m_FT);}

      for (unsigned int i=0 ; i<=m_degree ; ++i)
        {knot.push_back(1);}

      for(unsigned int i=0 ; i<m_degree ; ++i)
        control_points.push_back(m_IP);

      control_points.push_back(m_MP[0]);
      control_points.push_back(m_MP[1]);

      for(unsigned int i=0 ; i<m_degree ; ++i)
        control_points.push_back(m_FP);

    break ;
  }// end switch case

  SetKnotVector(knot);
  SetControlPoints(control_points);

  return ;
}