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

```asm
<ex8>:
  endbr64
  mov    %rdi,%rcx
  mov    %rsi,%rdi
  test   %edx,%edx
  jle    L130
  movslq %edx,%rax
  lea    (%rcx,%rax,4),%rsi
  cmp    %rsi,%rdi
  setae  %sil
  add    %rdi,%rax
  cmp    %rax,%rcx
  setae  %al
  or     %al,%sil
  je     L127
  lea    -0x1(%rdx),%eax
  cmp    $0xe,%eax
  jbe    L127
  pxor   %xmm8,%xmm8
  mov    %edx,%r8d
  mov    %rcx,%rax
  mov    %rdi,%rsi
  movdqa D0(%rip),%xmm7
  movdqa %xmm8,%xmm0
  shr    $0x4,%r8d
  pxor   %xmm6,%xmm6
  sub    $0x1,%r8d
  pcmpgtb %xmm7,%xmm0
  movdqa %xmm7,%xmm9
  shl    $0x6,%r8
  lea    0x40(%rcx,%r8,1),%r8
  punpcklbw %xmm0,%xmm9
  punpckhbw %xmm0,%xmm7
L86:
  movdqu (%rsi),%xmm0
  movdqa %xmm6,%xmm4
  movdqa %xmm6,%xmm5
  add    $0x40,%rax
  movdqa %xmm8,%xmm2
  movdqu -0x30(%rax),%xmm3
  movdqu -0x20(%rax),%xmm10
  add    $0x10,%rsi
  pcmpgtb %xmm0,%xmm2
  movdqa %xmm0,%xmm1
  punpcklbw %xmm2,%xmm1
  punpckhbw %xmm2,%xmm0
  pmullw %xmm9,%xmm1
  pmullw %xmm7,%xmm0
  pcmpgtw %xmm1,%xmm4
  pcmpgtw %xmm0,%xmm5
  movdqa %xmm1,%xmm2
  punpckhwd %xmm4,%xmm2
  punpcklwd %xmm4,%xmm1
  movdqu -0x40(%rax),%xmm4
  paddd  %xmm2,%xmm3
  movdqa %xmm0,%xmm2
  punpckhwd %xmm5,%xmm0
  punpcklwd %xmm5,%xmm2
  movdqu -0x10(%rax),%xmm5
  paddd  %xmm4,%xmm1
  movups %xmm3,-0x30(%rax)
  paddd  %xmm10,%xmm2
  movups %xmm1,-0x40(%rax)
  paddd  %xmm5,%xmm0
  movups %xmm2,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %r8,%rax
  jne    L86
  mov    %edx,%esi
  and    $0xfffffff0,%esi
  test   $0xf,%dl
  je     L130
  mov    %esi,%r8d
  lea    0x0(,%r8,4),%rax
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,(%rcx,%rax,1)
  lea    0x1(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x4(%rcx,%rax,1)
  lea    0x2(%rsi),%r8d
  cmp    %edx,%r8d
  jge    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x8(%rcx,%rax,1)
  lea    0x3(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0xc(%rcx,%rax,1)
  lea    0x4(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x10(%rcx,%rax,1)
  lea    0x5(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x14(%rcx,%rax,1)
  lea    0x6(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x18(%rcx,%rax,1)
  lea    0x7(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x1c(%rcx,%rax,1)
  lea    0x8(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x20(%rcx,%rax,1)
  lea    0x9(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x24(%rcx,%rax,1)
  lea    0xa(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x28(%rcx,%rax,1)
  lea    0xb(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x2c(%rcx,%rax,1)
  lea    0xc(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x30(%rcx,%rax,1)
  lea    0xd(%rsi),%r8d
  cmp    %r8d,%edx
  jle    L130
  movslq %r8d,%r8
  add    $0xe,%esi
  movsbl (%rdi,%r8,1),%r8d
  shl    $0x2,%r8d
  add    %r8d,0x34(%rcx,%rax,1)
  cmp    %esi,%edx
  jle    L130
  movslq %esi,%rsi
  movsbl (%rdi,%rsi,1),%edx
  shl    $0x2,%edx
  add    %edx,0x38(%rcx,%rax,1)
  ret
  nopw   0x0(%rax,%rax,1)
L127:
  mov    %edx,%edx
  xor    %eax,%eax
  nopl   0x0(%rax)
L82:
  movsbl (%rdi,%rax,1),%esi
  shl    $0x2,%esi
  add    %esi,(%rcx,%rax,4)
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L82
L130:
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D0
type_infered: byte[16]

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

assistant: ```c
void ex8(int *A, char *B, int n, int k) {
  for (int i = 0; i < n; ++i)
    A[i] += 4 * B[i];
}
```