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

```asm
<PPChi2>:
  endbr64
  push   %r12
  pxor   %xmm6,%xmm6
  push   %rbp
  push   %rbx
  sub    $0x60,%rsp
  movsd  %xmm0,0x8(%rsp)
  movsd  %xmm2,0x38(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  comisd %xmm0,%xmm6
  movl   $0x1,(%rdi)
  ja     L85
  movsd  0x8(%rsp),%xmm5
  comisd D497(%rip),%xmm5
  jae    L85
  pxor   %xmm5,%xmm5
  mov    %rdi,%rbp
  comisd %xmm1,%xmm5
  jae    L43
  movsd  D25(%rip),%xmm6
  movl   $0x0,(%rdi)
  movsd  0x8(%rsp),%xmm0
  movsd  %xmm1,0x20(%rsp)
  mulsd  %xmm1,%xmm6
  movsd  %xmm6,0x10(%rsp)
  subsd  D497(%rip),%xmm6
  movsd  %xmm6,0x18(%rsp)
  call   <log@plt>
  mulsd  D471(%rip),%xmm0
  movsd  0x20(%rsp),%xmm1
  comisd %xmm1,%xmm0
  ja     L10
  comisd D527(%rip),%xmm1
  movsd  %xmm1,0x20(%rsp)
  jbe    L198
  movsd  0x8(%rsp),%xmm0
  lea    0x54(%rsp),%r12
  mov    $0x1,%eax
  mov    %r12,%rdi
  call   <PPND16@plt>
  movsd  0x20(%rsp),%xmm1
  pxor   %xmm5,%xmm5
  movsd  D77(%rip),%xmm2
  pxor   %xmm3,%xmm3
  divsd  %xmm1,%xmm2
  cvtsi2sd %eax,%xmm3
  ucomisd %xmm2,%xmm5
  ja     L120
  movapd %xmm2,%xmm0
  sqrtsd %xmm0,%xmm0
L82:
  mulsd  %xmm3,%xmm0
  movapd %xmm1,%xmm3
  addsd  D497(%rip),%xmm0
  mulsd  D298(%rip),%xmm1
  addsd  D344(%rip),%xmm1
  subsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm3
  mulsd  %xmm0,%xmm3
  mulsd  %xmm0,%xmm3
  comisd %xmm1,%xmm3
  ja     L67
L178:
  mov    $0x14,%ebx
  jmp    L130
  nopl   (%rax)
L92:
  movapd %xmm0,%xmm3
L130:
  movsd  D25(%rip),%xmm5
  movsd  0x10(%rsp),%xmm1
  mov    %r12,%rdi
  mov    $0x2,%eax
  movsd  %xmm3,0x30(%rsp)
  mulsd  %xmm3,%xmm5
  movapd %xmm5,%xmm0
  movsd  %xmm5,0x20(%rsp)
  call   <GammaD@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm6
  cvtsi2sd %eax,%xmm0
  mov    0x54(%rsp),%eax
  subsd  %xmm0,%xmm6
  movsd  %xmm6,0x28(%rsp)
  test   %eax,%eax
  jne    L44
  movsd  0x30(%rsp),%xmm3
  movapd %xmm3,%xmm0
  call   <log@plt>
  movsd  D230(%rip),%xmm3
  mulsd  0x10(%rsp),%xmm3
  movapd %xmm0,%xmm1
  movsd  0x38(%rsp),%xmm0
  mulsd  0x18(%rsp),%xmm1
  addsd  %xmm3,%xmm0
  addsd  0x20(%rsp),%xmm0
  subsd  %xmm1,%xmm0
  call   <exp@plt>
  movsd  0x28(%rsp),%xmm5
  movsd  0x30(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm7
  movsd  D374(%rip),%xmm1
  mulsd  %xmm0,%xmm5
  movsd  D25(%rip),%xmm0
  movsd  D103(%rip),%xmm15
  movapd %xmm7,%xmm10
  movsd  D347(%rip),%xmm9
  movsd  D187(%rip),%xmm2
  movsd  D546(%rip),%xmm11
  movsd  D556(%rip),%xmm8
  movsd  D260(%rip),%xmm12
  movsd  D9(%rip),%xmm13
  movsd  D416(%rip),%xmm14
  mulsd  %xmm5,%xmm0
  movapd %xmm5,%xmm6
  divsd  %xmm3,%xmm6
  movapd %xmm0,%xmm4
  mulsd  %xmm6,%xmm10
  subsd  %xmm10,%xmm4
  mulsd  %xmm4,%xmm1
  addsd  D321(%rip),%xmm1
  mulsd  %xmm4,%xmm9
  addsd  D277(%rip),%xmm9
  mulsd  %xmm4,%xmm8
  addsd  D27(%rip),%xmm8
  mulsd  %xmm4,%xmm12
  addsd  D372(%rip),%xmm12
  mulsd  %xmm4,%xmm1
  mulsd  %xmm4,%xmm9
  addsd  D649(%rip),%xmm9
  mulsd  %xmm4,%xmm8
  addsd  D383(%rip),%xmm8
  mulsd  %xmm4,%xmm13
  addsd  D570(%rip),%xmm13
  mulsd  %xmm4,%xmm12
  addsd  %xmm15,%xmm1
  mulsd  %xmm4,%xmm9
  addsd  D421(%rip),%xmm12
  addsd  D611(%rip),%xmm9
  mulsd  %xmm4,%xmm8
  mulsd  %xmm7,%xmm13
  mulsd  %xmm4,%xmm1
  addsd  D262(%rip),%xmm1
  mulsd  %xmm4,%xmm9
  addsd  %xmm2,%xmm8
  mulsd  %xmm4,%xmm1
  addsd  D317(%rip),%xmm1
  addsd  %xmm11,%xmm9
  divsd  %xmm14,%xmm8
  mulsd  %xmm4,%xmm1
  addsd  %xmm2,%xmm1
  movapd %xmm7,%xmm2
  divsd  %xmm11,%xmm1
  movapd %xmm9,%xmm11
  movsd  D109(%rip),%xmm9
  mulsd  %xmm4,%xmm9
  addsd  D62(%rip),%xmm9
  mulsd  %xmm4,%xmm9
  mulsd  D34(%rip),%xmm4
  addsd  D474(%rip),%xmm9
  mulsd  %xmm7,%xmm9
  movapd %xmm13,%xmm7
  addsd  %xmm15,%xmm4
  addsd  %xmm4,%xmm7
  movapd %xmm2,%xmm4
  addsd  %xmm12,%xmm9
  movsd  D677(%rip),%xmm12
  mulsd  D457(%rip),%xmm2
  addsd  D144(%rip),%xmm2
  mulsd  %xmm4,%xmm2
  divsd  %xmm14,%xmm7
  mulsd  %xmm1,%xmm0
  addsd  D497(%rip),%xmm0
  addsd  D19(%rip),%xmm2
  divsd  %xmm12,%xmm2
  divsd  %xmm12,%xmm9
  mulsd  %xmm6,%xmm2
  subsd  %xmm2,%xmm7
  mulsd  %xmm6,%xmm7
  divsd  %xmm14,%xmm11
  movapd %xmm9,%xmm2
  subsd  %xmm7,%xmm2
  mulsd  %xmm6,%xmm2
  subsd  %xmm2,%xmm8
  mulsd  %xmm6,%xmm8
  subsd  %xmm8,%xmm11
  mulsd  %xmm6,%xmm11
  subsd  %xmm11,%xmm1
  mulsd  %xmm10,%xmm1
  subsd  %xmm1,%xmm0
  mulsd  %xmm5,%xmm0
  addsd  %xmm3,%xmm0
  divsd  %xmm0,%xmm3
  subsd  D497(%rip),%xmm3
  andpd  D331(%rip),%xmm3
  comisd D578(%rip),%xmm3
  ja     L113
  sub    $0x1,%ebx
  jne    L92
  movl   $0x4,0x0(%rbp)
  jmp    L113
  nopl   (%rax)
L43:
  movl   $0x2,(%rdi)
L85:
  movsd  D273(%rip),%xmm0
L113:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L144
  add    $0x60,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L10:
  movsd  0x10(%rsp),%xmm0
  mulsd  D230(%rip),%xmm0
  addsd  0x38(%rsp),%xmm0
  call   <exp@plt>
  movsd  0x10(%rsp),%xmm5
  movsd  0x8(%rsp),%xmm6
  movapd %xmm0,%xmm1
  mulsd  %xmm5,%xmm6
  movapd %xmm6,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D497(%rip),%xmm1
  divsd  %xmm5,%xmm1
  call   <pow@plt>
  movsd  D578(%rip),%xmm1
  movapd %xmm0,%xmm3
  comisd %xmm0,%xmm1
  ja     L113
L123:
  lea    0x54(%rsp),%r12
  jmp    L178
  nopw   0x0(%rax,%rax,1)
L198:
  movsd  D497(%rip),%xmm0
  subsd  0x8(%rsp),%xmm0
  call   <log@plt>
  movsd  0x18(%rsp),%xmm6
  mulsd  D230(%rip),%xmm6
  addsd  0x38(%rsp),%xmm0
  movsd  D256(%rip),%xmm3
  movsd  %xmm0,0x48(%rsp)
  movsd  %xmm6,0x40(%rsp)
  nopl   0x0(%rax,%rax,1)
L129:
  movsd  D513(%rip),%xmm2
  movsd  D490(%rip),%xmm1
  movsd  %xmm3,0x20(%rsp)
  movsd  D25(%rip),%xmm0
  addsd  %xmm3,%xmm2
  addsd  %xmm3,%xmm1
  mulsd  %xmm3,%xmm0
  addsd  0x48(%rsp),%xmm0
  addsd  0x40(%rsp),%xmm0
  mulsd  %xmm3,%xmm2
  addsd  D195(%rip),%xmm2
  mulsd  %xmm3,%xmm1
  addsd  D497(%rip),%xmm1
  mulsd  %xmm3,%xmm2
  movsd  %xmm1,0x30(%rsp)
  movsd  %xmm2,0x28(%rsp)
  call   <exp@plt>
  movsd  0x28(%rsp),%xmm2
  movsd  0x30(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm3
  movsd  D497(%rip),%xmm4
  mulsd  %xmm2,%xmm0
  divsd  %xmm1,%xmm0
  subsd  %xmm0,%xmm4
  movapd %xmm3,%xmm0
  addsd  %xmm3,%xmm0
  addsd  D490(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  D411(%rip),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  D620(%rip),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  D195(%rip),%xmm1
  divsd  %xmm2,%xmm1
  subsd  D25(%rip),%xmm0
  subsd  %xmm1,%xmm0
  divsd  %xmm0,%xmm4
  movapd %xmm3,%xmm0
  subsd  %xmm4,%xmm3
  divsd  %xmm3,%xmm0
  subsd  D497(%rip),%xmm0
  andpd  D331(%rip),%xmm0
  comisd D312(%rip),%xmm0
  ja     L129
  jmp    L123
L44:
  movl   $0x3,0x0(%rbp)
  jmp    L85
  nopl   0x0(%rax)
L67:
  movsd  D497(%rip),%xmm0
  subsd  0x8(%rsp),%xmm0
  movsd  %xmm3,0x20(%rsp)
  call   <log@plt>
  movsd  0x20(%rsp),%xmm3
  movq   %xmm0,%rbx
  movsd  D25(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  call   <log@plt>
  movsd  0x18(%rsp),%xmm1
  movsd  D454(%rip),%xmm3
  mulsd  %xmm0,%xmm1
  movq   %rbx,%xmm0
  subsd  %xmm1,%xmm0
  addsd  0x38(%rsp),%xmm0
  mulsd  %xmm0,%xmm3
  jmp    L178
L144:
  call   <__stack_chk_fail@plt>
L120:
  movapd %xmm2,%xmm0
  movsd  %xmm1,0x30(%rsp)
  movsd  %xmm3,0x28(%rsp)
  movsd  %xmm2,0x20(%rsp)
  call   <sqrt@plt>
  movsd  0x30(%rsp),%xmm1
  movsd  0x28(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm2
  jmp    L82
```

