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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x280,%rsp
  mov    %edi,-0x274(%rbp)
  mov    %rsi,-0x280(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movb   $0x0,-0x261(%rbp)
  cmpl   $0x2,-0x274(%rbp)
  je     L3
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%edi
  call   <exit@plt>
L3:
  mov    -0x280(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D57(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x218(%rbp)
  cmpq   $0x0,-0x218(%rbp)
  jne    L1
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L1
L25:
  mov    -0x218(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  mov    $0x100,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  lea    -0x210(%rbp),%rsi
  lea    -0x25c(%rbp),%rcx
  lea    -0x260(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  mov    %rsi,%r8
  lea    D45(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  test   %rax,%rax
  je     L1
  lea    -0x210(%rbp),%rax
  mov    %rax,%rsi
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L20
  lea    -0x224(%rbp),%r8
  lea    -0x210(%rbp),%rdi
  lea    -0x25c(%rbp),%rcx
  lea    -0x260(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  lea    -0x21c(%rbp),%rsi
  push   %rsi
  lea    -0x220(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D63(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  movb   $0x1,-0x261(%rbp)
L20:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L29
  lea    -0x258(%rbp),%r8
  lea    -0x210(%rbp),%rdi
  lea    -0x25c(%rbp),%rcx
  lea    -0x260(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  sub    $0x8,%rsp
  lea    -0x234(%rbp),%rsi
  push   %rsi
  lea    -0x238(%rbp),%rsi
  push   %rsi
  lea    -0x23c(%rbp),%rsi
  push   %rsi
  lea    -0x240(%rbp),%rsi
  push   %rsi
  lea    -0x244(%rbp),%rsi
  push   %rsi
  lea    -0x248(%rbp),%rsi
  push   %rsi
  lea    -0x24c(%rbp),%rsi
  push   %rsi
  lea    -0x250(%rbp),%rsi
  push   %rsi
  lea    -0x254(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D67(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x50,%rsp
L29:
  lea    -0x210(%rbp),%rax
  mov    %rax,%rsi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L1
  lea    -0x230(%rbp),%r8
  lea    -0x210(%rbp),%rdi
  lea    -0x25c(%rbp),%rcx
  lea    -0x260(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  lea    -0x228(%rbp),%rsi
  push   %rsi
  lea    -0x22c(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D63(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmpb   $0x0,-0x261(%rbp)
  je     L1
  mov    -0x230(%rbp),%edi
  mov    -0x248(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  mov    -0x250(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%esi
  mov    %edx,%eax
  sub    %esi,%eax
  mov    %eax,%edx
  mov    -0x220(%rbp),%eax
  sub    %eax,%edx
  mov    -0x254(%rbp),%eax
  movslq %eax,%rsi
  imul   $0x51eb851f,%rsi,%rsi
  shr    $0x20,%rsi
  sar    $0x5,%esi
  sar    $0x1f,%eax
  mov    %eax,%r8d
  mov    %esi,%eax
  sub    %r8d,%eax
  mov    -0x224(%rbp),%esi
  sub    %esi,%eax
  mov    %edi,%r8d
  mov    %eax,%esi
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L1:
  mov    -0x218(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  je     L25
  mov    -0x218(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L13
  call   <__stack_chk_fail@plt>
L13:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D80
data_type: string
name: retrieve_data
arguments: data_label: D57
data_type: string
name: retrieve_data
arguments: data_label: D45
data_type: string
name: retrieve_data
arguments: data_label: D60
data_type: string
name: retrieve_data
arguments: data_label: D63
data_type: string
name: retrieve_data
arguments: data_label: D28
data_type: string
name: retrieve_data
arguments: data_label: D67
data_type: string
name: retrieve_data
arguments: data_label: D13
data_type: string
name: retrieve_data
arguments: data_label: D19
data_type: string

tool: D80: plot3dparse 'flight_file.data' > output.dat

tool: D57: r

tool: D45: %e %i %s

tool: D60: NAVIGATION_REF

tool: D63: %e %i %s %i %i %i


tool: D28: GPS

tool: D67: %e %i %s %i %i %i %i %i %i %i %i %i %i


tool: D13: ATTITUDE

tool: D19: %i %i %i %i



assistant: ```c
int main(int argc, char *argv[]) {
  char line_in[256];
  float rtime;
  char id_name[255];
  unsigned int ac_id;
  unsigned int byte_mask;
  int utm_east;
  int utm_north;
  int course;
  int alt;
  int speed;
  int climb;
  unsigned int itow;
  unsigned int utm_zone;
  unsigned int gps_nb_err;
  unsigned int phi;
  unsigned int psi;
  unsigned int theta;
  unsigned int nr_utm_east;
  unsigned int nr_utm_north;
  unsigned int nr_utm_zone;
  unsigned int humid;
  unsigned int temp;
  char got_navref = 0;
  FILE *fd;
  if (argc != 2) {
    printf("plot3dparse 'flight_file.data' > output.dat\n");
    exit(0);
  }
  fd = fopen(argv[1], "r");
  if (!fd)
    exit(0);
  while (!feof(fd)) {
    fgets(line_in, 256, fd);
    if (sscanf(line_in, "%e %i %s", &rtime, &ac_id, id_name)) {
      if (!strcmp("NAVIGATION_REF", id_name)) {
        sscanf(line_in, "%e %i %s %i %i %i\n", &rtime, &ac_id, id_name, &nr_utm_east, &nr_utm_north, &nr_utm_zone);
        got_navref = 1;
      }
      if (!strcmp("GPS", id_name)) {
        sscanf(line_in, "%e %i %s %i %i %i %i %i %i %i %i %i %i\n", &rtime, &ac_id, id_name, &byte_mask, &utm_east, &utm_north, &course, &alt, &speed, &climb, &itow, &utm_zone, &gps_nb_err);
      }
      if (!strcmp("ATTITUDE", id_name)) {
        sscanf(line_in, "%e %i %s %i %i %i\n", &rtime, &ac_id, id_name, &phi, &psi, &theta);
        if (got_navref)
          printf("%i %i %i %i\n\n", utm_east / 100 - nr_utm_east, utm_north / 100 - nr_utm_north, alt / 100, phi);
      }
    }
  }
  fclose(fd);
  return (0);
}
```