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

```asm
<help>:
  endbr64
  test   %rdi,%rdi
  je     L100
  push   %rbp
  lea    D37(%rip),%rsi
  mov    %rdi,%rbp
  call   <strcmp@plt>
  test   %eax,%eax
  je     L122
  lea    D32(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L75
  lea    D33(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L95
  lea    D20(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L87
  lea    D24(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L60
  lea    D34(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L52
  lea    D76(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L123
  lea    D16(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L116
  lea    D83(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L94
  lea    D79(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L83
  lea    D88(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L18
  lea    D58(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L70
  pop    %rbp
  jmp    1210 <help_checkout@plt>
  nopl   0x0(%rax,%rax,1)
L122:
  pop    %rbp
  jmp    1160 <help_help@plt>
  cs nopw 0x0(%rax,%rax,1)
L75:
  pop    %rbp
  jmp    11f0 <help_prompt@plt>
  cs nopw 0x0(%rax,%rax,1)
L87:
  pop    %rbp
  jmp    1150 <help_drop@plt>
  cs nopw 0x0(%rax,%rax,1)
L100:
  xor    %eax,%eax
  jmp    11c0 <help_ls@plt>
  nopw   0x0(%rax,%rax,1)
L95:
  pop    %rbp
  jmp    1130 <help_init@plt>
  cs nopw 0x0(%rax,%rax,1)
L60:
  pop    %rbp
  jmp    11e0 <help_create_service@plt>
  cs nopw 0x0(%rax,%rax,1)
L116:
  pop    %rbp
  jmp    1180 <help_back@plt>
  cs nopw 0x0(%rax,%rax,1)
L52:
  pop    %rbp
  jmp    11b0 <help_list@plt>
  cs nopw 0x0(%rax,%rax,1)
L123:
  pop    %rbp
  jmp    1190 <help_switch@plt>
  cs nopw 0x0(%rax,%rax,1)
L94:
  pop    %rbp
  jmp    11a0 <help_book@plt>
L83:
  pop    %rbp
  jmp    1200 <help_service@plt>
L70:
  lea    D127(%rip),%rdi
  pop    %rbp
  jmp    11d0 <error_print@plt>
L18:
  pop    %rbp
  jmp    1140 <help_bill@plt>
```

tool_calls: name: retrieve_data
arguments: label: D37
type: string
name: retrieve_data
arguments: label: D32
type: string
name: retrieve_data
arguments: label: D33
type: string
name: retrieve_data
arguments: label: D20
type: string
name: retrieve_data
arguments: label: D24
type: string
name: retrieve_data
arguments: label: D34
type: string
name: retrieve_data
arguments: label: D76
type: string
name: retrieve_data
arguments: label: D16
type: string
name: retrieve_data
arguments: label: D83
type: string
name: retrieve_data
arguments: label: D79
type: string
name: retrieve_data
arguments: label: D88
type: string
name: retrieve_data
arguments: label: D58
type: string
name: retrieve_data
arguments: label: D127
type: string

tool: D37: help

tool: D32: prompt

tool: D33: init

tool: D20: drop

tool: D24: create-service

tool: D34: list

tool: D76: switch

tool: D16: back

tool: D83: book

tool: D79: service

tool: D88: bill

tool: D58: checkout

tool: D127: Unknown command!

assistant: ```c
void help(char *command) {
  if (!command)
    help_ls();
  else if (!strcmp(command, "help"))
    help_help();
  else if (!strcmp(command, "prompt"))
    help_prompt();
  else if (!strcmp(command, "init"))
    help_init();
  else if (!strcmp(command, "drop"))
    help_drop();
  else if (!strcmp(command, "create-service"))
    help_create_service();
  else if (!strcmp(command, "list"))
    help_list();
  else if (!strcmp(command, "switch"))
    help_switch();
  else if (!strcmp(command, "back"))
    help_back();
  else if (!strcmp(command, "book"))
    help_book();
  else if (!strcmp(command, "service"))
    help_service();
  else if (!strcmp(command, "bill"))
    help_bill();
  else if (!strcmp(command, "checkout"))
    help_checkout();
  else
    error_print("Unknown command!");
}
```