tool_calls: name: read_data
arguments: data_tag: D497
datatype: f64[2]
name: read_data
arguments: data_tag: D25
datatype: f64
name: read_data
arguments: data_tag: D471
datatype: byte[8]
name: read_data
arguments: data_tag: D527
datatype: f64[2]
name: read_data
arguments: data_tag: D77
datatype: f64
name: read_data
arguments: data_tag: D298
datatype: f64
name: read_data
arguments: data_tag: D344
datatype: f64
name: read_data
arguments: data_tag: D230
datatype: f64
name: read_data
arguments: data_tag: D374
datatype: f64
name: read_data
arguments: data_tag: D103
datatype: f64
name: read_data
arguments: data_tag: D347
datatype: f64
name: read_data
arguments: data_tag: D187
datatype: f64
name: read_data
arguments: data_tag: D546
datatype: f64
name: read_data
arguments: data_tag: D556
datatype: f64
name: read_data
arguments: data_tag: D260
datatype: f64
name: read_data
arguments: data_tag: D9
datatype: f64
name: read_data
arguments: data_tag: D416
datatype: f64
name: read_data
arguments: data_tag: D321
datatype: f64
name: read_data
arguments: data_tag: D277
datatype: f64
name: read_data
arguments: data_tag: D27
datatype: f64
name: read_data
arguments: data_tag: D372
datatype: f64
name: read_data
arguments: data_tag: D649
datatype: f64
name: read_data
arguments: data_tag: D383
datatype: f64
name: read_data
arguments: data_tag: D570
datatype: f64
name: read_data
arguments: data_tag: D421
datatype: f64
name: read_data
arguments: data_tag: D611
datatype: f64
name: read_data
arguments: data_tag: D262
datatype: f64
name: read_data
arguments: data_tag: D317
datatype: f64
name: read_data
arguments: data_tag: D109
datatype: f64
name: read_data
arguments: data_tag: D62
datatype: f64
name: read_data
arguments: data_tag: D34
datatype: f64
name: read_data
arguments: data_tag: D474
datatype: f64
name: read_data
arguments: data_tag: D677
datatype: f64
name: read_data
arguments: data_tag: D457
datatype: f64
name: read_data
arguments: data_tag: D144
datatype: f64
name: read_data
arguments: data_tag: D19
datatype: f64
name: read_data
arguments: data_tag: D331
datatype: qword[2]
name: read_data
arguments: data_tag: D578
datatype: byte[16]
name: read_data
arguments: data_tag: D273
datatype: f32[2]
name: read_data
arguments: data_tag: D256
datatype: f64
name: read_data
arguments: data_tag: D513
datatype: f64
name: read_data
arguments: data_tag: D490
datatype: f64
name: read_data
arguments: data_tag: D195
datatype: f64
name: read_data
arguments: data_tag: D411
datatype: f64
name: read_data
arguments: data_tag: D620
datatype: f64
name: read_data
arguments: data_tag: D312
datatype: f64[2]
name: read_data
arguments: data_tag: D454
datatype: f32[2]

