// File: brashi[P]PetFera/src/./petshop.cpp
// Function: Petshop::atualizarTratador()
void Petshop::atualizarTratador() {
    string nome;

    shared_ptr<Tratador> tratador;
    Tratador antigotrt;
    long unsigned int num;

    // Configuração do texto acima dos campos de alteração
    string updateText = "Alterar: (para não alterar mantenha em branco)";

    if(this->tratadores.size() == 0)
        throw "Não há tratadores para remover no sistema!";

    cout << endl << "Tratadores registrados: " << endl;
    this->listarTratadores();
    cout << endl << "Digite o ID do tratador a ser alterado: ";
    getline(cin, nome);
    num = stoi(nome);
    if(num >= 0 && num < this->tratadores.size())
        tratador = this->tratadores[num];
    else
        throw "Tratador não existe!";

    antigotrt = *tratador;

    cout << endl << updateText;
    tratador->setNome();

    cout << endl << updateText;
    tratador->setEmail();

    cout << endl << updateText;
    tratador->setTelefone();

    Uniforme un = tratador->getUniforme();

    cout << endl << updateText;
    if(tratador->setUniforme()) {
        Uniforme novo = tratador->getUniforme();
        for(auto& animal : this->animais) {
            if(animal->getTratador() == tratador) {
                string classe = Animal::getClasse(animal);
                if(animal->getPerigoso() && novo != Vermelho) {
                    tratador->setUniforme(un);
                    cout << "O tratador possui animais que requerem segurança maior que a informada." << endl << "Valor anterior restaurado." << endl;
                    break;
                } else if((classe == "Réptil" || classe == "Mamífero") && (novo == Verde)) {
                    tratador->setUniforme(un);
                    cout << "O tratador possui animais que requerem segurança maior que a informada." << endl << "Valor anterior restaurado." << endl;
                    break;
                }
            }
        }
        /*if(tratador->getUniforme() != un)
            for(auto& animal : this->animais)
                if(animal->getTratador() == antigotrt)
                    animal->setTratador(*tratador); */
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x210, %rsp            # imm = 0x210
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x6480
leaq -0x38(%rbp), %rdi
callq 0x21c40
leaq -0xa8(%rbp), %rdi
callq 0x21c60
jmp 0x1d23a
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0x65a0
movq -0x168(%rbp), %rdx
leaq 0x2445d(%rip), %rsi     # 0x416b8
leaq -0xe0(%rbp), %rdi
callq 0xc1d0
jmp 0x1d269
leaq -0xe1(%rbp), %rdi
callq 0x6380
movq -0x160(%rbp), %rdi
addq $0x18, %rdi
callq 0x21b60
cmpq $0x0, %rax
jne 0x1d308
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x244c2(%rip), %rax     # 0x41761
movq %rax, (%rdi)
movq 0x45cff(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x1d973
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1d955
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xe1(%rbp), %rdi
callq 0x6380
jmp 0x1d949
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1d93d
movq 0x45cb9(%rip), %rdi     # 0x62fc8
movq 0x45c8a(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x170(%rbp)
jmp 0x1d324
movq -0x170(%rbp), %rdi
leaq 0x2445c(%rip), %rsi     # 0x4178e
callq 0x6310
movq %rax, -0x178(%rbp)
jmp 0x1d340
movq -0x178(%rbp), %rdi
movq 0x45c52(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1d355
movq -0x160(%rbp), %rdi
callq 0x1cb60
jmp 0x1d363
movq 0x45c5e(%rip), %rdi     # 0x62fc8
movq 0x45c2f(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x180(%rbp)
jmp 0x1d37f
movq -0x180(%rbp), %rdi
leaq 0x2441a(%rip), %rsi     # 0x417a7
callq 0x6310
jmp 0x1d394
movq 0x45c45(%rip), %rdi     # 0x62fe0
leaq -0x28(%rbp), %rsi
callq 0x6090
jmp 0x1d3a6
xorl %eax, %eax
movl %eax, %esi
leaq -0x28(%rbp), %rdi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x184(%rbp)
jmp 0x1d3c0
movl -0x184(%rbp), %eax
cltq
movq %rax, -0xc0(%rbp)
cmpq $0x0, -0xc0(%rbp)
jb 0x1d42b
movq -0x160(%rbp), %rdi
movq -0xc0(%rbp), %rax
movq %rax, -0x190(%rbp)
addq $0x18, %rdi
callq 0x21b60
movq %rax, %rcx
movq -0x190(%rbp), %rax
cmpq %rcx, %rax
jae 0x1d42b
movq -0x160(%rbp), %rdi
addq $0x18, %rdi
movq -0xc0(%rbp), %rsi
callq 0x21bd0
movq %rax, %rsi
leaq -0x38(%rbp), %rdi
callq 0x21ca0
jmp 0x1d457
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x2408b(%rip), %rax     # 0x414ca
movq %rax, (%rdi)
movq 0x45b5f(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x1d973
leaq -0x38(%rbp), %rdi
callq 0x21cd0
movq %rax, %rsi
leaq -0xa8(%rbp), %rdi
callq 0x21d00
jmp 0x1d471
movq 0x45b50(%rip), %rdi     # 0x62fc8
movq 0x45b21(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x198(%rbp)
jmp 0x1d48d
movq -0x198(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x6300
jmp 0x1d4a2
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
callq 0x27950
jmp 0x1d4b5
movq 0x45b0c(%rip), %rdi     # 0x62fc8
movq 0x45add(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x1a0(%rbp)
jmp 0x1d4d1
movq -0x1a0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x6300
jmp 0x1d4e6
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
callq 0x27c70
jmp 0x1d4f9
movq 0x45ac8(%rip), %rdi     # 0x62fc8
movq 0x45a99(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x1a8(%rbp)
jmp 0x1d515
movq -0x1a8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x6300
jmp 0x1d52a
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
callq 0x27ae0
jmp 0x1d53d
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
callq 0x280c0
movl %eax, -0x1ac(%rbp)
jmp 0x1d556
movl -0x1ac(%rbp), %eax
movl %eax, -0xe8(%rbp)
movq 0x45a5f(%rip), %rdi     # 0x62fc8
movq 0x45a30(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x1b8(%rbp)
jmp 0x1d57e
movq -0x1b8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x6300
jmp 0x1d593
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
callq 0x280e0
movb %al, -0x1b9(%rbp)
jmp 0x1d5ac
movb -0x1b9(%rbp), %al
testb $0x1, %al
jne 0x1d5bb
jmp 0x1d90a
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
callq 0x280c0
movl %eax, -0x1c0(%rbp)
jmp 0x1d5d4
movq -0x160(%rbp), %rax
movl -0x1c0(%rbp), %ecx
movl %ecx, -0xec(%rbp)
addq $0x30, %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
callq 0xb370
movq %rax, -0x100(%rbp)
movq -0xf8(%rbp), %rdi
callq 0xb3a0
movq %rax, -0x108(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0xb3d0
testb $0x1, %al
jne 0x1d634
jmp 0x1d908
leaq -0x100(%rbp), %rdi
callq 0xb410
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rdi
callq 0xb480
movq %rax, %rsi
leaq -0x120(%rbp), %rdi
callq 0x29cd0
jmp 0x1d664
leaq -0x120(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x21d40
movb %al, -0x1c1(%rbp)
leaq -0x120(%rbp), %rdi
callq 0xb4a0
movb -0x1c1(%rbp), %al
testb $0x1, %al
jne 0x1d695
jmp 0x1d8f5
movq -0x110(%rbp), %rsi
leaq -0x150(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
callq 0xb430
movq -0x1d0(%rbp), %rsi
leaq -0x140(%rbp), %rdi
xorl %edx, %edx
callq 0x2a420
jmp 0x1d6c6
leaq -0x150(%rbp), %rdi
callq 0xb460
movq -0x110(%rbp), %rdi
callq 0xb480
movq %rax, %rdi
callq 0x29d30
movb %al, -0x1d1(%rbp)
jmp 0x1d6ee
movb -0x1d1(%rbp), %al
testb $0x1, %al
jne 0x1d6fd
jmp 0x1d7e1
cmpl $0x2, -0xec(%rbp)
je 0x1d7e1
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
movl -0xe8(%rbp), %esi
callq 0x28290
jmp 0x1d723
movq 0x4589e(%rip), %rdi     # 0x62fc8
leaq 0x2409f(%rip), %rsi     # 0x417d0
callq 0x6310
movq %rax, -0x1e0(%rbp)
jmp 0x1d73f
movq -0x1e0(%rbp), %rdi
movq 0x45853(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x1e8(%rbp)
jmp 0x1d75b
movq -0x1e8(%rbp), %rdi
leaq 0x240b0(%rip), %rsi     # 0x41819
callq 0x6310
movq %rax, -0x1f0(%rbp)
jmp 0x1d777
movq -0x1f0(%rbp), %rdi
movq 0x4581b(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1d78c
movl $0x2, -0x154(%rbp)
jmp 0x1d8d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x150(%rbp), %rdi
callq 0xb460
jmp 0x1d93d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x6678
jmp 0x1d93d
leaq 0x2404c(%rip), %rsi     # 0x41834
leaq -0x140(%rbp), %rdi
callq 0xbc30
movb %al, -0x1f1(%rbp)
jmp 0x1d7fc
movb -0x1f1(%rbp), %al
testb $0x1, %al
jne 0x1d832
jmp 0x1d808
leaq 0x2402d(%rip), %rsi     # 0x4183c
leaq -0x140(%rbp), %rdi
callq 0xbc30
movb %al, -0x1f2(%rbp)
jmp 0x1d823
movb -0x1f2(%rbp), %al
testb $0x1, %al
jne 0x1d832
jmp 0x1d8cd
cmpl $0x0, -0xec(%rbp)
jne 0x1d8cd
leaq -0x38(%rbp), %rdi
callq 0xb2d0
movq %rax, %rdi
movl -0xe8(%rbp), %esi
callq 0x28290
jmp 0x1d858
movq 0x45769(%rip), %rdi     # 0x62fc8
leaq 0x23f6a(%rip), %rsi     # 0x417d0
callq 0x6310
movq %rax, -0x200(%rbp)
jmp 0x1d874
movq -0x200(%rbp), %rdi
movq 0x4571e(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x208(%rbp)
jmp 0x1d890
movq -0x208(%rbp), %rdi
leaq 0x23f7b(%rip), %rsi     # 0x41819
callq 0x6310
movq %rax, -0x210(%rbp)
jmp 0x1d8ac
movq -0x210(%rbp), %rdi
movq 0x456e6(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1d8c1
movl $0x2, -0x154(%rbp)
jmp 0x1d8d9
jmp 0x1d8cf
movl $0x0, -0x154(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x6678
movl -0x154(%rbp), %eax
testl %eax, %eax
je 0x1d8f3
jmp 0x1d8f1
jmp 0x1d908
jmp 0x1d8f5
jmp 0x1d8f7
leaq -0x100(%rbp), %rdi
callq 0xbac0
jmp 0x1d618
jmp 0x1d90a
leaq -0xe0(%rbp), %rdi
callq 0x6678
leaq -0xa8(%rbp), %rdi
callq 0x28070
leaq -0x38(%rbp), %rdi
callq 0xb4a0
leaq -0x28(%rbp), %rdi
callq 0x6678
addq $0x210, %rsp            # imm = 0x210
popq %rbp
retq
leaq -0xe0(%rbp), %rdi
callq 0x6678
leaq -0xa8(%rbp), %rdi
callq 0x28070
leaq -0x38(%rbp), %rdi
callq 0xb4a0
leaq -0x28(%rbp), %rdi
callq 0x6678
movq -0xb0(%rbp), %rdi
callq 0x6590
nopw %cs:(%rax,%rax)