// File: /workspace/github_cpp_makefile_star2_O2/ChnMasterOG[P]KmerGO2/kmergo/kmer_filtering.cpp
// Function: categorical_feature_filtering(unsigned short, std::vector<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>>>>, KmerGO_parameters)
void categorical_feature_filtering(uint16_t Nprocess, std::vector<std::string> files_vec, KmerGO_parameters p)
{
	std::string line, kmer;
	std::string input_file_name = files_vec[Nprocess];
	std::string onput_file_name_l = joinPath(p.features_path, "categorical_l_" + std::to_string(Nprocess) + ".txt");
	std::string onput_file_name_n = joinPath(p.features_path, "categorical_n_" + std::to_string(Nprocess) + ".txt");
	std::ifstream input_file(input_file_name);
	std::ofstream output_file_l(onput_file_name_l);
	std::ofstream output_file_n(onput_file_name_n);
	std::vector<short> sample_label;	// -1 inexistence, 0 groupA, 1 groupB
	std::string::size_type position;

	/* read head text and set labels */
	std::getline(input_file, line);
	mtx.lock();	// mutex
	progress += line.size() + 1;	// update progress
	mtx.unlock();
	output_file_l << line << "\tASS\tLabel\n";	// write logical file head text
	output_file_n << line << "\tASS-l\tP\tASS-n\tLabel\n";	// write numerical file head text
	position = line.find("\t");
	line = line.substr(position + 1);	// remove string "k-mer"
	position = line.find("\t");
	while (position != line.npos)	// split groupA and groupB
	{
		std::string sample_name = line.substr(0, position);
		if (p.trait_information_map.find(sample_name) != p.trait_information_map.end())
		{
			if (p.trait_information_map[sample_name].compare(p.groupA_name) == 0) sample_label.push_back(0);
			else sample_label.push_back(1);
		}
		else sample_label.push_back(-1);
		line = line.substr(position + 1);
		position = line.find("\t");
	}
	if (p.trait_information_map.find(line) != p.trait_information_map.end())
	{
		if (p.trait_information_map[line].compare(p.groupA_name) == 0) sample_label.push_back(0);
		else sample_label.push_back(1);
	}
	else sample_label.push_back(-1);

	/* filtering */
	while (std::getline(input_file, line))
	{
		std::string src_line(line);
		position = line.find("\t");
		line = line.substr(position + 1);	// remove first k-mer
		position = line.find("\t");
		std::vector<float> group1, group2;
		int cnt = 0, tp = 0, tn = 0;
		std::string judge_label;
		while (position != line.npos)
		{
			std::string value_str = line.substr(0, position);
			float value_float = std::stof(value_str);
			/* add values to groups */
			if (sample_label[cnt] == 0)	// is groupA
			{
				group1.push_back(value_float);
				if (value_float > 0) ++tp;
			}
			else if(sample_label[cnt] == 1)	// is groupB
			{
				group2.push_back(value_float);
				if (value_float == 0) ++tn;
			}
			line = line.substr(position + 1);
			position = line.find("\t");
			++cnt;
		}
		/* calculation */
		float assL = ((float)tp / group1.size() + (float)tn / group2.size()) / 2;	// ass_l
		if (assL > 0.5) judge_label = p.groupA_name;
		else
		{
			judge_label = p.groupB_name;
			assL = 1 - assL;
		}
		if (assL >= p.assl)	// logical ASS
		{
			output_file_l << src_line << '\t' << std::to_string(assL) << '\t' << judge_label << '\n';
		}
		else	// numerical ASS
		{
			float pValue = ranksums(group1, group2);
			if (pValue < p.p_value)
			{
				std::vector<Logistic_Data> dataSet;
				for (float i : group1)
				{
					dataSet.push_back(Logistic_Data(std::vector<float>{i}, 0));	// 1 feature for group1
				}
				for (float i : group2)
				{
					dataSet.push_back(Logistic_Data(std::vector<float>{i}, 1));	// 1 feature for group2
				}
				std::vector<Logistic_Data> testdataSet(dataSet);
				Logistic model(dataSet);
				model.logisticRegression();	// fit the logistics model
				model.predictClass(testdataSet);
				/* calculate the confusion matrix */
				tp = tn = 0;
				for (unsigned int i = 0; i < group1.size(); i++)	// caculate tp
				{
					if (testdataSet[i].cls == dataSet[i].cls) ++tp;
				}
				for (unsigned int i = 0; i < group1.size(); i++)	// caculate tn
				{
					if (testdataSet[i].cls == dataSet[i].cls) ++tn;
				}
				float assN = ((float)tp / group1.size() + (float)tn / group2.size()) / 2;	// ass_n
				if (assN >= p.assn)
				{
					output_file_n << src_line << '\t' << std::to_string(assL) << '\t' << pValue <<
						'\t' << assN << '\t' << judge_label << '\n';
				}
			}
		}
		mtx.lock();
		progress += src_line.size() + 1;	// update progress
		mtx.unlock();
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x8a8, %rsp            # imm = 0x8A8
movq %rdx, %r12
movl %edi, %ebp
leaq 0xa8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0x290(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
movl %edi, %eax
shll $0x5, %eax
addq (%rsi), %rax
leaq 0x260(%rsp), %rdi
movq %rax, %rsi
callq 0x486820
leaq 0x80(%r12), %rbx
leaq 0x220(%rsp), %rdi
movq %rbx, %rsi
callq 0x486820
movzwl %bp, %ebp
leaq 0x2a0(%rsp), %rdi
movl %ebp, %esi
callq 0x4060ae
leaq 0x192725(%rip), %rsi    # 0x59c4e0
leaq 0x4a0(%rsp), %rdi
leaq 0x2a0(%rsp), %rdx
callq 0x406146
leaq 0x1924d5(%rip), %rdx    # 0x59c2ac
leaq 0x200(%rsp), %rdi
leaq 0x4a0(%rsp), %rsi
callq 0x405f45
leaq 0x240(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x200(%rsp), %rdx
callq 0x405fcb
leaq 0x200(%rsp), %rdi
callq 0x484210
leaq 0x4a0(%rsp), %rdi
callq 0x484210
leaq 0x2a0(%rsp), %rdi
callq 0x484210
leaq 0x220(%rsp), %rdi
callq 0x484210
leaq 0x1c0(%rsp), %rdi
movq %rbx, %rsi
callq 0x486820
leaq 0x2a0(%rsp), %rdi
movl %ebp, %esi
callq 0x4060ae
leaq 0x19268c(%rip), %rsi    # 0x59c4ef
leaq 0x4a0(%rsp), %rdi
leaq 0x2a0(%rsp), %rdx
callq 0x406146
leaq 0x19242d(%rip), %rdx    # 0x59c2ac
leaq 0x1a0(%rsp), %rdi
leaq 0x4a0(%rsp), %rsi
callq 0x405f45
leaq 0x1e0(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
leaq 0x1a0(%rsp), %rdx
callq 0x405fcb
leaq 0x1a0(%rsp), %rdi
callq 0x484210
leaq 0x4a0(%rsp), %rdi
callq 0x484210
leaq 0x2a0(%rsp), %rdi
callq 0x484210
leaq 0x1c0(%rsp), %rdi
callq 0x484210
leaq 0x4a0(%rsp), %rdi
leaq 0x260(%rsp), %rsi
pushq $0x8
popq %rdx
callq 0x45a300
leaq 0x2a0(%rsp), %rdi
leaq 0x240(%rsp), %rsi
pushq $0x10
popq %rdx
callq 0x45a470
leaq 0x6a8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
pushq $0x10
popq %rdx
callq 0x45a470
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
andq $0x0, 0x90(%rsp)
leaq 0x4a0(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x486ad0
leaq 0x20c7cb(%rip), %rdi    # 0x616728
callq 0x407f5e
leaq 0x98(%rsp), %rbx
movq 0x8(%rbx), %rax
movq 0x20c7a3(%rip), %rcx    # 0x616718
addq %rcx, %rax
incq %rax
movq %rax, 0x20c796(%rip)    # 0x616718
leaq 0x20c79f(%rip), %rdi    # 0x616728
callq 0x4f57b0
leaq 0x2a0(%rsp), %rdi
movq %rbx, %rsi
callq 0x486ac0
leaq 0x192559(%rip), %rsi    # 0x59c4fe
movq %rax, %rdi
callq 0x47de40
leaq 0x6a8(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x486ac0
leaq 0x192541(%rip), %rsi    # 0x59c50a
movq %rax, %rdi
callq 0x47de40
leaq 0x192548(%rip), %rsi    # 0x59c520
leaq 0x98(%rsp), %rbx
movq %rbx, %rdi
xorl %edx, %edx
callq 0x485d70
leaq 0x1(%rax), %rdx
leaq 0x118(%rsp), %rdi
pushq $-0x1
popq %rcx
movq %rbx, %rsi
callq 0x486a40
leaq 0x98(%rsp), %rbx
leaq 0x118(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x484260
movq %r14, %rdi
callq 0x484210
leaq 0x1924f5(%rip), %rsi    # 0x59c520
movq %rbx, %rdi
xorl %edx, %edx
callq 0x485d70
movq %rax, %r13
leaq 0x158(%r12), %r15
movq %r12, %rax
addq $0x160, %r12            # imm = 0x160
movq %rax, 0x8(%rsp)
addq $0x108, %rax            # imm = 0x108
movq %rax, 0x70(%rsp)
leaq 0xd8(%rsp), %rbp
cmpq $-0x1, %r13
je 0x40a140
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
movq %r13, %rcx
callq 0x486a40
movq %r15, %rdi
movq %r14, %rsi
callq 0x40bd98
cmpq %r12, %rax
je 0x40a0c4
movq %r15, %rdi
movq %r14, %rsi
callq 0x4081f6
movq %rax, %rdi
movq 0x70(%rsp), %rsi
callq 0x486270
testl %eax, %eax
je 0x40a0df
movw $0x1, 0xd8(%rsp)
leaq 0x80(%rsp), %rdi
movq %rbp, %rsi
callq 0x40bdd6
jmp 0x40a0f8
orw $-0x1, 0xd8(%rsp)
leaq 0x80(%rsp), %rdi
movq %rbp, %rsi
callq 0x40bdd6
jmp 0x40a0f8
andw $0x0, 0xd8(%rsp)
leaq 0x80(%rsp), %rdi
movq %rbp, %rsi
callq 0x40bdd6
incq %r13
movq %rbp, %rdi
movq %rbx, %rsi
movq %r13, %rdx
pushq $-0x1
popq %rcx
callq 0x486a40
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x484260
movq %rbp, %rdi
callq 0x484210
movq %rbx, %rdi
leaq 0x1923f7(%rip), %rsi    # 0x59c520
xorl %edx, %edx
callq 0x485d70
movq %rax, %r13
movq %r14, %rdi
callq 0x484210
jmp 0x40a062
leaq 0x98(%rsp), %rsi
movq %r15, %rdi
callq 0x40bd98
cmpq %r12, %rax
je 0x40a197
leaq 0x98(%rsp), %rsi
movq %r15, %rdi
callq 0x4081f6
movq 0x8(%rsp), %rbx
movq %rax, %rdi
movq 0x70(%rsp), %rsi
callq 0x486270
leaq 0x118(%rsp), %rsi
testl %eax, %eax
je 0x40a1b7
movw $0x1, (%rsi)
leaq 0x80(%rsp), %rdi
callq 0x40bdd6
jmp 0x40a1c8
leaq 0x118(%rsp), %rsi
orw $-0x1, (%rsi)
leaq 0x80(%rsp), %rdi
callq 0x40bdd6
movq 0x8(%rsp), %rbx
jmp 0x40a1c8
andw $0x0, (%rsi)
leaq 0x80(%rsp), %rdi
callq 0x40bdd6
leaq 0x130(%rbx), %rax
movq %rax, 0x110(%rsp)
leaq 0x98(%rsp), %r13
leaq 0x118(%rsp), %r12
leaq 0x180(%rsp), %rbp
leaq 0x4a0(%rsp), %rdi
movq %r13, %rsi
callq 0x486ad0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x40a81f
leaq 0xd8(%rsp), %rdi
movq %r13, %rsi
callq 0x486820
movq %r13, %rdi
leaq 0x1922f5(%rip), %r14    # 0x59c520
movq %r14, %rsi
xorl %edx, %edx
callq 0x485d70
leaq 0x1(%rax), %rdx
movq %r12, %rdi
movq %r13, %rsi
pushq $-0x1
popq %rcx
callq 0x486a40
movq %r13, %rdi
movq %r12, %rsi
callq 0x484260
movq %r12, %rdi
callq 0x484210
xorl %ebx, %ebx
movq %r13, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x485d70
movq %rax, %r14
andq $0x0, 0x60(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
andq $0x0, 0x40(%rsp)
leaq 0xc8(%rsp), %rax
movq %rax, 0xb8(%rsp)
andq $0x0, 0xc0(%rsp)
movaps %xmm0, 0x30(%rsp)
movb $0x0, 0xc8(%rsp)
xorl %r15d, %r15d
movl $0x0, 0x4(%rsp)
cmpq $-0x1, %r14
je 0x40a383
movq %r12, %rdi
movq %r13, %rsi
xorl %edx, %edx
movq %r14, %rcx
callq 0x486a40
movq %r12, %rdi
xorl %esi, %esi
callq 0x40b89a
movss %xmm0, 0x10(%rsp)
movq 0x80(%rsp), %rax
movzwl (%rax,%rbx), %eax
cmpl $0x1, %eax
je 0x40a314
testl %eax, %eax
jne 0x40a337
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x40b8b4
movss 0x10(%rsp), %xmm0
ucomiss 0x1921bc(%rip), %xmm0   # 0x59c4c8
jbe 0x40a337
incl 0x4(%rsp)
jmp 0x40a337
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x40b8b4
movss 0x10(%rsp), %xmm0
ucomiss 0x192198(%rip), %xmm0   # 0x59c4c8
jne 0x40a337
jp 0x40a337
incl %r15d
incq %r14
movq %rbp, %rdi
movq %r13, %rsi
movq %r14, %rdx
pushq $-0x1
popq %rcx
callq 0x486a40
movq %r13, %rdi
movq %rbp, %rsi
callq 0x484260
movq %rbp, %rdi
callq 0x484210
movq %r13, %rdi
leaq 0x1921b8(%rip), %rsi    # 0x59c520
xorl %edx, %edx
callq 0x485d70
movq %rax, %r14
movq %r12, %rdi
callq 0x484210
addq $0x2, %rbx
jmp 0x40a2b1
movq 0x58(%rsp), %rax
subq 0x50(%rsp), %rax
sarq $0x2, %rax
js 0x40a39a
cvtsi2ss %rax, %xmm0
jmp 0x40a3af
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
movq 0x38(%rsp), %rax
subq 0x30(%rsp), %rax
sarq $0x2, %rax
js 0x40a3c6
cvtsi2ss %rax, %xmm1
jmp 0x40a3db
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm1
addss %xmm1, %xmm1
cvtsi2ssl 0x4(%rsp), %xmm2
divss %xmm0, %xmm2
cvtsi2ss %r15d, %xmm3
divss %xmm1, %xmm3
addss %xmm2, %xmm3
movss 0x1920c6(%rip), %xmm0   # 0x59c4c0
mulss %xmm0, %xmm3
movss %xmm3, 0x4(%rsp)
ucomiss %xmm0, %xmm3
jbe 0x40a41d
leaq 0xb8(%rsp), %rdi
movq 0x70(%rsp), %rsi
callq 0x483e40
jmp 0x40a446
leaq 0xb8(%rsp), %rdi
movq 0x110(%rsp), %rsi
callq 0x483e40
movss 0x19208a(%rip), %xmm0   # 0x59c4c4
subss 0x4(%rsp), %xmm0
movss %xmm0, 0x4(%rsp)
movq 0x8(%rsp), %rax
movss 0x4(%rsp), %xmm0
ucomiss 0x10(%rax), %xmm0
jae 0x40a50a
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x412f40
movq 0x8(%rsp), %rax
movss 0x14(%rax), %xmm1
movss %xmm0, 0x7c(%rsp)
ucomiss %xmm0, %xmm1
jbe 0x40a7b8
andq $0x0, 0x20(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq 0x50(%rsp), %rbx
movq 0x58(%rsp), %r14
cmpq %r14, %rbx
je 0x40a579
movss (%rbx), %xmm0
movss %xmm0, 0x180(%rsp)
leaq 0x168(%rsp), %r15
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
leaq 0xf8(%rsp), %rcx
callq 0x40b8fc
movq %r12, %rdi
movq %r15, %rsi
callq 0x409324
andl $0x0, 0x130(%rsp)
leaq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x40c0e2
movq %r12, %rdi
callq 0x408710
leaq 0x168(%rsp), %rdi
callq 0x408710
addq $0x4, %rbx
jmp 0x40a49b
leaq 0x2a0(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x486ac0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x47dd70
movq %rax, %r14
movq %r12, %rdi
movss 0x4(%rsp), %xmm0
callq 0x40b8d6
movq %r14, %rdi
movq %r12, %rsi
callq 0x486ac0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x47dd70
movq %rax, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x486ac0
movq %rax, %rdi
pushq $0xa
popq %rsi
callq 0x47dd70
movq %r12, %rdi
callq 0x484210
jmp 0x40a7b8
movq 0x30(%rsp), %rbx
movq 0x38(%rsp), %r14
cmpq %r14, %rbx
je 0x40a5f1
movss (%rbx), %xmm0
movss %xmm0, 0x180(%rsp)
leaq 0x150(%rsp), %r15
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x1
popq %rdx
leaq 0xf8(%rsp), %rcx
callq 0x40b8fc
movq %r12, %rdi
movq %r15, %rsi
callq 0x409324
movl $0x1, 0x130(%rsp)
leaq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x40c0e2
movq %r12, %rdi
callq 0x408710
leaq 0x150(%rsp), %rdi
callq 0x408710
addq $0x4, %rbx
jmp 0x40a583
leaq 0xf8(%rsp), %rdi
leaq 0x10(%rsp), %rbx
movq %rbx, %rsi
callq 0x40b932
movq %r12, %rdi
movq %rbx, %rsi
callq 0x4135c4
movq %r12, %rdi
callq 0x4136ac
movq %r12, %rdi
leaq 0xf8(%rsp), %rsi
callq 0x413b76
movq 0x58(%rsp), %rax
subq 0x50(%rsp), %rax
sarq $0x2, %rax
movq 0xf8(%rsp), %rdx
xorl %ecx, %ecx
movq 0x10(%rsp), %rdi
xorl %esi, %esi
movl %esi, %esi
cmpq %rsi, %rax
jbe 0x40a66e
movq %rsi, %r8
shlq $0x5, %r8
movl 0x18(%rdx,%r8), %r9d
xorl %r10d, %r10d
cmpl 0x18(%rdi,%r8), %r9d
sete %r10b
addl %r10d, %ecx
incl %esi
jmp 0x40a648
xorl %esi, %esi
xorl %r8d, %r8d
movl %r8d, %r8d
cmpq %r8, %rax
jbe 0x40a69b
movq %r8, %r9
shlq $0x5, %r9
movl 0x18(%rdx,%r9), %r10d
xorl %r11d, %r11d
cmpl 0x18(%rdi,%r9), %r10d
sete %r11b
addl %r11d, %esi
incl %r8d
jmp 0x40a673
movq 0x38(%rsp), %rdx
subq 0x30(%rsp), %rdx
sarq $0x2, %rdx
js 0x40a6b2
cvtsi2ss %rdx, %xmm0
jmp 0x40a6c7
movq %rdx, %rdi
shrq %rdi
andl $0x1, %edx
orq %rdi, %rdx
cvtsi2ss %rdx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %ecx, %xmm1
cvtsi2ss %rax, %xmm2
cvtsi2ss %esi, %xmm3
divss %xmm2, %xmm1
divss %xmm0, %xmm3
addss %xmm1, %xmm3
mulss 0x191dd8(%rip), %xmm3   # 0x59c4c0
movq 0x8(%rsp), %rax
movss %xmm3, 0x78(%rsp)
ucomiss 0x18(%rax), %xmm3
jb 0x40a799
leaq 0x6a8(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x486ac0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x47dd70
movq %rax, %r14
movq %rbp, %rdi
movss 0x4(%rsp), %xmm0
callq 0x40b8d6
movq %r14, %rdi
movq %rbp, %rsi
callq 0x486ac0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x47dd70
movq %rax, %rdi
movss 0x7c(%rsp), %xmm0
callq 0x47edc0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x47dd70
movq %rax, %rdi
movss 0x78(%rsp), %xmm0
callq 0x47edc0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x47dd70
movq %rax, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x486ac0
movq %rax, %rdi
pushq $0xa
popq %rsi
callq 0x47dd70
movq %rbp, %rdi
callq 0x484210
movq %r12, %rdi
callq 0x40b986
leaq 0xf8(%rsp), %rdi
callq 0x40b99c
leaq 0x10(%rsp), %rdi
callq 0x40b99c
leaq 0x20bf69(%rip), %rdi    # 0x616728
callq 0x407f5e
movq 0xe0(%rsp), %rax
movq 0x20bf45(%rip), %rcx    # 0x616718
addq %rcx, %rax
incq %rax
movq %rax, 0x20bf38(%rip)    # 0x616718
leaq 0x20bf41(%rip), %rdi    # 0x616728
callq 0x4f57b0
leaq 0xb8(%rsp), %rdi
callq 0x484210
leaq 0x30(%rsp), %rdi
callq 0x408710
leaq 0x50(%rsp), %rdi
callq 0x408710
leaq 0xd8(%rsp), %rdi
callq 0x484210
jmp 0x40a1ef
leaq 0x80(%rsp), %rdi
callq 0x40bd66
leaq 0x6a8(%rsp), %rdi
callq 0x45aef0
leaq 0x2a0(%rsp), %rdi
callq 0x45aef0
leaq 0x4a0(%rsp), %rdi
callq 0x45b030
leaq 0x1e0(%rsp), %rdi
callq 0x484210
leaq 0x240(%rsp), %rdi
callq 0x484210
leaq 0x260(%rsp), %rdi
callq 0x484210
leaq 0x280(%rsp), %rdi
callq 0x484210
leaq 0x98(%rsp), %rdi
callq 0x484210
addq $0x8a8, %rsp            # imm = 0x8A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x40a9dc
jmp 0x40a9dc
jmp 0x40a9dc
jmp 0x40a9dc
jmp 0x40a9dc
movq %rax, %rbx
jmp 0x40aaab
movq %rax, %rbx
jmp 0x40aab8
movq %rax, %rbx
jmp 0x40aac5
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
callq 0x484210
jmp 0x40a8ec
movq %rax, %rbx
leaq 0x4a0(%rsp), %rdi
callq 0x484210
jmp 0x40a8fe
movq %rax, %rbx
leaq 0x2a0(%rsp), %rdi
callq 0x484210
jmp 0x40a910
movq %rax, %rbx
leaq 0x1c0(%rsp), %rdi
jmp 0x40aacd
movq %rax, %rbx
jmp 0x40aad2
movq %rax, %rbx
leaq 0x200(%rsp), %rdi
callq 0x484210
jmp 0x40a93a
movq %rax, %rbx
leaq 0x4a0(%rsp), %rdi
callq 0x484210
jmp 0x40a94c
movq %rax, %rbx
leaq 0x2a0(%rsp), %rdi
callq 0x484210
jmp 0x40a95e
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
jmp 0x40aada
movq %rax, %rbx
jmp 0x40aadf
movq %rax, %rbx
jmp 0x40aaec
jmp 0x40a991
jmp 0x40a9dc
jmp 0x40a9e4
jmp 0x40a991
movq %rax, %rbx
jmp 0x40a9bd
jmp 0x40aa19
jmp 0x40a9e4
jmp 0x40a9e4
movq %rax, %rbx
jmp 0x40a9b0
jmp 0x40aa4e
jmp 0x40aa4e
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x484210
leaq 0x118(%rsp), %rdi
callq 0x40b986
leaq 0xf8(%rsp), %rdi
callq 0x40b99c
jmp 0x40aa40
jmp 0x40a9dc
movq %rax, %rbx
jmp 0x40aa84
jmp 0x40a9dc
jmp 0x40a9e4
jmp 0x40a9e4
movq %rax, %rbx
jmp 0x40aa91
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
jmp 0x40aa8c
jmp 0x40aa53
jmp 0x40aa4e
jmp 0x40aa19
movq %rax, %rbx
jmp 0x40aa0f
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
callq 0x408710
leaq 0x150(%rsp), %rdi
jmp 0x40aa3b
movq %rax, %rbx
jmp 0x40aa40
movq %rax, %rbx
jmp 0x40aa33
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
callq 0x408710
leaq 0x168(%rsp), %rdi
callq 0x408710
leaq 0x10(%rsp), %rdi
callq 0x40b99c
jmp 0x40aa63
jmp 0x40aa53
movq %rax, %rbx
jmp 0x40aa63
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
callq 0x484210
leaq 0xb8(%rsp), %rdi
callq 0x484210
leaq 0x30(%rsp), %rdi
callq 0x408710
leaq 0x50(%rsp), %rdi
callq 0x408710
leaq 0xd8(%rsp), %rdi
callq 0x484210
leaq 0x80(%rsp), %rdi
callq 0x40bd66
leaq 0x6a8(%rsp), %rdi
callq 0x45aef0
leaq 0x2a0(%rsp), %rdi
callq 0x45aef0
leaq 0x4a0(%rsp), %rdi
callq 0x45b030
leaq 0x1e0(%rsp), %rdi
callq 0x484210
leaq 0x240(%rsp), %rdi
callq 0x484210
leaq 0x260(%rsp), %rdi
callq 0x484210
leaq 0x280(%rsp), %rdi
callq 0x484210
leaq 0x98(%rsp), %rdi
callq 0x484210
movq %rbx, %rdi
callq 0x4b8e10