user: What would the C source look like for the assembly code provided here:

```asm
<check_arg>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rsi,0x8(%rsp)
  cmp    $0x1,%edi
  jle    L54
  mov    %edi,%r12d
  cmp    $0x2,%edi
  je     L192
  mov    $0x2,%ebx
  mov    $0x2,%r14d
  lea    D89(%rip),%r15
  xchg   %ax,%ax
L100:
  mov    0x8(%rsp),%rax
  lea    0x0(,%r14,8),%r13
  mov    %r15,%rsi
  lea    (%rax,%r13,1),%rbp
  mov    0x0(%rbp),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L165
  lea    0x1(%rbx),%eax
  cmp    %r12d,%eax
  jl     L33
L165:
  mov    0x0(%rbp),%rdi
  lea    D27(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L0
  lea    0x1(%rbx),%eax
  cmp    %r12d,%eax
  jl     L33
L0:
  mov    0x0(%rbp),%rdi
  lea    D94(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L38
  lea    0x1(%rbx),%eax
  cmp    %r12d,%eax
  jl     L33
  mov    0x0(%rbp),%rdi
  lea    D91(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L203
L50:
  mov    0x0(%rbp),%rdi
  lea    D84(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L192
  mov    0x0(%rbp),%rdi
  lea    D83(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L192
L118:
  mov    0x0(%rbp),%rdi
  lea    D57(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L176
  nopl   0x0(%rax)
L122:
  add    $0x1,%ebx
  cmp    %r12d,%ebx
  jge    L192
L125:
  movslq %ebx,%r14
  jmp    L100
L38:
  mov    0x0(%rbp),%rdi
  lea    D91(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L203
  lea    0x1(%rbx),%eax
  cmp    %r12d,%eax
  jge    L50
  mov    0x8(%rsp),%rax
  mov    0x8(%rax,%r13,1),%rdi
  call   <check_arg_type@plt>
  test   %rax,%rax
  jne    L33
L176:
  xor    %eax,%eax
  call   <check_arg_error@plt>
  cmp    %ebx,%r12d
  jg     L100
L192:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L33:
  add    $0x2,%ebx
  cmp    %r12d,%ebx
  jl     L125
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L203:
  mov    0x0(%rbp),%rdi
  lea    D84(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L122
  mov    0x0(%rbp),%rdi
  lea    D83(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L122
  jmp    L118
  nopw   0x0(%rax,%rax,1)
L54:
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <check_arg_error@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D89
datatype: string
name: extract_symbolic_data
arguments: data_tag: D27
datatype: string
name: extract_symbolic_data
arguments: data_tag: D94
datatype: string
name: extract_symbolic_data
arguments: data_tag: D91
datatype: string
name: extract_symbolic_data
arguments: data_tag: D84
datatype: string
name: extract_symbolic_data
arguments: data_tag: D83
datatype: string
name: extract_symbolic_data
arguments: data_tag: D57
datatype: string

tool: D89: -name

tool: D27: -path

tool: D94: -user

tool: D91: -type

tool: D84: -nouser

tool: D83: -print

tool: D57: -ls

assistant: ```c
void check_arg(const int argc, const char *argv[]) {
  const char *const *parms = argv;
  int parm_pos = 2;
  if (argc < 2) {
    check_arg_error();
  }
  while (parm_pos < argc) {
    if ((strcmp(parms[parm_pos], "-name") == 0) && (parm_pos + 1 < argc)) {
      if (parm_pos + 2 < argc) {
        parm_pos += 2;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-path") == 0) && (parm_pos + 1 < argc)) {
      if (parm_pos + 2 < argc) {
        parm_pos += 2;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-user") == 0) && (parm_pos + 1 < argc)) {
      if (parm_pos + 2 < argc) {
        parm_pos += 2;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-type") == 0) && (parm_pos + 1 < argc)) {
      if (check_arg_type(argv[parm_pos + 1])) {
        if (parm_pos + 2 < argc) {
          parm_pos += 2;
        } else {
          break;
        }
      } else {
        check_arg_error();
      }
    } else if ((strcmp(parms[parm_pos], "-nouser") == 0)) {
      if (parm_pos + 1 < argc) {
        parm_pos++;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-print") == 0)) {
      if (parm_pos + 1 < argc) {
        parm_pos++;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-ls") == 0)) {
      if (parm_pos + 1 < argc) {
        parm_pos++;
      } else {
        break;
      }
    } else
      check_arg_error();
  }
}
```