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

```asm
<get_minimal>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %edi,%ebx
  mov    %esi,%ebp
  mov    %edx,0x10(%rsp)
  mov    %ecx,0x14(%rsp)
  mov    %r8,0x18(%rsp)
  mov    %r9,%r12
  movslq %ecx,%r15
  test   %edi,%edi
  jle    L17
  lea    -0x1(%rdi),%esi
  movslq %esi,%rdx
  imul   %r15,%rdx
  movslq %ebp,%rax
  shl    $0x2,%rax
  lea    (%rax,%rdx,4),%rax
  mov    $0x80,%r14d
  mov    $0x7f,%edx
  cmpl   $0x0,(%r9,%rax,1)
  jne    L134
  sub    $0x8,%rsp
  push   %r8
  mov    0x24(%rsp),%r9d
  mov    0x20(%rsp),%r8d
  mov    %ebp,%ecx
  mov    %esi,%edx
  mov    %ebp,%esi
  call   <w@plt>
  mov    %rax,%rdx
  add    $0x10,%rsp
  mov    %rax,%r14
  jmp    L134
L17:
  mov    $0x80,%r14d
  mov    $0x7f,%edx
L134:
  mov    0x10(%rsp),%eax
  sub    $0x1,%eax
  mov    $0x80,%r13d
  cmp    %ebx,%eax
  jle    L139
  lea    0x1(%rbx),%esi
  movslq %esi,%rcx
  imul   %r15,%rcx
  movslq %ebp,%rax
  shl    $0x2,%rax
  lea    (%rax,%rcx,4),%rax
  cmpl   $0x0,(%r12,%rax,1)
  je     L7
L139:
  movq   $0x80,0x8(%rsp)
  test   %ebp,%ebp
  jle    L186
  lea    -0x1(%rbp),%esi
  movslq %ebx,%rcx
  imul   %r15,%rcx
  movslq %esi,%rax
  shl    $0x2,%rax
  lea    (%rax,%rcx,4),%rax
  cmpl   $0x0,(%r12,%rax,1)
  je     L128
L186:
  mov    0x14(%rsp),%eax
  sub    $0x1,%eax
  mov    $0x80,%ecx
  cmp    %ebp,%eax
  jle    L49
  lea    0x1(%rbp),%esi
  movslq %ebx,%rcx
  imul   %r15,%rcx
  movslq %esi,%rax
  shl    $0x2,%rax
  lea    (%rax,%rcx,4),%rax
  mov    $0x80,%ecx
  cmpl   $0x0,(%r12,%rax,1)
  je     L70
L49:
  cmp    %r13,%r14
  mov    %r13,%rax
  cmovle %r14,%rax
  mov    0x8(%rsp),%rdi
  cmp    %rdi,%rax
  cmovg  %rdi,%rax
  cmp    %rdx,%rax
  cmovg  %rdx,%rax
  cmp    %rcx,%rax
  mov    %rcx,%rdx
  cmovle %rax,%rdx
  cmp    %r14,%rdx
  je     L84
  cmp    %r13,%rdx
  je     L52
  cmp    0x8(%rsp),%rdx
  je     L78
  cmp    %rcx,%rax
  jl     L28
  movslq %ebx,%rbx
  mov    %rbx,D46(%rip)
  add    $0x1,%ebp
  movslq %ebp,%rbp
  mov    %rbp,D68(%rip)
  jmp    L28
L7:
  sub    $0x8,%rsp
  push   0x20(%rsp)
  mov    0x24(%rsp),%r9d
  mov    0x20(%rsp),%r8d
  mov    %ebp,%ecx
  mov    %esi,%edx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <w@plt>
  mov    %rax,%rdx
  add    $0x10,%rsp
  mov    %rax,%r13
  jmp    L139
L128:
  sub    $0x8,%rsp
  push   0x20(%rsp)
  mov    0x24(%rsp),%r9d
  mov    0x20(%rsp),%r8d
  mov    %esi,%ecx
  mov    %ebx,%edx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <w@plt>
  mov    %rax,%rdx
  add    $0x10,%rsp
  mov    %rax,0x8(%rsp)
  jmp    L186
L70:
  sub    $0x8,%rsp
  push   0x20(%rsp)
  mov    0x24(%rsp),%r9d
  mov    0x20(%rsp),%r8d
  mov    %esi,%ecx
  mov    %ebx,%edx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <w@plt>
  mov    %rax,%rdx
  add    $0x10,%rsp
  mov    %rax,%rcx
  jmp    L49
L84:
  sub    $0x1,%ebx
  movslq %ebx,%rbx
  mov    %rbx,D75(%rip)
  movslq %ebp,%rbp
  mov    %rbp,D75(%rip)
L28:
  mov    %rdx,D75(%rip)
  lea    D75(%rip),%rax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L52:
  add    $0x1,%ebx
  movslq %ebx,%rbx
  mov    %rbx,D13(%rip)
  movslq %ebp,%rbp
  mov    %rbp,D13(%rip)
  jmp    L28
L78:
  movslq %ebx,%rbx
  mov    %rbx,D13(%rip)
  sub    $0x1,%ebp
  movslq %ebp,%rbp
  mov    %rbp,D13(%rip)
  jmp    L28
```

assistant: ```c
long *get_minimal(int row, int col, int m, int n, long tiles[m][n], bool S[m][n]) {
  static long coord[3] = {-1, -1, LONG_MAX};
  long min = LONG_MAX - 1;
  long up = LONG_MAX, down = LONG_MAX, left = LONG_MAX, rigth = LONG_MAX;
  if (row > 0 && !S[row - 1][col]) {
    up = w(row, col, row - 1, col, m, n, tiles);
    min = up;
  }
  if (row < m - 1 && !S[row + 1][col]) {
    down = w(row, col, row + 1, col, m, n, tiles);
    min = down;
  }
  if (col > 0 && !S[row][col - 1]) {
    left = w(row, col, row, col - 1, m, n, tiles);
    min = left;
  }
  if (col < n - 1 && !S[row][col + 1]) {
    rigth = w(row, col, row, col + 1, m, n, tiles);
    min = rigth;
  }
  if (up < min)
    min = up;
  if (down < min)
    min = down;
  if (left < min)
    min = left;
  if (rigth < min)
    min = rigth;
  if (up == min) {
    coord[0] = row - 1;
    coord[1] = col;
  } else if (down == min) {
    coord[0] = row + 1;
    coord[1] = col;
  } else if (left == min) {
    coord[0] = row;
    coord[1] = col - 1;
  } else if (rigth == min) {
    coord[0] = row;
    coord[1] = col + 1;
  }
  coord[2] = min;
  return coord;
}
```