user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %rbp
  lea    D2(%rip),%rdi
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0xe(%rsp),%rbp
  call   <printf@plt>
  mov    %rbp,%rsi
  lea    D13(%rip),%rdi
  call   <scanf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %eax,%ecx
  test   %eax,%eax
  jle    L237
  xor    %esi,%esi
  xor    %eax,%eax
  jmp    L218
  nopl   0x0(%rax)
L263:
  cmp    $0x56,%dl
  je     L226
  cmp    $0x58,%dl
  jne    L201
  add    $0xa,%esi
L296:
  add    $0x1,%eax
L100:
  cmp    %eax,%ecx
  jle    L51
L218:
  movslq %eax,%rdx
  movzbl 0xe(%rsp,%rdx,1),%edx
  cmp    $0x49,%dl
  jne    L263
  lea    0x1(%rax),%edi
  movslq %edi,%rdx
  movzbl 0xe(%rsp,%rdx,1),%edx
  cmp    $0x56,%dl
  je     L124
  cmp    $0x58,%dl
  je     L304
  cmp    $0x4c,%dl
  je     L279
  cmp    $0x43,%dl
  je     L253
  mov    %edi,%eax
  cmp    %eax,%ecx
  jg     L218
L51:
  lea    -0x1(%rcx),%eax
  cltq
  cmpb   $0x49,0xe(%rsp,%rax,1)
  je     L257
L111:
  cmp    $0xff,%esi
  jle    L191
  lea    D25(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L72:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L161
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbp
  ret
L201:
  cmp    $0x4c,%dl
  jne    L130
  add    $0x32,%esi
  jmp    L296
  nopl   (%rax)
L226:
  add    $0x5,%esi
  jmp    L296
L253:
  add    $0x63,%esi
  add    $0x2,%eax
  jmp    L100
  nopl   0x0(%rax,%rax,1)
L279:
  add    $0x30,%esi
  mov    %edi,%eax
  jmp    L296
  nopw   0x0(%rax,%rax,1)
L304:
  add    $0x9,%esi
  mov    %edi,%eax
  jmp    L296
  nopw   0x0(%rax,%rax,1)
L124:
  add    $0x4,%esi
  mov    %edi,%eax
  jmp    L296
L237:
  lea    -0x1(%rax),%eax
  xor    %esi,%esi
  cltq
  cmpb   $0x49,0xe(%rsp,%rax,1)
  je     L180
L191:
  lea    D12(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L72
L257:
  lea    -0x2(%rcx),%eax
  cltq
  cmpb   $0x49,0xe(%rsp,%rax,1)
  jne    L111
L13:
  lea    -0x3(%rcx),%eax
  cltq
  cmpb   $0x49,0xe(%rsp,%rax,1)
  je     L244
  add    $0x2,%esi
  jmp    L111
L180:
  lea    -0x2(%rcx),%eax
  cltq
  cmpb   $0x49,0xe(%rsp,%rax,1)
  jne    L191
  jmp    L13
L244:
  add    $0x3,%esi
  jmp    L111
L130:
  add    $0x1,%eax
  cmp    $0x43,%dl
  jne    L100
  add    $0x64,%esi
  jmp    L100
L161:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D2
type_infered: string
name: unpack_data
arguments: data_tag: D13
type_infered: string
name: unpack_data
arguments: data_tag: D25
type_infered: string
name: unpack_data
arguments: data_tag: D12
type_infered: string

tool: D2: Strange letters number:

tool: D13: %s

tool: D25: Sorry bro, it's toooo big

tool: D12: Normal number with digits: %d

assistant: ```c
int main() {
  char a[10];
  int n, l, sum = 0;
  printf("Strange letters number:");
  scanf("%s", a);
  l = strlen(a);
  for (n = 0; n < l; n++) {
    if (a[n] == 'I' && a[n + 1] == 'V') {
      sum = sum + 4;
      n++;
    } else if (a[n] == 'V')
      sum = sum + 5;
    if (a[n] == 'I' && a[n + 1] == 'X') {
      sum = sum + 9;
      n++;
    } else if (a[n] == 'X')
      sum = sum + 10;
    if (a[n] == 'I' && a[n + 1] == 'L') {
      sum = sum + 48;
      n++;
    } else if (a[n] == 'L')
      sum = sum + 50;
    if (a[n] == 'I' && a[n + 1] == 'C') {
      sum = sum + 99;
      n++;
    } else if (a[n] == 'C')
      sum = sum + 100;
  }
  if (a[l - 1] == 'I' && a[l - 2] == 'I' && a[l - 3] == 'I') {
    sum = sum + 3;
  } else if (a[l - 1] == 'I' && a[l - 2] == 'I')
    sum = sum + 2;
  if (sum < 256) {
    printf("Normal number with digits: %d", sum);
  } else
    printf("Sorry bro, it's toooo big");
  return 0;
}
```