tool: {"D497": [1.0,0.5]}

tool: D25: 0.5

tool: {"D471": [0xd7,0xa3,0x70,0x3d,0x0a,0xd7,0xf3,0xbf]}

tool: {"D527": [0.32,0.222222]}

tool: D77: 0.222222

tool: D298: 2.2

tool: D344: 6

tool: D230: 0.6931471806

tool: D374: 60

tool: D103: 84

tool: D347: 1278

tool: D187: 210

tool: D546: 420

tool: D556: 932

tool: D260: 1182

tool: D9: 606

tool: D416: 2520

tool: D321: 70

tool: D277: 1141

tool: D27: 707

tool: D372: 672

tool: D649: 966

tool: D383: 462

tool: D570: 1175

tool: D421: 252

tool: D611: 735

tool: D262: 105

tool: D317: 140

tool: D109: 1740

tool: D62: 889

tool: D34: 2264

tool: D474: 294

tool: D677: 5040

tool: D457: 127

tool: D144: 346

tool: D19: 120

tool: {"D331": [0x7fffffffffffffff,0x0000000000000000]}

tool: {"D578": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xa0,0x3e,0x7b,0x14,0xae,0x47,0xe1,0x7a,0xd4,0x3f]}

tool: {"D273": [0.0,-1.875]}

