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

```asm
<solve_matrix>:
  endbr64
  push   %r15
  mov    %rsi,%r15
  push   %r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x1(%rdi),%ebx
  sub    $0x68,%rsp
  mov    %edi,0x40(%rsp)
  mov    %ebx,0x44(%rsp)
  test   %ebx,%ebx
  jle    L50
  test   %edi,%edi
  jle    L270
  mov    %edi,0x20(%rsp)
  xor    %r14d,%r14d
  pxor   %xmm7,%xmm7
  mov    %rdx,%rbx
  movq   $0x1,0x38(%rsp)
  mov    %r14,%r13
  movsd  %xmm7,0x8(%rsp)
  nopl   0x0(%rax,%rax,1)
L96:
  mov    0x40(%rsp),%esi
  mov    0x20(%rsp),%edx
  mov    0x38(%rsp),%rcx
  mov    %esi,%eax
  sub    %edx,%eax
  mov    %ecx,0x34(%rsp)
  mov    %eax,0x48(%rsp)
  mov    %eax,0x30(%rsp)
  lea    0x0(%r13,%r15,1),%rax
  cmp    %ecx,%esi
  jle    L227
  lea    -0x2(%rdx),%eax
  lea    -0x1(%rcx),%rsi
  mov    %rbx,0x50(%rsp)
  mov    %rcx,%rbp
  lea    0x1(%rcx,%rax,1),%rax
  mov    %rsi,0x58(%rsp)
  mov    %rax,0x28(%rsp)
  mov    %r15,%rax
  mov    %r13,%r15
  mov    %rax,%r13
  nopl   0x0(%rax)
L409:
  lea    0x0(,%rbp,8),%r14
  lea    0x0(%r13,%r14,1),%rax
  mov    %rax,0x18(%rsp)
  mov    0x0(%r13,%rbp,8),%rax
  movsd  (%rax,%r15,1),%xmm1
  movslq 0x30(%rsp),%rax
  lea    0x0(,%rax,8),%r12
  movsd  %xmm1,0x10(%rsp)
  lea    0x0(%r13,%r12,1),%rbx
  mov    (%rbx),%rdi
  cvttsd2si (%rdi,%r15,1),%edi
  call   <fabs@plt>
  movsd  0x10(%rsp),%xmm1
  xor    %edi,%edi
  comisd %xmm0,%xmm1
  seta   %dil
  call   <fabs@plt>
  ucomisd 0x8(%rsp),%xmm0
  jp     L434
  je     L81
L434:
  mov    %ebp,0x30(%rsp)
  mov    0x18(%rsp),%rbx
  mov    %r14,%r12
L81:
  add    $0x1,%rbp
  cmp    0x28(%rsp),%rbp
  jne    L409
  mov    %rbx,%r14
  mov    %r13,%rax
  mov    %r15,%r13
  mov    0x50(%rsp),%rbx
  mov    (%r14),%rsi
  mov    %rax,%r15
  mov    (%rax,%r13,1),%rax
  lea    0x8(%r13),%r9
  mov    0x48(%rsp),%r11d
  lea    (%rbx,%r12,1),%rdx
  movsd  (%rbx,%r13,1),%xmm0
  mov    %r9,0x10(%rsp)
  mov    %rsi,(%r15,%r13,1)
  mov    0x20(%rsp),%esi
  mov    %rax,(%r14)
  movsd  (%rdx),%xmm1
  mov    %esi,%eax
  and    $0xfffffffe,%esi
  mov    (%r15,%r13,1),%r12
  add    %esi,%r11d
  shr    %eax
  movsd  %xmm1,(%rbx,%r13,1)
  mov    %esi,%r10d
  lea    -0x1(%rax),%ebp
  movslq %r11d,%r11
  lea    (%r12,%r9,1),%r8
  mov    0x38(%rsp),%rsi
  add    $0x1,%rbp
  shl    $0x3,%r11
  movsd  %xmm0,(%rdx)
  lea    (%r12,%r13,1),%rdi
  mov    0x40(%rsp),%r9d
  shl    $0x4,%rbp
  lea    (%r12,%r11,1),%r14
  jmp    L449
  nopl   (%rax)
L463:
  add    $0x1,%rsi
  cmp    %esi,%r9d
  jle    L46
L449:
  mov    (%r15,%rsi,8),%rdx
  lea    (%rdx,%r13,1),%rcx
  movsd  (%rcx),%xmm0
  divsd  (%rdi),%xmm0
  ucomisd 0x8(%rsp),%xmm0
  jp     L118
  je     L463
L118:
  cmp    %r8,%rcx
  je     L334
  cmpl   $0x1,0x20(%rsp)
  je     L334
  movapd %xmm0,%xmm3
  xor    %eax,%eax
  unpcklpd %xmm3,%xmm3
  nopl   (%rax)
L274:
  movupd (%rdi,%rax,1),%xmm2
  movupd (%rcx,%rax,1),%xmm1
  mulpd  %xmm3,%xmm2
  subpd  %xmm2,%xmm1
  movups %xmm1,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %rbp,%rax
  jne    L274
  cmp    0x20(%rsp),%r10d
  je     L194
  movsd  (%r14),%xmm2
  add    %r11,%rdx
  movsd  (%rdx),%xmm1
  mulsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movsd  %xmm1,(%rdx)
L194:
  mulsd  (%rbx,%r13,1),%xmm0
  movsd  (%rbx,%rsi,8),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,(%rbx,%rsi,8)
  add    $0x1,%rsi
  cmp    %esi,%r9d
  jg     L449
L46:
  mov    0x10(%rsp),%r9
L344:
  subl   $0x1,0x20(%rsp)
  mov    0x20(%rsp),%eax
  mov    %r9,%r13
  addq   $0x1,0x38(%rsp)
  cmp    $0x1,%eax
  jne    L96
  mov    0x44(%rsp),%esi
  mov    %rbx,%r13
  cmp    %esi,0x34(%rsp)
  jge    L169
L271:
  movslq 0x34(%rsp),%rax
  mov    %rax,0x28(%rsp)
  mov    %r13,%rax
  mov    %r15,%r13
  mov    %rax,%r15
  nopl   0x0(%rax,%rax,1)
L268:
  mov    0x34(%rsp),%esi
  mov    0x28(%rsp),%rcx
  mov    %esi,0x30(%rsp)
  lea    0x0(,%rcx,8),%rbp
  add    $0x1,%esi
  mov    %esi,0x34(%rsp)
  lea    0x0(%r13,%rbp,1),%rax
  cmp    %esi,0x40(%rsp)
  jle    L414
  mov    0x44(%rsp),%edx
  movslq %esi,%rbx
  mov    %r15,0x48(%rsp)
  mov    %rbp,%r15
  mov    %rbx,0x38(%rsp)
  sub    %ebx,%edx
  lea    0x2(%rcx,%rdx,1),%rax
  mov    %rax,0x20(%rsp)
  nopl   0x0(%rax,%rax,1)
L115:
  lea    0x0(,%rbx,8),%r14
  lea    0x0(%r13,%r14,1),%rax
  mov    %rax,0x18(%rsp)
  mov    0x0(%r13,%rbx,8),%rax
  movsd  (%rax,%r15,1),%xmm1
  movslq 0x30(%rsp),%rax
  lea    0x0(,%rax,8),%rbp
  movsd  %xmm1,0x10(%rsp)
  lea    0x0(%r13,%rbp,1),%r12
  mov    (%r12),%rdi
  cvttsd2si (%rdi,%r15,1),%edi
  call   <fabs@plt>
  movsd  0x10(%rsp),%xmm1
  xor    %edi,%edi
  comisd %xmm0,%xmm1
  seta   %dil
  call   <fabs@plt>
  ucomisd 0x8(%rsp),%xmm0
  jp     L352
  je     L100
L352:
  mov    %ebx,0x30(%rsp)
  mov    0x18(%rsp),%r12
  mov    %r14,%rbp
L100:
  add    $0x1,%rbx
  cmp    0x20(%rsp),%rbx
  jne    L115
  mov    0x28(%rsp),%rsi
  mov    %r12,%r14
  mov    %rbp,%r12
  mov    %r15,%rbp
  mov    0x48(%rsp),%r15
  mov    (%r14),%rdi
  mov    0x0(%r13,%rsi,8),%rax
  mov    0x40(%rsp),%ecx
  lea    (%r15,%r12,1),%rdx
  mov    %rdi,0x0(%r13,%rsi,8)
  movsd  (%r15,%rsi,8),%xmm0
  mov    %rax,(%r14)
  movsd  (%rdx),%xmm1
  mov    0x0(%r13,%rsi,8),%rdi
  mov    0x38(%rsp),%rax
  movsd  %xmm1,(%r15,%rsi,8)
  add    %rbp,%rdi
  movsd  %xmm0,(%rdx)
  jmp    L269
  nopl   0x0(%rax,%rax,1)
L9:
  add    $0x1,%rax
  cmp    %eax,%ecx
  jle    L57
L269:
  mov    0x0(%r13,%rax,8),%rdx
  movsd  (%rdx,%rbp,1),%xmm0
  divsd  (%rdi),%xmm0
  ucomisd 0x8(%rsp),%xmm0
  jp     L28
  je     L9
L28:
  mulsd  (%r15,%rsi,8),%xmm0
  movsd  (%r15,%rax,8),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,(%r15,%rax,8)
  add    $0x1,%rax
  cmp    %eax,%ecx
  jg     L269
L57:
  addq   $0x1,0x28(%rsp)
  mov    0x34(%rsp),%ebx
  cmp    %ebx,0x44(%rsp)
  jg     L268
L304:
  mov    %r15,%rax
  mov    %r13,%r15
  mov    %rax,%r13
L169:
  mov    0x40(%rsp),%esi
  movslq 0x44(%rsp),%rdi
  xor    %r10d,%r10d
  lea    0x10(%r13),%r11
  movsd  D18(%rip),%xmm4
  lea    0x8(%r13),%rbx
  pxor   %xmm3,%xmm3
  mov    %esi,%r9d
  shl    $0x3,%rdi
  cmp    %r9d,%esi
  jle    L246
  nopl   0x0(%rax,%rax,1)
L77:
  mov    (%r15,%rdi,1),%rdx
  lea    (%r11,%rdi,1),%rax
  lea    0x8(%rdx,%rdi,1),%rcx
  cmp    %rax,%rcx
  je     L182
  lea    -0x1(%r10),%eax
  cmp    $0x1,%eax
  jbe    L182
  mov    %r10d,%r8d
  lea    (%rbx,%rdi,1),%rbp
  pxor   %xmm0,%xmm0
  xor    %eax,%eax
  shr    %r8d
  shl    $0x4,%r8
  nopw   0x0(%rax,%rax,1)
L460:
  movupd 0x0(%rbp,%rax,1),%xmm1
  movupd (%rcx,%rax,1),%xmm5
  movups %xmm3,(%rcx,%rax,1)
  add    $0x10,%rax
  mulpd  %xmm5,%xmm1
  addsd  %xmm1,%xmm0
  unpckhpd %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  cmp    %r8,%rax
  jne    L460
  mov    %r10d,%ecx
  and    $0xfffffffe,%ecx
  lea    (%rcx,%r9,1),%eax
  cmp    %r10d,%ecx
  je     L438
  cltq
  lea    (%rdx,%rax,8),%rcx
  movsd  0x0(%r13,%rax,8),%xmm1
  mulsd  (%rcx),%xmm1
  movq   $0x0,(%rcx)
  addsd  %xmm1,%xmm0
L438:
  add    %rdi,%rdx
  movsd  (%rdx),%xmm2
  ucomisd 0x8(%rsp),%xmm2
  jp     L133
  je     L479
L133:
  movsd  0x0(%r13,%rdi,1),%xmm1
  add    $0x1,%r10d
  lea    -0x1(%r9),%eax
  subsd  %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  %xmm1,0x0(%r13,%rdi,1)
  sub    $0x8,%rdi
  sub    $0x2,%r9d
  movsd  %xmm4,(%rdx)
  js     L291
  mov    %eax,%r9d
  cmp    %r9d,%esi
  jg     L77
L246:
  mov    (%r15,%rdi,1),%rdx
  pxor   %xmm0,%xmm0
  jmp    L438
  xchg   %ax,%ax
L334:
  mov    0x58(%rsp),%rax
  nopl   (%rax)
L318:
  movsd  (%r12,%rax,8),%xmm2
  movsd  (%rdx,%rax,8),%xmm1
  mulsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movsd  %xmm1,(%rdx,%rax,8)
  add    $0x1,%rax
  cmp    %eax,%r9d
  jg     L318
  jmp    L194
L182:
  movslq %r9d,%rax
  pxor   %xmm0,%xmm0
  nopl   (%rax)
L371:
  movsd  (%rdx,%rax,8),%xmm1
  mulsd  0x0(%r13,%rax,8),%xmm1
  movq   $0x0,(%rdx,%rax,8)
  add    $0x1,%rax
  addsd  %xmm1,%xmm0
  cmp    %eax,%esi
  jg     L371
  jmp    L438
L227:
  mov    (%r15,%r13,1),%rdx
  mov    (%rax),%rcx
  lea    0x8(%r13),%r9
  mov    %rcx,(%r15,%r13,1)
  mov    %rdx,(%rax)
  jmp    L344
L270:
  pxor   %xmm7,%xmm7
  movl   $0x0,0x34(%rsp)
  movsd  %xmm7,0x8(%rsp)
  jmp    L271
L414:
  lea    (%r15,%rbp,1),%rsi
  mov    0x0(%r13,%rcx,8),%rdx
  mov    (%rax),%rdi
  movsd  (%r15,%rcx,8),%xmm0
  movsd  (%rsi),%xmm1
  mov    %rdi,0x0(%r13,%rcx,8)
  mov    0x34(%rsp),%ebx
  mov    %rdx,(%rax)
  addq   $0x1,0x28(%rsp)
  movsd  %xmm1,(%r15,%rcx,8)
  movsd  %xmm0,(%rsi)
  cmp    %ebx,0x44(%rsp)
  jg     L268
  jmp    L304
L291:
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L479:
  movsd  0x8(%rsp),%xmm7
  ucomisd 0x0(%r13,%rdi,1),%xmm7
  jp     L355
  lea    D29(%rip),%rdi
  je     L389
L355:
  lea    D17(%rip),%rdi
L389:
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1060 <printf@plt>
L50:
  jne    L291
  pxor   %xmm7,%xmm7
  movsd  %xmm7,0x8(%rsp)
  jmp    L169
```

