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

```asm
<_geohex_itoa_with_base>:
  endbr64
  test   %rdi,%rdi
  je     L28
  cmp    $0x1,%rsi
  jbe    L28
  push   %r15
  mov    %rdx,%r8
  mov    %rcx,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  cmp    %rcx,%rdx
  ja     L109
  mov    %rcx,%rax
  xor    %edx,%edx
  div    %r8
  mov    %rax,%r14
  lea    -0x1(%rsi),%rax
  mov    %rdx,%r15
  cmp    $0x1,%rax
  jbe    L172
  cmp    %r8,%r14
  jb     L20
  mov    %r14,%rax
  xor    %edx,%edx
  div    %r8
  mov    %rax,%r10
  lea    -0x2(%rsi),%rax
  mov    %rdx,%r14
  cmp    $0x1,%rax
  jbe    L172
  cmp    %r10,%r8
  ja     L24
  mov    %r10,%rax
  xor    %edx,%edx
  div    %r8
  mov    %rax,%r11
  lea    -0x3(%rsi),%rax
  mov    %rdx,%r10
  cmp    $0x1,%rax
  jbe    L172
  cmp    %r11,%r8
  ja     L260
  mov    %r11,%rax
  xor    %edx,%edx
  div    %r8
  mov    %rdx,%r11
  lea    -0x4(%rsi),%rdx
  mov    %rax,0x18(%rsp)
  cmp    $0x1,%rdx
  jbe    L172
  cmp    %rax,%r8
  ja     L190
  xor    %edx,%edx
  div    %r8
  mov    %rax,%rbx
  lea    -0x5(%rsi),%rax
  mov    %rdx,0x18(%rsp)
  cmp    $0x1,%rax
  jbe    L172
  cmp    %rbx,%r8
  ja     L189
  mov    %rbx,%rax
  xor    %edx,%edx
  div    %r8
  mov    %rax,%rbp
  lea    -0x6(%rsi),%rax
  mov    %rdx,%rbx
  cmp    $0x1,%rax
  jbe    L172
  cmp    %rbp,%r8
  ja     L106
  mov    %rbp,%rax
  xor    %edx,%edx
  div    %r8
  mov    %rax,%r13
  lea    -0x7(%rsi),%rax
  mov    %rdx,%rbp
  cmp    $0x1,%rax
  jbe    L172
  cmp    %r13,%r8
  ja     L223
  mov    %r13,%rax
  xor    %edx,%edx
  div    %r8
  mov    %rax,%r12
  lea    -0x8(%rsi),%rax
  mov    %rdx,%r13
  cmp    $0x1,%rax
  jbe    L172
  cmp    %r12,%r8
  ja     L288
  mov    %r12,%rax
  xor    %edx,%edx
  sub    $0x9,%rsi
  mov    %r11,0x10(%rsp)
  div    %r8
  mov    %r10,0x8(%rsp)
  mov    %rdx,%r12
  mov    %rax,%rcx
  mov    %r8,%rdx
  call   <_geohex_itoa_with_base>
  mov    0x8(%rsp),%r10
  mov    0x10(%rsp),%r11
  test   %rax,%rax
  je     L172
L277:
  lea    D59(%rip),%rdx
  movb   $0x0,0x1(%rax)
  lea    0x1(%rax),%rdi
  movzbl (%rdx,%r12,1),%ecx
  mov    %cl,(%rax)
L56:
  movzbl (%rdx,%r13,1),%eax
  movb   $0x0,0x1(%rdi)
  add    $0x1,%rdi
  mov    %al,-0x1(%rdi)
L103:
  movzbl (%rdx,%rbp,1),%ecx
  movb   $0x0,0x1(%rdi)
  lea    0x1(%rdi),%rax
  mov    %cl,(%rdi)
L2:
  movzbl (%rdx,%rbx,1),%esi
  movb   $0x0,0x1(%rax)
  lea    0x1(%rax),%rcx
  mov    %sil,(%rax)
L281:
  mov    0x18(%rsp),%rax
  movb   $0x0,0x1(%rcx)
  lea    0x1(%rcx),%rdi
  movzbl (%rdx,%rax,1),%eax
  mov    %al,(%rcx)
L46:
  movzbl (%rdx,%r11,1),%eax
  movb   $0x0,0x1(%rdi)
  add    $0x1,%rdi
  mov    %al,-0x1(%rdi)
L110:
  movzbl (%rdx,%r10,1),%eax
  movb   $0x0,0x1(%rdi)
  add    $0x1,%rdi
  mov    %al,-0x1(%rdi)
L48:
  movzbl (%rdx,%r14,1),%eax
  movb   $0x0,0x1(%rdi)
  add    $0x1,%rdi
  mov    %al,-0x1(%rdi)
L71:
  movzbl (%rdx,%r15,1),%edx
  movb   $0x0,0x1(%rdi)
  lea    0x1(%rdi),%rax
  mov    %dl,(%rdi)
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L223:
  lea    D59(%rip),%rdx
  jmp    L56
L106:
  lea    D59(%rip),%rdx
  jmp    L103
L189:
  mov    %rdi,%rax
  lea    D59(%rip),%rdx
  jmp    L2
  nopw   0x0(%rax,%rax,1)
L288:
  mov    %rdi,%rax
  jmp    L277
L190:
  mov    %rdi,%rcx
  lea    D59(%rip),%rdx
  jmp    L281
L260:
  lea    D59(%rip),%rdx
  jmp    L46
L24:
  lea    D59(%rip),%rdx
  jmp    L110
L20:
  lea    D59(%rip),%rdx
  jmp    L48
  nopl   0x0(%rax,%rax,1)
L172:
  add    $0x28,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L109:
  lea    D59(%rip),%rdx
  jmp    L71
L28:
  xor    %eax,%eax
  ret
```

tool_calls: name: unpack_data
arguments: tag: D59
data_type: string

tool: D59: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

assistant: ```c
char *_geohex_itoa_with_base(register char *p, const size_t len, const uint8_t base, const uint64_t n) {
  if (p == NULL || len < 2L)
    return NULL;
  if (n < base) {
    const static char chr[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    *p++ = chr[n];
    *p = '\0';
    return p;
  } else {
    return _geohex_itoa_with_base(_geohex_itoa_with_base(p, len - 1L, base, n / (uint64_t)base), 2L, base, n % (uint64_t)base);
  }
}
```