// File: /workspace/github_cpp_makefile_star2_O1/AraKhachatryan[P]GraphAlgo/main.cpp
// Function: main
int main()
{
	// Printing a headline in terminal, used namespace termianl for text colors
	std::cout << std::endl;
	std::cout << "~~~~~~~~~~~~~~~ "
			  << terminal::TEXT_BOLD << terminal::TEXTCOLOR_BLUE
			  << "GraphAlgo: Algorithms library for planar graphs."
			  << terminal::RESET_ALL
			  << "~~~~~~~~~~~~~~~" << std::endl;
	
	// Initialize an empty graph object
	GraphAlgo::graph g;

	// Build a graph via adding edges
	g.add_edge(1, 2);
	g.add_edge(1, 4);	
	g.add_edge(2, 4);
	g.add_edge(2, 5);
	g.add_edge(3, 4);
	g.add_edge(3, 6);
	g.add_edge(3, 12);
	g.add_edge(3, 13);
	g.add_edge(4, 6);
	g.add_edge(4, 7);
	g.add_edge(5, 7);
	g.add_edge(6, 11);
	g.add_edge(6, 12);
	g.add_edge(7, 10);
	g.add_edge(7, 11);
	g.add_edge(8, 10);
	g.add_edge(8, 16);
	g.add_edge(9, 10);
	g.add_edge(9, 11);
	g.add_edge(9, 15);
	g.add_edge(10, 16);
	g.add_edge(11, 14);
	g.add_edge(12, 13);
	g.add_edge(14, 15);
	g.add_edge(15, 16);
	
	
	// Drawing a graph on terminal for visualisation
	draw_graph( graph_data );
	
	
	std::cout << "Printing graph as adjacency-list:" << std::endl;
	g.print_neighborhood();
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DFS Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	// making dfs object and starting the algorithm from vertex 1 in graph g
	GraphAlgo::dfs depth_first(g, 1);
	
	GraphAlgo::graph g_out_dfs;
	g_out_dfs = depth_first();
	
	
	std::cout << "Executing DFS algorithm on initial graph with start vertex 1" << std::endl;
	// Drawing a graph on terminal for DFS Algorithm visualisation
	draw_graph( graph_data_dfs );	
	
	
	std::cout << "Print DFS algorithm output as adjacency-list:" << std::endl;
	g_out_dfs.print_neighborhood();
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~ Connectivity Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	GraphAlgo::graph g_con = g;   // copy intitial graph		
	g_con.remove_vertex(7);       // remove vertex for disconecting a graph
	g_con.remove_edge(6, 11);     // remove edge for disconecting a graph
	
	std::cout << "Vertex 7 and edge (6, 11) removed from initial graph.";
	std::cout << std::endl;
//	g_con.print_neighborhood();
	
	
	// Drawing a graph on terminal for Connectivity visualisation
	draw_graph( graph_data_connectivity );	
	
	
	// making connectivity object and starting the algorithm
	GraphAlgo::connectivity con(g_con);
	
	if( !con.is_connected() )
	{
		std::cout << "Graph is not connected." << std::endl;
	} else {
		std::cout << "Graph not connected." << std::endl;
	}
	
	GraphAlgo::graphs con_out;
	con_out = con();
	
	std::cout << "Printing disconected graph's conected components:";
	std::cout << std::endl;
	
	GraphAlgo::graphs::const_iterator c_it = con_out.begin();
	for( ; c_it != con_out.end(); ++c_it) 
	{	
		std::cout << "+++++++++++++++++++++++" << std::endl;
		c_it->print_neighborhood();
	}
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~ BiConnectivity Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	 
	GraphAlgo::graph g_bicon = g;  // copy intitial graph
	g_bicon.remove_edge(6, 11);    // for making graph not biconected
	
	std::cout << "From initial graph is removed edge(6, 11)." << std::endl;
//	g_bicon.print_neighborhood();
	
	
	// Drawing a graph on terminal for BiConnectivity visualisation
	draw_graph( graph_data_biconnectivity );	
	
	
	// making biconnectivity object and starting the algorithm
	GraphAlgo::biconnectivity bicon( g_bicon );
	
	if ( !bicon.is_biconnected() ) 
	{
		std::cout << "Graph is not bicoconnected." << std::endl;
		// Print cutvertices
		bicon.print_cutvertices();
	} else {
		std::cout << "Graph is bicoconnected." << std::endl;
	}
	
	GraphAlgo::graphs bicon_out;
	bicon_out = bicon();
	
	std::cout << "Printing graph's biconected components:" << std::endl;
	GraphAlgo::graphs::const_iterator b_it = bicon_out.begin();
	for( ; b_it != bicon_out.end(); ++b_it) 
	{
		std::cout << "+++++++++++++++++++++++" << std::endl;
		b_it->print_neighborhood();
	}
	
	std::this_thread::sleep_for(std::chrono::milliseconds(4000));  // sleep
	
	
	
	
	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dijkstra's Algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	// making dijkstra object from initial graph g
	GraphAlgo::dijkstra dijk(g);
	
	// 
	dijk.set_edge_weight(1, 2, 1);
	dijk.set_edge_weight(1, 4, 5);	
	dijk.set_edge_weight(2, 4, 3);
	dijk.set_edge_weight(2, 5, 2);
	dijk.set_edge_weight(3, 4, 4);
	dijk.set_edge_weight(3, 6, 2);
	dijk.set_edge_weight(3, 12, 3);
	dijk.set_edge_weight(3, 13, 1);
	dijk.set_edge_weight(4, 6, 6);
	dijk.set_edge_weight(4, 7, 3);
	dijk.set_edge_weight(5, 7, 1);
	dijk.set_edge_weight(6, 11, 5);
	dijk.set_edge_weight(6, 12, 1);
	dijk.set_edge_weight(7, 10, 2);
	dijk.set_edge_weight(7, 11, 9);
	dijk.set_edge_weight(8, 10, 1);
	dijk.set_edge_weight(8, 16, 1);
	dijk.set_edge_weight(9, 10, 3);
	dijk.set_edge_weight(9, 11, 4);
	dijk.set_edge_weight(9, 15, 2);
	dijk.set_edge_weight(10, 16, 3);
	dijk.set_edge_weight(11, 14, 1);
	dijk.set_edge_weight(12, 13, 2);
	dijk.set_edge_weight(14, 15, 1);
	dijk.set_edge_weight(15, 16, 2);
	
	
	// Drawing a graph on terminal for Dijkstra's Algorithm visualisation
	draw_graph( graph_data_dijkstra);	
	

	dijk.shortest_paths_from(1);
	dijk.get_shortest_path_to(14);
	dijk.print_path();
	std::cout << std::endl;
	
	// another shortest path: from 1 to 9
	dijk.get_shortest_path_to(9);
	dijk.print_path();
	std::cout << std::endl;

	// another shortest path: from 13 to 8
	dijk.shortest_paths_from(13);
	dijk.get_shortest_path_to(8);
	dijk.print_path();


	std::cout << std::endl << std::endl;
	std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
	std::cout << std::endl << std::endl;
	
	
	return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x760, %rsp            # imm = 0x760
movq 0x8209(%rip), %r14      # 0x11fd8
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x371b(%rip), %rsi      # 0xd518
movl $0x10, %edx
movq %r14, %rdi
callq 0x2180
leaq 0x3aec(%rip), %rbx      # 0xd8fd
movl $0x2, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2180
movq %r14, %rdi
movl $0x1, %esi
callq 0x21f0
movq %rax, %r15
leaq 0x3ac8(%rip), %r14      # 0xd900
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x2180
movl $0x2, %edx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x2180
movq %r15, %rdi
movl $0x22, %esi
callq 0x21f0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x2180
leaq 0x36aa(%rip), %rsi      # 0xd529
movl $0x30, %edx
movq %r15, %rdi
callq 0x2180
movl $0x2, %edx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x2180
movq %r15, %rdi
xorl %esi, %esi
callq 0x21f0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x2180
leaq 0x38b4(%rip), %rsi      # 0xd774
movl $0xf, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x48(%rsp), %rbx
movq %rbx, %rdi
callq 0x8c52
leaq 0x288(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x2, (%rdx)
movq %rbx, %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x5, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0xa, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0xb, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0xc, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0xe, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x288(%rsp), %rsi
movl $0xf, (%rsi)
leaq 0xa8(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0x48(%rsp), %rdi
callq 0x8596
leaq 0x7e74(%rip), %rdi      # 0x12130
callq 0xb47e
movq 0x7d10(%rip), %rbx      # 0x11fd8
leaq 0x328b(%rip), %rsi      # 0xd55a
movl $0x21, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7cde(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x48(%rsp), %rdi
callq 0x8d26
leaq 0x288(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xa345
callq 0x2040
cmpl $0x4, (%rax)
je 0xa32b
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7c75(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x7c37(%rip), %rbx      # 0x11fd8
leaq 0x31d4(%rip), %rsi      # 0xd57c
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7c05(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x288(%rsp), %rdx
movl $0x1, (%rdx)
leaq 0x628(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x6042
leaq 0x520(%rsp), %rdi
callq 0x8c52
leaq 0x628(%rsp), %rdi
callq 0x5f8c
leaq 0x520(%rsp), %rdi
movq %rax, %rsi
callq 0x8cb8
movq 0x7b7d(%rip), %rbx      # 0x11fd8
leaq 0x316a(%rip), %rsi      # 0xd5cc
movl $0x3c, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7b4b(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x7ca7(%rip), %rdi      # 0x12148
callq 0xb47e
movq 0x7b2b(%rip), %rbx      # 0x11fd8
leaq 0x3155(%rip), %rsi      # 0xd609
movl $0x2d, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7af9(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x520(%rsp), %rdi
callq 0x8d26
leaq 0x288(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xa52d
callq 0x2040
cmpl $0x4, (%rax)
je 0xa513
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7a8d(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x7a4f(%rip), %rbx      # 0x11fd8
leaq 0x30a7(%rip), %rsi      # 0xd637
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7a1d(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x460(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x8b72
leaq 0x460(%rsp), %rdi
movl $0x7, %esi
callq 0x807c
leaq 0x460(%rsp), %rdi
movl $0x6, %esi
movl $0xb, %edx
callq 0x8136
movq 0x79a4(%rip), %rbx      # 0x11fd8
leaq 0x304c(%rip), %rsi      # 0xd687
movl $0x35, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7972(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x7ae6(%rip), %rdi      # 0x12160
callq 0xb47e
leaq 0x580(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0x5e52
leaq 0x580(%rsp), %rdi
callq 0x5e22
leaq 0x302d(%rip), %rcx      # 0xd6d5
leaq 0x300e(%rip), %rsi      # 0xd6bd
testb %al, %al
cmovneq %rcx, %rsi
xorb $0x1, %al
movzbl %al, %eax
leaq (%rax,%rax,2), %rdx
addq $0x14, %rdx
movq 0x790f(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x78e9(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
leaq 0x580(%rsp), %rdi
callq 0x5ef6
leaq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0xb666
movq 0x78aa(%rip), %rbx      # 0x11fd8
leaq 0x2fb5(%rip), %rsi      # 0xd6ea
movl $0x31, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7878(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x30(%rsp), %r14
cmpq 0x38(%rsp), %r14
je 0xa7cd
leaq 0x2f99(%rip), %r15      # 0xd71c
movl $0x17, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %r14, %rdi
callq 0x8d26
addq $0x60, %r14
cmpq 0x38(%rsp), %r14
jne 0xa783
leaq 0x288(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xa7fe
callq 0x2040
cmpl $0x4, (%rax)
je 0xa7e4
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x77bc(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x777e(%rip), %rbx      # 0x11fd8
leaq 0x2ed3(%rip), %rsi      # 0xd734
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x774c(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x4c0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x8b72
leaq 0x4c0(%rsp), %rdi
movl $0x6, %esi
movl $0xb, %edx
callq 0x8136
movq 0x76e5(%rip), %rbx      # 0x11fd8
leaq 0x2e8a(%rip), %rsi      # 0xd784
movl $0x2a, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x76b3(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x783f(%rip), %rdi      # 0x12178
callq 0xb47e
leaq 0x288(%rsp), %rdi
leaq 0x4c0(%rsp), %rsi
callq 0x4998
leaq 0x288(%rsp), %rdi
callq 0x44ec
testb %al, %al
je 0xa9ac
movq 0x766d(%rip), %rbx      # 0x11fd8
leaq 0x2e59(%rip), %rsi      # 0xd7cb
movl $0x17, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x763b(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
jmp 0xa9ff
movq 0x7625(%rip), %rbx      # 0x11fd8
leaq 0x2df5(%rip), %rsi      # 0xd7af
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x75f3(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x288(%rsp), %rdi
callq 0x4502
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x4cb4
leaq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0xb666
movq 0x75a7(%rip), %rbx      # 0x11fd8
leaq 0x2dab(%rip), %rsi      # 0xd7e3
movl $0x27, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7575(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x10(%rsp), %r14
cmpq 0x18(%rsp), %r14
je 0xaad0
leaq 0x2c96(%rip), %r15      # 0xd71c
movl $0x17, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %r14, %rdi
callq 0x8d26
addq $0x60, %r14
cmpq 0x18(%rsp), %r14
jne 0xaa86
leaq 0xa8(%rsp), %r14
movq $0x4, (%r14)
movq $0x0, 0x8(%r14)
movq %r14, %rdi
movq %r14, %rsi
callq 0x2080
cmpl $-0x1, %eax
jne 0xab01
callq 0x2040
cmpl $0x4, (%rax)
je 0xaae7
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x74b9(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x747b(%rip), %rbx      # 0x11fd8
leaq 0x2ca7(%rip), %rsi      # 0xd80b
movl $0x4f, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x7449(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x6ec4
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x2, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x28df(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x28bc(%rip), %xmm0     # 0xd4e8
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2899(%rip), %xmm0     # 0xd4f0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x5, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2876(%rip), %xmm0     # 0xd4f8
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x4, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2853(%rip), %xmm0     # 0xd500
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2820(%rip), %xmm0     # 0xd4f8
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x27ed(%rip), %xmm0     # 0xd4f0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x27b2(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x6, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x27af(%rip), %xmm0     # 0xd508
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x276c(%rip), %xmm0     # 0xd4f0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x5, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x7, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2731(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x270e(%rip), %xmm0     # 0xd4e8
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x6, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xc, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x26db(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x26c8(%rip), %xmm0     # 0xd4f8
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x7, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x26b5(%rip), %xmm0     # 0xd510
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x265a(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x8, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x262f(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xa, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2614(%rip), %xmm0     # 0xd4f0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xb, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x25f9(%rip), %xmm0     # 0xd500
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0x9, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x25c6(%rip), %xmm0     # 0xd4f8
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0xa, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2593(%rip), %xmm0     # 0xd4f0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0xb, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2558(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0xc, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xd, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2545(%rip), %xmm0     # 0xd4f8
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0xe, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0xf, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x2502(%rip), %xmm0     # 0xd4e0
callq 0x6a08
leaq 0x8(%rsp), %rsi
movl $0xf, (%rsi)
leaq 0xc(%rsp), %rdx
movl $0x10, (%rdx)
leaq 0xa8(%rsp), %rdi
movsd 0x24ef(%rip), %xmm0     # 0xd4f8
callq 0x6a08
leaq 0x717b(%rip), %rdi      # 0x12190
callq 0xb47e
leaq 0x8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0x6e30
leaq 0x8(%rsp), %rdx
movl $0xe, (%rdx)
leaq 0x270(%rsp), %r14
leaq 0xa8(%rsp), %rsi
movq %r14, %rdi
callq 0x6928
movq 0x270(%rsp), %rdi
cmpq %r14, %rdi
je 0xb077
movq (%rdi), %r15
movl $0x18, %esi
callq 0x2160
movq %r15, %rdi
cmpq %r14, %r15
jne 0xb062
leaq 0xa8(%rsp), %rdi
callq 0x674c
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6f36(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x8(%rsp), %rdx
movl $0x9, (%rdx)
leaq 0x258(%rsp), %r14
leaq 0xa8(%rsp), %rsi
movq %r14, %rdi
callq 0x6928
movq 0x258(%rsp), %rdi
cmpq %r14, %rdi
je 0xb0f7
movq (%rdi), %r15
movl $0x18, %esi
callq 0x2160
movq %r15, %rdi
cmpq %r14, %r15
jne 0xb0e2
leaq 0xa8(%rsp), %rdi
callq 0x674c
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6eb6(%rip), %rbx      # 0x11fd8
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0x8(%rsp), %rsi
movl $0xd, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0x6e30
leaq 0x8(%rsp), %rdx
movl $0x8, (%rdx)
leaq 0x240(%rsp), %r14
leaq 0xa8(%rsp), %rsi
movq %r14, %rdi
callq 0x6928
movq 0x240(%rsp), %rdi
cmpq %r14, %rdi
je 0xb18f
movq (%rdi), %r15
movl $0x18, %esi
callq 0x2160
movq %r15, %rdi
cmpq %r14, %r15
jne 0xb17a
leaq 0xa8(%rsp), %rdi
callq 0x674c
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6e1e(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq 0x6de0(%rip), %rbx      # 0x11fd8
leaq 0x265c(%rip), %rsi      # 0xd85b
movl $0x50, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6dae(%rip), %rdi      # 0x11fd8
callq 0x2030
movq %rax, %rdi
callq 0x20e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x20e0
leaq 0xa8(%rsp), %rdi
callq 0x7196
leaq 0x10(%rsp), %rdi
callq 0x4db0
leaq 0x288(%rsp), %rdi
callq 0x4c36
leaq 0x4c0(%rsp), %rdi
callq 0x8c7e
leaq 0x30(%rsp), %rdi
callq 0x4db0
leaq 0x580(%rsp), %rdi
callq 0x5ed6
leaq 0x460(%rsp), %rdi
callq 0x8c7e
leaq 0x520(%rsp), %rdi
callq 0x8c7e
leaq 0x628(%rsp), %rdi
callq 0x625a
leaq 0x48(%rsp), %rdi
callq 0x8c7e
xorl %eax, %eax
addq $0x760, %rsp            # imm = 0x760
popq %rbx
popq %r14
popq %r15
retq
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb3eb
jmp 0xb402
jmp 0xb3cb
jmp 0xb42b
jmp 0xb3d2
jmp 0xb3fd
movq %rax, %rbx
jmp 0xb45f
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
jmp 0xb3e3
movq %rax, %rbx
jmp 0xb438
movq %rax, %rbx
jmp 0xb40f
jmp 0xb402
movq %rax, %rbx
jmp 0xb41c
jmp 0xb42b
movq %rax, %rbx
jmp 0xb445
jmp 0xb402
jmp 0xb42b
jmp 0xb402
jmp 0xb42b
jmp 0xb3fd
jmp 0xb3e3
movq %rax, %rbx
jmp 0xb46c
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x7196
jmp 0xb405
movq %rax, %rbx
jmp 0xb452
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x4db0
leaq 0x288(%rsp), %rdi
callq 0x4c36
leaq 0x4c0(%rsp), %rdi
callq 0x8c7e
jmp 0xb42e
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x4db0
leaq 0x580(%rsp), %rdi
callq 0x5ed6
leaq 0x460(%rsp), %rdi
callq 0x8c7e
leaq 0x520(%rsp), %rdi
callq 0x8c7e
leaq 0x628(%rsp), %rdi
callq 0x625a
leaq 0x48(%rsp), %rdi
callq 0x8c7e
movq %rbx, %rdi
callq 0x2200