tool_calls: name: unpack_data
arguments: data_label: D18
type_guessed: f32[2]
name: unpack_data
arguments: data_label: D29
type_guessed: string
name: unpack_data
arguments: data_label: D17
type_guessed: string

tool: {"D18": [0.0,1.875]}

tool: D29: Equations are underconstrained.


tool: D17: Equations are inconsistent.


assistant: ```c
void solve_matrix(int n, double **a_s, double *b_s) {
  int DEBUG = 0;
  int i;
  if (DEBUG)
    print_matrix(n, a_s, b_s);
  for (i = 0; i < n - 1; i++) {
    int max = i;
    int i2;
    for (i2 = i + 1; i2 < n; i2++) {
      if (fabs(a_s[i2][i] > fabs(a_s[max][i])))
        max = i2;
    }
    {
      double *t, tt;
      t = a_s[i];
      a_s[i] = a_s[max];
      a_s[max] = t;
      tt = b_s[i];
      b_s[i] = b_s[max];
      b_s[max] = tt;
    }
    for (i2 = i + 1; i2 < n; i2++) {
      int j;
      double r = a_s[i2][i] / a_s[i][i];
      if (r == 0)
        continue;
      for (j = i; j < n; j++) {
        a_s[i2][j] -= a_s[i][j] * r;
      }
      b_s[i2] -= b_s[i] * r;
    }
  }
  if (DEBUG)
    print_matrix(n, a_s, b_s);
  for (i = n - 1; i >= 0; i--) {
    int j;
    double sum = 0;
    for (j = i + 1; j < n; j++) {
      sum += b_s[j] * a_s[i][j];
      a_s[i][j] = 0;
    }
    if (a_s[i][i] == 0) {
      if (b_s[i] == 0) {
        printf("Equations are underconstrained.\n");
        break;
      } else {
        printf("Equations are inconsistent.\n");
        break;
      }
    }
    b_s[i] = (b_s[i] - sum) / a_s[i][i];
    a_s[i][i] = 1;
  }
  if (DEBUG)
    print_matrix(n, a_s, b_s);
}
```