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

```asm
<ares_strerror>:
  endbr64
  push   %rbx
  movslq %edi,%rbx
  xor    %edi,%edi
  sub    $0x90,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  lea    D146(%rip),%rax
  cmp    $0xf,%ebx
  setbe  %dil
  mov    %rax,(%rsp)
  lea    D132(%rip),%rax
  mov    %rax,0x8(%rsp)
  lea    D99(%rip),%rax
  mov    %rax,0x10(%rsp)
  lea    D140(%rip),%rax
  mov    %rax,0x18(%rsp)
  lea    D20(%rip),%rax
  mov    %rax,0x20(%rsp)
  lea    D72(%rip),%rax
  mov    %rax,0x28(%rsp)
  lea    D66(%rip),%rax
  mov    %rax,0x30(%rsp)
  lea    D156(%rip),%rax
  mov    %rax,0x38(%rsp)
  lea    D125(%rip),%rax
  mov    %rax,0x40(%rsp)
  lea    D75(%rip),%rax
  mov    %rax,0x48(%rsp)
  lea    D116(%rip),%rax
  mov    %rax,0x50(%rsp)
  lea    D14(%rip),%rax
  mov    %rax,0x58(%rsp)
  lea    D46(%rip),%rax
  mov    %rax,0x60(%rsp)
  lea    D102(%rip),%rax
  mov    %rax,0x68(%rsp)
  lea    D148(%rip),%rax
  mov    %rax,0x70(%rsp)
  lea    D104(%rip),%rax
  mov    %rax,0x78(%rsp)
  call   <assert@plt>
  mov    (%rsp,%rbx,8),%rax
  mov    0x88(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L4
  add    $0x90,%rsp
  pop    %rbx
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D146
datatype: string
name: unpack_data
arguments: tag: D132
datatype: string
name: unpack_data
arguments: tag: D99
datatype: string
name: unpack_data
arguments: tag: D140
datatype: string
name: unpack_data
arguments: tag: D20
datatype: string
name: unpack_data
arguments: tag: D72
datatype: string
name: unpack_data
arguments: tag: D66
datatype: string
name: unpack_data
arguments: tag: D156
datatype: string
name: unpack_data
arguments: tag: D125
datatype: string
name: unpack_data
arguments: tag: D75
datatype: string
name: unpack_data
arguments: tag: D116
datatype: string
name: unpack_data
arguments: tag: D14
datatype: string
name: unpack_data
arguments: tag: D46
datatype: string
name: unpack_data
arguments: tag: D102
datatype: string
name: unpack_data
arguments: tag: D148
datatype: string
name: unpack_data
arguments: tag: D104
datatype: string

tool: D146: Successful completion

tool: D132: DNS server returned answer with no data

tool: D99: DNS server claims query was misformatted

tool: D140: DNS server returned general failure

tool: D20: Domain name not found

tool: D72: DNS server does not implement requested operation

tool: D66: DNS server refused query

tool: D156: Misformatted DNS query

tool: D125: Misformatted domain name

tool: D75: Unsupported address family

tool: D116: Misformatted DNS reply

tool: D14: Could not contact DNS servers

tool: D46: Timeout while contacting DNS servers

tool: D102: End of file

tool: D148: Error reading file

tool: D104: Out of memory

assistant: ```c
const char *ares_strerror(int code, char **memptr) {
  const char *errtext[] = {"Successful completion", "DNS server returned answer with no data", "DNS server claims query was misformatted", "DNS server returned general failure", "Domain name not found", "DNS server does not implement requested operation", "DNS server refused query", "Misformatted DNS query", "Misformatted domain name", "Unsupported address family", "Misformatted DNS reply", "Could not contact DNS servers", "Timeout while contacting DNS servers", "End of file", "Error reading file", "Out of memory"};
  assert(code >= 0 && code < (sizeof(errtext) / sizeof(*errtext)));
  return errtext[code];
}
```