// File: menhits[P]phplus/src/CppProgram.cpp
// Function: CppProgram::pushFunc(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::shared_ptr<TypeBase>, std::shared_ptr<TypeBase>, std::shared_ptr<TypeBase>)
void CppProgram::pushFunc(const string& name, const string& cppNameHint, Type leftIn, Type rightIn, Type returnType)
{
	if (hasFunc(name))
	{
		throw PhplusError("called CppProgram::pushFunc with function name '"+name+"', which already exists", INTERNAL_ERROR);
	}
	
	globalNames->addPp(name, cppNameHint);
	
	string cppName=globalNames->getCpp(name);
	
	auto funcNames=globalNames->makeChild();
	
	string prototype;
	
	prototype+=getTypeCode(returnType);
	
	prototype+=" "+cppName+"(";
	
	bool keepTuplesTogether=true;
	
	if (keepTuplesTogether)
	{
		if (leftIn->isCreatable())
		{
			prototype+=getTypeCode(leftIn)+" me";
			funcNames->addPp("me");
		}
		
		if (rightIn->isCreatable())
		{
			if (leftIn->isCreatable())
				prototype+=", ";
			
			prototype+=getTypeCode(rightIn)+" in";
			funcNames->addPp("in");
		}
	}
	else
	{
		vector<std::pair<string, string>> args;
		
		if (leftIn->getType()==TypeBase::TUPLE)
		{
			for (auto i: *leftIn->getAllSubTypes())
			{
				args.push_back({getTypeCode(i.type), i.name});
			}
		}
		else if (!leftIn->isCreatable())
		{
			// do nothing
		}
		else
		{
			args.push_back({getTypeCode(leftIn), "me"});
		}
		
		if (rightIn->getType()==TypeBase::TUPLE)
		{
			for (auto i: *rightIn->getAllSubTypes())
			{
				args.push_back({getTypeCode(i.type), i.name});
			}
		}
		else if (!rightIn->isCreatable())
		{
			// do nothing
		}
		else
		{
			args.push_back({getTypeCode(rightIn), "in"});
		}
		
		for (int i=0; i<int(args.size()); i++)
		{
			if (i)
				prototype+=", ";
			
			prototype+=args[i].first;
			
			prototype+=" ";
			
			funcNames->addPp(args[i].second, args[i].second);
			
			prototype+=funcNames->getCpp(args[i].second);
		}
	}
	
	prototype+=")";
	
	activeFunc=CppFunc(new CppFuncBase(prototype, funcNames, returnType->isCreatable()));
	funcs[name]=activeFunc;
	funcStack.push_back(name);
}

