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

```asm
<is_keyword>:
  endbr64
  push   %r12
  push   %rbp
  sub    $0x8,%rsp
  movzbl (%rdi),%eax
  sub    $0x61,%eax
  cmp    $0x16,%al
  ja     L334
  lea    D187(%rip),%rdx
  movzbl %al,%eax
  mov    %rdi,%rbp
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
L334:
  xor    %r12d,%r12d
L93:
  add    $0x8,%rsp
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
  lea    D277(%rip),%rsi
  nopw   0x0(%rax,%rax,1)
L355:
  mov    %rbp,%rdi
  call   <strcmp@plt>
L345:
  xor    %r12d,%r12d
  test   %eax,%eax
  sete   %r12b
  add    $0x8,%rsp
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
  lea    D305(%rip),%rsi
  jmp    L355
  nopl   0x0(%rax)
  lea    D224(%rip),%rsi
  jmp    L355
  nopl   0x0(%rax)
  lea    D74(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  lea    D92(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  lea    D235(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  lea    D151(%rip),%rsi
  test   %eax,%eax
  jne    L355
  jmp    L93
  lea    D17(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  cmpb   $0x64,0x0(%rbp)
  jne    L205
  cmpb   $0x6f,0x1(%rbp)
  jne    L205
  cmpb   $0x0,0x2(%rbp)
  je     L93
L205:
  lea    D284(%rip),%rsi
  jmp    L355
  nopl   0x0(%rax)
  lea    D294(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  lea    D208(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  lea    D221(%rip),%rsi
  test   %eax,%eax
  jne    L355
  jmp    L93
  nopl   (%rax)
  lea    D49(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  lea    D240(%rip),%rsi
  test   %eax,%eax
  jne    L355
  jmp    L93
  cs nopw 0x0(%rax,%rax,1)
  lea    D1(%rip),%rsi
  jmp    L355
  nopl   0x0(%rax)
  lea    D142(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  movzbl 0x0(%rbp),%eax
  sub    $0x69,%eax
  jne    L345
  movzbl 0x1(%rbp),%eax
  sub    $0x66,%eax
  jne    L345
  movzbl 0x2(%rbp),%eax
  jmp    L345
  nopl   (%rax)
  lea    D285(%rip),%rsi
  jmp    L355
  nopl   0x0(%rax)
  lea    D152(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  lea    D45(%rip),%rsi
  test   %eax,%eax
  jne    L355
  jmp    L93
  cs nopw 0x0(%rax,%rax,1)
  lea    D8(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  lea    D174(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  lea    D108(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  lea    D198(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L93
  lea    D3(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  lea    D276(%rip),%rsi
  test   %eax,%eax
  jne    L355
  jmp    L93
  nopw   0x0(%rax,%rax,1)
  lea    D256(%rip),%rsi
  jmp    L355
  nopl   0x0(%rax)
  lea    D195(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  lea    D260(%rip),%rsi
  test   %eax,%eax
  jne    L355
  jmp    L93
  xchg   %ax,%ax
  lea    D124(%rip),%rsi
  mov    $0x1,%r12d
  call   <strcmp@plt>
  lea    D90(%rip),%rsi
  test   %eax,%eax
  jne    L355
  jmp    L93
```

