user: 请将以下的汇编代码转换成C语言代码:

```asm
<test_strtok>:
  endbr64
  push   %rbx
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  movabs $0x3f676e6974736574,%rax
  movabs $0x3a3a333a323a313a,%rdx
  mov    %rax,(%rsp)
  mov    %rdx,0x8(%rsp)
  movw   $0x34,0x10(%rsp)
  movabs $0x637a7a7979617878,%rax
  movabs $0x787879797a7a7979,%rdx
  mov    %rax,0x20(%rsp)
  mov    %rdx,0x28(%rsp)
  movl   $0x7a7a7979,0x30(%rsp)
  movb   $0x0,0x34(%rsp)
  mov    %rsp,%rbx
  lea    D320(%rip),%rsi
  mov    %rbx,%rdi
  call   <strtok@plt>
  cmp    %rax,%rbx
  jne    L233
  cmpb   $0x0,0x8(%rsp)
  jne    L186
  lea    D320(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  lea    0x9(%rsp),%rdx
  cmp    %rax,%rdx
  jne    L60
  cmpb   $0x0,0xa(%rsp)
  jne    L162
  lea    D320(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  lea    0xb(%rsp),%rdx
  cmp    %rax,%rdx
  jne    L24
  cmpb   $0x0,0xc(%rsp)
  jne    L216
  lea    D320(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  lea    0xd(%rsp),%rdx
  cmp    %rax,%rdx
  jne    L191
  cmpb   $0x0,0xe(%rsp)
  jne    L120
  lea    D320(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  lea    0x10(%rsp),%rdx
  cmp    %rax,%rdx
  je     L80
  mov    $0x94,%edx
  lea    D58(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L233:
  mov    $0x8c,%edx
  lea    D43(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
L180:
  mov    0x38(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L83
  add    $0x40,%rsp
  pop    %rbx
  ret
L186:
  mov    $0x8d,%edx
  lea    D193(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L60:
  mov    $0x8e,%edx
  lea    D208(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L162:
  mov    $0x8f,%edx
  lea    D164(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L24:
  mov    $0x90,%edx
  lea    D88(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L216:
  mov    $0x91,%edx
  lea    D166(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L191:
  mov    $0x92,%edx
  lea    D113(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L120:
  mov    $0x93,%edx
  lea    D343(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L80:
  lea    D320(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  test   %rax,%rax
  je     L9
  mov    $0x95,%edx
  lea    D61(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L9:
  lea    D320(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  test   %rax,%rax
  je     L143
  mov    $0x96,%edx
  lea    D61(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L143:
  lea    0x20(%rsp),%rdi
  lea    D291(%rip),%rsi
  call   <strtok@plt>
  lea    0x22(%rsp),%rdx
  cmp    %rax,%rdx
  je     L13
  mov    $0x98,%edx
  lea    D51(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L13:
  lea    D291(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  lea    0x27(%rsp),%rdx
  cmp    %rax,%rdx
  je     L147
  mov    $0x99,%edx
  lea    D178(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L147:
  lea    D291(%rip),%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  je     L180
  mov    $0x9a,%edx
  lea    D167(%rip),%rsi
  lea    D357(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L180
L83:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D320
data_type: string
name: extract_symbolic_data
arguments: data_label: D58
data_type: string
name: extract_symbolic_data
arguments: data_label: D357
data_type: string
name: extract_symbolic_data
arguments: data_label: D43
data_type: string
name: extract_symbolic_data
arguments: data_label: D193
data_type: string
name: extract_symbolic_data
arguments: data_label: D208
data_type: string
name: extract_symbolic_data
arguments: data_label: D164
data_type: string
name: extract_symbolic_data
arguments: data_label: D88
data_type: string
name: extract_symbolic_data
arguments: data_label: D166
data_type: string
name: extract_symbolic_data
arguments: data_label: D113
data_type: string
name: extract_symbolic_data
arguments: data_label: D343
data_type: string
name: extract_symbolic_data
arguments: data_label: D61
data_type: string
name: extract_symbolic_data
arguments: data_label: D291
data_type: string
name: extract_symbolic_data
arguments: data_label: D51
data_type: string
name: extract_symbolic_data
arguments: data_label: D178
data_type: string
name: extract_symbolic_data
arguments: data_label: D167
data_type: string

tool: D320: :

tool: D58: &input[16] == strtok(NULL, ":")

tool: D357: expression '%s' untrue at %d


tool: D43: input == strtok(input, ":")

tool: D193: input[8] == 0

tool: D208: &input[9] == strtok(NULL, ":")

tool: D164: input[10] == 0

tool: D88: &input[11] == strtok(NULL, ":")

tool: D166: input[12] == 0

tool: D113: &input[13] == strtok(NULL, ":")

tool: D343: input[14] == 0

tool: D61: NULL == strtok(NULL, ":")

tool: D291: xyz

tool: D51: &input2[2] == strtok(input2, "xyz")

tool: D178: &input2[7] == strtok(NULL, "xyz")

tool: D167: NULL == strtok(NULL, "xyz")

assistant: ```c
int test_strtok(void) {
  char input[] = "testing?:1:2:3::4";
  char input2[] = "xxayyzzcyyzzyyxxyyzz";
  do {
    if (!(input == strtok(input, ":"))) {
      printf("expression '%s' untrue at %d\n", "input == strtok(input, \":\")", 140);
      return 0;
    }
  } while (0);
  do {
    if (!(input[8] == 0)) {
      printf("expression '%s' untrue at %d\n", "input[8] == 0", 141);
      return 0;
    }
  } while (0);
  do {
    if (!(&input[9] == strtok(NULL, ":"))) {
      printf("expression '%s' untrue at %d\n", "&input[9] == strtok(NULL, \":\")", 142);
      return 0;
    }
  } while (0);
  do {
    if (!(input[10] == 0)) {
      printf("expression '%s' untrue at %d\n", "input[10] == 0", 143);
      return 0;
    }
  } while (0);
  do {
    if (!(&input[11] == strtok(NULL, ":"))) {
      printf("expression '%s' untrue at %d\n", "&input[11] == strtok(NULL, \":\")", 144);
      return 0;
    }
  } while (0);
  do {
    if (!(input[12] == 0)) {
      printf("expression '%s' untrue at %d\n", "input[12] == 0", 145);
      return 0;
    }
  } while (0);
  do {
    if (!(&input[13] == strtok(NULL, ":"))) {
      printf("expression '%s' untrue at %d\n", "&input[13] == strtok(NULL, \":\")", 146);
      return 0;
    }
  } while (0);
  do {
    if (!(input[14] == 0)) {
      printf("expression '%s' untrue at %d\n", "input[14] == 0", 147);
      return 0;
    }
  } while (0);
  do {
    if (!(&input[16] == strtok(NULL, ":"))) {
      printf("expression '%s' untrue at %d\n", "&input[16] == strtok(NULL, \":\")", 148);
      return 0;
    }
  } while (0);
  do {
    if (!(NULL == strtok(NULL, ":"))) {
      printf("expression '%s' untrue at %d\n", "NULL == strtok(NULL, \":\")", 149);
      return 0;
    }
  } while (0);
  do {
    if (!(NULL == strtok(NULL, ":"))) {
      printf("expression '%s' untrue at %d\n", "NULL == strtok(NULL, \":\")", 150);
      return 0;
    }
  } while (0);
  do {
    if (!(&input2[2] == strtok(input2, "xyz"))) {
      printf("expression '%s' untrue at %d\n", "&input2[2] == strtok(input2, \"xyz\")", 152);
      return 0;
    }
  } while (0);
  do {
    if (!(&input2[7] == strtok(NULL, "xyz"))) {
      printf("expression '%s' untrue at %d\n", "&input2[7] == strtok(NULL, \"xyz\")", 153);
      return 0;
    }
  } while (0);
  do {
    if (!(NULL == strtok(NULL, "xyz"))) {
      printf("expression '%s' untrue at %d\n", "NULL == strtok(NULL, \"xyz\")", 154);
      return 0;
    }
  } while (0);
  return 1;
}
```