// File: temelmertcan[P]multgen/src/multgen.cpp
// Function: main
int main(int argc, char **argv) {

  int  in1_size;
  int  in2_size;
  int  in3_size;
  int  dot_size;
  int  out_size;
  int  shift_amount=0;
  bool allowXes = false;
  string file_name_prefix = "";
  string final_stage_adder;
  string pp_encoding;
  string tree;
  string main_type;
  bool signed_mult;
  bool ha_fa_with_gates;
  queue<string> verilog;

  int retval = interact_with_user(argc, argv, in1_size, in2_size, in3_size, dot_size, out_size, shift_amount, allowXes, signed_mult, ha_fa_with_gates, final_stage_adder,
                                  pp_encoding, tree, main_type,
				  file_name_prefix);

  if (retval==2)
    return 0;

  enter_license(verilog);

  int adder_size;
  string module_name;

  int retval0 = 0, retval1 = 0;

  bool create_fin_adder = true;

  if (main_type.compare("StandAlone") == 0){
    std::list<int> extra_ones_indices;
    bool** zeros_in_output = NULL;

    retval0 = create_mult(in1_size, in2_size,
                          out_size, shift_amount, allowXes,
                          final_stage_adder,
                          pp_encoding,
                          tree,
                          create_fin_adder,
                          module_name,
                          extra_ones_indices,
                          verilog,
                          adder_size,
                          zeros_in_output);
  } else if (main_type.compare("FourMult") == 0) {

    create_four_mult (in1_size, in3_size,
                      out_size, shift_amount, allowXes,
                      final_stage_adder,
                      pp_encoding,
                      tree,
                      module_name,
                      verilog,
                      adder_size);

  } else if (main_type.compare("MAC") == 0){
    create_mac (in1_size,
                in2_size,
                in3_size,
                out_size, shift_amount, allowXes,
                final_stage_adder,
                pp_encoding,
                tree,
                module_name,
                verilog,
                adder_size);
  } else if (main_type.compare("DOT") == 0){
    create_dot (in1_size,
                in2_size,
                in3_size,
                dot_size,
                out_size, shift_amount, allowXes,
                final_stage_adder,
                pp_encoding,
                tree,
                module_name,
                verilog,
                adder_size);
  } else if (main_type.compare("Adder") == 0) {
    create_fin_adder = true;
    module_name = final_stage_adder + "_" + to_string (in1_size);
    adder_size = in1_size;
  } else {
    cout << "not implemented yet!" << endl;
    return 1;
  }

  if (create_fin_adder){
    // if only adder is being asked to create, then create it with carryin. 
    retval1 = create_adder(final_stage_adder, main_type.compare("Adder") == 0, adder_size, verilog);
  }
  if (retval0 == 1 || retval0 == 1)
    return 1;

  create_ha_fa (ha_fa_with_gates, verilog);

  string file_name = file_name_prefix + module_name + "_multgen.sv";
  write_to_file(file_name, verilog);

  cout << endl;
  cout << "Written to " << file_name << endl;
  cout << endl;

  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4f0, %rsp            # imm = 0x4F0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x0, -0x28(%rbp)
movb $0x0, -0x29(%rbp)
leaq -0x51(%rbp), %rdi
movq %rdi, -0x408(%rbp)
callq 0x3430
movq -0x408(%rbp), %rdx
leaq 0x3be4f(%rip), %rsi     # 0x595e1
leaq -0x50(%rbp), %rdi
callq 0x3320
jmp 0x1d79d
leaq -0x51(%rbp), %rdi
callq 0x32a0
leaq -0x88(%rbp), %rdi
callq 0x3330
leaq -0xa8(%rbp), %rdi
callq 0x3330
leaq -0xc8(%rbp), %rdi
callq 0x3330
leaq -0xe8(%rbp), %rdi
callq 0x3330
leaq -0x140(%rbp), %rdi
callq 0x1ed10
jmp 0x1d7e4
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
movq %rsp, %rax
movq %rax, -0x418(%rbp)
leaq -0x50(%rbp), %rcx
movq %rcx, 0x48(%rax)
leaq -0xe8(%rbp), %rcx
movq %rcx, 0x40(%rax)
leaq -0xc8(%rbp), %rcx
movq %rcx, 0x38(%rax)
leaq -0xa8(%rbp), %rcx
movq %rcx, 0x30(%rax)
leaq -0x88(%rbp), %rcx
movq %rcx, 0x28(%rax)
leaq -0xea(%rbp), %rcx
movq %rcx, 0x20(%rax)
leaq -0xe9(%rbp), %rcx
movq %rcx, 0x18(%rax)
leaq -0x29(%rbp), %rcx
movq %rcx, 0x10(%rax)
leaq -0x28(%rbp), %rcx
movq %rcx, 0x8(%rax)
leaq -0x24(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x14(%rbp), %rdx
leaq -0x18(%rbp), %rcx
leaq -0x1c(%rbp), %r8
leaq -0x20(%rbp), %r9
callq 0x4ee0
movl %eax, -0x40c(%rbp)
jmp 0x1d873
movl -0x40c(%rbp), %eax
movl %eax, -0x144(%rbp)
cmpl $0x2, -0x144(%rbp)
jne 0x1d8da
movl $0x0, -0x4(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x1e315
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x51(%rbp), %rdi
callq 0x32a0
jmp 0x1e3ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1e372
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1e366
leaq -0x140(%rbp), %rdi
callq 0x36c0
jmp 0x1d8e8
leaq -0x170(%rbp), %rdi
callq 0x3330
movl $0x0, -0x174(%rbp)
movl $0x0, -0x178(%rbp)
movb $0x1, -0x179(%rbp)
leaq -0xe8(%rbp), %rdi
leaq 0x399f9(%rip), %rsi     # 0x57316
callq 0x30b0
cmpl $0x0, %eax
jne 0x1dafa
leaq -0x198(%rbp), %rdi
callq 0x1eb00
movq $0x0, -0x1a0(%rbp)
movl -0x14(%rbp), %eax
movl %eax, -0x42c(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x428(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x424(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x420(%rbp)
movb -0x29(%rbp), %al
movb %al, -0x419(%rbp)
leaq -0x1c0(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3100
jmp 0x1d984
leaq -0x1e0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x3100
jmp 0x1d999
leaq -0x200(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3100
jmp 0x1d9ae
movl -0x420(%rbp), %ecx
movl -0x424(%rbp), %edx
movl -0x428(%rbp), %esi
movl -0x42c(%rbp), %edi
movb -0x419(%rbp), %al
movzbl -0x179(%rbp), %r9d
movq %rsp, %r8
movq %r8, -0x438(%rbp)
leaq -0x1a0(%rbp), %r10
movq %r10, 0x38(%r8)
leaq -0x14c(%rbp), %r10
movq %r10, 0x30(%r8)
leaq -0x140(%rbp), %r10
movq %r10, 0x28(%r8)
leaq -0x198(%rbp), %r10
movq %r10, 0x20(%r8)
leaq -0x170(%rbp), %r10
movq %r10, 0x18(%r8)
andl $0x1, %r9d
movl %r9d, 0x10(%r8)
leaq -0x200(%rbp), %r9
movq %r9, 0x8(%r8)
leaq -0x1e0(%rbp), %r9
movq %r9, (%r8)
movzbl %al, %r8d
andl $0x1, %r8d
leaq -0x1c0(%rbp), %r9
callq 0x8e60
movl %eax, -0x430(%rbp)
jmp 0x1da4e
movl -0x430(%rbp), %eax
movl %eax, -0x174(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x31a0
leaq -0x1e0(%rbp), %rdi
callq 0x31a0
leaq -0x1c0(%rbp), %rdi
callq 0x31a0
leaq -0x198(%rbp), %rdi
callq 0x1eb50
jmp 0x1e0c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1dae9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1dadd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1dad1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x31a0
leaq -0x1e0(%rbp), %rdi
callq 0x31a0
leaq -0x1c0(%rbp), %rdi
callq 0x31a0
leaq -0x198(%rbp), %rdi
callq 0x1eb50
jmp 0x1e307
leaq -0xe8(%rbp), %rdi
leaq 0x3990c(%rip), %rsi     # 0x57414
callq 0x30b0
cmpl $0x0, %eax
jne 0x1dc7a
movl -0x14(%rbp), %eax
movl %eax, -0x44c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x448(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x444(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x440(%rbp)
movb -0x29(%rbp), %al
movb %al, -0x439(%rbp)
leaq -0x220(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3100
jmp 0x1db58
leaq -0x240(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x3100
jmp 0x1db6d
leaq -0x260(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3100
jmp 0x1db82
movl -0x440(%rbp), %ecx
movl -0x444(%rbp), %edx
movl -0x448(%rbp), %esi
movl -0x44c(%rbp), %edi
movb -0x439(%rbp), %al
movq %rsp, %r8
leaq -0x14c(%rbp), %r9
movq %r9, 0x20(%r8)
leaq -0x140(%rbp), %r9
movq %r9, 0x18(%r8)
leaq -0x170(%rbp), %r9
movq %r9, 0x10(%r8)
leaq -0x260(%rbp), %r9
movq %r9, 0x8(%r8)
leaq -0x240(%rbp), %r9
movq %r9, (%r8)
movzbl %al, %r8d
andl $0x1, %r8d
leaq -0x220(%rbp), %r9
callq 0xca00
jmp 0x1dbef
leaq -0x260(%rbp), %rdi
callq 0x31a0
leaq -0x240(%rbp), %rdi
callq 0x31a0
leaq -0x220(%rbp), %rdi
callq 0x31a0
jmp 0x1e0c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1e307
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1dc69
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1dc5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x31a0
leaq -0x240(%rbp), %rdi
callq 0x31a0
leaq -0x220(%rbp), %rdi
callq 0x31a0
jmp 0x1e307
leaq -0xe8(%rbp), %rdi
leaq 0x39788(%rip), %rsi     # 0x57410
callq 0x30b0
cmpl $0x0, %eax
jne 0x1ddfd
movl -0x14(%rbp), %eax
movl %eax, -0x464(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x460(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x45c(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x458(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x454(%rbp)
movb -0x29(%rbp), %al
movb %al, -0x44d(%rbp)
leaq -0x280(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3100
jmp 0x1dce1
leaq -0x2a0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x3100
jmp 0x1dcf6
leaq -0x2c0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3100
jmp 0x1dd0b
movl -0x454(%rbp), %r8d
movl -0x458(%rbp), %ecx
movl -0x45c(%rbp), %edx
movl -0x460(%rbp), %esi
movl -0x464(%rbp), %edi
movb -0x44d(%rbp), %al
movq %rsp, %r9
leaq -0x14c(%rbp), %r10
movq %r10, 0x28(%r9)
leaq -0x140(%rbp), %r10
movq %r10, 0x20(%r9)
leaq -0x170(%rbp), %r10
movq %r10, 0x18(%r9)
leaq -0x2c0(%rbp), %r10
movq %r10, 0x10(%r9)
leaq -0x2a0(%rbp), %r10
movq %r10, 0x8(%r9)
leaq -0x280(%rbp), %r10
movq %r10, (%r9)
movzbl %al, %r9d
andl $0x1, %r9d
callq 0x14290
jmp 0x1dd83
leaq -0x2c0(%rbp), %rdi
callq 0x31a0
leaq -0x2a0(%rbp), %rdi
callq 0x31a0
leaq -0x280(%rbp), %rdi
callq 0x31a0
jmp 0x1e0c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1ddec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1dde0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x31a0
leaq -0x2a0(%rbp), %rdi
callq 0x31a0
leaq -0x280(%rbp), %rdi
callq 0x31a0
jmp 0x1e307
leaq -0xe8(%rbp), %rdi
leaq 0x39612(%rip), %rsi     # 0x5741d
callq 0x30b0
cmpl $0x0, %eax
jne 0x1df95
movl -0x14(%rbp), %eax
movl %eax, -0x480(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x47c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x478(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x474(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x470(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x46c(%rbp)
movb -0x29(%rbp), %al
movb %al, -0x465(%rbp)
leaq -0x2e0(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3100
jmp 0x1de6d
leaq -0x300(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x3100
jmp 0x1de82
leaq -0x320(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3100
jmp 0x1de97
movl -0x46c(%rbp), %r9d
movl -0x470(%rbp), %r8d
movl -0x474(%rbp), %ecx
movl -0x478(%rbp), %edx
movl -0x47c(%rbp), %esi
movl -0x480(%rbp), %edi
movb -0x465(%rbp), %r10b
movq %rsp, %rax
leaq -0x14c(%rbp), %r11
movq %r11, 0x30(%rax)
leaq -0x140(%rbp), %r11
movq %r11, 0x28(%rax)
leaq -0x170(%rbp), %r11
movq %r11, 0x20(%rax)
leaq -0x320(%rbp), %r11
movq %r11, 0x18(%rax)
leaq -0x300(%rbp), %r11
movq %r11, 0x10(%rax)
leaq -0x2e0(%rbp), %r11
movq %r11, 0x8(%rax)
movzbl %r10b, %r10d
andl $0x1, %r10d
movl %r10d, (%rax)
callq 0x18500
jmp 0x1df1b
leaq -0x320(%rbp), %rdi
callq 0x31a0
leaq -0x300(%rbp), %rdi
callq 0x31a0
leaq -0x2e0(%rbp), %rdi
callq 0x31a0
jmp 0x1e0c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1df84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1df78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x31a0
leaq -0x300(%rbp), %rdi
callq 0x31a0
leaq -0x2e0(%rbp), %rdi
callq 0x31a0
jmp 0x1e307
leaq -0xe8(%rbp), %rdi
leaq 0x3947e(%rip), %rsi     # 0x57421
callq 0x30b0
cmpl $0x0, %eax
jne 0x1e07a
movb $0x1, -0x179(%rbp)
leaq 0x3b197(%rip), %rdx     # 0x59156
leaq -0x360(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1e680
jmp 0x1dfd4
movl -0x14(%rbp), %esi
leaq -0x380(%rbp), %rdi
callq 0x1e700
jmp 0x1dfe5
leaq -0x340(%rbp), %rdi
leaq -0x360(%rbp), %rsi
leaq -0x380(%rbp), %rdx
callq 0x1e5b0
jmp 0x1e001
leaq -0x170(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0x32b0
leaq -0x340(%rbp), %rdi
callq 0x31a0
leaq -0x380(%rbp), %rdi
callq 0x31a0
leaq -0x360(%rbp), %rdi
callq 0x31a0
movl -0x14(%rbp), %eax
movl %eax, -0x14c(%rbp)
jmp 0x1e0c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1e069
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x31a0
leaq -0x360(%rbp), %rdi
callq 0x31a0
jmp 0x1e307
movq 0x47f47(%rip), %rdi     # 0x65fc8
leaq 0x3a5fc(%rip), %rsi     # 0x58684
callq 0x3250
movq %rax, -0x488(%rbp)
jmp 0x1e096
movq -0x488(%rbp), %rdi
movq 0x47f14(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x1e0ab
movl $0x1, -0x4(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x1e2f9
jmp 0x1e0c3
jmp 0x1e0c5
jmp 0x1e0c7
jmp 0x1e0c9
testb $0x1, -0x179(%rbp)
je 0x1e15e
leaq -0x3a0(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3100
jmp 0x1e0eb
leaq 0x3932f(%rip), %rsi     # 0x57421
leaq -0xe8(%rbp), %rdi
callq 0x30b0
testl %eax, %eax
sete %al
movl -0x14c(%rbp), %edx
movzbl %al, %esi
leaq -0x3a0(%rbp), %rdi
leaq -0x140(%rbp), %rcx
callq 0x7ab0
movl %eax, -0x48c(%rbp)
jmp 0x1e127
movl -0x48c(%rbp), %eax
movl %eax, -0x178(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0x31a0
jmp 0x1e15e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0x31a0
jmp 0x1e307
cmpl $0x1, -0x174(%rbp)
je 0x1e170
cmpl $0x1, -0x174(%rbp)
jne 0x1e186
movl $0x1, -0x4(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x1e2f9
movzbl -0xea(%rbp), %edi
andl $0x1, %edi
leaq -0x140(%rbp), %rsi
callq 0x212b0
jmp 0x1e19e
leaq -0x3e0(%rbp), %rdi
leaq -0x50(%rbp), %rsi
leaq -0x170(%rbp), %rdx
callq 0x1ed40
jmp 0x1e1b7
leaq 0x3a4db(%rip), %rdx     # 0x58699
leaq -0x3c0(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x1e560
jmp 0x1e1d3
leaq -0x3e0(%rbp), %rdi
callq 0x31a0
leaq -0x400(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0x3100
jmp 0x1e1f4
leaq -0x400(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x1d550
jmp 0x1e209
leaq -0x400(%rbp), %rdi
callq 0x31a0
movq 0x47dac(%rip), %rdi     # 0x65fc8
movq 0x47d95(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x1e22a
movq 0x47d97(%rip), %rdi     # 0x65fc8
leaq 0x3a46d(%rip), %rsi     # 0x586a5
callq 0x3250
movq %rax, -0x498(%rbp)
jmp 0x1e246
movq -0x498(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0x3210
movq %rax, -0x4a0(%rbp)
jmp 0x1e262
movq -0x4a0(%rbp), %rdi
movq 0x47d48(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x1e277
movq 0x47d4a(%rip), %rdi     # 0x65fc8
movq 0x47d33(%rip), %rsi     # 0x65fb8
callq 0x3280
jmp 0x1e28c
movl $0x0, -0x4(%rbp)
movl $0x1, -0x148(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x31a0
jmp 0x1e2f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x31a0
jmp 0x1e307
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1e2eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x31a0
leaq -0x3c0(%rbp), %rdi
callq 0x31a0
jmp 0x1e307
leaq -0x170(%rbp), %rdi
callq 0x31a0
jmp 0x1e315
leaq -0x170(%rbp), %rdi
callq 0x31a0
jmp 0x1e366
leaq -0x140(%rbp), %rdi
callq 0x1edc0
leaq -0xe8(%rbp), %rdi
callq 0x31a0
leaq -0xc8(%rbp), %rdi
callq 0x31a0
leaq -0xa8(%rbp), %rdi
callq 0x31a0
leaq -0x88(%rbp), %rdi
callq 0x31a0
leaq -0x50(%rbp), %rdi
callq 0x31a0
movl -0x4(%rbp), %eax
addq $0x4f0, %rsp            # imm = 0x4F0
popq %rbp
retq
leaq -0x140(%rbp), %rdi
callq 0x1edc0
leaq -0xe8(%rbp), %rdi
callq 0x31a0
leaq -0xc8(%rbp), %rdi
callq 0x31a0
leaq -0xa8(%rbp), %rdi
callq 0x31a0
leaq -0x88(%rbp), %rdi
callq 0x31a0
leaq -0x50(%rbp), %rdi
callq 0x31a0
movq -0x60(%rbp), %rdi
callq 0x3420
nopw %cs:(%rax,%rax)
nop