tool_calls: name: parse_data
arguments: data_label: D277
type_guessed: string
name: parse_data
arguments: data_label: D305
type_guessed: string
name: parse_data
arguments: data_label: D224
type_guessed: string
name: parse_data
arguments: data_label: D74
type_guessed: string
name: parse_data
arguments: data_label: D92
type_guessed: string
name: parse_data
arguments: data_label: D235
type_guessed: string
name: parse_data
arguments: data_label: D151
type_guessed: string
name: parse_data
arguments: data_label: D17
type_guessed: string
name: parse_data
arguments: data_label: D284
type_guessed: string
name: parse_data
arguments: data_label: D294
type_guessed: string
name: parse_data
arguments: data_label: D208
type_guessed: string
name: parse_data
arguments: data_label: D221
type_guessed: string
name: parse_data
arguments: data_label: D49
type_guessed: string
name: parse_data
arguments: data_label: D240
type_guessed: string
name: parse_data
arguments: data_label: D1
type_guessed: string
name: parse_data
arguments: data_label: D142
type_guessed: string
name: parse_data
arguments: data_label: D285
type_guessed: string
name: parse_data
arguments: data_label: D152
type_guessed: string
name: parse_data
arguments: data_label: D45
type_guessed: string
name: parse_data
arguments: data_label: D8
type_guessed: string
name: parse_data
arguments: data_label: D174
type_guessed: string
name: parse_data
arguments: data_label: D108
type_guessed: string
name: parse_data
arguments: data_label: D198
type_guessed: string
name: parse_data
arguments: data_label: D3
type_guessed: string
name: parse_data
arguments: data_label: D276
type_guessed: string
name: parse_data
arguments: data_label: D256
type_guessed: string
name: parse_data
arguments: data_label: D195
type_guessed: string
name: parse_data
arguments: data_label: D260
type_guessed: string
name: parse_data
arguments: data_label: D124
type_guessed: string
name: parse_data
arguments: data_label: D90
type_guessed: string

tool: D277: while

tool: D305: auto

tool: D224: break

tool: D74: case

tool: D92: char

tool: D235: const

tool: D151: continue

tool: D17: default

tool: D284: double

tool: D294: else

tool: D208: enum

tool: D221: extern

tool: D49: float

tool: D240: for

tool: D1: goto

tool: D142: int

tool: D285: long

tool: D152: register

tool: D45: return

tool: D8: short

tool: D174: signed

tool: D108: sizeof

tool: D198: static

tool: D3: struct

tool: D276: switch

tool: D256: typedef

tool: D195: union

tool: D260: unsigned

tool: D124: void

tool: D90: volatile

assistant: ```c
int is_keyword(char *lexeme) {
  switch (lexeme[0]) {
  case 'a':
    if (!strcmp(lexeme, "auto"))
      return 1;
    return 0;
  case 'b':
    if (!strcmp(lexeme, "break"))
      return 1;
    return 0;
  case 'c':
    if (!strcmp(lexeme, "case") || !strcmp(lexeme, "char") || !strcmp(lexeme, "const") || !strcmp(lexeme, "continue"))
      return 1;
    return 0;
  case 'd':
    if (!strcmp(lexeme, "default") || !strcmp(lexeme, "do") || !strcmp(lexeme, "double"))
      return 1;
    return 0;
  case 'e':
    if (!strcmp(lexeme, "else") || !strcmp(lexeme, "enum") || !strcmp(lexeme, "extern"))
      return 1;
    return 0;
  case 'f':
    if (!strcmp(lexeme, "float") || !strcmp(lexeme, "for"))
      return 1;
    return 0;
  case 'g':
    if (!strcmp(lexeme, "goto"))
      return 1;
    return 0;
  case 'i':
    if (!strcmp(lexeme, "int") || !strcmp(lexeme, "if"))
      return 1;
    return 0;
  case 'l':
    if (!strcmp(lexeme, "long"))
      return 1;
    return 0;
  case 'r':
    if (!strcmp(lexeme, "register") || !strcmp(lexeme, "return"))
      return 1;
    return 0;
  case 's':
    if (!strcmp(lexeme, "short") || !strcmp(lexeme, "signed") || !strcmp(lexeme, "sizeof") || !strcmp(lexeme, "static") || !strcmp(lexeme, "struct") || !strcmp(lexeme, "switch"))
      return 1;
    return 0;
  case 't':
    if (!strcmp(lexeme, "typedef"))
      return 1;
    return 0;
  case 'u':
    if (!strcmp(lexeme, "union") || !strcmp(lexeme, "unsigned"))
      return 1;
    return 0;
  case 'v':
    if (!strcmp(lexeme, "void") || !strcmp(lexeme, "volatile"))
      return 1;
    return 0;
  case 'w':
    if (!strcmp(lexeme, "while"))
      return 1;
    return 0;
  default:
    return 0;
  }
}
```