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

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    $0x30,%ebx
L210:
  mov    %ebx,%edi
  call   <skiboot_isdigit@plt>
  mov    %eax,%edi
  call   <assert@plt>
  add    $0x1,%ebx
  cmp    $0x3a,%ebx
  jne    L210
  mov    $0x61,%edi
  call   <skiboot_isdigit@plt>
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x5a,%edi
  call   <skiboot_isdigit@plt>
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0xffffffd0,%ebx
  jmp    L19
L107:
  cmp    $0x9,%ebx
  setbe  %dil
  movzbl %dil,%edi
  call   <assert@plt>
L214:
  add    $0x1,%ebx
  cmp    $0xd1,%ebx
  je     L5
L19:
  lea    0x30(%rbx),%edi
  call   <skiboot_isdigit@plt>
  test   %eax,%eax
  jne    L107
  cmp    $0x9,%ebx
  seta   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  jmp    L214
L5:
  mov    $0x30,%ebx
L153:
  mov    %ebx,%edi
  call   <skiboot_isprint@plt>
  mov    %eax,%edi
  call   <assert@plt>
  add    $0x1,%ebx
  cmp    $0x3a,%ebx
  jne    L153
  mov    $0x0,%edi
  call   <skiboot_isprint@plt>
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x4,%edi
  call   <skiboot_isprint@plt>
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x0,%ebx
  jmp    L4
L6:
  mov    %eax,%edi
  call   <assert@plt>
L67:
  add    $0x1,%ebx
  cmp    $0x101,%ebx
  je     L141
L4:
  mov    %ebx,%edi
  call   <skiboot_isprint@plt>
  mov    %eax,%ebp
  mov    %ebx,%edi
  call   <isprint@plt>
  test   %ebp,%ebp
  jne    L6
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  jmp    L67
L141:
  mov    $0x30,%ebx
L83:
  mov    %ebx,%edi
  call   <skiboot_isspace@plt>
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  add    $0x1,%ebx
  cmp    $0x3a,%ebx
  jne    L83
  mov    $0xc,%edi
  call   <skiboot_isspace@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    $0xa,%edi
  call   <skiboot_isspace@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    $0x20,%edi
  call   <skiboot_isspace@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    $0x0,%ebx
  jmp    L7
L39:
  mov    %eax,%edi
  call   <assert@plt>
L88:
  add    $0x1,%ebx
  cmp    $0x101,%ebx
  je     L71
L7:
  mov    %ebx,%edi
  call   <skiboot_isspace@plt>
  mov    %eax,%ebp
  mov    %ebx,%edi
  call   <isspace@plt>
  test   %ebp,%ebp
  jne    L39
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  jmp    L88
L71:
  mov    $0x30,%ebx
L17:
  mov    %ebx,%edi
  call   <skiboot_isxdigit@plt>
  mov    %eax,%edi
  call   <assert@plt>
  add    $0x1,%ebx
  cmp    $0x3a,%ebx
  jne    L17
  mov    $0x61,%edi
  call   <skiboot_isxdigit@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    $0x41,%edi
  call   <skiboot_isxdigit@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    $0x46,%edi
  call   <skiboot_isxdigit@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    $0x5a,%edi
  call   <skiboot_isxdigit@plt>
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    $0x0,%ebx
  jmp    L182
L25:
  mov    %eax,%edi
  call   <assert@plt>
L2:
  add    $0x1,%ebx
  cmp    $0x101,%ebx
  je     L218
L182:
  mov    %ebx,%edi
  call   <skiboot_isxdigit@plt>
  mov    %eax,%ebp
  mov    %ebx,%edi
  call   <isxdigit@plt>
  test   %ebp,%ebp
  jne    L25
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  jmp    L2
L218:
  mov    $0x0,%ebx
L216:
  mov    %ebx,%edi
  call   <skiboot_tolower@plt>
  mov    %rax,%rbp
  mov    %ebx,%edi
  call   <tolower@plt>
  cmp    %rax,%rbp
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  add    $0x1,%ebx
  cmp    $0x101,%ebx
  jne    L216
  mov    $0x0,%ebx
L178:
  mov    %ebx,%edi
  call   <skiboot_toupper@plt>
  mov    %rax,%rbp
  mov    %ebx,%edi
  call   <toupper@plt>
  cmp    %rax,%rbp
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  add    $0x1,%ebx
  cmp    $0x101,%ebx
  jne    L178
  mov    $0x0,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
```

assistant: ```c
int main(void) {
  int i;
  int r1, r2;
  for (i = '0'; i <= '9'; i++)
    assert(skiboot_isdigit(i));
  assert(skiboot_isdigit('a') == 0);
  assert(skiboot_isdigit('Z') == 0);
  for (i = 0; i < 257; i++) {
    r1 = skiboot_isdigit(i);
    r2 = isdigit(i);
    if (r1)
      assert(r2);
    if (!r1)
      assert(!r2);
  }
  for (i = '0'; i <= '9'; i++)
    assert(skiboot_isprint(i));
  assert(skiboot_isprint('\0') == 0);
  assert(skiboot_isprint(4) == 0);
  for (i = 0; i < 257; i++) {
    r1 = skiboot_isprint(i);
    r2 = isprint(i);
    if (r1)
      assert(r2);
    if (!r1)
      assert(!r2);
  }
  for (i = '0'; i <= '9'; i++)
    assert(skiboot_isspace(i) == 0);
  assert(skiboot_isspace('\f'));
  assert(skiboot_isspace('\n'));
  assert(skiboot_isspace(' '));
  for (i = 0; i < 257; i++) {
    r1 = skiboot_isspace(i);
    r2 = isspace(i);
    if (r1)
      assert(r2);
    if (!r1)
      assert(!r2);
  }
  for (i = '0'; i <= '9'; i++)
    assert(skiboot_isxdigit(i));
  assert(skiboot_isxdigit('a'));
  assert(skiboot_isxdigit('A'));
  assert(skiboot_isxdigit('F'));
  assert(skiboot_isxdigit('Z') == 0);
  for (i = 0; i < 257; i++) {
    r1 = skiboot_isxdigit(i);
    r2 = isxdigit(i);
    if (r1)
      assert(r2);
    if (!r1)
      assert(!r2);
  }
  for (i = 0; i < 257; i++) {
    assert(skiboot_tolower(i) == tolower(i));
  }
  for (i = 0; i < 257; i++) {
    assert(skiboot_toupper(i) == toupper(i));
  }
  return 0;
}
```