// File: /workspace/github_cpp_makefile_star2_O2/flastest[P]HeterogeneousParallelDijkstra/BGL_Dijkstra.cc
// Function: parallel_dijkstra_thread(std::vector<bool, std::allocator<bool>>&, int, std::priority_queue<std::pair<unsigned long, float>, std::vector<std::pair<unsigned long, float>, std::allocator<std::pair<unsigned long, float>>>, Offer_Comparator>&, std::map<unsigned long, float, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, float>>>&, std::map<unsigned long, std::shared_ptr<std::mutex>, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::shared_ptr<std::mutex>>>>&, std::map<unsigned long, std::shared_ptr<std::mutex>, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::shared_ptr<std::mutex>>>>&, std::map<unsigned long, unsigned long, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, unsigned long>>>&, boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, int, boost::no_property>, boost::no_property, boost::listS> const&)
void parallel_dijkstra_thread(vector<bool>& done,
					int thread_id,
					offer_pqueue_t& offer_pq,
					distance_map_t& distances,
					mutex_map_t& distance_mutexes,
					mutex_map_t& predecessor_mutexes,
					predecessor_map_t& predecessors,
					const graph_t& graph)
{
	if (DEBUG_THREAD) print_thread_debug(thread_id, "starting thread", debug_file_stream);
	if (DEBUG) std::cout<<"starting a thread" <<std::endl;
	const auto weight = get(edge_weight, graph);
	if (DEBUG) std::cout<< "is thread done? it shouldn't be. This should be true " <<!done[thread_id]<<std::endl;
	while(!done[thread_id])
	{
		if (DEBUG_THREAD) 
		{
			print_thread_debug(thread_id, "this thread isn't done yet", debug_file_stream);
			std::string debug = offer_pq.empty() ? "offer_pq is empty" : "offer_pq isn't empty";
			print_thread_debug(thread_id, debug, debug_file_stream); 
		}
		if (DEBUG) std::cout <<"this thread isn't done yet" <<std::endl;
		if (DEBUG) std::cout <<"is the offer_pq empty? 1 for yes, 0 for no: " <<offer_pq.empty()<<std::endl;
		


		if(!offer_pq.empty())
		{
			if (DEBUG_THREAD) 
			{

				print_thread_debug(thread_id, "offer_pq isn't empty", debug_file_stream);
				print_thread_debug(thread_id, std::to_string(offer_pq.size())+" amount of offers in offer pqueue", debug_file_stream);
			}
			if(DEBUG) std::cout<<"the offer pq isn't empty."<<std::endl;

			bool offer_found = false;

			offer_t offer;
			{
				print_thread_debug(thread_id, "locking offer", debug_file_stream);
				if (DEBUG) std::cout<<"locking offer"<<std::endl;
				//std::lock_guard<std::mutex> guard(pq_mutex);
				if(!offer_pq.empty())
				{
					offer = offer_pq.top();
					offer_pq.pop();
					if (DEBUG_THREAD) print_thread_debug(thread_id, std::to_string(offer_pq.size())+" amount of offers in offer pqueue", debug_file_stream);
					if (DEBUG_THREAD) print_thread_debug(thread_id, "offer is locked. its node is "+std::to_string(offer.first)+" and its dist is " +std::to_string(offer.second), debug_file_stream);
					offer_found = true;
				}
				print_thread_debug(thread_id, "unlocking offer", debug_file_stream);
			}	


			if (offer_found)
			{
				if (DEBUG) std::cout<< "we've obtained offer"<<std::endl; 
				const auto vertex = offer.first;
				const auto offer_distance = offer.second;
				bool explore = false;

				if (DEBUG) std::cout<<"offer distance is "<<offer_distance<<std::endl;
				{
					std::lock_guard<std::mutex> guard(*distance_mutexes[vertex]);
					if (DEBUG_THREAD) print_thread_debug(thread_id, "offer distance is " +std::to_string(offer_distance) + " and the already done distance is " + std::to_string(distances[vertex]), debug_file_stream);
					if(DEBUG) std::cout<<"offer distance is "<<offer_distance <<" and distances[vertex] is "<<distances[vertex] <<std::endl;
					if(offer_distance < distances[vertex])
					{
						if (DEBUG) std::cout <<"updating distances of " <<vertex<< " to offer_distance" <<std::endl;
						if (DEBUG_THREAD) print_thread_debug(thread_id, "updating distance of " + std::to_string(vertex) + " to offer distance", debug_file_stream);
						distances[vertex] = offer_distance;
						explore = true;
					}
				}


				if (explore) 
				{

					auto [start, finish] = out_edges(vertex,graph);

					for(;start != finish; start++)
					{

						vertex_descriptor neighbor = target(*start, graph);

						float weight_of_edge = get(weight, *start);

						float vd = offer_distance + weight_of_edge;

						{
						}

						relax_vertex(neighbor, 
							vertex,
						   	vd,  
			   				offer_pq,
			   				distance_mutexes, 
			   				distances,
			   				predecessor_mutexes,
							predecessors,
			   				thread_id );
					}
				}
			}
		}
		else // priority  queue is empty
		{	

			if(DEBUG) std::cout<< "this thread is done!" <<std::endl;
			{
				std::lock_guard<std::mutex> guard(done_mutex);
				done[thread_id] = true;
			}

			//const struct timespec NANOSEC = { 0, 1 };
			//nanosleep(&NANOSEC, NULL);
			if (DEBUG_THREAD) print_thread_debug(thread_id, "this thread is done!", debug_file_stream);


			if (DEBUG)
			{
				std::cout << "length of done is "<<done.size()<<std::endl;
				std::cout << "done[0] is "<<done[0]<<std::endl;
				std::cout <<"thread id is" <<thread_id<<std::endl;
			}

			int i = 0;
			//make sure all the other threads are done too
			while(done[i] && i < done.size()) 
			{
				i++;
			}
			if(i == done.size())
			{
				return;
			} //still need to take care of this livelock TO DO TODO 
			done[thread_id] = false;
		}
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x278, %rsp            # imm = 0x278
movq %r9, 0x60(%rsp)
movq %r8, 0x58(%rsp)
movq %rcx, 0x18(%rsp)
movq %rdx, %r12
movq %rsi, 0x8(%rsp)
movq %rdi, %rbp
cmpb $0x1, 0xd2d7(%rip)      # 0x17260
jne 0x9fca
leaq 0x5a6c(%rip), %rsi      # 0xf9fe
leaq 0x108(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x6c72
leaq 0xd315(%rip), %rdx      # 0x172c0
leaq 0x108(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x96ec
leaq 0x108(%rsp), %rdi
callq 0x3110
movb 0xd2c1(%rip), %al       # 0x17291
cmpb $0x1, %al
jne 0x9ff5
movq 0xcfed(%rip), %rdi      # 0x16fc8
leaq 0x5a2c(%rip), %rsi      # 0xfa0e
callq 0x3270
movq %rax, %rdi
callq 0x3140
movb 0xd29c(%rip), %al       # 0x17291
testb $0x1, %al
je 0xa03c
movq 0xcfc8(%rip), %rdi      # 0x16fc8
leaq 0x5a19(%rip), %rsi      # 0xfa20
callq 0x3270
movq %rax, %rbx
movslq 0x8(%rsp), %rsi
movq %rbp, %rdi
movq %rsi, 0x28(%rsp)
callq 0xb130
xorl %esi, %esi
testq %rdx, (%rax)
sete %sil
movq %rbx, %rdi
callq 0x33c0
movq %rax, %rdi
callq 0x3140
jmp 0xa046
movslq 0x8(%rsp), %rax
movq %rax, 0x28(%rsp)
leaq 0xe8(%rsp), %r15
movq %r12, 0x50(%rsp)
movq %rbp, %rdi
movq 0x28(%rsp), %rsi
callq 0xb130
testq %rdx, (%rax)
jne 0xa8ff
cmpb $0x1, 0xd1f0(%rip)      # 0x17260
jne 0xa10c
movq %r15, %rdi
leaq 0x59d6(%rip), %rsi      # 0xfa56
leaq 0x30(%rsp), %rdx
callq 0x6c72
movq 0x8(%rsp), %rdi
movq %r15, %rsi
leaq 0xd227(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r15, %rdi
callq 0x3110
movq (%r12), %rax
cmpq 0x8(%r12), %rax
leaq 0x59cd(%rip), %rsi      # 0xfa83
leaq 0x59b4(%rip), %rax      # 0xfa71
cmoveq %rax, %rsi
leaq 0x30(%rsp), %r14
movq %r14, %rdi
leaq 0x68(%rsp), %rdx
callq 0x6c72
leaq 0x228(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0x3310
movq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xd1cb(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r13, %rdi
callq 0x3110
leaq 0x30(%rsp), %rdi
callq 0x3110
movb 0xd17f(%rip), %al       # 0x17291
cmpb $0x1, %al
jne 0xa137
movq 0xceab(%rip), %rdi      # 0x16fc8
leaq 0x5932(%rip), %rsi      # 0xfa56
callq 0x3270
movq %rax, %rdi
callq 0x3140
movb 0xd15a(%rip), %al       # 0x17291
testb $0x1, %al
je 0xa16d
movq 0xce86(%rip), %rdi      # 0x16fc8
leaq 0x594f(%rip), %rsi      # 0xfa98
callq 0x3270
movq (%r12), %rcx
xorl %esi, %esi
cmpq 0x8(%r12), %rcx
sete %sil
movq %rax, %rdi
callq 0x33c0
movq %rax, %rdi
callq 0x3140
movq (%r12), %rax
cmpq 0x8(%r12), %rax
je 0xa3f2
cmpb $0x1, 0xd0dd(%rip)      # 0x17260
leaq 0x30(%rsp), %r14
leaq 0x208(%rsp), %r15
jne 0xa217
movq %r15, %rdi
leaq 0x58e3(%rip), %rsi      # 0xfa83
movq %r14, %rdx
callq 0x6c72
movq 0x8(%rsp), %rdi
movq %r15, %rsi
leaq 0xd109(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r15, %rdi
callq 0x3110
movq 0x8(%r12), %rsi
subq (%r12), %rsi
sarq $0x4, %rsi
movq %r14, %rdi
callq 0xb0b3
leaq 0x1e8(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
leaq 0x58d7(%rip), %rdx      # 0xfac5
callq 0x6953
movq 0x8(%rsp), %rdi
movq %r15, %rsi
leaq 0xd0be(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r15, %rdi
callq 0x3110
movq %r14, %rdi
callq 0x3110
cmpb $0x1, 0xd073(%rip)      # 0x17291
jne 0xa23b
movq 0xcda1(%rip), %rdi      # 0x16fc8
leaq 0x58b9(%rip), %rsi      # 0xfae7
callq 0x3270
movq %rax, %rdi
callq 0x3140
leaq 0x1c8(%rsp), %r15
movq %r15, %rdi
leaq 0x58e6(%rip), %rsi      # 0xfb33
movq %r14, %rdx
callq 0x6c72
movq 0x8(%rsp), %rdi
movq %r15, %rsi
leaq 0xd05c(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r15, %rdi
callq 0x3110
cmpb $0x1, 0xd019(%rip)      # 0x17291
jne 0xa295
movq 0xcd47(%rip), %rdi      # 0x16fc8
leaq 0x58ab(%rip), %rsi      # 0xfb33
callq 0x3270
movq %rax, %rdi
callq 0x3140
movq (%r12), %r15
movq 0x8(%r12), %r14
cmpq %r14, %r15
je 0xa565
movq (%r15), %rax
movq %rax, 0x20(%rsp)
movss 0x8(%r15), %xmm0
movss %xmm0, 0x4(%rsp)
movq %r12, %rdi
callq 0xb14e
movb 0xcf97(%rip), %al       # 0x17260
cmpb $0x1, %al
jne 0xa32d
movq 0x8(%r12), %rsi
subq (%r12), %rsi
sarq $0x4, %rsi
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
callq 0xb0b3
leaq 0x1a8(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x57c9(%rip), %rdx      # 0xfac5
callq 0x6953
movq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xcfb0(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r13, %rdi
callq 0x3110
leaq 0x30(%rsp), %rdi
callq 0x3110
movb 0xcf33(%rip), %al       # 0x17260
testb $0x1, %al
je 0xa577
leaq 0xa8(%rsp), %rbx
movq %rbx, %rdi
movq 0x20(%rsp), %rsi
callq 0xb0b3
leaq 0x68(%rsp), %r13
movq %r13, %rdi
leaq 0x57a8(%rip), %rsi      # 0xfb01
movq %rbx, %rdx
callq 0xb08f
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
leaq 0x57af(%rip), %rdx      # 0xfb1f
callq 0x6953
leaq 0x88(%rsp), %rbx
movq %rbx, %rdi
movss 0x4(%rsp), %xmm0
callq 0xb0f5
leaq 0x188(%rsp), %r13
movq %r13, %rdi
leaq 0x30(%rsp), %rsi
movq %rbx, %rdx
callq 0x6972
movq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xcf0e(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r13, %rdi
callq 0x3110
leaq 0x88(%rsp), %rdi
callq 0x3110
leaq 0x30(%rsp), %rdi
callq 0x3110
leaq 0x68(%rsp), %rdi
callq 0x3110
leaq 0xa8(%rsp), %rdi
callq 0x3110
jmp 0xa577
cmpb $0x1, 0xce98(%rip)      # 0x17291
jne 0xa416
movq 0xcbc6(%rip), %rdi      # 0x16fc8
leaq 0x57f1(%rip), %rsi      # 0xfbfa
callq 0x3270
movq %rax, %rdi
callq 0x3140
leaq 0xd0a3(%rip), %r14      # 0x174c0
movq %r14, %rdi
callq 0xb74e
movq %rbp, %rdi
movq 0x28(%rsp), %rsi
callq 0xb130
orq %rdx, (%rax)
movq %r14, %rdi
callq 0x3210
cmpb $0x1, 0xce1c(%rip)      # 0x17260
jne 0xa47e
leaq 0x128(%rsp), %r14
movq %r14, %rdi
leaq 0x57a2(%rip), %rsi      # 0xfbfa
leaq 0x30(%rsp), %rdx
callq 0x6c72
movq 0x8(%rsp), %rdi
movq %r14, %rsi
leaq 0xce4f(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r14, %rdi
callq 0x3110
cmpb $0x1, 0xce0c(%rip)      # 0x17291
jne 0xa519
movq 0xcb36(%rip), %r13      # 0x16fc8
movq %r13, %rdi
leaq 0x5773(%rip), %rsi      # 0xfc0f
callq 0x3270
movq 0x10(%rbp), %rcx
movl 0x18(%rbp), %edx
subq (%rbp), %rcx
leaq (%rdx,%rcx,8), %rsi
movq %rax, %rdi
callq 0x31c0
movq %rax, %rdi
callq 0x3140
movq %r13, %rdi
leaq 0x5758(%rip), %rsi      # 0xfc22
callq 0x3270
movq %rax, %r14
movq %rbp, %rdi
xorl %esi, %esi
callq 0xb130
xorl %esi, %esi
testq %rdx, (%rax)
setne %sil
movq %r14, %rdi
callq 0x33c0
movq %rax, %rdi
callq 0x3140
movq %r13, %rdi
leaq 0x572f(%rip), %rsi      # 0xfc2e
callq 0x3270
movq %rax, %rdi
movq 0x8(%rsp), %rsi
callq 0x3410
movq %rax, %rdi
callq 0x3140
pushq $-0x1
popq %r14
incq %r14
movq %rbp, %rdi
movq %r14, %rsi
callq 0xb130
movq 0x10(%rbp), %rcx
subq (%rbp), %rcx
movl 0x18(%rbp), %esi
leaq (%rsi,%rcx,8), %rcx
testq %rdx, (%rax)
je 0xa544
cmpq %r14, %rcx
ja 0xa51d
cmpq %rcx, %r14
je 0xa8ff
movq %rbp, %rdi
movq 0x28(%rsp), %rsi
callq 0xb130
notq %rdx
andq %rdx, (%rax)
jmp 0xa053
xorps %xmm0, %xmm0
movss %xmm0, 0x4(%rsp)
movq $0x0, 0x20(%rsp)
leaq 0xc8(%rsp), %r13
movq %r13, %rdi
leaq 0x55a8(%rip), %rsi      # 0xfb31
leaq 0x30(%rsp), %rdx
callq 0x6c72
movq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xcd1e(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r13, %rdi
callq 0x3110
cmpq %r14, %r15
leaq 0xe8(%rsp), %r15
je 0xa053
movb 0xcccb(%rip), %al       # 0x17291
cmpb $0x1, %al
jne 0xa5eb
movq 0xc9f7(%rip), %rdi      # 0x16fc8
leaq 0x5569(%rip), %rsi      # 0xfb41
callq 0x3270
movq %rax, %rdi
callq 0x3140
movb 0xcca6(%rip), %al       # 0x17291
movq 0x20(%rsp), %rcx
movq %rcx, 0x10(%rsp)
testb $0x1, %al
leaq 0x30(%rsp), %rbx
leaq 0x68(%rsp), %r15
je 0xa62c
movq 0xc9be(%rip), %rdi      # 0x16fc8
leaq 0x5545(%rip), %rsi      # 0xfb56
callq 0x3270
movq %rax, %rdi
movss 0x4(%rsp), %xmm0
callq 0x3200
movq %rax, %rdi
callq 0x3140
movq 0x58(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xb040
movq (%rax), %r12
movq %r12, %rdi
callq 0xb74e
cmpb $0x1, 0xcc13(%rip)      # 0x17260
jne 0xa70c
leaq 0xa8(%rsp), %r14
movq %r14, %rdi
movss 0x4(%rsp), %xmm0
callq 0xb0f5
movq %r15, %rdi
leaq 0x54e3(%rip), %rsi      # 0xfb56
movq %r14, %rdx
callq 0xb08f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x54e1(%rip), %rdx      # 0xfb69
callq 0x6953
movq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xaf02
leaq 0x88(%rsp), %r14
movss (%rax), %xmm0
movq %r14, %rdi
callq 0xb0f5
leaq 0x168(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x6972
movq 0x8(%rsp), %rdi
movq %r13, %rsi
leaq 0xcbeb(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r13, %rdi
callq 0x3110
leaq 0x88(%rsp), %rdi
callq 0x3110
movq %rbx, %rdi
callq 0x3110
movq %r15, %rdi
callq 0x3110
leaq 0xa8(%rsp), %rdi
callq 0x3110
cmpb $0x1, 0xcb7e(%rip)      # 0x17291
jne 0xa76b
movq 0xc8ac(%rip), %rdi      # 0x16fc8
leaq 0x5433(%rip), %rsi      # 0xfb56
callq 0x3270
movq %rax, %rdi
movss 0x4(%rsp), %xmm0
callq 0x3200
movq %rax, %rdi
leaq 0x544c(%rip), %rsi      # 0xfb8c
callq 0x3270
movq %rax, %r14
movq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xaf02
movss (%rax), %xmm0
movq %r14, %rdi
callq 0x3200
movq %rax, %rdi
callq 0x3140
movq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xaf02
movss (%rax), %xmm0
ucomiss 0x4(%rsp), %xmm0
jbe 0xa8e5
cmpb $0x1, 0xcb01(%rip)      # 0x17291
jne 0xa7c9
movq 0xc82f(%rip), %rdi      # 0x16fc8
leaq 0x5407(%rip), %rsi      # 0xfba7
callq 0x3270
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x31c0
movq %rax, %rdi
leaq 0x5402(%rip), %rsi      # 0xfbbe
callq 0x3270
movq %rax, %rdi
callq 0x3140
cmpb $0x1, 0xca90(%rip)      # 0x17260
jne 0xa837
movq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0xb0b3
movq %rbx, %rdi
leaq 0x53e8(%rip), %rsi      # 0xfbd1
movq %r15, %rdx
callq 0xb08f
leaq 0x148(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
leaq 0x53e1(%rip), %rdx      # 0xfbe7
callq 0x6953
movq 0x8(%rsp), %rdi
movq %r14, %rsi
leaq 0xcaa6(%rip), %rdx      # 0x172c0
callq 0x96ec
movq %r14, %rdi
callq 0x3110
movq %rbx, %rdi
callq 0x3110
movq %r15, %rdi
callq 0x3110
movq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xaf02
movss 0x4(%rsp), %xmm0
movss %xmm0, (%rax)
movq %r12, %rdi
callq 0x3210
movq 0x10(%rsp), %rbx
shlq $0x5, %rbx
movq 0x2b8(%rsp), %rax
addq 0x18(%rax), %rbx
movq %rbx, %r13
movq (%r13), %r13
cmpq %rbx, %r13
leaq 0x248(%rsp), %r12
je 0xa8ed
movq 0x18(%r13), %rax
cvtsi2ssl (%rax), %xmm0
movq 0x10(%r13), %r14
addss 0x4(%rsp), %xmm0
movss %xmm0, 0x20(%rsp)
movq 0x10(%rsp), %r15
movq %r12, %rdi
movq 0x58(%rsp), %rsi
callq 0xb480
movq %r14, %rdi
movq %r15, %rsi
movss 0x20(%rsp), %xmm0
movq 0x50(%rsp), %rdx
movq %r12, %rcx
movq 0x18(%rsp), %r8
movq 0x60(%rsp), %r9
pushq 0x8(%rsp)
pushq 0x2b8(%rsp)
callq 0x9b6b
popq %rax
popq %rcx
movq %r12, %rdi
callq 0xb706
jmp 0xa870
movq %r12, %rdi
callq 0x3210
leaq 0xe8(%rsp), %r15
movq 0x50(%rsp), %r12
jmp 0xa053
addq $0x278, %rsp            # imm = 0x278
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x108(%rsp), %rdi
jmp 0xaaa2
jmp 0xaaab
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
callq 0x3110
jmp 0xa93b
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x3110
jmp 0xa94a
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
jmp 0xaa56
jmp 0xaab0
movq %rax, %rbx
leaq 0x128(%rsp), %rdi
jmp 0xaaa2
jmp 0xaaab
movq %rax, %rbx
leaq 0x188(%rsp), %rdi
callq 0x3110
jmp 0xa983
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x3110
jmp 0xa995
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x3110
jmp 0xa9a4
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x3110
jmp 0xa9b3
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
jmp 0xaaa2
movq %rax, %rbx
leaq 0x1a8(%rsp), %rdi
jmp 0xaa0d
jmp 0xaa14
movq %rax, %rbx
leaq 0x168(%rsp), %rdi
callq 0x3110
jmp 0xa9e4
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x3110
jmp 0xaa3a
movq %rax, %rbx
jmp 0xaa44
movq %rax, %rbx
jmp 0xaa4e
jmp 0xaab0
movq %rax, %rbx
leaq 0x1e8(%rsp), %rdi
callq 0x3110
jmp 0xaa83
movq %rax, %rbx
jmp 0xaa83
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
jmp 0xaaa2
jmp 0xaaab
movq %rax, %rbx
leaq 0xca8b(%rip), %rdi      # 0x174c0
jmp 0xaab6
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x3110
leaq 0x68(%rsp), %rdi
callq 0x3110
leaq 0xa8(%rsp), %rdi
callq 0x3110
jmp 0xaab3
jmp 0xaaab
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
jmp 0xaaa2
movq %rax, %rbx
leaq 0x228(%rsp), %rdi
callq 0x3110
jmp 0xaa83
jmp 0xaaab
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
jmp 0xaaa2
movq %rax, %rbx
leaq 0x1c8(%rsp), %rdi
jmp 0xaaa2
movq %rax, %rbx
leaq 0xc8(%rsp), %rdi
callq 0x3110
jmp 0xaacd
jmp 0xaaab
movq %rax, %rbx
jmp 0xaacd
movq %rax, %rbx
movq %r12, %rdi
callq 0x3210
jmp 0xaacd
movq %rax, %rbx
leaq 0x248(%rsp), %rdi
callq 0xb706
movq %rbx, %rdi
callq 0x3420