// File: /workspace/github_c_makefile_star2_O3/waynebhayes[P]SAHap/src/Genome.cpp
// Function: SAHap::Genome::Genome(SAHap::InputFile)
Genome::Genome(InputFile file)
{
	long int seed = GetFancySeed(true);
	cout << "Genome seed " << seed << endl;
	this->randomEngine = mt19937(seed);
	this->file = file;
	this->haplotypes = vector<Haplotype>(this->file.ploidy, Haplotype(this->file.index.size(), file.ploidy));
	this->range.start = 0;
	this->range.end = this->file.index.size();
	this->numberOfSites = this->file.index.size();
	this->increments = file.averageReadLength;
	this->shuffle();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x13e8, %rsp           # imm = 0x13E8
movq %rsi, %r15
movq %rdi, %r14
xorl %eax, %eax
movl %eax, 0x3f8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x3e8(%rdi)
movl %eax, 0x400(%rdi)
leaq 0x2368(%rdi), %rax
movq %rax, 0x10(%rsp)
leaq 0x2388(%rdi), %rax
movq %rax, 0x18(%rsp)
leaq 0x23b8(%rdi), %rax
movups %xmm0, 0x2348(%rdi)
movups %xmm0, 0x2358(%rdi)
movups %xmm0, 0x2368(%rdi)
movq $0x0, 0x2378(%rdi)
movq %rax, 0x2388(%rdi)
movq $0x1, 0x2390(%rdi)
movups %xmm0, 0x2398(%rdi)
movl $0x3f800000, 0x23a8(%rdi) # imm = 0x3F800000
addq $0x23b0, %rdi           # imm = 0x23B0
movl $0x82, %edx
xorl %esi, %esi
callq 0x2140
leaq 0x2438(%r14), %rbp
movq $0x1571, 0x2438(%r14) # imm = 0x1571
movl $0x1571, %ecx           # imm = 0x1571
movl $0x488, %eax            # imm = 0x488
movq %rcx, %rdx
shrq $0x1e, %rdx
xorl %ecx, %edx
imull $0x6c078965, %edx, %ecx # imm = 0x6C078965
addl %eax, %ecx
addl $0xfffffb79, %ecx       # imm = 0xFFFFFB79
movq %rcx, (%r14,%rax,8)
incq %rax
cmpq $0x6f7, %rax            # imm = 0x6F7
jne 0x2a08
leaq 0x2380(%r14), %r12
movq $0x270, 0x37b8(%r14) # imm = 0x270
movb $0x0, 0x37c0(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x3bb0(%r14)
movaps 0x85b6(%rip), %xmm1     # 0xb010
movups %xmm1, 0x3bc0(%r14)
movabsq $0x3eb0c6f7a0b5ed8d, %rax # imm = 0x3EB0C6F7A0B5ED8D
movq %rax, 0x3bd0(%r14)
movups %xmm0, 0x3bd8(%r14)
movq $0x7fffffff, 0x3be8(%r14) # imm = 0x7FFFFFFF
movups %xmm0, 0x3bf0(%r14)
xorl %eax, %eax
movq %rax, 0x3c00(%r14)
movsd 0x8641(%rip), %xmm1     # 0xb0e0
movups %xmm1, 0x3c08(%r14)
movups %xmm0, 0x3c30(%r14)
movq %rax, 0x3c40(%r14)
movl $0x1, %edi
callq 0xaa90
movq %rax, %rbx
movq 0xd4fe(%rip), %rdi      # 0xffc8
leaq 0x86f8(%rip), %rsi      # 0xb1c9
movl $0xc, %edx
callq 0x22b0
movq 0xd4e6(%rip), %rdi      # 0xffc8
movq %rbx, %rsi
callq 0x2240
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2250
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x21a0
movl %ebx, %eax
movq %rax, 0x60(%rsp)
movl $0x1, %ecx
movq %rax, %rdx
shrq $0x1e, %rdx
xorl %eax, %edx
imull $0x6c078965, %edx, %eax # imm = 0x6C078965
addl %ecx, %eax
movq %rax, 0x60(%rsp,%rcx,8)
incq %rcx
cmpq $0x270, %rcx            # imm = 0x270
jne 0x2b20
leaq 0x60(%rsp), %rsi
movq $0x270, 0x1380(%rsi) # imm = 0x270
movl $0x1388, %edx           # imm = 0x1388
movq %rbp, %rdi
callq 0x2210
movq (%r15), %rax
movq %rax, (%r12)
cmpq %r15, %r12
je 0x2b79
leaq 0x8(%r15), %rsi
movq 0x18(%rsp), %rdi
callq 0x57ce
leaq 0x23c0(%r14), %rdi
leaq 0x40(%r15), %rsi
callq 0x52a0
leaq 0x23d8(%r14), %rdi
leaq 0x58(%r15), %rsi
callq 0x5384
leaq 0x23f0(%r14), %rdi
leaq 0x70(%r15), %rsi
callq 0x554c
leaq 0x2408(%r14), %rdi
leaq 0x88(%r15), %rsi
callq 0x5630
movzwl 0xb0(%r15), %eax
movw %ax, 0x2430(%r14)
movups 0xa0(%r15), %xmm0
movups %xmm0, 0x2420(%r14)
movq 0x2380(%r14), %rbx
movq 0x23a0(%r14), %rsi
movl (%r15), %edx
leaq 0x60(%rsp), %rdi
callq 0x6968
leaq 0x20(%rsp), %rdi
leaq 0x60(%rsp), %rdx
leaq 0xf(%rsp), %rcx
movq %rbx, %rsi
callq 0x50dc
movq 0x2378(%r14), %rax
leaq 0x20(%rsp), %rbx
movaps (%rbx), %xmm0
movq 0x10(%rbx), %rcx
movq %rcx, 0x2378(%r14)
movups 0x2368(%r14), %xmm1
movups %xmm0, 0x2368(%r14)
leaq 0x40(%rsp), %rdi
movaps %xmm1, (%rdi)
movq %rax, 0x10(%rdi)
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
xorl %r13d, %r13d
movq %r13, 0x10(%rbx)
callq 0x5176
movq %rbx, %rdi
callq 0x5176
leaq 0x60(%rsp), %rdi
callq 0x6dec
movq %r13, 0x3be8(%r14)
movq 0x23a0(%r14), %rax
movq %rax, 0x3bf0(%r14)
movq %rax, 0x3bf8(%r14)
movq 0xa8(%r15), %rax
movq %rax, 0x3c00(%r14)
movq %r14, %rdi
callq 0x2cf8
addq $0x13e8, %rsp           # imm = 0x13E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x6dec
jmp 0x2cc0
jmp 0x2cbd
movq %rax, %rbx
leaq 0x3c30(%r14), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x2cde
movq 0x3c40(%r14), %rsi
subq %rdi, %rsi
callq 0x2290
movq %r12, %rdi
callq 0x51c0
movq 0x10(%rsp), %rdi
callq 0x5176
movq %rbx, %rdi
callq 0x2450