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

```asm
<double_string>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    (%rdi),%rdi
  movsbl (%rdi),%eax
  sub    $0x35,%eax
  mov    $0x0,%ebp
  cmp    $0x4,%eax
  jbe    L73
L62:
  mov    (%rbx),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jle    L67
  movslq %eax,%r10
  lea    -0x1(%r10),%rdx
  movslq %ebp,%rbp
  lea    -0x1(%r10,%rbp,1),%rdi
  sub    $0x2,%r10
  lea    -0x1(%rax),%eax
  sub    %rax,%r10
  mov    $0x0,%esi
  lea    D4(%rip),%r9
  mov    $0x1,%r11d
  mov    $0x0,%ebp
  jmp    L116
L73:
  call   <strlen@plt>
  lea    0x2(%rax),%esi
  mov    (%rbx),%rdi
  call   <realloc@plt>
  mov    %rax,%rbp
  mov    %rax,(%rbx)
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    0x1(%rbp,%rax,1),%r12
  movb   $0x0,(%r12)
  mov    (%rbx),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  movzbl (%r12),%edx
  cltq
  mov    %dl,0x0(%rbp,%rax,1)
  mov    $0x1,%ebp
  jmp    L62
  add    $0x30,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %eax,%esi
L99:
  sub    $0x1,%rdx
  sub    $0x1,%rdi
  cmp    %r10,%rdx
  je     L155
L116:
  mov    (%rbx),%r8
  movsbl (%r8,%rdx,1),%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  ja     L99
  mov    %eax,%ecx
  movslq (%r9,%rcx,4),%rcx
  add    %r9,%rcx
  notrack jmp *%rcx
  add    $0x32,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %ebp,%esi
  jmp    L99
  add    $0x34,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %ebp,%esi
  jmp    L99
  add    $0x36,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %ebp,%esi
  jmp    L99
  add    $0x38,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %ebp,%esi
  jmp    L99
  add    $0x30,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %r11d,%esi
  jmp    L99
  add    $0x32,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %r11d,%esi
  jmp    L99
  add    $0x34,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %r11d,%esi
  jmp    L99
  add    $0x36,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %r11d,%esi
  jmp    L99
  add    $0x38,%esi
  mov    %sil,(%r8,%rdi,1)
  mov    %r11d,%esi
  jmp    L99
L155:
  test   %esi,%esi
  je     L67
  mov    (%rbx),%rax
  movb   $0x31,(%rax)
L67:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
void double_string(char **in) {
  int first = **in - 48;
  int ra = 0;
  if ((first == 5) || (first == 6) || (first == 7) || (first == 8) || (first == 9)) {
    *in = realloc(*in, strlen(*in) + 2);
    ra = 1;
    *(*in + strlen(*in)) = *(*in + strlen(*in) + 1) = 0;
  }
  int carry = 0;
  int j;
  for (j = strlen(*in); j > 0; --j) {
    int i = j - 1;
    switch (*(*in + i) - 48) {
    case 0:
      *(*in + i + ra) = 0 + 48 + carry;
      carry = 0;
      break;
    case 1:
      *(*in + i + ra) = 2 + 48 + carry;
      carry = 0;
      break;
    case 2:
      *(*in + i + ra) = 4 + 48 + carry;
      carry = 0;
      break;
    case 3:
      *(*in + i + ra) = 6 + 48 + carry;
      carry = 0;
      break;
    case 4:
      *(*in + i + ra) = 8 + 48 + carry;
      carry = 0;
      break;
    case 5:
      *(*in + i + ra) = 0 + 48 + carry;
      carry = 1;
      break;
    case 6:
      *(*in + i + ra) = 2 + 48 + carry;
      carry = 1;
      break;
    case 7:
      *(*in + i + ra) = 4 + 48 + carry;
      carry = 1;
      break;
    case 8:
      *(*in + i + ra) = 6 + 48 + carry;
      carry = 1;
      break;
    case 9:
      *(*in + i + ra) = 8 + 48 + carry;
      carry = 1;
      break;
    }
  }
  if (carry) {
    **in = 0 + 48 + carry;
    carry = 0;
  }
}
```