user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<str_funcs>:
  endbr64
  push   %r14
  lea    D123(%rip),%rsi
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x8,%rsp
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L377
  lea    D418(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <mymemcmp@plt>
  lea    D400(%rip),%rsi
  mov    %eax,%ebp
L362:
  xor    %edi,%edi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  cmp    %eax,%ebp
  sete   %al
  movzbl %al,%eax
L399:
  add    $0x8,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  xchg   %ax,%ax
L377:
  lea    D16(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L408
  lea    D418(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrcmp@plt>
  lea    D400(%rip),%rsi
  mov    %eax,%ebp
  jmp    L362
  nopw   0x0(%rax,%rax,1)
L408:
  lea    D121(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L162
  lea    D449(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L333
  lea    D418(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrcat@plt>
  mov    %rax,%rbp
L112:
  xor    %edi,%edi
  lea    D81(%rip),%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrcmp@plt>
  test   %eax,%eax
  sete   %al
  add    $0x8,%rsp
  pop    %rbp
  movzbl %al,%eax
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L162:
  lea    D418(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <mystrncmp@plt>
  lea    D400(%rip),%rsi
  mov    %eax,%ebp
  jmp    L362
  cs nopw 0x0(%rax,%rax,1)
L333:
  lea    D119(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L262
  lea    D420(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L96
  lea    D418(%rip),%rbp
  xor    %edi,%edi
  mov    %rbp,%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rsi
  xor    %edi,%edi
  mov    %rax,%r13
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  mov    %rax,%rbp
  call   <mymemcpy@plt>
  jmp    L112
  nopl   0x0(%rax)
L262:
  lea    D418(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %rbp,%rdi
  mov    %r12,%rsi
  mov    %eax,%edx
  call   <mystrncat@plt>
  mov    %rax,%rbp
  jmp    L112
L96:
  lea    D105(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L340
  lea    D418(%rip),%rbp
  xor    %edi,%edi
  mov    %rbp,%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rsi
  xor    %edi,%edi
  mov    %rax,%r13
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %r12d,%edx
  mov    %r13,%rsi
  mov    %rax,%rdi
  mov    %rax,%rbp
  call   <mymemmove@plt>
  jmp    L112
L340:
  lea    D206(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L4
  lea    D418(%rip),%rsi
  xor    %edi,%edi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <mystrdup@plt>
  mov    %rax,%rbp
  jmp    L112
L4:
  lea    D442(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L35
  lea    D418(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <mystrndup@plt>
  mov    %rax,%rbp
  jmp    L112
L35:
  lea    D177(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L358
  lea    D418(%rip),%rsi
  xor    %edi,%edi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  mov    %rax,%rbp
  call   <mystrlen@plt>
  lea    0x1(%rax),%edi
  call   <malloc@plt>
  mov    %rbp,%rsi
  mov    %rax,%rdi
  call   <mystrcpy@plt>
  mov    %rax,%rbp
  jmp    L112
L358:
  lea    D30(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L228
  lea    D418(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %rbp,%rsi
  mov    %r12d,%edx
  mov    %rax,%rdi
  call   <mystrncpy@plt>
  mov    %rax,%rbp
  jmp    L112
L228:
  lea    D243(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L392
  lea    D418(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %rbp,%rdi
  mov    %r12,%rsi
  mov    %eax,%edx
  call   <mymemchr@plt>
  mov    %rax,%rbp
  jmp    L112
L392:
  lea    D251(%rip),%r14
  mov    %rbp,%rdi
  mov    %r14,%rsi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L135
  lea    D364(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L91
L135:
  lea    D418(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  mov    %rax,%r13
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L296
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrchr@plt>
  mov    %rax,%rbp
  jmp    L112
L296:
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrrchr@plt>
  mov    %rax,%rbp
  jmp    L112
L91:
  lea    D28(%rip),%r14
  mov    %rbp,%rdi
  mov    %r14,%rsi
  call   <mystrcmp@plt>
  test   %eax,%eax
  je     L254
  lea    D366(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L239
L254:
  lea    D418(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  mov    %rax,%r13
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L28
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrspn@plt>
  mov    %eax,%ebp
L207:
  lea    D81(%rip),%rsi
  jmp    L362
L239:
  lea    D192(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L236
  lea    D418(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  xor    %edi,%edi
  mov    %r12,%rsi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrpbrk@plt>
  xor    %edi,%edi
  lea    D81(%rip),%rsi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    $0x1,%edx
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrncmp@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L399
L28:
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <mystrcspn@plt>
  lea    0x1(%rax),%ebp
  jmp    L207
L236:
  lea    D180(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L202
  lea    D418(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %r12,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  call   <mystrstr@plt>
  mov    %rax,%rbp
  jmp    L112
L202:
  lea    D209(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L211
  lea    D418(%rip),%r13
  xor    %edi,%edi
  mov    %r13,%rsi
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%rbp
  call   <mystrtok@plt>
  mov    %r13,%rsi
  xor    %edi,%edi
  mov    %rax,%r12
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <mymemset@plt>
  jmp    L112
L211:
  lea    D176(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  test   %eax,%eax
  jne    L77
  lea    D418(%rip),%rbp
  xor    %edi,%edi
  mov    %rbp,%rsi
  call   <mystrtok@plt>
  mov    %rbp,%rsi
  xor    %edi,%edi
  mov    %rax,%r13
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <atoi@plt>
  lea    0x1(%rax),%edi
  mov    %eax,%r12d
  call   <malloc@plt>
  mov    %r12d,%edx
  mov    %r13,%rdi
  mov    %rax,%rsi
  mov    %rax,%rbp
  call   <myswab@plt>
  jmp    L112
L77:
  lea    D458(%rip),%rsi
  mov    %rbp,%rdi
  call   <mystrcmp@plt>
  mov    %eax,%r8d
  mov    $0x2,%eax
  test   %r8d,%r8d
  jne    L399
  lea    D418(%rip),%r12
  xor    %edi,%edi
  mov    %r12,%rsi
  call   <mystrtok@plt>
  mov    %rax,%rdi
  call   <mystrlen@plt>
  mov    %r12,%rsi
  mov    %eax,%ebp
  jmp    L362
```

tool_calls: name: unpack_data
arguments: tag: D123
type_infered: string
name: unpack_data
arguments: tag: D418
type_infered: string
name: unpack_data
arguments: tag: D400
type_infered: string
name: unpack_data
arguments: tag: D16
type_infered: string
name: unpack_data
arguments: tag: D121
type_infered: string
name: unpack_data
arguments: tag: D449
type_infered: string
name: unpack_data
arguments: tag: D81
type_infered: string
name: unpack_data
arguments: tag: D119
type_infered: string
name: unpack_data
arguments: tag: D420
type_infered: string
name: unpack_data
arguments: tag: D105
type_infered: string
name: unpack_data
arguments: tag: D206
type_infered: string
name: unpack_data
arguments: tag: D442
type_infered: string
name: unpack_data
arguments: tag: D177
type_infered: string
name: unpack_data
arguments: tag: D30
type_infered: string
name: unpack_data
arguments: tag: D243
type_infered: string
name: unpack_data
arguments: tag: D251
type_infered: string
name: unpack_data
arguments: tag: D364
type_infered: string
name: unpack_data
arguments: tag: D28
type_infered: string
name: unpack_data
arguments: tag: D366
type_infered: string
name: unpack_data
arguments: tag: D192
type_infered: string
name: unpack_data
arguments: tag: D180
type_infered: string
name: unpack_data
arguments: tag: D209
type_infered: string
name: unpack_data
arguments: tag: D176
type_infered: string
name: unpack_data
arguments: tag: D458
type_infered: string

tool: D123: mymemcmp

tool: D418:  	

tool: D400:  	


tool: D16: mystrcmp

tool: D121: mystrncmp

tool: D449: mystrcat

tool: D81:  


tool: D119: mystrncat

tool: D420: mymemcpy

tool: D105: mymemmove

tool: D206: mystrdup

tool: D442: mystrndup

tool: D177: mystrcpy

tool: D30: mystrncpy

tool: D243: mymemchr

tool: D251: mystrchr

tool: D364: mystrrchr

tool: D28: mystrspn

tool: D366: mystrcspn

tool: D192: mystrpbrk

tool: D180: mystrstr

tool: D209: mymemset

tool: D176: myswab

tool: D458: mystrlen

assistant: ```c
int str_funcs(char *func, char *line) {
  char *str1, *str2, *delim, *str3, *str4, *token;
  int i, val;
  if (mystrcmp(func, "mymemcmp") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    delim = mystrtok(NULL, " \t");
    i = atoi(delim);
    val = mymemcmp(str1, str2, i);
    token = mystrtok(NULL, " \t\n");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrcmp") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    val = mystrcmp(str1, str2);
    token = mystrtok(NULL, " \t\n");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrncmp") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    delim = mystrtok(NULL, " \t");
    i = atoi(delim);
    val = mystrncmp(str1, str2, i);
    token = mystrtok(NULL, " \t\n");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrcat") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrcat(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrncat") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    delim = mystrtok(NULL, " \t");
    i = atoi(delim);
    str3 = mystrncat(str1, str2, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemcpy") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    mymemcpy(str3, str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemmove") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    mymemmove(str3, str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrdup") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrdup(str1);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str2, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrndup") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = mystrndup(str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrcpy") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = (char *)malloc(mystrlen(str1) + 1);
    str2 = mystrcpy(str2, str1);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str2, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrncpy") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    str3 = mystrncpy(str3, str1, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemchr") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrtok(NULL, " \t");
    i = atoi(str3);
    str4 = mymemchr(str1, str2, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str4, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrchr") == 0 || mystrcmp(func, "mystrrchr") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    if (mystrcmp(func, "mystrchr") == 0)
      str3 = mystrchr(str1, str2);
    else
      str3 = mystrrchr(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrspn") == 0 || mystrcmp(func, "mystrcspn") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    if (mystrcmp(func, "mystrspn") == 0)
      i = mystrspn(str1, str2);
    else
      i = mystrcspn(str1, str2) + 1;
    token = mystrtok(NULL, " \n");
    val = atoi(token);
    if (i == val)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrpbrk") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrpbrk(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrncmp(str3, token, 1);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrstr") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrstr(str1, str2);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mymemset") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    str3 = mystrtok(NULL, " \t");
    i = atoi(str3);
    mymemset(str1, str2, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str1, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "myswab") == 0) {
    str1 = mystrtok(NULL, " \t");
    str2 = mystrtok(NULL, " \t");
    i = atoi(str2);
    str3 = (char *)malloc(i + 1);
    myswab(str1, str3, i);
    token = mystrtok(NULL, " \n");
    i = mystrcmp(str3, token);
    if (i == 0)
      return 1;
    else
      return 0;
  } else if (mystrcmp(func, "mystrlen") == 0) {
    str1 = mystrtok(NULL, " \t");
    val = mystrlen(str1);
    token = mystrtok(NULL, " \t");
    i = atoi(token);
    if (val == i)
      return 1;
    else
      return 0;
  }
  return 2;
}
```