user: Please show me the C implementation that matches the assembly code listed below:

```asm
<check_ft_type>:
  endbr64
  push   %r13
  lea    D323(%rip),%r13
  push   %r12
  mov    %rsi,%r12
  mov    %r13,%rsi
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0x8,%rsp
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L90
L303:
  movl   $0xe,(%rbx)
  mov    $0x1,%eax
L280:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L90:
  lea    D211(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L151
  lea    D197(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L151
  lea    D307(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L277
  lea    D17(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L277
  lea    D268(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L486
  lea    D229(%rip),%r13
L407:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  movl   $0x10,(%rbx)
  mov    $0x1,%eax
  jmp    L280
  nopl   (%rax)
L151:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  jmp    L303
  nopl   0x0(%rax,%rax,1)
L277:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  lea    D46(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  movl   $0x0,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L486:
  lea    D139(%rip),%rsi
  mov    %rbp,%rdi
  lea    D229(%rip),%r13
  call   <strcmp@plt>
  test   %rax,%rax
  je     L407
  lea    D299(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L407
  lea    D96(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L407
  lea    D318(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L407
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L407
  lea    D301(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L407
  lea    D116(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L407
  lea    D90(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L304
  movl   $0x11,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L304:
  lea    D140(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L231
  movl   $0x3,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L231:
  lea    D292(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L481
  movl   $0xb,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L481:
  lea    D186(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L283
  movl   $0xd,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L283:
  lea    D165(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L117
  movl   $0x7,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L117:
  lea    D171(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L55
  movl   $0x12,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L55:
  lea    D46(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L275
  movl   $0x0,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L275:
  lea    D10(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L24
  movl   $0x9,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L24:
  lea    D65(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L482
  movl   $0x5,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L482:
  lea    D251(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L477
  movl   $0x4,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L477:
  lea    D300(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L76
  movl   $0x6,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L76:
  lea    D61(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L447
  movl   $0xc,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L447:
  lea    D208(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L395
  movl   $0x8,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L395:
  lea    D247(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L427
  movl   $0x1,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L427:
  lea    D283(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L272
  movl   $0x2,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L272:
  lea    D111(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L488
  movl   $0xf,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L488:
  lea    D260(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L183
  movl   $0x13,(%rbx)
  mov    $0x1,%eax
  jmp    L280
L183:
  lea    D79(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  xor    %eax,%eax
  test   %r8,%r8
  jne    L280
  movl   $0x14,(%rbx)
  mov    $0x1,%eax
  jmp    L280
```

tool_calls: name: read_data
arguments: tag: D323
type_guessed: string
name: read_data
arguments: tag: D211
type_guessed: string
name: read_data
arguments: tag: D197
type_guessed: string
name: read_data
arguments: tag: D307
type_guessed: string
name: read_data
arguments: tag: D17
type_guessed: string
name: read_data
arguments: tag: D268
type_guessed: string
name: read_data
arguments: tag: D229
type_guessed: string
name: read_data
arguments: tag: D46
type_guessed: string
name: read_data
arguments: tag: D139
type_guessed: string
name: read_data
arguments: tag: D299
type_guessed: string
name: read_data
arguments: tag: D96
type_guessed: string
name: read_data
arguments: tag: D318
type_guessed: string
name: read_data
arguments: tag: D301
type_guessed: string
name: read_data
arguments: tag: D116
type_guessed: string
name: read_data
arguments: tag: D90
type_guessed: string
name: read_data
arguments: tag: D140
type_guessed: string
name: read_data
arguments: tag: D292
type_guessed: string
name: read_data
arguments: tag: D186
type_guessed: string
name: read_data
arguments: tag: D165
type_guessed: string
name: read_data
arguments: tag: D171
type_guessed: string
name: read_data
arguments: tag: D10
type_guessed: string
name: read_data
arguments: tag: D65
type_guessed: string
name: read_data
arguments: tag: D251
type_guessed: string
name: read_data
arguments: tag: D300
type_guessed: string
name: read_data
arguments: tag: D61
type_guessed: string
name: read_data
arguments: tag: D208
type_guessed: string
name: read_data
arguments: tag: D247
type_guessed: string
name: read_data
arguments: tag: D283
type_guessed: string
name: read_data
arguments: tag: D111
type_guessed: string
name: read_data
arguments: tag: D260
type_guessed: string
name: read_data
arguments: tag: D79
type_guessed: string

