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

```asm
<cmdshell_print_help>:
  endbr64
  sub    $0xb8,%rsp
  lea    D145(%rip),%rdx
  lea    D73(%rip),%rcx
  mov    %fs:0x28,%rax
  mov    %rax,0xa8(%rsp)
  lea    D3(%rip),%rax
  lea    D96(%rip),%rsi
  lea    D138(%rip),%rdi
  movq   %rax,%xmm0
  lea    D51(%rip),%rax
  movq   %rax,%xmm2
  movdqa %xmm0,%xmm1
  lea    D72(%rip),%rax
  movq   %xmm0,0xa0(%rsp)
  punpcklqdq %xmm2,%xmm1
  movq   %rax,%xmm3
  lea    D166(%rip),%rax
  movaps %xmm1,(%rsp)
  movdqa %xmm0,%xmm1
  movq   %rax,%xmm4
  lea    D164(%rip),%rax
  punpcklqdq %xmm3,%xmm1
  movq   %rax,%xmm5
  lea    D171(%rip),%rax
  movaps %xmm1,0x10(%rsp)
  movq   %rdx,%xmm1
  movq   %rax,%xmm6
  lea    D15(%rip),%rdx
  punpcklqdq %xmm4,%xmm1
  lea    D178(%rip),%rax
  movaps %xmm1,0x20(%rsp)
  movq   %rcx,%xmm1
  movq   %rax,%xmm7
  lea    D132(%rip),%rcx
  punpcklqdq %xmm5,%xmm1
  lea    D80(%rip),%rax
  movaps %xmm1,0x30(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm2
  lea    D53(%rip),%rsi
  punpcklqdq %xmm6,%xmm1
  lea    D40(%rip),%rax
  movaps %xmm1,0x40(%rsp)
  movq   %rdx,%xmm1
  movq   %rax,%xmm3
  lea    D117(%rip),%rax
  punpcklqdq %xmm7,%xmm1
  movaps %xmm1,0x50(%rsp)
  movq   %rcx,%xmm1
  punpcklqdq %xmm2,%xmm1
  movaps %xmm1,0x60(%rsp)
  movq   %rsi,%xmm1
  mov    $0x15,%esi
  punpcklqdq %xmm3,%xmm1
  movaps %xmm1,0x70(%rsp)
  movq   %rax,%xmm1
  lea    D103(%rip),%rax
  punpcklqdq %xmm0,%xmm1
  movq   %rax,%xmm4
  xor    %eax,%eax
  movaps %xmm1,0x80(%rsp)
  movq   %rdi,%xmm1
  mov    %rsp,%rdi
  punpcklqdq %xmm4,%xmm1
  movaps %xmm1,0x90(%rsp)
  call   <info_printer@plt>
  mov    0xa8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0xb8,%rsp
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D145
type_infered: string
name: read_data
arguments: tag: D73
type_infered: string
name: read_data
arguments: tag: D3
type_infered: string
name: read_data
arguments: tag: D96
type_infered: string
name: read_data
arguments: tag: D138
type_infered: string
name: read_data
arguments: tag: D51
type_infered: string
name: read_data
arguments: tag: D72
type_infered: string
name: read_data
arguments: tag: D166
type_infered: string
name: read_data
arguments: tag: D164
type_infered: string
name: read_data
arguments: tag: D171
type_infered: string
name: read_data
arguments: tag: D15
type_infered: string
name: read_data
arguments: tag: D178
type_infered: string
name: read_data
arguments: tag: D132
type_infered: string
name: read_data
arguments: tag: D80
type_infered: string
name: read_data
arguments: tag: D53
type_infered: string
name: read_data
arguments: tag: D40
type_infered: string
name: read_data
arguments: tag: D117
type_infered: string
name: read_data
arguments: tag: D103
type_infered: string

tool: D145:                       (source, destination, offset, cipher)
init write dir    --  initialize write directory data


tool: D73: init write file   --  initialize write file data


tool: D3: 


tool: D96: init read         --  initialize options for reading


tool: D138: help              --  print this info


tool: D51: Help info:


tool: D72: init write        --  initialize options for writing


tool: D166:                       (description)


tool: D164:                       (archive filename, description, relative offset)


tool: D171:                       (source, destination, offset, cipher)
init password     --  initialize password for read and write operations


tool: D15: status write      --  show set write options


tool: D178: status write dir  --  show write directory contents


tool: D132: status write file --  show write file data


tool: D80: status read       --  show set read options


tool: D53: status password   --  show set password for read and write operations


tool: D40: write dir         --  write directory data to destination


tool: D117: write file        --  write file data and contents to destination


tool: D103: quit              --  exit the command shell


assistant: ```c
void cmdshell_print_help(void) {
  const char *lines[] = {"\n",
                         "Help info:\n",
                         "\n",
                         "init write        --  initialize options for writing\n",
                         "                      (source, destination, offset, cipher)\n"
                         "init write dir    --  initialize write directory data\n",
                         "                      (description)\n",
                         "init write file   --  initialize write file data\n",
                         "                      (archive filename, description, relative offset)\n",
                         "init read         --  initialize options for reading\n",
                         "                      (source, destination, offset, cipher)\n"
                         "init password     --  initialize password for read and write operations\n",
                         "status write      --  show set write options\n",
                         "status write dir  --  show write directory contents\n",
                         "status write file --  show write file data\n",
                         "status read       --  show set read options\n",
                         "status password   --  show set password for read and write operations\n",
                         "write dir         --  write directory data to destination\n",
                         "write file        --  write file data and contents to destination\n",
                         "\n",
                         "help              --  print this info\n",
                         "quit              --  exit the command shell\n",
                         "\n"};
  info_printer(lines, (sizeof(lines) / sizeof(lines)[0]));
}
```