user: 下面的汇编指令对应的C源代码是什么:

```asm
<get_displayname_auth>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  movq   $0x0,0x20(%rsp)
  movq   $0x0,0x28(%rsp)
  mov    $0x2f,%esi
  call   <strchr@plt>
  test   %rax,%rax
  je     L50
  mov    %rax,%r12
  mov    $0x6,%edx
  lea    D13(%rip),%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L110
  mov    %r12,%rax
  sub    %rbp,%rax
  mov    %eax,%r12d
  lea    0x1(%rax),%edi
  movslq %edi,%rdi
  test   %eax,%eax
  mov    $0x0,%eax
  cmovle %rax,%rdi
  jmp    L72
L50:
  mov    $0x0,%r12d
  mov    $0x0,%edi
L72:
  lea    0x14(%rsp),%rcx
  lea    0x20(%rsp),%rdx
  lea    0x10(%rsp),%rsi
  add    %rbp,%rdi
  lea    0x28(%rsp),%r9
  lea    0x18(%rsp),%r8
  call   <parse_displayname@plt>
  test   %eax,%eax
  jne    L29
L86:
  mov    0x58(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L5
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L110:
  mov    $0x0,%r12d
  mov    $0x0,%edi
  jmp    L72
L29:
  mov    0x10(%rsp),%r13d
  lea    0x1c(%rsp),%r8
  mov    0x20(%rsp),%rcx
  mov    %r12d,%edx
  mov    %rbp,%rsi
  mov    %r13d,%edi
  call   <get_address_info@plt>
  mov    %rax,%rbp
  test   %rax,%rax
  je     L68
  mov    0x1c(%rsp),%r15d
  movb   $0x0,0x30(%rsp)
  lea    0x30(%rsp),%r12
  mov    0x14(%rsp),%edx
  lea    D14(%rip),%rsi
  mov    %r12,%rdi
  call   <sprintf@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %rax,%r14
  test   %rax,%rax
  jle    L58
  lea    0x30(%rsp),%rdi
  mov    %rax,%rsi
  call   <copystring@plt>
  mov    %eax,0xc(%rsp)
L68:
  mov    0x20(%rsp),%rdi
  test   %rdi,%rdi
  je     L101
  call   <free@plt>
L101:
  mov    0x28(%rsp),%rdi
  test   %rdi,%rdi
  je     L52
  call   <free@plt>
L52:
  mov    $0x0,%eax
  test   %rbp,%rbp
  je     L86
  mov    %r13d,(%rbx)
  mov    %rbp,0x8(%rbx)
  mov    %r15d,0x10(%rbx)
  mov    0xc(%rsp),%eax
  mov    %eax,0x40(%rbx)
  mov    %r14,0x38(%rbx)
  movq   $0x0,0x30(%rbx)
  movq   $0x0,0x28(%rbx)
  movq   $0x0,0x20(%rbx)
  movq   $0x0,0x18(%rbx)
  mov    $0x1,%eax
  jmp    L86
L58:
  mov    %rbp,%rdi
  call   <free@plt>
  mov    $0x0,%ebp
  jmp    L68
L5:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D13
datatype: string
name: parse_data
arguments: data_tag: D14
datatype: string

tool: D13: /unix:

tool: D14: %d

assistant: ```c
Bool get_displayname_auth(char *displayname, Xauth *auth) {
  int family;
  char *host = NULL, *rest = NULL;
  int dpynum, scrnum;
  char *cp;
  int len;
  Xauth proto;
  int prelen = 0;
  cp = strchr(displayname, '/');
  if (cp && strncmp(cp, "/unix:", 6) == 0)
    prelen = (cp - displayname);
  if (!parse_displayname(displayname + ((prelen > 0) ? prelen + 1 : 0), &family, &host, &dpynum, &scrnum, &rest)) {
    return 0;
  }
  proto.family = family;
  proto.address = get_address_info(family, displayname, prelen, host, &len);
  if (proto.address) {
    char buf[40];
    proto.address_length = len;
    buf[0] = '\0';
    sprintf(buf, "%d", dpynum);
    proto.number_length = strlen(buf);
    if (proto.number_length <= 0) {
      free(proto.address);
      proto.address = NULL;
    } else {
      proto.number = copystring(buf, proto.number_length);
    }
  }
  if (host)
    free(host);
  if (rest)
    free(rest);
  if (proto.address) {
    auth->family = proto.family;
    auth->address = proto.address;
    auth->address_length = proto.address_length;
    auth->number = proto.number;
    auth->number_length = proto.number_length;
    auth->name = NULL;
    auth->name_length = 0;
    auth->data = NULL;
    auth->data_length = 0;
    return 1;
  } else {
    return 0;
  }
}
```