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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %rsi,-0x50(%rbp)
  movl   $0x400,-0x40(%rbp)
  cmpl   $0x1,-0x44(%rbp)
  jle    L142
  movl   $0x1,-0x3c(%rbp)
  jmp    L31
L161:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D91(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L85
  mov    -0x3c(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x40(%rbp)
  addl   $0x2,-0x3c(%rbp)
  jmp    L31
L85:
  mov    $0x0,%eax
  call   <print_usage@plt>
  mov    $0x0,%eax
  jmp    L123
L31:
  mov    -0x3c(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jl     L161
L142:
  mov    -0x40(%rbp),%eax
  cltq
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  cltq
  imul   %edx,%eax
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x40(%rbp),%eax
  cltq
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  cltq
  imul   %edx,%eax
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x20(%rbp)
  mov    -0x40(%rbp),%eax
  cltq
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  cltq
  imul   %edx,%eax
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x40(%rbp),%eax
  cltq
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  cltq
  imul   %edx,%eax
  shl    $0x3,%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  mov    -0x40(%rbp),%eax
  cltq
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  cltq
  imul   %edx,%eax
  shl    $0x3,%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <bzero@plt>
  lea    D96(%rip),%rax
  mov    %rax,%rsi
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x10(%rbp)
  cmpq   $0x0,-0x10(%rbp)
  jne    L10
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%eax
  jmp    L123
L10:
  mov    -0x40(%rbp),%eax
  imul   %eax,%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <fread@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x0,%eax
  call   <utime@plt>
  movq   %xmm0,%rax
  movq   D32(%rip),%xmm0
  movq   %rax,%xmm2
  xorpd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x3c(%rbp)
  jmp    L242
L45:
  mov    -0x3c(%rbp),%eax
  imul   -0x40(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x3c(%rbp),%eax
  imul   -0x40(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x3c(%rbp)
L242:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L45
  movl   $0x0,-0x3c(%rbp)
  jmp    L61
L212:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x18(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x3c(%rbp)
L61:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L212
  movl   $0x1,-0x38(%rbp)
  jmp    L121
L44:
  mov    -0x38(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L25
L195:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movl   $0x0,-0x34(%rbp)
  jmp    L192
L64:
  mov    -0x3c(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x34(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  addl   $0x1,-0x34(%rbp)
L192:
  mov    -0x38(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jg     L64
  mov    -0x3c(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x3c(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  subsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x3c(%rbp)
L25:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L195
  mov    -0x38(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  D56(%rip),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L199
L205:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movl   $0x0,-0x34(%rbp)
  jmp    L29
L223:
  mov    -0x38(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x34(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  addl   $0x1,-0x34(%rbp)
L29:
  mov    -0x38(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jg     L223
  mov    -0x38(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  subsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x38(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x3c(%rbp)
L199:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L205
  addl   $0x1,-0x38(%rbp)
L121:
  mov    -0x38(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L44
  movl   $0x0,-0x3c(%rbp)
  jmp    L49
L277:
  mov    -0x3c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x38(%rbp)
  jmp    L249
L210:
  mov    -0x3c(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x3c(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x38(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x38(%rbp)
L249:
  mov    -0x38(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L210
  mov    -0x3c(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  jmp    L50
L84:
  mov    -0x38(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x38(%rbp),%eax
  imul   -0x40(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x38(%rbp)
L50:
  mov    -0x38(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L84
  addl   $0x1,-0x3c(%rbp)
L49:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L277
  mov    $0x0,%eax
  call   <utime@plt>
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x40(%rbp),%edx
  mov    -0x40(%rbp),%ecx
  mov    -0x8(%rbp),%rax
  mov    %ecx,%esi
  movq   %rax,%xmm0
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rsi
  lea    D44(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x40(%rbp),%eax
  imul   %eax,%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    $0x8,%esi
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x1,%eax
L123:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D91
type: string
name: retrieve_data
arguments: data_tag: D96
type: string
name: retrieve_data
arguments: data_tag: D89
type: string
name: retrieve_data
arguments: data_tag: D95
type: string
name: retrieve_data
arguments: data_tag: D32
type: f32[2]
name: retrieve_data
arguments: data_tag: D56
type: f64
name: retrieve_data
arguments: data_tag: D50
type: string
name: retrieve_data
arguments: data_tag: D2
type: string
name: retrieve_data
arguments: data_tag: D20
type: string
name: retrieve_data
arguments: data_tag: D23
type: string
name: retrieve_data
arguments: data_tag: D44
type: string

tool: D91: -s

tool: D96: r

tool: D89: input.data

tool: D95: can't not open the input.data file

tool: {"D32": [0.0,-0.0]}

tool: D56: 1

tool: D50: result

tool: D2: 	TIME	Vector_Size

tool: D20: 	%f	%d*%d


tool: D23: w

tool: D44: signal_output.data

assistant: ```c
int main(int argc, char *argv[]) {
  int n;
  int i, j, k;
  double temp;
  double *matrix;
  double *U;
  double *L;
  double time;
  FILE *file;
  n = 1024;
  if (argc > 1) {
    for (i = 1; i < argc;) {
      if (strcmp(argv[i], "-s") == 0) {
        n = atoi(argv[i + 1]);
        i += 2;
      } else {
        print_usage();
        return 0;
      }
    }
  }
  matrix = malloc(sizeof(double) * n * n);
  U = malloc(sizeof(double) * n * n);
  L = malloc(sizeof(double) * n * n);
  bzero(U, sizeof(double) * n * n);
  bzero(L, sizeof(double) * n * n);
  file = fopen("input.data", "r");
  if (file == NULL) {
    printf("can't not open the input.data file\n");
    return -1;
  }
  fread(matrix, sizeof(double), n * n, file);
  fclose(file);
  time = -utime();
  for (i = 0; i < n; i++)
    L[i * n] = matrix[i * n];
  for (i = 0; i < n; i++)
    U[i] = matrix[i] / L[0];
  for (j = 1; j < n; j++) {
    for (i = j; i < n; i++) {
      temp = 0.0;
      for (k = 0; k <= j - 1; k++) {
        temp = temp + L[i * n + k] * U[k * n + j];
      }
      L[i * n + j] = matrix[i * n + j] - temp;
    }
    U[j * n + j] = 1.0;
    for (i = j + 1; i < n; i++) {
      temp = 0.0;
      for (k = 0; k <= j - 1; k++) {
        temp = temp + L[j * n + k] * U[k * n + i];
      }
      U[j * n + i] = (matrix[j * n + i] - temp) / L[j * n + j];
    }
  }
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++)
      matrix[i * n + j] = U[i * n + j];
    for (j = i; j < n; j++)
      matrix[j * n + i] = L[j * n + i];
  }
  time += utime();
  printf("result\n");
  printf("\tTIME\tVector_Size\n");
  printf("\t%f\t%d*%d\n", time, n, n);
  file = fopen("signal_output.data", "w");
  fwrite(matrix, sizeof(double), n * n, file);
  fclose(file);
  return 1;
}
```