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

```asm
<zipmapXLookupRaw>:
  endbr64
  push   %r15
  lea    0x1(%rdi),%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  cmpb   $0xff,0x1(%rdi)
  mov    %rdi,0x18(%rsp)
  mov    %rcx,0x10(%rsp)
  mov    %r8,0x8(%rsp)
  je     L16
  mov    %rsi,%rbp
  mov    %edx,%ebx
  test   %rcx,%rcx
  je     L12
  xor    %r12d,%r12d
  cmpq   $0x0,0x8(%rsp)
  je     L128
  nopl   0x0(%rax)
L150:
  mov    %r15,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r13d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%r14d
  test   %r12,%r12
  jne    L211
  cmp    %ebx,%r13d
  jne    L211
  mov    %eax,%edi
  mov    %r13d,%edx
  mov    %rbp,%rsi
  add    %r15,%rdi
  mov    %rdi,(%rsp)
  call   <memcmp@plt>
  test   %eax,%eax
  jne    L211
  mov    (%rsp),%rdi
  mov    %r13d,%eax
  mov    0x8(%rsp),%rdx
  mov    %r15,%r12
  mov    (%rdi,%rax,1),%eax
  mov    %eax,(%rdx)
L211:
  lea    0x0(%r13,%r14,1),%eax
  lea    0x4(%r15,%rax,1),%r14
  mov    %r14,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r15d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%eax
  lea    (%r14,%rax,1),%rcx
  movzbl (%rcx),%eax
  lea    0x1(%r15,%rax,1),%eax
  lea    (%rcx,%rax,1),%r15
  cmpb   $0xff,(%r15)
  jne    L150
L114:
  mov    0x10(%rsp),%rax
  mov    %r15,%rcx
  sub    0x18(%rsp),%rcx
  add    $0x1,%ecx
  mov    %ecx,(%rax)
L157:
  add    $0x28,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L128:
  mov    %r15,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r13d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%r14d
  test   %r12,%r12
  jne    L227
  cmp    %r13d,%ebx
  jne    L227
  mov    %eax,%edi
  mov    %r13d,%edx
  mov    %rbp,%rsi
  add    %r15,%rdi
  call   <memcmp@plt>
  test   %eax,%eax
  cmove  %r15,%r12
L227:
  lea    0x0(%r13,%r14,1),%eax
  lea    0x4(%r15,%rax,1),%r13
  mov    %r13,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r14d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%eax
  lea    0x0(%r13,%rax,1),%rcx
  movzbl (%rcx),%eax
  lea    0x1(%r14,%rax,1),%eax
  lea    (%rcx,%rax,1),%r15
  cmpb   $0xff,(%r15)
  jne    L128
  jmp    L114
L16:
  xor    %r12d,%r12d
  cmpq   $0x0,0x10(%rsp)
  je     L157
  jmp    L114
  nopw   0x0(%rax,%rax,1)
L12:
  mov    %r15,%r12
  test   %r8,%r8
  je     L188
  nopl   0x0(%rax,%rax,1)
L2:
  mov    %r12,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r14d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%r15d
  cmp    %r14d,%ebx
  jne    L168
  mov    %eax,%ecx
  mov    %ebx,%edx
  mov    %rbp,%rsi
  add    %r12,%rcx
  mov    %rcx,%rdi
  mov    %rcx,(%rsp)
  call   <memcmp@plt>
  test   %eax,%eax
  jne    L168
  mov    (%rsp),%rcx
  mov    (%rcx,%rbx,1),%eax
  mov    0x8(%rsp),%rbx
  mov    %eax,(%rbx)
  jmp    L157
  nopl   0x0(%rax)
L188:
  mov    %r12,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r13d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%r14d
  cmp    %r13d,%ebx
  jne    L203
  mov    %eax,%edi
  mov    %ebx,%edx
  mov    %rbp,%rsi
  add    %r12,%rdi
  call   <memcmp@plt>
  test   %eax,%eax
  je     L157
L203:
  lea    0x0(%r13,%r14,1),%eax
  lea    0x4(%r12,%rax,1),%r12
  mov    %r12,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r13d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%eax
  add    %rax,%r12
  movzbl (%r12),%eax
  lea    0x1(%r13,%rax,1),%eax
  add    %rax,%r12
  cmpb   $0xff,(%r12)
  jne    L188
L56:
  xor    %r12d,%r12d
  jmp    L157
  nopw   0x0(%rax,%rax,1)
L168:
  lea    (%r14,%r15,1),%eax
  lea    0x4(%r12,%rax,1),%r12
  mov    %r12,%rdi
  call   <zipmapDecodeLength@plt>
  xor    %edi,%edi
  mov    %eax,%esi
  mov    %eax,%r14d
  call   <zipmapEncodeLength@plt>
  mov    %eax,%eax
  add    %rax,%r12
  movzbl (%r12),%eax
  lea    0x1(%r14,%rax,1),%eax
  add    %rax,%r12
  cmpb   $0xff,(%r12)
  jne    L2
  jmp    L56
```

assistant: ```c
unsigned char *zipmapXLookupRaw(unsigned char *zm, unsigned char *key, unsigned int klen, unsigned int *totlen, unsigned int *timestamp) {
  unsigned char *p = zm + 1, *k = NULL;
  unsigned int l, llen;
  while (*p != 255) {
    unsigned char free;
    l = zipmapDecodeLength(p);
    llen = zipmapEncodeLength(NULL, l);
    if (k == NULL && l == klen && !memcmp(p + llen, key, l)) {
      if (timestamp) {
        *timestamp = *(unsigned int *)(p + llen + l);
      }
      if (totlen != NULL) {
        k = p;
      } else {
        return p;
      }
    }
    p += llen + l + sizeof(unsigned int);
    l = zipmapDecodeLength(p);
    p += zipmapEncodeLength(NULL, l);
    free = p[0];
    p += l + 1 + free;
  }
  if (totlen != NULL)
    *totlen = (unsigned int)(p - zm) + 1;
  return k;
}
```