user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<diminuto_testify>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  movq   $0x0,-0x10(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L200
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x39,%eax
  jg     L216
  cmp    $0x30,%eax
  jge    L225
  jmp    L100
L15:
  sub    $0x41,%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  movabs $0x118009501180095,%rdx
  and    %rax,%rdx
  test   %rdx,%rdx
  setne  %dl
  test   %dl,%dl
  jne    L187
  movabs $0x292800002928,%rdx
  and    %rax,%rdx
  test   %rdx,%rdx
  setne  %dl
  test   %dl,%dl
  jne    L55
  movabs $0x400000004000,%rdx
  and    %rdx,%rax
  test   %rax,%rax
  setne  %al
  test   %al,%al
  jne    L224
  jmp    L100
L216:
  cmp    $0x79,%eax
  jg     L100
  cmp    $0x41,%eax
  jge    L15
  jmp    L100
L187:
  movl   $0x1,-0x18(%rbp)
  jmp    L200
L55:
  movl   $0x0,-0x18(%rbp)
  jmp    L200
L224:
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x46,%eax
  cmp    $0x2a,%eax
  seta   %dl
  test   %dl,%dl
  jne    L203
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  movabs $0x40100000401,%rax
  and    %rdx,%rax
  test   %rax,%rax
  setne  %al
  test   %al,%al
  jne    L17
  movabs $0x10000000100,%rax
  and    %rdx,%rax
  test   %rax,%rax
  setne  %al
  test   %al,%al
  je     L203
  movl   $0x1,-0x18(%rbp)
  jmp    L214
L17:
  movl   $0x0,-0x18(%rbp)
  jmp    L214
L203:
  nop
L214:
  jmp    L200
L225:
  lea    -0x10(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    $0x0,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strtol@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L106
  cmpl   $0x0,-0x14(%rbp)
  setne  %al
  movzbl %al,%eax
  jmp    L67
L106:
  mov    -0x2c(%rbp),%eax
L67:
  mov    %eax,-0x18(%rbp)
  jmp    L200
L100:
  nop
L200:
  mov    -0x18(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L77
  call   <__stack_chk_fail@plt>
L77:
  leave
  ret
```

assistant: ```c
int diminuto_testify(const char *testimony, int otherwise) {
  int result = otherwise;
  int32_t value = 0;
  char *endp = (char *)0;
  if (testimony != (const char *)0) {
    switch (testimony[0]) {
    case 'a':
    case 'A':
    case 'c':
    case 'C':
    case 'e':
    case 'E':
    case 'h':
    case 'H':
    case 't':
    case 'T':
    case 'u':
    case 'U':
    case 'y':
    case 'Y':
      result = !0;
      break;
    case 'd':
    case 'D':
    case 'f':
    case 'F':
    case 'i':
    case 'I':
    case 'n':
    case 'N':
    case 'l':
    case 'L':
      result = 0;
      break;
    case 'o':
    case 'O':
      switch (testimony[1]) {
      case 'n':
      case 'N':
        result = !0;
        break;
      case 'f':
      case 'F':
      case 'p':
      case 'P':
        result = 0;
        break;
      default:
        break;
      }
      break;
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      value = strtol(testimony, &endp, 0);
      result = (*endp == '\0') ? !!value : otherwise;
      break;
    default:
      break;
    }
  }
  return result;
}
```