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

```asm
<attribute_to_str>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %edi,%ebx
  cmp    $0x7,%edi
  jle    L30
  lea    -0x3de(%rdi),%eax
  cmp    $0x9,%eax
  ja     L131
  lea    -0x3de(%rbx),%eax
  cmp    $0x9,%eax
  ja     L131
  mov    %eax,%eax
  lea    D135(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L30:
  test   %edi,%edi
  jg     L89
L126:
  mov    $0x1,%edi
  call   <malloc@plt>
  mov    %rax,%rbp
  mov    %ebx,%ecx
  lea    D61(%rip),%rdx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <snprintf@plt>
  jmp    L194
  lea    D48(%rip),%rbp
  jmp    L194
L89:
  cmp    $0x7,%edi
  ja     L131
  mov    %edi,%eax
  lea    D47(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D50(%rip),%rbp
L194:
  mov    %rbp,%rax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  lea    D8(%rip),%rbp
  jmp    L194
  lea    D80(%rip),%rbp
  jmp    L194
  lea    D175(%rip),%rbp
  jmp    L194
  lea    D57(%rip),%rbp
  jmp    L194
  lea    D10(%rip),%rbp
  jmp    L194
  lea    D196(%rip),%rbp
  jmp    L194
  lea    D56(%rip),%rbp
  jmp    L194
  lea    D189(%rip),%rbp
  jmp    L194
  lea    D69(%rip),%rbp
  jmp    L194
  lea    D33(%rip),%rbp
  jmp    L194
  lea    D4(%rip),%rbp
  jmp    L194
  lea    D45(%rip),%rbp
  jmp    L194
L131:
  cmp    $0x7cf,%ebx
  jle    L126
  mov    $0x14,%edi
  call   <malloc@plt>
  mov    %rax,%rbp
  lea    -0x7d0(%rbx),%ecx
  lea    D171(%rip),%rdx
  mov    $0x14,%esi
  mov    %rax,%rdi
  call   <snprintf@plt>
  jmp    L194
  lea    D36(%rip),%rbp
  jmp    L194
  lea    D151(%rip),%rbp
  jmp    L194
```

tool_calls: name: read_data
arguments: data_tag: D61
type_guessed: string
name: read_data
arguments: data_tag: D48
type_guessed: string
name: read_data
arguments: data_tag: D50
type_guessed: string
name: read_data
arguments: data_tag: D8
type_guessed: string
name: read_data
arguments: data_tag: D80
type_guessed: string
name: read_data
arguments: data_tag: D175
type_guessed: string
name: read_data
arguments: data_tag: D57
type_guessed: string
name: read_data
arguments: data_tag: D10
type_guessed: string
name: read_data
arguments: data_tag: D196
type_guessed: string
name: read_data
arguments: data_tag: D56
type_guessed: string
name: read_data
arguments: data_tag: D189
type_guessed: string
name: read_data
arguments: data_tag: D69
type_guessed: string
name: read_data
arguments: data_tag: D33
type_guessed: string
name: read_data
arguments: data_tag: D4
type_guessed: string
name: read_data
arguments: data_tag: D45
type_guessed: string
name: read_data
arguments: data_tag: D171
type_guessed: string
name: read_data
arguments: data_tag: D36
type_guessed: string
name: read_data
arguments: data_tag: D151
type_guessed: string

tool: D61: %d

tool: D48: MOD

tool: D50: Extra Long ID

tool: D8: Extra Long Integer

tool: D80: Extra Long Fractional Part

tool: D175: Extra Long Exponent Part

tool: D57: Integer Leading Zero

tool: D10: OR

tool: D196: AND

tool: D56: <>

tool: D189: <=

tool: D69: >=

tool: D33: LONGREAL

tool: D4: REAL

tool: D45: INT

tool: D171: loc%d in SYMTABLE

tool: D36: DIV

tool: D151: Unrecognized Symbol

assistant: ```c
char *attribute_to_str(int attr) {
  if (attr == 1)
    return "Unrecognized Symbol";
  else if (attr == 2)
    return "Extra Long ID";
  else if (attr == 3 || attr == 4)
    return "Extra Long Integer";
  else if (attr == 5)
    return "Extra Long Fractional Part";
  else if (attr == 6)
    return "Extra Long Exponent Part";
  else if (attr == 7)
    return "Integer Leading Zero";
  else if (attr == 990)
    return "MOD";
  else if (attr == 991)
    return "DIV";
  else if (attr == 992)
    return "OR";
  else if (attr == 993)
    return "AND";
  else if (attr == 994)
    return "<>";
  else if (attr == 995)
    return "<=";
  else if (attr == 996)
    return ">=";
  else if (attr == 997)
    return "LONGREAL";
  else if (attr == 998)
    return "REAL";
  else if (attr == 999)
    return "INT";
  else if (attr >= 2000) {
    char *str = (char *)malloc(20);
    snprintf(str, 20, "loc%d in SYMTABLE", attr - 2000);
    return str;
  }
  char *str = (char *)malloc(1);
  snprintf(str, 1, "%d", attr);
  return str;
}
```