// File: /workspace/github_cpp_makefile_star2_O1/t0mm4rx[P]piscine_cpp/day05/ex02/main.cpp
// Function: main
int main(void)
{
	Bureaucrat				john("John", 4);
	Bureaucrat				johnson("Johnson", 140);
	ShrubberyCreationForm	form1("tree");
	RobotomyRequestForm		form2("Micheal");
	PresidentialPardonForm	form3("Johson");

	johnson.signForm(form1);
	johnson.executeForm(form1);
	john.executeForm(form1);
	john.executeForm(form2);
	john.signForm(form2);
	john.executeForm(form2);
	johnson.signForm(form3);
	john.executeForm(form3);
	john.signForm(form3);
	john.executeForm(form3);
	return (0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x200, %rsp            # imm = 0x200
leaq -0xc8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x817(%rip), %rsi       # 0x441f
leaq 0x814(%rip), %rdx       # 0x4423
leaq -0xd8(%rbp), %rbx
movq %rbx, %rdi
callq 0x32c8
leaq -0x38(%rbp), %rdi
movq %rbx, %rsi
movl $0x4, %edx
callq 0x247c
movq -0xd8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3c4a
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0xa8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x7c8(%rip), %rsi       # 0x4424
leaq 0x7c8(%rip), %rdx       # 0x442b
leaq -0xb8(%rbp), %rdi
callq 0x32c8
leaq -0x100(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
movl $0x8c, %edx
callq 0x247c
movq -0xb8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3ca2
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x88(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x778(%rip), %rsi       # 0x442c
leaq 0x775(%rip), %rdx       # 0x4430
leaq -0x98(%rbp), %rdi
callq 0x32c8
leaq -0x208(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x3720
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x3cf5
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x68(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x72d(%rip), %rsi       # 0x4431
leaq 0x72d(%rip), %rdx       # 0x4438
leaq -0x78(%rbp), %rdi
callq 0x32c8
leaq -0x1b0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x3364
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0x3d39
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x48(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x6f1(%rip), %rsi       # 0x4439
leaq 0x6f0(%rip), %rdx       # 0x443f
leaq -0x58(%rbp), %rdi
callq 0x32c8
leaq -0x158(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2f50
movq -0x58(%rbp), %rdi
cmpq %r14, %rdi
je 0x3d7d
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x100(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x25de
leaq -0x100(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x25de
leaq -0x38(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x270a
leaq -0x100(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x25de
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x25de
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x270a
leaq -0x158(%rbp), %rdi
callq 0x31b2
leaq -0x1b0(%rbp), %rdi
callq 0x35c6
leaq -0x208(%rbp), %rdi
callq 0x3982
leaq -0x100(%rbp), %rdi
callq 0x2570
leaq -0x38(%rbp), %rdi
callq 0x2570
xorl %eax, %eax
addq $0x200, %rsp            # imm = 0x200
popq %rbx
popq %r14
popq %rbp
retq
movq %rax, %rbx
movq -0x58(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f3c
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f3c
movq %rax, %rbx
jmp 0x3f3c
movq %rax, %rbx
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f48
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f48
movq %rax, %rbx
jmp 0x3f48
movq %rax, %rbx
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f54
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f54
movq %rax, %rbx
jmp 0x3f54
movq %rax, %rbx
movq -0xb8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f60
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f60
movq %rax, %rbx
jmp 0x3f60
movq %rax, %rbx
movq -0xd8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f69
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f69
movq %rax, %rbx
leaq -0x158(%rbp), %rdi
callq 0x31b2
leaq -0x1b0(%rbp), %rdi
callq 0x35c6
leaq -0x208(%rbp), %rdi
callq 0x3982
leaq -0x100(%rbp), %rdi
callq 0x2570
leaq -0x38(%rbp), %rdi
callq 0x2570
movq %rbx, %rdi
callq 0x2190