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

```asm
<TraiteMessage>:
  endbr64
  push   %rbp
  xor    %esi,%esi
  mov    %rdi,%rbp
  mov    $0x9,%edx
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0xf(%rsp),%rdi
  call   <memset@plt>
  mov    %rbp,%rdi
  call   <MessageValide@plt>
  test   %rax,%rax
  jne    L19
  lea    D65(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L9
L165:
  xor    %eax,%eax
L98:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L137
  add    $0x20,%rsp
  pop    %rbp
  ret
  xchg   %ax,%ax
L9:
  lea    D35(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L165
  lea    D12(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L34
L83:
  lea    D25(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L140
L75:
  lea    D3(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L39
L40:
  lea    D21(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L17
L145:
  lea    D50(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L76
L42:
  lea    D49(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L165
  call   <RobbyClose@plt>
  jmp    L165
  nopw   0x0(%rax,%rax,1)
L76:
  call   <RobbyOpen@plt>
  jmp    L42
  nop
L17:
  call   <RobbyRight@plt>
  jmp    L145
  nopw   0x0(%rax,%rax,1)
L39:
  call   <RobbyLeft@plt>
  jmp    L40
  nopw   0x0(%rax,%rax,1)
L140:
  call   <RobbyDown@plt>
  jmp    L75
  nopw   0x0(%rax,%rax,1)
L34:
  call   <RobbyUp@plt>
  jmp    L83
  nopw   0x0(%rax,%rax,1)
L19:
  mov    $0xffffffff,%eax
  jmp    L98
L137:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D65
type: string
name: extract_symbolic_data
arguments: data_tag: D35
type: string
name: extract_symbolic_data
arguments: data_tag: D12
type: string
name: extract_symbolic_data
arguments: data_tag: D25
type: string
name: extract_symbolic_data
arguments: data_tag: D3
type: string
name: extract_symbolic_data
arguments: data_tag: D21
type: string
name: extract_symbolic_data
arguments: data_tag: D50
type: string
name: extract_symbolic_data
arguments: data_tag: D49
type: string

tool: D65: quit

tool: D35: exit

tool: D12: up

tool: D25: down

tool: D3: left

tool: D21: right

tool: D50: open

tool: D49: close

assistant: ```c
int TraiteMessage(char *message) {
  char chaine[9];
  memset(chaine, 0, sizeof(chaine));
  if (MessageValide(message) == 0) {
    if ((strcmp(message, "quit") != 0) && (strcmp(message, "exit") != 0)) {
      if (strcmp(message, "up") == 0) {
        RobbyUp();
      }
      if (strcmp(message, "down") == 0) {
        RobbyDown();
      }
      if (strcmp(message, "left") == 0) {
        RobbyLeft();
      }
      if (strcmp(message, "right") == 0) {
        RobbyRight();
      }
      if (strcmp(message, "open") == 0) {
        RobbyOpen();
      }
      if (strcmp(message, "close") == 0) {
        RobbyClose();
      }
    }
  } else {
    return (-1);
  }
  return (0);
}
```