// Assembly:
subq $0x6a8, %rsp            # imm = 0x6A8
movq %rcx, 0x110(%rsp)
movq %r8, 0x118(%rsp)
movq %r9, 0x120(%rsp)
movq %rdi, 0x6a0(%rsp)
movq %rsi, 0x698(%rsp)
movq %rdx, 0x690(%rsp)
movq %rcx, 0x688(%rsp)
movq %r8, 0x680(%rsp)
movq %r9, 0x678(%rsp)
movq 0x6a0(%rsp), %rdi
movq %rdi, 0x128(%rsp)
movq 0x698(%rsp), %rsi
callq 0x2a8a0
testb $0x1, %al
jne 0x2af45
jmp 0x2b085
movb $0x1, 0x617(%rsp)
movl $0x38, %edi
callq 0xb1f0
movq %rax, 0x108(%rsp)
movq 0x698(%rsp), %rdx
leaq 0xa6ed9(%rip), %rsi     # 0xd1e47
leaq 0x638(%rsp), %rdi
callq 0xfab0
jmp 0x2af7d
leaq 0xa6a3c(%rip), %rdx     # 0xd19c0
leaq 0x658(%rsp), %rdi
leaq 0x638(%rsp), %rsi
callq 0xfa60
jmp 0x2af9b
xorl %eax, %eax
movl %eax, %esi
leaq 0x618(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0xfbe0
movq 0x108(%rsp), %rdi
movq 0x100(%rsp), %rcx
leaq 0x658(%rsp), %rsi
movl $0x3, %edx
callq 0x35600
jmp 0x2afd8
movq 0x108(%rsp), %rdi
movb $0x0, 0x617(%rsp)
leaq 0xea5d9(%rip), %rsi     # 0x1155c8
leaq -0x10986(%rip), %rdx    # 0x1a670
callq 0xb640
jmp 0x2c24f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b067
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b05a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x618(%rsp), %rdi
callq 0xfc00
leaq 0x658(%rsp), %rdi
callq 0xb6e8
leaq 0x638(%rsp), %rdi
callq 0xb6e8
testb $0x1, 0x617(%rsp)
jne 0x2b073
jmp 0x2b080
movq 0x108(%rsp), %rdi
callq 0xb2d0
jmp 0x2c242
movq 0x128(%rsp), %rdi
addq $0xf8, %rdi
movq %rdi, 0xf8(%rsp)
callq 0x2d6b0
movq %rax, %rdi
movq 0x698(%rsp), %rsi
movq 0x690(%rsp), %rdx
callq 0x232f0
movq 0xf8(%rsp), %rdi
callq 0x2d6b0
movq %rax, %rsi
movq 0x698(%rsp), %rdx
leaq 0x5f0(%rsp), %rdi
callq 0x23eb0
movq 0xf8(%rsp), %rdi
callq 0x2d6b0
movq %rax, %rsi
leaq 0x5e0(%rsp), %rdi
callq 0x23210
jmp 0x2b0fd
leaq 0x5c0(%rsp), %rdi
callq 0xb4e0
movq 0x120(%rsp), %rsi
leaq 0x590(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x1a920
movq 0x128(%rsp), %rsi
movq 0xf0(%rsp), %rdx
leaq 0x5a0(%rsp), %rdi
callq 0x285b0
jmp 0x2b146
leaq 0x5c0(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0xb470
jmp 0x2b15d
leaq 0x5a0(%rsp), %rdi
callq 0xb6e8
leaq 0x590(%rsp), %rdi
callq 0x1a950
leaq 0xa68ee(%rip), %rsi     # 0xd1a6c
leaq 0x550(%rsp), %rdi
leaq 0x5f0(%rsp), %rdx
callq 0xfab0
jmp 0x2b195
leaq 0xac04c(%rip), %rdx     # 0xd71e8
leaq 0x570(%rsp), %rdi
leaq 0x550(%rsp), %rsi
callq 0xfa60
jmp 0x2b1b3
leaq 0x5c0(%rsp), %rdi
leaq 0x570(%rsp), %rsi
callq 0xb470
jmp 0x2b1ca
leaq 0x570(%rsp), %rdi
callq 0xb6e8
leaq 0x550(%rsp), %rdi
callq 0xb6e8
movb $0x1, 0x54f(%rsp)
testb $0x1, 0x54f(%rsp)
je 0x2b80e
movq 0x110(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, 0xef(%rsp)
jmp 0x2b21c
movb 0xef(%rsp), %al
testb $0x1, %al
jne 0x2b22c
jmp 0x2b540
movq 0x110(%rsp), %rsi
leaq 0x4f8(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x1a920
movq 0x128(%rsp), %rsi
movq 0xe0(%rsp), %rdx
leaq 0x508(%rsp), %rdi
callq 0x285b0
jmp 0x2b268
leaq 0xa6c09(%rip), %rdx     # 0xd1e78
leaq 0x528(%rsp), %rdi
leaq 0x508(%rsp), %rsi
callq 0xfa60
jmp 0x2b286
leaq 0x5c0(%rsp), %rdi
leaq 0x528(%rsp), %rsi
callq 0xb470
jmp 0x2b29d
leaq 0x528(%rsp), %rdi
callq 0xb6e8
leaq 0x508(%rsp), %rdi
callq 0xb6e8
leaq 0x4f8(%rsp), %rdi
callq 0x1a950
leaq 0x5e0(%rsp), %rdi
callq 0x2d6b0
movq %rax, 0xd0(%rsp)
leaq 0x4d7(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0xb690
movq 0xd8(%rsp), %rdx
leaq 0xa6b7c(%rip), %rsi     # 0xd1e79
leaq 0x4d8(%rsp), %rdi
callq 0xb4c0
jmp 0x2b30c
leaq 0x4af(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0xb690
movq 0xc8(%rsp), %rdx
leaq 0xa65e5(%rip), %rsi     # 0xd1915
leaq 0x4b0(%rsp), %rdi
callq 0xb4c0
jmp 0x2b33f
movq 0xd0(%rsp), %rdi
leaq 0x4d8(%rsp), %rsi
leaq 0x4b0(%rsp), %rdx
callq 0x232f0
jmp 0x2b35e
leaq 0x4b0(%rsp), %rdi
callq 0xb6e8
leaq 0x4af(%rsp), %rdi
callq 0xb3f0
leaq 0x4d8(%rsp), %rdi
callq 0xb6e8
leaq 0x4d7(%rsp), %rdi
callq 0xb3f0
jmp 0x2b540
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2c235
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b3e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x5a0(%rsp), %rdi
callq 0xb6e8
leaq 0x590(%rsp), %rdi
callq 0x1a950
jmp 0x2c21b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2c21b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b449
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x570(%rsp), %rdi
callq 0xb6e8
leaq 0x550(%rsp), %rdi
callq 0xb6e8
jmp 0x2c21b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b4b5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b4a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x528(%rsp), %rdi
callq 0xb6e8
leaq 0x508(%rsp), %rdi
callq 0xb6e8
leaq 0x4f8(%rsp), %rdi
callq 0x1a950
jmp 0x2c21b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b52e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b514
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x4b0(%rsp), %rdi
callq 0xb6e8
leaq 0x4af(%rsp), %rdi
callq 0xb3f0
leaq 0x4d8(%rsp), %rdi
callq 0xb6e8
leaq 0x4d7(%rsp), %rdi
callq 0xb3f0
jmp 0x2c21b
movq 0x118(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, 0xc7(%rsp)
jmp 0x2b562
movb 0xc7(%rsp), %al
testb $0x1, %al
jne 0x2b572
jmp 0x2b809
movq 0x110(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, 0xc6(%rsp)
jmp 0x2b594
movb 0xc6(%rsp), %al
testb $0x1, %al
jne 0x2b5a1
jmp 0x2b5b9
leaq 0xaa142(%rip), %rsi     # 0xd56ea
leaq 0x5c0(%rsp), %rdi
callq 0xb360
jmp 0x2b5b7
jmp 0x2b5b9
movq 0x118(%rsp), %rsi
leaq 0x458(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x1a920
movq 0x128(%rsp), %rsi
movq 0xb8(%rsp), %rdx
leaq 0x468(%rsp), %rdi
callq 0x285b0
jmp 0x2b5f5
leaq 0xa6880(%rip), %rdx     # 0xd1e7c
leaq 0x488(%rsp), %rdi
leaq 0x468(%rsp), %rsi
callq 0xfa60
jmp 0x2b613
leaq 0x5c0(%rsp), %rdi
leaq 0x488(%rsp), %rsi
callq 0xb470
jmp 0x2b62a
leaq 0x488(%rsp), %rdi
callq 0xb6e8
leaq 0x468(%rsp), %rdi
callq 0xb6e8
leaq 0x458(%rsp), %rdi
callq 0x1a950
leaq 0x5e0(%rsp), %rdi
callq 0x2d6b0
movq %rax, 0xa8(%rsp)
leaq 0x437(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0xb690
movq 0xb0(%rsp), %rdx
leaq 0xa67f3(%rip), %rsi     # 0xd1e7d
leaq 0x438(%rsp), %rdi
callq 0xb4c0
jmp 0x2b699
leaq 0x40f(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0xb690
movq 0xa0(%rsp), %rdx
leaq 0xa6258(%rip), %rsi     # 0xd1915
leaq 0x410(%rsp), %rdi
callq 0xb4c0
jmp 0x2b6cc
movq 0xa8(%rsp), %rdi
leaq 0x438(%rsp), %rsi
leaq 0x410(%rsp), %rdx
callq 0x232f0
jmp 0x2b6eb
leaq 0x410(%rsp), %rdi
callq 0xb6e8
leaq 0x40f(%rsp), %rdi
callq 0xb3f0
leaq 0x438(%rsp), %rdi
callq 0xb6e8
leaq 0x437(%rsp), %rdi
callq 0xb3f0
jmp 0x2b809
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b77e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b771
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x488(%rsp), %rdi
callq 0xb6e8
leaq 0x468(%rsp), %rdi
callq 0xb6e8
leaq 0x458(%rsp), %rdi
callq 0x1a950
jmp 0x2c21b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b7f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2b7dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x410(%rsp), %rdi
callq 0xb6e8
leaq 0x40f(%rsp), %rdi
callq 0xb3f0
leaq 0x438(%rsp), %rdi
callq 0xb6e8
leaq 0x437(%rsp), %rdi
callq 0xb3f0
jmp 0x2c21b
jmp 0x2c03c
leaq 0x3f0(%rsp), %rdi
callq 0x2e3c0
movq 0x110(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x40(%rax), %rax
callq *%rax
movl %eax, 0x9c(%rsp)
jmp 0x2b83d
movl 0x9c(%rsp), %eax
cmpl $0x7, %eax
jne 0x2ba36
movq 0x110(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x58(%rax), %rax
callq *%rax
movq %rax, 0x90(%rsp)
jmp 0x2b870
movq 0x90(%rsp), %rax
movq %rax, 0x3e8(%rsp)
movq 0x3e8(%rsp), %rdi
callq 0x2df80
movq %rax, 0x3e0(%rsp)
movq 0x3e8(%rsp), %rdi
callq 0x2dfb0
movq %rax, 0x3d8(%rsp)
leaq 0x3e0(%rsp), %rdi
leaq 0x3d8(%rsp), %rsi
callq 0x2dfe0
testb $0x1, %al
jne 0x2b8c8
jmp 0x2ba31
leaq 0x3e0(%rsp), %rdi
callq 0x2e020
movq %rax, %rsi
leaq 0x3a8(%rsp), %rdi
callq 0x2e030
jmp 0x2b8e7
leaq 0x3c8(%rsp), %rsi
leaq 0x338(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x1a920
movq 0x128(%rsp), %rsi
movq 0x88(%rsp), %rdx
leaq 0x348(%rsp), %rdi
callq 0x285b0
jmp 0x2b923
leaq 0x368(%rsp), %rdi
leaq 0x348(%rsp), %rsi
leaq 0x3a8(%rsp), %rdx
callq 0x2e400
jmp 0x2b942
leaq 0x3f0(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x2e3d0
jmp 0x2b959
leaq 0x368(%rsp), %rdi
callq 0x2e470
leaq 0x348(%rsp), %rdi
callq 0xb6e8
leaq 0x338(%rsp), %rdi
callq 0x1a950
leaq 0x3a8(%rsp), %rdi
callq 0x1e980
leaq 0x3e0(%rsp), %rdi
callq 0x2e0c0
jmp 0x2b8aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2c02a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2ba12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2ba05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x368(%rsp), %rdi
callq 0x2e470
leaq 0x348(%rsp), %rdi
callq 0xb6e8
leaq 0x338(%rsp), %rdi
callq 0x1a950
leaq 0x3a8(%rsp), %rdi
callq 0x1e980
jmp 0x2c02a
jmp 0x2bb6c
movq 0x110(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, 0x87(%rsp)
jmp 0x2ba58
movb 0x87(%rsp), %al
testb $0x1, %al
jne 0x2ba6a
jmp 0x2ba65
jmp 0x2bb6a
movq 0x110(%rsp), %rsi
leaq 0x2c8(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x1a920
movq 0x128(%rsp), %rsi
movq 0x78(%rsp), %rdx
leaq 0x2d8(%rsp), %rdi
callq 0x285b0
jmp 0x2baa0
leaq 0xa63d2(%rip), %rdx     # 0xd1e79
leaq 0x2f8(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
callq 0x2e4a0
jmp 0x2babe
leaq 0x3f0(%rsp), %rdi
leaq 0x2f8(%rsp), %rsi
callq 0x2e3d0
jmp 0x2bad5
leaq 0x2f8(%rsp), %rdi
callq 0x2e470
leaq 0x2d8(%rsp), %rdi
callq 0xb6e8
leaq 0x2c8(%rsp), %rdi
callq 0x1a950
jmp 0x2bb6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2bb58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2bb4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x2f8(%rsp), %rdi
callq 0x2e470
leaq 0x2d8(%rsp), %rdi
callq 0xb6e8
leaq 0x2c8(%rsp), %rdi
callq 0x1a950
jmp 0x2c02a
jmp 0x2bb6c
movq 0x118(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x40(%rax), %rax
callq *%rax
movl %eax, 0x74(%rsp)
jmp 0x2bb8b
movl 0x74(%rsp), %eax
cmpl $0x7, %eax
jne 0x2bd5c
movq 0x118(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x58(%rax), %rax
callq *%rax
movq %rax, 0x68(%rsp)
jmp 0x2bbb8
movq 0x68(%rsp), %rax
movq %rax, 0x2c0(%rsp)
movq 0x2c0(%rsp), %rdi
callq 0x2df80
movq %rax, 0x2b8(%rsp)
movq 0x2c0(%rsp), %rdi
callq 0x2dfb0
movq %rax, 0x2b0(%rsp)
leaq 0x2b8(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0x2dfe0
testb $0x1, %al
jne 0x2bc0d
jmp 0x2bd57
leaq 0x2b8(%rsp), %rdi
callq 0x2e020
movq %rax, %rsi
leaq 0x280(%rsp), %rdi
callq 0x2e030
jmp 0x2bc2c
leaq 0x2a0(%rsp), %rsi
leaq 0x210(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x1a920
movq 0x128(%rsp), %rsi
movq 0x60(%rsp), %rdx
leaq 0x220(%rsp), %rdi
callq 0x285b0
jmp 0x2bc62
leaq 0x240(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x280(%rsp), %rdx
callq 0x2e400
jmp 0x2bc81
leaq 0x3f0(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x2e3d0
jmp 0x2bc98
leaq 0x240(%rsp), %rdi
callq 0x2e470
leaq 0x220(%rsp), %rdi
callq 0xb6e8
leaq 0x210(%rsp), %rdi
callq 0x1a950
leaq 0x280(%rsp), %rdi
callq 0x1e980
leaq 0x2b8(%rsp), %rdi
callq 0x2e0c0
jmp 0x2bbef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2bd38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2bd2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x240(%rsp), %rdi
callq 0x2e470
leaq 0x220(%rsp), %rdi
callq 0xb6e8
leaq 0x210(%rsp), %rdi
callq 0x1a950
leaq 0x280(%rsp), %rdi
callq 0x1e980
jmp 0x2c02a
jmp 0x2be8c
movq 0x118(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, 0x5f(%rsp)
jmp 0x2bd7b
movb 0x5f(%rsp), %al
testb $0x1, %al
jne 0x2bd8a
jmp 0x2bd85
jmp 0x2be8a
movq 0x118(%rsp), %rsi
leaq 0x1a0(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x1a920
movq 0x128(%rsp), %rsi
movq 0x50(%rsp), %rdx
leaq 0x1b0(%rsp), %rdi
callq 0x285b0
jmp 0x2bdc0
leaq 0xa60b6(%rip), %rdx     # 0xd1e7d
leaq 0x1d0(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x2e4a0
jmp 0x2bdde
leaq 0x3f0(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x2e3d0
jmp 0x2bdf5
leaq 0x1d0(%rsp), %rdi
callq 0x2e470
leaq 0x1b0(%rsp), %rdi
callq 0xb6e8
leaq 0x1a0(%rsp), %rdi
callq 0x1a950
jmp 0x2be8a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2be78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2be6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x1d0(%rsp), %rdi
callq 0x2e470
leaq 0x1b0(%rsp), %rdi
callq 0xb6e8
leaq 0x1a0(%rsp), %rdi
callq 0x1a950
jmp 0x2c02a
jmp 0x2be8c
movl $0x0, 0x19c(%rsp)
movl 0x19c(%rsp), %eax
movl %eax, 0x4c(%rsp)
leaq 0x3f0(%rsp), %rdi
callq 0x2e200
movq %rax, %rcx
movl 0x4c(%rsp), %eax
cmpl %ecx, %eax
jge 0x2c01b
cmpl $0x0, 0x19c(%rsp)
je 0x2bee0
leaq 0xa981b(%rip), %rsi     # 0xd56ea
leaq 0x5c0(%rsp), %rdi
callq 0xb360
jmp 0x2bede
jmp 0x2bee0
movslq 0x19c(%rsp), %rsi
leaq 0x3f0(%rsp), %rdi
callq 0x2e220
movq %rax, %rsi
leaq 0x5c0(%rsp), %rdi
callq 0xb470
jmp 0x2bf07
leaq 0xa5b5e(%rip), %rsi     # 0xd1a6c
leaq 0x5c0(%rsp), %rdi
callq 0xb360
jmp 0x2bf1d
leaq 0x5e0(%rsp), %rdi
callq 0x2d6b0
movq %rax, 0x38(%rsp)
movslq 0x19c(%rsp), %rsi
leaq 0x3f0(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x2e220
movq 0x30(%rsp), %rdi
addq $0x20, %rax
movq %rax, 0x40(%rsp)
movslq 0x19c(%rsp), %rsi
callq 0x2e220
movq 0x38(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq %rax, %rdx
addq $0x20, %rdx
callq 0x232f0
jmp 0x2bf7c
leaq 0x5e0(%rsp), %rdi
callq 0x2d6b0
movq %rax, 0x28(%rsp)
movslq 0x19c(%rsp), %rsi
leaq 0x3f0(%rsp), %rdi
callq 0x2e220
movq 0x28(%rsp), %rsi
movq %rax, %rdx
addq $0x20, %rdx
leaq 0x178(%rsp), %rdi
callq 0x23eb0
jmp 0x2bfbe
leaq 0x5c0(%rsp), %rdi
leaq 0x178(%rsp), %rsi
callq 0xb470
jmp 0x2bfd5
leaq 0x178(%rsp), %rdi
callq 0xb6e8
movl 0x19c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x19c(%rsp)
jmp 0x2be97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x178(%rsp), %rdi
callq 0xb6e8
jmp 0x2c02a
leaq 0x3f0(%rsp), %rdi
callq 0x2e540
jmp 0x2c03c
leaq 0x3f0(%rsp), %rdi
callq 0x2e540
jmp 0x2c21b
leaq 0xa9cae(%rip), %rsi     # 0xd5cf1
leaq 0x5c0(%rsp), %rdi
callq 0xb360
jmp 0x2c052
movl $0xb0, %edi
callq 0xb390
movq %rax, 0x20(%rsp)
jmp 0x2c063
movb $0x1, 0x137(%rsp)
leaq 0x148(%rsp), %rdi
leaq 0x5c0(%rsp), %rsi
callq 0xb1a0
jmp 0x2c082
leaq 0x138(%rsp), %rdi
leaq 0x5e0(%rsp), %rsi
callq 0x2da70
movq 0x120(%rsp), %rdi
callq 0x1a660
movq %rax, %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, 0x1f(%rsp)
jmp 0x2c0b6
movq 0x20(%rsp), %rdi
movb 0x1f(%rsp), %al
movzbl %al, %ecx
andl $0x1, %ecx
leaq 0x148(%rsp), %rsi
leaq 0x138(%rsp), %rdx
callq 0x24090
jmp 0x2c0dc
movq 0x20(%rsp), %rsi
movb $0x0, 0x137(%rsp)
leaq 0x168(%rsp), %rdi
callq 0x2e270
jmp 0x2c0f8
movq 0x128(%rsp), %rdi
addq $0xa0, %rdi
movq %rdi, (%rsp)
leaq 0x168(%rsp), %rsi
movq %rsi, 0x8(%rsp)
callq 0x2e5a0
movq 0x8(%rsp), %rdi
callq 0x2dc60
leaq 0x138(%rsp), %rdi
callq 0x2d6c0
leaq 0x148(%rsp), %rdi
callq 0xb6e8
movq 0x128(%rsp), %rdi
addq $0xc8, %rdi
movq 0x698(%rsp), %rsi
callq 0x2e2a0
movq %rax, 0x10(%rsp)
jmp 0x2c164
movq (%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x2e390
movq 0x128(%rsp), %rdi
addq $0xb0, %rdi
movq 0x698(%rsp), %rsi
callq 0x2e5d0
jmp 0x2c190
leaq 0x5c0(%rsp), %rdi
callq 0xb6e8
leaq 0x5e0(%rsp), %rdi
callq 0x2d6c0
leaq 0x5f0(%rsp), %rdi
callq 0xb6e8
addq $0x6a8, %rsp            # imm = 0x6A8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
jmp 0x2c203
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x630(%rsp)
movl %eax, 0x62c(%rsp)
leaq 0x138(%rsp), %rdi
callq 0x2d6c0
leaq 0x148(%rsp), %rdi
callq 0xb6e8
testb $0x1, 0x137(%rsp)
jne 0x2c20f
jmp 0x2c219
movq 0x20(%rsp), %rdi
callq 0xb350
jmp 0x2c21b
leaq 0x5c0(%rsp), %rdi
callq 0xb6e8
leaq 0x5e0(%rsp), %rdi
callq 0x2d6c0
leaq 0x5f0(%rsp), %rdi
callq 0xb6e8
movq 0x630(%rsp), %rdi
callq 0xb680
nop