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

```asm
<foo>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  movss  0x48(%rsp),%xmm3
  movss  0x20(%rsp),%xmm4
  lea    0x20(%rsp),%rbp
  lea    0x4c(%rsp),%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  movss  0x24(%rsp),%xmm5
  movss  0x28(%rsp),%xmm6
  movss  0x2c(%rsp),%xmm7
  movd   %xmm3,%r13d
  movd   %xmm4,%r14d
  movss  0x30(%rsp),%xmm3
  movss  0x34(%rsp),%xmm4
  movd   %xmm5,%r15d
  movd   %xmm6,%r12d
  movss  0x38(%rsp),%xmm5
  movss  0x3c(%rsp),%xmm6
  movss  %xmm7,0x4(%rsp)
  movss  0x40(%rsp),%xmm7
  movss  %xmm3,0x8(%rsp)
  movss  0x44(%rsp),%xmm3
  movss  %xmm4,0xc(%rsp)
  movss  %xmm5,0x10(%rsp)
  movss  %xmm6,0x14(%rsp)
  movss  %xmm7,0x18(%rsp)
  movss  %xmm3,0x1c(%rsp)
  jmp    L127
  nopl   0x0(%rax)
L352:
  movd   %r15d,%xmm1
  ucomiss 0x4(%rbp),%xmm1
  jp     L134
  je     L217
L134:
  movd   %r12d,%xmm2
  ucomiss 0x8(%rbp),%xmm2
  jp     L57
  je     L286
L57:
  movss  0x4(%rsp),%xmm3
  ucomiss 0xc(%rbp),%xmm3
  jp     L160
  je     L282
L160:
  movss  0x8(%rsp),%xmm4
  ucomiss 0x10(%rbp),%xmm4
  jp     L161
  je     L316
L161:
  movss  0xc(%rsp),%xmm5
  ucomiss 0x14(%rbp),%xmm5
  jp     L259
  je     L125
L259:
  movss  0x10(%rsp),%xmm6
  ucomiss 0x18(%rbp),%xmm6
  jp     L184
  je     L92
L184:
  movss  0x14(%rsp),%xmm7
  ucomiss 0x1c(%rbp),%xmm7
  jp     L61
  je     L201
L61:
  movss  0x18(%rsp),%xmm0
  ucomiss 0x20(%rbp),%xmm0
  jp     L293
  je     L333
L293:
  movss  0x1c(%rsp),%xmm1
  ucomiss 0x24(%rbp),%xmm1
  jp     L180
  je     L28
L180:
  movd   %r13d,%xmm2
  ucomiss 0x28(%rbp),%xmm2
  jp     L192
  je     L249
L192:
  add    $0x4,%rbp
  cmp    %rbp,%rbx
  je     L226
L127:
  movd   %r14d,%xmm0
  ucomiss 0x0(%rbp),%xmm0
  jp     L352
  jne    L352
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L352
  nop
L249:
  xor    %eax,%eax
  add    $0x4,%rbp
  call   <_gfortran_abort@plt>
  cmp    %rbp,%rbx
  jne    L127
L226:
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L317
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L333:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L293
  nopl   0x0(%rax)
L28:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L180
  nopl   0x0(%rax)
L316:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L161
  nopl   0x0(%rax)
L125:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L259
  nopl   0x0(%rax)
L92:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L184
  nopl   0x0(%rax)
L201:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L61
  nopl   0x0(%rax)
L286:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L57
  nopl   0x0(%rax)
L282:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L160
  nopl   0x0(%rax)
L217:
  xor    %eax,%eax
  call   <_gfortran_abort@plt>
  jmp    L134
L317:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void foo(void) {
  int i, m;
  float xa[21];
  m = 0;
  while (1) {
    i = 0;
    while (1) {
      if (xa[(long int)i] == xa[(long int)(i + m)])
        _gfortran_abort();
      if (i == 10)
        break;
      i++;
    }
    if (m == 10)
      break;
    m++;
  }
}
```