// File: zerolfx[P]P-Machine/ldo.cpp
// Function: Ldo::execute(StackMachine*)
void Ldo::execute(StackMachine *stack)
{
	if(stack->fSP < fQ)
		throw ExecutionError("instruction ldo: no element present at STORE[q].");
		
	switch(fType)
	{
		case integer:
		{
			StackInteger p1;

			// check if STORE[q] is of type integer
			if(typeid(p1) != typeid(*stack->fStore[fQ]))
			{
				throw ExecutionError("instruction ldo: type of STORE[q] is not of type integer.");
			}
			else
			{
				stack->fStore.push_back(new StackInteger(*(dynamic_cast<StackInteger*>(stack->fStore[fQ]))));
			}
				
			break;
		}	
		case real:
		{
			StackReal p1;
			
			// check if STORE[q] is of type real
			if(typeid(p1) != typeid(*stack->fStore[fQ]))
			{
				throw ExecutionError("instruction ldo: type of STORE[q] is not of type real.");
			}
			else
			{
				stack->fStore.push_back(new StackReal(*(dynamic_cast<StackReal*>(stack->fStore[fQ]))));
			}


			break;
		}
		case boolean:
		{
			StackBoolean p1;
			
			// check if STORE[q] is of type boolean
			if(typeid(p1) != typeid(*stack->fStore[fQ]))
			{
				throw ExecutionError("instruction ldo: type of STORE[q] is not of type boolean.");
			}
			else
			{
				stack->fStore.push_back(new StackBoolean(*(dynamic_cast<StackBoolean*>(stack->fStore[fQ]))));
			}


			break;
		}
		case character:
		{
			StackCharacter p1;
			
			// check if STORE[q] is of type character
			if(typeid(p1) != typeid(*stack->fStore[fQ]))
			{
				throw ExecutionError("instruction ldo: type of STORE[q] is not of type character.");
			}
			else
			{
				stack->fStore.push_back(new StackCharacter(*(dynamic_cast<StackCharacter*>(stack->fStore[fQ]))));
			}


			break;
		}
		case address:
		{
			StackAddress p1;

			// check if STORE[q] is of type address
			if(typeid(p1) != typeid(*stack->fStore[fQ]))
			{
				throw ExecutionError("instruction ldo: type of STORE[q] is not of type address.");
			}
			else
			{
				stack->fStore.push_back(new StackAddress(*(dynamic_cast<StackAddress*>(stack->fStore[fQ]))));
			}

			break;
		}
	}
	
	// fSP = fSP + 1
	++stack->fSP;
	
	// adding cost of this instruction
	stack->fTime.count("ldo");

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x300, %rsp            # imm = 0x300
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rcx
movq %rcx, -0x1b8(%rbp)
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %eax
cmpl 0xc(%rcx), %eax
jge 0x14e69
movb $0x1, -0x45(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x1c8(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0x1c0(%rbp)
callq 0x74f0
movq -0x1c0(%rbp), %rdx
leaq 0x239f5(%rip), %rsi     # 0x387d9
leaq -0x30(%rbp), %rdi
callq 0x8940
jmp 0x14def
movq -0x1c8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x283d0
jmp 0x14e01
movq -0x1c8(%rbp), %rdi
movb $0x0, -0x45(%rbp)
leaq 0x34c6d(%rip), %rsi     # 0x49a80
leaq 0x135e6(%rip), %rdx     # 0x28400
callq 0x74a0
jmp 0x159af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x14e47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x7170
leaq -0x31(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x45(%rbp)
jne 0x14e58
jmp 0x14e64
movq -0x1c8(%rbp), %rdi
callq 0x71c0
jmp 0x159a6
movq -0x1b8(%rbp), %rax
movl 0x8(%rax), %eax
movq %rax, -0x1d0(%rbp)
subq $0x4, %rax
ja 0x158ee
movq -0x1d0(%rbp), %rax
leaq 0x2392e(%rip), %rcx     # 0x387c0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x58(%rbp), %rdi
xorl %esi, %esi
callq 0x27340
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x1d8(%rbp)
cmpq $0x0, %rax
jne 0x14ed5
callq 0x7300
jmp 0x14ed5
movq -0x1d8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x35c06(%rip), %rdi     # 0x4aaf0
callq 0x9370
testb $0x1, %al
jne 0x14ef8
jmp 0x14fc1
movb $0x1, -0x7a(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x1e8(%rbp)
leaq -0x79(%rbp), %rdi
movq %rdi, -0x1e0(%rbp)
callq 0x74f0
movq -0x1e0(%rbp), %rdx
leaq 0x238df(%rip), %rsi     # 0x3880a
leaq -0x78(%rbp), %rdi
callq 0x8940
jmp 0x14f36
movq -0x1e8(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x283d0
jmp 0x14f48
movq -0x1e8(%rbp), %rdi
movb $0x0, -0x7a(%rbp)
leaq 0x34b26(%rip), %rsi     # 0x49a80
leaq 0x1349f(%rip), %rdx     # 0x28400
callq 0x74a0
jmp 0x159af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x15083
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x14f9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x7170
leaq -0x79(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x7a(%rbp)
jne 0x14fb0
jmp 0x14fbc
movq -0x1e8(%rbp), %rdi
callq 0x71c0
jmp 0x15083
movq -0x10(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x1f8(%rbp)
movl $0x10, %edi
callq 0x7270
movq %rax, -0x1f0(%rbp)
jmp 0x14fe3
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x200(%rbp)
cmpq $0x0, %rax
je 0x15032
movq -0x200(%rbp), %rdi
leaq 0x35a0f(%rip), %rsi     # 0x4aa28
leaq 0x35ad0(%rip), %rdx     # 0x4aaf0
xorl %eax, %eax
movl %eax, %ecx
callq 0x7320
movq %rax, -0x208(%rbp)
jmp 0x1503d
xorl %eax, %eax
movq %rax, -0x208(%rbp)
jmp 0x1503d
movq -0x1f0(%rbp), %rdi
movq -0x208(%rbp), %rsi
callq 0xd2d0
movq -0x1f0(%rbp), %rax
movq -0x1f8(%rbp), %rdi
movq %rax, -0x88(%rbp)
leaq -0x88(%rbp), %rsi
callq 0xd2a0
jmp 0x15073
jmp 0x15075
leaq -0x58(%rbp), %rdi
callq 0x27380
jmp 0x158ee
leaq -0x58(%rbp), %rdi
callq 0x27380
jmp 0x159a6
leaq -0x98(%rbp), %rdi
xorps %xmm0, %xmm0
callq 0x27840
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x210(%rbp)
cmpq $0x0, %rax
jne 0x150cf
callq 0x7300
jmp 0x150cf
movq -0x210(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x35adc(%rip), %rdi     # 0x4abc0
callq 0x9370
testb $0x1, %al
jne 0x150f2
jmp 0x151d3
movb $0x1, -0xba(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x220(%rbp)
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0x74f0
movq -0x218(%rbp), %rdx
leaq 0x23719(%rip), %rsi     # 0x38844
leaq -0xb8(%rbp), %rdi
callq 0x8940
jmp 0x15139
movq -0x220(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x283d0
jmp 0x1514e
movq -0x220(%rbp), %rdi
movb $0x0, -0xba(%rbp)
leaq 0x3491d(%rip), %rsi     # 0x49a80
leaq 0x13296(%rip), %rdx     # 0x28400
callq 0x74a0
jmp 0x159af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x15298
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x151ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x7170
leaq -0xb9(%rbp), %rdi
callq 0x72e0
testb $0x1, -0xba(%rbp)
jne 0x151c2
jmp 0x151ce
movq -0x220(%rbp), %rdi
callq 0x71c0
jmp 0x15298
movq -0x10(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x230(%rbp)
movl $0x10, %edi
callq 0x7270
movq %rax, -0x228(%rbp)
jmp 0x151f5
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x238(%rbp)
cmpq $0x0, %rax
je 0x15244
movq -0x238(%rbp), %rdi
leaq 0x357fd(%rip), %rsi     # 0x4aa28
leaq 0x3598e(%rip), %rdx     # 0x4abc0
xorl %eax, %eax
movl %eax, %ecx
callq 0x7320
movq %rax, -0x240(%rbp)
jmp 0x1524f
xorl %eax, %eax
movq %rax, -0x240(%rbp)
jmp 0x1524f
movq -0x228(%rbp), %rdi
movq -0x240(%rbp), %rsi
callq 0xd320
movq -0x228(%rbp), %rax
movq -0x230(%rbp), %rdi
movq %rax, -0xc8(%rbp)
leaq -0xc8(%rbp), %rsi
callq 0xd2a0
jmp 0x15285
jmp 0x15287
leaq -0x98(%rbp), %rdi
callq 0x27880
jmp 0x158ee
leaq -0x98(%rbp), %rdi
callq 0x27880
jmp 0x159a6
leaq -0xd8(%rbp), %rdi
xorl %esi, %esi
callq 0x27d20
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x248(%rbp)
cmpq $0x0, %rax
jne 0x152e6
callq 0x7300
jmp 0x152e6
movq -0x248(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x35995(%rip), %rdi     # 0x4ac90
callq 0x9370
testb $0x1, %al
jne 0x15309
jmp 0x153ea
movb $0x1, -0xfa(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x258(%rbp)
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x74f0
movq -0x250(%rbp), %rdx
leaq 0x23539(%rip), %rsi     # 0x3887b
leaq -0xf8(%rbp), %rdi
callq 0x8940
jmp 0x15350
movq -0x258(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x283d0
jmp 0x15365
movq -0x258(%rbp), %rdi
movb $0x0, -0xfa(%rbp)
leaq 0x34706(%rip), %rsi     # 0x49a80
leaq 0x1307f(%rip), %rdx     # 0x28400
callq 0x74a0
jmp 0x159af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x154af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x153c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x7170
leaq -0xf9(%rbp), %rdi
callq 0x72e0
testb $0x1, -0xfa(%rbp)
jne 0x153d9
jmp 0x153e5
movq -0x258(%rbp), %rdi
callq 0x71c0
jmp 0x154af
movq -0x10(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x268(%rbp)
movl $0x10, %edi
callq 0x7270
movq %rax, -0x260(%rbp)
jmp 0x1540c
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x270(%rbp)
cmpq $0x0, %rax
je 0x1545b
movq -0x270(%rbp), %rdi
leaq 0x355e6(%rip), %rsi     # 0x4aa28
leaq 0x35847(%rip), %rdx     # 0x4ac90
xorl %eax, %eax
movl %eax, %ecx
callq 0x7320
movq %rax, -0x278(%rbp)
jmp 0x15466
xorl %eax, %eax
movq %rax, -0x278(%rbp)
jmp 0x15466
movq -0x260(%rbp), %rdi
movq -0x278(%rbp), %rsi
callq 0xd370
movq -0x260(%rbp), %rax
movq -0x268(%rbp), %rdi
movq %rax, -0x108(%rbp)
leaq -0x108(%rbp), %rsi
callq 0xd2a0
jmp 0x1549c
jmp 0x1549e
leaq -0xd8(%rbp), %rdi
callq 0x27d70
jmp 0x158ee
leaq -0xd8(%rbp), %rdi
callq 0x27d70
jmp 0x159a6
leaq -0x118(%rbp), %rdi
movl $0x61, %esi
callq 0x28170
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x280(%rbp)
cmpq $0x0, %rax
jne 0x15500
callq 0x7300
jmp 0x15500
movq -0x280(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x3584b(%rip), %rdi     # 0x4ad60
callq 0x9370
testb $0x1, %al
jne 0x15523
jmp 0x15604
movb $0x1, -0x13a(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x290(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0x288(%rbp)
callq 0x74f0
movq -0x288(%rbp), %rdx
leaq 0x23359(%rip), %rsi     # 0x388b5
leaq -0x138(%rbp), %rdi
callq 0x8940
jmp 0x1556a
movq -0x290(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x283d0
jmp 0x1557f
movq -0x290(%rbp), %rdi
movb $0x0, -0x13a(%rbp)
leaq 0x344ec(%rip), %rsi     # 0x49a80
leaq 0x12e65(%rip), %rdx     # 0x28400
callq 0x74a0
jmp 0x159af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x156c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x155dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x7170
leaq -0x139(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x13a(%rbp)
jne 0x155f3
jmp 0x155ff
movq -0x290(%rbp), %rdi
callq 0x71c0
jmp 0x156c9
movq -0x10(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x2a0(%rbp)
movl $0x10, %edi
callq 0x7270
movq %rax, -0x298(%rbp)
jmp 0x15626
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x2a8(%rbp)
cmpq $0x0, %rax
je 0x15675
movq -0x2a8(%rbp), %rdi
leaq 0x353cc(%rip), %rsi     # 0x4aa28
leaq 0x356fd(%rip), %rdx     # 0x4ad60
xorl %eax, %eax
movl %eax, %ecx
callq 0x7320
movq %rax, -0x2b0(%rbp)
jmp 0x15680
xorl %eax, %eax
movq %rax, -0x2b0(%rbp)
jmp 0x15680
movq -0x298(%rbp), %rdi
movq -0x2b0(%rbp), %rsi
callq 0xd3c0
movq -0x298(%rbp), %rax
movq -0x2a0(%rbp), %rdi
movq %rax, -0x148(%rbp)
leaq -0x148(%rbp), %rsi
callq 0xd2a0
jmp 0x156b6
jmp 0x156b8
leaq -0x118(%rbp), %rdi
callq 0x281b0
jmp 0x158ee
leaq -0x118(%rbp), %rdi
callq 0x281b0
jmp 0x159a6
leaq -0x158(%rbp), %rdi
xorl %esi, %esi
callq 0x26800
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x2b8(%rbp)
cmpq $0x0, %rax
jne 0x15717
callq 0x7300
jmp 0x15717
movq -0x2b8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rax), %rsi
leaq 0x3522c(%rip), %rdi     # 0x4a958
callq 0x9370
testb $0x1, %al
jne 0x1573a
jmp 0x1581b
movb $0x1, -0x17a(%rbp)
movl $0x20, %edi
callq 0x7110
movq %rax, -0x2c8(%rbp)
leaq -0x179(%rbp), %rdi
movq %rdi, -0x2c0(%rbp)
callq 0x74f0
movq -0x2c0(%rbp), %rdx
leaq 0x2317e(%rip), %rsi     # 0x388f1
leaq -0x178(%rbp), %rdi
callq 0x8940
jmp 0x15781
movq -0x2c8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x283d0
jmp 0x15796
movq -0x2c8(%rbp), %rdi
movb $0x0, -0x17a(%rbp)
leaq 0x342d5(%rip), %rsi     # 0x49a80
leaq 0x12c4e(%rip), %rdx     # 0x28400
callq 0x74a0
jmp 0x159af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x158dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x157f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x7170
leaq -0x179(%rbp), %rdi
callq 0x72e0
testb $0x1, -0x17a(%rbp)
jne 0x1580a
jmp 0x15816
movq -0x2c8(%rbp), %rdi
callq 0x71c0
jmp 0x158dd
movq -0x10(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x2d8(%rbp)
movl $0x10, %edi
callq 0x7270
movq %rax, -0x2d0(%rbp)
jmp 0x1583d
movq -0x1b8(%rbp), %rax
movq -0x10(%rbp), %rdi
addq $0x18, %rdi
movslq 0xc(%rax), %rsi
callq 0x8e70
movq (%rax), %rax
movq %rax, -0x2e0(%rbp)
cmpq $0x0, %rax
je 0x1588c
movq -0x2e0(%rbp), %rdi
leaq 0x351b5(%rip), %rsi     # 0x4aa28
leaq 0x350de(%rip), %rdx     # 0x4a958
xorl %eax, %eax
movl %eax, %ecx
callq 0x7320
movq %rax, -0x2e8(%rbp)
jmp 0x15897
xorl %eax, %eax
movq %rax, -0x2e8(%rbp)
jmp 0x15897
movq -0x2d0(%rbp), %rdi
movq -0x2e8(%rbp), %rsi
callq 0xd410
movq -0x2d0(%rbp), %rax
movq -0x2d8(%rbp), %rdi
movq %rax, -0x188(%rbp)
leaq -0x188(%rbp), %rsi
callq 0xd2a0
jmp 0x158cd
jmp 0x158cf
leaq -0x158(%rbp), %rdi
callq 0x26840
jmp 0x158ee
leaq -0x158(%rbp), %rdi
callq 0x26840
jmp 0x159a6
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %ecx
incl %ecx
movl %ecx, 0xb4(%rax)
movq -0x10(%rbp), %rax
addq $0x78, %rax
movq %rax, -0x2f8(%rbp)
leaq -0x1a9(%rbp), %rdi
movq %rdi, -0x2f0(%rbp)
callq 0x74f0
movq -0x2f0(%rbp), %rdx
leaq 0x22ffb(%rip), %rsi     # 0x3892b
leaq -0x1a8(%rbp), %rdi
callq 0x8940
jmp 0x1593e
movq -0x2f8(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x2c4d0
jmp 0x15953
leaq -0x1a8(%rbp), %rdi
callq 0x7170
leaq -0x1a9(%rbp), %rdi
callq 0x72e0
addq $0x300, %rsp            # imm = 0x300
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1599a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x7170
leaq -0x1a9(%rbp), %rdi
callq 0x72e0
movq -0x40(%rbp), %rdi
callq 0x74e0
nop