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

```asm
<print_full_usage>:
  endbr64
  sub    $0x8,%rsp
  lea    D47(%rip),%rdi
  call   <printf@plt>
  lea    D102(%rip),%rdi
  call   <printf@plt>
  lea    D144(%rip),%rdi
  call   <printf@plt>
  lea    D122(%rip),%rdi
  call   <printf@plt>
  lea    D63(%rip),%rdi
  call   <printf@plt>
  lea    D18(%rip),%rdi
  call   <printf@plt>
  lea    D94(%rip),%rdi
  call   <printf@plt>
  lea    D107(%rip),%rdi
  call   <printf@plt>
  lea    D79(%rip),%rdi
  call   <printf@plt>
  lea    D77(%rip),%rdi
  call   <printf@plt>
  lea    D30(%rip),%rdi
  call   <printf@plt>
  lea    D46(%rip),%rdi
  call   <printf@plt>
  lea    D100(%rip),%rdi
  call   <printf@plt>
  lea    D142(%rip),%rdi
  call   <printf@plt>
  lea    D106(%rip),%rdi
  call   <printf@plt>
  add    $0x8,%rsp
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D47
type_infered: string
name: disassemble_data
arguments: tag: D102
type_infered: string
name: disassemble_data
arguments: tag: D144
type_infered: string
name: disassemble_data
arguments: tag: D122
type_infered: string
name: disassemble_data
arguments: tag: D63
type_infered: string
name: disassemble_data
arguments: tag: D18
type_infered: string
name: disassemble_data
arguments: tag: D94
type_infered: string
name: disassemble_data
arguments: tag: D107
type_infered: string
name: disassemble_data
arguments: tag: D79
type_infered: string
name: disassemble_data
arguments: tag: D77
type_infered: string
name: disassemble_data
arguments: tag: D30
type_infered: string
name: disassemble_data
arguments: tag: D46
type_infered: string
name: disassemble_data
arguments: tag: D100
type_infered: string
name: disassemble_data
arguments: tag: D142
type_infered: string
name: disassemble_data
arguments: tag: D106
type_infered: string

tool: D47: usage:



tool: D102:    test: beeversion <packageA> -{lt|le|gt|ge|eq|ne} <packageB>


tool: D144:  filter: beeversion [filter-options] -{min|max} <package1> [.. <packageN>]


tool: D122:   parse: beeversion [parse-options] <package>



tool: D63:          package := <pkgfullname>-<pkgfullversion>-<pkgrevision>


tool: D18:                   | <pkgfullname>-<pkgfullversion>


tool: D94:                   | <pkgfullversion>



tool: D107:      pkgfullname := <pkgname>


tool: D79:                   | <pkgname>_<pkgsubname>



tool: D77:   pkgfullversion := <pkgversion>


tool: D30:                   | <pkgversion>_<pkgextraversion>



tool: D46:      pkgrevision := <pkgrevision>


tool: D100:                   | <pkgrevision>.<arch>



tool: D142:    filter-options:



tool: D106:       --filter-pkgfullname=<pkgfullname>



assistant: ```c
void print_full_usage(void) {
  printf("usage:\n\n");
  printf("   test: beeversion <packageA> -{lt|le|gt|ge|eq|ne} <packageB>\n");
  printf(" filter: beeversion [filter-options] -{min|max} <package1> [.. <packageN>]\n");
  printf("  parse: beeversion [parse-options] <package>\n\n");
  printf("         package := <pkgfullname>-<pkgfullversion>-<pkgrevision>\n");
  printf("                  | <pkgfullname>-<pkgfullversion>\n");
  printf("                  | <pkgfullversion>\n\n");
  printf("     pkgfullname := <pkgname>\n");
  printf("                  | <pkgname>_<pkgsubname>\n\n");
  printf("  pkgfullversion := <pkgversion>\n");
  printf("                  | <pkgversion>_<pkgextraversion>\n\n");
  printf("     pkgrevision := <pkgrevision>\n");
  printf("                  | <pkgrevision>.<arch>\n\n");
  printf("   filter-options:\n\n");
  printf("      --filter-pkgfullname=<pkgfullname>\n\n");
}
```