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

```asm
<rtcp_interval>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %esi,-0x48(%rbp)
  movsd  %xmm0,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  movsd  %xmm1,-0x60(%rbp)
  mov    %ecx,-0x58(%rbp)
  movsd  D27(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D51(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D0(%rip),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  D21(%rip),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  cmpl   $0x0,-0x58(%rbp)
  je     L33
  movsd  -0x28(%rbp),%xmm0
  movsd  D50(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L33:
  mov    -0x44(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  cmpl   $0x0,-0x48(%rbp)
  jle    L44
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x48(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x44(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L44
  cmpl   $0x0,-0x54(%rbp)
  je     L36
  movsd  -0x50(%rbp),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x48(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  jmp    L44
L36:
  movsd  -0x50(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x48(%rbp),%eax
  sub    %eax,-0x34(%rbp)
L44:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x34(%rbp),%xmm0
  mulsd  -0x60(%rbp),%xmm0
  divsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x28(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  jbe    L51
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
L51:
  mov    $0x0,%eax
  call   <drand30@plt>
  movsd  D46(%rip),%xmm1
  addsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  divsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D27
type_guessed: f64
name: disassemble_data
arguments: data_label: D51
type_guessed: f64
name: disassemble_data
arguments: data_label: D0
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D21
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D50
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D46
type_guessed: f64

tool: D27: 5

tool: D51: 0.25

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

tool: {"D21": [0x20,0xef,0x55,0x2b,0x13,0x7e,0xf3,0x3f]}

tool: {"D50": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: D46: 0.5

assistant: ```c
double rtcp_interval(int members, int senders, double rtcp_bw, int we_sent, double avg_rtcp_size, int initial) {
  double const RTCP_MIN_TIME = 5.;
  double const RTCP_SENDER_BW_FRACTION = 0.25;
  double const RTCP_RCVR_BW_FRACTION = (1 - RTCP_SENDER_BW_FRACTION);
  double const COMPENSATION = 2.71828 - 1.5;
  double t;
  double rtcp_min_time = RTCP_MIN_TIME;
  int n;
  if (initial) {
    rtcp_min_time /= 2;
  }
  n = members;
  if (senders > 0 && senders < members * RTCP_SENDER_BW_FRACTION) {
    if (we_sent) {
      rtcp_bw *= RTCP_SENDER_BW_FRACTION;
      n = senders;
    } else {
      rtcp_bw *= RTCP_RCVR_BW_FRACTION;
      n -= senders;
    }
  }
  t = avg_rtcp_size * n / rtcp_bw;
  if (t < rtcp_min_time)
    t = rtcp_min_time;
  t = t * (drand30() + 0.5);
  t = t / COMPENSATION;
  return t;
}
```