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

```asm
<open_pty_master>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  lea    D148(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L114
L61:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,D212(%rip)
  mov    D219(%rip),%rax
  mov    (%rax),%eax
  mov    $0x0,%edx
  mov    %eax,%esi
  lea    D169(%rip),%rax
  mov    %rax,%rdi
  call   <open@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L91
  movb   $0x73,D146(%rip)
  mov    -0x28(%rbp),%rax
  lea    D169(%rip),%rdx
  mov    %rdx,(%rax)
  mov    -0x14(%rbp),%eax
  jmp    L112
L91:
  addq   $0x1,-0x8(%rbp)
L114:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L61
  lea    D9(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L120
L96:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,D0(%rip)
  lea    D148(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L99
L146:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,D224(%rip)
  mov    D219(%rip),%rax
  mov    (%rax),%eax
  mov    $0x0,%edx
  mov    %eax,%esi
  lea    D197(%rip),%rax
  mov    %rax,%rdi
  call   <open@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L0
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,D166(%rip)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,D127(%rip)
  mov    -0x28(%rbp),%rax
  lea    D167(%rip),%rdx
  mov    %rdx,(%rax)
  mov    -0x14(%rbp),%eax
  jmp    L112
L0:
  addq   $0x1,-0x8(%rbp)
L99:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L146
  addq   $0x1,-0x10(%rbp)
L120:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L96
  lea    D9(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L130
L31:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,D6(%rip)
  lea    D148(%rip),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L11
L111:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,D196(%rip)
  mov    D219(%rip),%rax
  mov    (%rax),%eax
  mov    $0x0,%edx
  mov    %eax,%esi
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  call   <open@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L46
  movb   $0x74,D205(%rip)
  mov    -0x28(%rbp),%rax
  lea    D79(%rip),%rdx
  mov    %rdx,(%rax)
  mov    -0x14(%rbp),%eax
  jmp    L112
L46:
  addq   $0x1,-0x8(%rbp)
L11:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L111
  addq   $0x1,-0x10(%rbp)
L130:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L31
  mov    $0xffffffff,%eax
L112:
  leave
  ret
```

assistant: ```c
int open_pty_master(char **ptyslave) {
  int mfd;
  char *major, *minor;
  static char majorchars[] = "pqrstuvwxyzabcdePQRSTUVWXYZABCDE";
  static char minorchars[] = "0123456789abcdefghijklmnopqrstuv"
                             "wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_+";
  {
    static char ptyname[] = "/dev/pty/mX";
    for (minor = minorchars; *minor; minor++) {
      ptyname[10] = *minor;
      if ((mfd = open(ptyname, O_RDWR, 0)) >= 0) {
        ptyname[9] = 's';
        *ptyslave = ptyname;
        return mfd;
      }
    }
  }
  {
    static char ptyname[] = "/dev/ptym/ptyXY";
    static char ttyname[] = "/dev/pty/ttyXY";
    for (major = majorchars; *major; major++) {
      ptyname[13] = *major;
      for (minor = minorchars; *minor; minor++) {
        ptyname[14] = *minor;
        if ((mfd = open(ptyname, O_RDWR, 0)) >= 0) {
          ttyname[12] = *major;
          ttyname[13] = *minor;
          *ptyslave = ttyname;
          return mfd;
        }
      }
    }
  }
  {
    static char ptyname[] = "/dev/ptyXY";
    for (major = majorchars; *major; major++) {
      ptyname[8] = *major;
      for (minor = minorchars; *minor; minor++) {
        ptyname[9] = *minor;
        if ((mfd = open(ptyname, O_RDWR, 0)) >= 0) {
          ptyname[5] = 't';
          *ptyslave = ptyname;
          return mfd;
        }
      }
    }
  }
  return -1;
}
```