user: 下面的汇编指令对应的C源代码是什么：

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  lea    D40(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,(%rsp)
  lea    D239(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x8(%rsp)
  lea    D371(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x10(%rsp)
  lea    D308(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x18(%rsp)
  lea    D142(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x20(%rsp)
  lea    D343(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x28(%rsp)
  lea    D200(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x30(%rsp)
  lea    D46(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x38(%rsp)
  lea    D265(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x40(%rsp)
  lea    D234(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,0x48(%rsp)
  lea    D203(%rip),%rdi
  call   <wctype@plt>
  mov    %rax,%r15
  lea    D80(%rip),%rdi
  call   <wctype@plt>
  mov    $0x0,%ebp
  test   %rax,%rax
  jne    L229
L469:
  mov    $0x0,%ebx
  lea    D306(%rip),%r13
  lea    D211(%rip),%r12
  jmp    L44
L229:
  lea    D376(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%ebp
  jmp    L469
L194:
  mov    %ebx,%edx
  lea    D40(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L27
L174:
  mov    %ebx,%edx
  lea    D40(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L312
L421:
  mov    %ebx,%edx
  lea    D239(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L13
L143:
  mov    %ebx,%edx
  lea    D239(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L133
L282:
  mov    %ebx,%edx
  lea    D371(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L358
L433:
  mov    %ebx,%edx
  lea    D371(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L28
L384:
  mov    %ebx,%edx
  lea    D308(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L137
L148:
  mov    %ebx,%edx
  lea    D308(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L200
L283:
  mov    %ebx,%edx
  lea    D142(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L320
L471:
  mov    %ebx,%edx
  lea    D142(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L429
L182:
  mov    %ebx,%edx
  lea    D343(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L64
L259:
  mov    %ebx,%edx
  lea    D343(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L405
L242:
  mov    %ebx,%edx
  lea    D200(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L316
L195:
  mov    %ebx,%edx
  lea    D200(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L378
L352:
  mov    %ebx,%edx
  lea    D46(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L345
L105:
  mov    %ebx,%edx
  lea    D46(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L150
L458:
  mov    %ebx,%edx
  lea    D265(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L5
L169:
  mov    %ebx,%edx
  lea    D265(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L310
L140:
  mov    %ebx,%edx
  lea    D234(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L303
L251:
  mov    %ebx,%edx
  lea    D234(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L168
L487:
  mov    %ebx,%edx
  lea    D203(%rip),%rsi
  mov    %r13,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L99
L404:
  add    $0x1,%ebx
  cmp    $0x100,%ebx
  je     L23
L44:
  mov    %ebx,%edi
  call   <isalnum@plt>
  mov    %rax,%r14
  mov    (%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L194
L27:
  mov    %ebx,%edi
  call   <isalnum@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswalnum@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L174
L312:
  mov    %ebx,%edi
  call   <isalpha@plt>
  mov    %rax,%r14
  mov    0x8(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L421
L13:
  mov    %ebx,%edi
  call   <isalpha@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswalpha@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L143
L133:
  mov    %ebx,%edi
  call   <iscntrl@plt>
  mov    %rax,%r14
  mov    0x10(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L282
L358:
  mov    %ebx,%edi
  call   <iscntrl@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswcntrl@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L433
L28:
  mov    %ebx,%edi
  call   <isdigit@plt>
  mov    %rax,%r14
  mov    0x18(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L384
L137:
  mov    %ebx,%edi
  call   <isdigit@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswdigit@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L148
L200:
  mov    %ebx,%edi
  call   <isgraph@plt>
  mov    %rax,%r14
  mov    0x20(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L283
L320:
  mov    %ebx,%edi
  call   <isgraph@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswgraph@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L471
L429:
  mov    %ebx,%edi
  call   <islower@plt>
  mov    %rax,%r14
  mov    0x28(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L182
L64:
  mov    %ebx,%edi
  call   <islower@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswlower@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L259
L405:
  mov    %ebx,%edi
  call   <isprint@plt>
  mov    %rax,%r14
  mov    0x30(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L242
L316:
  mov    %ebx,%edi
  call   <isprint@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswprint@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L195
L378:
  mov    %ebx,%edi
  call   <ispunct@plt>
  mov    %rax,%r14
  mov    0x38(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L352
L345:
  mov    %ebx,%edi
  call   <ispunct@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswpunct@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L105
L150:
  mov    %ebx,%edi
  call   <isspace@plt>
  mov    %rax,%r14
  mov    0x40(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L458
L5:
  mov    %ebx,%edi
  call   <isspace@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswspace@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L169
L310:
  mov    %ebx,%edi
  call   <isupper@plt>
  mov    %rax,%r14
  mov    0x48(%rsp),%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L140
L303:
  mov    %ebx,%edi
  call   <isupper@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswupper@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L251
L168:
  mov    %ebx,%edi
  call   <isxdigit@plt>
  mov    %rax,%r14
  mov    %r15,%rsi
  mov    %ebx,%edi
  call   <iswctype@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  jne    L487
L99:
  mov    %ebx,%edi
  call   <isxdigit@plt>
  mov    %rax,%r14
  mov    %ebx,%edi
  call   <iswxdigit@plt>
  test   %r14,%r14
  sete   %dl
  test   %rax,%rax
  sete   %al
  cmp    %al,%dl
  je     L404
  mov    %ebx,%edx
  lea    D203(%rip),%rsi
  mov    %r12,%rdi
  call   <printf@plt>
  mov    $0x1,%ebp
  jmp    L404
L23:
  test   %ebp,%ebp
  je     L257
L8:
  mov    %ebp,%eax
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L257:
  lea    D219(%rip),%rdi
  call   <puts@plt>
  jmp    L8
```

tool_calls: name: extract_symbolic_data
arguments: tag: D40
type_guessed: string
name: extract_symbolic_data
arguments: tag: D239
type_guessed: string
name: extract_symbolic_data
arguments: tag: D371
type_guessed: string
name: extract_symbolic_data
arguments: tag: D308
type_guessed: string
name: extract_symbolic_data
arguments: tag: D142
type_guessed: string
name: extract_symbolic_data
arguments: tag: D343
type_guessed: string
name: extract_symbolic_data
arguments: tag: D200
type_guessed: string
name: extract_symbolic_data
arguments: tag: D46
type_guessed: string
name: extract_symbolic_data
arguments: tag: D265
type_guessed: string
name: extract_symbolic_data
arguments: tag: D234
type_guessed: string
name: extract_symbolic_data
arguments: tag: D203
type_guessed: string
name: extract_symbolic_data
arguments: tag: D80
type_guessed: string
name: extract_symbolic_data
arguments: tag: D306
type_guessed: string
name: extract_symbolic_data
arguments: tag: D211
type_guessed: string
name: extract_symbolic_data
arguments: tag: D376
type_guessed: string
name: extract_symbolic_data
arguments: tag: D219
type_guessed: string

tool: D40: alnum

tool: D239: alpha

tool: D371: cntrl

tool: D308: digit

tool: D142: graph

tool: D343: lower

tool: D200: print

tool: D46: punct

tool: D265: space

tool: D234: upper

tool: D203: xdigit

tool: D80: does not exist

tool: D306: `iswctype' class `%s' test for character \%o failed


tool: D211: `isw%s' test for character \%o failed


tool: D376: wctype return value != 0 for non existing property

tool: D219: All test successful!

assistant: ```c
int main(int argc, char *argv[]) {
  int result = 0;
  wctype_t bit_alnum = wctype("alnum");
  wctype_t bit_alpha = wctype("alpha");
  wctype_t bit_cntrl = wctype("cntrl");
  wctype_t bit_digit = wctype("digit");
  wctype_t bit_graph = wctype("graph");
  wctype_t bit_lower = wctype("lower");
  wctype_t bit_print = wctype("print");
  wctype_t bit_punct = wctype("punct");
  wctype_t bit_space = wctype("space");
  wctype_t bit_upper = wctype("upper");
  wctype_t bit_xdigit = wctype("xdigit");
  int ch;
  if (wctype("does not exist") != 0) {
    puts("wctype return value != 0 for non existing property");
    result = 1;
  }
  for (ch = 0; ch < 256; ++ch) {
    do {
      if ((isalnum(ch) == 0) != (iswctype(ch, bit_alnum) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "alnum", ch);
        result = 1;
      }
      if ((isalnum(ch) == 0) != (iswalnum(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "alnum", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((isalpha(ch) == 0) != (iswctype(ch, bit_alpha) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "alpha", ch);
        result = 1;
      }
      if ((isalpha(ch) == 0) != (iswalpha(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "alpha", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((iscntrl(ch) == 0) != (iswctype(ch, bit_cntrl) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "cntrl", ch);
        result = 1;
      }
      if ((iscntrl(ch) == 0) != (iswcntrl(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "cntrl", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((isdigit(ch) == 0) != (iswctype(ch, bit_digit) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "digit", ch);
        result = 1;
      }
      if ((isdigit(ch) == 0) != (iswdigit(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "digit", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((isgraph(ch) == 0) != (iswctype(ch, bit_graph) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "graph", ch);
        result = 1;
      }
      if ((isgraph(ch) == 0) != (iswgraph(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "graph", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((islower(ch) == 0) != (iswctype(ch, bit_lower) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "lower", ch);
        result = 1;
      }
      if ((islower(ch) == 0) != (iswlower(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "lower", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((isprint(ch) == 0) != (iswctype(ch, bit_print) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "print", ch);
        result = 1;
      }
      if ((isprint(ch) == 0) != (iswprint(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "print", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((ispunct(ch) == 0) != (iswctype(ch, bit_punct) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "punct", ch);
        result = 1;
      }
      if ((ispunct(ch) == 0) != (iswpunct(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "punct", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((isspace(ch) == 0) != (iswctype(ch, bit_space) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "space", ch);
        result = 1;
      }
      if ((isspace(ch) == 0) != (iswspace(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "space", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((isupper(ch) == 0) != (iswctype(ch, bit_upper) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "upper", ch);
        result = 1;
      }
      if ((isupper(ch) == 0) != (iswupper(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "upper", ch);
        result = 1;
      }
    } while (0);
    do {
      if ((isxdigit(ch) == 0) != (iswctype(ch, bit_xdigit) == 0)) {
        printf("`iswctype' class `%s' test "
               "for character \\%o failed\n",
               "xdigit", ch);
        result = 1;
      }
      if ((isxdigit(ch) == 0) != (iswxdigit(ch) == 0)) {
        printf("`isw%s' test for character \\%o failed\n", "xdigit", ch);
        result = 1;
      }
    } while (0);
  }
  if (result == 0)
    puts("All test successful!");
  return result;
}
```