// File: /workspace/github_cpp_makefile_star2_O2/nataly-enne[P]pet-fera/pet_fera_cadastrar.cpp
// Function: cadastrar(std::map<int, REPTIL_NATIVO, std::less<int>, std::allocator<std::pair<int const, REPTIL_NATIVO>>>&, std::map<int, REPTIL_EXOTICO, std::less<int>, std::allocator<std::pair<int const, REPTIL_EXOTICO>>>&, std::map<int, VETERINARIO, std::less<int>, std::allocator<std::pair<int const, VETERINARIO>>>, std::map<int, TRATADOR, std::less<int>, std::allocator<std::pair<int const, TRATADOR>>>)
void cadastrar(map <int, REPTIL_NATIVO> &repteis_nat, map <int, REPTIL_EXOTICO> &repteis_ex, map <int, VETERINARIO> vets, map <int, TRATADOR> tratadores){
	int id;
	bool venenoso, check;
	string classe, nome_cientifico, dieta, veterinario, tratador, nome_batismo, autorizacao, autorizacao_IBAMA, origem, tipo_veneno, nome, id_string, sexo_string, tamanho_string, venenoso_string;
	char sexo, tipo_animal, continuar = 's', sucesso, tipo = 'r';
	double tamanho;
	unsigned int old_size;
	ofstream nativos;
	ofstream exoticos;

	do{
		cout << "Deseja cadastrar um REPTIL NATIVO ou REPTIL EXÓTICO? \n n - NATIVO\n e - EXÓTICO" << endl;
		cin >> tipo_animal;
		if(tipo_animal != 'n' && tipo_animal != 'e'){
			cout << "Tipo invalido, tente novamente!" << endl;
			continuar = 's';
			continue;
		}
		else{
			// Recebe o ID e verifica se é valido.
			do{
				cout << "Digite o id:" << endl;
				cin >> id_string;
				if(!verifica_ID(repteis_nat, repteis_ex, tipo_animal, id_string, sucesso)){
					cout << "O ID deve conter apenas inteiros ou ID já cadastrado!" << endl << endl;
				}
				else{
					stringstream ss(id_string); // Converte string para int.
					ss >> id;
				}

			}while(sucesso == 'n');

			classe = "Reptilia";

			// Recebe o nome e verifica se é valido.
			do{
				cout << "Digite o nome:" << endl;
				cin.ignore();
				getline(cin, nome);
				if(!verifica_nome(nome, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				transform(nome.begin(), nome.end(), nome.begin(), ::tolower); // Converte a string nome para caracteres maiúsculos.
			}while(sucesso == 'n');

			// Recebe o nome cientifico e verifica se é valido.
			do{
				cout << "Digite o nome científico:" << endl;
				getline(cin, nome_cientifico);
				if(!verifica_nome_cient(nome_cientifico, sucesso)){
					cout << "ERRO: só pode ser inserido letra, espaço ou traço!" << endl << endl;
				}
			}while(sucesso == 'n');

			// Recebe a dieta e verifica se não possui caracteres proibidos.
			do{
				cout << "Digite a dieta: " << endl;
				getline(cin, dieta);
				if(!verifica_dieta(dieta, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
			}while(sucesso == 'n');

			do{
				cout << "Digite 0 - não venenoso / 1 - venenoso: " << endl;
				cin >> venenoso_string;
				cin.ignore();
				if(!verifica_venenoso(venenoso_string,sucesso)){
					cout << "ERRO: Digite apenas 0 para não venenoso OU 1 para venenoso!" << endl << endl;
				}
				else{
					stringstream ss(venenoso_string);
					ss >> venenoso;
					sucesso = 's';
					if(venenoso){
						cout << "Digite o tipo do veneno: " << endl;
						cin.ignore();
						getline(cin, tipo_veneno); 
					}
				}
			}while(sucesso == 'n');

			// Recebe o nome do veterinario e verifica se não possui caracteres proibidos.
			do{
				cout << "Digite o nome do veterinario: " << endl;
				getline(cin, veterinario);
				
				if(!verifica_nome(veterinario, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				check = check_vet(vets, veterinario);
				if(!check){
					cout << endl;
					cout << "ERRO: Veterinario não cadastrado!" << endl;
					sucesso = 'n';
				}
			}while(sucesso == 'n');

			// Recebe o nome do tratador e verifica se não possui caracteres proibido, se já foi cadastrado ou se possui nivel de segurança adequado.
			do{
				cout << "Digite o nome do tratador: " << endl;
				getline(cin, tratador);
				if(!verifica_nome(tratador, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				check = check_tratador(venenoso, tratadores, tratador, tipo);
				if(!check){
					cout << endl;
					cout << "ERRO: Tratador não cadastrado ou não se adequa!" << endl << endl;
					sucesso = 'n';
				}
			}while(sucesso == 'n');

			// Recebe o nome e verifica se é valido.
			do{
				cout << "Digite o nome de batismo: " << endl;
				getline(cin, nome_batismo);
				if(!verifica_nome(nome_batismo, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				transform(nome_batismo.begin(), nome_batismo.end(), nome_batismo.begin(), ::tolower); // Converte a string nome_batismo para caracteres minusculos.
			}while(sucesso == 'n');

			// Recebe o sexo do animal e verifica se é F ou M.
			do{
				cout << "Digite o sexo do animal: " << endl;
				getline(cin, sexo_string);
				transform(sexo_string.begin(), sexo_string.end(), sexo_string.begin(), ::toupper); // Converte a string sexo para caracteres maiúsculos.
				if(sexo_string != "F" && sexo_string != "M" ){
					sucesso = 'n';
					cout << "ERRO: só são permitidos F ou M!" << endl << endl;
				}
				else{
					sexo = (char)sexo_string[0];
					sucesso = 's';
				}
			}while(sucesso == 'n');

			// Recebe o tamanho do animal e verifica se não há caracteres proibidos.
			do{
				cout << "Digite o tamanho do animal: " << endl;
				getline(cin, tamanho_string);
				if(!verifica_tamanho(tamanho_string, sucesso)){
					cout << "ERRO: o tamanho do animal tem que ter apenas um '.' " << endl << endl;
				}
				tamanho = stod(tamanho_string);
			}while(sucesso == 'n');

			
			
			// Verifica se a autorizacao está no formato correto.
			do{
				cout << "Insira a autorizacao do IBAMA: " << endl;
				getline(cin, autorizacao_IBAMA);
				if(!verifica_autorizacao(autorizacao_IBAMA, sucesso)){
					cout << "ERRO: A autorizacao deve conter letras, numeros ou '-'" << endl << endl;
				}
			}while(sucesso == 'n');

			
			if(tipo_animal == 'n'){
				old_size = repteis_nat.size();

				// Verifica se foi passado uma string.
				do{
					cout << "Digite a UF de origem: " << endl;
					getline(cin, origem);
					if(!verifica_origem(origem, sucesso)){
						cout << "ERRO: Deve-se colocar apenas letras!" << endl << endl;
					}
				}while(sucesso == 'n');
				
				// Verifica se a autorizacao está no formato correto.
				do{
					cout << "Insira a autorizacao do animal: " << endl;
					getline(cin, autorizacao);
					if(!verifica_autorizacao(autorizacao, sucesso)){
						cout << "ERRO: A autorizacao deve conter letras, numeros e '-'" << endl << endl;
					}
				}while(sucesso == 'n');

				// Armazenando no map dados do tipo réptil nativo passados pelo usuário.
				repteis_nat.insert(pair <int, REPTIL_NATIVO> (id, REPTIL_NATIVO(id, classe, nome, nome_cientifico, sexo, tamanho, dieta, veterinario, tratador, nome_batismo, venenoso, tipo_veneno, autorizacao_IBAMA, origem, autorizacao)));
				
				if (repteis_nat.size() == old_size){
					cout << "Falha no cadastro do animal! Tente novamente!" << endl;
					continuar = 's';
					continue;
				}
			}
			else{
				old_size = repteis_ex.size();

				// Verifica se foi passado uma string.
				do{
					cout << "Digite o País de origem: " << endl;
					getline(cin, origem);
					if(!verifica_origem(origem, sucesso)){
						cout << "ERRO: Deve-se colocar apenas letras!" << endl << endl;
					}
				}while(sucesso == 'n');

				// Verifica se a autorizacao está no formato correto.
				do{
					cout << "Insira a autorizacao do animal: " << endl;
					getline(cin, autorizacao);
					if(!verifica_autorizacao(autorizacao, sucesso)){
						cout << "ERRO: A autorizacao deve conter letras, numeros e '-'"<< endl << endl;
					}
				}while(sucesso == 'n');

				// Armazenando no map dados do tipo réptil exótico passados pelo usuário.
				repteis_ex.insert(pair <int, REPTIL_EXOTICO> (id, REPTIL_EXOTICO(id, classe, nome, nome_cientifico, sexo, tamanho, dieta, veterinario, tratador, nome_batismo, venenoso, tipo_veneno, autorizacao_IBAMA, origem, autorizacao)));
				
				if (repteis_ex.size() == old_size){
					cout << "Falha no cadastro do animal! Tente novamente!" << endl;
					continuar = 's';
					continue;
				}
			}
		}
		cout << "\nAnimal cadastrado com sucesso!" << endl << endl;
		cout << "Deseja cadastrar um novo animal? s/n" << endl;
		cin >> continuar;
	}while(continuar == 's');

	if(!repteis_nat.empty()){
		nativos.open("repteis_nat.txt");
		for(auto it = repteis_nat.begin(); it != repteis_nat.end(); it++){
			nativos << (*it).second;
		}
		nativos.close();
	}
	if(!repteis_ex.empty()){
		exoticos.open("repteis_ex.txt");
		for(auto it = repteis_ex.begin(); it != repteis_ex.end(); it++){
			exoticos << (*it).second;
		}
		exoticos.close();
	}	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xcb8, %rsp            # imm = 0xCB8
movq %rcx, -0x108(%rbp)
movq %rdx, -0x110(%rbp)
movq %rsi, %rbx
leaq -0x240(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
movq %rdi, %r14
xorl %eax, %eax
leaq -0x1a0(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
leaq -0x180(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0x140(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x120(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rsi)
movb %al, (%rcx)
leaq -0xf0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0xd0(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rdx)
movb %al, (%rcx)
leaq -0x160(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0xb0(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rsi)
movb %al, (%rcx)
leaq -0x220(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x90(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rdx)
movb %al, (%rcx)
leaq -0x200(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x70(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rsi)
movb %al, (%rcx)
leaq -0x1e0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x1c0(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rdx)
movb %al, (%rcx)
movb %al, (%rsi)
movb $0x73, -0x2a(%rbp)
leaq -0xcd8(%rbp), %rdi
callq 0x3350
movq %r14, -0x40(%rbp)
movq %rbx, -0x48(%rbp)
leaq -0xad8(%rbp), %rdi
callq 0x3350
movq 0x21828(%rip), %r13     # 0x30fc8
movq 0x21839(%rip), %rbx     # 0x30fe0
leaq -0x5b0(%rbp), %r12
movq %r13, %rdi
leaq 0x14824(%rip), %rsi     # 0x23fdc
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x2c(%rbp), %rsi
callq 0x3280
movzbl -0x2c(%rbp), %eax
cmpl $0x6e, %eax
je 0xf7fc
cmpl $0x65, %eax
je 0xf7fc
movq %r13, %rdi
leaq 0x14304(%rip), %rsi     # 0x23aed
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movb $0x73, -0x2a(%rbp)
jmp 0xf7ae
movq %r13, %rdi
leaq 0x13ef9(%rip), %rsi     # 0x236ff
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x210(%rbp), %rsi
callq 0x3260
movb -0x2c(%rbp), %r14b
movq %r12, %rdi
leaq -0x210(%rbp), %rsi
callq 0x3290
movsbl %r14b, %edx
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq %r12, %rcx
leaq -0x29(%rbp), %r8
callq 0x2168a
movl %eax, %r15d
movq %r12, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xf88c
leaq -0x748(%rbp), %r14
movq %r14, %rdi
leaq -0x210(%rbp), %rsi
pushq $0x18
popq %rdx
callq 0x3300
movq %r14, %rdi
leaq -0x34(%rbp), %rsi
callq 0x3150
movq %r14, %rdi
callq 0x3170
jmp 0xf8ab
movq %r13, %rdi
leaq 0x13e76(%rip), %rsi     # 0x2370c
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xf7fc
leaq -0x250(%rbp), %rdi
leaq 0x1476a(%rip), %rsi     # 0x2402d
callq 0x33b0
movq %r13, %rdi
leaq 0x13e71(%rip), %rsi     # 0x23743
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
callq 0x3380
movq %rbx, %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3060
leaq -0xa0(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0xf929
movq %r13, %rdi
leaq 0x13e3e(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq -0xa0(%rbp), %r15
movq -0x98(%rbp), %r12
xorl %r14d, %r14d
cmpq %r14, %r12
je 0xf952
movsbl (%r15,%r14), %edi
callq 0x32c0
movb %al, (%r15,%r14)
incq %r14
jmp 0xf93a
cmpb $0x6e, -0x29(%rbp)
je 0xf8c8
movq %r13, %rdi
leaq 0x141b0(%rip), %rsi     # 0x23b16
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3060
leaq -0x1b0(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21bd2
testb %al, %al
jne 0xf9b5
movq %r13, %rdi
leaq 0x14191(%rip), %rsi     # 0x23b31
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xf95c
movq %r13, %rdi
leaq 0x141a2(%rip), %rsi     # 0x23b67
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x190(%rbp), %rsi
callq 0x3060
leaq -0x190(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22195
testb %al, %al
jne 0xfa14
movq %r13, %rdi
leaq 0x13d53(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xf9bb
movq %r13, %rdi
leaq 0x14612(%rip), %rsi     # 0x24036
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x3260
movq %rbx, %rdi
callq 0x3380
leaq -0x590(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x3290
leaq -0x590(%rbp), %r14
movq %r14, %rdi
leaq -0x29(%rbp), %rsi
callq 0x22634
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xfae9
leaq -0x748(%rbp), %r14
movq %r14, %rdi
leaq -0x1d0(%rbp), %rsi
pushq $0x18
popq %rdx
callq 0x3300
movq %r14, %rdi
leaq -0x2b(%rbp), %rsi
callq 0x31a0
movb $0x73, -0x29(%rbp)
cmpb $0x1, -0x2b(%rbp)
jne 0xfadb
movq %r13, %rdi
leaq 0x145e6(%rip), %rsi     # 0x2409d
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
callq 0x3380
movq %rbx, %rdi
leaq -0x230(%rbp), %rsi
callq 0x3060
leaq -0x748(%rbp), %rdi
callq 0x3170
jmp 0xfb08
movq %r13, %rdi
leaq 0x1456d(%rip), %rsi     # 0x24060
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xfa1a
jmp 0xfb37
movq %r13, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x14071(%rip), %rsi     # 0x23b97
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movb $0x6e, -0x29(%rbp)
movq %r13, %rdi
leaq 0x14037(%rip), %rsi     # 0x23b78
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x150(%rbp), %rsi
callq 0x3060
leaq -0x150(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0xfb90
movq %r13, %rdi
leaq 0x13bd7(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x570(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x3290
movq -0x110(%rbp), %rdi
leaq -0x570(%rbp), %r14
movq %r14, %rsi
callq 0x20e46
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xfb14
cmpb $0x6e, -0x29(%rbp)
je 0xfb37
movq %r13, %rdi
leaq 0x13fd9(%rip), %rsi     # 0x23bba
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x130(%rbp), %rsi
callq 0x3060
leaq -0x130(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0xfc30
movq %r13, %rdi
leaq 0x13b37(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movb -0x2b(%rbp), %r14b
leaq -0x550(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x3290
movzbl %r14b, %edi
movq -0x108(%rbp), %rsi
leaq -0x550(%rbp), %r14
movq %r14, %rdx
pushq $0x72
popq %rcx
callq 0x20eb7
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xfc80
cmpb $0x6e, -0x29(%rbp)
je 0xfbd7
jmp 0xfcb0
movq %r13, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x13f44(%rip), %rsi     # 0x23bd6
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movb $0x6e, -0x29(%rbp)
jmp 0xfbd7
movq %r13, %rdi
leaq 0x13f4e(%rip), %rsi     # 0x23c08
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x100(%rbp), %rsi
callq 0x3060
leaq -0x100(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0xfd09
movq %r13, %rdi
leaq 0x13a5e(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq -0x100(%rbp), %r15
movq -0xf8(%rbp), %r12
xorl %r14d, %r14d
cmpq %r14, %r12
je 0xfd32
movsbl (%r15,%r14), %edi
callq 0x32c0
movb %al, (%r15,%r14)
incq %r14
jmp 0xfd1a
cmpb $0x6e, -0x29(%rbp)
je 0xfcb0
movq %r13, %rdi
leaq 0x13edd(%rip), %rsi     # 0x23c23
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x80(%rbp), %rsi
callq 0x3060
movq -0x80(%rbp), %r15
movq -0x78(%rbp), %r12
xorl %r14d, %r14d
cmpq %r14, %r12
je 0xfd82
movsbl (%r15,%r14), %edi
callq 0x33a0
movb %al, (%r15,%r14)
incq %r14
jmp 0xfd6a
leaq -0x80(%rbp), %rdi
leaq 0x13eb0(%rip), %rsi     # 0x23c3d
callq 0xb86b
leaq -0x5b0(%rbp), %r12
testb %al, %al
je 0xfde0
leaq -0x80(%rbp), %rdi
leaq 0x13e97(%rip), %rsi     # 0x23c3f
callq 0xb86b
testb %al, %al
je 0xfde0
movb $0x6e, -0x29(%rbp)
movq %r13, %rdi
leaq 0x13e82(%rip), %rsi     # 0x23c41
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xfd3c
jmp 0xfded
movq -0x80(%rbp), %rax
movb (%rax), %al
movb %al, -0x2d(%rbp)
movb $0x73, -0x29(%rbp)
movq %r13, %rdi
leaq 0x13e6c(%rip), %rsi     # 0x23c63
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x3060
leaq -0x530(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x3290
leaq -0x530(%rbp), %r14
movq %r14, %rdi
leaq -0x29(%rbp), %rsi
callq 0x22273
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
jne 0xfe68
movq %r13, %rdi
leaq 0x13e2d(%rip), %rsi     # 0x23c80
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x1f0(%rbp), %rdi
xorl %esi, %esi
callq 0x11e17
movsd %xmm0, -0x60(%rbp)
cmpb $0x6e, -0x29(%rbp)
je 0xfded
movq %r13, %rdi
leaq 0x13ee2(%rip), %rsi     # 0x23d71
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x170(%rbp), %rsi
callq 0x3060
leaq -0x170(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0xfede
movq %r13, %rdi
leaq 0x140b9(%rip), %rsi     # 0x23f82
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xfe85
cmpb $0x6e, -0x2c(%rbp)
movsbl -0x2d(%rbp), %r14d
movl %r14d, -0x38(%rbp)
jne 0x1020a
movq -0x40(%rbp), %rax
movl 0x28(%rax), %r15d
movq %r13, %rdi
leaq 0x13ebe(%rip), %rsi     # 0x23dc7
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3060
leaq -0xc0(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22480
testb %al, %al
jne 0xff58
movq %r13, %rdi
leaq 0x13e9c(%rip), %rsi     # 0x23ddf
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xfeff
movq %r13, %rdi
leaq 0x13e9c(%rip), %rsi     # 0x23e04
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3060
leaq -0xe0(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0xffb7
movq %r13, %rdi
leaq 0x13def(%rip), %rsi     # 0x23d91
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xff5e
movl -0x34(%rbp), %eax
movl %eax, -0x58(%rbp)
leaq -0x4f0(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x3290
leaq -0x4d0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3290
leaq -0x4b0(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3290
leaq -0x490(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x3290
leaq -0x470(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x3290
leaq -0x450(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x3290
movq %r15, -0x50(%rbp)
leaq -0x430(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3290
movb -0x2b(%rbp), %r15b
leaq -0x410(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x3290
leaq -0x3f0(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x3290
leaq -0x3d0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3290
leaq -0x510(%rbp), %r14
movq %r14, %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3290
subq $0x8, %rsp
movzbl %r15b, %eax
leaq -0x8d8(%rbp), %r15
movq %r15, %rdi
movl -0x58(%rbp), %esi
leaq -0x4f0(%rbp), %rdx
leaq -0x4d0(%rbp), %rcx
leaq -0x4b0(%rbp), %r8
movl -0x38(%rbp), %r9d
movsd -0x60(%rbp), %xmm0
pushq %r14
leaq -0x3d0(%rbp), %r10
pushq %r10
leaq -0x3f0(%rbp), %r10
pushq %r10
leaq -0x410(%rbp), %r10
pushq %r10
pushq %rax
leaq -0x430(%rbp), %rax
pushq %rax
leaq -0x450(%rbp), %rax
pushq %rax
leaq -0x470(%rbp), %rax
pushq %rax
leaq -0x490(%rbp), %rax
pushq %rax
callq 0x6048
addq $0x50, %rsp
movl -0x34(%rbp), %eax
movl %eax, -0x748(%rbp)
leaq -0x740(%rbp), %rdi
movq %r15, %rsi
callq 0x12494
movq -0x40(%rbp), %r14
movq %r14, %rdi
leaq -0x748(%rbp), %rsi
callq 0x1315a
movq -0x50(%rbp), %r15
leaq -0x740(%rbp), %rdi
callq 0x6340
leaq -0x8d8(%rbp), %rdi
callq 0x6340
leaq -0x510(%rbp), %rdi
callq 0x3100
leaq -0x3d0(%rbp), %rdi
callq 0x3100
leaq -0x3f0(%rbp), %rdi
callq 0x3100
leaq -0x410(%rbp), %rdi
callq 0x3100
leaq -0x430(%rbp), %rdi
callq 0x3100
leaq -0x450(%rbp), %rdi
callq 0x3100
leaq -0x470(%rbp), %rdi
callq 0x3100
leaq -0x490(%rbp), %rdi
callq 0x3100
leaq -0x4b0(%rbp), %rdi
callq 0x3100
leaq -0x4d0(%rbp), %rdi
callq 0x3100
leaq -0x4f0(%rbp), %rdi
callq 0x3100
cmpq %r15, 0x28(%r14)
jne 0x1051e
movq %r13, %rdi
leaq 0x13c2d(%rip), %rsi     # 0x23e25
callq 0x31f0
movq %rax, %rdi
callq 0x3110
jmp 0xf7f6
movq -0x48(%rbp), %rax
movl 0x28(%rax), %eax
movq %rax, -0x58(%rbp)
movq %r13, %rdi
leaq 0x13c34(%rip), %rsi     # 0x23e53
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3060
leaq -0xc0(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22480
testb %al, %al
jne 0x1026e
movq %r13, %rdi
leaq 0x13b86(%rip), %rsi     # 0x23ddf
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x10215
movq %r13, %rdi
leaq 0x13b86(%rip), %rsi     # 0x23e04
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3060
leaq -0xe0(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0x102cd
movq %r13, %rdi
leaq 0x13ad9(%rip), %rsi     # 0x23d91
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x10274
movl -0x34(%rbp), %r15d
leaq -0x3b0(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x3290
leaq -0x390(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3290
leaq -0x370(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3290
leaq -0x350(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x3290
leaq -0x330(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x3290
leaq -0x310(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x3290
movl %r15d, -0x50(%rbp)
leaq -0x2f0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3290
movb -0x2b(%rbp), %r15b
leaq -0x2d0(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x3290
leaq -0x2b0(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x3290
leaq -0x290(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3290
leaq -0x270(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3290
subq $0x8, %rsp
movzbl %r15b, %eax
leaq -0x8d8(%rbp), %r14
movq %r14, %rdi
movl -0x50(%rbp), %esi
leaq -0x3b0(%rbp), %rdx
leaq -0x390(%rbp), %rcx
leaq -0x370(%rbp), %r8
movl -0x38(%rbp), %r9d
movsd -0x60(%rbp), %xmm0
leaq -0x270(%rbp), %r10
pushq %r10
leaq -0x290(%rbp), %r10
pushq %r10
leaq -0x2b0(%rbp), %r10
pushq %r10
leaq -0x2d0(%rbp), %r10
pushq %r10
pushq %rax
leaq -0x2f0(%rbp), %rax
pushq %rax
leaq -0x310(%rbp), %rax
pushq %rax
leaq -0x330(%rbp), %rax
pushq %rax
leaq -0x350(%rbp), %rax
pushq %rax
callq 0x637c
addq $0x50, %rsp
movl -0x34(%rbp), %eax
movl %eax, -0x748(%rbp)
leaq -0x740(%rbp), %rdi
movq %r14, %rsi
callq 0x12502
movq -0x48(%rbp), %r14
movq %r14, %rdi
leaq -0x748(%rbp), %rsi
callq 0x13380
leaq -0x740(%rbp), %rdi
callq 0x6632
leaq -0x8d8(%rbp), %rdi
callq 0x6632
leaq -0x270(%rbp), %rdi
callq 0x3100
leaq -0x290(%rbp), %rdi
callq 0x3100
leaq -0x2b0(%rbp), %rdi
callq 0x3100
leaq -0x2d0(%rbp), %rdi
callq 0x3100
leaq -0x2f0(%rbp), %rdi
callq 0x3100
leaq -0x310(%rbp), %rdi
callq 0x3100
leaq -0x330(%rbp), %rdi
callq 0x3100
leaq -0x350(%rbp), %rdi
callq 0x3100
leaq -0x370(%rbp), %rdi
callq 0x3100
leaq -0x390(%rbp), %rdi
callq 0x3100
leaq -0x3b0(%rbp), %rdi
callq 0x3100
movq -0x58(%rbp), %rax
cmpq %rax, 0x28(%r14)
jne 0x1051e
movq %r13, %rdi
leaq 0x13919(%rip), %rsi     # 0x23e25
callq 0x31f0
movq %rax, %rdi
callq 0x3110
jmp 0xf7f6
movq %r13, %rdi
leaq 0x13946(%rip), %rsi     # 0x23e6e
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x13947(%rip), %rsi     # 0x23e8e
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x2a(%rbp), %rsi
callq 0x3280
cmpb $0x73, -0x2a(%rbp)
je 0xf7ae
movq -0x40(%rbp), %r12
cmpq $0x0, 0x28(%r12)
movq -0x48(%rbp), %r15
je 0x105ca
leaq 0x13b36(%rip), %rsi     # 0x240b7
leaq -0xcd8(%rbp), %rdi
pushq $0x10
popq %rdx
callq 0x3040
movq 0x18(%r12), %r14
addq $0x8, %r12
leaq -0xcd8(%rbp), %rbx
cmpq %r12, %r14
je 0x105be
leaq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0x9266
movq %r14, %rdi
callq 0x3160
movq %rax, %r14
jmp 0x105a0
leaq -0xcd8(%rbp), %rdi
callq 0x32a0
cmpq $0x0, 0x28(%r15)
je 0x10620
leaq 0x13aef(%rip), %rsi     # 0x240c7
leaq -0xad8(%rbp), %rdi
pushq $0x10
popq %rdx
callq 0x3040
movq 0x18(%r15), %r14
addq $0x8, %r15
leaq -0xad8(%rbp), %rbx
cmpq %r15, %r14
je 0x10614
leaq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0x967f
movq %r14, %rdi
callq 0x3160
movq %rax, %r14
jmp 0x105f6
leaq -0xad8(%rbp), %rdi
callq 0x32a0
leaq -0xad8(%rbp), %rdi
callq 0x32e0
leaq -0xcd8(%rbp), %rdi
callq 0x32e0
leaq -0x1d0(%rbp), %rdi
callq 0x3100
leaq -0x1f0(%rbp), %rdi
callq 0x3100
leaq -0x80(%rbp), %rdi
callq 0x3100
leaq -0x210(%rbp), %rdi
callq 0x3100
leaq -0xa0(%rbp), %rdi
callq 0x3100
leaq -0x230(%rbp), %rdi
callq 0x3100
leaq -0xc0(%rbp), %rdi
callq 0x3100
leaq -0x170(%rbp), %rdi
callq 0x3100
leaq -0xe0(%rbp), %rdi
callq 0x3100
leaq -0x100(%rbp), %rdi
callq 0x3100
leaq -0x130(%rbp), %rdi
callq 0x3100
leaq -0x150(%rbp), %rdi
callq 0x3100
leaq -0x190(%rbp), %rdi
callq 0x3100
leaq -0x1b0(%rbp), %rdi
callq 0x3100
leaq -0x250(%rbp), %rdi
callq 0x3100
addq $0xcb8, %rsp            # imm = 0xCB8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0x10976
movq %rax, %rbx
jmp 0x10982
jmp 0x10967
jmp 0x10967
jmp 0x10967
movq %rax, %rbx
jmp 0x107cc
movq %rax, %rbx
jmp 0x107d8
movq %rax, %rbx
jmp 0x107e4
movq %rax, %rbx
jmp 0x1079c
movq %rax, %rbx
jmp 0x107a8
movq %rax, %rbx
jmp 0x107b4
movq %rax, %rbx
jmp 0x107c0
movq %rax, %rbx
jmp 0x108c3
movq %rax, %rbx
leaq -0x740(%rbp), %rdi
callq 0x6340
jmp 0x10762
movq %rax, %rbx
leaq -0x8d8(%rbp), %rdi
callq 0x6340
jmp 0x10773
movq %rax, %rbx
leaq -0x510(%rbp), %rdi
callq 0x3100
jmp 0x10784
movq %rax, %rbx
leaq -0x3d0(%rbp), %rdi
callq 0x3100
leaq -0x3f0(%rbp), %rdi
callq 0x3100
leaq -0x410(%rbp), %rdi
callq 0x3100
leaq -0x430(%rbp), %rdi
callq 0x3100
leaq -0x450(%rbp), %rdi
callq 0x3100
leaq -0x470(%rbp), %rdi
callq 0x3100
leaq -0x490(%rbp), %rdi
callq 0x3100
leaq -0x4b0(%rbp), %rdi
callq 0x3100
leaq -0x4d0(%rbp), %rdi
callq 0x3100
leaq -0x4f0(%rbp), %rdi
jmp 0x10942
movq %rax, %rbx
jmp 0x10790
movq %rax, %rbx
jmp 0x108b7
movq %rax, %rbx
jmp 0x108ab
movq %rax, %rbx
jmp 0x1089f
movq %rax, %rbx
jmp 0x10893
movq %rax, %rbx
jmp 0x10887
movq %rax, %rbx
jmp 0x1087b
movq %rax, %rbx
jmp 0x1086f
movq %rax, %rbx
jmp 0x10863
movq %rax, %rbx
jmp 0x10857
movq %rax, %rbx
jmp 0x1084b
movq %rax, %rbx
leaq -0x740(%rbp), %rdi
callq 0x6632
leaq -0x8d8(%rbp), %rdi
callq 0x6632
leaq -0x270(%rbp), %rdi
callq 0x3100
leaq -0x290(%rbp), %rdi
callq 0x3100
leaq -0x2b0(%rbp), %rdi
callq 0x3100
leaq -0x2d0(%rbp), %rdi
callq 0x3100
leaq -0x2f0(%rbp), %rdi
callq 0x3100
leaq -0x310(%rbp), %rdi
callq 0x3100
leaq -0x330(%rbp), %rdi
callq 0x3100
leaq -0x350(%rbp), %rdi
callq 0x3100
leaq -0x370(%rbp), %rdi
callq 0x3100
leaq -0x390(%rbp), %rdi
callq 0x3100
leaq -0x3b0(%rbp), %rdi
jmp 0x10942
jmp 0x10967
jmp 0x10967
movq %rax, %rbx
jmp 0x108cf
movq %rax, %rbx
jmp 0x107f0
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x1091b
movq %rax, %rbx
leaq -0x530(%rbp), %rdi
jmp 0x10942
movq %rax, %rbx
leaq -0x590(%rbp), %rdi
jmp 0x10942
movq %rax, %rbx
leaq -0x5b0(%rbp), %rdi
jmp 0x10942
movq %rax, %rbx
leaq -0x748(%rbp), %rdi
callq 0x3170
jmp 0x1096a
movq %rax, %rbx
leaq -0x550(%rbp), %rdi
jmp 0x10942
movq %rax, %rbx
leaq -0x570(%rbp), %rdi
callq 0x3100
jmp 0x1096a
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
jmp 0x10967
movq %rax, %rbx
leaq -0xad8(%rbp), %rdi
callq 0x32e0
leaq -0xcd8(%rbp), %rdi
callq 0x32e0
leaq -0x1d0(%rbp), %rdi
callq 0x3100
leaq -0x1f0(%rbp), %rdi
callq 0x3100
leaq -0x80(%rbp), %rdi
callq 0x3100
leaq -0x210(%rbp), %rdi
callq 0x3100
leaq -0xa0(%rbp), %rdi
callq 0x3100
leaq -0x230(%rbp), %rdi
callq 0x3100
leaq -0xc0(%rbp), %rdi
callq 0x3100
leaq -0x170(%rbp), %rdi
callq 0x3100
leaq -0xe0(%rbp), %rdi
callq 0x3100
leaq -0x100(%rbp), %rdi
callq 0x3100
leaq -0x130(%rbp), %rdi
callq 0x3100
leaq -0x150(%rbp), %rdi
callq 0x3100
leaq -0x190(%rbp), %rdi
callq 0x3100
leaq -0x1b0(%rbp), %rdi
callq 0x3100
leaq -0x250(%rbp), %rdi
callq 0x3100
movq %rbx, %rdi
callq 0x3370