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

```asm
<DoArithmEval>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  mov    %edx,-0x50(%rbp)
  mov    %rcx,-0x58(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  jmp    L476
L158:
  addl   $0x1,-0x4c(%rbp)
L476:
  mov    -0x4c(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jge    L993
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L158
  jmp    L993
L18:
  subl   $0x1,-0x50(%rbp)
L993:
  mov    -0x4c(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jge    L1696
  mov    -0x50(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L18
L1696:
  mov    -0x4c(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jne    L1509
  mov    $0x0,%eax
  jmp    L341
L1509:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D45(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1251
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L603
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1517
L603:
  mov    $0x0,%eax
  jmp    L341
L1517:
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  jne    L1442
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  je     L1475
L1442:
  mov    $0x1,%edx
  jmp    L1454
L1475:
  mov    $0x0,%edx
L1454:
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L1251:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D159(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L839
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L712
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1476
L712:
  mov    $0x0,%eax
  jmp    L341
L1476:
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  je     L1154
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  je     L1154
  mov    $0x1,%edx
  jmp    L513
L1154:
  mov    $0x0,%edx
L513:
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L839:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D205(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L81
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1886
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1707
L1886:
  mov    $0x0,%eax
  jmp    L341
L1707:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  or     %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L81:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D58(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L342
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L79
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L21
L79:
  mov    $0x0,%eax
  jmp    L341
L21:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  xor    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L342:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D160(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1109
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1216
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1319
L1216:
  mov    $0x0,%eax
  jmp    L341
L1319:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  and    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L1109:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D124(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1567
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L802
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1058
  jmp    L802
L190:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L802:
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L649
  mov    -0x30(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L190
  jmp    L649
L1007:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L649:
  mov    -0x2c(%rbp),%eax
  cmp    %eax,-0x50(%rbp)
  jle    L101
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L1007
L101:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%ecx
  mov    -0x50(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  je     L1127
  mov    -0x58(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L888
L1127:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x48(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x48(%rbp),%rdx
  add    %rdx,%rcx
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  setne  %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L888
L1058:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  setne  %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
L888:
  mov    $0x1,%eax
  jmp    L341
L1567:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D16(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L173
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1644
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1520
  jmp    L1644
L1102:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L1644:
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L1306
  mov    -0x30(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L1102
  jmp    L1306
L1611:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L1306:
  mov    -0x2c(%rbp),%eax
  cmp    %eax,-0x50(%rbp)
  jle    L1393
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L1611
L1393:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%ecx
  mov    -0x50(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  je     L1266
  mov    -0x58(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L1756
L1266:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x48(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x48(%rbp),%rdx
  add    %rdx,%rcx
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1756
L1520:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
L1756:
  mov    $0x1,%eax
  jmp    L341
L173:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D27(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L632
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bug@plt>
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L933
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L423
  jmp    L933
L1867:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L933:
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L160
  mov    -0x30(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L1867
  jmp    L160
L570:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L160:
  mov    -0x2c(%rbp),%eax
  cmp    %eax,-0x50(%rbp)
  jle    L1603
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L570
L1603:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rcx
  mov    -0x10(%rbp),%rax
  mov    $0x0,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fnmatch@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  jmp    L278
L423:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
L278:
  mov    $0x1,%eax
  jmp    L341
L632:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D108(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1227
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1165
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1065
  jmp    L1165
L414:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L1165:
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L241
  mov    -0x30(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L414
  jmp    L241
L98:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L241:
  mov    -0x2c(%rbp),%eax
  cmp    %eax,-0x50(%rbp)
  jle    L468
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L98
L468:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x24(%rbp)
  jle    L778
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x24(%rbp)
L778:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  jg     L242
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  jne    L523
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%ecx
  mov    -0x50(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jl     L523
L242:
  mov    $0x1,%edx
  jmp    L599
L523:
  mov    $0x0,%edx
L599:
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1401
L1065:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  setge  %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
L1401:
  mov    $0x1,%eax
  jmp    L341
L1227:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D26(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L111
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1364
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1626
  jmp    L1364
L462:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L1364:
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L658
  mov    -0x30(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L462
  jmp    L658
L1561:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L658:
  mov    -0x2c(%rbp),%eax
  cmp    %eax,-0x50(%rbp)
  jle    L1327
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L1561
L1327:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x24(%rbp)
  jle    L1474
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x24(%rbp)
L1474:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  jg     L381
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  jne    L853
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%ecx
  mov    -0x50(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jle    L853
L381:
  mov    $0x1,%edx
  jmp    L667
L853:
  mov    $0x0,%edx
L667:
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1316
L1626:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  setg   %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
L1316:
  mov    $0x1,%eax
  jmp    L341
L111:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D19(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1678
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1860
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1529
  jmp    L1860
L159:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L1860:
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L1404
  mov    -0x30(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L159
  jmp    L1404
L191:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L1404:
  mov    -0x2c(%rbp),%eax
  cmp    %eax,-0x50(%rbp)
  jle    L1507
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L191
L1507:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x24(%rbp)
  jle    L1827
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x24(%rbp)
L1827:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  js     L1262
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  jne    L819
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%ecx
  mov    -0x50(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jg     L819
L1262:
  mov    $0x1,%edx
  jmp    L443
L819:
  mov    $0x0,%edx
L443:
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1497
L1529:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  setle  %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
L1497:
  mov    $0x1,%eax
  jmp    L341
L1678:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D172(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L504
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L596
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L580
  jmp    L596
L656:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L596:
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jge    L221
  mov    -0x30(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L656
  jmp    L221
L700:
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L221:
  mov    -0x2c(%rbp),%eax
  cmp    %eax,-0x50(%rbp)
  jle    L295
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <isWhite@plt>
  test   %eax,%eax
  jne    L700
L295:
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x24(%rbp)
  jle    L340
  mov    -0x2c(%rbp),%edx
  mov    -0x50(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x24(%rbp)
L340:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  js     L440
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  jne    L2
  mov    -0x30(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    -0x2c(%rbp),%ecx
  mov    -0x50(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jge    L2
L440:
  mov    $0x1,%edx
  jmp    L1341
L2:
  mov    $0x0,%edx
L1341:
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L151
L580:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  setl   %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
L151:
  mov    $0x1,%eax
  jmp    L341
L504:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D82(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1427
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L845
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1070
L845:
  mov    $0x0,%eax
  jmp    L341
L1070:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L1427:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D179(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L494
  mov    -0x30(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  je     L494
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L990
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1510
L990:
  mov    $0x0,%eax
  jmp    L341
L1510:
  mov    -0x28(%rbp),%eax
  mov    -0x20(%rbp),%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L494:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D182(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L560
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L380
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L682
L380:
  mov    $0x0,%eax
  jmp    L341
L682:
  mov    -0x28(%rbp),%edx
  mov    -0x20(%rbp),%eax
  imul   %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L560:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D12(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L892
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L515
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1545
L515:
  mov    $0x0,%eax
  jmp    L341
L1545:
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L193
  lea    D185(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bug@plt>
L193:
  mov    -0x28(%rbp),%eax
  mov    -0x20(%rbp),%edi
  cltd
  idiv   %edi
  mov    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L892:
  lea    -0x2c(%rbp),%rdi
  lea    -0x30(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D70(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L816
  mov    -0x30(%rbp),%edx
  lea    -0x28(%rbp),%rcx
  mov    -0x4c(%rbp),%esi
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1433
  mov    -0x2c(%rbp),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1889
L1433:
  mov    $0x0,%eax
  jmp    L341
L1889:
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L561
  lea    D185(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bug@plt>
L561:
  mov    -0x28(%rbp),%eax
  mov    -0x20(%rbp),%ecx
  cltd
  idiv   %ecx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L816:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7e,%al
  jne    L254
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%esi
  lea    -0x28(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L327
  mov    $0x0,%eax
  jmp    L341
L327:
  mov    -0x28(%rbp),%eax
  not    %eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L254:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x21,%al
  jne    L412
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%esi
  lea    -0x28(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1285
  mov    $0x0,%eax
  jmp    L341
L1285:
  mov    -0x28(%rbp),%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L412:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L1857
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%esi
  lea    -0x28(%rbp),%rcx
  mov    -0x50(%rbp),%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1542
  mov    $0x0,%eax
  jmp    L341
L1542:
  mov    -0x28(%rbp),%eax
  neg    %eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L1857:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    $0x7,%edx
  lea    D150(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L1434
  mov    -0x50(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L1147
  mov    $0x0,%eax
  jmp    L341
L1147:
  mov    -0x50(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  sub    $0x8,%eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L341
L1434:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  jne    L969
  mov    -0x50(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L734
  mov    $0x0,%eax
  jmp    L341
L734:
  mov    -0x50(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    -0x58(%rbp),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rdx,%rcx
  mov    %edi,%edx
  mov    %rax,%rdi
  call   <DoArithmEval>
  jmp    L341
L969:
  mov    -0x50(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x31(%rbp)
  mov    -0x50(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x20(%rbp),%rax
  mov    $0x0,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  mov    -0x58(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x50(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x31(%rbp),%eax
  mov    %al,(%rdx)
  mov    -0x50(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%rax
  cmp    %rax,%rdx
  sete   %al
  movzbl %al,%eax
L341:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L176
  call   <__stack_chk_fail@plt>
L176:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D45
data_type: string
name: parse_data
arguments: tag: D159
data_type: string
name: parse_data
arguments: tag: D205
data_type: string
name: parse_data
arguments: tag: D58
data_type: string
name: parse_data
arguments: tag: D160
data_type: string
name: parse_data
arguments: tag: D124
data_type: string
name: parse_data
arguments: tag: D16
data_type: string
name: parse_data
arguments: tag: D27
data_type: string
name: parse_data
arguments: tag: D154
data_type: string
name: parse_data
arguments: tag: D108
data_type: string
name: parse_data
arguments: tag: D26
data_type: string
name: parse_data
arguments: tag: D19
data_type: string
name: parse_data
arguments: tag: D172
data_type: string
name: parse_data
arguments: tag: D82
data_type: string
name: parse_data
arguments: tag: D179
data_type: string
name: parse_data
arguments: tag: D182
data_type: string
name: parse_data
arguments: tag: D12
data_type: string
name: parse_data
arguments: tag: D185
data_type: string
name: parse_data
arguments: tag: D70
data_type: string
name: parse_data
arguments: tag: D150
data_type: string

tool: D45: ||

tool: D159: &&

tool: D205: |

tool: D58: ^

tool: D160: &

tool: D124: !=

tool: D16: ==

tool: D27: =~

tool: D154: globbing support has not been compiled in

tool: D108: >=

tool: D26: >

tool: D19: <=

tool: D172: <

tool: D82: +

tool: D179: -

tool: D182: *

tool: D12: /

tool: D185: Division by zero in expression

tool: D70: %

tool: D150: length(

assistant: ```c
int DoArithmEval(char *buf, int pos1, int pos2, int *result) {
  int spl1, spl2, result1, result2, l;
  char c, *p;
  while ((pos1 < pos2) && isWhite(buf[pos1]))
    pos1++;
  while ((pos1 < pos2) && isWhite(buf[pos2 - 1]))
    pos2--;
  if (pos1 == pos2)
    return 0;
  if (SpliceInfix(buf, pos1, pos2, "||", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 || result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "&&", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 && result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "|", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 | result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "^", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 ^ result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "&", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 & result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "!=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && isWhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && isWhite(buf[spl2]))
        spl2++;
      if (spl1 - pos1 != pos2 - spl2)
        *result = 1;
      else
        *result = (strncmp(buf + pos1, buf + spl2, spl1 - pos1) != 0);
    } else
      *result = (result1 != result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "==", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && isWhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && isWhite(buf[spl2]))
        spl2++;
      if (spl1 - pos1 != pos2 - spl2)
        *result = 0;
      else
        *result = (strncmp(buf + pos1, buf + spl2, spl1 - pos1) == 0);
    } else
      *result = (result1 == result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "=~", &spl1, &spl2)) {
    bug("globbing support has not been compiled in");
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      char *str1, *str2;
      while ((pos1 < spl1) && isWhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && isWhite(buf[spl2]))
        spl2++;
      str1 = strdup(buf + pos1);
      str1[spl1 - pos1] = '\0';
      str2 = strdup(buf + spl2);
      str2[pos2 - spl2] = '\0';
      *result = (fnmatch(str2, str1, 0) == 0);
      free(str1);
      free(str2);
    } else
      *result = (result1 == result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, ">=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && isWhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && isWhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 > 0) || ((result1 == 0) && (spl1 - pos1 >= pos2 - spl2));
    } else
      *result = (result1 >= result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, ">", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && isWhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && isWhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 > 0) || ((result1 == 0) && (spl1 - pos1 > pos2 - spl2));
    } else
      *result = (result1 > result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "<=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && isWhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && isWhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 < 0) || ((result1 == 0) && (spl1 - pos1 <= pos2 - spl2));
    } else
      *result = (result1 <= result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "<", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && isWhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && isWhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 < 0) || ((result1 == 0) && (spl1 - pos1 < pos2 - spl2));
    } else
      *result = (result1 < result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "+", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 + result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "-", &spl1, &spl2))
    if (spl1 != pos1) {
      if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
        return 0;
      *result = result1 - result2;
      return 1;
    }
  if (SpliceInfix(buf, pos1, pos2, "*", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 * result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "/", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    if (result2 == 0)
      bug("Division by zero in expression");
    *result = result1 / result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "%", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    if (result2 == 0)
      bug("Division by zero in expression");
    *result = result1 % result2;
    return 1;
  }
  if (buf[pos1] == '~') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = ~result1;
    return 1;
  }
  if (buf[pos1] == '!') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = !result1;
    return 1;
  }
  if (buf[pos1] == '-') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = -result1;
    return 1;
  }
  if (strncmp(buf + pos1, "length(", strlen("length(")) == 0) {
    if (buf[pos2 - 1] != ')')
      return 0;
    *result = pos2 - pos1 - strlen("length()");
    return 1;
  }
  if (buf[pos1] == '(') {
    if (buf[pos2 - 1] != ')')
      return 0;
    return DoArithmEval(buf, pos1 + 1, pos2 - 1, result);
  }
  c = buf[pos2];
  buf[pos2] = 0;
  *result = (int)strtol(buf + pos1, &p, 0);
  buf[pos2] = c;
  return (p == buf + pos2);
}
```