user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x3,-0x54(%rbp)
  jg     L28
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%eax
  jmp    L23
L28:
  movl   $0x0,-0x44(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D11(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L47
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <file_line_count@plt>
  mov    %eax,-0x44(%rbp)
  jmp    L18
L47:
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x44(%rbp)
L18:
  movl   $0x0,-0x40(%rbp)
  mov    -0x44(%rbp),%edx
  lea    -0x38(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <allocate@plt>
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rcx
  mov    -0x38(%rbp),%rax
  mov    -0x44(%rbp),%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <insert_data@plt>
  mov    -0x38(%rbp),%rax
  mov    -0x44(%rbp),%edx
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <sort_data@plt>
L25:
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    -0x44(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x38(%rbp),%rax
  lea    -0x30(%rbp),%rsi
  mov    %edx,%ecx
  mov    $0x0,%edx
  mov    %rax,%rdi
  call   <binary_search@plt>
  mov    %eax,-0x3c(%rbp)
  cmpl   $0x0,-0x3c(%rbp)
  js     L67
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L78
L67:
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L78:
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x45(%rbp),%rax
  mov    %rax,%rsi
  lea    D53(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  movzbl -0x45(%rbp),%eax
  cmp    $0x6e,%al
  jne    L25
  mov    -0x60(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rcx
  mov    -0x38(%rbp),%rax
  mov    -0x44(%rbp),%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <write_data@plt>
  mov    -0x44(%rbp),%edx
  lea    -0x38(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <destroy@plt>
  mov    $0x0,%eax
L23:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L59
  call   <__stack_chk_fail@plt>
L59:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D64
datatype: string
name: disassemble_data
arguments: label: D11
datatype: string
name: disassemble_data
arguments: label: D63
datatype: string
name: disassemble_data
arguments: label: D39
datatype: string
name: disassemble_data
arguments: label: D22
datatype: string
name: disassemble_data
arguments: label: D38
datatype: string
name: disassemble_data
arguments: label: D72
datatype: string
name: disassemble_data
arguments: label: D53
datatype: string

tool: D64: Missing arguements

tool: D11: MAX_SIZE

tool: D63: Searching for: 

tool: D39: %s

tool: D22: %s is in this dataset


tool: D38: Not in the dataset!

tool: D72: Continue? (y/n): 

tool: D53: %c

assistant: ```c
int main(int argc, char *argv[]) {
  if (argc < 4) {
    printf("Missing arguements\n");
    return -1;
  }
  int size = 0;
  if (strcmp(argv[1], "MAX_SIZE") == 0) {
    size = file_line_count(argv[2]);
  } else {
    size = atoi(argv[1]);
  }
  char **data;
  int i = 0;
  allocate(&data, size);
  insert_data(data, argv[2], size);
  sort_data(data, size);
  char yes;
  do {
    char target[25];
    printf("Searching for: ");
    scanf("%s", target);
    getchar();
    int found = binary_search(data, target, 0, size - 1);
    if (found >= 0) {
      printf("%s is in this dataset\n", target);
    } else {
      printf("Not in the dataset!\n");
    }
    printf("Continue? (y/n): ");
    scanf("%c", &yes);
    getchar();
  } while (yes != 'n');
  write_data(data, argv[3], size);
  destroy(&data, size);
}
```