tool: D256: 0.4

tool: D513: 6.66

tool: D490: 4.67

tool: D195: 6.73

tool: D411: 3

tool: D620: 13.32

tool: {"D312": [0.01,60.0]}

tool: {"D454": [0.0,-2.0]}

assistant: ```c
double PPChi2(p, v, g, ifault)
double p, v, g;
int *ifault;
{
  int i, if1;
  double a, b, c, q, t, x, p1, p2, s1, s2, s3, s4, s5, s6, ch, xx, tmp;
  *ifault = 1;
  if ((p < 0.0) || (p >= 1.0))
    return -1.0;
  *ifault = 2;
  if (v <= 0.0)
    return -1.0;
  *ifault = 0;
  xx = 0.5 * v;
  c = xx - 1.0;
  if (v < -1.24 * log(p)) {
    ch = pow(p * xx * (exp(g + xx * 0.6931471806)), 1.0 / xx);
    if (ch < 5e-7)
      return ch;
  } else {
    if (v > 0.32) {
      x = PPND16(p, &if1);
      p1 = 0.222222 / v;
      tmp = x * sqrt(p1) + 1.0 - p1;
      ch = v * tmp * tmp * tmp;
      if (ch > 2.2 * v + 6.0)
        ch = -2.0 * (log(1.0 - p) - c * log(0.5 * ch) + g);
    } else {
      ch = 0.4;
      a = log(1.0 - p);
      do {
        q = ch;
        p1 = 1.0 + ch * (4.67 + ch);
        p2 = ch * (6.73 + ch * (6.66 + ch));
        t = -0.5 + (4.67 + 2.0 * ch) / p1 - (6.73 + ch * (13.32 + 3.0 * ch)) / p2;
        ch -= (1.0 - (exp(a + g + 0.5 * ch + c * 0.6931471806)) * p2 / p1) / t;
      } while (fabs(q / ch - 1.0) > 0.01);
    }
  }
  for (i = 1; i <= 20; ++i) {
    q = ch;
    p1 = 0.5 * ch;
    p2 = p - GammaD(p1, xx, &if1);
    if (if1 == 0) {
      t = p2 * (exp(xx * 0.6931471806 + g + p1 - c * log(ch)));
      b = t / ch;
      a = 0.5 * t - b * c;
      s1 = (210.0 + a * (140.0 + a * (105.0 + a * (84.0 + a * (70.0 + 60.0 * a))))) / 420.0;
      s2 = (420.0 + a * (735.0 + a * (966.0 + a * (1141.0 + 1278.0 * a)))) / 2520.0;
      s3 = (210.0 + a * (462.0 + a * (707.0 + 932.0 * a))) / 2520.0;
      s4 = (252.0 + a * (672.0 + 1182.0 * a) + c * (294.0 + a * (889.0 + 1740.0 * a))) / 5040.0;
      s5 = (84.0 + 2264.0 * a + c * (1175.0 + 606.0 * a)) / 2520.0;
      s6 = (120.0 + c * (346.0 + 127.0 * c)) / 5040.0;
      ch += t * (1.0 + 0.5 * t * s1 - b * c * (s1 - b * (s2 - b * (s3 - b * (s4 - b * (s5 - b * s6))))));
      if (fabs(q / ch - 1.0) > 5e-7)
        return ch;
    } else {
      *ifault = 3;
      return -1.0;
    }
  }
  *ifault = 4;
  return ch;
}
```