// File: t0mm4rx[P]piscine_cpp/day08/ex02/main.cpp
// Function: main
int main()
{
	MutantStack<int> mstack;
	mstack.push(5);
	mstack.push(17);
	std::cout << mstack.top() << std::endl;
	mstack.pop();
	std::cout << mstack.size() << std::endl;
	mstack.push(3);
	mstack.push(5);
	mstack.push(737);
	mstack.push(0);
	MutantStack<int>::iterator it = mstack.begin();
	MutantStack<int>::iterator ite = mstack.end();
	++it;
	--it;
	while (it != ite)
	{
		std::cout << *it << std::endl;
		++it;
	}
	MutantStack<int> s(mstack);
	std::cout << mstack.size() << "/" << s.size() << std::endl;
	while (!s.empty())
		s.pop();
	std::cout << "Size: " << s.size() << std::endl;
	for (int i = 0; i < 10; i++)
		s.push(i * 2);
	it = s.begin();
	while (it != s.end())
		std::cout << *(it++) << " - ";
	std::cout << std::endl;
	return (0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x200, %rsp            # imm = 0x200
movl $0x0, -0x4(%rbp)
leaq -0x58(%rbp), %rdi
movq %rdi, -0x180(%rbp)
callq 0x1780
movq -0x180(%rbp), %rdi
movl $0x5, -0x5c(%rbp)
leaq -0x5c(%rbp), %rsi
callq 0x17a0
jmp 0x130b
movl $0x11, -0x70(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x17a0
jmp 0x1321
leaq -0x58(%rbp), %rdi
callq 0x17d0
movq %rax, -0x188(%rbp)
jmp 0x1333
movq -0x188(%rbp), %rax
movl (%rax), %esi
movq 0x5c95(%rip), %rdi      # 0x6fd8
callq 0x1130
movq %rax, -0x190(%rbp)
jmp 0x1351
movq -0x190(%rbp), %rdi
movq 0x5c69(%rip), %rsi      # 0x6fc8
callq 0x10e0
jmp 0x1366
leaq -0x58(%rbp), %rdi
callq 0x17f0
jmp 0x1371
leaq -0x58(%rbp), %rdi
callq 0x1810
movq %rax, -0x198(%rbp)
jmp 0x1383
movq -0x198(%rbp), %rsi
movq 0x5c47(%rip), %rdi      # 0x6fd8
callq 0x1030
movq %rax, -0x1a0(%rbp)
jmp 0x139f
movq -0x1a0(%rbp), %rdi
movq 0x5c1b(%rip), %rsi      # 0x6fc8
callq 0x10e0
jmp 0x13b4
movl $0x3, -0x74(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x74(%rbp), %rsi
callq 0x17a0
jmp 0x13ca
movl $0x5, -0x78(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x17a0
jmp 0x13e0
movl $0x2e1, -0x7c(%rbp)     # imm = 0x2E1
leaq -0x58(%rbp), %rdi
leaq -0x7c(%rbp), %rsi
callq 0x17a0
jmp 0x13f6
movl $0x0, -0x80(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x17a0
jmp 0x140c
leaq -0xa0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x1830
jmp 0x141e
leaq -0xc0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x1860
jmp 0x1430
leaq -0xa0(%rbp), %rdi
callq 0x1890
leaq -0xa0(%rbp), %rdi
callq 0x18e0
leaq -0xa0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x1930
testb $0x1, %al
jne 0x1461
jmp 0x14b8
leaq -0xa0(%rbp), %rdi
callq 0x1960
movl (%rax), %esi
movq 0x5b62(%rip), %rdi      # 0x6fd8
callq 0x1130
movq %rax, -0x1a8(%rbp)
jmp 0x1484
movq -0x1a8(%rbp), %rdi
movq 0x5b36(%rip), %rsi      # 0x6fc8
callq 0x10e0
jmp 0x1499
leaq -0xa0(%rbp), %rdi
callq 0x1890
jmp 0x1448
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x1767
leaq -0x110(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x1980
jmp 0x14ca
leaq -0x58(%rbp), %rdi
callq 0x1810
movq %rax, -0x1b0(%rbp)
jmp 0x14dc
movq -0x1b0(%rbp), %rsi
movq 0x5aee(%rip), %rdi      # 0x6fd8
callq 0x1030
movq %rax, -0x1b8(%rbp)
jmp 0x14f8
movq -0x1b8(%rbp), %rdi
leaq 0x2afe(%rip), %rsi      # 0x4004
callq 0x10b0
movq %rax, -0x1c0(%rbp)
jmp 0x1514
leaq -0x110(%rbp), %rdi
callq 0x1810
movq %rax, -0x1c8(%rbp)
jmp 0x1529
movq -0x1c8(%rbp), %rsi
movq -0x1c0(%rbp), %rdi
callq 0x1030
movq %rax, -0x1d0(%rbp)
jmp 0x1545
movq -0x1d0(%rbp), %rdi
movq 0x5a75(%rip), %rsi      # 0x6fc8
callq 0x10e0
jmp 0x155a
jmp 0x155c
leaq -0x110(%rbp), %rdi
callq 0x19b0
movb %al, -0x1d1(%rbp)
jmp 0x1570
movb -0x1d1(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x157e
jmp 0x15ab
leaq -0x110(%rbp), %rdi
callq 0x17f0
jmp 0x158c
jmp 0x155c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x1a10
jmp 0x1767
movq 0x5a26(%rip), %rdi      # 0x6fd8
leaq 0x2a4d(%rip), %rsi      # 0x4006
callq 0x10b0
movq %rax, -0x1e0(%rbp)
jmp 0x15c7
leaq -0x110(%rbp), %rdi
callq 0x1810
movq %rax, -0x1e8(%rbp)
jmp 0x15dc
movq -0x1e8(%rbp), %rsi
movq -0x1e0(%rbp), %rdi
callq 0x1030
movq %rax, -0x1f0(%rbp)
jmp 0x15f8
movq -0x1f0(%rbp), %rdi
movq 0x59c2(%rip), %rsi      # 0x6fc8
callq 0x10e0
jmp 0x160d
movl $0x0, -0x114(%rbp)
cmpl $0xa, -0x114(%rbp)
jge 0x1656
movl -0x114(%rbp), %eax
addl %eax, %eax
movl %eax, -0x118(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x17a0
jmp 0x1643
jmp 0x1645
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
jmp 0x1617
leaq -0x138(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x1830
jmp 0x166b
movq -0x138(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0x158(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x1860
jmp 0x16b8
leaq -0xa0(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x1930
testb $0x1, %al
jne 0x16d1
jmp 0x172a
leaq -0x178(%rbp), %rdi
movq %rdi, -0x200(%rbp)
leaq -0xa0(%rbp), %rsi
xorl %edx, %edx
callq 0x19d0
movq -0x200(%rbp), %rdi
callq 0x1960
movl (%rax), %esi
movq 0x58d6(%rip), %rdi      # 0x6fd8
callq 0x1130
movq %rax, -0x1f8(%rbp)
jmp 0x1710
movq -0x1f8(%rbp), %rdi
leaq 0x28ef(%rip), %rsi      # 0x400d
callq 0x10b0
jmp 0x1725
jmp 0x16a3
movq 0x58a7(%rip), %rdi      # 0x6fd8
movq 0x5890(%rip), %rsi      # 0x6fc8
callq 0x10e0
jmp 0x173f
movl $0x0, -0x4(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x1a10
leaq -0x58(%rbp), %rdi
callq 0x1a10
movl -0x4(%rbp), %eax
addq $0x200, %rsp            # imm = 0x200
popq %rbp
retq
leaq -0x58(%rbp), %rdi
callq 0x1a10
movq -0x68(%rbp), %rdi
callq 0x1140
nopl (%rax)