// File: temelmertcan[P]multgen/src/adders.cpp
// Function: create_ks_adder(int, bool, std::queue<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>&)
void create_ks_adder (int size, bool carryin, std::queue<string>& verilog){

  int index = 0;

  string* g = new string[size];
  string* p = new string[size];

  string* gtmp = new string[size];
  string* ptmp = new string[size];

  ppx_preprocess(size,  carryin, index, "KS", gtmp, ptmp, verilog);
  pgtmp_to_pg(size, gtmp, g);
  pgtmp_to_pg(size, ptmp, p);

  verilog.push("\n// Kogge-Stone Adder \n");

  int stage=0;

  // ks steps
  for (int diff = 1; diff < size; diff *= 2){
    verilog.push("");
    verilog.push("// KS stage " + to_string(++stage));

    for (int i=diff; i < size; i++){

      string new_p = "p_" + to_string(stage)+ "_" + to_string(i);
      string new_g = "g_" + to_string(stage)+ "_" + to_string(i);

      verilog.push ("wire logic "+ new_p + ";");
      verilog.push ("wire logic "+ new_g + ";");

      verilog.push ("assign "+ new_p + " = " + p[i] + " & " + p[i-diff] + ";");
      verilog.push ("assign "+ new_g + " = (" + p[i] + " & " + g[i-diff] + ") | " + g[i] + ";");

      gtmp[i] =  new_g;
      ptmp[i] =  new_p;
    }

    pgtmp_to_pg(size, gtmp, g);
    pgtmp_to_pg(size, ptmp, p);
  }

  verilog.push("");
  verilog.push("// KS postprocess ");

  ppx_postprocess (size, index, g, p, verilog);

  delete[] p;
  delete[] g;

  delete[] ptmp;
  delete[] gtmp;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x690, %rsp            # imm = 0x690
movb %sil, %al
movl %edi, -0x4(%rbp)
andb $0x1, %al
movb %al, -0x5(%rbp)
movq %rdx, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x4f0(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x4f0(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x4e8(%rbp)
cmpq $0x0, %rax
je 0x29b2b
movq -0x4e8(%rbp), %rax
movq -0x4f0(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x500(%rbp)
movq %rax, -0x4f8(%rbp)
movq -0x4f8(%rbp), %rdi
movq %rdi, -0x508(%rbp)
callq 0x3330
movq -0x508(%rbp), %rax
movq -0x500(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x4f8(%rbp)
jne 0x29afa
movq -0x4e8(%rbp), %rax
movq %rax, -0x20(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x518(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x518(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x510(%rbp)
cmpq $0x0, %rax
je 0x29be0
movq -0x510(%rbp), %rax
movq -0x518(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x528(%rbp)
movq %rax, -0x520(%rbp)
movq -0x520(%rbp), %rdi
movq %rdi, -0x530(%rbp)
callq 0x3330
movq -0x530(%rbp), %rax
movq -0x528(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x520(%rbp)
jne 0x29baf
movq -0x510(%rbp), %rax
movq %rax, -0x28(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x540(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x540(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x538(%rbp)
cmpq $0x0, %rax
je 0x29c95
movq -0x538(%rbp), %rax
movq -0x540(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x550(%rbp)
movq %rax, -0x548(%rbp)
movq -0x548(%rbp), %rdi
movq %rdi, -0x558(%rbp)
callq 0x3330
movq -0x558(%rbp), %rax
movq -0x550(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x548(%rbp)
jne 0x29c64
movq -0x538(%rbp), %rax
movq %rax, -0x30(%rbp)
movslq -0x4(%rbp), %rax
movq %rax, -0x568(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x568(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0x560(%rbp)
cmpq $0x0, %rax
je 0x29d4a
movq -0x560(%rbp), %rax
movq -0x568(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x578(%rbp)
movq %rax, -0x570(%rbp)
movq -0x570(%rbp), %rdi
movq %rdi, -0x580(%rbp)
callq 0x3330
movq -0x580(%rbp), %rax
movq -0x578(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0x570(%rbp)
jne 0x29d19
movq -0x560(%rbp), %rax
movq %rax, -0x38(%rbp)
movl -0x4(%rbp), %eax
movl %eax, -0x590(%rbp)
movb -0x5(%rbp), %al
movb %al, -0x589(%rbp)
leaq -0x59(%rbp), %rdi
movq %rdi, -0x588(%rbp)
callq 0x3430
movq -0x588(%rbp), %rdx
leaq 0x2d95d(%rip), %rsi     # 0x576e2
leaq -0x58(%rbp), %rdi
callq 0x3320
jmp 0x29d90
movl -0x590(%rbp), %edi
movb -0x589(%rbp), %al
movq -0x10(%rbp), %rdx
movq %rsp, %rcx
movq %rdx, (%rcx)
movzbl %al, %esi
andl $0x1, %esi
leaq -0x14(%rbp), %rdx
leaq -0x58(%rbp), %rcx
leaq -0x30(%rbp), %r8
leaq -0x38(%rbp), %r9
callq 0x249e0
jmp 0x29dc3
leaq -0x58(%rbp), %rdi
callq 0x31a0
leaq -0x59(%rbp), %rdi
callq 0x32a0
movl -0x4(%rbp), %edi
leaq -0x30(%rbp), %rsi
leaq -0x20(%rbp), %rdx
callq 0x26380
movl -0x4(%rbp), %edi
leaq -0x38(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0x26380
movq -0x10(%rbp), %rax
movq %rax, -0x5a0(%rbp)
leaq -0x91(%rbp), %rdi
movq %rdi, -0x598(%rbp)
callq 0x3430
movq -0x598(%rbp), %rdx
leaq 0x2eeb2(%rip), %rsi     # 0x58cd3
leaq -0x90(%rbp), %rdi
callq 0x3320
jmp 0x29e2f
movq -0x5a0(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x1e3c0
jmp 0x29e44
leaq -0x90(%rbp), %rdi
callq 0x31a0
leaq -0x91(%rbp), %rdi
callq 0x32a0
movl $0x0, -0x98(%rbp)
movl $0x1, -0x9c(%rbp)
movl -0x9c(%rbp), %eax
cmpl -0x4(%rbp), %eax
jge 0x2a8dd
movq -0x10(%rbp), %rax
movq %rax, -0x5b0(%rbp)
leaq -0xc1(%rbp), %rdi
movq %rdi, -0x5a8(%rbp)
callq 0x3430
movq -0x5a8(%rbp), %rdx
leaq 0x2f736(%rip), %rsi     # 0x595e1
leaq -0xc0(%rbp), %rdi
callq 0x3320
jmp 0x29eb9
movq -0x5b0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x1e3c0
jmp 0x29ece
leaq -0xc0(%rbp), %rdi
callq 0x31a0
leaq -0xc1(%rbp), %rdi
callq 0x32a0
movq -0x10(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movl -0x98(%rbp), %esi
incl %esi
movl %esi, -0x98(%rbp)
leaq -0x108(%rbp), %rdi
movq %rdi, -0x5b8(%rbp)
callq 0x1e700
movq -0x5b8(%rbp), %rdx
leaq 0x2edcb(%rip), %rsi     # 0x58ceb
leaq -0xe8(%rbp), %rdi
callq 0x1e930
jmp 0x29f2e
movq -0x5c0(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x1e3c0
jmp 0x29f43
leaq -0xe8(%rbp), %rdi
callq 0x31a0
leaq -0x108(%rbp), %rdi
callq 0x31a0
movl -0x9c(%rbp), %eax
movl %eax, -0x10c(%rbp)
movl -0x10c(%rbp), %eax
cmpl -0x4(%rbp), %eax
jge 0x2a8aa
movl -0x98(%rbp), %esi
leaq -0x190(%rbp), %rdi
movq %rdi, -0x5c8(%rbp)
callq 0x1e700
movq -0x5c8(%rbp), %rdx
leaq 0x2e61f(%rip), %rsi     # 0x585bc
leaq -0x170(%rbp), %rdi
callq 0x1e930
jmp 0x29fab
leaq 0x2f1a4(%rip), %rdx     # 0x59156
leaq -0x150(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x1e560
jmp 0x29fc7
movl -0x10c(%rbp), %esi
leaq -0x1b0(%rbp), %rdi
callq 0x1e700
jmp 0x29fdb
leaq -0x130(%rbp), %rdi
leaq -0x150(%rbp), %rsi
leaq -0x1b0(%rbp), %rdx
callq 0x1e5b0
jmp 0x29ff7
leaq -0x1b0(%rbp), %rdi
callq 0x31a0
leaq -0x150(%rbp), %rdi
callq 0x31a0
leaq -0x170(%rbp), %rdi
callq 0x31a0
leaq -0x190(%rbp), %rdi
callq 0x31a0
movl -0x98(%rbp), %esi
leaq -0x230(%rbp), %rdi
callq 0x1e700
jmp 0x2a03b
leaq 0x2ec40(%rip), %rsi     # 0x58c82
leaq -0x210(%rbp), %rdi
leaq -0x230(%rbp), %rdx
callq 0x1e930
jmp 0x2a057
leaq 0x2f0f8(%rip), %rdx     # 0x59156
leaq -0x1f0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x1e560
jmp 0x2a073
movl -0x10c(%rbp), %esi
leaq -0x250(%rbp), %rdi
callq 0x1e700
jmp 0x2a087
leaq -0x1d0(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
leaq -0x250(%rbp), %rdx
callq 0x1e5b0
jmp 0x2a0a3
leaq -0x250(%rbp), %rdi
callq 0x31a0
leaq -0x1f0(%rbp), %rdi
callq 0x31a0
leaq -0x210(%rbp), %rdi
callq 0x31a0
leaq -0x230(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x5d0(%rbp)
leaq 0x2eb84(%rip), %rsi     # 0x58c69
leaq -0x290(%rbp), %rdi
leaq -0x130(%rbp), %rdx
callq 0x1e820
jmp 0x2a0fa
leaq 0x2f60a(%rip), %rdx     # 0x5970b
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x1e560
jmp 0x2a116
movq -0x5d0(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x1e3c0
jmp 0x2a12b
leaq -0x270(%rbp), %rdi
callq 0x31a0
leaq -0x290(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x5d8(%rbp)
leaq 0x2eb14(%rip), %rsi     # 0x58c69
leaq -0x2d0(%rbp), %rdi
leaq -0x1d0(%rbp), %rdx
callq 0x1e820
jmp 0x2a16a
leaq 0x2f59a(%rip), %rdx     # 0x5970b
leaq -0x2b0(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x1e560
jmp 0x2a186
movq -0x5d8(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x1e3c0
jmp 0x2a19b
leaq -0x2b0(%rbp), %rdi
callq 0x31a0
leaq -0x2d0(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x5e0(%rbp)
leaq 0x2e3ed(%rip), %rsi     # 0x585b2
leaq -0x390(%rbp), %rdi
leaq -0x130(%rbp), %rdx
callq 0x1e820
jmp 0x2a1da
leaq 0x2e075(%rip), %rdx     # 0x58256
leaq -0x370(%rbp), %rdi
leaq -0x390(%rbp), %rsi
callq 0x1e560
jmp 0x2a1f6
movq -0x28(%rbp), %rdx
movslq -0x10c(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x350(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x1e980
jmp 0x2a21d
leaq 0x2ef71(%rip), %rdx     # 0x59195
leaq -0x330(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x1e560
jmp 0x2a239
movq -0x28(%rbp), %rdx
movl -0x10c(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
cltq
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x310(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x1e980
jmp 0x2a269
leaq 0x2f49b(%rip), %rdx     # 0x5970b
leaq -0x2f0(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x1e560
jmp 0x2a285
movq -0x5e0(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x1e3c0
jmp 0x2a29a
leaq -0x2f0(%rbp), %rdi
callq 0x31a0
leaq -0x310(%rbp), %rdi
callq 0x31a0
leaq -0x330(%rbp), %rdi
callq 0x31a0
leaq -0x350(%rbp), %rdi
callq 0x31a0
leaq -0x370(%rbp), %rdi
callq 0x31a0
leaq -0x390(%rbp), %rdi
callq 0x31a0
movq -0x10(%rbp), %rax
movq %rax, -0x5e8(%rbp)
leaq 0x2e2be(%rip), %rsi     # 0x585b2
leaq -0x490(%rbp), %rdi
leaq -0x1d0(%rbp), %rdx
callq 0x1e820
jmp 0x2a309
leaq 0x2e19a(%rip), %rdx     # 0x584aa
leaq -0x470(%rbp), %rdi
leaq -0x490(%rbp), %rsi
callq 0x1e560
jmp 0x2a325
movq -0x28(%rbp), %rdx
movslq -0x10c(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x450(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x1e980
jmp 0x2a34c
leaq 0x2ee42(%rip), %rdx     # 0x59195
leaq -0x430(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0x1e560
jmp 0x2a368
movq -0x20(%rbp), %rdx
movl -0x10c(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl %ecx, %eax
cltq
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x410(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x1e980
jmp 0x2a398
leaq 0x2ecd9(%rip), %rdx     # 0x59078
leaq -0x3f0(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x1e560
jmp 0x2a3b4
movq -0x20(%rbp), %rdx
movslq -0x10c(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdx
leaq -0x3d0(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x1e980
jmp 0x2a3db
leaq 0x2f329(%rip), %rdx     # 0x5970b
leaq -0x3b0(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0x1e560
jmp 0x2a3f7
movq -0x5e8(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x1e3c0
jmp 0x2a40c
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
leaq -0x3d0(%rbp), %rdi
callq 0x31a0
leaq -0x3f0(%rbp), %rdi
callq 0x31a0
leaq -0x410(%rbp), %rdi
callq 0x31a0
leaq -0x430(%rbp), %rdi
callq 0x31a0
leaq -0x450(%rbp), %rdi
callq 0x31a0
leaq -0x470(%rbp), %rdi
callq 0x31a0
leaq -0x490(%rbp), %rdi
callq 0x31a0
movq -0x30(%rbp), %rdi
movslq -0x10c(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x3050
jmp 0x2a48c
movq -0x38(%rbp), %rdi
movslq -0x10c(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq -0x130(%rbp), %rsi
callq 0x3050
jmp 0x2a4ac
leaq -0x1d0(%rbp), %rdi
callq 0x31a0
leaq -0x130(%rbp), %rdi
callq 0x31a0
movl -0x10c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10c(%rbp)
jmp 0x29f67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a4fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x31a0
leaq -0x59(%rbp), %rdi
callq 0x32a0
jmp 0x2ac26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a52f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x31a0
leaq -0x91(%rbp), %rdi
callq 0x32a0
jmp 0x2ac26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a566
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x31a0
leaq -0xc1(%rbp), %rdi
callq 0x32a0
jmp 0x2ac26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a59d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x31a0
leaq -0x108(%rbp), %rdi
callq 0x31a0
jmp 0x2ac26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a608
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a5fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a5f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x31a0
leaq -0x150(%rbp), %rdi
callq 0x31a0
leaq -0x170(%rbp), %rdi
callq 0x31a0
leaq -0x190(%rbp), %rdi
callq 0x31a0
jmp 0x2ac26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a899
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a684
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a678
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a66c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x31a0
leaq -0x1f0(%rbp), %rdi
callq 0x31a0
leaq -0x210(%rbp), %rdi
callq 0x31a0
leaq -0x230(%rbp), %rdi
callq 0x31a0
jmp 0x2a899
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a88d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a6cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x31a0
leaq -0x290(%rbp), %rdi
callq 0x31a0
jmp 0x2a88d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a703
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x31a0
leaq -0x2d0(%rbp), %rdi
callq 0x31a0
jmp 0x2a88d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a7a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a799
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a78d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a781
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a775
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x31a0
leaq -0x310(%rbp), %rdi
callq 0x31a0
leaq -0x330(%rbp), %rdi
callq 0x31a0
leaq -0x350(%rbp), %rdi
callq 0x31a0
leaq -0x370(%rbp), %rdi
callq 0x31a0
leaq -0x390(%rbp), %rdi
callq 0x31a0
jmp 0x2a88d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a881
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a875
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a85d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a851
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a845
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2a839
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
leaq -0x3d0(%rbp), %rdi
callq 0x31a0
leaq -0x3f0(%rbp), %rdi
callq 0x31a0
leaq -0x410(%rbp), %rdi
callq 0x31a0
leaq -0x430(%rbp), %rdi
callq 0x31a0
leaq -0x450(%rbp), %rdi
callq 0x31a0
leaq -0x470(%rbp), %rdi
callq 0x31a0
leaq -0x490(%rbp), %rdi
callq 0x31a0
leaq -0x1d0(%rbp), %rdi
callq 0x31a0
leaq -0x130(%rbp), %rdi
callq 0x31a0
jmp 0x2ac26
movl -0x4(%rbp), %edi
leaq -0x30(%rbp), %rsi
leaq -0x20(%rbp), %rdx
callq 0x26380
movl -0x4(%rbp), %edi
leaq -0x38(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0x26380
movl -0x9c(%rbp), %eax
shll %eax
movl %eax, -0x9c(%rbp)
jmp 0x29e70
movq -0x10(%rbp), %rax
movq %rax, -0x5f8(%rbp)
leaq -0x4b1(%rbp), %rdi
movq %rdi, -0x5f0(%rbp)
callq 0x3430
movq -0x5f0(%rbp), %rdx
leaq 0x2ecd8(%rip), %rsi     # 0x595e1
leaq -0x4b0(%rbp), %rdi
callq 0x3320
jmp 0x2a917
movq -0x5f8(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
callq 0x1e3c0
jmp 0x2a92c
leaq -0x4b0(%rbp), %rdi
callq 0x31a0
leaq -0x4b1(%rbp), %rdi
callq 0x32a0
movq -0x10(%rbp), %rax
movq %rax, -0x608(%rbp)
leaq -0x4d9(%rbp), %rdi
movq %rdi, -0x600(%rbp)
callq 0x3430
movq -0x600(%rbp), %rdx
leaq 0x2e388(%rip), %rsi     # 0x58cf8
leaq -0x4d8(%rbp), %rdi
callq 0x3320
jmp 0x2a97e
movq -0x608(%rbp), %rdi
leaq -0x4d8(%rbp), %rsi
callq 0x1e3c0
jmp 0x2a993
leaq -0x4d8(%rbp), %rdi
callq 0x31a0
leaq -0x4d9(%rbp), %rdi
callq 0x32a0
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %r8
leaq -0x14(%rbp), %rsi
leaq -0x20(%rbp), %rdx
leaq -0x28(%rbp), %rcx
callq 0x25d30
movq -0x28(%rbp), %rax
movq %rax, -0x610(%rbp)
cmpq $0x0, %rax
je 0x2aa40
movq -0x610(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x620(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x618(%rbp)
je 0x2aa34
movq -0x618(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x628(%rbp)
callq 0x31a0
movq -0x610(%rbp), %rcx
movq -0x628(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x618(%rbp)
jne 0x2aa03
movq -0x620(%rbp), %rdi
callq 0x32f0
movq -0x20(%rbp), %rax
movq %rax, -0x630(%rbp)
cmpq $0x0, %rax
je 0x2aabd
movq -0x630(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x640(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x638(%rbp)
je 0x2aab1
movq -0x638(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x648(%rbp)
callq 0x31a0
movq -0x630(%rbp), %rcx
movq -0x648(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x638(%rbp)
jne 0x2aa80
movq -0x640(%rbp), %rdi
callq 0x32f0
movq -0x38(%rbp), %rax
movq %rax, -0x650(%rbp)
cmpq $0x0, %rax
je 0x2ab3a
movq -0x650(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x660(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x658(%rbp)
je 0x2ab2e
movq -0x658(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x668(%rbp)
callq 0x31a0
movq -0x650(%rbp), %rcx
movq -0x668(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x658(%rbp)
jne 0x2aafd
movq -0x660(%rbp), %rdi
callq 0x32f0
movq -0x30(%rbp), %rax
movq %rax, -0x670(%rbp)
cmpq $0x0, %rax
je 0x2abb7
movq -0x670(%rbp), %rcx
movq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x680(%rbp)
movq -0x8(%rcx), %rdx
shlq $0x5, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x678(%rbp)
je 0x2abab
movq -0x678(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x688(%rbp)
callq 0x31a0
movq -0x670(%rbp), %rcx
movq -0x688(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x678(%rbp)
jne 0x2ab7a
movq -0x680(%rbp), %rdi
callq 0x32f0
addq $0x690, %rsp            # imm = 0x690
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2abe6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x4b0(%rbp), %rdi
callq 0x31a0
leaq -0x4b1(%rbp), %rdi
callq 0x32a0
jmp 0x2ac26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x2ac1a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x4d8(%rbp), %rdi
callq 0x31a0
leaq -0x4d9(%rbp), %rdi
callq 0x32a0
movq -0x68(%rbp), %rdi
callq 0x3420
nop