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

```asm
<symmetric>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x340,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x33c(%rbp),%rdx
  lea    -0x340(%rbp),%rax
  mov    %rax,%rsi
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movl   $0x0,-0x338(%rbp)
  jmp    L71
L50:
  movl   $0x0,-0x334(%rbp)
  jmp    L186
L14:
  lea    -0x330(%rbp),%rcx
  mov    -0x334(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rsi,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  addl   $0x1,-0x334(%rbp)
L186:
  mov    -0x33c(%rbp),%eax
  cmp    %eax,-0x334(%rbp)
  jl     L14
  addl   $0x1,-0x338(%rbp)
L71:
  mov    -0x340(%rbp),%eax
  cmp    %eax,-0x338(%rbp)
  jl     L50
  movl   $0x0,-0x338(%rbp)
  jmp    L33
L45:
  movl   $0x0,-0x334(%rbp)
  jmp    L52
L61:
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x330(%rbp,%rax,4),%edx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    %rcx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  add    %rax,%rax
  add    %rsi,%rax
  mov    %edx,-0x1a0(%rbp,%rax,4)
  addl   $0x1,-0x334(%rbp)
L52:
  mov    -0x33c(%rbp),%eax
  cmp    %eax,-0x334(%rbp)
  jl     L61
  addl   $0x1,-0x338(%rbp)
L33:
  mov    -0x340(%rbp),%eax
  cmp    %eax,-0x338(%rbp)
  jl     L45
  mov    -0x340(%rbp),%edx
  mov    -0x33c(%rbp),%eax
  cmp    %eax,%edx
  jne    L40
  movl   $0x0,-0x338(%rbp)
  jmp    L101
L29:
  movl   $0x0,-0x334(%rbp)
  jmp    L183
L56:
  mov    -0x334(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x330(%rbp,%rax,4),%ecx
  mov    -0x334(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x338(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rsi,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  cmp    %eax,%ecx
  jne    L24
  addl   $0x1,-0x334(%rbp)
L183:
  mov    -0x340(%rbp),%eax
  cmp    %eax,-0x334(%rbp)
  jl     L56
  jmp    L110
L24:
  nop
L110:
  mov    -0x340(%rbp),%eax
  cmp    %eax,-0x334(%rbp)
  jne    L63
  addl   $0x1,-0x338(%rbp)
L101:
  mov    -0x340(%rbp),%eax
  cmp    %eax,-0x338(%rbp)
  jl     L29
  jmp    L60
L63:
  nop
L60:
  mov    -0x340(%rbp),%eax
  cmp    %eax,-0x338(%rbp)
  jne    L117
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L117
L40:
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L117:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L146
  call   <__stack_chk_fail@plt>
L146:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D4
datatype: string
name: parse_data
arguments: label: D36
datatype: string
name: parse_data
arguments: label: D10
datatype: string
name: parse_data
arguments: label: D43
datatype: string
name: parse_data
arguments: label: D31
datatype: string
name: parse_data
arguments: label: D5
datatype: string

tool: D4: Enter the number of rows and columns of matrix


tool: D36: %d%d

tool: D10: Enter the elements of matrix


tool: D43: %d

tool: D31: Symmetric matrix.


tool: D5: Not a symmetric matrix.


assistant: ```c
void symmetric() {
  int m, n, c, d, matrix[10][10], transpose[10][10];
  printf("Enter the number of rows and columns of matrix\n");
  scanf("%d%d", &m, &n);
  printf("Enter the elements of matrix\n");
  for (c = 0; c < m; c++)
    for (d = 0; d < n; d++)
      scanf("%d", &matrix[c][d]);
  for (c = 0; c < m; c++) {
    for (d = 0; d < n; d++) {
      transpose[d][c] = matrix[c][d];
    }
  }
  if (m == n) {
    for (c = 0; c < m; c++) {
      for (d = 0; d < m; d++) {
        if (matrix[c][d] != transpose[c][d])
          break;
      }
      if (d != m)
        break;
    }
    if (c == m)
      printf("Symmetric matrix.\n");
  } else
    printf("Not a symmetric matrix.\n");
}
```