user: What would the C source look like for the assembly code provided here:

```asm
<ZeroAngle>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %edi,%ebx
  movq   %xmm0,%r15
  movsd  %xmm1,0x58(%rsp)
  movq   %xmm3,%rbp
  movsd  %xmm4,0x48(%rsp)
  xorpd  D41(%rip),%xmm2
  divsd  D144(%rip),%xmm2
  movq   %xmm2,%r14
  mov    $0xe,%edi
  call   <DegtoRad@plt>
  movsd  %xmm0,0x50(%rsp)
  movq   %rbp,%xmm6
  mulsd  D171(%rip),%xmm6
  movsd  %xmm6,0x40(%rsp)
  mov    D104(%rip),%rbp
  jmp    L104
L148:
  movapd %xmm2,%xmm0
  mulsd  D171(%rip),%xmm0
  comisd %xmm0,%xmm1
  ja     L37
  movsd  %xmm1,0x8(%rsp)
  movsd  %xmm2,(%rsp)
L74:
  movsd  0x40(%rsp),%xmm6
  comisd 0x10(%rsp),%xmm6
  jb     L37
  movsd  0x8(%rsp),%xmm5
  movapd %xmm5,%xmm1
  mulsd  %xmm5,%xmm1
  movsd  (%rsp),%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm7,%xmm0
  addsd  %xmm1,%xmm0
  movsd  D91(%rip),%xmm1
  call   <pow@plt>
  movsd  D124(%rip),%xmm3
  divsd  %xmm0,%xmm3
  movsd  %xmm3,0x28(%rsp)
  movsd  %xmm0,0x20(%rsp)
  movapd %xmm0,%xmm1
  movq   %r15,%xmm0
  mov    %ebx,%edi
  call   <retard@plt>
  xorpd  D41(%rip),%xmm0
  movsd  0x8(%rsp),%xmm5
  movapd %xmm5,%xmm6
  mulsd  %xmm0,%xmm6
  movapd %xmm6,%xmm1
  movsd  0x20(%rsp),%xmm4
  divsd  %xmm4,%xmm1
  movsd  0x28(%rsp),%xmm3
  mulsd  %xmm3,%xmm1
  movsd  (%rsp),%xmm7
  mulsd  %xmm7,%xmm0
  divsd  %xmm4,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm7,%xmm0
  movapd %xmm1,%xmm2
  addsd  %xmm5,%xmm2
  movsd  0x38(%rsp),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  movsd  0x30(%rsp),%xmm2
  mulsd  %xmm3,%xmm2
  addsd  %xmm0,%xmm2
  addsd  %xmm2,%xmm7
  movapd %xmm7,%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  D91(%rip),%xmm0
  addsd  0x10(%rsp),%xmm0
  movsd  %xmm0,0x10(%rsp)
  addsd  %xmm1,%xmm5
  movapd %xmm5,%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  D91(%rip),%xmm0
  addsd  0x18(%rsp),%xmm0
  movsd  %xmm0,0x18(%rsp)
  pxor   %xmm6,%xmm6
  comisd %xmm1,%xmm6
  jbe    L148
  movsd  0x48(%rsp),%xmm6
  comisd %xmm0,%xmm6
  jbe    L148
  movsd  0x18(%rsp),%xmm6
  comisd 0x48(%rsp),%xmm6
  jbe    L78
  movsd  0x50(%rsp),%xmm6
  comisd D104(%rip),%xmm6
  ja     L60
L78:
  pxor   %xmm0,%xmm0
  movsd  0x50(%rsp),%xmm6
  comisd %xmm6,%xmm0
  jbe    L11
  movapd %xmm6,%xmm0
  xorpd  D41(%rip),%xmm0
  mulsd  D91(%rip),%xmm0
  movsd  %xmm0,0x50(%rsp)
  jmp    L11
L37:
  movsd  0x18(%rsp),%xmm6
  comisd 0x48(%rsp),%xmm6
  jbe    L129
  movsd  0x50(%rsp),%xmm6
  comisd D104(%rip),%xmm6
  jbe    L129
L60:
  movsd  0x50(%rsp),%xmm0
  xorpd  D41(%rip),%xmm0
  mulsd  D91(%rip),%xmm0
  movsd  %xmm0,0x50(%rsp)
L129:
  movsd  0x48(%rsp),%xmm6
  comisd 0x18(%rsp),%xmm6
  ja     L78
L11:
  movsd  0x50(%rsp),%xmm0
  call   <fabs@plt>
  mov    %rax,%r13
  movsd  D188(%rip),%xmm0
  call   <MOAtoRad@plt>
  mov    %rax,%r12
  mov    $0x2d,%edi
  call   <DegtoRad@plt>
  movq   %rbp,%xmm4
  comisd %xmm0,%xmm4
  ja     L33
  addsd  0x50(%rsp),%xmm4
  movq   %xmm4,%rbp
  cmp    %r12,%r13
  jl     L36
L104:
  lea    0x68(%rsp),%rdi
  lea    0x60(%rsp),%rsi
  movq   %rbp,%xmm0
  call   <sincos@plt>
  movsd  0x60(%rsp),%xmm0
  movsd  0x68(%rsp),%xmm1
  movsd  0x58(%rsp),%xmm6
  movapd %xmm6,%xmm4
  mulsd  %xmm1,%xmm4
  movsd  %xmm4,0x8(%rsp)
  mulsd  %xmm0,%xmm6
  movsd  %xmm6,(%rsp)
  mulsd  D95(%rip),%xmm1
  movsd  %xmm1,0x30(%rsp)
  mulsd  D95(%rip),%xmm0
  movsd  %xmm0,0x38(%rsp)
  mov    %r14,0x18(%rsp)
  pxor   %xmm6,%xmm6
  movsd  %xmm6,0x10(%rsp)
  jmp    L74
L33:
  movq   %rbp,%xmm6
  addsd  0x50(%rsp),%xmm6
  movq   %xmm6,%rbp
L36:
  movq   %rbp,%xmm0
  call   <RadtoDeg@plt>
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D41
datatype: f32[4]
name: extract_symbolic_data
arguments: tag: D144
datatype: f64
name: extract_symbolic_data
arguments: tag: D171
datatype: f32[2]
name: extract_symbolic_data
arguments: tag: D104
datatype: f32[4]
name: extract_symbolic_data
arguments: tag: D91
datatype: f64
name: extract_symbolic_data
arguments: tag: D124
datatype: f64
name: extract_symbolic_data
arguments: tag: D188
datatype: f64
name: extract_symbolic_data
arguments: tag: D95
datatype: byte[8]

tool: {"D41": [0.0,-0.0,0.0,0.0]}

tool: D144: 12

tool: {"D171": [0.0,2.125]}

tool: {"D104": [0.0,0.0,0.0,2.625]}

tool: D91: 0.5

tool: D124: 1

tool: D188: 0.01

tool: {"D95": [0x46,0xb6,0xf3,0xfd,0xd4,0x18,0x40,0xc0]}

assistant: ```c
double ZeroAngle(int DragFunction, double DragCoefficient, double Vi, double SightHeight, double ZeroRange, double yIntercept) {
  double t = 0;
  double dt = 1 / Vi;
  double y = -SightHeight / 12;
  double x = 0;
  double da;
  double v = 0, vx = 0, vy = 0;
  double vx1 = 0, vy1 = 0;
  double dv = 0, dvx = 0, dvy = 0;
  double Gx = 0, Gy = 0;
  double angle = 0;
  int quit = 0;
  da = DegtoRad(14);
  for (angle = 0; quit == 0; angle = angle + da) {
    vy = Vi * sin(angle);
    vx = Vi * cos(angle);
    Gx = (-32.194) * sin(angle);
    Gy = (-32.194) * cos(angle);
    for (t = 0, x = 0, y = -SightHeight / 12; x <= ZeroRange * 3; t = t + dt) {
      vy1 = vy;
      vx1 = vx;
      v = pow((pow(vx, 2) + pow(vy, 2)), 0.5);
      dt = 1 / v;
      dv = retard(DragFunction, DragCoefficient, v);
      dvy = -dv * vy / v * dt;
      dvx = -dv * vx / v * dt;
      vx = vx + dvx;
      vy = vy + dvy;
      vy = vy + dt * Gy;
      vx = vx + dt * Gx;
      x = x + dt * (vx + vx1) / 2;
      y = y + dt * (vy + vy1) / 2;
      if (vy < 0 && y < yIntercept) {
        break;
      }
      if (vy > 3 * vx) {
        break;
      }
    }
    if (y > yIntercept && da > 0) {
      da = -da / 2;
    }
    if (y < yIntercept && da < 0) {
      da = -da / 2;
    }
    if (fabs(da) < MOAtoRad(0.01))
      quit = 1;
    if (angle > DegtoRad(45))
      quit = 1;
  }
  return RadtoDeg(angle);
}
```