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

```asm
<lookup>:
  endbr64
  push   %rbp
  mov    $0x2e,%esi
  mov    %rsp,%rbp
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x28(%rbp)
  xor    %eax,%eax
  call   <strrchr@plt>
  mov    %rax,%rdi
  mov    %rax,%r13
  call   <strlen@plt>
  mov    %rsp,%rsi
  lea    0x1(%rax),%edx
  movslq %edx,%rdx
  add    $0xf,%rdx
  mov    %rdx,%rcx
  and    $0xfffffffffffff000,%rdx
  sub    %rdx,%rsi
  and    $0xfffffffffffffff0,%rcx
  cmp    %rsi,%rsp
  je     L34
L114:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rsi,%rsp
  jne    L114
L34:
  and    $0xfff,%ecx
  sub    %rcx,%rsp
  test   %rcx,%rcx
  jne    L113
L28:
  mov    %rsp,%r14
  movslq %eax,%r12
  xor    %ebx,%ebx
  test   %eax,%eax
  jle    L87
  nopl   (%rax)
L97:
  movsbl 0x0(%r13,%rbx,1),%edi
  call   <tolower@plt>
  mov    %al,(%r14,%rbx,1)
  add    $0x1,%rbx
  cmp    %r12,%rbx
  jne    L97
L87:
  lea    D1(%rip),%rsi
  mov    %r14,%rdi
  movb   $0x0,(%r14,%r12,1)
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D3(%rip),%rax
  test   %r8,%r8
  je     L118
  lea    D155(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D104(%rip),%rax
  test   %r8,%r8
  je     L118
  lea    D57(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D99(%rip),%rax
  test   %r8,%r8
  jne    L145
  nopw   0x0(%rax,%rax,1)
L118:
  mov    -0x28(%rbp),%rdx
  sub    %fs:0x28,%rdx
  jne    L88
  lea    -0x20(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %rbp
  ret
L113:
  orq    $0x0,-0x8(%rsp,%rcx,1)
  jmp    L28
  nopl   0x0(%rax,%rax,1)
L145:
  lea    D113(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D31(%rip),%rax
  test   %r8,%r8
  je     L118
  lea    D8(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D87(%rip),%rax
  test   %r8,%r8
  je     L118
  lea    D38(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D129(%rip),%rax
  test   %r8,%r8
  je     L118
  lea    D159(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D41(%rip),%rax
  test   %r8,%r8
  je     L118
  lea    D89(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  mov    $0x0,%edx
  test   %rax,%rax
  lea    D50(%rip),%rax
  cmovne %rdx,%rax
  jmp    L118
L88:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D1
type_infered: string
name: unpack_data
arguments: data_label: D3
type_infered: string
name: unpack_data
arguments: data_label: D155
type_infered: string
name: unpack_data
arguments: data_label: D104
type_infered: string
name: unpack_data
arguments: data_label: D57
type_infered: string
name: unpack_data
arguments: data_label: D99
type_infered: string
name: unpack_data
arguments: data_label: D113
type_infered: string
name: unpack_data
arguments: data_label: D31
type_infered: string
name: unpack_data
arguments: data_label: D8
type_infered: string
name: unpack_data
arguments: data_label: D87
type_infered: string
name: unpack_data
arguments: data_label: D38
type_infered: string
name: unpack_data
arguments: data_label: D129
type_infered: string
name: unpack_data
arguments: data_label: D159
type_infered: string
name: unpack_data
arguments: data_label: D41
type_infered: string
name: unpack_data
arguments: data_label: D89
type_infered: string
name: unpack_data
arguments: data_label: D50
type_infered: string

tool: D1: .css

tool: D3: text/css

tool: D155: .html

tool: D104: text/html

tool: D57: .gif

tool: D99: image/gif

tool: D113: .ico

tool: D31: image/x-icon

tool: D8: .jpg

tool: D87: image/jpeg

tool: D38: .js

tool: D129: text/javascript

tool: D159: .php

tool: D41: text/x-php

tool: D89: .png

tool: D50: image/png

assistant: ```c
const char *lookup(const char *path) {
  char *suffixPtr = strrchr(path, '.');
  int suffixLength = strlen(suffixPtr);
  char suffix[suffixLength + 1];
  for (int i = 0; i < suffixLength; i++) {
    suffix[i] = tolower(suffixPtr[i]);
  }
  suffix[suffixLength] = '\0';
  if (strcmp(suffix, ".css") == 0)
    return "text/css";
  else if (strcmp(suffix, ".html") == 0)
    return "text/html";
  else if (strcmp(suffix, ".gif") == 0)
    return "image/gif";
  else if (strcmp(suffix, ".ico") == 0)
    return "image/x-icon";
  else if (strcmp(suffix, ".jpg") == 0)
    return "image/jpeg";
  else if (strcmp(suffix, ".js") == 0)
    return "text/javascript";
  else if (strcmp(suffix, ".php") == 0)
    return "text/x-php";
  else if (strcmp(suffix, ".png") == 0)
    return "image/png";
  else
    return NULL;
}
```