// File: t0mm4rx[P]piscine_cpp/day03/ex00/main.cpp
// Function: main
int main(void)
{
	srand(time(0));
	FragTrap john("John");
	FragTrap micheal("Micheal");
	FragTrap john2 = john;
	FragTrap micheal2(micheal);

	john2.meleeAttack("Rose");
	john.rangedAttack("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	micheal2.rangedAttack("Rose");
	micheal.vaulthunter_dot_exe("John");
	micheal.takeDamage(30);
	micheal.meleeAttack("John");
	john.takeDamage(20);

	return (0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x380, %rsp            # imm = 0x380
movl $0x0, -0x4(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x2100
movl %eax, %edi
callq 0x2110
leaq -0x71(%rbp), %rdi
movq %rdi, -0x320(%rbp)
callq 0x2210
movq -0x320(%rbp), %rdx
leaq 0x15d7(%rip), %rsi      # 0x4147
leaq -0x70(%rbp), %rdi
callq 0x3350
jmp 0x2b7b
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x23c0
jmp 0x2b8a
leaq -0x70(%rbp), %rdi
callq 0x2090
leaq -0x71(%rbp), %rdi
callq 0x2150
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x328(%rbp)
callq 0x2210
movq -0x328(%rbp), %rdx
leaq 0x158f(%rip), %rsi      # 0x414c
leaq -0xf0(%rbp), %rdi
callq 0x3350
jmp 0x2bcb
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x23c0
jmp 0x2be0
leaq -0xf0(%rbp), %rdi
callq 0x2090
leaq -0xf1(%rbp), %rdi
callq 0x2150
leaq -0x140(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x24a0
jmp 0x2c0a
leaq -0x188(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x24a0
jmp 0x2c1f
leaq -0x1a9(%rbp), %rdi
movq %rdi, -0x330(%rbp)
callq 0x2210
movq -0x330(%rbp), %rdx
leaq 0x1514(%rip), %rsi      # 0x4154
leaq -0x1a8(%rbp), %rdi
callq 0x3350
jmp 0x2c4e
leaq -0x140(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x26d0
jmp 0x2c63
leaq -0x1a8(%rbp), %rdi
callq 0x2090
leaq -0x1a9(%rbp), %rdi
callq 0x2150
leaq -0x1d1(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x2210
movq -0x338(%rbp), %rdx
leaq 0x14b0(%rip), %rsi      # 0x414c
leaq -0x1d0(%rbp), %rdi
callq 0x3350
jmp 0x2caa
leaq -0x50(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x2640
jmp 0x2cbc
leaq -0x1d0(%rbp), %rdi
callq 0x2090
leaq -0x1d1(%rbp), %rdi
callq 0x2150
leaq -0x1f9(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0x2210
movq -0x340(%rbp), %rdx
leaq 0x1457(%rip), %rsi      # 0x414c
leaq -0x1f8(%rbp), %rdi
callq 0x3350
jmp 0x2d03
leaq -0x50(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x28f0
jmp 0x2d15
leaq -0x1f8(%rbp), %rdi
callq 0x2090
leaq -0x1f9(%rbp), %rdi
callq 0x2150
leaq -0x221(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x2210
movq -0x348(%rbp), %rdx
leaq 0x13fe(%rip), %rsi      # 0x414c
leaq -0x220(%rbp), %rdi
callq 0x3350
jmp 0x2d5c
leaq -0x50(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x28f0
jmp 0x2d6e
leaq -0x220(%rbp), %rdi
callq 0x2090
leaq -0x221(%rbp), %rdi
callq 0x2150
leaq -0x249(%rbp), %rdi
movq %rdi, -0x350(%rbp)
callq 0x2210
movq -0x350(%rbp), %rdx
leaq 0x13a5(%rip), %rsi      # 0x414c
leaq -0x248(%rbp), %rdi
callq 0x3350
jmp 0x2db5
leaq -0x50(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x28f0
jmp 0x2dc7
leaq -0x248(%rbp), %rdi
callq 0x2090
leaq -0x249(%rbp), %rdi
callq 0x2150
leaq -0x271(%rbp), %rdi
movq %rdi, -0x358(%rbp)
callq 0x2210
movq -0x358(%rbp), %rdx
leaq 0x134c(%rip), %rsi      # 0x414c
leaq -0x270(%rbp), %rdi
callq 0x3350
jmp 0x2e0e
leaq -0x50(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x28f0
jmp 0x2e20
leaq -0x270(%rbp), %rdi
callq 0x2090
leaq -0x271(%rbp), %rdi
callq 0x2150
leaq -0x299(%rbp), %rdi
movq %rdi, -0x360(%rbp)
callq 0x2210
movq -0x360(%rbp), %rdx
leaq 0x12f3(%rip), %rsi      # 0x414c
leaq -0x298(%rbp), %rdi
callq 0x3350
jmp 0x2e67
leaq -0x50(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x28f0
jmp 0x2e79
leaq -0x298(%rbp), %rdi
callq 0x2090
leaq -0x299(%rbp), %rdi
callq 0x2150
leaq -0x2c1(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0x2210
movq -0x368(%rbp), %rdx
leaq 0x12a2(%rip), %rsi      # 0x4154
leaq -0x2c0(%rbp), %rdi
callq 0x3350
jmp 0x2ec0
leaq -0x188(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x2640
jmp 0x2ed5
leaq -0x2c0(%rbp), %rdi
callq 0x2090
leaq -0x2c1(%rbp), %rdi
callq 0x2150
leaq -0x2e9(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0x2210
movq -0x370(%rbp), %rdx
leaq 0x1239(%rip), %rsi      # 0x4147
leaq -0x2e8(%rbp), %rdi
callq 0x3350
jmp 0x2f1c
leaq -0xd0(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x28f0
jmp 0x2f31
leaq -0x2e8(%rbp), %rdi
callq 0x2090
leaq -0x2e9(%rbp), %rdi
callq 0x2150
leaq -0xd0(%rbp), %rdi
movl $0x1e, %esi
callq 0x2760
jmp 0x2f5c
leaq -0x311(%rbp), %rdi
movq %rdi, -0x378(%rbp)
callq 0x2210
movq -0x378(%rbp), %rdx
leaq 0x11ca(%rip), %rsi      # 0x4147
leaq -0x310(%rbp), %rdi
callq 0x3350
jmp 0x2f8b
leaq -0xd0(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x26d0
jmp 0x2fa0
leaq -0x310(%rbp), %rdi
callq 0x2090
leaq -0x311(%rbp), %rdi
callq 0x2150
leaq -0x50(%rbp), %rdi
movl $0x14, %esi
callq 0x2760
jmp 0x2fc8
movl $0x0, -0x4(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x25d0
leaq -0x140(%rbp), %rdi
callq 0x25d0
leaq -0xd0(%rbp), %rdi
callq 0x25d0
leaq -0x50(%rbp), %rdi
callq 0x25d0
movl -0x4(%rbp), %eax
addq $0x380, %rsp            # imm = 0x380
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3031
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x2090
leaq -0x71(%rbp), %rdi
callq 0x2150
jmp 0x333c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x306b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x2090
leaq -0xf1(%rbp), %rdi
callq 0x2150
jmp 0x3333
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3327
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x331b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x30d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x2090
leaq -0x1a9(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x310d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x2090
leaq -0x1d1(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x314a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x2090
leaq -0x1f9(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3187
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x2090
leaq -0x221(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x31c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x2090
leaq -0x249(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3201
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x2090
leaq -0x271(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x323e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x2090
leaq -0x299(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x327b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x2090
leaq -0x2c1(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x32b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x2090
leaq -0x2e9(%rbp), %rdi
callq 0x2150
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x330f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3303
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x2090
leaq -0x311(%rbp), %rdi
callq 0x2150
leaq -0x188(%rbp), %rdi
callq 0x25d0
leaq -0x140(%rbp), %rdi
callq 0x25d0
leaq -0xd0(%rbp), %rdi
callq 0x25d0
leaq -0x50(%rbp), %rdi
callq 0x25d0
movq -0x80(%rbp), %rdi
callq 0x2200
nopw %cs:(%rax,%rax)
nop