user: Converte this assembly snippet into its equivalent C code:

```asm
<btp_frame_parseadd_operator>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  lea    D92(%rip),%r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  mov    %r13,%rsi
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  mov    (%rdi),%rax
  mov    %rsp,%r12
  mov    %r12,%rdi
  mov    %rax,(%rsp)
  xor    %eax,%eax
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jne    L223
L159:
  xor    %eax,%eax
L140:
  mov    0x8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L112
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L223:
  lea    D331(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D359(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D405(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D403(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D382(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D63(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D377(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D145(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D234(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D119(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D285(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D267(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D217(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D252(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D47(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D131(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D9(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D263(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D413(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D388(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D25(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D173(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D343(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  lea    D69(%rip),%r15
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r15,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L334
  xor    %eax,%eax
  mov    %r14,%rsi
  mov    %r12,%rdi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D158(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D341(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D207(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D115(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D231(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D197(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D427(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D66(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D68(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D50(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D398(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D224(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D376(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D348(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D402(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D222(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D210(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jg     L34
  lea    D120(%rip),%r14
  xor    %eax,%eax
  mov    %r12,%rdi
  mov    %r14,%rsi
  call   <btp_skip_string@plt>
  test   %eax,%eax
  jle    L159
  nopl   (%rax)
L34:
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <btp_strbuf_append_str@plt>
  mov    %r14,%rsi
L260:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <btp_strbuf_append_str@plt>
  mov    (%rsp),%rdx
  mov    %edx,%eax
  sub    (%rbx),%eax
  mov    %rdx,(%rbx)
  jmp    L140
L334:
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <btp_strbuf_append_str@plt>
  mov    %r15,%rsi
  jmp    L260
L112:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D92
type_infered: string
name: read_data
arguments: tag: D331
type_infered: string
name: read_data
arguments: tag: D359
type_infered: string
name: read_data
arguments: tag: D405
type_infered: string
name: read_data
arguments: tag: D403
type_infered: string
name: read_data
arguments: tag: D382
type_infered: string
name: read_data
arguments: tag: D63
type_infered: string
name: read_data
arguments: tag: D377
type_infered: string
name: read_data
arguments: tag: D145
type_infered: string
name: read_data
arguments: tag: D234
type_infered: string
name: read_data
arguments: tag: D119
type_infered: string
name: read_data
arguments: tag: D285
type_infered: string
name: read_data
arguments: tag: D267
type_infered: string
name: read_data
arguments: tag: D217
type_infered: string
name: read_data
arguments: tag: D252
type_infered: string
name: read_data
arguments: tag: D47
type_infered: string
name: read_data
arguments: tag: D131
type_infered: string
name: read_data
arguments: tag: D9
type_infered: string
name: read_data
arguments: tag: D263
type_infered: string
name: read_data
arguments: tag: D413
type_infered: string
name: read_data
arguments: tag: D388
type_infered: string
name: read_data
arguments: tag: D25
type_infered: string
name: read_data
arguments: tag: D173
type_infered: string
name: read_data
arguments: tag: D343
type_infered: string
name: read_data
arguments: tag: D69
type_infered: string
name: read_data
arguments: tag: D158
type_infered: string
name: read_data
arguments: tag: D341
type_infered: string
name: read_data
arguments: tag: D207
type_infered: string
name: read_data
arguments: tag: D115
type_infered: string
name: read_data
arguments: tag: D231
type_infered: string
name: read_data
arguments: tag: D197
type_infered: string
name: read_data
arguments: tag: D427
type_infered: string
name: read_data
arguments: tag: D66
type_infered: string
name: read_data
arguments: tag: D68
type_infered: string
name: read_data
arguments: tag: D50
type_infered: string
name: read_data
arguments: tag: D398
type_infered: string
name: read_data
arguments: tag: D224
type_infered: string
name: read_data
arguments: tag: D376
type_infered: string
name: read_data
arguments: tag: D348
type_infered: string
name: read_data
arguments: tag: D402
type_infered: string
name: read_data
arguments: tag: D222
type_infered: string
name: read_data
arguments: tag: D210
type_infered: string
name: read_data
arguments: tag: D120
type_infered: string

tool: D92: operator

tool: D331: >>=

tool: D359: >>

tool: D405: >=

tool: D403: >

tool: D382: <<=

tool: D63: <<

tool: D377: <=

tool: D145: <

tool: D234: ->*

tool: D119: ->

tool: D285: -

tool: D267: ==

tool: D217: =

tool: D252: &&

tool: D47: &=

tool: D131: &

tool: D9: ||

tool: D263: |=

tool: D413: |

tool: D388: ++

tool: D25: +=

tool: D173: +

tool: D343: --

tool: D69: -=

tool: D158: /=

tool: D341: /

tool: D207: *=

tool: D115: *

tool: D231: %=

tool: D197: %

tool: D427: !=

tool: D66: !

tool: D68: ~

tool: D50: ()

tool: 

tool: D224: ,

tool: D376: ^=

tool: D348: ^

tool: D402:  new[]

tool: D222:  new

tool: D210:  delete[]

tool: D120:  delete

assistant: ```c
int btp_frame_parseadd_operator(const char **input, struct btp_strbuf *target) {
  const char *local_input = *input;
  if (0 == btp_skip_string(&local_input, "operator"))
    return 0;
  if (0 < btp_skip_string(&local_input, ">>=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, ">>=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, ">>")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, ">>");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, ">=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, ">=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, ">")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, ">");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "<<=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "<<=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "<<")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "<<");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "<=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "<=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "<")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "<");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "->*")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "->*");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "->")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "->");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "-")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "-");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "==")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "==");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "&&")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "&&");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "&=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "&=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "&")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "&");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "||")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "||");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "|=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "|=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "|")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "|");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "++")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "++");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "+=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "+=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "+")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "+");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "--")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "--");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "-=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "-=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "-")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "-");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "/=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "/=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "/")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "/");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "*=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "*=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "*")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "*");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "%=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "%=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "%")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "%");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "!=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "!=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "!")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "!");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "~")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "~");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "()")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "()");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "[]")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "[]");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, ",")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, ",");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, "^=")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "^=");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, "^")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, "^");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, " new[]")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, " new[]");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, " new")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, " new");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  if (0 < btp_skip_string(&local_input, " delete[]")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, " delete[]");
    int length = local_input - *input;
    *input = local_input;
    return length;
  }
  if (0 < btp_skip_string(&local_input, " delete")) {
    btp_strbuf_append_str(target, "operator");
    btp_strbuf_append_str(target, " delete");
    int length = local_input - *input;
    *input = local_input;
    return length;
  };
  return 0;
}
```