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

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x1a8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x198(%rsp)
  xor    %eax,%eax
  lea    D112(%rip),%rdi
  call   <puts@plt>
  mov    $0x69,%edx
  mov    $0x6b,%esi
  lea    D199(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D19(%rip),%rdi
  mov    $0x0,%eax
  call   <puts_nonl@plt>
  mov    $0x6f,%edi
  call   <putchar@plt>
  mov    $0x6b,%edi
  call   <putchar@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    $0x70,%edi
  call   <putchar@plt>
  mov    $0x75,%edi
  call   <putchar@plt>
  mov    $0x74,%edi
  call   <putchar@plt>
  mov    $0x63,%edi
  call   <putchar@plt>
  mov    $0x68,%edi
  call   <putchar@plt>
  mov    $0x61,%edi
  call   <putchar@plt>
  mov    $0x72,%edi
  call   <putchar@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <set_echo@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0x78,%eax
  jne    L121
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%eax
  jne    L496
  lea    D249(%rip),%rdi
  call   <puts@plt>
  jmp    L430
L121:
  lea    D310(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%eax
  je     L235
L496:
  lea    D292(%rip),%rdi
  call   <puts@plt>
L235:
  lea    D98(%rip),%rdi
  call   <puts@plt>
L430:
  lea    D214(%rip),%rdi
  call   <puts@plt>
  lea    D339(%rip),%rdi
  call   <puts@plt>
  mov    %rsp,%rbx
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <gets@plt>
  lea    D279(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L474
  lea    D221(%rip),%rdi
  call   <puts@plt>
L51:
  mov    $0x20,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L46
  mov    $0x61,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L12
  lea    D321(%rip),%rdi
  call   <puts@plt>
  jmp    L302
L474:
  lea    D129(%rip),%rdi
  call   <puts@plt>
  lea    D225(%rip),%rdi
  call   <puts@plt>
  jmp    L51
L46:
  lea    D356(%rip),%rdi
  call   <puts@plt>
  mov    $0x61,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L501
L12:
  lea    D334(%rip),%rdi
  call   <puts@plt>
L501:
  lea    D612(%rip),%rdi
  call   <puts@plt>
L302:
  lea    D440(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D238(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  mov    $0x0,%ebx
  cmp    $0x1234,%eax
  jne    L70
L460:
  mov    $0x10,%edx
  mov    $0x0,%esi
  lea    D381(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0x1234,%eax
  jne    L553
L87:
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D317(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0x29c,%eax
  jne    L199
L294:
  mov    $0x8,%edx
  mov    $0x0,%esi
  lea    D381(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0x29c,%eax
  jne    L284
L295:
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D381(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0x4d2,%eax
  jne    L539
L502:
  mov    $0xa,%edx
  mov    $0x0,%esi
  lea    D381(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0x4d2,%eax
  jne    L422
L222:
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D308(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  jne    L122
  mov    $0xa,%edx
  mov    $0x0,%esi
  lea    D308(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  jne    L75
  test   %ebx,%ebx
  jne    L142
  lea    D53(%rip),%rdi
  call   <puts@plt>
  jmp    L392
L70:
  lea    D49(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%ebx
  jmp    L460
L553:
  lea    D459(%rip),%rdi
  call   <puts@plt>
  add    $0x1,%ebx
  jmp    L87
L199:
  lea    D364(%rip),%rdi
  call   <puts@plt>
  add    $0x1,%ebx
  jmp    L294
L284:
  lea    D614(%rip),%rdi
  call   <puts@plt>
  add    $0x1,%ebx
  jmp    L295
L539:
  lea    D205(%rip),%rdi
  call   <puts@plt>
  add    $0x1,%ebx
  jmp    L502
L422:
  lea    D359(%rip),%rdi
  call   <puts@plt>
  add    $0x1,%ebx
  jmp    L222
L122:
  lea    D383(%rip),%rdi
  call   <puts@plt>
  mov    $0xa,%edx
  mov    $0x0,%esi
  lea    D308(%rip),%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  cmp    $0xfffffb2e,%eax
  je     L142
L75:
  lea    D66(%rip),%rdi
  call   <puts@plt>
L142:
  lea    D336(%rip),%rdi
  call   <puts@plt>
L392:
  mov    %rsp,%rsi
  movw   $0x6261,(%rsp)
  movb   $0x0,0x2(%rsp)
  lea    0x3(%rsp),%rdi
  call   <strcpy@plt>
  cmpb   $0x61,0x3(%rsp)
  je     L137
L3:
  lea    D448(%rip),%rdi
  call   <puts@plt>
L526:
  mov    %rsp,%rbp
  movabs $0x7979636261787878,%rax
  mov    %rax,(%rsp)
  movw   $0x79,0x8(%rsp)
  lea    0x3(%rsp),%rsi
  lea    0x5(%rsp),%rbx
  mov    $0x3,%edx
  mov    %rbx,%rdi
  call   <memmove@plt>
  lea    0x4(%rsp),%rdi
  mov    $0x3,%edx
  mov    %rbx,%rsi
  call   <memmove@plt>
  lea    D7(%rip),%rdi
  call   <puts@plt>
  movb   $0x62,(%rsp)
  movb   $0x61,0x1(%rsp)
  movb   $0x72,0x2(%rsp)
  movb   $0x0,0x3(%rsp)
  movb   $0x66,0xd0(%rsp)
  movb   $0x6f,0xd1(%rsp)
  movb   $0x6f,0xd2(%rsp)
  movb   $0x0,0xd3(%rsp)
  lea    0xd0(%rsp),%rbx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  mov    $0x0,%ebp
  cmp    %rbx,%rbx
  je     L350
  lea    D340(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%ebp
L350:
  lea    0xd0(%rsp),%rdi
  lea    D556(%rip),%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L175
L170:
  movb   $0x0,(%rsp)
  movb   $0x66,0xd0(%rsp)
  movb   $0x6f,0xd1(%rsp)
  movb   $0x6f,0xd2(%rsp)
  movb   $0x0,0xd3(%rsp)
  mov    %rsp,%rsi
  lea    0xd0(%rsp),%rbx
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    D507(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L332
  movb   $0x0,0xd0(%rsp)
  movb   $0x66,(%rsp)
  movb   $0x6f,0x1(%rsp)
  movb   $0x6f,0x2(%rsp)
  movb   $0x32,0x3(%rsp)
  movb   $0x0,0x4(%rsp)
  mov    %rsp,%rsi
  lea    0xd0(%rsp),%rbx
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    D557(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L374
  test   %ebp,%ebp
  jne    L346
  lea    D42(%rip),%rdi
  call   <puts@plt>
  jmp    L14
L137:
  cmpb   $0x62,0x4(%rsp)
  jne    L3
  cmpb   $0x0,0x5(%rsp)
  jne    L3
  lea    D251(%rip),%rdi
  call   <puts@plt>
  jmp    L526
L175:
  lea    D165(%rip),%rdi
  call   <puts@plt>
  add    $0x1,%ebp
  jmp    L170
L332:
  lea    D404(%rip),%rdi
  call   <puts@plt>
  movb   $0x0,0xd0(%rsp)
  movb   $0x66,(%rsp)
  movb   $0x6f,0x1(%rsp)
  movb   $0x6f,0x2(%rsp)
  movb   $0x32,0x3(%rsp)
  movb   $0x0,0x4(%rsp)
  mov    %rsp,%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    D557(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L346
L374:
  lea    D474(%rip),%rdi
  call   <puts@plt>
L346:
  lea    D209(%rip),%rdi
  call   <puts@plt>
L14:
  mov    $0x61,%edi
  call   <toupper@plt>
  mov    %eax,%ebx
  mov    $0x7a,%edi
  call   <toupper@plt>
  cmp    $0x5a,%eax
  je     L503
L297:
  lea    D494(%rip),%rdi
  call   <puts@plt>
L239:
  mov    $0x41,%edi
  call   <tolower@plt>
  mov    %eax,%ebx
  mov    $0x5a,%edi
  call   <tolower@plt>
  cmp    $0x7a,%eax
  je     L450
L234:
  lea    D78(%rip),%rdi
  call   <puts@plt>
L167:
  mov    $0x7,%edi
  call   <isprint@plt>
  mov    %eax,%ebx
  mov    $0x47,%edi
  call   <isprint@plt>
  test   %eax,%eax
  je     L384
  test   %ebx,%ebx
  jne    L384
  lea    D478(%rip),%rdi
  call   <puts@plt>
  jmp    L72
L503:
  cmp    $0x41,%ebx
  jne    L297
  lea    D17(%rip),%rdi
  call   <puts@plt>
  jmp    L239
L450:
  cmp    $0x61,%ebx
  jne    L234
  lea    D453(%rip),%rdi
  call   <puts@plt>
  jmp    L167
L384:
  lea    D9(%rip),%rdi
  call   <puts@plt>
L72:
  movb   $0x0,(%rsp)
  movb   $0x1,0x1(%rsp)
  movb   $0x2,0x2(%rsp)
  mov    %rsp,%rbx
  movzwl (%rsp),%eax
  mov    %ax,0xd0(%rsp)
  movb   $0x2,0xd2(%rsp)
  lea    D426(%rip),%rdi
  call   <puts@plt>
  movabs $0x3434343434343434,%rax
  movabs $0x3434343434343434,%rdx
  mov    %rax,(%rsp)
  mov    %rdx,0x8(%rsp)
  mov    %rax,0x10(%rsp)
  mov    %rdx,0x18(%rsp)
  mov    %rax,0x20(%rsp)
  mov    %rdx,0x28(%rsp)
  movw   $0x3434,0x30(%rsp)
  mov    %rbx,%rax
  lea    0x32(%rsp),%rsi
  mov    $0x0,%edx
L537:
  cmpb   $0x34,(%rax)
  setne  %cl
  movzbl %cl,%ecx
  add    %ecx,%edx
  add    $0x1,%rax
  cmp    %rsi,%rax
  jne    L537
  test   %edx,%edx
  je     L66
  lea    D550(%rip),%rdi
  call   <puts@plt>
L270:
  lea    D202(%rip),%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  mov    %eax,%ebx
  lea    D394(%rip),%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  test   %eax,%eax
  je     L198
  lea    D135(%rip),%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
L285:
  lea    D384(%rip),%rdi
  call   <puts@plt>
L84:
  mov    0x198(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L39
  mov    $0x0,%eax
  add    $0x1a8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L66:
  lea    D242(%rip),%rdi
  call   <puts@plt>
  jmp    L270
L198:
  lea    D135(%rip),%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  cmp    $0xffff8ad0,%eax
  jne    L285
  cmp    $0x856,%ebx
  jne    L285
  lea    D146(%rip),%rdi
  call   <puts@plt>
  jmp    L84
L39:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_label: D112
type_guessed: string
name: read_data
arguments: data_label: D199
type_guessed: string
name: read_data
arguments: data_label: D19
type_guessed: string
name: read_data
arguments: data_label: D249
type_guessed: string
name: read_data
arguments: data_label: D310
type_guessed: string
name: read_data
arguments: data_label: D292
type_guessed: string
name: read_data
arguments: data_label: D98
type_guessed: string
name: read_data
arguments: data_label: D214
type_guessed: string
name: read_data
arguments: data_label: D339
type_guessed: string
name: read_data
arguments: data_label: D279
type_guessed: string
name: read_data
arguments: data_label: D221
type_guessed: string
name: read_data
arguments: data_label: D321
type_guessed: string
name: read_data
arguments: data_label: D129
type_guessed: string
name: read_data
arguments: data_label: D225
type_guessed: string
name: read_data
arguments: data_label: D356
type_guessed: string
name: read_data
arguments: data_label: D334
type_guessed: string
name: read_data
arguments: data_label: D612
type_guessed: string
name: read_data
arguments: data_label: D440
type_guessed: string
name: read_data
arguments: data_label: D238
type_guessed: string
name: read_data
arguments: data_label: D381
type_guessed: string
name: read_data
arguments: data_label: D317
type_guessed: string
name: read_data
arguments: data_label: D308
type_guessed: string
name: read_data
arguments: data_label: D53
type_guessed: string
name: read_data
arguments: data_label: D49
type_guessed: string
name: read_data
arguments: data_label: D459
type_guessed: string
name: read_data
arguments: data_label: D364
type_guessed: string
name: read_data
arguments: data_label: D614
type_guessed: string
name: read_data
arguments: data_label: D205
type_guessed: string
name: read_data
arguments: data_label: D359
type_guessed: string
name: read_data
arguments: data_label: D383
type_guessed: string
name: read_data
arguments: data_label: D66
type_guessed: string
name: read_data
arguments: data_label: D336
type_guessed: string
name: read_data
arguments: data_label: D448
type_guessed: string
name: read_data
arguments: data_label: D7
type_guessed: string
name: read_data
arguments: data_label: D340
type_guessed: string
name: read_data
arguments: data_label: D556
type_guessed: string
name: read_data
arguments: data_label: D507
type_guessed: string
name: read_data
arguments: data_label: D557
type_guessed: string
name: read_data
arguments: data_label: D42
type_guessed: string
name: read_data
arguments: data_label: D251
type_guessed: string
name: read_data
arguments: data_label: D165
type_guessed: string
name: read_data
arguments: data_label: D404
type_guessed: string
name: read_data
arguments: data_label: D474
type_guessed: string
name: read_data
arguments: data_label: D209
type_guessed: string
name: read_data
arguments: data_label: D494
type_guessed: string
name: read_data
arguments: data_label: D78
type_guessed: string
name: read_data
arguments: data_label: D478
type_guessed: string
name: read_data
arguments: data_label: D17
type_guessed: string
name: read_data
arguments: data_label: D453
type_guessed: string
name: read_data
arguments: data_label: D9
type_guessed: string
name: read_data
arguments: data_label: D426
type_guessed: string
name: read_data
arguments: data_label: D550
type_guessed: string
name: read_data
arguments: data_label: D202
type_guessed: string
name: read_data
arguments: data_label: D394
type_guessed: string
name: read_data
arguments: data_label: D135
type_guessed: string
name: read_data
arguments: data_label: D384
type_guessed: string
name: read_data
arguments: data_label: D242
type_guessed: string
name: read_data
arguments: data_label: D146
type_guessed: string

tool: D112: ok puts

tool: D199: o%c pr%cntf

tool: D19: ok puts_nonl


tool: D249: ok getchar

tool: D310: [lost x]

tool: D292: [lost newline]

tool: D98: fail getchar

tool: D214: ok strlen

tool: D339: ok strcmp

tool: D279: This is a test of the emergency broadcasting system.

tool: D221: ok gets

tool: D321: ok isspace

tool: D129: [comparison fails]

tool: D225: fail gets

tool: D356: [whitespace]

tool: D334: [non-whitespace]

tool: D612: fail isspace

tool: D440: ok isdigit

tool: D238: 0x1234

tool: D381: 1234

tool: D317: 01234

tool: D308: -1234

tool: D53: ok strtol

tool: D49: [0x1234 base=0]

tool: D459: [1234 base=16]

tool: D364: [01234 base=0]

tool: D614: [1234 base=8]

tool: D205: [1234 base=0]

tool: D359: [1234 base=10]

tool: D383: [-1234 base=0]

tool: D66: [-1234 base=10]

tool: D336: fail strtol

tool: D448: fail strcpy

tool: D7: ok memmove

tool: D340: [strcat retval]

tool: D556: foobar

tool: D507: foo

tool: D557: foo2

tool: D42: ok strcat

tool: D251: ok strcpy

tool: D165: [strcat foobar]

tool: D404: [strcat foo]

tool: D474: [strcat foo2]

tool: D209: fail strcat

tool: D494: fail toupper

tool: D78: fail tolower

tool: D478: ok isprint

tool: D17: ok toupper

tool: D453: ok tolower

tool: D9: fail isprint

tool: D426: ok memcpy

tool: D550: fail memset

tool: D202: 2134

tool: D394: 0

tool: D135: -30000

tool: D384: fail atoi

tool: D242: ok memset

tool: D146: ok atoi

assistant: ```c
int main(int argc, char **argv) {
  int fail, i;
  char buf[200], dest[200], c;
  puts("ok puts");
  printf("o%c pr%cntf", 'k', 'i');
  printf("\n");
  puts_nonl("ok puts_nonl\n");
  putchar('o');
  putchar('k');
  putchar(' ');
  putchar('p');
  putchar('u');
  putchar('t');
  putchar('c');
  putchar('h');
  putchar('a');
  putchar('r');
  putchar('\n');
  fail = 0;
  set_echo(0);
  if (getchar() != 'x') {
    puts("[lost x]");
    fail++;
  }
  if (getchar() != '\n') {
    puts("[lost newline]");
    fail++;
  }
  if (fail) {
    puts("fail getchar");
  } else {
    puts("ok getchar");
  }
  fail = 0;
  if (strlen("") != 0) {
    puts("[empty]");
    fail++;
  }
  if (strlen("abcdef") != 6) {
    puts("[non-empty]");
    fail++;
  }
  if (fail) {
    puts("fail strlen");
  } else {
    puts("ok strlen");
  }
  fail = 0;
  if (strcmp("less", "lesser") >= 0) {
    puts("[len=4 vs len=6]");
    fail++;
  }
  if (strcmp("lesseq", "lesser") >= 0) {
    puts("[q vs r]");
    fail++;
  }
  if (strcmp("lesser", "lesser") != 0) {
    puts("[r vs r]");
    fail++;
  }
  if (strcmp("lesser", "lesseq") <= 0) {
    puts("[r vs q]");
    fail++;
  }
  if (strcmp("lesser", "less") <= 0) {
    puts("[len=6 vs len=4]");
    fail++;
  }
  if (fail) {
    puts("fail strcmp");
  } else {
    puts("ok strcmp");
  }
  fail = 0;
  gets(buf);
  if (strcmp(buf, "This is a test of the emergency broadcasting system.") != 0) {
    puts("[comparison fails]");
    fail++;
  }
  if (fail) {
    puts("fail gets");
  } else {
    puts("ok gets");
  }
  fail = 0;
  if (!isspace(' ')) {
    puts("[whitespace]");
    fail++;
  }
  if (isspace('a')) {
    puts("[non-whitespace]");
    fail++;
  }
  if (fail) {
    puts("fail isspace");
  } else {
    puts("ok isspace");
  }
  fail = 0;
  if (!isdigit('0')) {
    puts("[0]");
    fail++;
  }
  if (!isdigit('1')) {
    puts("[1]");
    fail++;
  }
  if (!isdigit('2')) {
    puts("[2]");
    fail++;
  }
  if (!isdigit('3')) {
    puts("[3]");
    fail++;
  }
  if (!isdigit('4')) {
    puts("[4]");
    fail++;
  }
  if (!isdigit('5')) {
    puts("[5]");
    fail++;
  }
  if (!isdigit('6')) {
    puts("[6]");
    fail++;
  }
  if (!isdigit('7')) {
    puts("[7]");
    fail++;
  }
  if (!isdigit('8')) {
    puts("[8]");
    fail++;
  }
  if (!isdigit('9')) {
    puts("[9]");
    fail++;
  }
  if (isdigit(' ')) {
    puts("[space]");
    fail++;
  }
  if (isdigit('a')) {
    puts("[alpha]");
    fail++;
  }
  if (fail) {
    puts("fail isdigit");
  } else {
    puts("ok isdigit");
  }
  fail = 0;
  if (strtol("0x1234", ((void *)0L), 0) != 0x1234) {
    puts("[0x1234 base=0]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 16) != 0x1234) {
    puts("[1234 base=16]");
    fail++;
  }
  if (strtol("01234", ((void *)0L), 0) != 01234) {
    puts("[01234 base=0]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 8) != 01234) {
    puts("[1234 base=8]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 0) != 1234) {
    puts("[1234 base=0]");
    fail++;
  }
  if (strtol("1234", ((void *)0L), 10) != 1234) {
    puts("[1234 base=10]");
    fail++;
  }
  if (strtol("-1234", ((void *)0L), 0) != -1234) {
    puts("[-1234 base=0]");
    fail++;
  }
  if (strtol("-1234", ((void *)0L), 10) != -1234) {
    puts("[-1234 base=10]");
    fail++;
  }
  if (fail) {
    puts("fail strtol");
  } else {
    puts("ok strtol");
  }
  fail = 0;
  strcpy(buf, "ab");
  if (!((buf[0] == 'a') && (buf[1] == 'b') && (buf[2] == '\0')))
    fail++;
  strcpy(&buf[3], buf);
  if (!((buf[0] == 'a') && (buf[1] == 'b') && (buf[2] == '\0') && (buf[3] == 'a') && (buf[4] == 'b') && (buf[5] == '\0')))
    fail++;
  if (fail) {
    puts("fail strcpy");
  } else {
    puts("ok strcpy");
  }
  fail = 0;
  strcpy(buf, "xxxabcyyy");
  memmove(&buf[5], &buf[3], 3);
  if (!((buf[5] == 'a') && (buf[6] == 'b') && (buf[7] == 'c')))
    fail++;
  memmove(&buf[4], &buf[5], 3);
  if (!((buf[4] == 'a') && (buf[5] == 'b') && (buf[6] == 'c')))
    fail++;
  if (fail) {
    puts("fail memmove");
  } else {
    puts("ok memmove");
  }
  fail = 0;
  buf[0] = 'b';
  buf[1] = 'a';
  buf[2] = 'r';
  buf[3] = '\0';
  dest[0] = 'f';
  dest[1] = 'o';
  dest[2] = 'o';
  dest[3] = '\0';
  if (strcat(dest, buf) != dest) {
    puts("[strcat retval]");
    fail++;
  }
  if (strcmp(dest, "foobar") != 0) {
    puts("[strcat foobar]");
    fail++;
  }
  buf[0] = '\0';
  dest[0] = 'f';
  dest[1] = 'o';
  dest[2] = 'o';
  dest[3] = '\0';
  strcat(dest, buf);
  if (strcmp(dest, "foo") != 0) {
    puts("[strcat foo]");
    fail++;
  }
  dest[0] = '\0';
  buf[0] = 'f';
  buf[1] = 'o';
  buf[2] = 'o';
  buf[3] = '2';
  buf[4] = '\0';
  strcat(dest, buf);
  if (strcmp(dest, "foo2") != 0) {
    puts("[strcat foo2]");
    fail++;
  }
  if (fail) {
    puts("fail strcat");
  } else {
    puts("ok strcat");
  }
  fail = 0;
  c = 'a';
  if (toupper(c) != 'A') {
    fail++;
  }
  c = 'z';
  if (toupper(c) != 'Z') {
    fail++;
  }
  if (fail) {
    puts("fail toupper");
  } else {
    puts("ok toupper");
  }
  fail = 0;
  c = 'A';
  if (tolower(c) != 'a') {
    fail++;
  }
  c = 'Z';
  if (tolower(c) != 'z') {
    fail++;
  }
  if (fail) {
    puts("fail tolower");
  } else {
    puts("ok tolower");
  }
  fail = 0;
  if (isprint('')) {
    fail++;
  }
  if (!isprint('G')) {
    fail++;
  }
  if (fail) {
    puts("fail isprint");
  } else {
    puts("ok isprint");
  }
  fail = 0;
  buf[0] = 0;
  buf[1] = 1;
  buf[2] = 2;
  dest[0] = 0;
  dest[1] = 0;
  dest[2] = 0;
  memcpy(dest, buf, 3);
  if (!(dest[0] == 0 && dest[1] == 1 && dest[2] == 2)) {
    fail++;
  }
  if (fail) {
    puts("fail memcpy");
  } else {
    puts("ok memcpy");
  }
  memset(buf, '4', 50);
  for (i = 0; i < 50; ++i) {
    if (buf[i] != '4') {
      fail++;
    }
  }
  if (fail) {
    puts("fail memset");
  } else {
    puts("ok memset");
  }
  fail = 0;
  if (atoi("2134") != 2134) {
    fail++;
  }
  if (atoi("0") != 0) {
    fail++;
  }
  if (atoi("-30000") != -30000) {
    fail++;
  }
  if (fail) {
    puts("fail atoi");
  } else {
    puts("ok atoi");
  }
  return 0;
}
```