// File: /workspace/github_cpp_makefile_star2_O2/CK7[P]abawaca/src/abawaca.cpp
// Function: main
int main(int argc, const char** argv) 
{
	cerr << "abawaca " << VERSION << endl << endl;

	Prog_params&		params = *Prog_params::Instance();

	ofstream		log;
	ofstream		summary;
	ofstream		ofs_dp2cluster;
	ofstream		ofs_scaf2cluster;
	char 			line[1024] = {};

	if(params.read_params(argc, argv))
		return -1;

	Semaphore		thread_semphore(params.ncpus);

	sprintf(line, "%s/log", params.root_dir.c_str());
	log.open(line);
	sprintf(line, "%s/summary.txt", params.root_dir.c_str());
	summary.open(line);
	sprintf(line, "%s/dp2cluster.txt", params.root_dir.c_str());
	ofs_dp2cluster.open(line);
	sprintf(line, "%s/scaf2cluster.txt", params.root_dir.c_str());
	ofs_scaf2cluster.open(line);

	cerr << '[' << get_time() << ']' << " Starting" << endl;
	cerr << '[' << get_time() << ']' << " Creating databases based on " << params.names_file << " and " << params.lrn_file << endl;
	log << "abawaca " << VERSION << endl << endl;
	log << '[' << get_time() << ']' << " Starting" << endl;
	log << '[' << get_time() << ']' << " Creatinf databases based on " << params.names_file << " and " << params.lrn_file << endl;
	ScafDpData			scaf_db(params.names_file, params.fasta_file, params.info_file);
	ClusterData			clustering_db(params.lrn_file, scaf_db);
	SCGdb				scg_db(scaf_db, params.gene2scg_file, params.scg_list_file);
	map<size_t, Cluster*>		clusters;
	size_t				total_iterations = 1;
	map<size_t, size_t>		dp2cluster;
	map<size_t, size_t>		scaf2cluster;

	summary << "Cluster\t# scafs\t# dps\t# bps\t%G+C\tStdev\tCvg\tstdev\t#SCG" << '/' << scg_db.get_total_num_scgs() << "\tAvg" << endl;

	clusters[total_iterations++] = init_cluster(scaf_db);

	// We will keep iterating over all items in clustering_dbs until it is empty.
	while(clusters.size() > 0) {
		map<size_t, Cluster*>::iterator 	mit = clusters.begin();
		Cluster* 				curr_cluster = mit->second;
		ClusterData&    			curr_clustering_db = *(new ClusterData(clustering_db, curr_cluster->get_dps()));
		size_t 					iteration = mit->first;

		clusters.erase(mit);

		cerr << endl << '[' << get_time() << ']' << " Checking cluster " << iteration << " (" << curr_cluster->ndps() << " datapoints)" << endl;
		log << endl << '[' << get_time() << ']' << " Checking cluster " << iteration << " (" << curr_cluster->ndps() << " datapoints)" << endl;

		ClusterSeparatorBySensitivitySpecificity separator(scaf_db, scg_db, curr_clustering_db, thread_semphore);
//		ClusterSeparatorSplitScafs separator(scaf_db, scg_db, curr_clustering_db, thread_semphore);

		separator.separate();

		cerr << '[' << get_time() << ']' << " ";
		separator.print_separation_params(cerr);
		cerr << endl;
		log << '[' << get_time() << ']' << " ";
		separator.print_separation_params(log);
		log << endl;

		ClusterQuality cq(scaf_db, scg_db);
		double	nunique_scgs, avg_ncopies_scgs;
		double	avg_gc, stdev_gc;
		double	avg_cvg=-1, stdev_cvg=-1;

		if((separator.get_cluster1() == NULL)/* || (!cq.is_split_better(*(separator.get_cluster1()), *(separator.get_cluster2())))*/) {
			if(separator.get_cluster1() == NULL) {
				cerr << '[' << get_time() << ']' << " Cluster " << iteration << " is a terminal cluster" << endl;
				log << '[' << get_time() << ']' << " Cluster " << iteration << " is a terminal cluster" << endl;
			}
			else {
				cerr << '[' << get_time() << ']' << " Cluster " << iteration << " will not be split further (terminal cluster)" << endl;
				log << '[' << get_time() << ']' << " Cluster " << iteration << " will not be split further (terminal cluster)" << endl;
			}
			for(auto sit = curr_cluster->dps_begin(); sit != curr_cluster->dps_end(); sit++)
				dp2cluster[*sit] = iteration;
			for(auto sit = curr_cluster->assigned_scafs_begin(); sit != curr_cluster->assigned_scafs_end(); sit++)
				scaf2cluster[*sit] = iteration;
			char fasta_out[1024];

			sprintf(fasta_out, "%s/%lu.fasta", params.fasta_dir.c_str(), iteration);
			size_t total_bps = get_fasta(curr_cluster->get_assigned_scafs(), scaf_db, fasta_out);

			total_bps = cq.total_size(*curr_cluster);
			size_t	nscaffolds = cq.num_scaffolds(*curr_cluster);
			cq.scg(*curr_cluster, nunique_scgs, avg_ncopies_scgs);
			cq.gc(*curr_cluster,  avg_gc, stdev_gc);
			cq.cvg(*curr_cluster,  avg_cvg, stdev_cvg);

			summary << iteration << '\t' << nscaffolds << '\t' << curr_cluster->ndps() << '\t' << total_bps << '\t'
				<< int(1000*avg_gc)/10.0 << '\t' << int(1000*stdev_gc)/100.0 << '\t' << int(10*avg_cvg)/10.0
				<< '\t' << int(10*stdev_cvg)/10.0 << '\t' << nunique_scgs << '\t' << int(100*avg_ncopies_scgs)/100.0 << endl;

		}
		else {
			cerr << '[' << get_time() << ']' << separator << endl;
			cerr << '[' << get_time() << ']' << " Cluster " << iteration << " will be separated to the following two clusters" << endl;
			log << '[' << get_time() << ']' << separator << endl;
			log << '[' << get_time() << ']' << " Cluster " << iteration << " will be separated to the following two clusters" << endl;

			ClusterEsomWriter writer(params.cluster_dir, scaf_db);
			char new_cluster_name[128];

			sprintf(new_cluster_name, "%lu", total_iterations);
			ClusterData cluster1(curr_clustering_db, separator.get_cluster1()->get_dps());
			writer.write(cluster1, separator.get_cluster1()->get_assigned_scafs(), separator.get_raw_dps_cluster1(), new_cluster_name);

			cq.scg(*(separator.get_cluster1()), nunique_scgs, avg_ncopies_scgs);
			cq.gc(*(separator.get_cluster1()), avg_gc, stdev_gc);
			cq.cvg(*(separator.get_cluster1()), avg_cvg, stdev_cvg);

			cerr 	<< '[' << get_time() << ']' << " Cluster " << total_iterations << ", " << cluster1.ndps() << " datapoints, "
				<< nunique_scgs << " unique SCGs (" << avg_ncopies_scgs << " copies), %G+C=" << avg_gc << ", coverage=" << avg_cvg << endl;
			log 	<< '[' << get_time() << ']' << " Cluster " << total_iterations << ", " << cluster1.ndps() << " datapoints, "
				<< nunique_scgs << " unique SCGs (" << avg_ncopies_scgs << " copies), %G+C=" << avg_gc << ", coverage=" << avg_cvg << endl;
//			clustering_dbs.insert(pair<size_t, ClusterData*>(total_iterations++, cluster1));
			clusters.insert(pair<size_t, Cluster*>(total_iterations++, separator.get_cluster1()));

			sprintf(new_cluster_name, "%lu", total_iterations);
//			ClusterData* cluster2 = new ClusterData(clustering_db, separator.get_cluster2()->get_dps());
			ClusterData cluster2(curr_clustering_db, separator.get_cluster2()->get_dps());
			writer.write(cluster2, separator.get_cluster2()->get_assigned_scafs(), separator.get_raw_dps_cluster2(), new_cluster_name);

			cq.scg(*(separator.get_cluster2()), nunique_scgs, avg_ncopies_scgs);
			cq.gc(*(separator.get_cluster2()), avg_gc, stdev_gc);
			cq.cvg(*(separator.get_cluster2()), avg_cvg, stdev_cvg);

			cerr 	<< '[' << get_time() << ']' << " Cluster " << total_iterations << ", " << cluster2.ndps() << " datapoints, "
				<< nunique_scgs << " unique SCGs (" << avg_ncopies_scgs << " copies), %G+C=" << avg_gc << ", coverage=" << avg_cvg << endl;
			log 	<< '[' << get_time() << ']' << " Cluster " << total_iterations << ", " << cluster2.ndps() << " datapoints, "
				<< nunique_scgs << " unique SCGs (" << avg_ncopies_scgs << " copies), %G+C=" << avg_gc << ", coverage=" << avg_cvg << endl;
//			clustering_dbs.insert(pair<size_t, ClusterData*>(total_iterations++, cluster2));
			clusters.insert(pair<size_t, Cluster*>(total_iterations++, separator.get_cluster2()));
		}
		delete(&curr_clustering_db);
		delete(curr_cluster);
	}

	for(size_t i=0; i<=scaf_db.ndps(); i++) {
		if(dp2cluster.find(i) == dp2cluster.end())
			ofs_dp2cluster << i << "\t0" << endl;
		else
			ofs_dp2cluster << i << "\t" << dp2cluster[i] << endl;
	}
	for(size_t i=1; i<=scaf_db.nscafs(); i++) {
		if(scaf2cluster.find(i) == scaf2cluster.end())
			ofs_scaf2cluster << scaf_db.scaf_id2name(i) << "\t0" << endl;
		else
			ofs_scaf2cluster << scaf_db.scaf_id2name(i) << "\t" << scaf2cluster[i] << endl;
	}

	ofs_dp2cluster.close();
	ofs_scaf2cluster.close();

	cerr << '[' << get_time() << ']' << " Finished successfully" << endl << endl;
	log << '[' << get_time() << ']' << " Finished successfully" << endl << endl;
	log.close();
	summary.close();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1568, %rsp           # imm = 0x1568
movq %rsi, %rbx
movl %edi, %r14d
movq 0x1a4cb(%rip), %rdi     # 0x1efe8
leaq 0x104fc(%rip), %rsi     # 0x15020
callq 0x4340
leaq 0x104f9(%rip), %rsi     # 0x15029
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x41a0
callq 0x6156
movq %rax, %r15
leaq -0x788(%rbp), %rdi
callq 0x4600
leaq -0x988(%rbp), %rdi
callq 0x4600
leaq -0xd88(%rbp), %rdi
callq 0x4600
leaq -0xb88(%rbp), %rdi
callq 0x4600
leaq -0x1590(%rbp), %rdi
movl $0x400, %edx            # imm = 0x400
xorl %esi, %esi
callq 0x41f0
movq %r15, %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x61a0
testl %eax, %eax
je 0x4bad
pushq $-0x1
popq %rbx
jmp 0x5f3e
movl 0x160(%r15), %esi
leaq -0x588(%rbp), %rdi
callq 0x6af0
movq 0xa0(%r15), %rdx
leaq 0x10461(%rip), %rsi     # 0x1502f
leaq -0x1590(%rbp), %rbx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x4080
leaq -0x788(%rbp), %rdi
pushq $0x10
popq %rdx
movq %rbx, %rsi
callq 0x4050
movq 0xa0(%r15), %rdx
leaq 0x10437(%rip), %rsi     # 0x15036
movq %rbx, %rdi
xorl %eax, %eax
callq 0x4080
leaq -0x988(%rbp), %rdi
pushq $0x10
popq %rdx
movq %rbx, %rsi
callq 0x4050
movq 0xa0(%r15), %rdx
leaq 0x1041c(%rip), %rsi     # 0x15045
movq %rbx, %rdi
xorl %eax, %eax
callq 0x4080
leaq -0xd88(%rbp), %rdi
pushq $0x10
popq %rdx
movq %rbx, %rsi
callq 0x4050
movq 0xa0(%r15), %rdx
leaq 0x10404(%rip), %rsi     # 0x15057
movq %rbx, %rdi
xorl %eax, %eax
callq 0x4080
leaq -0xb88(%rbp), %rdi
pushq $0x10
popq %rdx
movq %rbx, %rsi
callq 0x4050
movq 0x1a372(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0x103c8(%rip), %rsi     # 0x1506b
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
callq 0x41a0
movq 0x1a32e(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0x1038e(%rip), %rsi     # 0x15075
movq %rax, %rdi
callq 0x4340
leaq 0x20(%r15), %rbx
movq %rax, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x1038e(%rip), %rsi     # 0x15093
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
movq %r15, %rsi
callq 0x42d0
movq %rax, %rdi
callq 0x41a0
leaq 0x102f9(%rip), %rsi     # 0x15020
leaq -0x788(%rbp), %rdi
callq 0x4340
leaq 0x102ef(%rip), %rsi     # 0x15029
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %r14
callq 0xec60
movq %r14, %rdi
movq %rax, %rsi
callq 0x4340
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0x102e5(%rip), %rsi     # 0x1506b
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %r14
callq 0xec60
movq %r14, %rdi
movq %rax, %rsi
callq 0x4340
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0x102cf(%rip), %rsi     # 0x15099
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
movq %rbx, %rsi
callq 0x42d0
leaq 0x102af(%rip), %rsi     # 0x15093
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
movq %r15, %rsi
callq 0x42d0
movq %rax, %rdi
callq 0x41a0
leaq -0x1f0(%rbp), %rdi
movq %rbx, %rsi
callq 0x44d0
leaq 0x80(%r15), %rsi
leaq -0x1d0(%rbp), %rdi
callq 0x44d0
leaq 0x40(%r15), %rsi
leaq -0x1b0(%rbp), %rdi
callq 0x44d0
leaq -0x368(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
leaq -0x1d0(%rbp), %rdx
leaq -0x1b0(%rbp), %rcx
callq 0x8ef4
leaq -0x1b0(%rbp), %rdi
callq 0x4180
leaq -0x1d0(%rbp), %rdi
callq 0x4180
leaq -0x1f0(%rbp), %rdi
callq 0x4180
leaq -0x190(%rbp), %rdi
movq %r15, %rsi
callq 0x44d0
leaq -0x4a8(%rbp), %rdi
leaq -0x190(%rbp), %rsi
leaq -0x368(%rbp), %rdx
callq 0xcac2
leaq -0x190(%rbp), %rdi
callq 0x4180
leaq 0xc0(%r15), %rsi
leaq -0x170(%rbp), %rdi
callq 0x44d0
leaq 0xe0(%r15), %rsi
leaq -0x150(%rbp), %rdi
callq 0x44d0
leaq -0x528(%rbp), %rdi
leaq -0x368(%rbp), %rsi
leaq -0x170(%rbp), %rdx
leaq -0x150(%rbp), %rcx
callq 0x6b1c
leaq -0x150(%rbp), %rdi
callq 0x4180
leaq -0x170(%rbp), %rdi
callq 0x4180
leaq -0xc8(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x128(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0xf8(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x10152(%rip), %rsi     # 0x150b7
leaq -0x988(%rbp), %rdi
callq 0x4340
pushq $0x2f
popq %rsi
movq %rax, %rdi
callq 0x43f0
movslq -0x4b8(%rbp), %rsi
movq %rax, %rdi
callq 0x4240
leaq 0x1015b(%rip), %rsi     # 0x150ed
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq -0x368(%rbp), %rdi
callq 0x68af
movq %rax, %rbx
leaq -0x1190(%rbp), %rsi
movq $0x1, (%rsi)
leaq -0xd0(%rbp), %rdi
callq 0x6ba4
movq %rbx, (%rax)
movq %r15, %rax
addq $0x120, %rax            # imm = 0x120
movq %rax, -0x88(%rbp)
pushq $0x2
popq %rax
movq %r15, -0x80(%rbp)
cmpq $0x0, -0xa8(%rbp)
je 0x5c64
movq %rax, -0x50(%rbp)
movq -0xb8(%rbp), %rbx
movq 0x28(%rbx), %r13
pushq $0x50
popq %rdi
callq 0x4360
movq %rax, %r14
leaq 0x38(%r13), %rdx
movq %rax, %rdi
leaq -0x4a8(%rbp), %rsi
callq 0xc904
leaq -0x78(%rbp), %r15
movq 0x20(%rbx), %r12
leaq -0xd0(%rbp), %rdi
movq %rbx, %rsi
callq 0x8724
movq 0x19faa(%rip), %rdi     # 0x1efe8
callq 0x41a0
movq %rax, %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0x1007c(%rip), %rsi     # 0x150f2
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0x10e6d(%rip), %rsi     # 0x15efd
callq 0x4340
movq 0x50(%r13), %rsi
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0x1005a(%rip), %rsi     # 0x15105
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
callq 0x41a0
movq %rax, %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xfffb(%rip), %rsi      # 0x150f2
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0x10dec(%rip), %rsi     # 0x15efd
callq 0x4340
movq 0x50(%r13), %rsi
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0xffd9(%rip), %rsi      # 0x15105
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq -0x2d8(%rbp), %rbx
movq %rbx, %rdi
leaq -0x368(%rbp), %rsi
leaq -0x528(%rbp), %rdx
movq %r14, %rcx
leaq -0x588(%rbp), %r8
callq 0x6bf6
movq %rbx, %rdi
callq 0xf14c
movq 0x19e79(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0x10efb(%rip), %rsi     # 0x1609a
callq 0x4340
movq -0x230(%rbp), %rdi
movq (%rdi), %rax
movq 0x19e33(%rip), %rsi     # 0x1efe8
callq *0x20(%rax)
movq 0x19e29(%rip), %rdi     # 0x1efe8
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0x10e9f(%rip), %rsi     # 0x1609a
callq 0x4340
movq -0x230(%rbp), %rdi
movq (%rdi), %rax
leaq -0x788(%rbp), %rsi
callq *0x20(%rax)
leaq -0x788(%rbp), %rdi
callq 0x41a0
leaq 0x19669(%rip), %rax     # 0x1e890
movq %rax, -0x78(%rbp)
leaq -0x368(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq -0x528(%rbp), %rax
movq %rax, -0x68(%rbp)
movabsq $-0x4010000000000000, %rax # imm = 0xBFF0000000000000
movq %rax, -0x30(%rbp)
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x2b0(%rbp)
je 0x592b
movq 0x19d80(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq -0x2d8(%rbp), %rsi
callq 0xf8e7
movq %rax, %rdi
callq 0x41a0
movq 0x19d3c(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xfe36(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0xfe4a(%rip), %rsi      # 0x15140
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq -0x2d8(%rbp), %rsi
callq 0xf8e7
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xfd94(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0xfda8(%rip), %rsi      # 0x15140
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq -0x458(%rbp), %rbx
movq %rbx, %rdi
movq -0x88(%rbp), %rsi
callq 0x44d0
leaq -0x398(%rbp), %rdi
movq %rbx, %rsi
leaq -0x368(%rbp), %rdx
callq 0x6cc2
movq %rbx, %rdi
callq 0x4180
leaq -0x1190(%rbp), %rbx
movq %rbx, %rdi
leaq 0x105c9(%rip), %rsi     # 0x159b3
movq -0x50(%rbp), %rdx
xorl %eax, %eax
callq 0x4080
movq -0x2b0(%rbp), %rdx
addq $0x38, %rdx
leaq -0x438(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xc904
movq -0x2b0(%rbp), %rdx
addq $0x70, %rdx
leaq -0x398(%rbp), %rdi
movq %r12, %rsi
leaq -0x2a0(%rbp), %rcx
movq %rbx, %r8
callq 0xe120
movq -0x2b0(%rbp), %rsi
movq %r15, %rdi
leaq -0x48(%rbp), %rdx
leaq -0x40(%rbp), %rcx
callq 0x13ac2
movq -0x2b0(%rbp), %rsi
movq %r15, %rdi
leaq -0x38(%rbp), %rdx
leaq -0x60(%rbp), %rcx
callq 0x13b2a
movq -0x2b0(%rbp), %rsi
movq %r15, %rdi
leaq -0x30(%rbp), %rdx
leaq -0x58(%rbp), %rcx
callq 0x13c22
movq 0x19b66(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xfc60(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq -0x50(%rbp), %rsi
callq 0x4240
movq %rax, %rdi
leaq 0x10bcc(%rip), %rsi     # 0x16099
callq 0x4340
movq -0x408(%rbp), %rsi
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0xfc86(%rip), %rsi      # 0x15171
callq 0x4340
movsd -0x48(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xfc78(%rip), %rsi      # 0x1517f
callq 0x4340
movsd -0x40(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xfc6b(%rip), %rsi      # 0x1518e
callq 0x4340
movsd -0x38(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xfc5f(%rip), %rsi      # 0x1519e
callq 0x4340
movsd -0x30(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xfb82(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq -0x50(%rbp), %rsi
callq 0x4240
movq %rax, %rdi
leaq 0x10aee(%rip), %rsi     # 0x16099
callq 0x4340
movq -0x408(%rbp), %rsi
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0xfba8(%rip), %rsi      # 0x15171
callq 0x4340
movsd -0x48(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xfb9a(%rip), %rsi      # 0x1517f
callq 0x4340
movsd -0x40(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xfb8d(%rip), %rsi      # 0x1518e
callq 0x4340
movsd -0x38(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xfb81(%rip), %rsi      # 0x1519e
callq 0x4340
movsd -0x30(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
callq 0x41a0
movq %r13, -0x90(%rbp)
movq %r14, %r13
movq %r15, %r14
movq -0x2b0(%rbp), %rax
movq -0x50(%rbp), %rbx
movq %rbx, -0x3e8(%rbp)
movq %rax, -0x3e0(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0x3e8(%rbp), %r15
movq %r15, %rsi
callq 0x8a32
leaq 0x1(%rbx), %r12
leaq -0x1190(%rbp), %rbx
movq %rbx, %rdi
leaq 0x1032b(%rip), %rsi     # 0x159b3
movq %r12, %rdx
xorl %eax, %eax
callq 0x4080
movq -0x2a8(%rbp), %rdx
addq $0x38, %rdx
movq %r15, %rdi
movq %r13, %rsi
callq 0xc904
movq -0x2a8(%rbp), %rdx
addq $0x70, %rdx
leaq -0x398(%rbp), %rdi
movq %r15, %rsi
leaq -0x268(%rbp), %rcx
movq %rbx, %r8
callq 0xe120
movq -0x2a8(%rbp), %rsi
movq %r14, %rdi
leaq -0x48(%rbp), %rdx
leaq -0x40(%rbp), %rcx
callq 0x13ac2
movq -0x2a8(%rbp), %rsi
movq %r14, %rdi
leaq -0x38(%rbp), %rdx
leaq -0x60(%rbp), %rcx
callq 0x13b2a
movq -0x2a8(%rbp), %rsi
movq %r14, %rdi
leaq -0x30(%rbp), %rdx
leaq -0x58(%rbp), %rcx
callq 0x13c22
movq 0x198d0(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xf9ca(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0x10937(%rip), %rsi     # 0x16099
callq 0x4340
movq -0x3b8(%rbp), %rsi
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0xf9f1(%rip), %rsi      # 0x15171
callq 0x4340
movsd -0x48(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xf9e3(%rip), %rsi      # 0x1517f
callq 0x4340
movsd -0x40(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xf9d6(%rip), %rsi      # 0x1518e
callq 0x4340
movsd -0x38(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xf9ca(%rip), %rsi      # 0x1519e
callq 0x4340
movsd -0x30(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xf8ed(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0x1085a(%rip), %rsi     # 0x16099
callq 0x4340
movq -0x3b8(%rbp), %rsi
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0xf914(%rip), %rsi      # 0x15171
callq 0x4340
movsd -0x48(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xf906(%rip), %rsi      # 0x1517f
callq 0x4340
movsd -0x40(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xf8f9(%rip), %rsi      # 0x1518e
callq 0x4340
movsd -0x38(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
leaq 0xf8ed(%rip), %rsi      # 0x1519e
callq 0x4340
movsd -0x30(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
callq 0x41a0
movq -0x2a8(%rbp), %rax
movq %r12, -0xa0(%rbp)
movq %rax, -0x98(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x8a32
addq $0x2, -0x50(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0xca72
leaq -0x438(%rbp), %rdi
callq 0xca72
leaq -0x398(%rbp), %rdi
callq 0x6d26
movq %r13, %r14
movq -0x90(%rbp), %r13
jmp 0x5c2f
movq 0x196b6(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xf7b0(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0xf7a0(%rip), %rsi      # 0x1511c
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
movq %rax, %rdi
pushq $0x5d
popq %rsi
callq 0x43f0
movq %rax, %rdi
leaq 0xf752(%rip), %rsi      # 0x15112
callq 0x4340
movq %rax, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
leaq 0xf742(%rip), %rsi      # 0x1511c
callq 0x4340
movq %rax, %rdi
callq 0x41a0
leaq 0x48(%r13), %rbx
movq (%rbx), %rbx
testq %rbx, %rbx
je 0x5a08
leaq 0x8(%rbx), %rsi
leaq -0x130(%rbp), %rdi
callq 0x6c70
movq %r12, (%rax)
jmp 0x59eb
movq 0x88(%r13), %rbx
leaq 0x78(%r13), %r15
cmpq %r15, %rbx
je 0x5a38
leaq 0x20(%rbx), %rsi
leaq -0x100(%rbp), %rdi
callq 0x6c70
movq %r12, (%rax)
movq %rbx, %rdi
callq 0x43d0
movq %rax, %rbx
jmp 0x5a13
movq -0x80(%rbp), %rax
movq 0x140(%rax), %rdx
leaq -0x1190(%rbp), %rbx
movq %rbx, %rdi
leaq 0xf6df(%rip), %rsi      # 0x15133
movq %r12, %rcx
xorl %eax, %eax
callq 0x4080
leaq 0x70(%r13), %rdi
leaq -0x368(%rbp), %rsi
movq %rbx, %rdx
callq 0x693e
leaq -0x78(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
callq 0x13d18
movq %rax, %rbx
movq %r15, %rdi
movq %r13, %rsi
callq 0x13d8e
movq %rax, %r15
leaq -0x78(%rbp), %rdi
movq %r13, %rsi
leaq -0x48(%rbp), %rdx
leaq -0x40(%rbp), %rcx
callq 0x13ac2
leaq -0x78(%rbp), %rdi
movq %r13, %rsi
leaq -0x38(%rbp), %rdx
leaq -0x60(%rbp), %rcx
callq 0x13b2a
leaq -0x78(%rbp), %rdi
movq %r13, %rsi
leaq -0x30(%rbp), %rdx
leaq -0x58(%rbp), %rcx
callq 0x13c22
leaq -0x988(%rbp), %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movq %rax, %rdi
movq %r15, %rsi
callq 0x4240
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movq 0x50(%r13), %rsi
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movq %rax, %rdi
movq %rbx, %rsi
callq 0x4240
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movsd -0x38(%rbp), %xmm0
mulsd 0xf4d1(%rip), %xmm0     # 0x15008
cvttpd2dq %xmm0, %xmm0
cvtdq2pd %xmm0, %xmm0
divsd 0xf4c9(%rip), %xmm0     # 0x15010
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movsd -0x60(%rbp), %xmm0
mulsd 0xf4a1(%rip), %xmm0     # 0x15008
cvttpd2dq %xmm0, %xmm0
cvtdq2pd %xmm0, %xmm0
divsd 0xf4a1(%rip), %xmm0     # 0x15018
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movsd -0x30(%rbp), %xmm0
movsd 0xf479(%rip), %xmm1     # 0x15010
mulsd %xmm1, %xmm0
cvttpd2dq %xmm0, %xmm0
cvtdq2pd %xmm0, %xmm0
divsd %xmm1, %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movsd -0x58(%rbp), %xmm0
movsd 0xf449(%rip), %xmm1     # 0x15010
mulsd %xmm1, %xmm0
cvttpd2dq %xmm0, %xmm0
cvtdq2pd %xmm0, %xmm0
divsd %xmm1, %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movsd -0x48(%rbp), %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
pushq $0x9
popq %rsi
callq 0x43f0
movsd -0x40(%rbp), %xmm0
movsd 0xf409(%rip), %xmm1     # 0x15018
mulsd %xmm1, %xmm0
cvttpd2dq %xmm0, %xmm0
cvtdq2pd %xmm0, %xmm0
divsd %xmm1, %xmm0
movq %rax, %rdi
callq 0x45c0
movq %rax, %rdi
callq 0x41a0
movq %r14, %rdi
callq 0xca72
movq %r14, %rdi
callq 0x4310
movq %r13, %rdi
callq 0x6d3e
movq %r13, %rdi
callq 0x4310
leaq -0x2d8(%rbp), %rdi
callq 0x6d72
movq -0x50(%rbp), %rax
jmp 0x4fe5
xorl %ecx, %ecx
pushq $0x30
popq %r13
leaq -0x130(%rbp), %rbx
leaq -0x1190(%rbp), %r14
leaq -0xd88(%rbp), %r15
movq %rcx, -0x1190(%rbp)
movq -0x300(%rbp), %rax
subq -0x308(%rbp), %rax
cqto
idivq %r13
decq %rax
cmpq %rax, %rcx
ja 0x5d1f
movq %rbx, %rdi
movq %r14, %rsi
callq 0x8adc
movq -0x1190(%rbp), %rsi
leaq -0x128(%rbp), %rcx
cmpq %rcx, %rax
je 0x5cf1
movq %r15, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0x10558(%rip), %rsi     # 0x16229
callq 0x4340
movq %rax, %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x6c70
movq (%rax), %rsi
movq %r12, %rdi
callq 0x4240
jmp 0x5d08
movq %r15, %rdi
callq 0x4240
movq %rax, %rdi
leaq 0xf4a7(%rip), %rsi      # 0x151aa
callq 0x4340
movq %rax, %rdi
callq 0x41a0
movq -0x1190(%rbp), %rcx
incq %rcx
jmp 0x5c7f
pushq $0x1
popq %rcx
leaq -0x100(%rbp), %rbx
leaq -0x2d8(%rbp), %r14
leaq -0x1190(%rbp), %r15
leaq -0xb88(%rbp), %r13
movq %rcx, -0x2d8(%rbp)
movq -0x2e8(%rbp), %rax
subq -0x2f0(%rbp), %rax
cqto
pushq $0x48
popq %rsi
idivq %rsi
decq %rax
cmpq %rax, %rcx
ja 0x5e20
movq %rbx, %rdi
movq %r14, %rsi
callq 0x8adc
leaq -0xf8(%rbp), %rcx
cmpq %rcx, %rax
je 0x5dd1
movq -0x2d8(%rbp), %rdx
movq %r15, %rdi
leaq -0x368(%rbp), %rsi
callq 0x9c96
movq %r13, %rdi
movq %r15, %rsi
callq 0x42d0
movq %rax, %rdi
leaq 0x10480(%rip), %rsi     # 0x16229
callq 0x4340
movq %rax, %r12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x6c70
movq (%rax), %rsi
movq %r12, %rdi
callq 0x4240
movq %rax, %rdi
callq 0x41a0
jmp 0x5e09
movq -0x2d8(%rbp), %rdx
movq %r15, %rdi
leaq -0x368(%rbp), %rsi
callq 0x9c96
movq %r13, %rdi
movq %r15, %rsi
callq 0x42d0
movq %rax, %rdi
leaq 0xf3ae(%rip), %rsi      # 0x151aa
callq 0x4340
movq %rax, %rdi
callq 0x41a0
movq %r15, %rdi
callq 0x4180
movq -0x2d8(%rbp), %rcx
incq %rcx
jmp 0x5d3e
leaq -0xd88(%rbp), %rdi
callq 0x4510
leaq -0xb88(%rbp), %rdi
callq 0x4510
movq 0x191a9(%rip), %rdi     # 0x1efe8
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0xf341(%rip), %rsi      # 0x151ad
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
pushq $0x5b
popq %rsi
callq 0x43f0
movq %rax, %rbx
callq 0xec60
movq %rbx, %rdi
movq %rax, %rsi
callq 0x4340
pushq $0x5d
popq %rsi
movq %rax, %rdi
callq 0x43f0
leaq 0xf2f5(%rip), %rsi      # 0x151ad
movq %rax, %rdi
callq 0x4340
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x41a0
leaq -0x788(%rbp), %rdi
callq 0x4510
leaq -0x988(%rbp), %rdi
callq 0x4510
leaq -0x100(%rbp), %rdi
callq 0x76fa
leaq -0x130(%rbp), %rdi
callq 0x76fa
leaq -0xd0(%rbp), %rdi
callq 0x7750
leaq -0x528(%rbp), %rdi
callq 0x6da4
leaq -0x4a8(%rbp), %rdi
callq 0xca72
leaq -0x368(%rbp), %rdi
callq 0x6dce
leaq -0x588(%rbp), %rdi
callq 0x4680
xorl %ebx, %ebx
leaq -0xb88(%rbp), %rdi
callq 0x4550
leaq -0xd88(%rbp), %rdi
callq 0x4550
leaq -0x988(%rbp), %rdi
callq 0x4550
leaq -0x788(%rbp), %rdi
callq 0x4550
movl %ebx, %eax
addq $0x1568, %rsp           # imm = 0x1568
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x6088
movq %rax, %rbx
leaq -0x150(%rbp), %rdi
callq 0x4180
jmp 0x5f9b
movq %rax, %rbx
leaq -0x170(%rbp), %rdi
callq 0x4180
jmp 0x60fa
movq %rax, %rbx
jmp 0x60fa
movq %rax, %rbx
leaq -0x190(%rbp), %rdi
callq 0x4180
jmp 0x6106
movq %rax, %rbx
jmp 0x6106
movq %rax, %rbx
leaq -0x1b0(%rbp), %rdi
callq 0x4180
jmp 0x5fe4
movq %rax, %rbx
leaq -0x1d0(%rbp), %rdi
callq 0x4180
jmp 0x5ff5
movq %rax, %rbx
leaq -0x1f0(%rbp), %rdi
callq 0x4180
jmp 0x6112
jmp 0x6065
movq %rax, %rbx
jmp 0x611e
movq %rax, %rbx
jmp 0x612a
movq %rax, %rbx
jmp 0x6136
movq %rax, %rbx
jmp 0x6142
jmp 0x6088
jmp 0x6088
jmp 0x6092
jmp 0x60a3
jmp 0x60a3
movq %rax, %rbx
leaq -0x458(%rbp), %rdi
callq 0x4180
jmp 0x60be
movq %rax, %rbx
jmp 0x60b2
jmp 0x608d
jmp 0x608d
jmp 0x6088
jmp 0x6088
jmp 0x6088
jmp 0x6088
movq %rax, %rbx
movq %r14, %rdi
callq 0x4310
jmp 0x60ca
jmp 0x6088
jmp 0x606d
movq %rax, %rbx
jmp 0x6112
movq %rax, %rbx
leaq -0x1190(%rbp), %rdi
callq 0x4180
jmp 0x60ca
jmp 0x6088
jmp 0x608d
jmp 0x608d
jmp 0x608d
jmp 0x608d
movq %rax, %rbx
jmp 0x60ca
movq %rax, %rbx
jmp 0x60be
movq %rax, %rbx
leaq -0x3e8(%rbp), %rdi
callq 0xca72
jmp 0x60a6
movq %rax, %rbx
leaq -0x438(%rbp), %rdi
callq 0xca72
leaq -0x398(%rbp), %rdi
callq 0x6d26
leaq -0x2d8(%rbp), %rdi
callq 0x6d72
leaq -0x100(%rbp), %rdi
callq 0x76fa
leaq -0x130(%rbp), %rdi
callq 0x76fa
leaq -0xd0(%rbp), %rdi
callq 0x7750
leaq -0x528(%rbp), %rdi
callq 0x6da4
leaq -0x4a8(%rbp), %rdi
callq 0xca72
leaq -0x368(%rbp), %rdi
callq 0x6dce
leaq -0x588(%rbp), %rdi
callq 0x4680
leaq -0xb88(%rbp), %rdi
callq 0x4550
leaq -0xd88(%rbp), %rdi
callq 0x4550
leaq -0x988(%rbp), %rdi
callq 0x4550
leaq -0x788(%rbp), %rdi
callq 0x4550
movq %rbx, %rdi
callq 0x4660