user: Demonstrate the C code that generates the assembly output below:

```asm
<get_next_number>:
  endbr64
  mov    %rdi,%rcx
  mov    %rdx,%r8
  mov    %rsi,%rdi
  movzbl (%rcx),%edx
  cmp    $0x20,%dl
  je     L102
  cmp    $0x9,%dl
  jne    L138
L102:
  mov    $0x1,%eax
  nopl   0x0(%rax,%rax,1)
L385:
  movzbl (%rcx,%rax,1),%edx
  mov    %eax,%r9d
  mov    %rax,%rsi
  add    $0x1,%rax
  cmp    $0x20,%dl
  je     L385
  cmp    $0x9,%dl
  je     L385
L390:
  xor    %r10d,%r10d
  test   %dl,%dl
  je     L6
  cmp    $0x24,%dl
  je     L15
  cmp    $0x30,%dl
  je     L204
  cmp    $0x25,%dl
  je     L334
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  jbe    L167
  and    $0xffffffdf,%edx
  lea    -0x41(%rdx),%eax
  cmp    $0x5,%al
  ja     L6
L167:
  movslq %r9d,%r10
  push   %rbp
  push   %rbx
  movsbl (%rcx,%r10,1),%edx
  lea    -0x30(%rdx),%r11d
  mov    %edx,%eax
  mov    %edx,%esi
  cmp    $0x9,%r11b
  jbe    L223
L358:
  and    $0xffffffdf,%eax
  sub    $0x41,%eax
  cmp    $0x5,%al
  jbe    L306
  and    $0xffffffdf,%esi
  cmp    $0x48,%sil
  jne    L367
L306:
  xor    %eax,%eax
  jmp    L176
  nopw   0x0(%rax,%rax,1)
L438:
  shl    $0x4,%eax
  lea    -0x30(%rax,%rdx,1),%eax
L373:
  movsbl 0x1(%rcx,%r10,1),%edx
  add    $0x1,%r10
L176:
  lea    -0x30(%rdx),%esi
  mov    %r10d,%r9d
  cmp    $0x9,%sil
  jbe    L438
  lea    -0x61(%rdx),%esi
  cmp    $0x5,%sil
  ja     L296
  shl    $0x4,%eax
  lea    -0x57(%rax,%rdx,1),%eax
  jmp    L373
  nopl   0x0(%rax,%rax,1)
L329:
  test   $0xdf,%dl
  je     L34
  cmp    $0x9,%dl
  jne    L116
L34:
  mov    %eax,(%rdi)
  mov    $0x1,%r10d
  test   %r8,%r8
  je     L6
  add    %r9d,(%r8)
L6:
  mov    %r10d,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L15:
  lea    0x1(%r9),%eax
L5:
  movslq %eax,%r10
  xor    %eax,%eax
  jmp    L130
  nopl   0x0(%rax,%rax,1)
L371:
  shl    $0x4,%eax
  lea    -0x30(%rax,%rdx,1),%eax
L350:
  add    $0x1,%r10
L130:
  movsbl (%rcx,%r10,1),%edx
  mov    %r10d,%r9d
  lea    -0x30(%rdx),%esi
  cmp    $0x9,%sil
  jbe    L371
  lea    -0x61(%rdx),%esi
  cmp    $0x5,%sil
  ja     L240
  shl    $0x4,%eax
  lea    -0x57(%rax,%rdx,1),%eax
  jmp    L350
  nopw   0x0(%rax,%rax,1)
L334:
  add    $0x1,%r9d
L38:
  movslq %r9d,%rax
  movzbl (%rcx,%rax,1),%esi
  lea    0x1(%rcx,%rax,1),%rcx
  xor    %eax,%eax
  test   %sil,%sil
  jne    L315
  jmp    L34
  nopl   0x0(%rax)
L448:
  movzbl (%rcx),%esi
  movsbl %dl,%edx
  add    $0x1,%rcx
  add    $0x1,%r9d
  lea    (%rdx,%rax,2),%eax
  test   %sil,%sil
  je     L34
L315:
  lea    -0x30(%rsi),%edx
  cmp    $0x1,%dl
  jbe    L448
  cmp    $0x20,%sil
  je     L34
  cmp    $0x9,%sil
  je     L34
L116:
  xor    %r10d,%r10d
  jmp    L6
  xchg   %ax,%ax
L138:
  xor    %r9d,%r9d
  xor    %esi,%esi
  jmp    L390
  nopw   0x0(%rax,%rax,1)
L240:
  lea    -0x41(%rdx),%esi
  cmp    $0x5,%sil
  ja     L329
  shl    $0x4,%eax
  lea    -0x37(%rax,%rdx,1),%eax
  jmp    L350
  nopl   0x0(%rax)
L296:
  lea    -0x41(%rdx),%esi
  cmp    $0x5,%sil
  ja     L64
  shl    $0x4,%eax
  lea    -0x37(%rax,%rdx,1),%eax
  jmp    L373
  nopl   (%rax)
L204:
  movzbl 0x1(%rcx,%rsi,1),%eax
  and    $0xffffffdf,%eax
  cmp    $0x58,%al
  je     L85
  cmp    $0x42,%al
  jne    L167
  add    $0x2,%r9d
  jmp    L38
L85:
  lea    0x2(%r9),%eax
  jmp    L5
  xchg   %ax,%ax
L64:
  mov    %edx,%ecx
  and    $0xffffffdf,%ecx
  cmp    $0x48,%cl
  je     L413
  cmp    $0x20,%dl
  ja     L87
  movabs $0x100000201,%rcx
  bt     %rdx,%rcx
  jb     L413
L87:
  xor    %r10d,%r10d
L56:
  mov    %r10d,%eax
  pop    %rbx
  pop    %rbp
  ret
L367:
  lea    0x1(%r9),%esi
  xor    %eax,%eax
  movslq %esi,%rsi
  cmp    $0x9,%r11b
  ja     L239
  nopw   0x0(%rax,%rax,1)
L359:
  lea    (%rax,%rax,4),%eax
  mov    %esi,%r9d
  lea    -0x30(%rdx,%rax,2),%eax
  movsbl (%rcx,%rsi,1),%edx
  add    $0x1,%rsi
  lea    -0x30(%rdx),%r10d
  cmp    $0x9,%r10b
  jbe    L359
L239:
  test   $0xdf,%dl
  je     L413
  xor    %r10d,%r10d
  cmp    $0x9,%dl
  jne    L56
L413:
  mov    %eax,(%rdi)
  mov    $0x1,%r10d
  test   %r8,%r8
  je     L56
  mov    %r10d,%eax
  pop    %rbx
  add    %r9d,(%r8)
  pop    %rbp
  ret
L223:
  lea    0x1(%rcx,%r10,1),%rbx
L229:
  movzbl (%rbx),%esi
  add    $0x1,%rbx
  lea    -0x30(%rsi),%ebp
  mov    %esi,%eax
  cmp    $0x9,%bpl
  ja     L358
  jmp    L229
```

