user: Translate the below assembly code into C programming language:

```asm
<Hdetect>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x4f0,%rsp
  mov    %rdi,-0x4d8(%rbp)
  mov    %rsi,-0x4e0(%rbp)
  mov    %rdx,-0x4e8(%rbp)
  mov    %rcx,-0x4f0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x4d8(%rbp),%rsi
  lea    -0x190(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x3,%edx
  mov    %rax,%rdi
  call   <mattr@plt>
  mov    -0x4d8(%rbp),%rcx
  lea    -0x140(%rbp),%rax
  mov    $0x48,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0x410(%rbp),%rcx
  lea    -0x460(%rbp),%rdx
  lea    -0x140(%rbp),%rsi
  lea    -0x4c0(%rbp),%rax
  mov    $0x3,%r9d
  mov    %rcx,%r8
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <svduv@plt>
  movsd  -0x400(%rbp),%xmm0
  movsd  %xmm0,-0x4a0(%rbp)
  movsd  -0x3e8(%rbp),%xmm0
  movsd  %xmm0,-0x498(%rbp)
  movsd  -0x3d0(%rbp),%xmm0
  movsd  %xmm0,-0x490(%rbp)
  lea    -0x3c0(%rbp),%rdx
  lea    -0x4a0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <skew_sym@plt>
  lea    -0x190(%rbp),%rdx
  lea    -0x3c0(%rbp),%rsi
  lea    -0x370(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  lea    -0x2d0(%rbp),%rcx
  lea    -0x320(%rbp),%rdx
  mov    -0x4e8(%rbp),%rsi
  mov    -0x4e0(%rbp),%rax
  mov    %rax,%rdi
  call   <fillu3@plt>
  lea    -0x2d0(%rbp),%rdx
  lea    -0x370(%rbp),%rsi
  lea    -0x1e0(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  lea    -0x320(%rbp),%rsi
  lea    -0x280(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x3,%edx
  mov    %rax,%rdi
  call   <mattr@plt>
  lea    -0x1e0(%rbp),%rsi
  lea    -0x230(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x3,%edx
  mov    %rax,%rdi
  call   <mattr@plt>
  lea    -0x230(%rbp),%rdx
  lea    -0x280(%rbp),%rcx
  lea    -0xa0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <crossp@plt>
  lea    -0x230(%rbp),%rdx
  add    $0x18,%rdx
  lea    -0x280(%rbp),%rcx
  add    $0x18,%rcx
  lea    -0xa0(%rbp),%rax
  add    $0x18,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <crossp@plt>
  lea    -0x230(%rbp),%rdx
  add    $0x30,%rdx
  lea    -0x280(%rbp),%rcx
  add    $0x30,%rcx
  lea    -0xa0(%rbp),%rax
  add    $0x30,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <crossp@plt>
  lea    -0xa0(%rbp),%rsi
  lea    -0xf0(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x3,%edx
  mov    %rax,%rdi
  call   <mattr@plt>
  movb   $0x0,-0x4c3(%rbp)
  jmp    L8
L64:
  movzbl -0x4c3(%rbp),%eax
  cltq
  movsd  -0x3c0(%rbp,%rax,8),%xmm0
  movzbl -0x4c3(%rbp),%eax
  movq   D14(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  cltq
  movsd  %xmm0,-0x3c0(%rbp,%rax,8)
  addb   $0x1,-0x4c3(%rbp)
L8:
  cmpb   $0x8,-0x4c3(%rbp)
  jbe    L64
  lea    -0x320(%rbp),%rdx
  lea    -0x3c0(%rbp),%rsi
  lea    -0x50(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  movsd  -0xf0(%rbp),%xmm1
  movsd  -0x50(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0xd8(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0xc0(%rbp),%xmm2
  movsd  -0x20(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x50(%rbp),%xmm2
  movsd  -0x50(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  -0x38(%rbp),%xmm3
  movsd  -0x38(%rbp),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm2
  movsd  -0x20(%rbp),%xmm3
  movsd  -0x20(%rbp),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x480(%rbp)
  movsd  -0xe8(%rbp),%xmm1
  movsd  -0x48(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0xd0(%rbp),%xmm2
  movsd  -0x30(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0xb8(%rbp),%xmm2
  movsd  -0x18(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm2
  movsd  -0x48(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  -0x30(%rbp),%xmm3
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm2
  movsd  -0x18(%rbp),%xmm3
  movsd  -0x18(%rbp),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x478(%rbp)
  movsd  -0xe0(%rbp),%xmm1
  movsd  -0x40(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0xc8(%rbp),%xmm2
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0xb0(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x40(%rbp),%xmm2
  movsd  -0x40(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  -0x28(%rbp),%xmm3
  movsd  -0x28(%rbp),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm2
  movsd  -0x10(%rbp),%xmm3
  movsd  -0x10(%rbp),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x470(%rbp)
  lea    -0x2d0(%rbp),%rsi
  lea    -0x230(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x3,%edx
  mov    %rax,%rdi
  call   <mattr@plt>
  lea    -0x230(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <minv@plt>
  mov    %al,-0x4c1(%rbp)
  lea    -0x480(%rbp),%rdx
  lea    -0x230(%rbp),%rsi
  lea    -0x2d0(%rbp),%rax
  mov    $0x1,%r9d
  mov    $0x3,%r8d
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <rmmult@plt>
  lea    -0x2d0(%rbp),%rsi
  lea    -0x230(%rbp),%rax
  mov    $0x1,%ecx
  mov    $0x3,%edx
  mov    %rax,%rdi
  call   <mattr@plt>
  lea    -0x230(%rbp),%rdx
  lea    -0x4a0(%rbp),%rsi
  lea    -0x2d0(%rbp),%rax
  mov    $0x3,%r9d
  mov    $0x1,%r8d
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <rmmult@plt>
  movb   $0x0,-0x4c3(%rbp)
  jmp    L54
L69:
  movb   $0x0,-0x4c2(%rbp)
  jmp    L41
L40:
  movzbl -0x4c3(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %eax,%edx
  movzbl -0x4c2(%rbp),%eax
  add    %edx,%eax
  cltq
  movsd  -0x370(%rbp,%rax,8),%xmm0
  movzbl -0x4c3(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %eax,%edx
  movzbl -0x4c2(%rbp),%eax
  add    %edx,%eax
  cltq
  movsd  -0x2d0(%rbp,%rax,8),%xmm1
  movzbl -0x4c3(%rbp),%ecx
  movzbl -0x4c2(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x4f0(%rbp),%rax
  add    %rdx,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addb   $0x1,-0x4c2(%rbp)
L41:
  cmpb   $0x2,-0x4c2(%rbp)
  jbe    L40
  addb   $0x1,-0x4c3(%rbp)
L54:
  cmpb   $0x2,-0x4c3(%rbp)
  jbe    L69
  mov    -0x4f0(%rbp),%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <isnan@plt>
  test   %rax,%rax
  jne    L7
  mov    -0x4f0(%rbp),%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <isinf@plt>
  test   %rax,%rax
  jne    L7
  cmpb   $0x0,-0x4c1(%rbp)
  je     L47
L7:
  mov    -0x4f0(%rbp),%rax
  add    $0x38,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4f0(%rbp),%rdx
  add    $0x30,%rdx
  movsd  (%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x4f0(%rbp),%rax
  add    $0x28,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4f0(%rbp),%rdx
  add    $0x18,%rdx
  movsd  (%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x4f0(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x4f0(%rbp),%rdx
  add    $0x8,%rdx
  movsd  (%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x4f0(%rbp),%rax
  lea    0x40(%rax),%rdx
  movsd  D11(%rip),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x4f0(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  movsd  (%rax),%xmm0
  mov    -0x4f0(%rbp),%rax
  movsd  %xmm0,(%rax)
L47:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L61
  call   <__stack_chk_fail@plt>
L61:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D14
type: byte[8]
name: parse_data
arguments: data_label: D11
type: byte[8]

tool: {"D14": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: {"D11": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
void Hdetect(double *F, double *u7, unsigned char *IDXS, double *H) {
  double D[3], U[3 * 3], V[3 * 3], ec[3], Ex[3 * 3], A[3 * 3], u3a[3 * 3], u3b[3 * 3], u3aT[3 * 3], u3bT[3 * 3], Au3b[3 * 3], Ft[3 * 3], F1[3 * 3], p1[3 * 3], p1T[3 * 3], p2[3 * 3], b[3];
  unsigned char i, j, sing;
  mattr(Ft, F, 3, 3);
  memcpy(F1, F, 3 * 3 * sizeof(double));
  svduv(D, F1, U, 3, V, 3);
  ec[0] = V[2];
  ec[1] = V[5];
  ec[2] = V[8];
  skew_sym(ec, Ex);
  mmul(A, Ex, Ft, 3);
  fillu3(u7, IDXS, u3a, u3b);
  mmul(Au3b, A, u3b, 3);
  mattr(u3aT, u3a, 3, 3);
  mattr(u3bT, Au3b, 3, 3);
  crossp(p1T, u3aT, u3bT);
  crossp(p1T + 3, u3aT + 3, u3bT + 3);
  crossp(p1T + 6, u3aT + 6, u3bT + 6);
  mattr(p1, p1T, 3, 3);
  for (i = 0; i < 9; ++i) {
    Ex[i] *= -1;
  }
  mmul(p2, Ex, u3a, 3);
  b[0] = (p1[0] * p2[0] + p1[3] * p2[3] + p1[6] * p2[6]) / (p2[0] * p2[0] + p2[3] * p2[3] + p2[6] * p2[6]);
  b[1] = (p1[1] * p2[1] + p1[4] * p2[4] + p1[7] * p2[7]) / (p2[1] * p2[1] + p2[4] * p2[4] + p2[7] * p2[7]);
  b[2] = (p1[2] * p2[2] + p1[5] * p2[5] + p1[8] * p2[8]) / (p2[2] * p2[2] + p2[5] * p2[5] + p2[8] * p2[8]);
  mattr(u3bT, u3b, 3, 3);
  sing = minv(u3bT, 3);
  rmmult(u3b, u3bT, b, 3, 3, 1);
  mattr(u3bT, u3b, 3, 1);
  rmmult(u3b, ec, u3bT, 3, 1, 3);
  for (i = 0; i < 3; ++i) {
    for (j = 0; j < 3; ++j) {
      H[i + j * 3] = A[i * 3 + j] - u3b[i * 3 + j];
    }
  }
  if (isnan(*H) || isinf(*H) || sing) {
    H[1] = H[2] = H[3] = H[5] = H[6] = H[7] = 0;
    H[0] = H[4] = H[8] = 1;
  }
}
```