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

```asm
<longest_run_cdf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %esi,-0x48(%rbp)
  mov    $0x400,%edi
  call   <mpfr_set_default_prec@plt>
  mov    $0x400,%edi
  call   <mpfr_set_default_prec@plt>
  mov    -0x34(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x30(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x2c(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_init@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x44(%rbp),%ecx
  mov    -0x10(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_init_set_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%ecx
  mov    -0xc(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_init_set_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0xc(%rbp),%esi
  mov    -0x34(%rbp),%eax
  mov    %edx,%ecx
  mov    $0x1,%edx
  mov    %eax,%edi
  call   <mpfr_add_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%esi
  mov    -0x30(%rbp),%eax
  mov    %edx,%ecx
  mov    $0x1,%edx
  mov    %eax,%edi
  call   <mpfr_add_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%ecx
  mov    -0x2c(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_exp2@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x2c(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_sub@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x2c(%rbp),%esi
  mov    -0x2c(%rbp),%eax
  mov    %edx,%ecx
  mov    $0x2,%edx
  mov    %eax,%edi
  call   <mpfr_sub_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x34(%rbp),%esi
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_div@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_neg@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_exp@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%ecx
  mov    -0x24(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_exp2@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x24(%rbp),%esi
  mov    -0x24(%rbp),%eax
  mov    %edx,%ecx
  mov    $0x1,%edx
  mov    %eax,%edi
  call   <mpfr_sub_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <mpfr_exp2@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%esi
  mov    -0x1c(%rbp),%eax
  mov    %edx,%ecx
  mov    $0x2,%edx
  mov    %eax,%edi
  call   <mpfr_add_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x1c(%rbp),%eax
  mov    %edx,%ecx
  mov    $0x2,%edx
  mov    %eax,%edi
  call   <mpfr_div_ui@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x20(%rbp),%esi
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_sub@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x24(%rbp),%esi
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_div@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_mul@plt>
  mov    D151(%rip),%rax
  mov    (%rax),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <mpfr_get_d@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x30(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x2c(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <mpfr_clear@plt>
  movsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

assistant: ```c
double longest_run_cdf(unsigned int ui_n, unsigned int ui_r) {
  double answer;
  mpfr_set_default_prec(1024);
  mpfr_t n;
  mpfr_t r;
  mpfr_t topa;
  mpfr_t bottoma;
  mpfr_t first;
  mpfr_t topb;
  mpfr_t nplusone;
  mpfr_t bottomb;
  mpfr_t nplus2over2;
  mpfr_t second;
  mpfr_t mpfans;
  mpfr_set_default_prec(1024);
  mpfr_init(topa);
  mpfr_init(nplusone);
  mpfr_init(bottoma);
  mpfr_init(first);
  mpfr_init(topb);
  mpfr_init(bottomb);
  mpfr_init(nplus2over2);
  mpfr_init(second);
  mpfr_init(mpfans);
  mpfr_init_set_ui(n, ui_n, MPFR_RNDN);
  mpfr_init_set_ui(r, ui_r, MPFR_RNDN);
  mpfr_add_ui(topa, r, 1, MPFR_RNDN);
  mpfr_add_ui(nplusone, n, 1, MPFR_RNDN);
  mpfr_exp2(bottoma, nplusone, MPFR_RNDN);
  mpfr_sub(bottoma, bottoma, n, MPFR_RNDN);
  mpfr_sub_ui(bottoma, bottoma, 2, MPFR_RNDN);
  mpfr_div(first, topa, bottoma, MPFR_RNDN);
  mpfr_neg(first, first, MPFR_RNDN);
  mpfr_exp(first, first, MPFR_RNDN);
  mpfr_exp2(topb, nplusone, MPFR_RNDN);
  mpfr_sub_ui(topb, topb, 1, MPFR_RNDN);
  mpfr_exp2(bottomb, nplusone, MPFR_RNDN);
  mpfr_add_ui(nplus2over2, n, 2, MPFR_RNDN);
  mpfr_div_ui(nplus2over2, nplus2over2, 2, MPFR_RNDN);
  mpfr_sub(bottomb, bottomb, nplus2over2, MPFR_RNDN);
  mpfr_div(second, topb, bottomb, MPFR_RNDN);
  mpfr_mul(mpfans, first, second, MPFR_RNDN);
  answer = mpfr_get_d(mpfans, MPFR_RNDN);
  mpfr_clear(topa);
  mpfr_clear(nplusone);
  mpfr_clear(bottoma);
  mpfr_clear(first);
  mpfr_clear(topb);
  mpfr_clear(bottomb);
  mpfr_clear(nplus2over2);
  mpfr_clear(second);
  mpfr_clear(mpfans);
  mpfr_clear(n);
  mpfr_clear(r);
  return answer;
}
```