user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<parse_line>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x418,%rsp
  mov    %rdi,-0x3f8(%rbp)
  mov    %rsi,-0x400(%rbp)
  mov    %rdx,-0x408(%rbp)
  mov    %rcx,-0x410(%rbp)
  mov    %r8,-0x418(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movabs $0x6574696877,%rax
  mov    %rax,-0x190(%rbp)
  movw   $0x0,-0x188(%rbp)
  movq   $0x3163,-0x186(%rbp)
  movw   $0x0,-0x17e(%rbp)
  movl   $0x0,-0x17c(%rbp)
  movq   $0x646572,-0x178(%rbp)
  movw   $0x0,-0x170(%rbp)
  movq   $0x3263,-0x16e(%rbp)
  movw   $0x0,-0x166(%rbp)
  movl   $0x20,-0x164(%rbp)
  movabs $0x6e65657267,%rax
  mov    %rax,-0x160(%rbp)
  movw   $0x0,-0x158(%rbp)
  movq   $0x3363,-0x156(%rbp)
  movw   $0x0,-0x14e(%rbp)
  movl   $0x40,-0x14c(%rbp)
  movq   $0x65756c62,-0x148(%rbp)
  movw   $0x0,-0x140(%rbp)
  movq   $0x3463,-0x13e(%rbp)
  movw   $0x0,-0x136(%rbp)
  movl   $0x60,-0x134(%rbp)
  movabs $0x776f6c6c6579,%rax
  mov    %rax,-0x130(%rbp)
  movw   $0x0,-0x128(%rbp)
  movq   $0x3563,-0x126(%rbp)
  movw   $0x0,-0x11e(%rbp)
  movl   $0x80,-0x11c(%rbp)
  movq   $0x6e617963,-0x118(%rbp)
  movw   $0x0,-0x110(%rbp)
  movq   $0x3663,-0x10e(%rbp)
  movw   $0x0,-0x106(%rbp)
  movl   $0xa0,-0x104(%rbp)
  movabs $0x61746e6567616d,%rax
  mov    %rax,-0x100(%rbp)
  movw   $0x0,-0xf8(%rbp)
  movq   $0x3763,-0xf6(%rbp)
  movw   $0x0,-0xee(%rbp)
  movl   $0xc0,-0xec(%rbp)
  movabs $0x3265756c62,%rax
  mov    %rax,-0xe8(%rbp)
  movw   $0x0,-0xe0(%rbp)
  movq   $0x3863,-0xde(%rbp)
  movw   $0x0,-0xd6(%rbp)
  movl   $0xe0,-0xd4(%rbp)
  movq   $0x3078,-0x2c0(%rbp)
  movw   $0x0,-0x2b8(%rbp)
  movb   $0x64,-0x2b6(%rbp)
  movb   $0x0,-0x2b5(%rbp)
  movb   $0x0,-0x2b4(%rbp)
  movq   $0x3079,-0x2b3(%rbp)
  movw   $0x0,-0x2ab(%rbp)
  movb   $0x64,-0x2a9(%rbp)
  movb   $0x1,-0x2a8(%rbp)
  movb   $0x0,-0x2a7(%rbp)
  movq   $0x307a,-0x2a6(%rbp)
  movw   $0x0,-0x29e(%rbp)
  movb   $0x64,-0x29c(%rbp)
  movb   $0x2,-0x29b(%rbp)
  movb   $0x0,-0x29a(%rbp)
  movq   $0x72,-0x299(%rbp)
  movw   $0x0,-0x291(%rbp)
  movb   $0x64,-0x28f(%rbp)
  movb   $0x3,-0x28e(%rbp)
  movb   $0x0,-0x28d(%rbp)
  movabs $0x726f6c6f63,%rax
  mov    %rax,-0x28c(%rbp)
  movw   $0x0,-0x284(%rbp)
  movb   $0x73,-0x282(%rbp)
  movb   $0x0,-0x281(%rbp)
  movb   $0x0,-0x280(%rbp)
  movq   $0x3078,-0x210(%rbp)
  movw   $0x0,-0x208(%rbp)
  movb   $0x64,-0x206(%rbp)
  movb   $0x0,-0x205(%rbp)
  movb   $0x0,-0x204(%rbp)
  movq   $0x3079,-0x203(%rbp)
  movw   $0x0,-0x1fb(%rbp)
  movb   $0x64,-0x1f9(%rbp)
  movb   $0x1,-0x1f8(%rbp)
  movb   $0x0,-0x1f7(%rbp)
  movq   $0x307a,-0x1f6(%rbp)
  movw   $0x0,-0x1ee(%rbp)
  movb   $0x64,-0x1ec(%rbp)
  movb   $0x2,-0x1eb(%rbp)
  movb   $0x0,-0x1ea(%rbp)
  movq   $0x61,-0x1e9(%rbp)
  movw   $0x0,-0x1e1(%rbp)
  movb   $0x64,-0x1df(%rbp)
  movb   $0x3,-0x1de(%rbp)
  movb   $0x0,-0x1dd(%rbp)
  movq   $0x62,-0x1dc(%rbp)
  movw   $0x0,-0x1d4(%rbp)
  movb   $0x64,-0x1d2(%rbp)
  movb   $0x4,-0x1d1(%rbp)
  movb   $0x0,-0x1d0(%rbp)
  movq   $0x63,-0x1cf(%rbp)
  movw   $0x0,-0x1c7(%rbp)
  movb   $0x64,-0x1c5(%rbp)
  movb   $0x5,-0x1c4(%rbp)
  movb   $0x0,-0x1c3(%rbp)
  movabs $0x31726f6c6f63,%rbx
  mov    %rbx,-0x1c2(%rbp)
  movw   $0x0,-0x1ba(%rbp)
  movb   $0x73,-0x1b8(%rbp)
  movb   $0x0,-0x1b7(%rbp)
  movb   $0x0,-0x1b6(%rbp)
  movabs $0x32726f6c6f63,%rbx
  mov    %rbx,-0x1b5(%rbp)
  movw   $0x0,-0x1ad(%rbp)
  movb   $0x73,-0x1ab(%rbp)
  movb   $0x1,-0x1aa(%rbp)
  movb   $0x0,-0x1a9(%rbp)
  movabs $0x656c616373786574,%rbx
  mov    %rbx,-0x1a8(%rbp)
  movw   $0x0,-0x1a0(%rbp)
  movb   $0x64,-0x19e(%rbp)
  movb   $0x6,-0x19d(%rbp)
  movb   $0x0,-0x19c(%rbp)
  movq   $0x3078,-0x380(%rbp)
  movw   $0x0,-0x378(%rbp)
  movb   $0x64,-0x376(%rbp)
  movb   $0x0,-0x375(%rbp)
  movb   $0x0,-0x374(%rbp)
  movq   $0x3079,-0x373(%rbp)
  movw   $0x0,-0x36b(%rbp)
  movb   $0x64,-0x369(%rbp)
  movb   $0x1,-0x368(%rbp)
  movb   $0x0,-0x367(%rbp)
  movq   $0x72,-0x366(%rbp)
  movw   $0x0,-0x35e(%rbp)
  movb   $0x64,-0x35c(%rbp)
  movb   $0x2,-0x35b(%rbp)
  movb   $0x0,-0x35a(%rbp)
  mov    %rax,-0x359(%rbp)
  movw   $0x0,-0x351(%rbp)
  movb   $0x73,-0x34f(%rbp)
  movb   $0x0,-0x34e(%rbp)
  movb   $0x0,-0x34d(%rbp)
  movq   $0x3078,-0x340(%rbp)
  movw   $0x0,-0x338(%rbp)
  movb   $0x64,-0x336(%rbp)
  movb   $0x0,-0x335(%rbp)
  movb   $0x0,-0x334(%rbp)
  movq   $0x307a,-0x333(%rbp)
  movw   $0x0,-0x32b(%rbp)
  movb   $0x64,-0x329(%rbp)
  movb   $0x1,-0x328(%rbp)
  movb   $0x0,-0x327(%rbp)
  movq   $0x72,-0x326(%rbp)
  movw   $0x0,-0x31e(%rbp)
  movb   $0x64,-0x31c(%rbp)
  movb   $0x2,-0x31b(%rbp)
  movb   $0x0,-0x31a(%rbp)
  mov    %rax,-0x319(%rbp)
  movw   $0x0,-0x311(%rbp)
  movb   $0x73,-0x30f(%rbp)
  movb   $0x0,-0x30e(%rbp)
  movb   $0x0,-0x30d(%rbp)
  movq   $0x3079,-0x300(%rbp)
  movw   $0x0,-0x2f8(%rbp)
  movb   $0x64,-0x2f6(%rbp)
  movb   $0x0,-0x2f5(%rbp)
  movb   $0x0,-0x2f4(%rbp)
  movq   $0x307a,-0x2f3(%rbp)
  movw   $0x0,-0x2eb(%rbp)
  movb   $0x64,-0x2e9(%rbp)
  movb   $0x1,-0x2e8(%rbp)
  movb   $0x0,-0x2e7(%rbp)
  movq   $0x72,-0x2e6(%rbp)
  movw   $0x0,-0x2de(%rbp)
  movb   $0x64,-0x2dc(%rbp)
  movb   $0x2,-0x2db(%rbp)
  movb   $0x0,-0x2da(%rbp)
  mov    %rax,-0x2d9(%rbp)
  movw   $0x0,-0x2d1(%rbp)
  movb   $0x73,-0x2cf(%rbp)
  movb   $0x0,-0x2ce(%rbp)
  movb   $0x0,-0x2cd(%rbp)
  movq   $0x78,-0x3b0(%rbp)
  movw   $0x0,-0x3a8(%rbp)
  movb   $0x64,-0x3a6(%rbp)
  movb   $0x0,-0x3a5(%rbp)
  movb   $0x0,-0x3a4(%rbp)
  movq   $0x79,-0x3a3(%rbp)
  movw   $0x0,-0x39b(%rbp)
  movb   $0x64,-0x399(%rbp)
  movb   $0x1,-0x398(%rbp)
  movb   $0x0,-0x397(%rbp)
  movq   $0x7a,-0x396(%rbp)
  movw   $0x0,-0x38e(%rbp)
  movb   $0x64,-0x38c(%rbp)
  movb   $0x2,-0x38b(%rbp)
  movb   $0x0,-0x38a(%rbp)
  movq   $0x78,-0x270(%rbp)
  movw   $0x0,-0x268(%rbp)
  movb   $0x64,-0x266(%rbp)
  movb   $0x0,-0x265(%rbp)
  movb   $0x0,-0x264(%rbp)
  movq   $0x79,-0x263(%rbp)
  movw   $0x0,-0x25b(%rbp)
  movb   $0x64,-0x259(%rbp)
  movb   $0x1,-0x258(%rbp)
  movb   $0x0,-0x257(%rbp)
  movq   $0x7a,-0x256(%rbp)
  movw   $0x0,-0x24e(%rbp)
  movb   $0x64,-0x24c(%rbp)
  movb   $0x2,-0x24b(%rbp)
  movb   $0x0,-0x24a(%rbp)
  movq   $0x786c,-0x249(%rbp)
  movw   $0x0,-0x241(%rbp)
  movb   $0x64,-0x23f(%rbp)
  movb   $0x3,-0x23e(%rbp)
  movb   $0x0,-0x23d(%rbp)
  movq   $0x796c,-0x23c(%rbp)
  movw   $0x0,-0x234(%rbp)
  movb   $0x64,-0x232(%rbp)
  movb   $0x4,-0x231(%rbp)
  movb   $0x0,-0x230(%rbp)
  movq   $0x7a6c,-0x22f(%rbp)
  movw   $0x0,-0x227(%rbp)
  movb   $0x64,-0x225(%rbp)
  movb   $0x5,-0x224(%rbp)
  movb   $0x0,-0x223(%rbp)
  movq   $0x746f72,-0x222(%rbp)
  movw   $0x0,-0x21a(%rbp)
  movb   $0x64,-0x218(%rbp)
  movb   $0x6,-0x217(%rbp)
  movb   $0x0,-0x216(%rbp)
  mov    -0x3f8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x3c4(%rbp)
  movl   $0x0,-0x3dc(%rbp)
  movl   $0x0,-0x3c8(%rbp)
  mov    -0x3c4(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L326
  mov    $0xfffffff3,%eax
  jmp    L695
L326:
  movl   $0x0,-0x3e8(%rbp)
L650:
  cmpl   $0x10,-0x3e8(%rbp)
  jne    L132
  mov    $0xfffffff8,%eax
  jmp    L695
L132:
  mov    -0x3e8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x3e9(%rbp)
  cmpb   $0x28,-0x3e9(%rbp)
  je     L50
  cmpb   $0x60,-0x3e9(%rbp)
  jle    L539
  cmpb   $0x7a,-0x3e9(%rbp)
  jle    L298
L539:
  mov    $0xfffffff9,%eax
  jmp    L695
L298:
  mov    -0x3e8(%rbp),%eax
  cltq
  movzbl -0x3e9(%rbp),%edx
  mov    %dl,-0xc0(%rbp,%rax,1)
  addl   $0x1,-0x3e8(%rbp)
  jmp    L650
L50:
  nop
  mov    -0x3e8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x3e8(%rbp)
  cltq
  movb   $0x0,-0xc0(%rbp,%rax,1)
  lea    -0xc0(%rbp),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L671
  mov    -0x400(%rbp),%rax
  movl   $0x3,(%rax)
  lea    -0x2c0(%rbp),%rax
  mov    %rax,-0x3c0(%rbp)
  movl   $0x5,-0x3d0(%rbp)
  jmp    L595
L671:
  lea    -0xc0(%rbp),%rax
  lea    D19(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L648
  mov    -0x400(%rbp),%rax
  movl   $0x4,(%rax)
  lea    -0x210(%rbp),%rax
  mov    %rax,-0x3c0(%rbp)
  movl   $0x9,-0x3d0(%rbp)
  jmp    L595
L648:
  lea    -0xc0(%rbp),%rax
  lea    D64(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L434
  mov    -0x400(%rbp),%rax
  movl   $0x1,(%rax)
  lea    -0x270(%rbp),%rax
  mov    %rax,-0x3c0(%rbp)
  movl   $0x7,-0x3d0(%rbp)
  jmp    L595
L434:
  lea    -0xc0(%rbp),%rax
  lea    D66(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L311
  mov    -0x400(%rbp),%rax
  movl   $0x2,(%rax)
  lea    -0x3b0(%rbp),%rax
  mov    %rax,-0x3c0(%rbp)
  movl   $0x3,-0x3d0(%rbp)
  jmp    L595
L311:
  lea    -0xc0(%rbp),%rax
  mov    $0x8,%edx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L97
  lea    -0xc0(%rbp),%rax
  lea    D4(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L546
  mov    -0x408(%rbp),%rax
  movl   $0x1,(%rax)
  lea    -0x380(%rbp),%rax
  mov    %rax,-0x3c0(%rbp)
  jmp    L600
L546:
  lea    -0xc0(%rbp),%rax
  lea    D53(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L26
  mov    -0x408(%rbp),%rax
  movl   $0x2,(%rax)
  lea    -0x340(%rbp),%rax
  mov    %rax,-0x3c0(%rbp)
  jmp    L600
L26:
  lea    -0xc0(%rbp),%rax
  lea    D74(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L301
  mov    -0x408(%rbp),%rax
  movl   $0x3,(%rax)
  lea    -0x300(%rbp),%rax
  mov    %rax,-0x3c0(%rbp)
  jmp    L600
L301:
  mov    $0xfffffff6,%eax
  jmp    L695
L600:
  mov    -0x400(%rbp),%rax
  movl   $0x5,(%rax)
  movl   $0x4,-0x3d0(%rbp)
  jmp    L595
L97:
  mov    $0xfffffff6,%eax
  jmp    L695
L578:
  mov    -0x3e8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x3e9(%rbp)
  cmpb   $0x3b,-0x3e9(%rbp)
  je     L181
  cmpb   $0x29,-0x3e9(%rbp)
  jne    L407
  mov    -0x3c4(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x3e8(%rbp)
  jne    L407
L181:
  mov    -0x3dc(%rbp),%eax
  cltq
  movb   $0x0,-0x70(%rbp,%rax,1)
  movl   $0x0,-0x3dc(%rbp)
  lea    -0x70(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L226
  movzbl -0x70(%rbp),%eax
  cmp    $0x3d,%al
  jne    L385
L226:
  mov    $0xffffffde,%eax
  jmp    L695
L385:
  movl   $0x0,-0x3d8(%rbp)
  movl   $0x0,-0x3e4(%rbp)
  jmp    L429
L259:
  mov    -0x3e4(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%eax
  mov    %al,-0x3e9(%rbp)
  cmpl   $0x0,-0x3d8(%rbp)
  jne    L5
  cmpl   $0xa,-0x3e4(%rbp)
  jne    L626
  mov    $0xffffffe2,%eax
  jmp    L695
L626:
  cmpb   $0x3d,-0x3e9(%rbp)
  jne    L77
  addl   $0x1,-0x3d8(%rbp)
  movl   $0x0,-0x3e0(%rbp)
  mov    -0x3e4(%rbp),%eax
  cltq
  movb   $0x0,-0xca(%rbp,%rax,1)
  jmp    L573
L77:
  mov    -0x3e4(%rbp),%eax
  cltq
  movzbl -0x3e9(%rbp),%edx
  mov    %dl,-0xca(%rbp,%rax,1)
  jmp    L573
L5:
  mov    -0x3e0(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x3e0(%rbp)
  cltq
  movzbl -0x3e9(%rbp),%edx
  mov    %dl,-0xb0(%rbp,%rax,1)
  cmpl   $0x40,-0x3e0(%rbp)
  jne    L573
  mov    $0xffffffe1,%eax
  jmp    L695
L573:
  addl   $0x1,-0x3e4(%rbp)
L429:
  mov    -0x3e4(%rbp),%eax
  movslq %eax,%rbx
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    %rax,%rbx
  jb     L259
  mov    -0x3e0(%rbp),%eax
  cltq
  movb   $0x0,-0xb0(%rbp,%rax,1)
  mov    -0x3c0(%rbp),%rax
  mov    %rax,-0x3b8(%rbp)
  movl   $0x0,-0x3d4(%rbp)
  movl   $0x0,-0x3e4(%rbp)
  jmp    L508
L317:
  mov    -0x3b8(%rbp),%rdx
  lea    -0xca(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L176
  movl   $0x1,-0x3d4(%rbp)
  jmp    L377
L176:
  addl   $0x1,-0x3e4(%rbp)
  addq   $0xd,-0x3b8(%rbp)
L508:
  mov    -0x3e4(%rbp),%eax
  cmp    -0x3d0(%rbp),%eax
  jl     L317
L377:
  cmpl   $0x0,-0x3d4(%rbp)
  jne    L545
  mov    $0xffffffe0,%eax
  jmp    L695
L545:
  mov    -0x3b8(%rbp),%rax
  movzbl 0xc(%rax),%eax
  test   %al,%al
  je     L195
  mov    $0xffffffdf,%eax
  jmp    L695
L195:
  mov    -0x3b8(%rbp),%rax
  movzbl 0xa(%rax),%eax
  cmp    $0x64,%al
  jne    L528
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <is_double@plt>
  test   %eax,%eax
  jne    L162
  mov    $0xfffffff4,%eax
  jmp    L695
L162:
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <atof@plt>
  mov    %eax,%edx
  mov    -0x3b8(%rbp),%rax
  movzbl 0xb(%rax),%eax
  movzbl %al,%eax
  lea    0x0(,%rax,8),%rcx
  mov    -0x410(%rbp),%rax
  add    %rcx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  movsd  %xmm0,(%rax)
  jmp    L565
L528:
  movl   $0x0,-0x3cc(%rbp)
  jmp    L402
L247:
  lea    -0x190(%rbp),%rcx
  mov    -0x3cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  lea    (%rcx,%rax,1),%rdx
  lea    -0xb0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L27
  lea    -0x190(%rbp),%rcx
  mov    -0x3cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rcx,%rax
  lea    0xa(%rax),%rdx
  lea    -0xb0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L84
L27:
  mov    -0x3cc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  lea    -0x10(%rax),%rax
  add    %rbp,%rax
  sub    $0x16c,%rax
  mov    (%rax),%eax
  mov    %al,-0x3ea(%rbp)
  movl   $0x1,-0x3c8(%rbp)
  jmp    L693
L84:
  addl   $0x1,-0x3cc(%rbp)
L402:
  cmpl   $0x7,-0x3cc(%rbp)
  jle    L247
L693:
  cmpl   $0x0,-0x3c8(%rbp)
  jne    L462
  mov    $0xffffffe8,%eax
  jmp    L695
L462:
  mov    -0x3b8(%rbp),%rax
  movzbl 0xb(%rax),%eax
  movzbl %al,%edx
  mov    -0x418(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x3ea(%rbp),%eax
  mov    %al,(%rdx)
L565:
  mov    -0x3b8(%rbp),%rax
  movb   $0x1,0xc(%rax)
  jmp    L682
L407:
  mov    -0x3dc(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x3dc(%rbp)
  cltq
  movzbl -0x3e9(%rbp),%edx
  mov    %dl,-0x70(%rbp,%rax,1)
  cmpl   $0x4b,-0x3dc(%rbp)
  jne    L682
  mov    $0xfffffffc,%eax
  jmp    L695
L682:
  addl   $0x1,-0x3e8(%rbp)
L595:
  mov    -0x3e8(%rbp),%eax
  cmp    -0x3c4(%rbp),%eax
  jl     L578
  mov    -0x3c0(%rbp),%rax
  mov    %rax,-0x3b8(%rbp)
  movl   $0x0,-0x3e8(%rbp)
  jmp    L354
L271:
  mov    -0x3b8(%rbp),%rax
  movzbl 0xc(%rax),%eax
  test   %al,%al
  jne    L330
  mov    $0xfffffff2,%eax
  jmp    L695
L330:
  addl   $0x1,-0x3e8(%rbp)
  addq   $0xd,-0x3b8(%rbp)
L354:
  mov    -0x3e8(%rbp),%eax
  cmp    -0x3d0(%rbp),%eax
  jl     L271
  mov    $0x0,%eax
L695:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L709
  call   <__stack_chk_fail@plt>
L709:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D1
type_infered: string
name: disassemble_data
arguments: data_tag: D19
type_infered: string
name: disassemble_data
arguments: data_tag: D64
type_infered: string
name: disassemble_data
arguments: data_tag: D66
type_infered: string
name: disassemble_data
arguments: data_tag: D17
type_infered: string
name: disassemble_data
arguments: data_tag: D4
type_infered: string
name: disassemble_data
arguments: data_tag: D53
type_infered: string
name: disassemble_data
arguments: data_tag: D74
type_infered: string

tool: D1: sphere

tool: D19: plane

tool: D64: camera

tool: D66: light

tool: D17: cylinder

tool: D4: cylinderxy

tool: D53: cylinderxz

tool: D74: cylinderyz

assistant: ```c
int parse_line(char *line, int *id, int *cyl_type, double *d_tab, unsigned char *b_tab) {
  typedef struct tS {
    char label[10];
    char data_type;
    unsigned char index;
    unsigned char ok;
  } S;
  typedef struct tCOL {
    char name[10], alt_name[10];
    int id;
  } COL;
  COL col_tab[8] = {{"white", "c1", 0}, {"red", "c2", 32}, {"green", "c3", 64}, {"blue", "c4", 96}, {"yellow", "c5", 128}, {"cyan", "c6", 160}, {"magenta", "c7", 192}, {"blue2", "c8", 224}};
  S s_sph[5] = {{"x0", 'd', 0, 0}, {"y0", 'd', 1, 0}, {"z0", 'd', 2, 0}, {"r", 'd', 3, 0}, {"color", 's', 0, 0}};
  S s_pln[9] = {{"x0", 'd', 0, 0}, {"y0", 'd', 1, 0}, {"z0", 'd', 2, 0}, {"a", 'd', 3, 0}, {"b", 'd', 4, 0}, {"c", 'd', 5, 0}, {"color1", 's', 0, 0}, {"color2", 's', 1, 0}, {"texscale", 'd', 6, 0}};
  S s_cxy[4] = {{"x0", 'd', 0, 0}, {"y0", 'd', 1, 0}, {"r", 'd', 2, 0}, {"color", 's', 0, 0}};
  S s_cxz[4] = {{"x0", 'd', 0, 0}, {"z0", 'd', 1, 0}, {"r", 'd', 2, 0}, {"color", 's', 0, 0}};
  S s_cyz[4] = {{"y0", 'd', 0, 0}, {"z0", 'd', 1, 0}, {"r", 'd', 2, 0}, {"color", 's', 0, 0}};
  S s_lig[3] = {{"x", 'd', 0, 0}, {"y", 'd', 1, 0}, {"z", 'd', 2, 0}};
  S s_cam[7] = {{"x", 'd', 0, 0}, {"y", 'd', 1, 0}, {"z", 'd', 2, 0}, {"lx", 'd', 3, 0}, {"ly", 'd', 4, 0}, {"lz", 'd', 5, 0}, {"rot", 'd', 6, 0}};
  int ln = strlen(line);
  int i, j, k;
  char name[16], c;
  S *s_tab;
  S *s;
  char str[10 + 64 + 1];
  int str_i = 0;
  char label[10];
  char val[64];
  int mode;
  int found_label;
  unsigned char col;
  int num_of_s;
  int ci, col_found = 0;
  if (line[ln - 1] != ')')
    return -13;
  for (i = 0;; i++) {
    if (i == 16)
      return -8;
    c = line[i];
    if (c == '(')
      break;
    if (c < 'a' || c > 'z')
      return -7;
    name[i] = c;
  }
  name[i++] = 0;
  if (strcmp(name, "sphere") == 0) {
    *id = 3;
    s_tab = s_sph;
    num_of_s = 5;
  } else if (strcmp(name, "plane") == 0) {
    *id = 4;
    s_tab = s_pln;
    num_of_s = 9;
  } else if (strcmp(name, "camera") == 0) {
    *id = 1;
    s_tab = s_cam;
    num_of_s = 7;
  } else if (strcmp(name, "light") == 0) {
    *id = 2;
    s_tab = s_lig;
    num_of_s = 3;
  } else if (strncmp(name, "cylinder", 8) == 0) {
    if (strcmp(name, "cylinderxy") == 0) {
      *cyl_type = 1;
      s_tab = s_cxy;
    } else if (strcmp(name, "cylinderxz") == 0) {
      *cyl_type = 2;
      s_tab = s_cxz;
    } else if (strcmp(name, "cylinderyz") == 0) {
      *cyl_type = 3;
      s_tab = s_cyz;
    } else
      return -10;
    *id = 5;
    num_of_s = 4;
  } else
    return -10;
  for (; i < ln; i++) {
    c = line[i];
    if (c == ';' || ((c == ')') && (i == (ln - 1)))) {
      str[str_i] = 0;
      str_i = 0;
      if (!strlen(str) || (str[0] == '='))
        return -34;
      mode = 0;
      for (j = 0; j < strlen(str); j++) {
        c = str[j];
        if (mode == 0) {
          if (j == 10)
            return -30;
          if (c == '=') {
            mode++;
            k = 0;
            label[j] = 0;
          } else
            label[j] = c;
        } else {
          val[k++] = c;
          if (k == 64)
            return -31;
        }
      }
      val[k] = 0;
      s = s_tab;
      found_label = 0;
      for (j = 0; j < num_of_s; j++, s++) {
        if (strcmp(label, s->label) == 0) {
          found_label = 1;
          break;
        }
      }
      if (!found_label)
        return -32;
      if (s->ok)
        return -33;
      if (s->data_type == 'd') {
        if (!is_double(val))
          return -12;
        d_tab[s->index] = atof(val);
      } else {
        for (ci = 0; ci < 8; ci++) {
          if (strcmp(val, col_tab[ci].name) == 0 || strcmp(val, col_tab[ci].alt_name) == 0) {
            col = col_tab[ci].id;
            col_found = 1;
            break;
          }
        }
        if (!col_found)
          return -24;
        b_tab[s->index] = col;
      }
      s->ok = 1;
    } else {
      str[str_i++] = c;
      if (str_i == (10 + 64 + 1))
        return -4;
    }
  }
  s = s_tab;
  for (i = 0; i < num_of_s; i++, s++) {
    if (!s->ok)
      return -14;
  }
  return 0;
}
```