tool: D323: STRUCT

tool: D211: HELIX

tool: D197: STRAND

tool: D307: DNA_BIND

tool: D17: ZN_FING

tool: D268: NP_BIND

tool: D229: SITE

tool: D46: DOMAIN

tool: D139: CA_BIND

tool: D299: METAL

tool: D96: CARBOHYD

tool: D318: DISULFID

tool: D301: ACT_SITE

tool: D116: BINDING

tool: D90: MOD_RES

tool: D140: REPEAT

tool: D292: TRANSMEM

tool: D186: SIGNAL

tool: D165: VARSPLIC

tool: D171: VARIANT

tool: D10: BLOCK

tool: D65: REGION

tool: D251: PHYLOBLOCK

tool: D300: SEQERR

tool: D61: COIL

tool: D208: LOWCOMP

tool: D247: PFAM-A

tool: D283: PFAM-B

tool: D111: PROSITE

tool: D260: ELM

tool: D79: DISORDER

assistant: ```c
int check_ft_type(char *ft_type, char *ft_name, int *type) {
  int ret = 0;
  int seq_type = 0;
  if (strcmp(ft_type, "STRUCT") == 0) {
    seq_type = 3;
    (*type) = 14;
    ret = 1;
  } else if ((strcmp(ft_type, "HELIX") == 0) || (strcmp(ft_type, "STRAND") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "STRUCT");
    seq_type = 3;
    (*type) = 14;
    ret = 1;
  } else if ((strcmp(ft_type, "DNA_BIND") == 0) || (strcmp(ft_type, "ZN_FING") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "DOMAIN");
    (*type) = 0;
    ret = 1;
  } else if ((strcmp(ft_type, "NP_BIND") == 0) || (strcmp(ft_type, "CA_BIND") == 0) || (strcmp(ft_type, "METAL") == 0) || (strcmp(ft_type, "CARBOHYD") == 0) || (strcmp(ft_type, "DISULFID") == 0) || (strcmp(ft_type, "SITE") == 0) || (strcmp(ft_type, "ACT_SITE") == 0) || (strcmp(ft_type, "BINDING") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "SITE");
    (*type) = 16;
    ret = 1;
  } else if (strcmp(ft_type, "MOD_RES") == 0) {
    (*type) = 17;
    ret = 1;
  } else if (strcmp(ft_type, "REPEAT") == 0) {
    (*type) = 3;
    ret = 1;
  } else if (strcmp(ft_type, "TRANSMEM") == 0) {
    (*type) = 11;
    ret = 1;
  } else if (strcmp(ft_type, "SIGNAL") == 0) {
    (*type) = 13;
    ret = 1;
  } else if (strcmp(ft_type, "VARSPLIC") == 0) {
    (*type) = 7;
    ret = 1;
  } else if (strcmp(ft_type, "VARIANT") == 0) {
    (*type) = 18;
    ret = 1;
  } else if (strcmp(ft_type, "DOMAIN") == 0) {
    (*type) = 0;
    ret = 1;
  } else if (strcmp(ft_type, "BLOCK") == 0) {
    (*type) = 9;
    ret = 1;
  } else if (strcmp(ft_type, "REGION") == 0) {
    (*type) = 5;
    ret = 1;
  } else if (strcmp(ft_type, "PHYLOBLOCK") == 0) {
    (*type) = 4;
    ret = 1;
  } else if (strcmp(ft_type, "SEQERR") == 0) {
    (*type) = 6;
    ret = 1;
  } else if (strcmp(ft_type, "COIL") == 0) {
    (*type) = 12;
    ret = 1;
  } else if (strcmp(ft_type, "LOWCOMP") == 0) {
    (*type) = 8;
    ret = 1;
  } else if (strcmp(ft_type, "PFAM-A") == 0) {
    (*type) = 1;
    ret = 1;
  } else if (strcmp(ft_type, "PFAM-B") == 0) {
    (*type) = 2;
    ret = 1;
  } else if (strcmp(ft_type, "PROSITE") == 0) {
    (*type) = 15;
    ret = 1;
  } else if (strcmp(ft_type, "ELM") == 0) {
    (*type) = 19;
    ret = 1;
  } else if (strcmp(ft_type, "DISORDER") == 0) {
    (*type) = 20;
    ret = 1;
  }
  return ret;
}
```