user: What is the c source code of the assembly code below:

```asm
<hash_url>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %esi,%ebx
  sub    $0x8,%rsp
  call   <strlen@plt>
  mov    %eax,%ecx
  shr    %ecx
  cmp    %ecx,%eax
  jbe    L193
  mov    %eax,%r8d
  sub    %ecx,%r8d
  lea    -0x1(%r8),%edx
  cmp    $0xe,%edx
  jbe    L130
  mov    %r8d,%edx
  pxor   %xmm2,%xmm2
  pxor   %xmm5,%xmm5
  mov    %ecx,%esi
  shr    $0x4,%edx
  add    %rbp,%rsi
  movdqa D5(%rip),%xmm4
  lea    -0x1(%rdx),%edi
  lea    0x10(%rsi),%rdx
  shl    $0x4,%rdi
  add    %rdx,%rdi
  jmp    L63
  xchg   %ax,%ax
L71:
  add    $0x10,%rdx
L63:
  movdqu (%rsi),%xmm0
  movdqa %xmm5,%xmm1
  mov    %rdx,%rsi
  pcmpgtb %xmm0,%xmm1
  movdqa %xmm0,%xmm3
  punpcklbw %xmm1,%xmm3
  punpckhbw %xmm1,%xmm0
  movdqa %xmm4,%xmm1
  pmullw %xmm0,%xmm1
  pmulhw %xmm4,%xmm0
  movdqa %xmm1,%xmm6
  punpckhwd %xmm0,%xmm1
  punpcklwd %xmm0,%xmm6
  movdqa %xmm4,%xmm0
  pmullw %xmm3,%xmm0
  pmulhw %xmm4,%xmm3
  pxor   %xmm6,%xmm1
  movdqa %xmm0,%xmm6
  punpckhwd %xmm3,%xmm0
  punpcklwd %xmm3,%xmm6
  pxor   %xmm6,%xmm0
  pxor   %xmm0,%xmm1
  pxor   %xmm1,%xmm2
  cmp    %rdi,%rdx
  jne    L71
  movdqa %xmm2,%xmm0
  mov    %r8d,%esi
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%esi
  pxor   %xmm0,%xmm2
  add    %esi,%ecx
  movdqa %xmm2,%xmm0
  psrldq $0x4,%xmm0
  pxor   %xmm0,%xmm2
  movd   %xmm2,%edx
  cmp    %esi,%r8d
  je     L165
L2:
  mov    %ecx,%esi
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x1(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x2(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x3(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x4(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x5(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x6(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x7(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x8(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0x9(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0xa(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0xb(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0xc(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  lea    0xd(%rcx),%esi
  cmp    %esi,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rsi,1),%esi
  add    $0xe,%ecx
  imul   $0x10f,%esi,%esi
  xor    %esi,%edx
  cmp    %ecx,%eax
  jbe    L165
  movsbl 0x0(%rbp,%rcx,1),%ecx
  imul   $0x10f,%ecx,%ecx
  xor    %ecx,%edx
L165:
  imul   $0x10f,%eax,%eax
  add    $0x8,%rsp
  xor    %edx,%eax
  xor    %edx,%edx
  div    %ebx
  pop    %rbx
  pop    %rbp
  mov    %edx,%eax
  ret
  nop
L193:
  xor    %edx,%edx
  jmp    L165
L130:
  xor    %edx,%edx
  jmp    L2
```

tool_calls: name: retrieve_data
arguments: data_label: D5
datatype: byte[16]

tool: {"D5": [0x0f,0x01,0x0f,0x01,0x0f,0x01,0x0f,0x01,0x0f,0x01,0x0f,0x01,0x0f,0x01,0x0f,0x01]}

assistant: ```c
unsigned int hash_url(const void *data, unsigned int size) {
  const char *s = data;
  unsigned int i, j, n;
  j = strlen(s);
  for (i = j / 2, n = 0; i < j; i++)
    n ^= 271 * (unsigned)s[i];
  i = n ^ (j * 271);
  return i % size;
}
```