user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x130,%rsp
  mov    %edi,-0x124(%rbp)
  mov    %rsi,-0x130(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x110(%rbp)
  movq   $0x0,-0x108(%rbp)
  movq   $0x0,-0x100(%rbp)
  movq   $0x0,-0xf8(%rbp)
  movq   $0x0,-0xf0(%rbp)
  movq   $0x0,-0xe8(%rbp)
  movq   $0x0,-0xe0(%rbp)
  movq   $0x0,-0xd8(%rbp)
  movq   $0x0,-0xd0(%rbp)
  movq   $0x0,-0xc8(%rbp)
  movq   $0x0,-0xc0(%rbp)
  movq   $0x0,-0xb8(%rbp)
  movq   $0x0,-0xb0(%rbp)
  movq   $0x0,-0xa8(%rbp)
  movq   $0x0,-0xa0(%rbp)
  movq   $0x0,-0x98(%rbp)
  movq   $0x0,-0x90(%rbp)
  movq   $0x0,-0x88(%rbp)
  movq   $0x0,-0x80(%rbp)
  movq   $0x0,-0x78(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movl   $0x0,-0x11c(%rbp)
  movq   $0x0,-0x118(%rbp)
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x1,-0x124(%rbp)
  jg     L12
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L12
L36:
  mov    -0x124(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D24(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x118(%rbp)
  cmpq   $0x0,-0x118(%rbp)
  jne    L74
  mov    -0x124(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L12
L74:
  movl   $0x0,-0x11c(%rbp)
  lea    -0x110(%rbp),%rax
  mov    $0x100,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  jmp    L10
L7:
  mov    -0x130(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  lea    -0x110(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L10
  cmpl   $0x0,-0x11c(%rbp)
  jne    L92
  mov    -0x124(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L92:
  lea    -0x110(%rbp),%rax
  mov    %rax,%rsi
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x110(%rbp),%rax
  mov    $0x100,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  addl   $0x1,-0x11c(%rbp)
L10:
  mov    -0x118(%rbp),%rdx
  lea    -0x110(%rbp),%rax
  mov    $0x100,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L7
L12:
  mov    -0x124(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x124(%rbp)
  cmp    $0x2,%eax
  jg     L36
  mov    -0x11c(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L39
  call   <__stack_chk_fail@plt>
L39:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D46
type_guessed: string
name: disassemble_data
arguments: data_label: D48
type_guessed: string
name: disassemble_data
arguments: data_label: D24
type_guessed: string
name: disassemble_data
arguments: data_label: D49
type_guessed: string
name: disassemble_data
arguments: data_label: D3
type_guessed: string
name: disassemble_data
arguments: data_label: D2
type_guessed: string

tool: D46: 
This program finds a pattern into the input lines
The patern is give as a command line arguments.

tool: D48: 
error: Correct usage
	./exec_file pattern [optional] named_files_where_to_find_pattern

tool: D24: r

tool: D49: 
error: Couldn't open file: %s

tool: D3: 
In file %s

tool: D2: 
	%s

assistant: ```c
int main(int argc, char *argv[]) {
  char line[256] = {0};
  int found = 0;
  FILE *f = NULL;
  printf("\nThis program finds a pattern into the input lines\nThe patern is give as a command line arguments.");
  if (argc < 2) {
    printf("\nerror: Correct usage\n\t./exec_file pattern [optional] named_files_where_to_find_pattern");
    exit(0);
  }
  while (argc-- > 2) {
    if ((f = fopen(argv[argc], "r")) == NULL) {
      printf("\nerror: Couldn't open file: %s", argv[argc]);
      continue;
    }
    found = 0;
    memset(line, 0, 256);
    while (fgets(line, 256, f) != NULL) {
      if (strstr(line, argv[1]) != NULL) {
        if (!found)
          printf("\nIn file %s", argv[argc]);
        printf("\n\t%s", line);
        memset(line, 0, 256);
        found++;
      }
    }
  }
  return found;
}
```