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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D112(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x58(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    %eax,-0x5c(%rbp)
  cmpl   $0x1,-0x5c(%rbp)
  je     L12
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L61
L12:
  lea    -0x50(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    %eax,-0x5c(%rbp)
  cmpl   $0x1,-0x5c(%rbp)
  je     L63
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L61
L63:
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    %eax,-0x5c(%rbp)
  cmpl   $0x1,-0x5c(%rbp)
  je     L79
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L61
L79:
  lea    -0x40(%rbp),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    %eax,-0x5c(%rbp)
  cmpl   $0x1,-0x5c(%rbp)
  je     L50
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L61
L50:
  movsd  -0x40(%rbp),%xmm1
  movsd  D142(%rip),%xmm0
  movapd %xmm1,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  -0x48(%rbp),%xmm1
  movsd  D142(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  lea    -0x18(%rbp),%r8
  lea    -0x20(%rbp),%rcx
  lea    -0x28(%rbp),%rdx
  lea    -0x30(%rbp),%rsi
  lea    -0x38(%rbp),%rdi
  movapd %xmm2,%xmm1
  movq   %rax,%xmm0
  call   <exactE@plt>
  lea    D153(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movsd  -0x28(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D137(%rip),%rax
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x10(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  lea    D103(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
L61:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L3
  call   <__stack_chk_fail@plt>
L3:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D112
datatype: f64
name: parse_data
arguments: tag: D158
datatype: string
name: parse_data
arguments: tag: D26
datatype: string
name: parse_data
arguments: tag: D162
datatype: string
name: parse_data
arguments: tag: D38
datatype: string
name: parse_data
arguments: tag: D18
datatype: string
name: parse_data
arguments: tag: D10
datatype: string
name: parse_data
arguments: tag: D54
datatype: string
name: parse_data
arguments: tag: D142
datatype: f64
name: parse_data
arguments: tag: D153
datatype: string
name: parse_data
arguments: tag: D137
datatype: string
name: parse_data
arguments: tag: D103
datatype: string

tool: D112: 31556926

tool: D158: Enter  t  and  r  separated by space (or newline)

tool: D26:     (in yrs and km, resp.; e.g. 15000 500):

tool: D162: %lf

tool: D38: ... input error; exiting

tool: D18: exact test E also requires cartesian location ...

tool: D10: Enter  x  and  y  separated by space 

tool: D54: (in km; e.g. 400 200):

tool: D142: 1000

tool: D153: Results for Test E:

tool: D137:     H = %12.6f (m)     M = %12.6f (m/a)    mu = %11.5e (m/(Pa s))


tool: D103:     u_b = %10.6f (m/a)   v_b = %10.6f (m/a)


assistant: ```c
int main() {
  const double SperA = 31556926.0;
  double year, r, x, y, HE, ME, muE, ubE, vbE;
  int scanret;
  printf("Enter  t  and  r  separated by space (or newline)\n");
  printf("    (in yrs and km, resp.; e.g. 15000 500):\n");
  scanret = scanf("%lf", &year);
  if (scanret != 1) {
    printf("... input error; exiting\n");
    return 1;
  }
  scanret = scanf("%lf", &r);
  if (scanret != 1) {
    printf("... input error; exiting\n");
    return 1;
  }
  printf("exact test E also requires cartesian location ...\n");
  printf("Enter  x  and  y  separated by space ");
  printf("(in km; e.g. 400 200):\n");
  scanret = scanf("%lf", &x);
  if (scanret != 1) {
    printf("... input error; exiting\n");
    return 1;
  }
  scanret = scanf("%lf", &y);
  if (scanret != 1) {
    printf("... input error; exiting\n");
    return 1;
  }
  exactE(x * 1000.0, y * 1000.0, &HE, &ME, &muE, &ubE, &vbE);
  printf("Results for Test E:\n");
  printf("    H = %12.6f (m)     M = %12.6f (m/a)    mu = %11.5e (m/(Pa s))\n", HE, ME * SperA, muE);
  printf("    u_b = %10.6f (m/a)   v_b = %10.6f (m/a)\n", ubE * SperA, vbE * SperA);
  return 0;
}
```