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

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x90,%rsp
  movdqa D89(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbx
  lea    0x40(%rsp),%rbp
  movq   $0x656972,0x50(%rsp)
  movaps %xmm0,(%rsp)
  movdqa D31(%rip),%xmm0
  movq   $0x0,0x58(%rsp)
  movaps %xmm0,0x10(%rsp)
  movdqa D47(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  movdqa D42(%rip),%xmm0
  movaps %xmm0,0x30(%rsp)
  movdqa D67(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  movdqa D20(%rip),%xmm0
  movaps %xmm0,0x60(%rsp)
  pxor   %xmm0,%xmm0
  movaps %xmm0,0x70(%rsp)
  call   <getNode@plt>
  movslq %eax,%r12
  xchg   %ax,%ax
L12:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  xor    %eax,%eax
  add    $0x8,%rbx
  call   <insert@plt>
  cmp    %rbx,%rbp
  jne    L12
  lea    D22(%rip),%r13
  mov    %r12,%rdi
  xor    %eax,%eax
  mov    %r13,%rsi
  lea    D0(%rip),%r14
  call   <search@plt>
  mov    %r13,%rsi
  lea    D7(%rip),%r13
  movslq %eax,%rdx
  mov    %r13,%rdi
  xor    %eax,%eax
  shl    $0x5,%rdx
  add    %rbp,%rdx
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <search@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  lea    D70(%rip),%r14
  movslq %eax,%rdx
  xor    %eax,%eax
  shl    $0x5,%rdx
  add    %rbp,%rdx
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <search@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  lea    D99(%rip),%r14
  movslq %eax,%rdx
  xor    %eax,%eax
  shl    $0x5,%rdx
  add    %rbp,%rdx
  call   <printf@plt>
  mov    %r14,%rsi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <search@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  cltq
  shl    $0x5,%rax
  lea    0x0(%rbp,%rax,1),%rdx
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  add    $0x90,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D89
datatype: byte[16]
name: disassemble_data
arguments: label: D31
datatype: byte[16]
name: disassemble_data
arguments: label: D47
datatype: byte[16]
name: disassemble_data
arguments: label: D42
datatype: byte[16]
name: disassemble_data
arguments: label: D67
datatype: byte[16]
name: disassemble_data
arguments: label: D20
datatype: byte[16]
name: disassemble_data
arguments: label: D22
datatype: string
name: disassemble_data
arguments: label: D0
datatype: string
name: disassemble_data
arguments: label: D7
datatype: string
name: disassemble_data
arguments: label: D70
datatype: string
name: disassemble_data
arguments: label: D99
datatype: string

tool: {"D89": [0x74,0x68,0x65,0x00,0x00,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D31": [0x74,0x68,0x65,0x72,0x65,0x00,0x00,0x00,0x61,0x6e,0x73,0x77,0x65,0x72,0x00,0x00]}

tool: {"D47": [0x61,0x6e,0x79,0x00,0x00,0x00,0x00,0x00,0x62,0x79,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D42": [0x62,0x79,0x65,0x00,0x00,0x00,0x00,0x00,0x74,0x68,0x65,0x69,0x72,0x00,0x00,0x00]}

tool: {"D67": [0x4e,0x6f,0x74,0x20,0x70,0x72,0x65,0x73,0x65,0x6e,0x74,0x20,0x69,0x6e,0x20,0x74]}

tool: {"D20": [0x50,0x72,0x65,0x73,0x65,0x6e,0x74,0x20,0x69,0x6e,0x20,0x74,0x72,0x69,0x65,0x00]}

tool: D22: the

tool: D0: these

tool: D7: %s --- %s


tool: D70: their

tool: D99: thaw

assistant: ```c
int main() {
  char keys[][8] = {"the", "a", "there", "answer", "any", "by", "bye", "their"};
  char output[][32] = {"Not present in trie", "Present in trie"};
  struct TrieNode *root = getNode();
  int i;
  for (i = 0; i < sizeof(keys) / sizeof(keys[0]); i++)
    insert(root, keys[i]);
  printf("%s --- %s\n", "the", output[search(root, "the")]);
  printf("%s --- %s\n", "these", output[search(root, "these")]);
  printf("%s --- %s\n", "their", output[search(root, "their")]);
  printf("%s --- %s\n", "thaw", output[search(root, "thaw")]);
  return 0;
}
```