user: Converte this assembly snippet into its equivalent C code:

```asm
<disk_overlap>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1b0,%rsp
  mov    %rdi,-0x188(%rbp)
  movsd  %xmm0,-0x190(%rbp)
  mov    %rsi,-0x198(%rbp)
  mov    %rdx,-0x1a0(%rbp)
  movsd  %xmm1,-0x1a8(%rbp)
  movsd  %xmm2,-0x1b0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  -0x1a8(%rbp),%xmm0
  divsd  -0x190(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <asin@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x168(%rbp)
  movsd  -0x1b0(%rbp),%xmm0
  divsd  -0x190(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <asin@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x160(%rbp)
  movl   $0x0,-0x174(%rbp)
  jmp    L65
L52:
  mov    -0x174(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x198(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x174(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x188(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x174(%rbp),%eax
  cltq
  movsd  %xmm0,-0x150(%rbp,%rax,8)
  addl   $0x1,-0x174(%rbp)
L65:
  cmpl   $0x2,-0x174(%rbp)
  jle    L52
  lea    -0x150(%rbp),%rax
  mov    %rax,%rdi
  call   <normalize@plt>
  movl   $0x0,-0x174(%rbp)
  jmp    L56
L33:
  mov    -0x174(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x1a0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x174(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x188(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x174(%rbp),%eax
  cltq
  movsd  %xmm0,-0x130(%rbp,%rax,8)
  addl   $0x1,-0x174(%rbp)
L56:
  cmpl   $0x2,-0x174(%rbp)
  jle    L33
  lea    -0x130(%rbp),%rax
  mov    %rax,%rdi
  call   <normalize@plt>
  lea    -0x130(%rbp),%rdx
  lea    -0x150(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <dot_product@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x170(%rbp)
  movsd  D13(%rip),%xmm0
  comisd -0x170(%rbp),%xmm0
  jbe    L27
  movsd  D13(%rip),%xmm0
  movsd  %xmm0,-0x170(%rbp)
  jmp    L59
L27:
  movsd  -0x170(%rbp),%xmm0
  movsd  D28(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L59
  movsd  D28(%rip),%xmm0
  movsd  %xmm0,-0x170(%rbp)
L59:
  mov    -0x170(%rbp),%rax
  movq   %rax,%xmm0
  call   <acos@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x158(%rbp)
  movsd  -0x158(%rbp),%xmm1
  movsd  -0x160(%rbp),%xmm0
  mov    -0x168(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <informd@plt>
  movsd  -0x168(%rbp),%xmm0
  addsd  -0x160(%rbp),%xmm0
  comisd -0x158(%rbp),%xmm0
  setae  %al
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L38
  call   <__stack_chk_fail@plt>
L38:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D13
data_type: byte[8]
name: disassemble_data
arguments: tag: D28
data_type: f64
name: disassemble_data
arguments: tag: D2
data_type: string

tool: {"D13": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: D28: 1

tool: D2: angle1 = %8.3f; angle2 = %8.3f; angle12 = %8.3f

assistant: ```c
int disk_overlap(double sphere_center[3], double rad, double disk1_center[3], double disk2_center[3], double rad1, double rad2) {
  int k;
  double angle1, angle2;
  double axis1[3], axis2[3];
  double angle12;
  double dot12;
  char message[255];
  angle1 = asin(rad1 / rad);
  angle2 = asin(rad2 / rad);
  for (k = 0; k < 3; k++)
    axis1[k] = (disk1_center[k] - sphere_center[k]);
  normalize(axis1);
  for (k = 0; k < 3; k++)
    axis2[k] = (disk2_center[k] - sphere_center[k]);
  normalize(axis2);
  dot12 = dot_product(axis1, axis2);
  if (dot12 < -1.0)
    dot12 = -1.0;
  else if (dot12 > 1.0)
    dot12 = 1.0;
  angle12 = acos(dot12);
  sprintf(message, "angle1 = %8.3f; angle2 = %8.3f; angle12 = %8.3f", angle1, angle2, angle12);
  informd(message);
  return (angle1 + angle2 >= angle12);
}
```