assistant: ```c
int get_next_number(char *in, int *out, int *pos) {
  int i, o, n;
  for (i = 0; in[i] == ' ' || in[i] == 0x09; i++)
    ;
  if (in[i] == 0)
    return 0;
  if (in[i] == '$' || (in[i] == '0' && (in[i + 1] == 'x' || in[i + 1] == 'X'))) {
    if (in[i] == '$')
      i++;
    else
      i += 2;
    o = 0;
    while (1) {
      if (in[i] >= '0' && in[i] <= '9')
        o = (o << 4) + in[i] - '0';
      else if (in[i] >= 'a' && in[i] <= 'f')
        o = (o << 4) + in[i] - 'a' + 0xA;
      else if (in[i] >= 'A' && in[i] <= 'F')
        o = (o << 4) + in[i] - 'A' + 0xA;
      else if (in[i] == ' ' || in[i] == 0x09 || in[i] == 0)
        break;
      else
        return 0;
      i++;
    }
  } else if (in[i] == '%' || (in[i] == '0' && (in[i + 1] == 'b' || in[i + 1] == 'B'))) {
    if (in[i] == '%')
      i++;
    else
      i += 2;
    for (o = 0; in[i] != 0; i++) {
      if (in[i] == '0' || in[i] == '1')
        o = (o << 1) + (in[i] - '0');
      else if (in[i] == ' ' || in[i] == 0x09 || in[i] == 0)
        break;
      else
        return 0;
    }
  } else if ((in[i] >= '0' && in[i] <= '9') || (in[i] >= 'a' && in[i] <= 'f') || (in[i] >= 'A' && in[i] <= 'F')) {
    n = 0;
    for (o = 0; 1; o++) {
      if (in[i + o] >= '0' && in[i + o] <= '9')
        continue;
      if (in[i + o] >= 'a' && in[i + o] <= 'f') {
        n = 1;
        break;
      }
      if (in[i + o] >= 'A' && in[i + o] <= 'F') {
        n = 1;
        break;
      }
      if (in[i + o] == 'h' || in[i + o] == 'H') {
        n = 1;
        break;
      }
      break;
    }
    if (n == 1) {
      o = 0;
      while (1) {
        if (in[i] >= '0' && in[i] <= '9')
          o = (o << 4) + in[i] - '0';
        else if (in[i] >= 'a' && in[i] <= 'f')
          o = (o << 4) + in[i] - 'a' + 0xA;
        else if (in[i] >= 'A' && in[i] <= 'F')
          o = (o << 4) + in[i] - 'A' + 0xA;
        else if (in[i] == 'h' || in[i] == 'H')
          break;
        else if (in[i] == ' ' || in[i] == 0x09 || in[i] == 0)
          break;
        else
          return 0;
        i++;
      }
    } else {
      for (o = 0; in[i] >= '0' && in[i] <= '9'; i++)
        o = (o * 10) + in[i] - '0';
      if (!(in[i] == ' ' || in[i] == 0x09 || in[i] == 0))
        return 0;
    }
  } else
    return 0;
  *out = o;
  if (pos != NULL)
    *pos += i;
  return 1;
}
```