user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    -0xc000(%rsp),%r11
L125:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L125
  sub    $0x820,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0xc818(%rbp)
  jmp    L96
L12:
  movl   $0x0,-0xc814(%rbp)
  jmp    L144
L0:
  lea    -0xc810(%rbp),%rcx
  mov    -0xc814(%rbp),%eax
  movslq %eax,%rsi
  mov    -0xc818(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    %rsi,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %rax,%rsi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  addl   $0x1,-0xc814(%rbp)
L144:
  cmpl   $0x4f,-0xc814(%rbp)
  jle    L0
  addl   $0x1,-0xc818(%rbp)
L96:
  cmpl   $0x4f,-0xc818(%rbp)
  jle    L12
  movl   $0x4f,-0xc818(%rbp)
  jmp    L115
L110:
  cmpl   $0x4f,-0xc818(%rbp)
  jne    L57
  mov    -0xc818(%rbp),%eax
  cltq
  add    $0x18b0,%rax
  mov    -0xc810(%rbp,%rax,4),%eax
  mov    -0xc818(%rbp),%edx
  movslq %edx,%rdx
  add    $0x18b0,%rdx
  mov    %eax,-0x6410(%rbp,%rdx,4)
  jmp    L151
L57:
  mov    -0xc818(%rbp),%eax
  add    $0x1,%eax
  cltq
  add    $0x18b0,%rax
  mov    -0x6410(%rbp,%rax,4),%edx
  mov    -0xc818(%rbp),%eax
  cltq
  add    $0x18b0,%rax
  mov    -0xc810(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0xc818(%rbp),%eax
  cltq
  add    $0x18b0,%rax
  mov    %edx,-0x6410(%rbp,%rax,4)
L151:
  subl   $0x1,-0xc818(%rbp)
L115:
  cmpl   $0x0,-0xc818(%rbp)
  jns    L110
  movl   $0x4e,-0xc818(%rbp)
  jmp    L85
L124:
  movl   $0x4f,-0xc814(%rbp)
  jmp    L94
L153:
  cmpl   $0x4f,-0xc814(%rbp)
  jne    L51
  mov    -0xc814(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xc818(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    %rcx,%rax
  mov    -0xc810(%rbp,%rax,4),%ecx
  mov    -0xc818(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0xc814(%rbp),%eax
  movslq %eax,%rsi
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    %rsi,%rax
  mov    -0x6410(%rbp,%rax,4),%eax
  add    %eax,%ecx
  mov    -0xc814(%rbp),%eax
  movslq %eax,%rsi
  mov    -0xc818(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    %rsi,%rax
  mov    %ecx,-0x6410(%rbp,%rax,4)
  jmp    L91
L51:
  mov    -0xc814(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xc818(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    %rcx,%rax
  mov    -0xc810(%rbp,%rax,4),%esi
  mov    -0xc814(%rbp),%eax
  add    $0x1,%eax
  movslq %eax,%rcx
  mov    -0xc818(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    %rcx,%rax
  mov    -0x6410(%rbp,%rax,4),%edx
  mov    -0xc818(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0xc814(%rbp),%eax
  movslq %eax,%rdi
  movslq %ecx,%rcx
  mov    %rcx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  shl    $0x4,%rax
  add    %rdi,%rax
  mov    -0x6410(%rbp,%rax,4),%eax
  cmp    %eax,%edx
  cmovle %edx,%eax
  lea    (%rsi,%rax,1),%ecx
  mov    -0xc814(%rbp),%eax
  movslq %eax,%rsi
  mov    -0xc818(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    %rsi,%rax
  mov    %ecx,-0x6410(%rbp,%rax,4)
L91:
  subl   $0x1,-0xc814(%rbp)
L94:
  cmpl   $0x0,-0xc814(%rbp)
  jns    L153
  subl   $0x1,-0xc818(%rbp)
L85:
  cmpl   $0x0,-0xc818(%rbp)
  jns    L124
  mov    -0x6410(%rbp),%eax
  mov    %eax,%esi
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L108
  call   <__stack_chk_fail@plt>
L108:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D8
type_infered: string
name: unpack_data
arguments: label: D14
type_infered: string

tool: D8: %d

tool: D14: %d


assistant: ```c
int main(void) {
  int a[80][80];
  int dp[80][80];
  int i, j;
  for (i = 0; i < 80; i++)
    for (j = 0; j < 80; j++)
      scanf("%d", &a[i][j]);
  for (i = 79; i >= 0; i--) {
    if (i == 79)
      dp[79][i] = a[79][i];
    else
      dp[79][i] = dp[79][i + 1] + a[79][i];
  }
  for (i = 78; i >= 0; i--) {
    for (j = 79; j >= 0; j--) {
      if (j == 79)
        dp[i][j] = a[i][j] + dp[i + 1][j];
      else
        dp[i][j] = a[i][j] + (dp[i + 1][j] < dp[i][j + 1] ? dp[i + 1][j] : dp[i][j + 1]);
    }
  }
  printf("%d\n", dp[0][0]);
  return 0;
}
```