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

```asm
<fossilize>:
  endbr64
  push   %r15
  mov    %esi,%edx
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  test   %esi,%esi
  js     L96
  test   %edx,%edx
  jle    L718
L437:
  lea    -0x1(%rdx),%ebx
  cmp    $0xe,%ebx
  jbe    L464
  mov    %edx,%ecx
  mov    %r12,%rax
  pxor   %xmm2,%xmm2
  movdqa D3(%rip),%xmm8
  shr    $0x4,%ecx
  pxor   %xmm3,%xmm3
  pxor   %xmm4,%xmm4
  movdqa D24(%rip),%xmm7
  sub    $0x1,%ecx
  movdqa D1(%rip),%xmm6
  movdqa D49(%rip),%xmm5
  shl    $0x4,%rcx
  lea    0x10(%r12,%rcx,1),%rcx
  nopl   0x0(%rax)
L24:
  movdqu (%rax),%xmm0
  add    $0x10,%rax
  movdqa %xmm0,%xmm10
  movdqa %xmm0,%xmm1
  paddb  %xmm7,%xmm1
  pcmpeqb %xmm6,%xmm0
  pand   %xmm8,%xmm10
  pcmpeqb %xmm3,%xmm10
  movdqa %xmm1,%xmm9
  psubusb %xmm5,%xmm9
  pcmpeqb %xmm3,%xmm9
  movdqa %xmm10,%xmm11
  pcmpeqb %xmm3,%xmm11
  pcmpeqb %xmm3,%xmm9
  pand   %xmm11,%xmm0
  pand   %xmm9,%xmm0
  movdqa %xmm1,%xmm9
  pminub %xmm5,%xmm9
  pcmpeqb %xmm9,%xmm1
  movdqa %xmm3,%xmm9
  pand   %xmm11,%xmm1
  por    %xmm10,%xmm1
  por    %xmm1,%xmm0
  pcmpgtb %xmm0,%xmm9
  movdqa %xmm0,%xmm1
  punpcklbw %xmm9,%xmm1
  punpckhbw %xmm9,%xmm0
  movdqa %xmm4,%xmm9
  pcmpgtw %xmm1,%xmm9
  movdqa %xmm1,%xmm10
  punpcklwd %xmm9,%xmm10
  punpckhwd %xmm9,%xmm1
  movdqa %xmm0,%xmm9
  psubd  %xmm10,%xmm2
  psubd  %xmm1,%xmm2
  movdqa %xmm4,%xmm1
  pcmpgtw %xmm0,%xmm1
  punpcklwd %xmm1,%xmm9
  punpckhwd %xmm1,%xmm0
  psubd  %xmm9,%xmm2
  psubd  %xmm0,%xmm2
  cmp    %rcx,%rax
  jne    L24
  movdqa %xmm2,%xmm0
  mov    %edx,%ecx
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%ecx
  paddd  %xmm0,%xmm2
  movdqa %xmm2,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm2
  movd   %xmm2,%eax
  test   $0xf,%dl
  je     L499
L336:
  movslq %ecx,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L674
L892:
  add    $0x1,%eax
L127:
  lea    0x1(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L239
L584:
  add    $0x1,%eax
L801:
  lea    0x2(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L71
L852:
  add    $0x1,%eax
L122:
  lea    0x3(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L746
L506:
  add    $0x1,%eax
L760:
  lea    0x4(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L561
L340:
  add    $0x1,%eax
L456:
  lea    0x5(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  je     L187
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L187
  cmp    $0x5c,%sil
  jne    L858
  nopl   0x0(%rax,%rax,1)
L187:
  add    $0x1,%eax
L858:
  lea    0x6(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  je     L768
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L768
  cmp    $0x5c,%sil
  jne    L284
  nopl   0x0(%rax,%rax,1)
L768:
  add    $0x1,%eax
L284:
  lea    0x7(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L133
L899:
  add    $0x1,%eax
L230:
  lea    0x8(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L354
L190:
  add    $0x1,%eax
L714:
  lea    0x9(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L388
L707:
  add    $0x1,%eax
L541:
  lea    0xa(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L724
L78:
  add    $0x1,%eax
L270:
  lea    0xb(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L252
L370:
  add    $0x1,%eax
L916:
  lea    0xc(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  jne    L822
L557:
  add    $0x1,%eax
L288:
  lea    0xd(%rcx),%esi
  cmp    %esi,%edx
  jle    L499
  movslq %esi,%rsi
  movzbl (%r12,%rsi,1),%esi
  test   $0xdf,%sil
  je     L663
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L663
  cmp    $0x5c,%sil
  je     L663
  nop
L588:
  add    $0xe,%ecx
  cmp    %ecx,%edx
  jle    L499
  movslq %ecx,%rcx
  movzbl (%r12,%rcx,1),%ecx
  test   $0xdf,%cl
  je     L925
  lea    -0x9(%rcx),%esi
  cmp    $0x4,%sil
  jbe    L925
  cmp    $0x5c,%cl
  je     L925
  xchg   %ax,%ax
L499:
  lea    0x1(%rax,%rdx,1),%edi
  xor    %ebp,%ebp
  call   <malloc@plt>
  lea    0x1(%r12,%rbx,1),%rcx
  mov    %rax,%r13
  test   %rax,%rax
  jne    L829
  jmp    L739
  nopw   0x0(%rax,%rax,1)
L616:
  movb   $0x5c,(%rbx)
  add    $0x2,%ebp
  movb   $0x30,(%r15)
L147:
  add    $0x1,%r12
  cmp    %r12,%rcx
  je     L575
L829:
  lea    0x1(%rbp),%r14d
  movsbl (%r12),%edi
  movslq %r14d,%rax
  lea    0x0(%r13,%rax,1),%r15
  movslq %ebp,%rax
  lea    0x0(%r13,%rax,1),%rbx
  test   %edi,%edi
  je     L616
  cmp    $0x5c,%edi
  jne    L900
  add    $0x1,%r12
  movb   $0x5c,(%rbx)
  add    $0x2,%ebp
  movb   $0x5c,(%r15)
  cmp    %r12,%rcx
  jne    L829
L575:
  movslq %ebp,%rax
  add    %r13,%rax
L667:
  movb   $0x0,(%rax)
L739:
  add    $0x18,%rsp
  mov    %r13,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L900:
  mov    %rcx,0x8(%rsp)
  mov    %dil,0x7(%rsp)
  call   <fossil_isspace@plt>
  movzbl 0x7(%rsp),%edx
  mov    0x8(%rsp),%rcx
  test   %rax,%rax
  je     L36
  lea    -0x9(%rdx),%eax
  movb   $0x5c,(%rbx)
  cmp    $0x17,%al
  ja     L772
  lea    D40(%rip),%rbx
  movzbl %al,%eax
  movslq (%rbx,%rax,4),%rax
  add    %rbx,%rax
  notrack jmp *%rax
  mov    $0x73,%edx
  nopl   0x0(%rax)
L772:
  mov    %dl,(%r15)
  add    $0x2,%ebp
  jmp    L147
  nopl   0x0(%rax,%rax,1)
L36:
  mov    %dl,(%rbx)
  mov    %r14d,%ebp
  jmp    L147
  nopw   0x0(%rax,%rax,1)
L674:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L892
  cmp    $0x5c,%sil
  jne    L127
  jmp    L892
  nopl   0x0(%rax)
L239:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L584
  cmp    $0x5c,%sil
  jne    L801
  jmp    L584
  nopl   0x0(%rax)
L71:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L852
  cmp    $0x5c,%sil
  jne    L122
  jmp    L852
  nopl   0x0(%rax)
L746:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L506
  cmp    $0x5c,%sil
  jne    L760
  jmp    L506
  nopl   0x0(%rax)
L561:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L340
  cmp    $0x5c,%sil
  jne    L456
  jmp    L340
  nopl   0x0(%rax)
L96:
  call   <strlen@plt>
  mov    %eax,%edx
  test   %edx,%edx
  jg     L437
L718:
  lea    0x1(%rdx),%edi
  call   <malloc@plt>
  mov    %rax,%r13
  test   %rax,%rax
  jne    L667
  jmp    L739
  nopl   0x0(%rax,%rax,1)
L133:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L899
  cmp    $0x5c,%sil
  jne    L230
  jmp    L899
  nopl   0x0(%rax)
L354:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L190
  cmp    $0x5c,%sil
  jne    L714
  jmp    L190
  nopl   0x0(%rax)
L388:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L707
  cmp    $0x5c,%sil
  jne    L541
  jmp    L707
  nopl   0x0(%rax)
L724:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L78
  cmp    $0x5c,%sil
  jne    L270
  jmp    L78
  nopl   0x0(%rax)
L252:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L370
  cmp    $0x5c,%sil
  jne    L916
  jmp    L370
  nopl   0x0(%rax)
L822:
  lea    -0x9(%rsi),%edi
  cmp    $0x4,%dil
  jbe    L557
  cmp    $0x5c,%sil
  jne    L288
  jmp    L557
  mov    $0x76,%edx
  jmp    L772
  mov    $0x74,%edx
  jmp    L772
  mov    $0x72,%edx
  jmp    L772
  mov    $0x66,%edx
  jmp    L772
  nopl   0x0(%rax)
L925:
  add    $0x1,%eax
  jmp    L499
L663:
  add    $0x1,%eax
  jmp    L588
L464:
  xor    %ecx,%ecx
  xor    %eax,%eax
  jmp    L336
  mov    $0x6e,%edx
  jmp    L772
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D3
type_infered: byte[16]
name: extract_symbolic_data
arguments: data_label: D24
type_infered: byte[16]
name: extract_symbolic_data
arguments: data_label: D1
type_infered: byte[16]
name: extract_symbolic_data
arguments: data_label: D49
type_infered: byte[16]

tool: {"D3": [0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf]}

tool: {"D24": [0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7]}

tool: {"D1": [0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c]}

tool: {"D49": [0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04]}

assistant: ```c
char *fossilize(const char *zIn, int nIn) {
  int n, i, j, c;
  char *zOut;
  if (nIn < 0)
    nIn = strlen(zIn);
  for (i = n = 0; i < nIn; i++) {
    c = zIn[i];
    if (c == 0 || c == ' ' || c == '\n' || c == '\t' || c == '\r' || c == '\f' || c == '\v' || c == '\\')
      n++;
  }
  n += nIn;
  zOut = malloc(n + 1);
  if (zOut) {
    for (i = j = 0; i < nIn; i++) {
      int c = zIn[i];
      if (c == 0) {
        zOut[j++] = '\\';
        zOut[j++] = '0';
      } else if (c == '\\') {
        zOut[j++] = '\\';
        zOut[j++] = '\\';
      } else if (fossil_isspace(c)) {
        zOut[j++] = '\\';
        switch (c) {
        case '\n':
          c = 'n';
          break;
        case ' ':
          c = 's';
          break;
        case '\t':
          c = 't';
          break;
        case '\r':
          c = 'r';
          break;
        case '\v':
          c = 'v';
          break;
        case '\f':
          c = 'f';
          break;
        }
        zOut[j++] = c;
      } else {
        zOut[j++] = c;
      }
    }
    zOut[j] = 0;
  }
  return zOut;
}
```