user: 请从给定的汇编指令推导出C源代码:

```asm
<http_unchunk_data>:
  endbr64
  mov    %rdi,%r8
  movzbl (%rdi),%edx
  mov    %rdi,%rax
  mov    $0x0,%edi
  mov    $0x1,%r10d
  mov    $0x1,%r9d
  cmp    $0x3c,%dl
  jne    L51
  jmp    L199
L52:
  add    $0x1,%rax
  movzbl (%rax),%edx
  test   %dl,%dl
  je     L268
L199:
  lea    -0x9(%rdx),%ecx
  cmp    $0x1,%cl
  jbe    L52
  cmp    $0xd,%dl
  je     L52
  mov    %dl,(%r8)
  add    $0x1,%r8
  jmp    L52
L268:
  movb   $0x0,(%r8)
  ret
L260:
  lea    -0x41(%rdx),%esi
  cmp    $0x5,%sil
  ja     L90
  movsbl %dl,%edx
  lea    -0x37(%rdi,%rdx,1),%edi
  jmp    L257
L90:
  lea    -0x61(%rdx),%esi
  sar    $0x4,%edi
  cmp    $0x5,%sil
  ja     L13
  movsbl %dl,%edx
  lea    -0x57(%rcx,%rdx,1),%edi
  jmp    L257
L13:
  test   %edi,%edi
  je     L39
  lea    -0x9(%rdx),%ecx
  cmp    $0x1,%cl
  jbe    L226
  cmp    $0xd,%dl
  jne    L98
L226:
  add    $0x1,%rax
  movzbl (%rax),%edx
  lea    -0x9(%rdx),%ecx
  cmp    $0x1,%cl
  jbe    L226
  cmp    $0xd,%dl
  je     L226
  test   %edi,%edi
  jle    L153
L192:
  mov    %rax,%rdx
  lea    (%rdi,%rax,1),%r11d
  jmp    L120
L104:
  add    $0x1,%rdx
  mov    %r11d,%ecx
  sub    %edx,%ecx
  test   %ecx,%ecx
  jle    L7
L120:
  movzbl (%rdx),%ecx
  lea    -0x9(%rcx),%esi
  cmp    $0x1,%sil
  jbe    L104
  cmp    $0xd,%cl
  je     L104
  mov    %cl,(%r8)
  add    $0x1,%r8
  jmp    L104
L7:
  lea    -0x1(%rdi),%ecx
  mov    %ecx,%edx
  add    $0x1,%rdx
  test   %edi,%edi
  cmovle %r10,%rdx
  add    %rdx,%rax
  test   %edi,%edi
  mov    $0x1,%edx
  cmovg  %edi,%edx
  mov    %r9d,%edi
  sub    %edx,%edi
  add    %ecx,%edi
L153:
  movzbl (%rax),%edx
  lea    -0x9(%rdx),%ecx
  cmp    $0x1,%cl
  jbe    L157
  cmp    $0xd,%dl
  jne    L51
L157:
  add    $0x1,%rax
  movzbl (%rax),%edx
  lea    -0x9(%rdx),%ecx
  cmp    $0x1,%cl
  jbe    L157
  cmp    $0xd,%dl
  je     L157
L51:
  movzbl (%rax),%edx
  cmp    $0xa,%dl
  je     L13
  cmp    $0xd,%dl
  je     L13
  shl    $0x4,%edi
  mov    %edi,%ecx
  lea    -0x30(%rdx),%esi
  cmp    $0x9,%sil
  ja     L260
  movsbl %dl,%edx
  lea    -0x30(%rdi,%rdx,1),%edi
L257:
  add    $0x1,%rax
  jmp    L51
L39:
  movb   $0x0,(%r8)
  ret
L98:
  test   %edi,%edi
  jg     L192
  jmp    L51
```

assistant: ```c
void __attribute__((visibility("hidden"))) http_unchunk_data(char *buffer) {
  char *temp = buffer;
  char *p = buffer;
  int chunklen = 0;
  if (*p == '<') {
    while (*p) {
      if (!(*p == '\n' || *p == '\r' || *p == '\t')) {
        *temp = *p;
        temp++;
      }
      p++;
    }
    *temp = '\0';
    return;
  }
  while (1) {
    while (*p != '\n' && *p != '\r') {
      chunklen = chunklen << 4;
      if ('0' <= *p && *p <= '9')
        chunklen += *p - '0';
      else if ('A' <= *p && *p <= 'F')
        chunklen += 10 - 'A' + *p;
      else if ('a' <= *p && *p <= 'f')
        chunklen += 10 + *p - 'a';
      else {
        chunklen = chunklen >> 4;
        break;
      }
      p++;
    }
    if (chunklen == 0)
      break;
    while (*p == '\n' || *p == '\r' || *p == '\t')
      p++;
    while (chunklen > 0) {
      if (!(*p == '\n' || *p == '\r' || *p == '\t')) {
        *temp = *p;
        temp++;
      }
      p++;
      chunklen--;
    }
    while (*p == '\n' || *p == '\r' || *p == '\t')
      p++;
  }
  *temp = '\0';
}
```