user: Please show me the C implementation that matches the assembly code listed below:

```asm
<usage>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    $0x0,%eax
  call   <ZBarcode_Version@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x68db8bad,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0xc,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x14(%rbp),%edx
  movslq %edx,%rax
  imul   $0x68db8bad,%rax,%rax
  shr    $0x20,%rax
  sar    $0xc,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x64,%edx,%edx
  sub    %edx,%eax
  mov    %eax,-0x8(%rbp)
  cmpl   $0x8,-0x8(%rbp)
  jle    L3
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x14(%rbp),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0x4(%rbp)
  mov    -0x4(%rbp),%esi
  mov    -0x8(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
L3:
  mov    -0x8(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L10:
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D11
data_type: string
name: extract_symbolic_data
arguments: label: D3
data_type: string
name: extract_symbolic_data
arguments: label: D14
data_type: string

tool: D11: Zint version %d.%d.%d.%d (dev)


tool: D3: Zint version %d.%d.%d


tool: {"D14": "Encode input data in a barcode and save as BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF/TXT\n\n  -b, --barcode=TYPE    Number or name of barcode type. Default is 20 (CODE128)\n  --addongap=NUMBER     Set add-on gap in multiples of X-dimension for UPC/EAN\n  --batch               Treat each line of input file as a separate data set\n  --bg=COLOUR           Specify a background colour (in hex RGB/RGBA)\n  --binary              Treat input as raw binary data\n  --bind                Add boundary bars\n  --bold                Use bold text\n  --border=NUMBER       Set width of border in multiples of X-dimension\n  --box                 Add a box around the symbol\n  --cmyk                Use CMYK colour space in EPS/TIF symbols\n  --cols=NUMBER         Set the number of data columns in symbol\n  -d, --data=DATA       Set the symbol content\n  --direct              Send output to stdout\n  --dmre                Allow Data Matrix Rectangular Extended\n  --dotsize=NUMBER      Set radius of dots in dotty mode\n  --dotty               Use dots instead of squares for matrix symbols\n  --dump                Dump hexadecimal representation to stdout\n  -e, --ecinos          Display table of ECI character encodings\n  --eci=NUMBER          Set the ECI (Extended Channel Interpretation) code\n  --esc                 Process escape characters in input data\n  --fg=COLOUR           Specify a foreground colour (in hex RGB/RGBA)\n  --filetype=TYPE       Set output file type BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF/TXT\n  --fullmultibyte       Use multibyte for binary/Latin (QR/Han Xin/Grid Matrix)\n  --gs1                 Treat input as GS1 compatible data\n  --gs1nocheck          Do not check validity of GS1 data\n  --gs1parens           Process parentheses \"()\" as GS1 AI delimiters, not \"[]\"\n  --gssep               Use separator GS for GS1 (Data Matrix)\n  -h, --help            Display help message\n  --height=NUMBER       Set height of symbol in multiples of X-dimension\n  -i, --input=FILE      Read input data from FILE\n  --init                Create reader initialisation/programming symbol\n  --mask=NUMBER         Set masking pattern to use (QR/Han Xin/DotCode)\n  --mirror              Use batch data to determine filename\n  --mode=NUMBER         Set encoding mode (MaxiCode/Composite)\n  --nobackground        Remove background (EMF/EPS/GIF/PNG/SVG/TIF only)\n  --notext              Remove human readable text\n  -o, --output=FILE     Send output to FILE. Default is out.png\n  --primary=STRING      Set structured primary message (MaxiCode/Composite)\n  -r, --reverse         Reverse colours (white on black)\n  --rotate=NUMBER       Rotate symbol by NUMBER degrees\n  --rows=NUMBER         Set number of rows (Codablock-F)\n  --scale=NUMBER        Adjust size of X-dimension\n  --scmvv=NUMBER        Prefix SCM with \"[)>\\R01\\Gvv\" (vv is NUMBER) (MaxiCode)\n  --secure=NUMBER       Set error correction level (ECC)\n  --separator=NUMBER    Set height of row separator bars (stacked symbologies)\n  --small               Use small text\n  --square              Force Data Matrix symbols to be square\n  -t, --types           Display table of barcode types\n  --vers=NUMBER         Set symbol version (size, check digits, other options)\n  --vwhitesp=NUMBER     Set height of vertical whitespace in multiples of X-dim\n  -w, --whitesp=NUMBER  Set width of horizontal whitespace in multiples of X-dim\n  --werror              Convert all warnings into errors"}

assistant: ```c
void usage(void) {
  int zint_version = ZBarcode_Version();
  int version_major = zint_version / 10000;
  int version_minor = (zint_version % 10000) / 100;
  int version_release = zint_version % 100;
  int version_build;
  if (version_release >= 9) {
    version_release = version_release / 10;
    version_build = zint_version % 10;
    printf("Zint version %d.%d.%d.%d (dev)\n", version_major, version_minor, version_release, version_build);
  } else {
    printf("Zint version %d.%d.%d\n", version_major, version_minor, version_release);
  }
  printf("Encode input data in a barcode and save as BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF/TXT\n\n"
         "  -b, --barcode=TYPE    Number or name of barcode type. Default is 20 (CODE128)\n"
         "  --addongap=NUMBER     Set add-on gap in multiples of X-dimension for UPC/EAN\n"
         "  --batch               Treat each line of input file as a separate data set\n"
         "  --bg=COLOUR           Specify a background colour (in hex RGB/RGBA)\n"
         "  --binary              Treat input as raw binary data\n"
         "  --bind                Add boundary bars\n"
         "  --bold                Use bold text\n"
         "  --border=NUMBER       Set width of border in multiples of X-dimension\n"
         "  --box                 Add a box around the symbol\n"
         "  --cmyk                Use CMYK colour space in EPS/TIF symbols\n"
         "  --cols=NUMBER         Set the number of data columns in symbol\n"
         "  -d, --data=DATA       Set the symbol content\n"
         "  --direct              Send output to stdout\n"
         "  --dmre                Allow Data Matrix Rectangular Extended\n"
         "  --dotsize=NUMBER      Set radius of dots in dotty mode\n"
         "  --dotty               Use dots instead of squares for matrix symbols\n"
         "  --dump                Dump hexadecimal representation to stdout\n"
         "  -e, --ecinos          Display table of ECI character encodings\n"
         "  --eci=NUMBER          Set the ECI (Extended Channel Interpretation) code\n"
         "  --esc                 Process escape characters in input data\n"
         "  --fg=COLOUR           Specify a foreground colour (in hex RGB/RGBA)\n"
         "  --filetype=TYPE       Set output file type BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF/TXT\n"
         "  --fullmultibyte       Use multibyte for binary/Latin (QR/Han Xin/Grid Matrix)\n"
         "  --gs1                 Treat input as GS1 compatible data\n"
         "  --gs1nocheck          Do not check validity of GS1 data\n"
         "  --gs1parens           Process parentheses \"()\" as GS1 AI delimiters, not \"[]\"\n"
         "  --gssep               Use separator GS for GS1 (Data Matrix)\n"
         "  -h, --help            Display help message\n"
         "  --height=NUMBER       Set height of symbol in multiples of X-dimension\n"
         "  -i, --input=FILE      Read input data from FILE\n"
         "  --init                Create reader initialisation/programming symbol\n"
         "  --mask=NUMBER         Set masking pattern to use (QR/Han Xin/DotCode)\n"
         "  --mirror              Use batch data to determine filename\n"
         "  --mode=NUMBER         Set encoding mode (MaxiCode/Composite)\n"
         "  --nobackground        Remove background (EMF/EPS/GIF/PNG/SVG/TIF only)\n"
         "  --notext              Remove human readable text\n"
         "  -o, --output=FILE     Send output to FILE. Default is out.png\n"
         "  --primary=STRING      Set structured primary message (MaxiCode/Composite)\n"
         "  -r, --reverse         Reverse colours (white on black)\n"
         "  --rotate=NUMBER       Rotate symbol by NUMBER degrees\n"
         "  --rows=NUMBER         Set number of rows (Codablock-F)\n"
         "  --scale=NUMBER        Adjust size of X-dimension\n"
         "  --scmvv=NUMBER        Prefix SCM with \"[)>\\R01\\Gvv\" (vv is NUMBER) (MaxiCode)\n"
         "  --secure=NUMBER       Set error correction level (ECC)\n"
         "  --separator=NUMBER    Set height of row separator bars (stacked symbologies)\n"
         "  --small               Use small text\n"
         "  --square              Force Data Matrix symbols to be square\n"
         "  -t, --types           Display table of barcode types\n"
         "  --vers=NUMBER         Set symbol version (size, check digits, other options)\n"
         "  --vwhitesp=NUMBER     Set height of vertical whitespace in multiples of X-dim\n"
         "  -w, --whitesp=NUMBER  Set width of horizontal whitespace in multiples of X-dim\n"
         "  --werror              Convert all warnings into errors\n");
}
```