user: What would the C source look like for the assembly code provided here?

```asm
<uInCIDR6Format32>:
  endbr64
  push   %r15
  mov    %r9,%r15
  push   %r14
  mov    %rcx,%r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %rsi,%r12
  mov    $0x2f,%esi
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %r8,0x8(%rsp)
  call   <strchr@plt>
  test   %rax,%rax
  je     L51
  mov    0x68(%rsp),%rdx
  lea    D32(%rip),%rsi
  mov    %rax,%rdi
  mov    %rax,%rbx
  call   <sscanf@plt>
  test   %eax,%eax
  je     L21
  movsbl 0x1(%rbx),%edi
  call   <isdigit@plt>
  test   %eax,%eax
  je     L21
  mov    0x68(%rsp),%rax
  cmpl   $0x80,(%rax)
  ja     L49
  sub    $0x8,%rsp
  movb   $0x0,(%rbx)
  mov    %r15,%r9
  mov    %r14,%rcx
  push   0x68(%rsp)
  mov    %r13,%rdx
  mov    %r12,%rsi
  mov    %rbp,%rdi
  push   0x68(%rsp)
  push   0x68(%rsp)
  mov    0x28(%rsp),%r8
  call   <uInIpv6Format32@plt>
  add    $0x20,%rsp
  test   %eax,%eax
  je     L16
  mov    0x68(%rsp),%rax
  movb   $0x2f,(%rbx)
  lea    D7(%rip),%rdi
  mov    (%rax),%esi
  xor    %eax,%eax
  call   <printf@plt>
  add    $0x18,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L21:
  lea    D49(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
L10:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L16:
  lea    D35(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  jmp    L10
L51:
  lea    D38(%rip),%rdi
  call   <puts@plt>
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L49:
  lea    D10(%rip),%rdi
  call   <puts@plt>
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: unpack_data
arguments: label: D32
type_infered: string
name: unpack_data
arguments: label: D7
type_infered: string
name: unpack_data
arguments: label: D49
type_infered: string
name: unpack_data
arguments: label: D35
type_infered: string
name: unpack_data
arguments: label: D38
type_infered: string
name: unpack_data
arguments: label: D10
type_infered: string

tool: D32: /%u

tool: D7: uInCIDR6Format32: /%u


tool: D49: err /(invalid CIDR mask)

tool: D35: err !uInIpv6Format

tool: D38: err no /

tool: D10: err CIDR mask out of range 0-128

assistant: ```c
unsigned uInCIDR6Format32(const char *cCIDR6, unsigned *h1, unsigned *h2, unsigned *h3, unsigned *h4, unsigned *h5, unsigned *h6, unsigned *h7, unsigned *h8, unsigned *uCIDR) {
  char *cp;
  if ((cp = strchr(cCIDR6, '/'))) {
    unsigned uCount = 0;
    uCount = sscanf(cp, "/%u", uCIDR);
    if (!uCount || !isdigit(*(cp + 1))) {
      printf("err /(invalid CIDR mask)\n");
      return (0);
    } else if (*uCIDR > 128) {
      printf("err CIDR mask out of range 0-128\n");
      return (0);
    }
    *cp = 0;
  } else {
    printf("err no /\n");
    return (0);
  }
  if (!uInIpv6Format32(cCIDR6, h1, h2, h3, h4, h5, h6, h7, h8)) {
    printf("err !uInIpv6Format\n");
    return (0);
  }
  *cp = '/';
  printf("uInCIDR6Format32: /%u\n", *uCIDR);
  return (1);
}
```