// File: /workspace/github_cpp_makefile_star2_O3/nicklausw[P]snesasm/snesasm.cpp
// Function: pass()
int pass()
{  
  for (pass_counter = 0; pass_counter < (tokens.size())/sizeof(token); pass_counter++) {
    if (tokens[pass_counter].token_type == tkDIR) {
      // directive
      if (tokens[pass_counter].token_i == "compcheck") {
        compcheck_flag = true;
      } else if (tokens[pass_counter].token_i == "autoromsize") {
        autoromsize_flag = true;
      } else if (tokens[pass_counter].token_i == "romsize") {
        directive_arg("romsize", r8); romsize = tr;
      } else if (tokens[pass_counter].token_i == "carttype") {
        directive_arg("carttype", r8); carttype = tr;
      } else if (tokens[pass_counter].token_i == "licenseecode") {
        directive_arg("licenseecode", r8); licenseecode = tr;
      } else if (tokens[pass_counter].token_i == "version") {
        directive_arg("version", r8); version = tr;
      } else if (tokens[pass_counter].token_i == "org") {
        directive_arg("org", r16); org = tr;
        
        if (banksize_defined == false || rombanks_defined == false) {
          cerr << "error: rombanks and banksize need to be defined before org\n";
          return fail;
        }
      } else if (tokens[pass_counter].token_i == "banksize") {
        directive_arg("banksize", r16); banksize = tr;
        banksize_defined = true;
        
        if (rombanks != 0) {
          // go ahead and set size of output
          rom.resize(rombanks*banksize);
        }
      } else if (tokens[pass_counter].token_i == "rombanks") {
        // not sure about rombanks limit
        directive_arg("rombanks", rNONE); rombanks = tr;
        rombanks_defined = true;
        
        if (banksize != 0) {
          // go ahead and set size of output
          rom.resize(rombanks*banksize);
        }
      } else if (tokens[pass_counter].token_i == "bank") {
       directive_arg("bank", rNONE); cur_bank = tr;
        
        // reset org
        org = base*(cur_bank+1);
        
        if (rombanks_defined == false) {
          cerr << "error: rombanks needs to be defined before .bank\n";
          return fail;
        } else if (banksize_defined == false) {
          cerr << "error: banksize needs to be defined before .bank\n";
          return fail;
        }
        
        if (cur_bank >= rombanks) {
          cerr << "error: can't go to bank higher than maximum banks\n";
          return fail;
        } else {
          org = (banksize*cur_bank)+base;
        }
      } else if (tokens[pass_counter].token_i == "name") {
        if (hint_next_token().token_type != tkQUOTE) {
          cerr << "error: name expects string value\n";
          return fail;
        }
        
        name_flag = true;
        
        string name_quote_raw = hint_next_token().token_i;
        
        for (unsigned int name_counter = 0; name_quote_raw[name_counter] != '\"'; name_counter++) {
          name.append(string(1, name_quote_raw[name_counter]));
          if (name_counter == 21) {
            cerr << "error: name can have only up to 21 characters\n";
            return fail;
          }
        }
      } else if (tokens[pass_counter].token_i == "db") {
          raw_data(r8, "db");
      } else if (tokens[pass_counter].token_i == "dw") {
          raw_data(r16, "dw");
      } else if (tokens[pass_counter].token_i == "lorom") {
        lohirom = lorom;
      } else if (tokens[pass_counter].token_i == "hirom") {
        lohirom = hirom;
      } else if (tokens[pass_counter].token_i == "slowrom") {
        sfrom = slowrom;
      } else if (tokens[pass_counter].token_i == "fastrom") {
        sfrom = fastrom;
      } else {
        cout << "error: unknown directive " << tokens[pass_counter].token_i << "\n";
        return fail;
      }
    } else if (tokens[pass_counter].token_type == tkNUM || tokens[pass_counter].token_type == tkARG) {
      cerr << "error: loose phrase " << tokens[pass_counter].token_i << "\n";
      return fail;
    } else if (tokens[pass_counter].token_type == tkOP) {
      // opcode
      int match_count = 0;
      token next_tok = hint_next_token();
      
      if (banksize_defined == false || rombanks_defined == false) {
        cerr << "error: rombanks and banksize need to be defined before opcodes\n";
        return fail;
      }
      
      
      for (unsigned int opcounter = 0; opcounter < sizeof(opcodes)/sizeof(opcode); opcounter++) {
        if (tokens[pass_counter].token_i == opcodes[opcounter].name) {
          match_count++;
        } else continue;
        
        // it's a match
        if (next_tok.token_type == tkNL || next_tok.token_type == tkUNDEF) {
          if (opcodes[opcounter].no_arg != -1) {
            write_byte(opcodes[opcounter].no_arg);
            continue;
          } else {
            cerr << "error: opcode " << opcodes[opcounter].name << " expects args\n";
            return fail;
          }
        } else if (next_tok.token_i[0] == '#') {
          // it's a literal!
          next_tok.token_i.erase(0, 1);
          if (opcodes[opcounter].lit != -1) {
            if (parse_num(next_tok.token_i) < 256) {
              // in range
              write_byte(opcodes[opcounter].lit);
              write_byte(parse_num(next_tok.token_i));
              pass_counter++; continue;
            } else {
              cerr << "error: opcode " << opcodes[opcounter].name << " takes only 8-bit literals\n";
              return fail;
            }
          } else {
            // this thing doesn't like literals!?
            cerr << "error: opcode " << opcodes[opcounter].name << " doesn't take literals\n";
            return fail;
          }
        } else if (next_tok.token_type == tkNUM || next_tok.token_type == tkOP) {
          // it's a number!
          // this could go multiple ways.
          
          // ", x"?
          if ((pass_counter+3) >= tokens.size()) {
          } else {
            if (tokens[pass_counter+2].token_type == tkCOMMA) {
              if (tokens[pass_counter+3].token_i == "x") {
                if (opcodes[opcounter].x8 != -1) {
                  // yay, x8
                  if (parse_num(tokens[pass_counter+1].token_i) < 256) {
                    write_byte(opcodes[opcounter].x8);
                    write_byte(parse_num(tokens[pass_counter+1].token_i));
                    pass_counter += 3; continue;
                  }
                } else if (opcodes[opcounter].x16 != -1) {
                  if (parse_num(tokens[pass_counter+1].token_i) < 65536) {
                    write_byte(opcodes[opcounter].x16);
                    write_byte((parse_num(tokens[pass_counter+1].token_i) & 0xFF));
                    write_byte((parse_num(tokens[pass_counter+1].token_i) >> 8));
                    pass_counter += 3; continue;
                  }
                } else if (opcodes[opcounter].x24 != -1) {
                  if (parse_num(tokens[pass_counter+1].token_i) < 0xFFFFFF+1) {
                    write_byte(opcodes[opcounter].x24);
                    write_byte((parse_num(tokens[pass_counter+1].token_i) & 0xFF));
                    write_byte(((parse_num(tokens[pass_counter+1].token_i) >> 8) & 0xFF));
                    write_byte((parse_num(tokens[pass_counter+1].token_i) >> 16));
                    pass_counter += 3; continue;
                  }
                  
                  cerr << "error: number out of range\n";
                  return fail;
                }
              } else {
                cerr << "error: xxx $XX, x only for now\n";
                return fail;
              }
            }
          }
          
          
          // is it relative?
          if (opcodes[opcounter].relative8 != -1 && org-parse_num(next_tok.token_i) < 256) {
            // it is!
            unsigned char relative_temp;
            if (next_tok.token_i[0] == '-' || ((signed)org-parse_num(next_tok.token_i)) < 0) {
              relative_temp = org-parse_num(next_tok.token_i);
            } else {
              relative_temp = 254-(org-parse_num(next_tok.token_i));
            }
            
            write_byte(opcodes[opcounter].relative8);
            write_byte(relative_temp);
            pass_counter++; continue;
          }
          
          // what about 16 bit relative?
          if (opcodes[opcounter].relative16 != -1 && org-parse_num(next_tok.token_i) < 65536) {
            // yay!
            unsigned int relative_temp;
            if (next_tok.token_i[0] == '-' || ((signed)org-parse_num(next_tok.token_i)) < 0) {
              relative_temp = org-parse_num(next_tok.token_i);
            } else {
              relative_temp = 65534-(org-parse_num(next_tok.token_i));
            }
            
            write_byte(opcodes[opcounter].relative16);
            write_byte(relative_temp & 0xFF);
            write_byte(relative_temp >> 8);
            pass_counter++; continue;
          }
          
          
          if (parse_num(next_tok.token_i) < 256) {
            // 8-bit!
            if (opcodes[opcounter].one8 != -1) {
              write_byte(opcodes[opcounter].one8);
              write_byte(parse_num(next_tok.token_i));
              pass_counter++; continue;
            } else {
              cerr << "error: opcode " << opcodes[opcounter].name << " can't take 8-bit args\n";
              return fail; 
            }
          } else if (parse_num(next_tok.token_i) < 65536) {
            // 16-bit!
            if (opcodes[opcounter].one16 != -1) {
              write_byte(opcodes[opcounter].one16);
              write_byte(parse_num(next_tok.token_i) & 0xFF);
              write_byte(parse_num(next_tok.token_i) >> 8);
              pass_counter++; continue;
            } else {
              cerr << "error: opcode " << opcodes[opcounter].name << " can't take 16-bit args\n";
              return fail; 
            }
          } else if (parse_num(next_tok.token_i) < 0xFFFFFF+1) {
            // 24-bit!
            if (opcodes[opcounter].one24 != -1) {
              write_byte(opcodes[opcounter].one24);
              write_byte(parse_num(next_tok.token_i) & 0xFF);
              write_byte((parse_num(next_tok.token_i) >> 8) & 0xFF); // crazy middle byte
              write_byte(parse_num(next_tok.token_i) >> 16);
              pass_counter++; continue;
            } else {
              cerr << "error: opcode " << opcodes[opcounter].name << " can't take 24-bit args\n";
              return fail; 
            }
          }
        }
      }
      
      if (!match_count) {
        // no matches
        cerr << "error: unknown opcode " << tokens[pass_counter].token_i << "\n";
        return fail;
      }
    } else if (tokens[pass_counter].token_type == tkLB) {
      tokens[pass_counter].token_i.pop_back();
      new_label(tokens[pass_counter].token_i, org);
    } else if (tokens[pass_counter].token_type == tkNL) {
      continue;
    } else {
      // probably a blank line
      continue;
    }
  }
  
  return success;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x528, %rsp            # imm = 0x528
movq $0x0, 0x74f6(%rip) # 0xc2b0
movq 0x740f(%rip), %rax      # 0xc1d0
movq 0x7400(%rip), %rcx      # 0xc1c8
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x3333333333333333, %rdx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rdx, %rax
cmpq $0x28, %rax
jae 0x4dea
xorl %eax, %eax
jmp 0x67b6
leaq 0x18(%rsp), %r15
leaq 0x38(%rsp), %r14
xorl %esi, %esi
leaq 0x74c3(%rip), %r13      # 0xc2c0
leaq (%rsi,%rsi,4), %rax
leaq (%rcx,%rax,8), %rdi
movl (%rdi), %eax
cmpl 0x7357(%rip), %eax      # 0xc164
jne 0x5135
addq $0x8, %rdi
leaq 0x462c(%rip), %rsi      # 0x944a
callq 0x2050
testl %eax, %eax
je 0x5f57
movq 0x747e(%rip), %rax      # 0xc2b0
movq 0x738f(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x4608(%rip), %rsi      # 0x9454
callq 0x2050
testl %eax, %eax
je 0x5f63
movq 0x7450(%rip), %rax      # 0xc2b0
movq 0x7361(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x45de(%rip), %rbx      # 0x9458
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x5fcb
movq 0x741f(%rip), %rax      # 0xc2b0
movq 0x7330(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x45b5(%rip), %rbx      # 0x9460
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x6098
movq 0x73ee(%rip), %rax      # 0xc2b0
movq 0x72ff(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x458d(%rip), %rbx      # 0x9469
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x60f3
movq 0x73bd(%rip), %rax      # 0xc2b0
movq 0x72ce(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x4569(%rip), %rbx      # 0x9476
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x614e
movq 0x738c(%rip), %rax      # 0xc2b0
movq 0x729d(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x4540(%rip), %rbx      # 0x947e
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x61f2
movq 0x735b(%rip), %rax      # 0xc2b0
movq 0x726c(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x454f(%rip), %rbx      # 0x94be
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x62a8
movq 0x732a(%rip), %rax      # 0xc2b0
movq 0x723b(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x4527(%rip), %rbx      # 0x94c7
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x6363
movq 0x72f9(%rip), %rax      # 0xc2b0
movq 0x720a(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x44ff(%rip), %rbx      # 0x94d0
movq %rbx, %rsi
callq 0x2050
testl %eax, %eax
je 0x63e9
movq 0x72c8(%rip), %rax      # 0xc2b0
movq 0x71d9(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x456a(%rip), %rsi      # 0x956c
callq 0x2050
testl %eax, %eax
je 0x6498
movq 0x729a(%rip), %rax      # 0xc2b0
movq 0x71ab(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x4592(%rip), %rbp      # 0x95c2
movq %rbp, %rsi
callq 0x2050
testl %eax, %eax
je 0x64f6
movq 0x7269(%rip), %rax      # 0xc2b0
movq 0x717a(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x4564(%rip), %rbp      # 0x95c5
movq %rbp, %rsi
callq 0x2050
testl %eax, %eax
je 0x65a0
movq 0x7238(%rip), %rax      # 0xc2b0
movq 0x7149(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x4536(%rip), %rsi      # 0x95c8
callq 0x2050
testl %eax, %eax
je 0x66a4
movq 0x720a(%rip), %rax      # 0xc2b0
movq 0x711b(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x450e(%rip), %rsi      # 0x95ce
callq 0x2050
testl %eax, %eax
je 0x66ef
movq 0x71dc(%rip), %rax      # 0xc2b0
movq 0x70ed(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x44e6(%rip), %rsi      # 0x95d4
callq 0x2050
testl %eax, %eax
je 0x673a
movq 0x71ae(%rip), %rax      # 0xc2b0
movq 0x70bf(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x44c0(%rip), %rsi      # 0x95dc
callq 0x2050
testl %eax, %eax
jne 0x682c
movb $0x1, 0x7105(%rip)      # 0xc235
jmp 0x604f
cmpl 0x7025(%rip), %eax      # 0xc160
je 0x675e
cmpl 0x7029(%rip), %eax      # 0xc170
je 0x675e
cmpl 0x7015(%rip), %eax      # 0xc168
jne 0x5ed4
movq %rsp, %rdi
callq 0x72fb
cmpb $0x0, 0x70e1(%rip)      # 0xc249
movl $0x3f, %edx
je 0x6023
cmpb $0x0, 0x70ce(%rip)      # 0xc248
movq 0x6e6f(%rip), %rdi      # 0xbff0
leaq 0x448b(%rip), %rsi      # 0x9613
je 0x6031
xorl %ebp, %ebp
xorl %r12d, %r12d
movq 0x7116(%rip), %rbx      # 0xc2b0
movq 0x7027(%rip), %r14      # 0xc1c8
leaq (%rbx,%rbx,4), %r15
movq 0x10(%r14,%r15,8), %rdx
cmpq 0x8(%rbp,%r13), %rdx
jne 0x51cf
testq %rdx, %rdx
je 0x51eb
leaq (%r14,%r15,8), %rax
addq $0x8, %rax
movq (%rbp,%r13), %rsi
movq (%rax), %rdi
callq 0x2170
testl %eax, %eax
je 0x51eb
leaq 0x18(%rsp), %r15
leaq 0x38(%rsp), %r14
addq $0x50, %rbp
cmpq $0x1b80, %rbp           # imm = 0x1B80
jne 0x5193
jmp 0x5f6f
incl %r12d
movl (%rsp), %eax
cmpl 0x6f7d(%rip), %eax      # 0xc174
je 0x5315
cmpl 0x6fdd(%rip), %eax      # 0xc1e0
je 0x5315
movq 0x8(%rsp), %rcx
cmpb $0x23, (%rcx)
jne 0x533a
movl $0x1, %edx
leaq 0x8(%rsp), %rdi
xorl %esi, %esi
leaq 0x18(%rsp), %r15
callq 0x2030
leaq 0x38(%rsp), %r14
cmpl $-0x1, 0x34(%rbp,%r13)
je 0x6269
leaq 0x3b8(%rsp), %rax
movq %rax, 0x3a8(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x3a8(%rsp), %rdi
callq 0x7ace
leaq 0x3a8(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x3a8(%rsp), %rdi
leaq 0x3b8(%rsp), %rax
cmpq %rax, %rdi
je 0x5292
callq 0x2140
cmpq $0xff, %rbx
jg 0x631c
movzbl 0x34(%rbp,%r13), %edi
callq 0x7489
leaq 0x398(%rsp), %rax
movq %rax, 0x388(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x388(%rsp), %rdi
callq 0x7ace
leaq 0x388(%rsp), %rdi
callq 0x75d2
movzbl %al, %edi
callq 0x7489
movq 0x388(%rsp), %rdi
movl $0x1, %r14d
leaq 0x398(%rsp), %rax
cmpq %rax, %rdi
je 0x5309
callq 0x2140
addq %r14, 0x6fa0(%rip)      # 0xc2b0
jmp 0x51d4
movl 0x20(%rbp,%r13), %eax
cmpl $-0x1, %eax
je 0x61a9
movzbl %al, %edi
leaq 0x18(%rsp), %r15
callq 0x7489
leaq 0x38(%rsp), %r14
jmp 0x51d9
cmpl 0x6e20(%rip), %eax      # 0xc160
je 0x534e
cmpl 0x6e20(%rip), %eax      # 0xc168
jne 0x51cf
addq $0x3, %rbx
movq 0x6e77(%rip), %rax      # 0xc1d0
subq %r14, %rax
sarq $0x3, %rax
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rcx, %rax
cmpq %rax, %rbx
jae 0x57e2
movl 0x50(%r14,%r15,8), %eax
cmpl 0x6df6(%rip), %eax      # 0xc178
jne 0x57e2
leaq (%rbx,%rbx,4), %rax
leaq (%r14,%rax,8), %rdi
addq $0x8, %rdi
leaq 0x3fff(%rip), %rsi      # 0x939a
callq 0x2050
testl %eax, %eax
jne 0x653f
cmpl $-0x1, 0x38(%rbp,%r13)
je 0x54a3
movq 0x6ef5(%rip), %rax      # 0xc2b0
movq 0x6e06(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x378(%rsp), %rdx
movq %rdx, 0x368(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x368(%rsp), %rdi
callq 0x7ace
leaq 0x368(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x368(%rsp), %rdi
leaq 0x378(%rsp), %rax
cmpq %rax, %rdi
je 0x541a
callq 0x2140
cmpq $0xff, %rbx
jg 0x57e2
movzbl 0x38(%rbp,%r13), %edi
leaq 0x18(%rsp), %r15
callq 0x7489
movq 0x6e72(%rip), %rax      # 0xc2b0
movq 0x6d83(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x358(%rsp), %rdx
movq %rdx, 0x348(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x348(%rsp), %rdi
callq 0x7ace
leaq 0x348(%rsp), %rdi
callq 0x75d2
movzbl %al, %edi
callq 0x7489
movq 0x348(%rsp), %rdi
movl $0x3, %r14d
leaq 0x358(%rsp), %rax
jmp 0x52ff
cmpl $-0x1, 0x3c(%rbp,%r13)
je 0x5609
movq 0x6dfa(%rip), %rax      # 0xc2b0
movq 0x6d0b(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x338(%rsp), %rdx
movq %rdx, 0x328(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x328(%rsp), %rdi
callq 0x7ace
leaq 0x328(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x328(%rsp), %rdi
leaq 0x338(%rsp), %rax
cmpq %rax, %rdi
je 0x5515
callq 0x2140
cmpq $0xffff, %rbx           # imm = 0xFFFF
jg 0x57e2
movzbl 0x3c(%rbp,%r13), %edi
leaq 0x18(%rsp), %r15
callq 0x7489
movq 0x6d77(%rip), %rax      # 0xc2b0
movq 0x6c88(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x318(%rsp), %rdx
movq %rdx, 0x308(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x308(%rsp), %rdi
callq 0x7ace
leaq 0x308(%rsp), %rdi
callq 0x75d2
movzbl %al, %edi
callq 0x7489
movq 0x308(%rsp), %rdi
leaq 0x318(%rsp), %rax
cmpq %rax, %rdi
je 0x559d
callq 0x2140
movq 0x6d0c(%rip), %rax      # 0xc2b0
movq 0x6c1d(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x2f8(%rsp), %rdx
movq %rdx, 0x2e8(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x2e8(%rsp), %rdi
callq 0x7ace
leaq 0x2e8(%rsp), %rdi
callq 0x75d2
movzbl %ah, %edi
callq 0x7489
movq 0x2e8(%rsp), %rdi
movl $0x3, %r14d
leaq 0x2f8(%rsp), %rax
jmp 0x52ff
cmpl $-0x1, 0x40(%rbp,%r13)
je 0x57e2
movq 0x6c94(%rip), %rax      # 0xc2b0
movq 0x6ba5(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x2d8(%rsp), %rdx
movq %rdx, 0x2c8(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x2c8(%rsp), %rdi
leaq 0x18(%rsp), %r15
callq 0x7ace
leaq 0x38(%rsp), %r14
leaq 0x2c8(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x5685
callq 0x2140
cmpq $0xffffff, %rbx         # imm = 0xFFFFFF
jg 0x6746
movzbl 0x40(%rbp,%r13), %edi
callq 0x7489
movq 0x6c0c(%rip), %rax      # 0xc2b0
movq 0x6b1d(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x2b8(%rsp), %rdx
movq %rdx, 0x2a8(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x2a8(%rsp), %rdi
callq 0x7ace
leaq 0x2a8(%rsp), %rdi
callq 0x75d2
movzbl %al, %edi
callq 0x7489
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
cmpq %rax, %rdi
je 0x5708
callq 0x2140
movq 0x6ba1(%rip), %rax      # 0xc2b0
movq 0x6ab2(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x298(%rsp), %rdx
movq %rdx, 0x288(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x288(%rsp), %rdi
callq 0x7ace
leaq 0x288(%rsp), %rdi
callq 0x75d2
movzbl %ah, %edi
callq 0x7489
movq 0x288(%rsp), %rdi
leaq 0x298(%rsp), %rax
cmpq %rax, %rdi
je 0x5773
callq 0x2140
movq 0x6b36(%rip), %rax      # 0xc2b0
movq 0x6a47(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x278(%rsp), %rdx
movq %rdx, 0x268(%rsp)
movq 0x30(%rcx,%rax,8), %rsi
movq 0x38(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x268(%rsp), %rdi
callq 0x7ace
leaq 0x268(%rsp), %rdi
callq 0x75d2
shrl $0x10, %eax
movzbl %al, %edi
callq 0x7489
movq 0x268(%rsp), %rdi
movl $0x3, %r14d
leaq 0x278(%rsp), %rax
jmp 0x52ff
cmpl $-0x1, 0x44(%rbp,%r13)
leaq 0x18(%rsp), %r15
leaq 0x38(%rsp), %r14
je 0x592f
movq 0x6999(%rip), %rbx      # 0xc198
leaq 0x258(%rsp), %rax
movq %rax, 0x248(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x248(%rsp), %rdi
callq 0x7ace
leaq 0x248(%rsp), %rdi
callq 0x75d2
subq %rax, %rbx
movq 0x248(%rsp), %rdi
leaq 0x258(%rsp), %rax
cmpq %rax, %rdi
je 0x5922
callq 0x2140
cmpq $0x100, %rbx            # imm = 0x100
jae 0x592f
movq 0x8(%rsp), %rsi
cmpb $0x2d, (%rsi)
je 0x58cd
movslq 0x6923(%rip), %r14      # 0xc198
leaq 0x238(%rsp), %rax
movq %rax, 0x228(%rsp)
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x228(%rsp), %rdi
callq 0x7ace
leaq 0x228(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x228(%rsp), %rdi
leaq 0x238(%rsp), %rax
cmpq %rax, %rdi
je 0x58c4
callq 0x2140
cmpq %rbx, %r14
jge 0x5dcb
movq 0x68c4(%rip), %rbx      # 0xc198
leaq 0x218(%rsp), %rax
movq %rax, 0x208(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x208(%rsp), %rdi
callq 0x7ace
leaq 0x208(%rsp), %rdi
callq 0x75d2
subl %eax, %ebx
movq 0x208(%rsp), %rdi
leaq 0x218(%rsp), %rax
jmp 0x5e22
cmpq $0xff, %rbx
jbe 0x5864
cmpl $-0x1, 0x48(%rbp,%r13)
je 0x5a72
movq 0x6856(%rip), %rbx      # 0xc198
leaq 0x1d8(%rsp), %rax
movq %rax, 0x1c8(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1c8(%rsp), %rdi
callq 0x7ace
leaq 0x1c8(%rsp), %rdi
callq 0x75d2
subq %rax, %rbx
movq 0x1c8(%rsp), %rdi
leaq 0x1d8(%rsp), %rax
cmpq %rax, %rdi
je 0x5a65
callq 0x2140
cmpq $0x10000, %rbx          # imm = 0x10000
jae 0x5a72
movq 0x8(%rsp), %rsi
cmpb $0x2d, (%rsi)
je 0x5a10
movslq 0x67e0(%rip), %r14      # 0xc198
leaq 0x1b8(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1a8(%rsp), %rdi
callq 0x7ace
leaq 0x1a8(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x1a8(%rsp), %rdi
leaq 0x1b8(%rsp), %rax
cmpq %rax, %rdi
je 0x5a07
callq 0x2140
cmpq %rbx, %r14
jge 0x5e4a
movq 0x6781(%rip), %rbx      # 0xc198
leaq 0x198(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x188(%rsp), %rdi
callq 0x7ace
leaq 0x188(%rsp), %rdi
callq 0x75d2
subl %eax, %ebx
movq 0x188(%rsp), %rdi
leaq 0x198(%rsp), %rax
jmp 0x5ea4
cmpq $0xffff, %rbx           # imm = 0xFFFF
jbe 0x59a7
leaq 0x158(%rsp), %rax
movq %rax, 0x148(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x148(%rsp), %rdi
callq 0x7ace
leaq 0x148(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x148(%rsp), %rdi
leaq 0x158(%rsp), %rax
cmpq %rax, %rdi
je 0x5ac6
callq 0x2140
cmpq $0xff, %rbx
jg 0x5b3f
movl 0x24(%rbp,%r13), %eax
cmpl $-0x1, %eax
je 0x6561
movzbl %al, %edi
callq 0x7489
leaq 0x138(%rsp), %rax
movq %rax, 0x128(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x128(%rsp), %rdi
callq 0x7ace
leaq 0x128(%rsp), %rdi
callq 0x75d2
movzbl %al, %edi
callq 0x7489
movq 0x128(%rsp), %rdi
movl $0x1, %r14d
leaq 0x138(%rsp), %rax
jmp 0x52ff
leaq 0x118(%rsp), %rax
movq %rax, 0x108(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x108(%rsp), %rdi
callq 0x7ace
leaq 0x108(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x5b93
callq 0x2140
cmpq $0xffff, %rbx           # imm = 0xFFFF
jg 0x5c69
movl 0x28(%rbp,%r13), %eax
cmpl $-0x1, %eax
je 0x66b0
movzbl %al, %edi
callq 0x7489
leaq 0xf8(%rsp), %rax
movq %rax, 0xe8(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0xe8(%rsp), %rdi
callq 0x7ace
leaq 0xe8(%rsp), %rdi
callq 0x75d2
movzbl %al, %edi
callq 0x7489
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x5c0f
callq 0x2140
leaq 0xd8(%rsp), %rax
movq %rax, 0xc8(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0xc8(%rsp), %rdi
callq 0x7ace
leaq 0xc8(%rsp), %rdi
callq 0x75d2
movzbl %ah, %edi
callq 0x7489
movq 0xc8(%rsp), %rdi
movl $0x1, %r14d
leaq 0xd8(%rsp), %rax
jmp 0x52ff
leaq 0xb8(%rsp), %rax
movq %rax, 0xa8(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0xa8(%rsp), %rdi
callq 0x7ace
leaq 0xa8(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x5cbd
callq 0x2140
cmpq $0xffffff, %rbx         # imm = 0xFFFFFF
jg 0x51d9
movl 0x2c(%rbp,%r13), %eax
cmpl $-0x1, %eax
je 0x66fb
movzbl %al, %edi
callq 0x7489
leaq 0x98(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x88(%rsp), %rdi
callq 0x7ace
leaq 0x88(%rsp), %rdi
callq 0x75d2
movzbl %al, %edi
callq 0x7489
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x5d39
callq 0x2140
leaq 0x78(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x68(%rsp), %rdi
callq 0x7ace
leaq 0x68(%rsp), %rdi
callq 0x75d2
movzbl %ah, %edi
callq 0x7489
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x5d80
callq 0x2140
leaq 0x58(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x48(%rsp), %rdi
callq 0x7ace
leaq 0x48(%rsp), %rdi
callq 0x75d2
shrl $0x10, %eax
movzbl %al, %edi
callq 0x7489
movq 0x48(%rsp), %rdi
movl $0x1, %r14d
leaq 0x58(%rsp), %rax
jmp 0x52ff
movq 0x63c6(%rip), %r14      # 0xc198
leaq 0x1f8(%rsp), %rax
movq %rax, 0x1e8(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1e8(%rsp), %rdi
callq 0x7ace
leaq 0x1e8(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
subl %r14d, %ebx
addb $-0x2, %bl
movq 0x1e8(%rsp), %rdi
leaq 0x1f8(%rsp), %rax
cmpq %rax, %rdi
je 0x5e2c
callq 0x2140
movzbl 0x44(%rbp,%r13), %edi
callq 0x7489
movl $0x1, %r14d
movzbl %bl, %edi
callq 0x7489
jmp 0x5309
movq 0x6347(%rip), %r14      # 0xc198
leaq 0x178(%rsp), %rax
movq %rax, 0x168(%rsp)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x168(%rsp), %rdi
callq 0x7ace
leaq 0x168(%rsp), %rdi
callq 0x75d2
movq %rax, %rbx
subl %r14d, %ebx
addl $0xfffe, %ebx           # imm = 0xFFFE
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
cmpq %rax, %rdi
je 0x5eae
callq 0x2140
movzbl 0x48(%rbp,%r13), %edi
callq 0x7489
movzbl %bl, %edi
callq 0x7489
movl $0x1, %r14d
movzbl %bh, %edi
callq 0x7489
jmp 0x5309
cmpl 0x6292(%rip), %eax      # 0xc16c
jne 0x604f
addq $0x8, %rdi
callq 0x21c0
movq 0x63c0(%rip), %rax      # 0xc2b0
movq 0x62d1(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
leaq 0x418(%rsp), %r14
movq %r14, 0x408(%rsp)
movq 0x8(%rcx,%rax,8), %rsi
movq 0x10(%rcx,%rax,8), %rdx
addq %rsi, %rdx
leaq 0x408(%rsp), %rbx
movq %rbx, %rdi
callq 0x7ace
movq 0x6269(%rip), %rsi      # 0xc198
movq %rbx, %rdi
callq 0x778b
movq 0x408(%rsp), %rdi
cmpq %r14, %rdi
leaq 0x38(%rsp), %r14
je 0x604f
callq 0x2140
jmp 0x604f
movb $0x1, 0x62aa(%rip)      # 0xc208
jmp 0x604f
movb $0x1, 0x629f(%rip)      # 0xc209
jmp 0x604f
movb $0x1, %bl
testl %r12d, %r12d
jne 0x6038
movl $0x16, %edx
movq 0x606a(%rip), %rdi      # 0xbff0
leaq 0x379e(%rip), %rsi      # 0x972b
callq 0x2180
movq 0x6317(%rip), %rax      # 0xc2b0
movq 0x6228(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
movq 0x8(%rcx,%rax,8), %rsi
movq 0x10(%rcx,%rax,8), %rdx
movq 0x603b(%rip), %rdi      # 0xbff0
callq 0x2180
movq %rax, %rdi
movl $0x1, %edx
leaq 0x3449(%rip), %rsi      # 0x9412
jmp 0x6031
leaq 0x518(%rsp), %r12
movq %r12, 0x508(%rsp)
leaq 0x508(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x346f(%rip), %rdx      # 0x945f
callq 0x7b64
movl 0x6185(%rip), %esi      # 0xc180
movq %rbp, %rdi
callq 0x70b4
movq 0x508(%rsp), %rdi
cmpq %r12, %rdi
je 0x6015
callq 0x2140
movb 0x6235(%rip), %al       # 0xc250
movb %al, 0x620f(%rip)       # 0xc230
jmp 0x604f
movq 0x5fc6(%rip), %rdi      # 0xbff0
leaq 0x35e2(%rip), %rsi      # 0x9613
callq 0x2180
xorl %ebx, %ebx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x6047
callq 0x2140
testb %bl, %bl
je 0x67b1
movq 0x625a(%rip), %rsi      # 0xc2b0
incq %rsi
movq 0x6170(%rip), %rax      # 0xc1d0
movq 0x6161(%rip), %rcx      # 0xc1c8
subq %rcx, %rax
sarq $0x3, %rax
movabsq $-0x3333333333333333, %rdx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rdx, %rax
mulq %rdx
movq %rsi, 0x622a(%rip)      # 0xc2b0
shrq $0x5, %rdx
cmpq %rdx, %rsi
jb 0x4dfd
jmp 0x4de3
leaq 0x4f8(%rsp), %r12
movq %r12, 0x4e8(%rsp)
leaq 0x4e8(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x33ab(%rip), %rdx      # 0x9468
callq 0x7b64
movl 0x60b8(%rip), %esi      # 0xc180
movq %rbp, %rdi
callq 0x70b4
movq 0x4e8(%rsp), %rdi
cmpq %r12, %rdi
je 0x60e2
callq 0x2140
movb 0x6168(%rip), %al       # 0xc250
movb %al, 0x6143(%rip)       # 0xc231
jmp 0x604f
leaq 0x4d8(%rsp), %r12
movq %r12, 0x4c8(%rsp)
leaq 0x4c8(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x335d(%rip), %rdx      # 0x9475
callq 0x7b64
movl 0x605d(%rip), %esi      # 0xc180
movq %rbp, %rdi
callq 0x70b4
movq 0x4c8(%rsp), %rdi
cmpq %r12, %rdi
je 0x613d
callq 0x2140
movb 0x610d(%rip), %al       # 0xc250
movb %al, 0x60e9(%rip)       # 0xc232
jmp 0x604f
leaq 0x4b8(%rsp), %r12
movq %r12, 0x4a8(%rsp)
leaq 0x4a8(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x330a(%rip), %rdx      # 0x947d
callq 0x7b64
movl 0x6002(%rip), %esi      # 0xc180
movq %rbp, %rdi
callq 0x70b4
movq 0x4a8(%rsp), %rdi
cmpq %r12, %rdi
je 0x6198
callq 0x2140
movb 0x60b2(%rip), %al       # 0xc250
movb %al, 0x608f(%rip)       # 0xc233
jmp 0x604f
movl $0xe, %edx
movq 0x5e3b(%rip), %rdi      # 0xbff0
leaq 0x3497(%rip), %rsi      # 0x9653
leaq 0x18(%rsp), %r15
callq 0x2180
leaq 0x38(%rsp), %r14
movq (%rbp,%r13), %rsi
movq 0x8(%rbp,%r13), %rdx
movq 0x5e14(%rip), %rdi      # 0xbff0
callq 0x2180
movl $0xe, %edx
leaq 0x3475(%rip), %rsi      # 0x9662
jmp 0x6356
leaq 0x498(%rsp), %r12
movq %r12, 0x488(%rsp)
leaq 0x488(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x326a(%rip), %rdx      # 0x9481
callq 0x7b64
movl 0x5f62(%rip), %esi      # 0xc184
movq %rbp, %rdi
callq 0x70b4
movq 0x488(%rsp), %rdi
cmpq %r12, %rdi
je 0x623c
callq 0x2140
movq 0x600d(%rip), %rax      # 0xc250
movq %rax, 0x5f4e(%rip)      # 0xc198
cmpb $0x0, 0x5ff8(%rip)      # 0xc249
je 0x67c8
cmpb $0x0, 0x5fea(%rip)      # 0xc248
jne 0x604f
jmp 0x67c8
movl $0xe, %edx
movq 0x5d7b(%rip), %rdi      # 0xbff0
leaq 0x33d7(%rip), %rsi      # 0x9653
callq 0x2180
movq (%rbp,%r13), %rsi
movq 0x8(%rbp,%r13), %rdx
movq 0x5d5e(%rip), %rdi      # 0xbff0
callq 0x2180
movl $0x17, %edx
leaq 0x33ea(%rip), %rsi      # 0x968d
jmp 0x6356
leaq 0x478(%rsp), %r12
movq %r12, 0x468(%rsp)
leaq 0x468(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x31f9(%rip), %rdx      # 0x94c6
callq 0x7b64
movl 0x5eac(%rip), %esi      # 0xc184
movq %rbp, %rdi
callq 0x70b4
movq 0x468(%rsp), %rdi
cmpq %r12, %rdi
je 0x62f2
callq 0x2140
movq 0x5f57(%rip), %rsi      # 0xc250
movq %rsi, 0x5f38(%rip)      # 0xc238
movb $0x1, 0x5f42(%rip)      # 0xc249
movzbl 0x5f28(%rip), %eax      # 0xc236
testq %rax, %rax
jne 0x63d4
jmp 0x604f
movl $0xe, %edx
movq 0x5cc8(%rip), %rdi      # 0xbff0
leaq 0x3324(%rip), %rsi      # 0x9653
callq 0x2180
movq (%rbp,%r13), %rsi
movq 0x8(%rbp,%r13), %rdx
movq 0x5cab(%rip), %rdi      # 0xbff0
callq 0x2180
movl $0x1b, %edx
leaq 0x331b(%rip), %rsi      # 0x9671
movq %rax, %rdi
callq 0x2180
jmp 0x6036
leaq 0x458(%rsp), %r12
movq %r12, 0x448(%rsp)
leaq 0x448(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x3147(%rip), %rdx      # 0x94cf
callq 0x7b64
movl 0x5e51(%rip), %esi      # 0xc1e4
movq %rbp, %rdi
callq 0x70b4
movq 0x448(%rsp), %rdi
cmpq %r12, %rdi
je 0x63ad
callq 0x2140
movq 0x5e9c(%rip), %rax      # 0xc250
movb %al, 0x5e7c(%rip)       # 0xc236
movb $0x1, 0x5e87(%rip)      # 0xc248
movq 0x5e70(%rip), %rsi      # 0xc238
testq %rsi, %rsi
je 0x604f
movzbl %al, %eax
imulq %rax, %rsi
leaq 0x5e79(%rip), %rdi      # 0xc258
callq 0x7aa2
jmp 0x604f
leaq 0x438(%rsp), %r12
movq %r12, 0x428(%rsp)
leaq 0x428(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
leaq 0x30c6(%rip), %rdx      # 0x94d4
callq 0x7b64
movl 0x5dcb(%rip), %esi      # 0xc1e4
movq %rbp, %rdi
callq 0x70b4
movq 0x428(%rsp), %rdi
cmpq %r12, %rdi
je 0x6433
callq 0x2140
movq 0x5e16(%rip), %rax      # 0xc250
movq %rax, 0x5dff(%rip)      # 0xc240
movq 0x5d48(%rip), %rcx      # 0xc190
leaq 0x1(%rax), %rdx
imulq %rcx, %rdx
movq %rdx, 0x5d41(%rip)      # 0xc198
cmpb $0x0, 0x5dea(%rip)      # 0xc248
je 0x67dd
cmpb $0x0, 0x5dde(%rip)      # 0xc249
je 0x67ed
movzbl 0x5dbe(%rip), %edx      # 0xc236
cmpq %rdx, %rax
jae 0x6802
imulq 0x5daf(%rip), %rax      # 0xc238
addq %rcx, %rax
movq %rax, 0x5d05(%rip)      # 0xc198
jmp 0x604f
movq %rsp, %rdi
callq 0x72fb
movl (%rsp), %ebx
movl 0x5cd3(%rip), %ebp      # 0xc17c
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x64b8
callq 0x2140
cmpl %ebp, %ebx
jne 0x6817
movb $0x1, 0x5d43(%rip)      # 0xc20a
movq %rsp, %rdi
callq 0x72fb
movq %r14, 0x28(%rsp)
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x65f2
movq %rdi, 0x28(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x38(%rsp)
jmp 0x65fd
movl 0x5c84(%rip), %ebx      # 0xc180
leaq 0x3f8(%rsp), %r12
movq %r12, 0x3e8(%rsp)
leaq 0x3e8(%rsp), %rdi
movq %rbp, %rsi
leaq 0x30a6(%rip), %rdx      # 0x95c4
callq 0x7b64
movl %ebx, %edi
leaq 0x3e8(%rsp), %rsi
callq 0x7380
movq 0x3e8(%rsp), %rdi
jmp 0x65e4
movl $0x1f, %edx
movq 0x5aa5(%rip), %rax      # 0xbff0
leaq 0x316f(%rip), %rsi      # 0x96c1
leaq 0x18(%rsp), %r15
leaq 0x38(%rsp), %r14
jmp 0x6356
movl $0xe, %edx
movq 0x5a83(%rip), %rdi      # 0xbff0
leaq 0x30df(%rip), %rsi      # 0x9653
callq 0x2180
movq (%rbp,%r13), %rsi
movq 0x8(%rbp,%r13), %rdx
movq 0x5a66(%rip), %rdi      # 0xbff0
callq 0x2180
movl $0x17, %edx
leaq 0x3146(%rip), %rsi      # 0x96e1
jmp 0x6356
movl 0x5bde(%rip), %ebx      # 0xc184
leaq 0x3d8(%rsp), %r12
movq %r12, 0x3c8(%rsp)
leaq 0x3c8(%rsp), %rdi
movq %rbp, %rsi
leaq 0x2fff(%rip), %rdx      # 0x95c7
callq 0x7b64
movl %ebx, %edi
leaq 0x3c8(%rsp), %rsi
callq 0x7380
movq 0x3c8(%rsp), %rdi
cmpq %r12, %rdi
jne 0x5f4d
jmp 0x604f
movups (%r15), %xmm0
movups %xmm0, (%r14)
movq %r14, %rdi
movq 0x10(%rsp), %rax
movq %rax, 0x30(%rsp)
movb (%rdi), %al
movb $0x1, %bl
cmpb $0x22, %al
je 0x6696
movl $0x1, %r14d
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movsbl %al, %edx
movl $0x1, %esi
movq %rsp, %rdi
callq 0x2190
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
leaq 0x5bce(%rip), %rdi      # 0xc210
callq 0x2060
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x665a
callq 0x2140
cmpq $0x16, %r14
je 0x6672
movq 0x28(%rsp), %rdi
movb (%rdi,%r14), %al
incq %r14
cmpb $0x22, %al
jne 0x6619
jmp 0x6691
movl $0x2e, %edx
movq 0x5972(%rip), %rdi      # 0xbff0
leaq 0x2f0e(%rip), %rsi      # 0x9593
callq 0x2180
movq 0x28(%rsp), %rdi
xorl %ebx, %ebx
leaq 0x38(%rsp), %r14
cmpq %r14, %rdi
jne 0x6042
jmp 0x6047
movb $0x0, 0x5b89(%rip)      # 0xc234
jmp 0x604f
movl $0xe, %edx
movq 0x5934(%rip), %rdi      # 0xbff0
leaq 0x2f90(%rip), %rsi      # 0x9653
callq 0x2180
movq (%rbp,%r13), %rsi
movq 0x8(%rbp,%r13), %rdx
movq 0x5917(%rip), %rdi      # 0xbff0
callq 0x2180
movl $0x18, %edx
leaq 0x300f(%rip), %rsi      # 0x96f9
jmp 0x6356
movb $0x1, 0x5b3e(%rip)      # 0xc234
jmp 0x604f
movl $0xe, %edx
movq 0x58e9(%rip), %rdi      # 0xbff0
leaq 0x2f45(%rip), %rsi      # 0x9653
callq 0x2180
movq (%rbp,%r13), %rsi
movq 0x8(%rbp,%r13), %rdx
movq 0x58cc(%rip), %rdi      # 0xbff0
callq 0x2180
movl $0x18, %edx
leaq 0x2fdd(%rip), %rsi      # 0x9712
jmp 0x6356
movb $0x0, 0x5af4(%rip)      # 0xc235
jmp 0x604f
movl $0x1b, %edx
movq 0x589e(%rip), %rax      # 0xbff0
leaq 0x2f4c(%rip), %rsi      # 0x96a5
jmp 0x6356
movq 0x588b(%rip), %rbx      # 0xbff0
leaq 0x2e92(%rip), %rsi      # 0x95fe
movl $0x14, %edx
movq %rbx, %rdi
callq 0x2180
movq 0x5b30(%rip), %rax      # 0xc2b0
movq 0x5a41(%rip), %rcx      # 0xc1c8
leaq (%rax,%rax,4), %rax
movq 0x8(%rcx,%rax,8), %rsi
movq 0x10(%rcx,%rax,8), %rdx
movq %rbx, %rdi
callq 0x2180
leaq 0x2c6e(%rip), %rsi      # 0x9412
movl $0x1, %edx
movq %rax, %rdi
callq 0x2180
movl $0x1, %eax
addq $0x528, %rsp            # imm = 0x528
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x5821(%rip), %rdi      # 0xbff0
leaq 0x2cac(%rip), %rsi      # 0x9482
movl $0x3b, %edx
jmp 0x67ac
movq 0x580c(%rip), %rdi      # 0xbff0
leaq 0x2cea(%rip), %rsi      # 0x94d5
jmp 0x67fb
movq 0x57fc(%rip), %rdi      # 0xbff0
leaq 0x2d0c(%rip), %rsi      # 0x9507
movl $0x31, %edx
jmp 0x67ac
movq 0x57e7(%rip), %rdi      # 0xbff0
leaq 0x2d29(%rip), %rsi      # 0x9539
movl $0x32, %edx
jmp 0x67ac
movq 0x57d2(%rip), %rdi      # 0xbff0
leaq 0x2d4c(%rip), %rsi      # 0x9571
movl $0x21, %edx
jmp 0x67ac
movq 0x579d(%rip), %rbx      # 0xbfd0
leaq 0x2daa(%rip), %rsi      # 0x95e4
movl $0x19, %edx
jmp 0x6771
jmp 0x6a05
movq %rax, %rbx
movq 0x3c8(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0x3e8(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x428(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0x448(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0x268(%rsp), %rdi
leaq 0x278(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x288(%rsp), %rdi
leaq 0x298(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x168(%rsp), %rdi
leaq 0x178(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x308(%rsp), %rdi
leaq 0x318(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x328(%rsp), %rdi
leaq 0x338(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x468(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0x1e8(%rsp), %rdi
leaq 0x1f8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x1a8(%rsp), %rdi
leaq 0x1b8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x488(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x6a08
callq 0x2140
jmp 0x6a08
movq %rax, %rbx
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
jmp 0x6bc8
movq %rax, %rbx
movq 0x228(%rsp), %rdi
leaq 0x238(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x188(%rsp), %rdi
leaq 0x198(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x348(%rsp), %rdi
leaq 0x358(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x368(%rsp), %rdi
leaq 0x378(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x4a8(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x208(%rsp), %rdi
leaq 0x218(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x4c8(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0x1c8(%rsp), %rdi
leaq 0x1d8(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x128(%rsp), %rdi
leaq 0x138(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x4e8(%rsp), %rdi
jmp 0x6b66
movq %rax, %rbx
movq 0x148(%rsp), %rdi
leaq 0x158(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x248(%rsp), %rdi
leaq 0x258(%rsp), %rax
jmp 0x6baf
movq %rax, %rbx
movq 0x508(%rsp), %rdi
cmpq %r12, %rdi
jne 0x6bcd
jmp 0x6bd2
jmp 0x6bbb
jmp 0x6bbb
jmp 0x6bbb
movq %rax, %rbx
movq 0x408(%rsp), %rdi
cmpq %r14, %rdi
jne 0x6bcd
jmp 0x6bd2
movq %rax, %rbx
movq 0x3a8(%rsp), %rdi
leaq 0x3b8(%rsp), %rax
jmp 0x6baf
jmp 0x6bbb
movq %rax, %rbx
movq 0x388(%rsp), %rdi
leaq 0x398(%rsp), %rax
cmpq %rax, %rdi
je 0x6bbe
callq 0x2140
jmp 0x6bbe
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x6bd2
callq 0x2140
movq %rbx, %rdi
callq 0x2250