// File: CMU-SAFARI[P]MQSim/src/exec/SSD_Device.cpp
// Function: SSD_Device::SSD_Device(Device_Parameter_Set*, std::vector<IO_Flow_Parameter_Set*, std::allocator<IO_Flow_Parameter_Set*>>*)
SSD_Device::SSD_Device(Device_Parameter_Set *parameters, std::vector<IO_Flow_Parameter_Set *> *io_flows) : MQSimEngine::Sim_Object("SSDDevice")
{
	SSD_Device *device = this;
	my_instance = device; //used for static functions
	Simulator->AddObject(device);

	device->Preconditioning_required = parameters->Enabled_Preconditioning;
	device->Memory_Type = parameters->Memory_Type;

	switch (Memory_Type)
	{
	case NVM::NVM_Type::FLASH:
	{
		sim_time_type *read_latencies, *write_latencies;
		sim_time_type average_flash_read_latency = 0, average_flash_write_latency = 0; //Required for FTL initialization

		//Step 1: create memory chips (flash chips in our case)
		switch (parameters->Flash_Parameters.Flash_Technology)
		{
		case Flash_Technology_Type::SLC:
			read_latencies = new sim_time_type[1];
			read_latencies[0] = parameters->Flash_Parameters.Page_Read_Latency_LSB;
			write_latencies = new sim_time_type[1];
			write_latencies[0] = parameters->Flash_Parameters.Page_Program_Latency_LSB;
			average_flash_read_latency = read_latencies[0];
			average_flash_write_latency = write_latencies[0];
			break;
		case Flash_Technology_Type::MLC:
			read_latencies = new sim_time_type[2];
			read_latencies[0] = parameters->Flash_Parameters.Page_Read_Latency_LSB;
			read_latencies[1] = parameters->Flash_Parameters.Page_Read_Latency_MSB;
			write_latencies = new sim_time_type[2];
			write_latencies[0] = parameters->Flash_Parameters.Page_Program_Latency_LSB;
			write_latencies[1] = parameters->Flash_Parameters.Page_Program_Latency_MSB;
			average_flash_read_latency = (read_latencies[0] + read_latencies[1]) / 2;
			average_flash_write_latency = (write_latencies[0] + write_latencies[1]) / 2;
			break;
		case Flash_Technology_Type::TLC:
			read_latencies = new sim_time_type[3];
			read_latencies[0] = parameters->Flash_Parameters.Page_Read_Latency_LSB;
			read_latencies[1] = parameters->Flash_Parameters.Page_Read_Latency_CSB;
			read_latencies[2] = parameters->Flash_Parameters.Page_Read_Latency_MSB;
			write_latencies = new sim_time_type[3];
			write_latencies[0] = parameters->Flash_Parameters.Page_Program_Latency_LSB;
			write_latencies[1] = parameters->Flash_Parameters.Page_Program_Latency_CSB;
			write_latencies[2] = parameters->Flash_Parameters.Page_Program_Latency_MSB;
			average_flash_read_latency = (read_latencies[0] + read_latencies[1] + read_latencies[2]) / 3;
			average_flash_write_latency = (write_latencies[0] + write_latencies[1] + write_latencies[2]) / 3;
			break;
		default:
			throw std::invalid_argument("The specified flash technologies is not supported");
		}

		//Step 2: create memory channels to connect chips to the controller
		this->Channel_count = parameters->Flash_Channel_Count;
		this->Chip_no_per_channel = parameters->Chip_No_Per_Channel;
		switch (parameters->Flash_Comm_Protocol)
		{
		case SSD_Components::ONFI_Protocol::NVDDR2:
		{
			SSD_Components::ONFI_Channel_NVDDR2 **channels = new SSD_Components::ONFI_Channel_NVDDR2 *[parameters->Flash_Channel_Count];
			for (unsigned int channel_cntr = 0; channel_cntr < parameters->Flash_Channel_Count; channel_cntr++)
			{
				NVM::FlashMemory::Flash_Chip **chips = new NVM::FlashMemory::Flash_Chip *[parameters->Chip_No_Per_Channel];
				for (unsigned int chip_cntr = 0; chip_cntr < parameters->Chip_No_Per_Channel; chip_cntr++)
				{
					chips[chip_cntr] = new NVM::FlashMemory::Flash_Chip(device->ID() + ".Channel." + std::to_string(channel_cntr) + ".Chip." + std::to_string(chip_cntr),
																		channel_cntr, chip_cntr, parameters->Flash_Parameters.Flash_Technology, parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
																		parameters->Flash_Parameters.Block_No_Per_Plane, parameters->Flash_Parameters.Page_No_Per_Block,
																		read_latencies, write_latencies, parameters->Flash_Parameters.Block_Erase_Latency,
																		parameters->Flash_Parameters.Suspend_Program_Time, parameters->Flash_Parameters.Suspend_Erase_Time);
					Simulator->AddObject(chips[chip_cntr]); //Each simulation object (a child of MQSimEngine::Sim_Object) should be added to the engine
				}
				channels[channel_cntr] = new SSD_Components::ONFI_Channel_NVDDR2(channel_cntr, parameters->Chip_No_Per_Channel,
																				 chips, parameters->Flash_Channel_Width,
																				 (sim_time_type)((double)1000 / parameters->Channel_Transfer_Rate) * 2, (sim_time_type)((double)1000 / parameters->Channel_Transfer_Rate) * 2);
				device->Channels.push_back(channels[channel_cntr]); //Channels should not be added to the simulator core, they are passive object that do not handle any simulation event
			}

			//Step 3: create channel controller and connect channels to it
			device->PHY = new SSD_Components::NVM_PHY_ONFI_NVDDR2(device->ID() + ".PHY", channels, parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel,
																  parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die);
			Simulator->AddObject(device->PHY);
			break;
		}
		default:
			throw std::invalid_argument("No implementation is available for the specified flash communication protocol");
		}
		delete[] read_latencies;
		delete[] write_latencies;

		//Steps 4 - 8: create FTL components and connect them together
		SSD_Components::FTL *ftl = new SSD_Components::FTL(device->ID() + ".FTL", NULL, parameters->Flash_Channel_Count,
														   parameters->Chip_No_Per_Channel, parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
														   parameters->Flash_Parameters.Block_No_Per_Plane, parameters->Flash_Parameters.Page_No_Per_Block,
														   parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, average_flash_read_latency, average_flash_write_latency, parameters->Overprovisioning_Ratio,
														   parameters->Flash_Parameters.Block_PE_Cycles_Limit, parameters->Seed++);
		ftl->PHY = (SSD_Components::NVM_PHY_ONFI *)PHY;
		Simulator->AddObject(ftl);
		device->Firmware = ftl;

		//Step 5: create TSU
		SSD_Components::TSU_Base *tsu;
		bool erase_suspension = false, program_suspension = false;
		if (parameters->Flash_Parameters.CMD_Suspension_Support == NVM::FlashMemory::Command_Suspension_Mode::PROGRAM)
		{
			program_suspension = true;
		}
		if (parameters->Flash_Parameters.CMD_Suspension_Support == NVM::FlashMemory::Command_Suspension_Mode::ERASE)
		{
			erase_suspension = true;
		}
		if (parameters->Flash_Parameters.CMD_Suspension_Support == NVM::FlashMemory::Command_Suspension_Mode::PROGRAM_ERASE)
		{
			program_suspension = true;
			erase_suspension = true;
		}
		switch (parameters->Transaction_Scheduling_Policy)
		{
		case SSD_Components::Flash_Scheduling_Type::OUT_OF_ORDER:
			tsu = new SSD_Components::TSU_OutOfOrder(ftl->ID() + ".TSU", ftl, static_cast<SSD_Components::NVM_PHY_ONFI_NVDDR2 *>(device->PHY),
													 parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel,
													 parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
													 parameters->Preferred_suspend_write_time_for_read, parameters->Preferred_suspend_erase_time_for_read,
													 parameters->Preferred_suspend_erase_time_for_write,
													 erase_suspension, program_suspension);
			break;
		case SSD_Components::Flash_Scheduling_Type::PRIORITY_OUT_OF_ORDER:
			tsu = new SSD_Components::TSU_Priority_OutOfOrder(ftl->ID() + ".TSU", ftl, static_cast<SSD_Components::NVM_PHY_ONFI_NVDDR2 *>(device->PHY),
										  parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel,
										  parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
										  parameters->Preferred_suspend_write_time_for_read, parameters->Preferred_suspend_erase_time_for_read,
										  parameters->Preferred_suspend_erase_time_for_write,
										  erase_suspension, program_suspension);
			break;
		/*case SSD_Components::Flash_Scheduling_Type::FLIN:
				{
					unsigned int * stream_count_per_priority_class = new unsigned int[4];
					for (int i = 0; i < 4; i++)
						stream_count_per_priority_class[i] = 0;
					for (auto &flow : (*io_flows))
						stream_count_per_priority_class[(int)flow->Priority_Class]++;
					stream_id_type** stream_ids_per_priority_class = new stream_id_type*[4];
					for (int i = 0; i < 4; i++)
						stream_ids_per_priority_class[i] = new stream_id_type[stream_count_per_priority_class[i]];

					tsu = new SSD_Components::TSU_FLIN(ftl->ID() + ".TSU", ftl, static_cast<SSD_Components::NVM_PHY_ONFI_NVDDR2*>(device->PHY),
						parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel,
						parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die, parameters->Flash_Parameters.Page_Capacity,
						10000000, 33554432, 262144, 4, (unsigned int)io_flows->size(), stream_count_per_priority_class, stream_ids_per_priority_class,
						0.6,
						parameters->Preferred_suspend_write_time_for_read, parameters->Preferred_suspend_erase_time_for_read, parameters->Preferred_suspend_erase_time_for_write,
						erase_suspension, program_suspension);
					break;
				}*/
		default:
			throw std::invalid_argument("No implementation is available for the specified transaction scheduling algorithm");
		}
		Simulator->AddObject(tsu);
		ftl->TSU = tsu;

		//Step 6: create Flash_Block_Manager
		SSD_Components::Flash_Block_Manager_Base *fbm;
		fbm = new SSD_Components::Flash_Block_Manager(NULL, parameters->Flash_Parameters.Block_PE_Cycles_Limit,
													  (unsigned int)io_flows->size(), parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel,
													  parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
													  parameters->Flash_Parameters.Block_No_Per_Plane, parameters->Flash_Parameters.Page_No_Per_Block);
		ftl->BlockManager = fbm;

		//Step 7: create Address_Mapping_Unit
		SSD_Components::Address_Mapping_Unit_Base *amu;
		std::vector<std::vector<flash_channel_ID_type>> flow_channel_id_assignments;
		std::vector<std::vector<flash_chip_ID_type>> flow_chip_id_assignments;
		std::vector<std::vector<flash_die_ID_type>> flow_die_id_assignments;
		std::vector<std::vector<flash_plane_ID_type>> flow_plane_id_assignments;
		unsigned int stream_count = 0;
		for (unsigned int i = 0; i < io_flows->size(); i++)
		{
			switch (parameters->HostInterface_Type)
			{
			case HostInterface_Types::SATA:
			{
				stream_count = 1;
				std::vector<flash_channel_ID_type> channel_ids;
				flow_channel_id_assignments.push_back(channel_ids);
				for (unsigned int j = 0; j < parameters->Flash_Channel_Count; j++)
				{
					flow_channel_id_assignments[i].push_back(j);
				}
				std::vector<flash_chip_ID_type> chip_ids;
				flow_chip_id_assignments.push_back(chip_ids);
				for (unsigned int j = 0; j < parameters->Chip_No_Per_Channel; j++)
				{
					flow_chip_id_assignments[i].push_back(j);
				}
				std::vector<flash_die_ID_type> die_ids;
				flow_die_id_assignments.push_back(die_ids);
				for (unsigned int j = 0; j < parameters->Flash_Parameters.Die_No_Per_Chip; j++)
				{
					flow_die_id_assignments[i].push_back(j);
				}
				std::vector<flash_plane_ID_type> plane_ids;
				flow_plane_id_assignments.push_back(plane_ids);
				for (unsigned int j = 0; j < parameters->Flash_Parameters.Plane_No_Per_Die; j++)
				{
					flow_plane_id_assignments[i].push_back(j);
				}
				break;
			}
			case HostInterface_Types::NVME:
			{
				stream_count = (unsigned int)io_flows->size();
				std::vector<flash_channel_ID_type> channel_ids;
				flow_channel_id_assignments.push_back(channel_ids);
				for (int j = 0; j < (*io_flows)[i]->Channel_No; j++)
				{
					flow_channel_id_assignments[i].push_back((*io_flows)[i]->Channel_IDs[j]);
				}
				std::vector<flash_chip_ID_type> chip_ids;
				flow_chip_id_assignments.push_back(chip_ids);
				for (int j = 0; j < (*io_flows)[i]->Chip_No; j++)
				{
					flow_chip_id_assignments[i].push_back((*io_flows)[i]->Chip_IDs[j]);
				}
				std::vector<flash_die_ID_type> die_ids;
				flow_die_id_assignments.push_back(die_ids);
				for (int j = 0; j < (*io_flows)[i]->Die_No; j++)
				{
					flow_die_id_assignments[i].push_back((*io_flows)[i]->Die_IDs[j]);
				}
				std::vector<flash_plane_ID_type> plane_ids;
				flow_plane_id_assignments.push_back(plane_ids);
				for (int j = 0; j < (*io_flows)[i]->Plane_No; j++)
				{
					flow_plane_id_assignments[i].push_back((*io_flows)[i]->Plane_IDs[j]);
				}
				break;
			}
			default:
				break;
			}
		}

		Utils::Logical_Address_Partitioning_Unit::Allocate_logical_address_for_flows(parameters->HostInterface_Type, (unsigned int)io_flows->size(),
																					 parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel, parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
																					 flow_channel_id_assignments, flow_chip_id_assignments, flow_die_id_assignments, flow_plane_id_assignments,
																					 parameters->Flash_Parameters.Block_No_Per_Plane, parameters->Flash_Parameters.Page_No_Per_Block,
																					 parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, parameters->Overprovisioning_Ratio);
		switch (parameters->Address_Mapping)
		{
		case SSD_Components::Flash_Address_Mapping_Type::PAGE_LEVEL:
			amu = new SSD_Components::Address_Mapping_Unit_Page_Level(ftl->ID() + ".AddressMappingUnit", ftl, (SSD_Components::NVM_PHY_ONFI *)device->PHY,
																	  fbm, parameters->Ideal_Mapping_Table, parameters->CMT_Capacity, parameters->Plane_Allocation_Scheme, stream_count,
																	  parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel, parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
																	  flow_channel_id_assignments, flow_chip_id_assignments, flow_die_id_assignments, flow_plane_id_assignments,
																	  parameters->Flash_Parameters.Block_No_Per_Plane, parameters->Flash_Parameters.Page_No_Per_Block,
																	  parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, parameters->Flash_Parameters.Page_Capacity, parameters->Overprovisioning_Ratio,
																	  parameters->CMT_Sharing_Mode);
			break;
		case SSD_Components::Flash_Address_Mapping_Type::HYBRID:
			amu = new SSD_Components::Address_Mapping_Unit_Hybrid(ftl->ID() + ".AddressMappingUnit", ftl, (SSD_Components::NVM_PHY_ONFI *)device->PHY,
																  fbm, parameters->Ideal_Mapping_Table, stream_count,
																  parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel, parameters->Flash_Parameters.Die_No_Per_Chip,
																  parameters->Flash_Parameters.Plane_No_Per_Die, parameters->Flash_Parameters.Block_No_Per_Plane, parameters->Flash_Parameters.Page_No_Per_Block,
																  parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, parameters->Flash_Parameters.Page_Capacity, parameters->Overprovisioning_Ratio);
			break;
		default:
			throw std::invalid_argument("No implementation is available fo the secified address mapping strategy");
		}
		Simulator->AddObject(amu);
		ftl->Address_Mapping_Unit = amu;

		//Step 8: create GC_and_WL_unit
		double max_rho = 0;
		for (unsigned int i = 0; i < io_flows->size(); i++)
		{
			if ((*io_flows)[i]->Initial_Occupancy_Percentage > max_rho)
			{
				max_rho = (*io_flows)[i]->Initial_Occupancy_Percentage;
			}
		}
		max_rho /= 100; //Convert from percentage to a value between zero and 1
		SSD_Components::GC_and_WL_Unit_Base *gcwl;
		gcwl = new SSD_Components::GC_and_WL_Unit_Page_Level(ftl->ID() + ".GCandWLUnit", amu, fbm, tsu, (SSD_Components::NVM_PHY_ONFI *)device->PHY,
															 parameters->GC_Block_Selection_Policy, parameters->GC_Exec_Threshold, parameters->Preemptible_GC_Enabled, parameters->GC_Hard_Threshold,
															 parameters->Flash_Channel_Count, parameters->Chip_No_Per_Channel,
															 parameters->Flash_Parameters.Die_No_Per_Chip, parameters->Flash_Parameters.Plane_No_Per_Die,
															 parameters->Flash_Parameters.Block_No_Per_Plane, parameters->Flash_Parameters.Page_No_Per_Block,
															 parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, parameters->Use_Copyback_for_GC, max_rho, 10,
															 parameters->Seed++);
		Simulator->AddObject(gcwl);
		fbm->Set_GC_and_WL_Unit(gcwl);
		ftl->GC_and_WL_Unit = gcwl;

		//Step 9: create Data_Cache_Manager
		SSD_Components::Data_Cache_Manager_Base *dcm;
		SSD_Components::Caching_Mode *caching_modes = new SSD_Components::Caching_Mode[io_flows->size()];
		for (unsigned int i = 0; i < io_flows->size(); i++)
		{
			caching_modes[i] = (*io_flows)[i]->Device_Level_Data_Caching_Mode;
		}

		switch (parameters->Caching_Mechanism)
		{
		case SSD_Components::Caching_Mechanism::SIMPLE:
			dcm = new SSD_Components::Data_Cache_Manager_Flash_Simple(device->ID() + ".DataCache", NULL, ftl, (SSD_Components::NVM_PHY_ONFI *)device->PHY,
																	  parameters->Data_Cache_Capacity, parameters->Data_Cache_DRAM_Row_Size, parameters->Data_Cache_DRAM_Data_Rate,
																	  parameters->Data_Cache_DRAM_Data_Busrt_Size, parameters->Data_Cache_DRAM_tRCD, parameters->Data_Cache_DRAM_tCL, parameters->Data_Cache_DRAM_tRP,
																	  caching_modes, (unsigned int)io_flows->size(),
																	  parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, parameters->Flash_Channel_Count * parameters->Chip_No_Per_Channel * parameters->Flash_Parameters.Die_No_Per_Chip * parameters->Flash_Parameters.Plane_No_Per_Die * parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE);

			break;
		case SSD_Components::Caching_Mechanism::ADVANCED:
			dcm = new SSD_Components::Data_Cache_Manager_Flash_Advanced(device->ID() + ".DataCache", NULL, ftl, (SSD_Components::NVM_PHY_ONFI *)device->PHY,
																		parameters->Data_Cache_Capacity, parameters->Data_Cache_DRAM_Row_Size, parameters->Data_Cache_DRAM_Data_Rate,
																		parameters->Data_Cache_DRAM_Data_Busrt_Size, parameters->Data_Cache_DRAM_tRCD, parameters->Data_Cache_DRAM_tCL, parameters->Data_Cache_DRAM_tRP,
																		caching_modes, parameters->Data_Cache_Sharing_Mode, (unsigned int)io_flows->size(),
																		parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, parameters->Flash_Channel_Count * parameters->Chip_No_Per_Channel * parameters->Flash_Parameters.Die_No_Per_Chip * parameters->Flash_Parameters.Plane_No_Per_Die * parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE);

			break;
		default:
			PRINT_ERROR("Unknown data caching mechanism!")
		}

		Simulator->AddObject(dcm);
		ftl->Data_cache_manager = dcm;
		device->Cache_manager = dcm;

		//Step 10: create Host_Interface
		switch (parameters->HostInterface_Type)
		{
		case HostInterface_Types::NVME:
			device->Host_interface = new SSD_Components::Host_Interface_NVMe(device->ID() + ".HostInterface",
																			 Utils::Logical_Address_Partitioning_Unit::Get_total_device_lha_count(), parameters->IO_Queue_Depth, parameters->IO_Queue_Depth,
																			 (unsigned int)io_flows->size(), parameters->Queue_Fetch_Size, parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, dcm);
			break;
		case HostInterface_Types::SATA:
			device->Host_interface = new SSD_Components::Host_Interface_SATA(device->ID() + ".HostInterface",
																			 parameters->IO_Queue_Depth, Utils::Logical_Address_Partitioning_Unit::Get_total_device_lha_count(), parameters->Flash_Parameters.Page_Capacity / SECTOR_SIZE_IN_BYTE, dcm);

			break;
		default:
			break;
		}
		Simulator->AddObject(device->Host_interface);
		dcm->Set_host_interface(device->Host_interface);
		break;
	}
	default:
		throw std::invalid_argument("Undefined NVM type specified ");
	} // switch (Memory_Type)
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xae8, %rsp            # imm = 0xAE8
movq %rdi, 0xae0(%rsp)
movq %rsi, 0xad8(%rsp)
movq %rdx, 0xad0(%rsp)
movq 0xae0(%rsp), %rax
movq %rax, 0x3b8(%rsp)
leaq 0xaaf(%rsp), %rdi
movq %rdi, 0x3c0(%rsp)
callq 0x8780
movq 0x3c0(%rsp), %rdx
leaq 0x823d3(%rip), %rsi     # 0xab730
leaq 0xab0(%rsp), %rdi
callq 0x85d0
jmp 0x2936c
movq 0x3b8(%rsp), %rdi
leaq 0xab0(%rsp), %rsi
callq 0x1fd60
jmp 0x29383
leaq 0xab0(%rsp), %rdi
callq 0x8848
leaq 0xaaf(%rsp), %rdi
callq 0x84a0
movq 0x3b8(%rsp), %rdi
addq $0x30, %rdi
callq 0x1fde0
movq 0x3b8(%rsp), %rdi
leaq 0xaf753(%rip), %rax     # 0xd8b10
movq %rax, (%rdi)
leaq 0xaf781(%rip), %rax     # 0xd8b48
movq %rax, 0x30(%rdi)
addq $0x60, %rdi
movq %rdi, 0x3a8(%rsp)
callq 0x2cf80
movq 0x3b8(%rsp), %rax
movq %rax, 0xa90(%rsp)
movq 0xa90(%rsp), %rax
movq %rax, 0xb1285(%rip)     # 0xda680
callq 0x46500
movq %rax, 0x3b0(%rsp)
jmp 0x2940a
movq 0x3b0(%rsp), %rdi
movq 0xa90(%rsp), %rsi
callq 0x465c0
jmp 0x29421
movq 0x3b8(%rsp), %rax
leaq 0xb100c(%rip), %rcx     # 0xda43c
movb (%rcx), %dl
movq 0xa90(%rsp), %rcx
andb $0x1, %dl
movb %dl, 0x38(%rcx)
leaq 0xb11b1(%rip), %rcx     # 0xda5f8
movl (%rcx), %edx
movq 0xa90(%rsp), %rcx
movl %edx, 0x3c(%rcx)
movl 0x3c(%rax), %eax
testl %eax, %eax
je 0x294c2
jmp 0x2c631
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29497
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0xab0(%rsp), %rdi
callq 0x8848
leaq 0xaaf(%rsp), %rdi
callq 0x84a0
jmp 0x2c6c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c6a9
movq $0x0, 0xa78(%rsp)
movq $0x0, 0xa70(%rsp)
leaq 0xb1007(%rip), %rax     # 0xda4e8
movl (%rax), %eax
movl %eax, 0x3a4(%rsp)
subl $0x1, %eax
je 0x29518
jmp 0x294f1
movl 0x3a4(%rsp), %eax
subl $0x2, %eax
je 0x295b5
jmp 0x29503
movl 0x3a4(%rsp), %eax
subl $0x3, %eax
je 0x2969c
jmp 0x297d2
movl $0x8, %edi
callq 0x8030
movq %rax, 0x398(%rsp)
jmp 0x2952c
movq 0x398(%rsp), %rax
movq %rax, 0xa88(%rsp)
leaq 0xb0fad(%rip), %rax     # 0xda4f0
movq (%rax), %rcx
movq 0xa88(%rsp), %rax
movq %rcx, (%rax)
movl $0x8, %edi
callq 0x8030
movq %rax, 0x390(%rsp)
jmp 0x29565
movq 0x390(%rsp), %rax
movq %rax, 0xa80(%rsp)
leaq 0xb0f8c(%rip), %rax     # 0xda508
movq (%rax), %rcx
movq 0xa80(%rsp), %rax
movq %rcx, (%rax)
movq 0xa88(%rsp), %rax
movq (%rax), %rax
movq %rax, 0xa78(%rsp)
movq 0xa80(%rsp), %rax
movq (%rax), %rax
movq %rax, 0xa70(%rsp)
jmp 0x2983e
movl $0x10, %edi
callq 0x8030
movq %rax, 0x388(%rsp)
jmp 0x295c9
movq 0x388(%rsp), %rax
movq %rax, 0xa88(%rsp)
leaq 0xb0f10(%rip), %rax     # 0xda4f0
movq (%rax), %rcx
movq 0xa88(%rsp), %rax
movq %rcx, (%rax)
leaq 0xb0f0b(%rip), %rax     # 0xda500
movq (%rax), %rcx
movq 0xa88(%rsp), %rax
movq %rcx, 0x8(%rax)
movl $0x10, %edi
callq 0x8030
movq %rax, 0x380(%rsp)
jmp 0x29618
movq 0x380(%rsp), %rax
movq %rax, 0xa80(%rsp)
leaq 0xb0ed9(%rip), %rax     # 0xda508
movq (%rax), %rcx
movq 0xa80(%rsp), %rax
movq %rcx, (%rax)
leaq 0xb0ed4(%rip), %rax     # 0xda518
movq (%rax), %rcx
movq 0xa80(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0xa88(%rsp), %rax
movq (%rax), %rax
movq 0xa88(%rsp), %rcx
addq 0x8(%rcx), %rax
shrq %rax
movq %rax, 0xa78(%rsp)
movq 0xa80(%rsp), %rax
movq (%rax), %rax
movq 0xa80(%rsp), %rcx
addq 0x8(%rcx), %rax
shrq %rax
movq %rax, 0xa70(%rsp)
jmp 0x2983e
movl $0x18, %edi
callq 0x8030
movq %rax, 0x378(%rsp)
jmp 0x296b0
movq 0x378(%rsp), %rax
movq %rax, 0xa88(%rsp)
leaq 0xb0e29(%rip), %rax     # 0xda4f0
movq (%rax), %rcx
movq 0xa88(%rsp), %rax
movq %rcx, (%rax)
leaq 0xb0e1c(%rip), %rax     # 0xda4f8
movq (%rax), %rcx
movq 0xa88(%rsp), %rax
movq %rcx, 0x8(%rax)
leaq 0xb0e0e(%rip), %rax     # 0xda500
movq (%rax), %rcx
movq 0xa88(%rsp), %rax
movq %rcx, 0x10(%rax)
movl $0x18, %edi
callq 0x8030
movq %rax, 0x370(%rsp)
jmp 0x29715
movq 0x370(%rsp), %rax
movq %rax, 0xa80(%rsp)
leaq 0xb0ddc(%rip), %rax     # 0xda508
movq (%rax), %rcx
movq 0xa80(%rsp), %rax
movq %rcx, (%rax)
leaq 0xb0dcf(%rip), %rax     # 0xda510
movq (%rax), %rcx
movq 0xa80(%rsp), %rax
movq %rcx, 0x8(%rax)
leaq 0xb0dc1(%rip), %rax     # 0xda518
movq (%rax), %rcx
movq 0xa80(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0xa88(%rsp), %rax
movq (%rax), %rax
movq 0xa88(%rsp), %rcx
addq 0x8(%rcx), %rax
movq 0xa88(%rsp), %rcx
addq 0x10(%rcx), %rax
movl $0x3, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, 0xa78(%rsp)
movq 0xa80(%rsp), %rax
movq (%rax), %rax
movq 0xa80(%rsp), %rcx
addq 0x8(%rcx), %rax
movq 0xa80(%rsp), %rcx
addq 0x10(%rcx), %rax
movl $0x3, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, 0xa70(%rsp)
jmp 0x2983e
movl $0x10, %edi
callq 0x8200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x368(%rsp)
leaq 0x81f49(%rip), %rsi     # 0xab73a
callq 0x87d0
jmp 0x297f8
movq 0x368(%rsp), %rdi
movq 0xb07c1(%rip), %rsi     # 0xd9fc8
movq 0xb07a2(%rip), %rdx     # 0xd9fb0
callq 0x8710
jmp 0x2c6d0
movq 0x368(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
callq 0x8330
jmp 0x2c6a9
movq 0x3b8(%rsp), %rax
leaq 0xb0c73(%rip), %rcx     # 0xda4c0
movl (%rcx), %ecx
movl %ecx, 0x78(%rax)
leaq 0xb0c73(%rip), %rcx     # 0xda4cc
movl (%rcx), %ecx
movl %ecx, 0x7c(%rax)
leaq 0xb0db3(%rip), %rax     # 0xda618
movl (%rax), %eax
testl %eax, %eax
jne 0x29fac
jmp 0x29871
leaq 0xb0c48(%rip), %rax     # 0xda4c0
movl (%rax), %eax
movl %eax, %edi
shlq $0x3, %rdi
callq 0x8030
movq %rax, 0x360(%rsp)
jmp 0x2988f
movq 0x360(%rsp), %rax
movq %rax, 0xa68(%rsp)
movl $0x0, 0xa64(%rsp)
movl 0xa64(%rsp), %eax
leaq 0xb0c08(%rip), %rcx     # 0xda4c0
cmpl (%rcx), %eax
jae 0x29e34
leaq 0xb0c05(%rip), %rax     # 0xda4cc
movl (%rax), %eax
movl %eax, %edi
shlq $0x3, %rdi
callq 0x8030
movq %rax, 0x358(%rsp)
jmp 0x298de
movq 0x358(%rsp), %rax
movq %rax, 0xa58(%rsp)
movl $0x0, 0xa54(%rsp)
movl 0xa54(%rsp), %eax
leaq 0xb0bc5(%rip), %rcx     # 0xda4cc
cmpl (%rcx), %eax
jae 0x29ca7
movl $0x108, %edi            # imm = 0x108
callq 0x8450
movq %rax, 0x350(%rsp)
jmp 0x29923
movb $0x1, 0x96f(%rsp)
movq 0xa90(%rsp), %rsi
leaq 0x9b0(%rsp), %rdi
callq 0xcdf0
jmp 0x29942
leaq 0x81e23(%rip), %rdx     # 0xab76c
leaq 0x9d0(%rsp), %rdi
leaq 0x9b0(%rsp), %rsi
callq 0xd060
jmp 0x29960
movl 0xa64(%rsp), %esi
leaq 0x990(%rsp), %rdi
callq 0x18f30
jmp 0x29976
leaq 0x9f0(%rsp), %rdi
leaq 0x9d0(%rsp), %rsi
leaq 0x990(%rsp), %rdx
callq 0xd0b0
jmp 0x29995
leaq 0x81dda(%rip), %rdx     # 0xab776
leaq 0xa10(%rsp), %rdi
leaq 0x9f0(%rsp), %rsi
callq 0xd060
jmp 0x299b3
movl 0xa54(%rsp), %esi
leaq 0x970(%rsp), %rdi
callq 0x18f30
jmp 0x299c9
leaq 0xa30(%rsp), %rdi
leaq 0xa10(%rsp), %rsi
leaq 0x970(%rsp), %rdx
callq 0xd0b0
jmp 0x299e8
movq 0x350(%rsp), %rdi
movl 0xa64(%rsp), %edx
movl 0xa54(%rsp), %ecx
leaq 0xb0ae3(%rip), %rax     # 0xda4e8
movl (%rax), %r8d
leaq 0xb0b31(%rip), %rax     # 0xda540
movl (%rax), %r9d
leaq 0xb0b2b(%rip), %rax     # 0xda544
movl (%rax), %esi
leaq 0xb0b26(%rip), %rax     # 0xda548
movl (%rax), %r10d
leaq 0xb0b20(%rip), %rax     # 0xda54c
movl (%rax), %r11d
movq 0xa88(%rsp), %rbx
movq 0xa80(%rsp), %r14
leaq 0xb0ada(%rip), %rax     # 0xda520
movq (%rax), %r15
leaq 0xb0ae8(%rip), %rax     # 0xda538
movq (%rax), %r12
leaq 0xb0ad6(%rip), %rax     # 0xda530
movq (%rax), %r13
movq %rsp, %rax
movq %rax, 0x348(%rsp)
movq %r13, 0x38(%rax)
movq %r12, 0x30(%rax)
movq %r15, 0x28(%rax)
movq %r14, 0x20(%rax)
movq %rbx, 0x18(%rax)
movl %r11d, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
movq $0x0, 0x50(%rax)
movq $0x0, 0x48(%rax)
movq $0x14, 0x40(%rax)
leaq 0xa30(%rsp), %rsi
callq 0x43340
jmp 0x29aad
movq 0x350(%rsp), %rdx
movb $0x0, 0x96f(%rsp)
movq 0xa58(%rsp), %rax
movl 0xa54(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
leaq 0xa30(%rsp), %rdi
callq 0x8848
leaq 0x970(%rsp), %rdi
callq 0x8848
leaq 0xa10(%rsp), %rdi
callq 0x8848
leaq 0x9f0(%rsp), %rdi
callq 0x8848
leaq 0x990(%rsp), %rdi
callq 0x8848
leaq 0x9d0(%rsp), %rdi
callq 0x8848
leaq 0x9b0(%rsp), %rdi
callq 0x8848
callq 0x46500
movq %rax, 0x340(%rsp)
jmp 0x29b3a
movq 0x340(%rsp), %rdi
movq 0xa58(%rsp), %rax
movl 0xa54(%rsp), %ecx
movq (%rax,%rcx,8), %rsi
callq 0x465c0
jmp 0x29b5c
jmp 0x29b5e
movl 0xa54(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa54(%rsp)
jmp 0x298f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29c89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29c7c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29c6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29c62
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29c55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29c48
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29c3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0xa30(%rsp), %rdi
callq 0x8848
leaq 0x970(%rsp), %rdi
callq 0x8848
leaq 0xa10(%rsp), %rdi
callq 0x8848
leaq 0x9f0(%rsp), %rdi
callq 0x8848
leaq 0x990(%rsp), %rdi
callq 0x8848
leaq 0x9d0(%rsp), %rdi
callq 0x8848
leaq 0x9b0(%rsp), %rdi
callq 0x8848
testb $0x1, 0x96f(%rsp)
jne 0x29c95
jmp 0x29ca2
movq 0x350(%rsp), %rdi
callq 0x8410
jmp 0x2c6a9
movl $0x158, %edi            # imm = 0x158
callq 0x8450
movq %rax, 0x338(%rsp)
jmp 0x29cbb
movq 0x338(%rsp), %rdi
movl 0xa64(%rsp), %esi
leaq 0xb07fb(%rip), %rax     # 0xda4cc
movl (%rax), %edx
movq 0xa58(%rsp), %rcx
leaq 0xb07e2(%rip), %rax     # 0xda4c4
movl (%rax), %r8d
leaq 0xb07dc(%rip), %rax     # 0xda4c8
movl (%rax), %eax
cvtsi2sd %rax, %xmm1
movsd 0x81a2d(%rip), %xmm0    # 0xab728
divsd %xmm1, %xmm0
movaps %xmm0, %xmm1
cvttsd2si %xmm1, %r9
movq %r9, %r10
sarq $0x3f, %r10
movsd 0x7f2f2(%rip), %xmm1    # 0xa9008
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %rax
andq %r10, %rax
orq %rax, %r9
addq %r9, %r9
movq %rsp, %rax
movq %rax, 0x330(%rsp)
movq %r9, (%rax)
movq $0xf, 0x68(%rax)
movq $0x6, 0x60(%rax)
movq $0x12c, 0x58(%rax)      # imm = 0x12C
movq $0x64, 0x50(%rax)
movq $0xf, 0x48(%rax)
movq $0xf, 0x40(%rax)
movq $0xf, 0x38(%rax)
movq $0x46, 0x30(%rax)
movq $0x19, 0x28(%rax)
movq $0x64, 0x20(%rax)
movq $0x14, 0x18(%rax)
movq $0x14, 0x10(%rax)
movq $0x1f4, 0x8(%rax)       # imm = 0x1F4
callq 0x965b0
jmp 0x29da5
movq 0x338(%rsp), %rdx
movq 0xa68(%rsp), %rax
movl 0xa64(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
movq 0xa90(%rsp), %rdi
addq $0x60, %rdi
movq 0xa68(%rsp), %rax
movl 0xa64(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, 0x960(%rsp)
leaq 0x960(%rsp), %rsi
callq 0x2cf90
jmp 0x29df6
jmp 0x29df8
movl 0xa64(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa64(%rsp)
jmp 0x298aa
movq 0x338(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
callq 0x8410
jmp 0x2c6a9
movl $0xb8, %edi
callq 0x8450
movq %rax, 0x328(%rsp)
jmp 0x29e48
movb $0x1, 0x91f(%rsp)
movq 0xa90(%rsp), %rsi
leaq 0x920(%rsp), %rdi
callq 0xcdf0
jmp 0x29e67
leaq 0x8190f(%rip), %rdx     # 0xab77d
leaq 0x940(%rsp), %rdi
leaq 0x920(%rsp), %rsi
callq 0xd060
jmp 0x29e85
movq 0x328(%rsp), %rdi
movq 0xa68(%rsp), %rdx
leaq 0xb0624(%rip), %rax     # 0xda4c0
movl (%rax), %ecx
leaq 0xb0627(%rip), %rax     # 0xda4cc
movl (%rax), %r8d
leaq 0xb0691(%rip), %rax     # 0xda540
movl (%rax), %r9d
leaq 0xb068b(%rip), %rax     # 0xda544
movl (%rax), %esi
movq %rsp, %rax
movl %esi, (%rax)
leaq 0x940(%rsp), %rsi
callq 0x8d820
jmp 0x29ecf
movq 0x328(%rsp), %rcx
movb $0x0, 0x91f(%rsp)
movq 0xa90(%rsp), %rax
movq %rcx, 0x58(%rax)
leaq 0x940(%rsp), %rdi
callq 0x8848
leaq 0x920(%rsp), %rdi
callq 0x8848
callq 0x46500
movq %rax, 0x320(%rsp)
jmp 0x29f14
movq 0x320(%rsp), %rdi
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %rsi
callq 0x465c0
jmp 0x29f2f
jmp 0x2a018
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29f8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x29f81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x940(%rsp), %rdi
callq 0x8848
leaq 0x920(%rsp), %rdi
callq 0x8848
testb $0x1, 0x91f(%rsp)
jne 0x29f9a
jmp 0x29fa7
movq 0x328(%rsp), %rdi
callq 0x8410
jmp 0x2c6a9
movl $0x10, %edi
callq 0x8200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x318(%rsp)
leaq 0x817b7(%rip), %rsi     # 0xab782
callq 0x87d0
jmp 0x29fd2
movq 0x318(%rsp), %rdi
movq 0xaffe7(%rip), %rsi     # 0xd9fc8
movq 0xaffc8(%rip), %rdx     # 0xd9fb0
callq 0x8710
jmp 0x2c6d0
movq 0x318(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
callq 0x8330
jmp 0x2c6a9
movq 0xa88(%rsp), %rax
movq %rax, 0x310(%rsp)
cmpq $0x0, %rax
je 0x2a03b
movq 0x310(%rsp), %rdi
callq 0x8570
movq 0xa80(%rsp), %rax
movq %rax, 0x308(%rsp)
cmpq $0x0, %rax
je 0x2a05e
movq 0x308(%rsp), %rdi
callq 0x8570
movl $0xb8, %edi
callq 0x8450
movq %rax, 0x300(%rsp)
jmp 0x2a072
movb $0x1, 0x8cf(%rsp)
movq 0xa90(%rsp), %rsi
leaq 0x8d0(%rsp), %rdi
callq 0xcdf0
jmp 0x2a091
leaq 0x81738(%rip), %rdx     # 0xab7d0
leaq 0x8f0(%rsp), %rdi
leaq 0x8d0(%rsp), %rsi
callq 0xd060
jmp 0x2a0af
movq 0x300(%rsp), %rdi
leaq 0xb0402(%rip), %rax     # 0xda4c0
movl (%rax), %ecx
leaq 0xb0405(%rip), %rax     # 0xda4cc
movl (%rax), %r8d
leaq 0xb046f(%rip), %rax     # 0xda540
movl (%rax), %r9d
leaq 0xb0469(%rip), %rax     # 0xda544
movl (%rax), %edx
leaq 0xb0464(%rip), %rax     # 0xda548
movl (%rax), %esi
leaq 0xb045f(%rip), %rax     # 0xda54c
movl (%rax), %r10d
leaq 0xb0459(%rip), %rax     # 0xda550
movl (%rax), %r11d
shrl $0x9, %r11d
movq 0xa78(%rsp), %rbx
movq 0xa70(%rsp), %r14
leaq 0xb036b(%rip), %rax     # 0xda480
movsd (%rax), %xmm0
leaq 0xb0408(%rip), %rax     # 0xda528
movl (%rax), %ebp
leaq 0xb030f(%rip), %rax     # 0xda438
movl (%rax), %r15d
movl %r15d, %r12d
incl %r12d
movl %r12d, (%rax)
movq %rsp, %rax
movq %rax, 0x2f8(%rsp)
movl %r15d, 0x38(%rax)
movl %ebp, 0x30(%rax)
movq %r14, 0x28(%rax)
movq %rbx, 0x20(%rax)
movl %r11d, 0x18(%rax)
movl %r10d, 0x10(%rax)
movl %esi, 0x8(%rax)
movl %edx, (%rax)
xorl %eax, %eax
movl %eax, %edx
leaq 0x8f0(%rsp), %rsi
callq 0x70f00
jmp 0x2a16f
movb $0x0, 0x8cf(%rsp)
leaq 0x8f0(%rsp), %rdi
callq 0x8848
leaq 0x8d0(%rsp), %rdi
callq 0x8848
movq 0x300(%rsp), %rcx
movq 0x3b8(%rsp), %rax
movq %rcx, 0x910(%rsp)
movq 0x58(%rax), %rcx
movq 0x910(%rsp), %rax
movq %rcx, 0x58(%rax)
callq 0x46500
movq %rax, 0x2f0(%rsp)
jmp 0x2a1c8
movq 0x2f0(%rsp), %rdi
movq 0x910(%rsp), %rsi
callq 0x465c0
jmp 0x2a1df
movq 0x910(%rsp), %rcx
movq 0xa90(%rsp), %rax
movq %rcx, 0x50(%rax)
movb $0x0, 0x8bf(%rsp)
movb $0x0, 0x8be(%rsp)
leaq 0xb02e2(%rip), %rax     # 0xda4ec
cmpl $0x1, (%rax)
jne 0x2a295
movb $0x1, 0x8be(%rsp)
jmp 0x2a295
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2a277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2a26a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x8f0(%rsp), %rdi
callq 0x8848
leaq 0x8d0(%rsp), %rdi
callq 0x8848
testb $0x1, 0x8cf(%rsp)
jne 0x2a283
jmp 0x2a290
movq 0x300(%rsp), %rdi
callq 0x8410
jmp 0x2c6a9
leaq 0xb0250(%rip), %rax     # 0xda4ec
cmpl $0x3, (%rax)
jne 0x2a2a9
movb $0x1, 0x8bf(%rsp)
leaq 0xb023c(%rip), %rax     # 0xda4ec
cmpl $0x2, (%rax)
jne 0x2a2c5
movb $0x1, 0x8be(%rsp)
movb $0x1, 0x8bf(%rsp)
leaq 0xb0344(%rip), %rax     # 0xda610
movl (%rax), %eax
movl %eax, 0x2ec(%rsp)
testl %eax, %eax
je 0x2a2f0
jmp 0x2a2db
movl 0x2ec(%rsp), %eax
subl $0x1, %eax
je 0x2a494
jmp 0x2a638
movl $0xe8, %edi
callq 0x8450
movq %rax, 0x2e0(%rsp)
jmp 0x2a304
movb $0x1, 0x877(%rsp)
movq 0x910(%rsp), %rsi
leaq 0x878(%rsp), %rdi
callq 0xcdf0
jmp 0x2a323
leaq 0x814ab(%rip), %rdx     # 0xab7d5
leaq 0x898(%rsp), %rdi
leaq 0x878(%rsp), %rsi
callq 0xd060
jmp 0x2a341
movq 0x2e0(%rsp), %rdi
movq 0x910(%rsp), %rdx
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %rcx
leaq 0xb015c(%rip), %rax     # 0xda4c0
movl (%rax), %r8d
leaq 0xb015e(%rip), %rax     # 0xda4cc
movl (%rax), %r9d
leaq 0xb01c8(%rip), %rax     # 0xda540
movl (%rax), %esi
leaq 0xb01c3(%rip), %rax     # 0xda544
movl (%rax), %r10d
leaq 0xb012d(%rip), %rax     # 0xda4b8
movq (%rax), %r11
leaq 0xb0113(%rip), %rax     # 0xda4a8
movq (%rax), %rbx
leaq 0xb0111(%rip), %rax     # 0xda4b0
movq (%rax), %r14
movzbl 0x8bf(%rsp), %ebp
movzbl 0x8be(%rsp), %r15d
andl $0x1, %r15d
movq %rsp, %rax
movl %r15d, 0x30(%rax)
andl $0x1, %ebp
movl %ebp, 0x28(%rax)
movq %r14, 0x20(%rax)
movq %rbx, 0x18(%rax)
movq %r11, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
leaq 0x898(%rsp), %rsi
callq 0x9b8c0
jmp 0x2a3e5
movq 0x2e0(%rsp), %rax
movb $0x0, 0x877(%rsp)
movq %rax, 0x8c0(%rsp)
leaq 0x898(%rsp), %rdi
callq 0x8848
leaq 0x878(%rsp), %rdi
callq 0x8848
jmp 0x2a6a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2a476
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2a469
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x898(%rsp), %rdi
callq 0x8848
leaq 0x878(%rsp), %rdi
callq 0x8848
testb $0x1, 0x877(%rsp)
jne 0x2a482
jmp 0x2a48f
movq 0x2e0(%rsp), %rdi
callq 0x8410
jmp 0x2c6a9
movl $0x108, %edi            # imm = 0x108
callq 0x8450
movq %rax, 0x2d8(%rsp)
jmp 0x2a4a8
movb $0x1, 0x82f(%rsp)
movq 0x910(%rsp), %rsi
leaq 0x830(%rsp), %rdi
callq 0xcdf0
jmp 0x2a4c7
leaq 0x81307(%rip), %rdx     # 0xab7d5
leaq 0x850(%rsp), %rdi
leaq 0x830(%rsp), %rsi
callq 0xd060
jmp 0x2a4e5
movq 0x2d8(%rsp), %rdi
movq 0x910(%rsp), %rdx
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %rcx
leaq 0xaffb8(%rip), %rax     # 0xda4c0
movl (%rax), %r8d
leaq 0xaffba(%rip), %rax     # 0xda4cc
movl (%rax), %r9d
leaq 0xb0024(%rip), %rax     # 0xda540
movl (%rax), %esi
leaq 0xb001f(%rip), %rax     # 0xda544
movl (%rax), %r10d
leaq 0xaff89(%rip), %rax     # 0xda4b8
movq (%rax), %r11
leaq 0xaff6f(%rip), %rax     # 0xda4a8
movq (%rax), %rbx
leaq 0xaff6d(%rip), %rax     # 0xda4b0
movq (%rax), %r14
movzbl 0x8bf(%rsp), %ebp
movzbl 0x8be(%rsp), %r15d
andl $0x1, %r15d
movq %rsp, %rax
movl %r15d, 0x30(%rax)
andl $0x1, %ebp
movl %ebp, 0x28(%rax)
movq %r14, 0x20(%rax)
movq %rbx, 0x18(%rax)
movq %r11, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
leaq 0x850(%rsp), %rsi
callq 0x9f4d0
jmp 0x2a589
movq 0x2d8(%rsp), %rax
movb $0x0, 0x82f(%rsp)
movq %rax, 0x8c0(%rsp)
leaq 0x850(%rsp), %rdi
callq 0x8848
leaq 0x830(%rsp), %rdi
callq 0x8848
jmp 0x2a6a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2a61a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2a60d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x850(%rsp), %rdi
callq 0x8848
leaq 0x830(%rsp), %rdi
callq 0x8848
testb $0x1, 0x82f(%rsp)
jne 0x2a626
jmp 0x2a633
movq 0x2d8(%rsp), %rdi
callq 0x8410
jmp 0x2c6a9
movl $0x10, %edi
callq 0x8200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x2d0(%rsp)
leaq 0x81183(%rip), %rsi     # 0xab7da
callq 0x87d0
jmp 0x2a65e
movq 0x2d0(%rsp), %rdi
movq 0xaf95b(%rip), %rsi     # 0xd9fc8
movq 0xaf93c(%rip), %rdx     # 0xd9fb0
callq 0x8710
jmp 0x2c6d0
movq 0x2d0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
callq 0x8330
jmp 0x2c6a9
callq 0x46500
movq %rax, 0x2c8(%rsp)
jmp 0x2a6b3
movq 0x2c8(%rsp), %rdi
movq 0x8c0(%rsp), %rsi
callq 0x465c0
jmp 0x2a6ca
movq 0x8c0(%rsp), %rcx
movq 0x910(%rsp), %rax
movq %rcx, 0x50(%rax)
movl $0x38, %edi
callq 0x8450
movq %rax, 0x2c0(%rsp)
jmp 0x2a6f2
leaq 0xafe2f(%rip), %rax     # 0xda528
movl (%rax), %eax
movl %eax, 0x2bc(%rsp)
movq 0xad0(%rsp), %rdi
callq 0x11420
movq 0x2c0(%rsp), %rdi
movl 0x2bc(%rsp), %edx
movl %eax, %ecx
leaq 0xafd99(%rip), %rax     # 0xda4c0
movl (%rax), %r8d
leaq 0xafd9b(%rip), %rax     # 0xda4cc
movl (%rax), %r9d
leaq 0xafe05(%rip), %rax     # 0xda540
movl (%rax), %esi
leaq 0xafe00(%rip), %rax     # 0xda544
movl (%rax), %r10d
leaq 0xafdfa(%rip), %rax     # 0xda548
movl (%rax), %r11d
leaq 0xafdf4(%rip), %rax     # 0xda54c
movl (%rax), %ebx
movq %rsp, %rax
movl %ebx, 0x18(%rax)
movl %r11d, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
xorl %eax, %eax
movl %eax, %esi
callq 0x7a780
jmp 0x2a775
movq 0x2c0(%rsp), %rax
movq %rax, 0x820(%rsp)
movq 0x820(%rsp), %rcx
movq 0x910(%rsp), %rax
movq %rcx, 0x40(%rax)
leaq 0x800(%rsp), %rdi
callq 0x2cfc0
leaq 0x7e8(%rsp), %rdi
callq 0x2cfc0
leaq 0x7d0(%rsp), %rdi
callq 0x2cfc0
leaq 0x7b8(%rsp), %rdi
callq 0x2cfc0
movl $0x0, 0x7b4(%rsp)
movl $0x0, 0x7b0(%rsp)
movl 0x7b0(%rsp), %eax
movq %rax, 0x2b0(%rsp)
movq 0xad0(%rsp), %rdi
callq 0x11420
movq %rax, %rcx
movq 0x2b0(%rsp), %rax
cmpq %rcx, %rax
jae 0x2afd4
leaq 0xafc26(%rip), %rax     # 0xda440
movl (%rax), %eax
movl %eax, 0x2ac(%rsp)
testl %eax, %eax
je 0x2a864
jmp 0x2a829
movl 0x2ac(%rsp), %eax
subl $0x1, %eax
je 0x2ab5a
jmp 0x2afba
movq 0x2c0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
callq 0x8410
jmp 0x2c6a9
movl $0x1, 0x7b4(%rsp)
leaq 0x798(%rsp), %rdi
movq %rdi, 0x2a0(%rsp)
callq 0x21580
movq 0x2a0(%rsp), %rsi
leaq 0x800(%rsp), %rdi
callq 0x2cfd0
jmp 0x2a89b
movl $0x0, 0x794(%rsp)
movl 0x794(%rsp), %eax
leaq 0xafc0c(%rip), %rcx     # 0xda4c0
cmpl (%rcx), %eax
jae 0x2a90e
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x800(%rsp), %rdi
callq 0x2d040
movq %rax, %rdi
leaq 0x794(%rsp), %rsi
callq 0x2d060
jmp 0x2a8e0
jmp 0x2a8e2
movl 0x794(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x794(%rsp)
jmp 0x2a8a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2ab48
leaq 0x778(%rsp), %rdi
movq %rdi, 0x298(%rsp)
callq 0x21580
movq 0x298(%rsp), %rsi
leaq 0x7e8(%rsp), %rdi
callq 0x2cfd0
jmp 0x2a93a
movl $0x0, 0x774(%rsp)
movl 0x774(%rsp), %eax
leaq 0xafb79(%rip), %rcx     # 0xda4cc
cmpl (%rcx), %eax
jae 0x2a9ad
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x7e8(%rsp), %rdi
callq 0x2d040
movq %rax, %rdi
leaq 0x774(%rsp), %rsi
callq 0x2d060
jmp 0x2a97f
jmp 0x2a981
movl 0x774(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x774(%rsp)
jmp 0x2a945
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2ab3b
leaq 0x758(%rsp), %rdi
movq %rdi, 0x290(%rsp)
callq 0x21580
movq 0x290(%rsp), %rsi
leaq 0x7d0(%rsp), %rdi
callq 0x2cfd0
jmp 0x2a9d9
movl $0x0, 0x754(%rsp)
movl 0x754(%rsp), %eax
leaq 0xafb4e(%rip), %rcx     # 0xda540
cmpl (%rcx), %eax
jae 0x2aa4c
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x7d0(%rsp), %rdi
callq 0x2d040
movq %rax, %rdi
leaq 0x754(%rsp), %rsi
callq 0x2d060
jmp 0x2aa1e
jmp 0x2aa20
movl 0x754(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x754(%rsp)
jmp 0x2a9e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2ab2e
leaq 0x738(%rsp), %rdi
movq %rdi, 0x288(%rsp)
callq 0x21580
movq 0x288(%rsp), %rsi
leaq 0x7b8(%rsp), %rdi
callq 0x2cfd0
jmp 0x2aa78
movl $0x0, 0x734(%rsp)
movl 0x734(%rsp), %eax
leaq 0xafab3(%rip), %rcx     # 0xda544
cmpl (%rcx), %eax
jae 0x2aaf5
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x7b8(%rsp), %rdi
callq 0x2d040
movq %rax, %rdi
leaq 0x734(%rsp), %rsi
callq 0x2d060
jmp 0x2aabd
jmp 0x2aabf
movl 0x734(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x734(%rsp)
jmp 0x2aa83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x738(%rsp), %rdi
callq 0x20b00
jmp 0x2ab2e
leaq 0x738(%rsp), %rdi
callq 0x20b00
leaq 0x758(%rsp), %rdi
callq 0x20b00
leaq 0x778(%rsp), %rdi
callq 0x20b00
leaq 0x798(%rsp), %rdi
callq 0x20b00
jmp 0x2afbc
leaq 0x758(%rsp), %rdi
callq 0x20b00
leaq 0x778(%rsp), %rdi
callq 0x20b00
leaq 0x798(%rsp), %rdi
callq 0x20b00
jmp 0x2c5fb
movq 0xad0(%rsp), %rdi
callq 0x11420
movl %eax, 0x7b4(%rsp)
leaq 0x718(%rsp), %rdi
movq %rdi, 0x280(%rsp)
callq 0x21580
movq 0x280(%rsp), %rsi
leaq 0x800(%rsp), %rdi
callq 0x2cfd0
jmp 0x2ab9a
movl $0x0, 0x714(%rsp)
movl 0x714(%rsp), %eax
movl %eax, 0x27c(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq %rax, %rcx
movl 0x27c(%rsp), %eax
movq (%rcx), %rcx
cmpl 0x3c(%rcx), %eax
jge 0x2ac66
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x800(%rsp), %rdi
callq 0x2d040
movq %rax, 0x270(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq 0x270(%rsp), %rdi
movq (%rax), %rax
movq 0x18(%rax), %rax
movslq 0x714(%rsp), %rcx
leaq (%rax,%rcx,4), %rsi
callq 0x2d060
jmp 0x2ac35
jmp 0x2ac37
movl 0x714(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x714(%rsp)
jmp 0x2aba5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2afa8
leaq 0x6f8(%rsp), %rdi
movq %rdi, 0x268(%rsp)
callq 0x21580
movq 0x268(%rsp), %rsi
leaq 0x7e8(%rsp), %rdi
callq 0x2cfd0
jmp 0x2ac92
movl $0x0, 0x6f4(%rsp)
movl 0x6f4(%rsp), %eax
movl %eax, 0x264(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq %rax, %rcx
movl 0x264(%rsp), %eax
movq (%rcx), %rcx
cmpl 0x40(%rcx), %eax
jge 0x2ad5e
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x7e8(%rsp), %rdi
callq 0x2d040
movq %rax, 0x258(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq 0x258(%rsp), %rdi
movq (%rax), %rax
movq 0x20(%rax), %rax
movslq 0x6f4(%rsp), %rcx
leaq (%rax,%rcx,4), %rsi
callq 0x2d060
jmp 0x2ad2d
jmp 0x2ad2f
movl 0x6f4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x6f4(%rsp)
jmp 0x2ac9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2af9b
leaq 0x6d8(%rsp), %rdi
movq %rdi, 0x250(%rsp)
callq 0x21580
movq 0x250(%rsp), %rsi
leaq 0x7d0(%rsp), %rdi
callq 0x2cfd0
jmp 0x2ad8a
movl $0x0, 0x6d4(%rsp)
movl 0x6d4(%rsp), %eax
movl %eax, 0x24c(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq %rax, %rcx
movl 0x24c(%rsp), %eax
movq (%rcx), %rcx
cmpl 0x44(%rcx), %eax
jge 0x2ae56
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x7d0(%rsp), %rdi
callq 0x2d040
movq %rax, 0x240(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq 0x240(%rsp), %rdi
movq (%rax), %rax
movq 0x28(%rax), %rax
movslq 0x6d4(%rsp), %rcx
leaq (%rax,%rcx,4), %rsi
callq 0x2d060
jmp 0x2ae25
jmp 0x2ae27
movl 0x6d4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x6d4(%rsp)
jmp 0x2ad95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2af8e
leaq 0x6b8(%rsp), %rdi
movq %rdi, 0x238(%rsp)
callq 0x21580
movq 0x238(%rsp), %rsi
leaq 0x7b8(%rsp), %rdi
callq 0x2cfd0
jmp 0x2ae82
movl $0x0, 0x6b4(%rsp)
movl 0x6b4(%rsp), %eax
movl %eax, 0x234(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq %rax, %rcx
movl 0x234(%rsp), %eax
movq (%rcx), %rcx
cmpl 0x48(%rcx), %eax
jge 0x2af58
movl 0x7b0(%rsp), %eax
movl %eax, %esi
leaq 0x7b8(%rsp), %rdi
callq 0x2d040
movq %rax, 0x228(%rsp)
movq 0xad0(%rsp), %rdi
movl 0x7b0(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq 0x228(%rsp), %rdi
movq (%rax), %rax
movq 0x30(%rax), %rax
movslq 0x6b4(%rsp), %rcx
leaq (%rax,%rcx,4), %rsi
callq 0x2d060
jmp 0x2af1d
jmp 0x2af1f
movl 0x6b4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x6b4(%rsp)
jmp 0x2ae8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x6b8(%rsp), %rdi
callq 0x20b00
jmp 0x2af8e
leaq 0x6b8(%rsp), %rdi
callq 0x20b00
leaq 0x6d8(%rsp), %rdi
callq 0x20b00
leaq 0x6f8(%rsp), %rdi
callq 0x20b00
leaq 0x718(%rsp), %rdi
callq 0x20b00
jmp 0x2afbc
leaq 0x6d8(%rsp), %rdi
callq 0x20b00
leaq 0x6f8(%rsp), %rdi
callq 0x20b00
leaq 0x718(%rsp), %rdi
callq 0x20b00
jmp 0x2c5fb
jmp 0x2afbc
jmp 0x2afbe
movl 0x7b0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x7b0(%rsp)
jmp 0x2a7e3
leaq 0xaf465(%rip), %rax     # 0xda440
movl (%rax), %eax
movl %eax, 0x210(%rsp)
movq 0xad0(%rsp), %rdi
callq 0x11420
movl %eax, 0x214(%rsp)
leaq 0xaf4c1(%rip), %rax     # 0xda4c0
movl (%rax), %eax
movl %eax, 0x218(%rsp)
leaq 0xaf4bd(%rip), %rax     # 0xda4cc
movl (%rax), %eax
movl %eax, 0x21c(%rsp)
leaq 0xaf521(%rip), %rax     # 0xda540
movl (%rax), %eax
movl %eax, 0x220(%rsp)
leaq 0xaf515(%rip), %rax     # 0xda544
movl (%rax), %eax
movl %eax, 0x224(%rsp)
leaq 0x698(%rsp), %rdi
leaq 0x800(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b04f
leaq 0x680(%rsp), %rdi
leaq 0x7e8(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b066
leaq 0x668(%rsp), %rdi
leaq 0x7d0(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b07d
leaq 0x650(%rsp), %rdi
leaq 0x7b8(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b094
movl 0x224(%rsp), %r9d
movl 0x220(%rsp), %r8d
movl 0x21c(%rsp), %ecx
movl 0x218(%rsp), %edx
movl 0x214(%rsp), %esi
movl 0x210(%rsp), %edi
leaq 0xaf481(%rip), %rax     # 0xda548
movl (%rax), %r10d
leaq 0xaf47b(%rip), %rax     # 0xda54c
movl (%rax), %r11d
leaq 0xaf475(%rip), %rax     # 0xda550
movl (%rax), %ebx
shrl $0x9, %ebx
leaq 0xaf399(%rip), %rax     # 0xda480
movsd (%rax), %xmm0
movq %rsp, %rax
movl %ebx, 0x30(%rax)
movl %r11d, 0x28(%rax)
movl %r10d, 0x20(%rax)
leaq 0x650(%rsp), %r10
movq %r10, 0x18(%rax)
leaq 0x668(%rsp), %r10
movq %r10, 0x10(%rax)
leaq 0x680(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x698(%rsp), %r10
movq %r10, (%rax)
callq 0xa5660
jmp 0x2b12f
leaq 0x650(%rsp), %rdi
callq 0x2d1d0
leaq 0x668(%rsp), %rdi
callq 0x2d1d0
leaq 0x680(%rsp), %rdi
callq 0x2d1d0
leaq 0x698(%rsp), %rdi
callq 0x2d1d0
leaq 0xaf496(%rip), %rax     # 0xda600
movl (%rax), %eax
movl %eax, 0x20c(%rsp)
testl %eax, %eax
je 0x2b23a
jmp 0x2b17d
movl 0x20c(%rsp), %eax
subl $0x1, %eax
je 0x2b62a
jmp 0x2b805
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c5fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b228
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b21b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b20e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x650(%rsp), %rdi
callq 0x2d1d0
leaq 0x668(%rsp), %rdi
callq 0x2d1d0
leaq 0x680(%rsp), %rdi
callq 0x2d1d0
leaq 0x698(%rsp), %rdi
callq 0x2d1d0
jmp 0x2c5fb
movl $0xc8, %edi
callq 0x8450
movq %rax, 0x200(%rsp)
jmp 0x2b24e
movb $0x1, 0x5af(%rsp)
movq 0x910(%rsp), %rsi
leaq 0x610(%rsp), %rdi
callq 0xcdf0
jmp 0x2b26d
leaq 0x805b8(%rip), %rdx     # 0xab82c
leaq 0x630(%rsp), %rdi
leaq 0x610(%rsp), %rsi
callq 0xd060
jmp 0x2b28b
movq 0x910(%rsp), %rax
movq %rax, 0x1c8(%rsp)
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %rax
movq %rax, 0x1d0(%rsp)
movq 0x820(%rsp), %rax
movq %rax, 0x1d8(%rsp)
leaq 0xaf33e(%rip), %rax     # 0xda604
movb (%rax), %al
movb %al, 0x1e3(%rsp)
leaq 0xaf1a2(%rip), %rax     # 0xda478
movl (%rax), %eax
movl %eax, 0x1e4(%rsp)
leaq 0xaf326(%rip), %rax     # 0xda60c
movl (%rax), %eax
movl %eax, 0x1e8(%rsp)
movl 0x7b4(%rsp), %eax
movl %eax, 0x1ec(%rsp)
leaq 0xaf1bc(%rip), %rax     # 0xda4c0
movl (%rax), %eax
movl %eax, 0x1f0(%rsp)
leaq 0xaf1b8(%rip), %rax     # 0xda4cc
movl (%rax), %eax
movl %eax, 0x1f4(%rsp)
leaq 0xaf21c(%rip), %rax     # 0xda540
movl (%rax), %eax
movl %eax, 0x1f8(%rsp)
leaq 0xaf210(%rip), %rax     # 0xda544
movl (%rax), %eax
movl %eax, 0x1fc(%rsp)
leaq 0x5f8(%rsp), %rdi
leaq 0x800(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b354
leaq 0x5e0(%rsp), %rdi
leaq 0x7e8(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b36b
leaq 0x5c8(%rsp), %rdi
leaq 0x7d0(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b382
leaq 0x5b0(%rsp), %rdi
leaq 0x7b8(%rsp), %rsi
callq 0x2d0d0
jmp 0x2b399
movq 0x1d8(%rsp), %r8
movq 0x200(%rsp), %rdi
movl 0x1e4(%rsp), %r9d
movl 0x1e8(%rsp), %r10d
movl 0x1ec(%rsp), %r11d
movl 0x1f0(%rsp), %ebx
movl 0x1f4(%rsp), %ebp
movl 0x1f8(%rsp), %r14d
movl 0x1fc(%rsp), %r15d
leaq 0xaf162(%rip), %rax     # 0xda548
movl (%rax), %r12d
leaq 0xaf15c(%rip), %rax     # 0xda54c
movl (%rax), %r13d
leaq 0xaf156(%rip), %rax     # 0xda550
movl (%rax), %ecx
movl %ecx, %eax
shrl $0x9, %eax
leaq 0xaf078(%rip), %rdx     # 0xda480
movsd (%rdx), %xmm0
leaq 0xaf1f5(%rip), %rdx     # 0xda608
movl (%rdx), %edx
movq %rsp, %rsi
movq %rsi, 0x1c0(%rsp)
movl %edx, 0x78(%rsi)
movq 0x1c8(%rsp), %rdx
movl %ecx, 0x70(%rsi)
movq 0x1d0(%rsp), %rcx
movl %eax, 0x68(%rsi)
movb 0x1e3(%rsp), %al
movl %r13d, 0x60(%rsi)
movl %r12d, 0x58(%rsi)
leaq 0x5b0(%rsp), %r12
movq %r12, 0x50(%rsi)
leaq 0x5c8(%rsp), %r12
movq %r12, 0x48(%rsi)
leaq 0x5e0(%rsp), %r12
movq %r12, 0x40(%rsi)
leaq 0x5f8(%rsp), %r12
movq %r12, 0x38(%rsi)
movl %r15d, 0x30(%rsi)
movl %r14d, 0x28(%rsi)
movl %ebp, 0x20(%rsi)
movl %ebx, 0x18(%rsi)
movl %r11d, 0x10(%rsi)
movl %r10d, 0x8(%rsi)
movl %r9d, (%rsi)
movl $0x1, 0x80(%rsi)
movzbl %al, %r9d
andl $0x1, %r9d
leaq 0x630(%rsp), %rsi
callq 0x4b890
jmp 0x2b4b2
movq 0x200(%rsp), %rax
movb $0x0, 0x5af(%rsp)
movq %rax, 0x818(%rsp)
leaq 0x5b0(%rsp), %rdi
callq 0x2d1d0
leaq 0x5c8(%rsp), %rdi
callq 0x2d1d0
leaq 0x5e0(%rsp), %rdi
callq 0x2d1d0
leaq 0x5f8(%rsp), %rdi
callq 0x2d1d0
leaq 0x630(%rsp), %rdi
callq 0x8848
leaq 0x610(%rsp), %rdi
callq 0x8848
jmp 0x2b871
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b60c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b5ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b5f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b5e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b5d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b5cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x5b0(%rsp), %rdi
callq 0x2d1d0
leaq 0x5c8(%rsp), %rdi
callq 0x2d1d0
leaq 0x5e0(%rsp), %rdi
callq 0x2d1d0
leaq 0x5f8(%rsp), %rdi
callq 0x2d1d0
leaq 0x630(%rsp), %rdi
callq 0x8848
leaq 0x610(%rsp), %rdi
callq 0x8848
testb $0x1, 0x5af(%rsp)
jne 0x2b618
jmp 0x2b625
movq 0x200(%rsp), %rdi
callq 0x8410
jmp 0x2c5fb
movl $0xa8, %edi
callq 0x8450
movq %rax, 0x1b8(%rsp)
jmp 0x2b63e
movb $0x1, 0x567(%rsp)
movq 0x910(%rsp), %rsi
leaq 0x568(%rsp), %rdi
callq 0xcdf0
jmp 0x2b65d
leaq 0x801c8(%rip), %rdx     # 0xab82c
leaq 0x588(%rsp), %rdi
leaq 0x568(%rsp), %rsi
callq 0xd060
jmp 0x2b67b
movq 0x1b8(%rsp), %rdi
movq 0x910(%rsp), %rdx
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %rcx
movq 0x820(%rsp), %r8
leaq 0xaef5e(%rip), %rax     # 0xda604
movl 0x7b4(%rsp), %esi
leaq 0xaee0c(%rip), %r9      # 0xda4c0
movl (%r9), %r10d
leaq 0xaee0e(%rip), %r9      # 0xda4cc
movl (%r9), %r11d
leaq 0xaee78(%rip), %r9      # 0xda540
movl (%r9), %ebx
leaq 0xaee72(%rip), %r9      # 0xda544
movl (%r9), %ebp
leaq 0xaee6c(%rip), %r9      # 0xda548
movl (%r9), %r14d
leaq 0xaee66(%rip), %r9      # 0xda54c
movl (%r9), %r15d
leaq 0xaee60(%rip), %r9      # 0xda550
movl (%r9), %r13d
movl %r13d, %r12d
shrl $0x9, %r12d
leaq 0xaed7f(%rip), %r9      # 0xda480
movsd (%r9), %xmm0
movzbl (%rax), %r9d
movq %rsp, %rax
movq %rax, 0x1b0(%rsp)
movl %r13d, 0x40(%rax)
movl %r12d, 0x38(%rax)
movl %r15d, 0x30(%rax)
movl %r14d, 0x28(%rax)
movl %ebp, 0x20(%rax)
movl %ebx, 0x18(%rax)
movl %r11d, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
movl $0x1, 0x50(%rax)
movl $0x0, 0x48(%rax)
andl $0x1, %r9d
leaq 0x588(%rsp), %rsi
callq 0x49d80
jmp 0x2b756
movq 0x1b8(%rsp), %rax
movb $0x0, 0x567(%rsp)
movq %rax, 0x818(%rsp)
leaq 0x588(%rsp), %rdi
callq 0x8848
leaq 0x568(%rsp), %rdi
callq 0x8848
jmp 0x2b871
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b7e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2b7da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x588(%rsp), %rdi
callq 0x8848
leaq 0x568(%rsp), %rdi
callq 0x8848
testb $0x1, 0x567(%rsp)
jne 0x2b7f3
jmp 0x2b800
movq 0x1b8(%rsp), %rdi
callq 0x8410
jmp 0x2c5fb
movl $0x10, %edi
callq 0x8200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x1a8(%rsp)
leaq 0x8001c(%rip), %rsi     # 0xab840
callq 0x87d0
jmp 0x2b82b
movq 0x1a8(%rsp), %rdi
movq 0xae78e(%rip), %rsi     # 0xd9fc8
movq 0xae76f(%rip), %rdx     # 0xd9fb0
callq 0x8710
jmp 0x2c6d0
movq 0x1a8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
callq 0x8330
jmp 0x2c5fb
callq 0x46500
movq %rax, 0x1a0(%rsp)
jmp 0x2b880
movq 0x1a0(%rsp), %rdi
movq 0x818(%rsp), %rsi
callq 0x465c0
jmp 0x2b897
movq 0x818(%rsp), %rcx
movq 0x910(%rsp), %rax
movq %rcx, 0x38(%rax)
xorps %xmm0, %xmm0
movsd %xmm0, 0x558(%rsp)
movl $0x0, 0x554(%rsp)
movl 0x554(%rsp), %eax
movq %rax, 0x198(%rsp)
movq 0xad0(%rsp), %rdi
callq 0x11420
movq %rax, %rcx
movq 0x198(%rsp), %rax
cmpq %rcx, %rax
jae 0x2b95c
movq 0xad0(%rsp), %rdi
movl 0x554(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq (%rax), %rax
movl 0x38(%rax), %eax
cvtsi2sd %rax, %xmm0
ucomisd 0x558(%rsp), %xmm0
jbe 0x2b944
movq 0xad0(%rsp), %rdi
movl 0x554(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq (%rax), %rax
movl 0x38(%rax), %eax
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0x558(%rsp)
jmp 0x2b946
movl 0x554(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x554(%rsp)
jmp 0x2b8c2
movsd 0x558(%rsp), %xmm0
movsd 0x7f76b(%rip), %xmm1    # 0xab0d8
divsd %xmm1, %xmm0
movsd %xmm0, 0x558(%rsp)
movl $0x118, %edi            # imm = 0x118
callq 0x8450
movq %rax, 0x190(%rsp)
jmp 0x2b98e
movb $0x1, 0x507(%rsp)
movq 0x910(%rsp), %rsi
leaq 0x508(%rsp), %rdi
callq 0xcdf0
jmp 0x2b9ad
leaq 0x7fed4(%rip), %rdx     # 0xab888
leaq 0x528(%rsp), %rdi
leaq 0x508(%rsp), %rsi
callq 0xd060
jmp 0x2b9cb
movq 0x818(%rsp), %rdx
movq 0x820(%rsp), %rax
movq %rax, 0x188(%rsp)
movq 0x8c0(%rsp), %r8
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %r9
leaq 0xaea92(%rip), %rax     # 0xda490
movl (%rax), %esi
leaq 0xaea81(%rip), %rax     # 0xda488
movsd (%rax), %xmm0
leaq 0xaea82(%rip), %r10     # 0xda494
leaq 0xaea7f(%rip), %rax     # 0xda498
movsd (%rax), %xmm1
leaq 0xaea9c(%rip), %rax     # 0xda4c0
movl (%rax), %r11d
leaq 0xaea9e(%rip), %rax     # 0xda4cc
movl (%rax), %ebx
leaq 0xaeb09(%rip), %rax     # 0xda540
movl (%rax), %ebp
leaq 0xaeb04(%rip), %rax     # 0xda544
movl (%rax), %r14d
leaq 0xaeafe(%rip), %rax     # 0xda548
movl (%rax), %r15d
leaq 0xaeaf8(%rip), %rax     # 0xda54c
movl (%rax), %r12d
leaq 0xaeaf2(%rip), %rax     # 0xda550
movl (%rax), %r13d
shrl $0x9, %r13d
leaq 0xaeba8(%rip), %rdi     # 0xda614
movsd 0x558(%rsp), %xmm2
leaq 0xae9bc(%rip), %rcx     # 0xda438
movl (%rcx), %eax
movl %eax, 0x17c(%rsp)
incl %eax
movzbl (%r10), %r10d
movzbl (%rdi), %edi
movl %eax, (%rcx)
movl 0x17c(%rsp), %eax
testl %eax, %eax
setne %al
movzbl %al, %ecx
movq %rsp, %rax
movq %rax, 0x180(%rsp)
movl %ecx, 0x58(%rax)
movq 0x188(%rsp), %rcx
andl $0x1, %edi
movl %edi, 0x48(%rax)
movq 0x190(%rsp), %rdi
movl %r13d, 0x40(%rax)
movl %r12d, 0x38(%rax)
movl %r15d, 0x30(%rax)
movl %r14d, 0x28(%rax)
movl %ebp, 0x20(%rax)
movl %ebx, 0x18(%rax)
movl %r11d, 0x10(%rax)
andl $0x1, %r10d
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
movl $0x1b0, 0x70(%rax)      # imm = 0x1B0
movl $0x64, 0x68(%rax)
movl $0x1, 0x60(%rax)
movl $0xa, 0x50(%rax)
leaq 0x528(%rsp), %rsi
callq 0x82ef0
jmp 0x2bb12
movq 0x190(%rsp), %rax
movb $0x0, 0x507(%rsp)
movq %rax, 0x548(%rsp)
leaq 0x528(%rsp), %rdi
callq 0x8848
leaq 0x508(%rsp), %rdi
callq 0x8848
callq 0x46500
movq %rax, 0x170(%rsp)
jmp 0x2bb53
movq 0x170(%rsp), %rdi
movq 0x548(%rsp), %rsi
callq 0x465c0
jmp 0x2bb6a
movq 0x820(%rsp), %rdi
movq 0x548(%rsp), %rsi
callq 0x7c720
jmp 0x2bb81
movq 0x548(%rsp), %rcx
movq 0x910(%rsp), %rax
movq %rcx, 0x48(%rax)
movq 0xad0(%rsp), %rdi
callq 0x11420
movl $0x4, %ecx
mulq %rcx
movq %rax, %rdi
movq $-0x1, %rax
cmovoq %rax, %rdi
callq 0x8030
movq %rax, 0x168(%rsp)
jmp 0x2bbc7
movq 0x168(%rsp), %rax
movq %rax, 0x4f0(%rsp)
movl $0x0, 0x4ec(%rsp)
movl 0x4ec(%rsp), %eax
movq %rax, 0x160(%rsp)
movq 0xad0(%rsp), %rdi
callq 0x11420
movq %rax, %rcx
movq 0x160(%rsp), %rax
cmpq %rcx, %rax
jae 0x2bccb
movq 0xad0(%rsp), %rdi
movl 0x4ec(%rsp), %eax
movl %eax, %esi
callq 0x1fe20
movq (%rax), %rax
movl 0x8(%rax), %edx
movq 0x4f0(%rsp), %rax
movl 0x4ec(%rsp), %ecx
movl %edx, (%rax,%rcx,4)
movl 0x4ec(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4ec(%rsp)
jmp 0x2bbe2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2bcad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2bca0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x528(%rsp), %rdi
callq 0x8848
leaq 0x508(%rsp), %rdi
callq 0x8848
testb $0x1, 0x507(%rsp)
jne 0x2bcb9
jmp 0x2bcc6
movq 0x190(%rsp), %rdi
callq 0x8410
jmp 0x2c5fb
leaq 0xae776(%rip), %rax     # 0xda448
movl (%rax), %eax
movl %eax, 0x15c(%rsp)
testl %eax, %eax
je 0x2bcf6
jmp 0x2bce1
movl 0x15c(%rsp), %eax
subl $0x1, %eax
je 0x2bf4b
jmp 0x2c1b7
movl $0x100, %edi            # imm = 0x100
callq 0x8450
movq %rax, 0x150(%rsp)
jmp 0x2bd0a
movb $0x1, 0x4a7(%rsp)
movq 0xa90(%rsp), %rsi
leaq 0x4a8(%rsp), %rdi
callq 0xcdf0
jmp 0x2bd29
leaq 0x7fb65(%rip), %rdx     # 0xab895
leaq 0x4c8(%rsp), %rdi
leaq 0x4a8(%rsp), %rsi
callq 0xd060
jmp 0x2bd47
movq 0x910(%rsp), %rax
movq %rax, 0x130(%rsp)
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %rax
movq %rax, 0x138(%rsp)
leaq 0xae6da(%rip), %rax     # 0xda44c
movl (%rax), %eax
movl %eax, 0x144(%rsp)
leaq 0xae6ce(%rip), %rax     # 0xda450
movl (%rax), %eax
movl %eax, 0x12c(%rsp)
leaq 0xae6c2(%rip), %rax     # 0xda454
movl (%rax), %eax
movl %eax, 0x128(%rsp)
leaq 0xae6b6(%rip), %rax     # 0xda458
movl (%rax), %eax
movl %eax, 0x124(%rsp)
leaq 0xae6ae(%rip), %rax     # 0xda460
movq (%rax), %rbx
leaq 0xae6ac(%rip), %rax     # 0xda468
movq (%rax), %r14
leaq 0xae6aa(%rip), %rax     # 0xda470
movq (%rax), %r15
movq 0x4f0(%rsp), %r12
movq 0xad0(%rsp), %rdi
callq 0x11420
movl 0x124(%rsp), %r11d
movl 0x128(%rsp), %r10d
movl 0x12c(%rsp), %esi
movq 0x130(%rsp), %rcx
movq 0x138(%rsp), %r8
movl 0x144(%rsp), %r9d
movl %eax, %ebp
leaq 0xae73a(%rip), %rax     # 0xda550
movl (%rax), %eax
movl %eax, %r13d
shrl $0x9, %r13d
leaq 0xae69a(%rip), %rdx     # 0xda4c0
movl (%rdx), %edx
leaq 0xae69d(%rip), %rdi     # 0xda4cc
movl (%rdi), %edi
imull %edi, %edx
leaq 0xae705(%rip), %rdi     # 0xda540
movl (%rdi), %edi
imull %edi, %edx
leaq 0xae6fd(%rip), %rdi     # 0xda544
movl (%rdi), %edi
imull %edi, %edx
movq 0x150(%rsp), %rdi
imull %eax, %edx
shrl $0x9, %edx
movq %rsp, %rax
movq %rax, 0x148(%rsp)
movl %r13d, 0x40(%rax)
movl %ebp, 0x38(%rax)
movq %r12, 0x30(%rax)
movq %r15, 0x28(%rax)
movq %r14, 0x20(%rax)
movq %rbx, 0x18(%rax)
movl %r11d, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
movl %edx, 0x48(%rax)
xorl %eax, %eax
movl %eax, %edx
leaq 0x4c8(%rsp), %rsi
callq 0x6ebe0
jmp 0x2be9c
movq 0x150(%rsp), %rax
movb $0x0, 0x4a7(%rsp)
movq %rax, 0x4f8(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x8848
leaq 0x4a8(%rsp), %rdi
callq 0x8848
jmp 0x2c217
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2bf2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2bf20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x8848
leaq 0x4a8(%rsp), %rdi
callq 0x8848
testb $0x1, 0x4a7(%rsp)
jne 0x2bf39
jmp 0x2bf46
movq 0x150(%rsp), %rdi
callq 0x8410
jmp 0x2c5fb
movl $0x110, %edi            # imm = 0x110
callq 0x8450
movq %rax, 0x118(%rsp)
jmp 0x2bf5f
movb $0x1, 0x45f(%rsp)
movq 0xa90(%rsp), %rsi
leaq 0x460(%rsp), %rdi
callq 0xcdf0
jmp 0x2bf7e
leaq 0x7f910(%rip), %rdx     # 0xab895
leaq 0x480(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0xd060
jmp 0x2bf9c
movq 0x910(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq 0xa90(%rsp), %rax
movq 0x58(%rax), %rax
movq %rax, 0x100(%rsp)
leaq 0xae485(%rip), %rax     # 0xda44c
movl (%rax), %eax
movl %eax, 0x108(%rsp)
leaq 0xae479(%rip), %rax     # 0xda450
movl (%rax), %eax
movl %eax, 0xf4(%rsp)
leaq 0xae46d(%rip), %rax     # 0xda454
movl (%rax), %eax
movl %eax, 0xf0(%rsp)
leaq 0xae461(%rip), %rax     # 0xda458
movl (%rax), %eax
movl %eax, 0xec(%rsp)
leaq 0xae459(%rip), %rax     # 0xda460
movq (%rax), %rbx
leaq 0xae457(%rip), %rax     # 0xda468
movq (%rax), %r14
leaq 0xae455(%rip), %rax     # 0xda470
movq (%rax), %r15
movq 0x4f0(%rsp), %r12
leaq 0xae5cf(%rip), %rax     # 0xda5fc
movl (%rax), %ebp
movq 0xad0(%rsp), %rdi
callq 0x11420
movl 0xec(%rsp), %r11d
movl 0xf0(%rsp), %r10d
movl 0xf4(%rsp), %esi
movq 0xf8(%rsp), %rcx
movq 0x100(%rsp), %r8
movl 0x108(%rsp), %r9d
movl %eax, %r13d
leaq 0xae4db(%rip), %rax     # 0xda550
movl (%rax), %edi
movl %edi, 0x10c(%rsp)
shrl $0x9, %edi
leaq 0xae438(%rip), %rax     # 0xda4c0
movl (%rax), %edx
leaq 0xae43b(%rip), %rax     # 0xda4cc
movl (%rax), %eax
imull %eax, %edx
leaq 0xae4a3(%rip), %rax     # 0xda540
movl (%rax), %eax
imull %eax, %edx
leaq 0xae49b(%rip), %rax     # 0xda544
movl (%rax), %eax
imull %eax, %edx
movl 0x10c(%rsp), %eax
imull %eax, %edx
shrl $0x9, %edx
movq %rsp, %rax
movq %rax, 0x110(%rsp)
movl %edi, 0x48(%rax)
movq 0x118(%rsp), %rdi
movl %r13d, 0x40(%rax)
movl %ebp, 0x38(%rax)
movq %r12, 0x30(%rax)
movq %r15, 0x28(%rax)
movq %r14, 0x20(%rax)
movq %rbx, 0x18(%rax)
movl %r11d, 0x10(%rax)
movl %r10d, 0x8(%rax)
movl %esi, (%rax)
movl %edx, 0x50(%rax)
xorl %eax, %eax
movl %eax, %edx
leaq 0x480(%rsp), %rsi
callq 0x69250
jmp 0x2c108
movq 0x118(%rsp), %rax
movb $0x0, 0x45f(%rsp)
movq %rax, 0x4f8(%rsp)
leaq 0x480(%rsp), %rdi
callq 0x8848
leaq 0x460(%rsp), %rdi
callq 0x8848
jmp 0x2c217
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c199
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c18c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x480(%rsp), %rdi
callq 0x8848
leaq 0x460(%rsp), %rdi
callq 0x8848
testb $0x1, 0x45f(%rsp)
jne 0x2c1a5
jmp 0x2c1b2
movq 0x118(%rsp), %rdi
callq 0x8410
jmp 0x2c5fb
movq 0xade32(%rip), %rdi     # 0xd9ff0
leaq 0x7e723(%rip), %rsi     # 0xaa8e8
callq 0x8440
jmp 0x2c1cc
movq 0xade1d(%rip), %rdi     # 0xd9ff0
leaq 0x7f6c6(%rip), %rsi     # 0xab8a0
callq 0x8440
movq %rax, 0xe0(%rsp)
jmp 0x2c1e9
movq 0xe0(%rsp), %rdi
movq 0xadd60(%rip), %rsi     # 0xd9f58
callq 0x8480
jmp 0x2c1ff
movq 0xaddca(%rip), %rdi     # 0xd9fd0
callq 0x84f0
jmp 0x2c20d
movl $0x1, %edi
callq 0x8500
callq 0x46500
movq %rax, 0xd8(%rsp)
jmp 0x2c226
movq 0xd8(%rsp), %rdi
movq 0x4f8(%rsp), %rsi
callq 0x465c0
jmp 0x2c23d
movq 0x4f8(%rsp), %rcx
movq 0x910(%rsp), %rax
movq %rcx, 0x30(%rax)
movq 0x4f8(%rsp), %rcx
movq 0xa90(%rsp), %rax
movq %rcx, 0x48(%rax)
leaq 0xae1d4(%rip), %rax     # 0xda440
movl (%rax), %eax
movl %eax, 0xd4(%rsp)
testl %eax, %eax
je 0x2c419
jmp 0x2c27f
movl 0xd4(%rsp), %eax
subl $0x1, %eax
jne 0x2c57b
jmp 0x2c291
movl $0x90, %edi
callq 0x8450
movq %rax, 0xc8(%rsp)
jmp 0x2c2a5
movb $0x1, 0x417(%rsp)
movq 0xa90(%rsp), %rsi
leaq 0x418(%rsp), %rdi
callq 0xcdf0
jmp 0x2c2c4
leaq 0x7f5f5(%rip), %rdx     # 0xab8c0
leaq 0x438(%rsp), %rdi
leaq 0x418(%rsp), %rsi
callq 0xd060
jmp 0x2c2e2
callq 0xa6cd0
movq %rax, 0xc0(%rsp)
jmp 0x2c2f1
leaq 0xae14c(%rip), %rax     # 0xda444
movzwl (%rax), %eax
movl %eax, 0xbc(%rsp)
movq 0xad0(%rsp), %rdi
callq 0x11420
movq 0xc8(%rsp), %rdi
movq 0xc0(%rsp), %rdx
movl 0xbc(%rsp), %r8d
movl %eax, %r9d
leaq 0xae115(%rip), %rax     # 0xda446
movzwl (%rax), %ecx
leaq 0xae215(%rip), %rax     # 0xda550
movl (%rax), %esi
shrl $0x9, %esi
movq 0x4f8(%rsp), %r10
movq %rsp, %rax
movq %r10, 0x10(%rax)
movl %esi, 0x8(%rax)
movl %ecx, (%rax)
leaq 0x438(%rsp), %rsi
movl %r8d, %ecx
callq 0x86b70
jmp 0x2c366
movq 0xc8(%rsp), %rcx
movb $0x0, 0x417(%rsp)
movq 0xa90(%rsp), %rax
movq %rcx, 0x40(%rax)
leaq 0x438(%rsp), %rdi
callq 0x8848
leaq 0x418(%rsp), %rdi
callq 0x8848
jmp 0x2c57d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c3fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c3ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x438(%rsp), %rdi
callq 0x8848
leaq 0x418(%rsp), %rdi
callq 0x8848
testb $0x1, 0x417(%rsp)
jne 0x2c407
jmp 0x2c414
movq 0xc8(%rsp), %rdi
callq 0x8410
jmp 0x2c5fb
movl $0x90, %edi
callq 0x8450
movq %rax, 0xb0(%rsp)
jmp 0x2c42d
movb $0x1, 0x3cf(%rsp)
movq 0xa90(%rsp), %rsi
leaq 0x3d0(%rsp), %rdi
callq 0xcdf0
jmp 0x2c44c
leaq 0x7f46d(%rip), %rdx     # 0xab8c0
leaq 0x3f0(%rsp), %rdi
leaq 0x3d0(%rsp), %rsi
callq 0xd060
jmp 0x2c46a
leaq 0xadfd3(%rip), %rax     # 0xda444
movw (%rax), %ax
movw %ax, 0xa6(%rsp)
callq 0xa6cd0
movq %rax, 0xa8(%rsp)
jmp 0x2c48b
movq 0xa8(%rsp), %rcx
movq 0xb0(%rsp), %rdi
movw 0xa6(%rsp), %ax
leaq 0xae0a6(%rip), %rdx     # 0xda550
movl (%rdx), %r8d
shrl $0x9, %r8d
movq 0x4f8(%rsp), %r9
movzwl %ax, %edx
leaq 0x3f0(%rsp), %rsi
callq 0x8a3e0
jmp 0x2c4cb
movq 0xb0(%rsp), %rcx
movb $0x0, 0x3cf(%rsp)
movq 0xa90(%rsp), %rax
movq %rcx, 0x40(%rax)
leaq 0x3f0(%rsp), %rdi
callq 0x8848
leaq 0x3d0(%rsp), %rdi
callq 0x8848
jmp 0x2c57d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c55d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
jmp 0x2c550
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
leaq 0x3f0(%rsp), %rdi
callq 0x8848
leaq 0x3d0(%rsp), %rdi
callq 0x8848
testb $0x1, 0x3cf(%rsp)
jne 0x2c569
jmp 0x2c576
movq 0xb0(%rsp), %rdi
callq 0x8410
jmp 0x2c5fb
jmp 0x2c57d
callq 0x46500
movq %rax, 0x98(%rsp)
jmp 0x2c58c
movq 0x98(%rsp), %rdi
movq 0xa90(%rsp), %rax
movq 0x40(%rax), %rsi
callq 0x465c0
jmp 0x2c5a7
movq 0x4f8(%rsp), %rdi
movq 0xa90(%rsp), %rax
movq 0x40(%rax), %rsi
callq 0x67d20
jmp 0x2c5c2
leaq 0x7b8(%rsp), %rdi
callq 0x2d1d0
leaq 0x7d0(%rsp), %rdi
callq 0x2d1d0
leaq 0x7e8(%rsp), %rdi
callq 0x2d1d0
leaq 0x800(%rsp), %rdi
callq 0x2d1d0
jmp 0x2c697
leaq 0x7b8(%rsp), %rdi
callq 0x2d1d0
leaq 0x7d0(%rsp), %rdi
callq 0x2d1d0
leaq 0x7e8(%rsp), %rdi
callq 0x2d1d0
leaq 0x800(%rsp), %rdi
callq 0x2d1d0
jmp 0x2c6a9
movl $0x10, %edi
callq 0x8200
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x90(%rsp)
leaq 0x7f27f(%rip), %rsi     # 0xab8cf
callq 0x87d0
jmp 0x2c657
movq 0x90(%rsp), %rdi
movq 0xad962(%rip), %rsi     # 0xd9fc8
movq 0xad943(%rip), %rdx     # 0xd9fb0
callq 0x8710
jmp 0x2c6d0
movq 0x90(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xaa0(%rsp)
movl %eax, 0xa9c(%rsp)
callq 0x8330
jmp 0x2c6a9
addq $0xae8, %rsp            # imm = 0xAE8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x3a8(%rsp), %rdi
callq 0x2d230
movq 0x3b8(%rsp), %rdi
callq 0x1ff90
movq 0xaa0(%rsp), %rdi
callq 0x8770