user: Converte this assembly snippet into its equivalent C code:

```asm
<proxyaction_do>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%r12
  mov    %rdx,%rbp
  lea    D25(%rip),%rsi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L35
  lea    D30(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L33
  lea    D65(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L7
  lea    D8(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L126
  lea    D88(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L138
  lea    D48(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L99
  lea    D12(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L86
  lea    D81(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L117
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <ProxyLogoff@plt>
  jmp    L74
L35:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <ProxySetOutputFormat@plt>
L74:
  mov    $0x0,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L33:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <ProxySetAutoFilter@plt>
  jmp    L74
L7:
  mov    %rbp,%rdi
  call   <ProxyListSessions@plt>
  jmp    L74
L126:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <ProxyAddServer@plt>
  jmp    L74
L138:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <ProxyDropServer@plt>
  jmp    L74
L99:
  mov    %rbp,%rdi
  call   <ProxyListServers@plt>
  jmp    L74
L86:
  mov    %rbp,%rdi
  call   <ProxyListIOHandlers@plt>
  jmp    L74
L117:
  lea    D64(%rip),%rsi
  mov    %rbp,%rdi
  call   <proxyerror_do@plt>
  jmp    L74
```

tool_calls: name: disassemble_data
arguments: label: D25
type_guessed: string
name: disassemble_data
arguments: label: D30
type_guessed: string
name: disassemble_data
arguments: label: D65
type_guessed: string
name: disassemble_data
arguments: label: D8
type_guessed: string
name: disassemble_data
arguments: label: D88
type_guessed: string
name: disassemble_data
arguments: label: D48
type_guessed: string
name: disassemble_data
arguments: label: D12
type_guessed: string
name: disassemble_data
arguments: label: D81
type_guessed: string
name: disassemble_data
arguments: label: D64
type_guessed: string

tool: D25: SetOutputFormat

tool: D30: SetAutoFilter

tool: D65: ListSessions

tool: D8: AddServer

tool: D88: DropServer

tool: D48: ListServers

tool: D12: ListIOHandlers

tool: D81: Logoff

tool: D64: Invalid Proxy Action

assistant: ```c
void *proxyaction_do(char *proxyaction, struct message *m, struct mansession *s) {
  if (!strcasecmp(proxyaction, "SetOutputFormat"))
    ProxySetOutputFormat(s, m);
  else if (!strcasecmp(proxyaction, "SetAutoFilter"))
    ProxySetAutoFilter(s, m);
  else if (!strcasecmp(proxyaction, "ListSessions"))
    ProxyListSessions(s);
  else if (!strcasecmp(proxyaction, "AddServer"))
    ProxyAddServer(s, m);
  else if (!strcasecmp(proxyaction, "DropServer"))
    ProxyDropServer(s, m);
  else if (!strcasecmp(proxyaction, "ListServers"))
    ProxyListServers(s);
  else if (!strcasecmp(proxyaction, "ListIOHandlers"))
    ProxyListIOHandlers(s);
  else if (!strcasecmp(proxyaction, "Logoff"))
    ProxyLogoff(s, m);
  else
    proxyerror_do(s, "Invalid Proxy Action");
  return 0;
}
```