// File: ChnMasterOG[P]KmerGO2/kmergo/kmer_filtering.cpp
// Function: continuous_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 continuous_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, "continuous_l_" + std::to_string(Nprocess) + ".txt");
	std::string onput_file_name_n = joinPath(p.features_path, "continuous_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<std::string> head_value;
	std::vector<bool> sample_valid;
	std::string::size_type position;

	/* read head text and set labels */
	std::getline(input_file, line);
	mtx.lock();
	progress += line.size() + 1;	// update progress
	mtx.unlock();
	output_file_l << line << "\tP\n";	// write logical file head text
	output_file_n << line << "\tP\tCorr\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)
	{
		std::string sample_name = line.substr(0, position);
		head_value.push_back(sample_name);
		if (p.trait_information_map.find(sample_name) != p.trait_information_map.end()) sample_valid.push_back(true);
		else sample_valid.push_back(false);
		line = line.substr(position + 1);
		position = line.find("\t");
	}
	head_value.push_back(line);
	if (p.trait_information_map.find(line) != p.trait_information_map.end()) sample_valid.push_back(true);
	else sample_valid.push_back(false);

	/* 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, kmer_fre;
		int cnt = 0;
		while (position != line.npos)
		{
			std::string value_str = line.substr(0, position);
			float value_float = std::stof(value_str);
			/* logical filtering */
			if (sample_valid[cnt] == true)		// existence
			{
				kmer_fre.push_back(value_float);
				if (value_float == 0) group1.push_back(std::stof(p.trait_information_map[head_value[cnt]]));
				else group2.push_back(std::stof(p.trait_information_map[head_value[cnt]]));
			}
			line = line.substr(position + 1);
			position = line.find("\t");
			++cnt;
		}
		/* calculation */
		float pValue = ranksums(group1, group2);
		if (pValue < p.p_value)
		{
			output_file_l << src_line << '\t' << std::to_string(pValue) << '\n';
		}
		else
		{
			std::vector<float> group;
			group.insert(group.end(), group1.begin(), group1.end());
			group.insert(group.end(), group2.begin(), group2.end());
			float corr = spearman_correlation_coefficient(kmer_fre, group);	// calculate spearman correlation
			if (corr >= p.corr_vaule)
			{
				output_file_n << src_line << '\t' << std::to_string(pValue) << '\t' << std::to_string(corr) << '\n';
			}
		}
		mtx.lock();
		progress += src_line.size() + 1;	// update progress
		mtx.unlock();
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xba0, %rsp            # imm = 0xBA0
movq %rdx, -0xaa0(%rbp)
movq %rsi, -0xa98(%rbp)
movw %di, %ax
movw %ax, -0x2(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x49eec0
leaq -0x58(%rbp), %rdi
callq 0x49eec0
movq -0xa98(%rbp), %rdi
movzwl -0x2(%rbp), %eax
movl %eax, %esi
callq 0x4072e0
movq %rax, %rsi
leaq -0x78(%rbp), %rdi
callq 0x4a15e0
jmp 0x414c5a
movq -0xaa0(%rbp), %rsi
subq $-0x80, %rsi
leaq -0xc8(%rbp), %rdi
callq 0x4a15e0
jmp 0x414c73
movzwl -0x2(%rbp), %esi
leaq -0x128(%rbp), %rdi
callq 0x4075b0
jmp 0x414c85
leaq 0x1a1874(%rip), %rsi    # 0x5b6500
leaq -0x108(%rbp), %rdi
leaq -0x128(%rbp), %rdx
callq 0x4077b0
jmp 0x414ca1
leaq 0x1a15f4(%rip), %rdx    # 0x5b629c
leaq -0xe8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x407350
jmp 0x414cbd
leaq -0xa8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x407470
jmp 0x414cd9
leaq -0xe8(%rbp), %rdi
callq 0x49efd0
leaq -0x108(%rbp), %rdi
callq 0x49efd0
leaq -0x128(%rbp), %rdi
callq 0x49efd0
leaq -0xc8(%rbp), %rdi
callq 0x49efd0
movq -0xaa0(%rbp), %rsi
subq $-0x80, %rsi
leaq -0x168(%rbp), %rdi
callq 0x4a15e0
jmp 0x414d22
movzwl -0x2(%rbp), %esi
leaq -0x1c8(%rbp), %rdi
callq 0x4075b0
jmp 0x414d34
leaq 0x1a17d3(%rip), %rsi    # 0x5b650e
leaq -0x1a8(%rbp), %rdi
leaq -0x1c8(%rbp), %rdx
callq 0x4077b0
jmp 0x414d50
leaq 0x1a1545(%rip), %rdx    # 0x5b629c
leaq -0x188(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x407350
jmp 0x414d6c
leaq -0x148(%rbp), %rdi
leaq -0x168(%rbp), %rsi
leaq -0x188(%rbp), %rdx
callq 0x407470
jmp 0x414d88
leaq -0x188(%rbp), %rdi
callq 0x49efd0
leaq -0x1a8(%rbp), %rdi
callq 0x49efd0
leaq -0x1c8(%rbp), %rdi
callq 0x49efd0
leaq -0x168(%rbp), %rdi
callq 0x49efd0
leaq -0x3d0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
movl $0x8, %edx
callq 0x4750c0
jmp 0x414dcf
leaq -0x5d0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
movl $0x10, %edx
callq 0x475230
jmp 0x414de9
leaq -0x7d0(%rbp), %rdi
leaq -0x148(%rbp), %rsi
movl $0x10, %edx
callq 0x475230
jmp 0x414e03
leaq -0x7e8(%rbp), %rdi
callq 0x406f20
leaq -0x810(%rbp), %rdi
callq 0x416680
leaq -0x3d0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4a1890
jmp 0x414e2d
leaq 0x225894(%rip), %rdi    # 0x63a6c8
callq 0x40b4f0
jmp 0x414e3b
leaq -0x38(%rbp), %rdi
callq 0x49f1f0
movq 0x22586d(%rip), %rcx    # 0x63a6b8
leaq 0x1(%rax,%rcx), %rax
movq %rax, 0x225861(%rip)    # 0x63a6b8
leaq 0x22586a(%rip), %rdi    # 0x63a6c8
callq 0x40b520
jmp 0x414e65
leaq -0x5d0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4a1880
movq %rax, -0xaa8(%rbp)
jmp 0x414e7e
movq -0xaa8(%rbp), %rdi
leaq 0x1a1690(%rip), %rsi    # 0x5b651c
callq 0x498c00
jmp 0x414e93
leaq -0x7d0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4a1880
movq %rax, -0xab0(%rbp)
jmp 0x414eac
movq -0xab0(%rbp), %rdi
leaq 0x1a1666(%rip), %rsi    # 0x5b6520
callq 0x498c00
jmp 0x414ec1
leaq 0x1a1467(%rip), %rsi    # 0x5b632f
xorl %eax, %eax
movl %eax, %edx
leaq -0x38(%rbp), %rdi
movq %rdi, -0xab8(%rbp)
callq 0x4a0b30
movq -0xab8(%rbp), %rsi
movq %rax, -0x818(%rbp)
movq -0x818(%rbp), %rdx
incq %rdx
leaq -0x838(%rbp), %rdi
movq $-0x1, %rcx
callq 0x4a1800
jmp 0x414f09
leaq -0x38(%rbp), %rdi
leaq -0x838(%rbp), %rsi
callq 0x49f020
leaq -0x838(%rbp), %rdi
callq 0x49efd0
leaq -0x38(%rbp), %rdi
leaq 0x1a13ff(%rip), %rsi    # 0x5b632f
xorl %eax, %eax
movl %eax, %edx
callq 0x4a0b30
movq %rax, -0x818(%rbp)
cmpq $-0x1, -0x818(%rbp)
je 0x415216
movq -0x818(%rbp), %rcx
xorl %eax, %eax
movl %eax, %edx
leaq -0x858(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4a1800
jmp 0x414f6b
leaq -0x7e8(%rbp), %rdi
leaq -0x858(%rbp), %rsi
callq 0x40bef0
jmp 0x414f80
movq -0xaa0(%rbp), %rdi
addq $0x158, %rdi            # imm = 0x158
leaq -0x858(%rbp), %rsi
callq 0x416180
movq %rax, -0xac0(%rbp)
jmp 0x414fa3
movq -0xaa0(%rbp), %rdi
movq -0xac0(%rbp), %rax
movq %rax, -0x860(%rbp)
addq $0x158, %rdi            # imm = 0x158
callq 0x40d970
movq %rax, -0x868(%rbp)
leaq -0x860(%rbp), %rdi
leaq -0x868(%rbp), %rsi
callq 0x416150
testb $0x1, %al
jne 0x414fe7
jmp 0x415199
leaq -0x810(%rbp), %rdi
movl $0x1, %esi
callq 0x4166a0
jmp 0x414ffa
jmp 0x4151ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415c08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415bff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x41508d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415081
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415075
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x49efd0
leaq -0x108(%rbp), %rdi
callq 0x49efd0
leaq -0x128(%rbp), %rdi
callq 0x49efd0
leaq -0xc8(%rbp), %rdi
callq 0x49efd0
jmp 0x415bff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415118
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x41510c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415100
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x49efd0
leaq -0x1a8(%rbp), %rdi
callq 0x49efd0
leaq -0x1c8(%rbp), %rdi
callq 0x49efd0
leaq -0x168(%rbp), %rdi
callq 0x49efd0
jmp 0x415bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415be7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415bdb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415bcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415bab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x858(%rbp), %rdi
callq 0x49efd0
jmp 0x415bab
leaq -0x810(%rbp), %rdi
xorl %esi, %esi
callq 0x4166a0
jmp 0x4151a9
jmp 0x4151ab
movq -0x818(%rbp), %rdx
incq %rdx
leaq -0x888(%rbp), %rdi
leaq -0x38(%rbp), %rsi
movq $-0x1, %rcx
callq 0x4a1800
jmp 0x4151ce
leaq -0x38(%rbp), %rdi
leaq -0x888(%rbp), %rsi
callq 0x49f020
leaq -0x888(%rbp), %rdi
callq 0x49efd0
leaq -0x38(%rbp), %rdi
leaq 0x1a113a(%rip), %rsi    # 0x5b632f
xorl %eax, %eax
movl %eax, %edx
callq 0x4a0b30
movq %rax, -0x818(%rbp)
leaq -0x858(%rbp), %rdi
callq 0x49efd0
jmp 0x414f40
leaq -0x7e8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x40bef0
jmp 0x415228
movq -0xaa0(%rbp), %rdi
addq $0x158, %rdi            # imm = 0x158
leaq -0x38(%rbp), %rsi
callq 0x416180
movq %rax, -0xac8(%rbp)
jmp 0x415248
movq -0xaa0(%rbp), %rdi
movq -0xac8(%rbp), %rax
movq %rax, -0x890(%rbp)
addq $0x158, %rdi            # imm = 0x158
callq 0x40d970
movq %rax, -0x898(%rbp)
leaq -0x890(%rbp), %rdi
leaq -0x898(%rbp), %rsi
callq 0x416150
testb $0x1, %al
jne 0x415289
jmp 0x41529e
leaq -0x810(%rbp), %rdi
movl $0x1, %esi
callq 0x4166a0
jmp 0x41529c
jmp 0x4152b0
leaq -0x810(%rbp), %rdi
xorl %esi, %esi
callq 0x4166a0
jmp 0x4152ae
jmp 0x4152b0
jmp 0x4152b2
leaq -0x3d0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4a1890
movq %rax, -0xad0(%rbp)
jmp 0x4152cb
movq -0xad0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x479520
movb %al, -0xad1(%rbp)
jmp 0x4152e9
movb -0xad1(%rbp), %al
testb $0x1, %al
jne 0x4152f8
jmp 0x415b33
leaq -0x8b8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4a15e0
jmp 0x41530a
leaq 0x1a101e(%rip), %rsi    # 0x5b632f
xorl %eax, %eax
movl %eax, %edx
leaq -0x38(%rbp), %rdi
movq %rdi, -0xae0(%rbp)
callq 0x4a0b30
movq -0xae0(%rbp), %rsi
movq %rax, -0x818(%rbp)
movq -0x818(%rbp), %rdx
incq %rdx
leaq -0x8d8(%rbp), %rdi
movq $-0x1, %rcx
callq 0x4a1800
jmp 0x415352
leaq -0x38(%rbp), %rdi
leaq -0x8d8(%rbp), %rsi
callq 0x49f020
leaq -0x8d8(%rbp), %rdi
callq 0x49efd0
leaq -0x38(%rbp), %rdi
leaq 0x1a0fb6(%rip), %rsi    # 0x5b632f
xorl %eax, %eax
movl %eax, %edx
callq 0x4a0b30
movq %rax, -0x818(%rbp)
leaq -0x8f0(%rbp), %rdi
callq 0x40be60
leaq -0x908(%rbp), %rdi
callq 0x40be60
leaq -0x920(%rbp), %rdi
callq 0x40be60
movl $0x0, -0x924(%rbp)
cmpq $-0x1, -0x818(%rbp)
je 0x41565b
movq -0x818(%rbp), %rcx
xorl %eax, %eax
movl %eax, %edx
leaq -0x948(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x4a1800
jmp 0x4153e2
xorl %eax, %eax
movl %eax, %esi
leaq -0x948(%rbp), %rdi
callq 0x4161e0
movss %xmm0, -0xae4(%rbp)
jmp 0x4153fc
movss -0xae4(%rbp), %xmm0
movss %xmm0, -0x94c(%rbp)
movslq -0x924(%rbp), %rsi
leaq -0x810(%rbp), %rdi
callq 0x416770
movq %rdx, -0xaf8(%rbp)
movq %rax, -0xaf0(%rbp)
jmp 0x41542f
movq -0xaf8(%rbp), %rax
movq -0xaf0(%rbp), %rcx
movq %rcx, -0x960(%rbp)
movq %rax, -0x958(%rbp)
leaq -0x960(%rbp), %rdi
callq 0x4167d0
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x4155e1
leaq -0x920(%rbp), %rdi
leaq -0x94c(%rbp), %rsi
callq 0x416240
jmp 0x41547a
movss -0x94c(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x41555f
jp 0x41555f
movq -0xaa0(%rbp), %rax
addq $0x158, %rax            # imm = 0x158
movq %rax, -0xb08(%rbp)
movslq -0x924(%rbp), %rsi
leaq -0x7e8(%rbp), %rdi
callq 0x4072e0
movq -0xb08(%rbp), %rdi
movq %rax, %rsi
callq 0x40bc10
movq %rax, -0xb00(%rbp)
jmp 0x4154d3
movq -0xb00(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4161e0
movss %xmm0, -0xb0c(%rbp)
jmp 0x4154ed
movss -0xb0c(%rbp), %xmm0
movss %xmm0, -0x964(%rbp)
leaq -0x8f0(%rbp), %rdi
leaq -0x964(%rbp), %rsi
callq 0x40bf80
jmp 0x415512
jmp 0x4155df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415b25
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415b01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x948(%rbp), %rdi
callq 0x49efd0
jmp 0x415b01
movq -0xaa0(%rbp), %rax
addq $0x158, %rax            # imm = 0x158
movq %rax, -0xb20(%rbp)
movslq -0x924(%rbp), %rsi
leaq -0x7e8(%rbp), %rdi
callq 0x4072e0
movq -0xb20(%rbp), %rdi
movq %rax, %rsi
callq 0x40bc10
movq %rax, -0xb18(%rbp)
jmp 0x41559e
movq -0xb18(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4161e0
movss %xmm0, -0xb24(%rbp)
jmp 0x4155b8
movss -0xb24(%rbp), %xmm0
movss %xmm0, -0x968(%rbp)
leaq -0x908(%rbp), %rdi
leaq -0x968(%rbp), %rsi
callq 0x40bf80
jmp 0x4155dd
jmp 0x4155df
jmp 0x4155e1
movq -0x818(%rbp), %rdx
incq %rdx
leaq -0x988(%rbp), %rdi
leaq -0x38(%rbp), %rsi
movq $-0x1, %rcx
callq 0x4a1800
jmp 0x415604
leaq -0x38(%rbp), %rdi
leaq -0x988(%rbp), %rsi
callq 0x49f020
leaq -0x988(%rbp), %rdi
callq 0x49efd0
leaq -0x38(%rbp), %rdi
leaq 0x1a0d04(%rip), %rsi    # 0x5b632f
xorl %eax, %eax
movl %eax, %edx
callq 0x4a0b30
movq %rax, -0x818(%rbp)
movl -0x924(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x924(%rbp)
leaq -0x948(%rbp), %rdi
callq 0x49efd0
jmp 0x4153b7
leaq -0x8f0(%rbp), %rdi
leaq -0x908(%rbp), %rsi
callq 0x42ae20
movss %xmm0, -0xb28(%rbp)
jmp 0x415678
movq -0xaa0(%rbp), %rax
movss -0xb28(%rbp), %xmm0
movss %xmm0, -0x98c(%rbp)
movss -0x98c(%rbp), %xmm1
movss 0x14(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x415751
leaq -0x5d0(%rbp), %rdi
leaq -0x8b8(%rbp), %rsi
callq 0x4a1880
movq %rax, -0xb30(%rbp)
jmp 0x4156c1
movq -0xb30(%rbp), %rdi
movl $0x9, %esi
callq 0x498b30
movq %rax, -0xb38(%rbp)
jmp 0x4156db
movss -0x98c(%rbp), %xmm0
leaq -0x9b0(%rbp), %rdi
callq 0x4162b0
jmp 0x4156f1
movq -0xb38(%rbp), %rdi
leaq -0x9b0(%rbp), %rsi
callq 0x4a1880
movq %rax, -0xb40(%rbp)
jmp 0x41570d
movq -0xb40(%rbp), %rdi
movl $0xa, %esi
callq 0x498b30
jmp 0x415720
leaq -0x9b0(%rbp), %rdi
callq 0x49efd0
jmp 0x415a91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x9b0(%rbp), %rdi
callq 0x49efd0
jmp 0x415b01
leaq -0x9c8(%rbp), %rdi
movq %rdi, -0xb50(%rbp)
callq 0x40be60
movq -0xb50(%rbp), %rdi
callq 0x40f900
movq %rax, -0x9d8(%rbp)
leaq -0x9d0(%rbp), %rdi
leaq -0x9d8(%rbp), %rsi
callq 0x4168b0
leaq -0x8f0(%rbp), %rdi
movq %rdi, -0xb58(%rbp)
callq 0x40fac0
movq -0xb58(%rbp), %rdi
movq %rax, -0x9e0(%rbp)
callq 0x40f900
movq -0xb50(%rbp), %rdi
movq %rax, -0x9e8(%rbp)
movq -0x9d0(%rbp), %rsi
movq -0x9e0(%rbp), %rdx
movq -0x9e8(%rbp), %rcx
callq 0x416800
movq %rax, -0xb48(%rbp)
jmp 0x4157e1
movq -0xb48(%rbp), %rax
movq %rax, -0x9f0(%rbp)
leaq -0x9c8(%rbp), %rdi
movq %rdi, -0xb68(%rbp)
callq 0x40f900
movq %rax, -0xa00(%rbp)
leaq -0x9f8(%rbp), %rdi
leaq -0xa00(%rbp), %rsi
callq 0x4168b0
leaq -0x908(%rbp), %rdi
movq %rdi, -0xb70(%rbp)
callq 0x40fac0
movq -0xb70(%rbp), %rdi
movq %rax, -0xa08(%rbp)
callq 0x40f900
movq -0xb68(%rbp), %rdi
movq %rax, -0xa10(%rbp)
movq -0x9f8(%rbp), %rsi
movq -0xa08(%rbp), %rdx
movq -0xa10(%rbp), %rcx
callq 0x416800
movq %rax, -0xb60(%rbp)
jmp 0x415873
movq -0xb60(%rbp), %rax
movq %rax, -0xa18(%rbp)
leaq -0xa38(%rbp), %rdi
leaq -0x920(%rbp), %rsi
callq 0x410770
jmp 0x415896
leaq -0xa50(%rbp), %rdi
leaq -0x9c8(%rbp), %rsi
callq 0x410770
jmp 0x4158ab
leaq -0xa38(%rbp), %rdi
leaq -0xa50(%rbp), %rsi
callq 0x42b1c0
movss %xmm0, -0xb74(%rbp)
jmp 0x4158c8
leaq -0xa50(%rbp), %rdi
callq 0x40c2b0
leaq -0xa38(%rbp), %rdi
callq 0x40c2b0
movss -0xb74(%rbp), %xmm0
movq -0xaa0(%rbp), %rax
movss %xmm0, -0xa1c(%rbp)
movss -0xa1c(%rbp), %xmm0
ucomiss 0x1c(%rax), %xmm0
jb 0x415a75
leaq -0x7d0(%rbp), %rdi
leaq -0x8b8(%rbp), %rsi
callq 0x4a1880
movq %rax, -0xb80(%rbp)
jmp 0x415925
movq -0xb80(%rbp), %rdi
movl $0x9, %esi
callq 0x498b30
movq %rax, -0xb88(%rbp)
jmp 0x41593f
movss -0x98c(%rbp), %xmm0
leaq -0xa70(%rbp), %rdi
callq 0x4162b0
jmp 0x415955
movq -0xb88(%rbp), %rdi
leaq -0xa70(%rbp), %rsi
callq 0x4a1880
movq %rax, -0xb90(%rbp)
jmp 0x415971
movq -0xb90(%rbp), %rdi
movl $0x9, %esi
callq 0x498b30
movq %rax, -0xb98(%rbp)
jmp 0x41598b
movss -0xa1c(%rbp), %xmm0
leaq -0xa90(%rbp), %rdi
callq 0x4162b0
jmp 0x4159a1
movq -0xb98(%rbp), %rdi
leaq -0xa90(%rbp), %rsi
callq 0x4a1880
movq %rax, -0xba0(%rbp)
jmp 0x4159bd
movq -0xba0(%rbp), %rdi
movl $0xa, %esi
callq 0x498b30
jmp 0x4159d0
leaq -0xa90(%rbp), %rdi
callq 0x49efd0
leaq -0xa70(%rbp), %rdi
callq 0x49efd0
jmp 0x415a75
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415a83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415a2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x40c2b0
leaq -0xa38(%rbp), %rdi
callq 0x40c2b0
jmp 0x415a83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x415a67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xa90(%rbp), %rdi
callq 0x49efd0
leaq -0xa70(%rbp), %rdi
callq 0x49efd0
jmp 0x415a83
leaq -0x9c8(%rbp), %rdi
callq 0x40c2b0
jmp 0x415a91
leaq -0x9c8(%rbp), %rdi
callq 0x40c2b0
jmp 0x415b01
leaq 0x224c30(%rip), %rdi    # 0x63a6c8
callq 0x40b4f0
jmp 0x415a9f
leaq -0x8b8(%rbp), %rdi
callq 0x49f1f0
movq 0x224c06(%rip), %rcx    # 0x63a6b8
leaq 0x1(%rax,%rcx), %rax
movq %rax, 0x224bfa(%rip)    # 0x63a6b8
leaq 0x224c03(%rip), %rdi    # 0x63a6c8
callq 0x40b520
jmp 0x415acc
leaq -0x920(%rbp), %rdi
callq 0x40c2b0
leaq -0x908(%rbp), %rdi
callq 0x40c2b0
leaq -0x8f0(%rbp), %rdi
callq 0x40c2b0
leaq -0x8b8(%rbp), %rdi
callq 0x49efd0
jmp 0x4152b2
leaq -0x920(%rbp), %rdi
callq 0x40c2b0
leaq -0x908(%rbp), %rdi
callq 0x40c2b0
leaq -0x8f0(%rbp), %rdi
callq 0x40c2b0
leaq -0x8b8(%rbp), %rdi
callq 0x49efd0
jmp 0x415bab
leaq -0x810(%rbp), %rdi
callq 0x4168f0
leaq -0x7e8(%rbp), %rdi
callq 0x407800
leaq -0x7d0(%rbp), %rdi
callq 0x475cb0
leaq -0x5d0(%rbp), %rdi
callq 0x475cb0
leaq -0x3d0(%rbp), %rdi
callq 0x475df0
leaq -0x148(%rbp), %rdi
callq 0x49efd0
leaq -0xa8(%rbp), %rdi
callq 0x49efd0
leaq -0x78(%rbp), %rdi
callq 0x49efd0
leaq -0x58(%rbp), %rdi
callq 0x49efd0
leaq -0x38(%rbp), %rdi
callq 0x49efd0
addq $0xba0, %rsp            # imm = 0xBA0
popq %rbp
retq
leaq -0x810(%rbp), %rdi
callq 0x4168f0
leaq -0x7e8(%rbp), %rdi
callq 0x407800
leaq -0x7d0(%rbp), %rdi
callq 0x475cb0
leaq -0x5d0(%rbp), %rdi
callq 0x475cb0
leaq -0x3d0(%rbp), %rdi
callq 0x475df0
leaq -0x148(%rbp), %rdi
callq 0x49efd0
leaq -0xa8(%rbp), %rdi
callq 0x49efd0
leaq -0x78(%rbp), %rdi
callq 0x49efd0
leaq -0x58(%rbp), %rdi
callq 0x49efd0
leaq -0x38(%rbp), %rdi
callq 0x49efd0
movq -0x80(%rbp), %rdi
callq 0x4d3c10
nopw %cs:(%rax,%rax)