user: What is the c source code of the assembly code below:

```asm
<fig08_04>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  mov    $0x25,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L10
  lea    D60(%rip),%r12
  jmp    L152
L10:
  lea    D499(%rip),%r12
L152:
  mov    $0x9,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L82
  lea    D345(%rip),%rbx
  jmp    L73
L82:
  lea    D494(%rip),%rbx
L73:
  mov    $0xa,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L129
  lea    D345(%rip),%rax
  jmp    L93
L129:
  lea    D494(%rip),%rax
L93:
  lea    D94(%rip),%rdx
  push   %rdx
  push   %r12
  lea    D94(%rip),%rdx
  push   %rdx
  push   %rbx
  lea    D136(%rip),%r9
  lea    D94(%rip),%r8
  mov    %rax,%rcx
  lea    D411(%rip),%rax
  mov    %rax,%rdx
  lea    D89(%rip),%rax
  mov    %rax,%rsi
  lea    D129(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
  mov    $0x24,%edi
  call   <iscntrl@plt>
  test   %rax,%rax
  je     L234
  lea    D498(%rip),%rbx
  jmp    L164
L234:
  lea    D403(%rip),%rbx
L164:
  mov    $0xa,%edi
  call   <iscntrl@plt>
  test   %rax,%rax
  je     L147
  lea    D345(%rip),%rax
  jmp    L49
L147:
  lea    D494(%rip),%rax
L49:
  sub    $0x8,%rsp
  lea    D63(%rip),%rdx
  push   %rdx
  mov    %rbx,%r9
  lea    D63(%rip),%r8
  mov    %rax,%rcx
  lea    D411(%rip),%rax
  mov    %rax,%rdx
  lea    D126(%rip),%rax
  mov    %rax,%rsi
  lea    D451(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x10,%rsp
  mov    $0x23,%edi
  call   <ispunct@plt>
  test   %rax,%rax
  je     L232
  lea    D382(%rip),%rbx
  jmp    L42
L232:
  lea    D51(%rip),%rbx
L42:
  mov    $0x59,%edi
  call   <ispunct@plt>
  test   %rax,%rax
  je     L58
  lea    D37(%rip),%r12
  jmp    L55
L58:
  lea    D173(%rip),%r12
L55:
  mov    $0x3b,%edi
  call   <ispunct@plt>
  test   %rax,%rax
  je     L36
  lea    D72(%rip),%rax
  jmp    L31
L36:
  lea    D492(%rip),%rax
L31:
  lea    D2(%rip),%rdx
  push   %rdx
  push   %rbx
  lea    D2(%rip),%r9
  mov    %r12,%r8
  lea    D2(%rip),%rdx
  mov    %rdx,%rcx
  mov    %rax,%rdx
  lea    D478(%rip),%rax
  mov    %rax,%rsi
  lea    D231(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x10,%rsp
  mov    $0x7,%edi
  call   <isprint@plt>
  test   %rax,%rax
  je     L25
  lea    D345(%rip),%rbx
  jmp    L207
L25:
  lea    D494(%rip),%rbx
L207:
  mov    $0x24,%edi
  call   <isprint@plt>
  test   %rax,%rax
  je     L132
  lea    D498(%rip),%rax
  jmp    L199
L132:
  lea    D403(%rip),%rax
L199:
  sub    $0x8,%rsp
  lea    D239(%rip),%rdx
  push   %rdx
  mov    %rbx,%r9
  lea    D388(%rip),%r8
  lea    D239(%rip),%rdx
  mov    %rdx,%rcx
  mov    %rax,%rdx
  lea    D62(%rip),%rax
  mov    %rax,%rsi
  lea    D305(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x10,%rsp
  mov    $0x20,%edi
  call   <isgraph@plt>
  test   %rax,%rax
  je     L111
  lea    D345(%rip),%rbx
  jmp    L105
L111:
  lea    D494(%rip),%rbx
L105:
  mov    $0x51,%edi
  call   <isgraph@plt>
  test   %rax,%rax
  je     L87
  lea    D320(%rip),%rax
  jmp    L116
L87:
  lea    D101(%rip),%rax
L116:
  sub    $0x8,%rsp
  lea    D110(%rip),%rdx
  push   %rdx
  mov    %rbx,%r9
  lea    D23(%rip),%r8
  lea    D110(%rip),%rdx
  mov    %rdx,%rcx
  mov    %rax,%rdx
  lea    D102(%rip),%rax
  mov    %rax,%rsi
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x10,%rsp
  nop
  lea    -0x10(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: tag: D60
type_guessed: string
name: read_data
arguments: tag: D499
type_guessed: string
name: read_data
arguments: tag: D345
type_guessed: string
name: read_data
arguments: tag: D494
type_guessed: string
name: read_data
arguments: tag: D94
type_guessed: string
name: read_data
arguments: tag: D136
type_guessed: string
name: read_data
arguments: tag: D411
type_guessed: string
name: read_data
arguments: tag: D89
type_guessed: string
name: read_data
arguments: tag: D129
type_guessed: string
name: read_data
arguments: tag: D498
type_guessed: string
name: read_data
arguments: tag: D403
type_guessed: string
name: read_data
arguments: tag: D63
type_guessed: string
name: read_data
arguments: tag: D126
type_guessed: string
name: read_data
arguments: tag: D451
type_guessed: string
name: read_data
arguments: tag: D382
type_guessed: string
name: read_data
arguments: tag: D51
type_guessed: string
name: read_data
arguments: tag: D37
type_guessed: string
name: read_data
arguments: tag: D173
type_guessed: string
name: read_data
arguments: tag: D72
type_guessed: string
name: read_data
arguments: tag: D492
type_guessed: string
name: read_data
arguments: tag: D2
type_guessed: string
name: read_data
arguments: tag: D478
type_guessed: string
name: read_data
arguments: tag: D231
type_guessed: string
name: read_data
arguments: tag: D239
type_guessed: string
name: read_data
arguments: tag: D388
type_guessed: string
name: read_data
arguments: tag: D62
type_guessed: string
name: read_data
arguments: tag: D305
type_guessed: string
name: read_data
arguments: tag: D320
type_guessed: string
name: read_data
arguments: tag: D101
type_guessed: string
name: read_data
arguments: tag: D110
type_guessed: string
name: read_data
arguments: tag: D23
type_guessed: string
name: read_data
arguments: tag: D102
type_guessed: string
name: read_data
arguments: tag: D66
type_guessed: string

tool: D60: % is a 

tool: D499: % is not a 

tool: D345:  is a 

tool: D494:  is not a 

tool: D94: whitespace character

tool: D136: Horizontal tab

tool: D411: Newline

tool: D89: According to isspace:

tool: D129: %s
%s%s%s
%s%s%s
%s%s



tool: D498: $ is a 

tool: D403: $ is not a 

tool: D63: control character

tool: D126: According to iscntrl:

tool: D451: %s
%s%s%s
%s%s



tool: D382: # is a 

tool: D51: # is not a 

tool: D37: Y is a 

tool: D173: Y is not a 

tool: D72: ; is a 

tool: D492: ; is not a 

tool: D2: punctuation character

tool: D478: According to ispunct:

tool: D231: %s
%s%s
%s%s
%s%s



tool: D239: printing character

tool: D388: Alert

tool: D62: According to isprint:

tool: D305: %s
%s%s
%s%s%s



tool: D320: Q is a 

tool: D101: Q is not a 

tool: D110: printing character other than a space

tool: D23: Space

tool: D102: According to isgraph:

tool: D66: %s
%s%s
%s%s%s


assistant: ```c
void fig08_04() {
  printf("%s\n%s%s%s\n%s%s%s\n%s%s\n\n", "According to isspace:", "Newline", isspace('\n') ? " is a " : " is not a ", "whitespace character", "Horizontal tab", isspace('\t') ? " is a " : " is not a ", "whitespace character", isspace('%') ? "% is a " : "% is not a ", "whitespace character");
  printf("%s\n%s%s%s\n%s%s\n\n", "According to iscntrl:", "Newline", iscntrl('\n') ? " is a " : " is not a ", "control character", iscntrl('$') ? "$ is a " : "$ is not a ", "control character");
  printf("%s\n%s%s\n%s%s\n%s%s\n\n", "According to ispunct:", ispunct(';') ? "; is a " : "; is not a ", "punctuation character", ispunct('Y') ? "Y is a " : "Y is not a ", "punctuation character", ispunct('#') ? "# is a " : "# is not a ", "punctuation character");
  printf("%s\n%s%s\n%s%s%s\n\n", "According to isprint:", isprint('$') ? "$ is a " : "$ is not a ", "printing character", "Alert", isprint('\a') ? " is a " : " is not a ", "printing character");
  printf("%s\n%s%s\n%s%s%s\n", "According to isgraph:", isgraph('Q') ? "Q is a " : "Q is not a ", "printing character other than a space", "Space", isgraph(' ') ? " is a " : " is not a ", "printing character other than a space");
}
```