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

```asm
<fill_candidate>:
  endbr64
  movsbl %sil,%esi
  push   %r14
  mov    %rdx,%r14
  push   %r13
  lea    -0x30(%rsi),%edx
  mov    %rdi,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  mov    %r8,%rbp
  push   %rbx
  xor    %ebx,%ebx
  test   %r8,%r8
  jne    L258
  jmp    L27
  nopl   0x0(%rax,%rax,1)
L275:
  add    $0x1,%rbx
  add    $0x30,%eax
  mov    %al,-0x1(%r13,%rbx,1)
  cmp    %rbx,%rbp
  je     L27
L258:
  mov    (%r12,%rbx,4),%eax
  cmp    %edx,%eax
  jle    L275
  test   %r14,%r14
  je     L101
L248:
  test   %r14,%r14
  mov    $0x1,%edx
  lea    0x0(%r13,%rbx,1),%rdi
  cmovne %r14,%rdx
  call   <memset@plt>
  xor    %edx,%edx
  lea    -0x1(%r14),%rax
  test   %r14,%r14
  cmove  %rdx,%rax
  lea    0x1(%rbx,%rax,1),%rsi
L124:
  cmp    %rbx,%rbp
  jbe    L168
  mov    %rbp,%rdi
  lea    (%r12,%rbx,4),%rax
  lea    (%r12,%rbp,4),%r8
  sub    %rbx,%rdi
  lea    0x0(%r13,%rsi,1),%rdx
  lea    (%rsi,%rdi,1),%rcx
  add    %r13,%rcx
  cmp    %rcx,%rax
  setae  %cl
  cmp    %r8,%rdx
  setae  %r8b
  or     %r8b,%cl
  je     L13
  lea    -0x1(%rdi),%rcx
  cmp    $0xe,%rcx
  jbe    L13
  mov    %rdi,%rcx
  movdqa D17(%rip),%xmm3
  movdqa D16(%rip),%xmm5
  shr    $0x4,%rcx
  shl    $0x6,%rcx
  add    %rax,%rcx
  nopl   0x0(%rax,%rax,1)
L70:
  movdqu 0x10(%rax),%xmm6
  movdqu (%rax),%xmm0
  add    $0x40,%rax
  add    $0x10,%rdx
  movdqa %xmm0,%xmm1
  punpcklwd %xmm6,%xmm0
  punpckhwd %xmm6,%xmm1
  movdqa %xmm0,%xmm2
  movdqu -0x10(%rax),%xmm6
  punpckhwd %xmm1,%xmm2
  punpcklwd %xmm1,%xmm0
  movdqu -0x20(%rax),%xmm1
  punpcklwd %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  punpcklwd %xmm6,%xmm1
  pand   %xmm3,%xmm0
  punpckhwd %xmm6,%xmm2
  movdqa %xmm1,%xmm4
  punpckhwd %xmm2,%xmm4
  punpcklwd %xmm2,%xmm1
  punpcklwd %xmm4,%xmm1
  pand   %xmm3,%xmm1
  packuswb %xmm1,%xmm0
  paddb  %xmm5,%xmm0
  movups %xmm0,-0x10(%rdx)
  cmp    %rcx,%rax
  jne    L70
  mov    %rdi,%rax
  and    $0xfffffffffffffff0,%rax
  add    %rax,%rbx
  lea    (%rsi,%rax,1),%rdx
  cmp    %rax,%rdi
  je     L168
  movzbl (%r12,%rbx,4),%esi
  lea    0x0(,%rbx,4),%rax
  lea    0x30(%rsi),%ecx
  mov    %cl,0x0(%r13,%rdx,1)
  lea    0x1(%rbx),%rcx
  cmp    %rbp,%rcx
  jae    L168
  movzbl 0x4(%r12,%rax,1),%esi
  lea    0x30(%rsi),%ecx
  mov    %cl,0x1(%r13,%rdx,1)
  lea    0x2(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x8(%r12,%rax,1),%esi
  lea    0x30(%rsi),%ecx
  mov    %cl,0x2(%r13,%rdx,1)
  lea    0x3(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0xc(%r12,%rax,1),%edi
  lea    0x30(%rdi),%ecx
  mov    %cl,0x3(%r13,%rdx,1)
  lea    0x4(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x10(%r12,%rax,1),%esi
  lea    0x30(%rsi),%ecx
  mov    %cl,0x4(%r13,%rdx,1)
  lea    0x5(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x14(%r12,%rax,1),%edi
  lea    0x30(%rdi),%ecx
  mov    %cl,0x5(%r13,%rdx,1)
  lea    0x6(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x18(%r12,%rax,1),%edi
  lea    0x30(%rdi),%ecx
  mov    %cl,0x6(%r13,%rdx,1)
  lea    0x7(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x1c(%r12,%rax,1),%esi
  lea    0x30(%rsi),%ecx
  mov    %cl,0x7(%r13,%rdx,1)
  lea    0x8(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x20(%r12,%rax,1),%edi
  lea    0x30(%rdi),%ecx
  mov    %cl,0x8(%r13,%rdx,1)
  lea    0x9(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x24(%r12,%rax,1),%esi
  lea    0x30(%rsi),%ecx
  mov    %cl,0x9(%r13,%rdx,1)
  lea    0xa(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x28(%r12,%rax,1),%edi
  lea    0x30(%rdi),%ecx
  mov    %cl,0xa(%r13,%rdx,1)
  lea    0xb(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x2c(%r12,%rax,1),%edi
  lea    0x30(%rdi),%ecx
  mov    %cl,0xb(%r13,%rdx,1)
  lea    0xc(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x30(%r12,%rax,1),%esi
  lea    0x30(%rsi),%ecx
  mov    %cl,0xc(%r13,%rdx,1)
  lea    0xd(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L168
  movzbl 0x34(%r12,%rax,1),%edi
  add    $0xe,%rbx
  lea    0x30(%rdi),%ecx
  mov    %cl,0xd(%r13,%rdx,1)
  cmp    %rbx,%rbp
  jbe    L168
  mov    0x38(%r12,%rax,1),%eax
  add    $0x30,%eax
  mov    %al,0xe(%r13,%rdx,1)
L168:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  xchg   %ax,%ax
L27:
  test   %r14,%r14
  jne    L248
  jmp    L168
L101:
  mov    %rbx,%rsi
  jmp    L124
  nopl   0x0(%rax,%rax,1)
L13:
  sub    %rbx,%rsi
  mov    %rsi,%rdx
  add    %r13,%rdx
  nopl   0x0(%rax)
L152:
  add    $0x1,%rbx
  movzbl -0x4(%r12,%rbx,4),%eax
  add    $0x30,%eax
  mov    %al,-0x1(%rdx,%rbx,1)
  cmp    %rbp,%rbx
  jne    L152
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D17
datatype: byte[16]
name: retrieve_data
arguments: data_tag: D16
datatype: byte[16]

tool: {"D17": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

tool: {"D16": [0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30]}

assistant: ```c
void fill_candidate(char *candidate, char run_digit, size_t run_len, const int *rest_digits, size_t rest_len) {
  size_t i = 0;
  size_t j = 0;
  int run_val = run_digit - '0';
  while (i < rest_len && rest_digits[i] <= run_val)
    candidate[j++] = rest_digits[i++] + '0';
  for (size_t k = 0; k < run_len; k++)
    candidate[j++] = run_digit;
  while (i < rest_len)
    candidate[j++] = rest_digits[i++] + '0';
}
```