user: What is the c source code of the assembly code below:

```asm
<cdflib_cumfnc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x118,%rsp
  mov    %rdi,-0xe8(%rbp)
  mov    %rsi,-0xf0(%rbp)
  mov    %rdx,-0xf8(%rbp)
  mov    %rcx,-0x100(%rbp)
  mov    %r8,-0x108(%rbp)
  mov    %r9,-0x110(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0xe8(%rbp),%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  setae  %al
  xor    $0x1,%eax
  test   %al,%al
  jne    L40
  mov    -0x108(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x110(%rbp),%rax
  movsd  D113(%rip),%xmm0
  movsd  %xmm0,(%rax)
  jmp    L142
L40:
  nop
  mov    -0x100(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D31(%rip),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  xor    $0x1,%eax
  test   %al,%al
  jne    L73
  mov    -0x110(%rbp),%rdi
  mov    -0x108(%rbp),%rcx
  mov    -0xf8(%rbp),%rdx
  mov    -0xf0(%rbp),%rsi
  mov    -0xe8(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_cumf@plt>
  jmp    L142
L73:
  nop
  mov    -0x100(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  D177(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x38(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0xcc(%rbp)
  cmpl   $0x0,-0xcc(%rbp)
  jne    L75
  movl   $0x1,-0xcc(%rbp)
L75:
  mov    -0xcc(%rbp),%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  pxor   %xmm5,%xmm5
  cvtsi2sdl -0xcc(%rbp),%xmm5
  movsd  %xmm5,-0x118(%rbp)
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  mulsd  -0x118(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  lea    -0x98(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  -0x118(%rbp),%xmm3
  subsd  %xmm0,%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0xf0(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0xe8(%rbp),%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0xf8(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  -0x28(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0xf8(%rbp),%rax
  movsd  (%rax),%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  -0xb8(%rbp),%xmm0
  movsd  D97(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L170
  movsd  -0x28(%rbp),%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  D246(%rip),%xmm0
  movsd  -0xc0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  jmp    L98
L170:
  movsd  D246(%rip),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xc0(%rbp)
L98:
  mov    -0xf0(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D97(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xcc(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  mov    -0xf8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D97(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  lea    -0xc8(%rbp),%r9
  lea    -0xa0(%rbp),%r8
  lea    -0xb8(%rbp),%rcx
  lea    -0xc0(%rbp),%rdx
  lea    -0x88(%rbp),%rsi
  lea    -0x90(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0xd4(%rbp),%rdi
  push   %rdi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_beta_inc@plt>
  add    $0x10,%rsp
  mov    -0xf0(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  D177(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xcc(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  mov    -0xf8(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  D177(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0xcc(%rbp),%eax
  mov    %eax,-0xd0(%rbp)
  movsd  -0xa8(%rbp),%xmm0
  addsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x68(%rbp),%xmm1
  movsd  D113(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  lea    -0x80(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  mov    %eax,%ebx
  lea    -0x78(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  sub    %eax,%ebx
  lea    -0xa8(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  sub    %eax,%ebx
  mov    %ebx,%edx
  pxor   %xmm6,%xmm6
  cvtsi2sd %edx,%xmm6
  movsd  %xmm6,-0x118(%rbp)
  mov    -0xc0(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  addsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  mov    -0xb8(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movsd  -0xa8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm5
  addsd  -0x118(%rbp),%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x58(%rbp)
L33:
  movsd  D171(%rip),%xmm0
  comisd -0x50(%rbp),%xmm0
  ja     L74
  movsd  -0xa0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x40(%rbp),%xmm1
  movsd  D207(%rip),%xmm0
  mulsd  -0x50(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L74
  cmpl   $0x0,-0xd0(%rbp)
  jle    L74
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xd0(%rbp),%xmm0
  divsd  -0x38(%rbp),%xmm0
  movsd  -0x40(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  subl   $0x1,-0xd0(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movsd  D113(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x68(%rbp),%xmm1
  movsd  D113(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0xa8(%rbp),%xmm1
  movapd %xmm1,%xmm2
  addsd  -0x68(%rbp),%xmm2
  movsd  -0xc0(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x58(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  mulsd  -0x40(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  jmp    L33
L74:
  nop
  mov    -0xcc(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xd0(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  movsd  D113(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0xa8(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L157
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jne    L157
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  neg    %eax
  mov    %eax,%ebx
  lea    -0xa8(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  mov    %ebx,%edx
  sub    %eax,%edx
  pxor   %xmm7,%xmm7
  cvtsi2sd %edx,%xmm7
  movsd  %xmm7,-0x118(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  movsd  D113(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x120(%rbp)
  mov    -0xc0(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  mulsd  -0x120(%rbp),%xmm0
  addsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  mov    -0xb8(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movsd  -0xa8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm4
  addsd  -0x118(%rbp),%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  jmp    L153
L157:
  movsd  -0xb0(%rbp),%xmm0
  movsd  D113(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0xa8(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  mov    %eax,%ebx
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  sub    %eax,%ebx
  lea    -0xa8(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <cdflib_gamma_log@plt>
  sub    %eax,%ebx
  mov    %ebx,%edx
  pxor   %xmm4,%xmm4
  cvtsi2sd %edx,%xmm4
  movsd  %xmm4,-0x118(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  movsd  D113(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x120(%rbp)
  mov    -0xc0(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  mulsd  -0x120(%rbp),%xmm0
  addsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  mov    -0xb8(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movsd  -0xa8(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm3
  addsd  -0x118(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  jmp    L153
L24:
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x60(%rbp),%xmm1
  movsd  D207(%rip),%xmm0
  mulsd  -0x50(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L54
L153:
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0xd0(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  -0x40(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  addl   $0x1,-0xd0(%rbp)
  movsd  -0xb0(%rbp),%xmm1
  movsd  D113(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  -0xb0(%rbp),%xmm1
  movsd  -0xa8(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D177(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0xc0(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0xb0(%rbp),%xmm1
  movsd  D113(%rip),%xmm2
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x60(%rbp),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x40(%rbp),%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  nop
  movsd  D171(%rip),%xmm0
  comisd -0x50(%rbp),%xmm0
  jbe    L24
L54:
  nop
  mov    -0x108(%rbp),%rax
  movsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x108(%rbp),%rax
  movsd  (%rax),%xmm2
  movsd  D10(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D10(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x110(%rbp),%rax
  movsd  %xmm0,(%rax)
  nop
L142:
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L124
  call   <__stack_chk_fail@plt>
L124:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D113
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D31
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D177
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D97
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D246
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D171
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D207
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D10
type_guessed: f64

tool: D113: 1

tool: {"D31": [0xbb,0xbd,0xd7,0xd9,0xdf,0x7c,0xdb,0x3d]}

tool: D177: 2

tool: D97: 0.5

tool: D246: 1

tool: {"D171": [0x23,0x42,0x92,0x0c,0xa1,0x9c,0xc7,0x3b]}

tool: {"D207": [0x2d,0x43,0x1c,0xeb,0xe2,0x36,0x1a,0x3f]}

tool: D10: 0.5

assistant: ```c
void cdflib_cumfnc(const double *f, const double *dfn, const double *dfd, const double *pnonc, double *cum, double *ccum) {
  static const double half = 0.5e0;
  static const double done = 1.0e0;
  static const double eps = 1.0e-4;
  double dsum, dummy, prod, xx, yy, adn, aup, b, betdn, betup, centwt, dnterm, sum, upterm, xmult, xnonc;
  int i, icent, ierr;
  double T1, T2, T3, T4, T5, T6;
  if (!(*f <= 0.0e0)) {
    goto S10;
  }
  *cum = 0.0e0;
  *ccum = 1.0e0;
  return;
S10:
  if (!(*pnonc < 1.0e-10)) {
    goto S20;
  }
  cdflib_cumf(f, dfn, dfd, cum, ccum);
  return;
S20:
  xnonc = *pnonc / 2.0e0;
  icent = (int)xnonc;
  if (icent == 0) {
    icent = 1;
  }
  T1 = (double)(icent + 1);
  centwt = exp(-xnonc + (double)icent * log(xnonc) - cdflib_gamma_log(&T1));
  prod = *dfn * *f;
  dsum = *dfd + prod;
  yy = *dfd / dsum;
  if (yy > half) {
    xx = prod / dsum;
    yy = done - xx;
  } else {
    xx = done - yy;
  }
  T2 = *dfn * half + (double)icent;
  T3 = *dfd * half;
  cdflib_beta_inc(&T2, &T3, &xx, &yy, &betdn, &dummy, &ierr);
  adn = *dfn / 2.0e0 + (double)icent;
  aup = adn;
  b = *dfd / 2.0e0;
  betup = betdn;
  sum = centwt * betdn;
  xmult = centwt;
  i = icent;
  T4 = adn + b;
  T5 = adn + 1.0e0;
  dnterm = exp(cdflib_gamma_log(&T4) - cdflib_gamma_log(&T5) - cdflib_gamma_log(&b) + adn * log(xx) + b * log(yy));
S30:
  if ((int)(sum < 1.0e-20 || (xmult * betdn) < eps * sum) || i <= 0) {
    goto S40;
  }
  xmult *= ((double)i / xnonc);
  i -= 1;
  adn -= 1.0;
  dnterm = (adn + 1.0) / ((adn + b) * xx) * dnterm;
  betdn += dnterm;
  sum += (xmult * betdn);
  goto S30;
S40:
  i = icent + 1;
  xmult = centwt;
  if (aup - 1.0 + b == 0)
    upterm = exp(-cdflib_gamma_log(&aup) - cdflib_gamma_log(&b) + (aup - 1.0) * log(xx) + b * log(yy));
  else {
    T6 = aup - 1.0 + b;
    upterm = exp(cdflib_gamma_log(&T6) - cdflib_gamma_log(&aup) - cdflib_gamma_log(&b) + (aup - 1.0) * log(xx) + b * log(yy));
  }
  goto S60;
S50:
  if ((int)(sum < 1.0e-20 || (xmult * betup) < eps * sum)) {
    goto S70;
  }
S60:
  xmult *= (xnonc / (double)i);
  i += 1;
  aup += 1.0;
  upterm = (aup + b - 2.0e0) * xx / (aup - 1.0) * upterm;
  betup -= upterm;
  sum += (xmult * betup);
  goto S50;
S70:
  *cum = sum;
  *ccum = 0.5e0 + (0.5e0 - *cum);
  return;
}
```