user: What would the C source look like for the assembly code provided here:

```asm
<Valid_User>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,-0x80(%rbp)
  mov    %r8,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D2(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D24(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D79(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D72(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D35(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D28(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D56(%rip),%rax
  mov    %rax,-0x18(%rbp)
  movq   $0x0,-0x10(%rbp)
  mov    $0x0,%eax
  call   <SMB_Init@plt>
  mov    -0x88(%rbp),%rdx
  mov    -0x78(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <SMB_Connect_Server@plt>
  mov    %rax,-0x58(%rbp)
  cmpq   $0x0,-0x58(%rbp)
  jne    L23
  mov    -0x88(%rbp),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <SMB_Connect_Server@plt>
  mov    %rax,-0x58(%rbp)
  cmpq   $0x0,-0x58(%rbp)
  jne    L23
  mov    $0x1,%eax
  jmp    L20
L23:
  lea    -0x50(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <SMB_Negotiate@plt>
  test   %rax,%rax
  jns    L25
  mov    -0x58(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <SMB_Discon@plt>
  mov    $0x2,%eax
  jmp    L20
L25:
  mov    -0x70(%rbp),%rdx
  mov    -0x68(%rbp),%rcx
  mov    -0x58(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <SMB_Logon_Server@plt>
  test   %rax,%rax
  jns    L7
  mov    -0x58(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <SMB_Discon@plt>
  mov    $0x3,%eax
  jmp    L20
L7:
  mov    -0x58(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <SMB_Discon@plt>
  mov    $0x0,%eax
L20:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L63
  call   <__stack_chk_fail@plt>
L63:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D2
type_guessed: string
name: read_data
arguments: data_label: D24
type_guessed: string
name: read_data
arguments: data_label: D21
type_guessed: string
name: read_data
arguments: data_label: D79
type_guessed: string
name: read_data
arguments: data_label: D72
type_guessed: string
name: read_data
arguments: data_label: D35
type_guessed: string
name: read_data
arguments: data_label: D28
type_guessed: string
name: read_data
arguments: data_label: D56
type_guessed: string

tool: D2: PC NETWORK PROGRAM 1.0

tool: D24: MICROSOFT NETWORKS 1.03

tool: D21: MICROSOFT NETWORKS 3.0

tool: D79: LANMAN1.0

tool: D72: LM1.2X002

tool: D35: Samba

tool: D28: NT LM 0.12

tool: D56: NT LANMAN 1.0

assistant: ```c
int Valid_User(char *USERNAME, char *PASSWORD, char *SERVER, char *BACKUP, char *DOMAIN) {
  const char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0", "MICROSOFT NETWORKS 1.03", "MICROSOFT NETWORKS 3.0", "LANMAN1.0", "LM1.2X002", "Samba", "NT LM 0.12", "NT LANMAN 1.0", NULL};
  void *con;
  SMB_Init();
  con = SMB_Connect_Server(NULL, SERVER, DOMAIN);
  if (con == NULL) {
    con = SMB_Connect_Server(NULL, BACKUP, DOMAIN);
    if (con == NULL) {
      return (1);
    }
  }
  if (SMB_Negotiate(con, SMB_Prots) < 0) {
    SMB_Discon(con, 0);
    return (2);
  }
  if (SMB_Logon_Server(con, USERNAME, PASSWORD) < 0) {
    SMB_Discon(con, 0);
    return (3);
  }
  SMB_Discon(con, 0);
  return (0);
}
```