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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %edi,-0xa4(%rbp)
  mov    %rsi,-0xb0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x98(%rbp)
  cmpl   $0x1,-0xa4(%rbp)
  jg     L0
  mov    -0xb0(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
L0:
  movl   $0x0,-0x9c(%rbp)
  jmp    L92
L93:
  mov    -0x9c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  test   %eax,%eax
  jg     L41
  mov    -0x9c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D62(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L92
L41:
  mov    -0x9c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xb0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  mov    %eax,-0x94(%rbp)
  cmpl   $0x63,-0x94(%rbp)
  jg     L50
  cmpl   $0x0,-0x98(%rbp)
  jne    L50
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    -0x70(%rbp),%rax
  mov    $0xa,%edx
  lea    D19(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L79
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
L79:
  movl   $0x1,-0x98(%rbp)
L50:
  mov    -0x94(%rbp),%eax
  lea    -0x1(%rax),%edx
  lea    -0x90(%rbp),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  mov    $0x0,%eax
  call   <scrn_passwd@plt>
  test   %eax,%eax
  jne    L82
  mov    -0xb0(%rbp),%rax
  mov    (%rax),%rax
  lea    D33(%rip),%rdx
  mov    %rax,%rsi
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
L82:
  lea    -0x90(%rbp),%rdx
  mov    -0x94(%rbp),%eax
  mov    %eax,%esi
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L92:
  addl   $0x1,-0x9c(%rbp)
  mov    -0x9c(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jl     L93
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L32
  call   <__stack_chk_fail@plt>
L32:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D9
type_infered: string
name: unpack_data
arguments: data_tag: D62
type_infered: string
name: unpack_data
arguments: data_tag: D30
type_infered: string
name: unpack_data
arguments: data_tag: D8
type_infered: string
name: unpack_data
arguments: data_tag: D48
type_infered: string
name: unpack_data
arguments: data_tag: D19
type_infered: string
name: unpack_data
arguments: data_tag: D5
type_infered: string
name: unpack_data
arguments: data_tag: D33
type_infered: string
name: unpack_data
arguments: data_tag: D90
type_infered: string
name: unpack_data
arguments: data_tag: D67
type_infered: string

tool: D9: Usage: %s screen1 screen2 ...


tool: D62: Option not known: %s.


tool: D30: You need clearance to see passwords below 100.

tool: D8: Enter master password:

tool: D48: %s

tool: D19: poppycrash

tool: D5: Foo, charlatan!

tool: D33: /usr/share/dict/words

tool: D90: %s: Cannot access %s.


tool: D67: Screen %d password is '%s'.


assistant: ```c
main(argc, argv) int argc;
char *argv[];
{
  int scr, position, mpw = 0;
  char pass[20];
  char pw[100];
  if (argc < 2) {
    printf("Usage: %s screen1 screen2 ...\n", argv[0]);
    exit(-1);
  }
  position = 0;
  while (++position < argc) {
    if (atoi(argv[position]) < 1) {
      printf("Option not known: %s.\n", argv[position]);
      continue;
    }
    scr = atoi(argv[position]);
    if ((scr < 100) && (mpw == 0)) {
      printf("You need clearance to see passwords below 100.\n");
      printf("Enter master password:");
      scanf("%s", pw);
      if (strncmp(pw, "poppycrash", strlen("poppycrash"))) {
        printf("Foo, charlatan!\n");
        exit(-1);
      }
      mpw = 1;
    }
    if (!scrn_passwd((scr - 1), pass)) {
      printf("%s: Cannot access %s.\n", argv[0], "/usr/share/dict/words");
      exit(-1);
    }
    printf("Screen %d password is '%s'.\n", scr, pass);
  }
}
```