// File: negativeview[P]Software-Business-Sim/Person.cpp
// Function: Person::Person(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int)
Person::Person(string firstName, string lastName, int money) : NamedObject("person", firstName.c_str()) {
	this->_firstName = firstName;
	this->_lastName = lastName;
	this->_money = money;
	this->_company = NULL;
	this->_currentSalary = 0;

	this->_platformSkills = new map<Platform *, int>();
	this->_languageSkills = new map<Language *, int>();

	/**
	 * A person has two sets of traits: actual and believed.
	 *
	 * The actual traits are those that are used when we're calculating the
	 * work being done. A person high in actual creativity will invent new
	 * things or think outside the box.
	 *
	 * The believed traits are what the person believes to be true about
	 * themselves. These will almost always be inflated, but can actually
	 * be lower than reality. Believed traits are used to calculate how much
	 * the person wants to be paid, what projects the person wants to be
	 * involved with/run.
	 *
	 * The actual traits can be gleaned by the performance evaluations, etc.
	 *
	 * The believed traits can be somewhat gleaned by watching how the person
	 * acts. There is no screen that will give you these numbers.
	 *
	 * The meta game is all about figuring out who knows their shit, who's
	 * lying, and how to manage the differences between the two.
	 */
	this->_actualTraits   = new list<Trait *>();
	this->_believedTraits = new list<Trait *>();

	int ambitionTrait = rand() % 100;
	this->_actualTraits->push_back(new Trait("ambition", ambitionTrait));
	ambitionTrait += ((rand() % 20) - 5);
	if (ambitionTrait > 100)
		ambitionTrait = 100;
	this->_believedTraits->push_back(new Trait("ambition", ambitionTrait));

	int greedTrait = rand() % 100;
	this->_actualTraits->push_back(new Trait("greed", greedTrait));
	greedTrait += ((rand() % 20) - 5);
	if (greedTrait > 100)
		greedTrait = 100;
	this->_believedTraits->push_back(new Trait("greed", greedTrait));

	int initiativeTrait = rand() % 100;
	this->_actualTraits->push_back(new Trait("initiative", initiativeTrait));
	initiativeTrait += ((rand() % 20) - 5);
	if (initiativeTrait > 100)
		initiativeTrait = 100;
	this->_believedTraits->push_back(new Trait("initiative", initiativeTrait));

	int creativityTrait = rand() % 100;
	this->_actualTraits->push_back(new Trait("creativity", creativityTrait));
	creativityTrait += ((rand() % 20) - 5);
	if (creativityTrait > 100)
		creativityTrait = 100;
	this->_believedTraits->push_back(new Trait("creativity", creativityTrait));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2c0, %rsp            # imm = 0x2C0
movq %rsi, -0x1e0(%rbp)
movq %rdi, %rax
movq -0x1e0(%rbp), %rdi
movq %rdi, -0x1b8(%rbp)
movq %rdx, -0x1d8(%rbp)
movq %rax, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1d0(%rbp)
callq 0x3180
movq -0x1d0(%rbp), %rdi
movq %rax, %rdx
leaq 0x866e(%rip), %rsi      # 0x187b8
callq 0x56f0
movq -0x1d0(%rbp), %rdi
addq $0x10, %rdi
movq %rdi, -0x1c0(%rbp)
callq 0x34f0
movq -0x1d0(%rbp), %rdi
addq $0x30, %rdi
movq %rdi, -0x1c8(%rbp)
callq 0x34f0
movq -0x1c0(%rbp), %rdi
movq -0x1b8(%rbp), %rsi
callq 0x3040
jmp 0x10192
movq -0x1d8(%rbp), %rsi
movq -0x1d0(%rbp), %rdi
addq $0x30, %rdi
callq 0x3040
jmp 0x101ab
movq -0x1d0(%rbp), %rax
movl -0x1c(%rbp), %ecx
movl %ecx, 0x50(%rax)
movq $0x0, 0x58(%rax)
movl $0x0, 0x54(%rax)
movl $0x30, %edi
callq 0x3370
movq %rax, -0x1e8(%rbp)
jmp 0x101da
movq -0x1e8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0xc370
movq -0x1e8(%rbp), %rcx
movq -0x1d0(%rbp), %rax
movq %rcx, 0x60(%rax)
movl $0x30, %edi
callq 0x3370
movq %rax, -0x1f0(%rbp)
jmp 0x10219
movq -0x1f0(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0xc390
movq -0x1f0(%rbp), %rcx
movq -0x1d0(%rbp), %rax
movq %rcx, 0x68(%rax)
movl $0x18, %edi
callq 0x3370
movq %rax, -0x1f8(%rbp)
jmp 0x10258
movq -0x1f8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
callq 0x11150
movq -0x1f8(%rbp), %rcx
movq -0x1d0(%rbp), %rax
movq %rcx, 0x70(%rax)
movl $0x18, %edi
callq 0x3370
movq %rax, -0x200(%rbp)
jmp 0x10297
movq -0x200(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
callq 0x11150
movq -0x200(%rbp), %rcx
movq -0x1d0(%rbp), %rax
movq %rcx, 0x78(%rax)
callq 0x30e0
movl %eax, %ecx
movq -0x1d0(%rbp), %rax
movslq %ecx, %rdx
imulq $0x51eb851f, %rdx, %rdx # imm = 0x51EB851F
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x25, %rdx
addl %esi, %edx
imull $0x64, %edx, %edx
subl %edx, %ecx
movl %ecx, -0x30(%rbp)
movq 0x70(%rax), %rax
movq %rax, -0x210(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x208(%rbp)
jmp 0x1030e
movb $0x1, -0x5a(%rbp)
leaq -0x59(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0x35e0
movq -0x218(%rbp), %rdx
leaq 0x848f(%rip), %rsi      # 0x187bf
leaq -0x58(%rbp), %rdi
callq 0x8730
jmp 0x1033b
movq -0x208(%rbp), %rdi
movl -0x30(%rbp), %edx
leaq -0x58(%rbp), %rsi
callq 0x16fc0
jmp 0x10350
movq -0x210(%rbp), %rdi
movq -0x208(%rbp), %rax
movb $0x0, -0x5a(%rbp)
movq %rax, -0x38(%rbp)
leaq -0x38(%rbp), %rsi
callq 0x11170
jmp 0x10371
leaq -0x58(%rbp), %rdi
callq 0x3210
leaq -0x59(%rbp), %rdi
callq 0x3400
callq 0x30e0
movl $0x14, %ecx
cltd
idivl %ecx
movl %edx, %eax
subl $0x5, %eax
addl -0x30(%rbp), %eax
movl %eax, -0x30(%rbp)
cmpl $0x64, -0x30(%rbp)
jle 0x10405
movl $0x64, -0x30(%rbp)
jmp 0x10405
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x10c78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x103de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x3210
leaq -0x59(%rbp), %rdi
callq 0x3400
testb $0x1, -0x5a(%rbp)
jne 0x103ef
jmp 0x10400
movq -0x208(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq -0x1d0(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x228(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x220(%rbp)
jmp 0x1042a
movb $0x1, -0x8a(%rbp)
leaq -0x89(%rbp), %rdi
movq %rdi, -0x230(%rbp)
callq 0x35e0
movq -0x230(%rbp), %rdx
leaq 0x836d(%rip), %rsi      # 0x187bf
leaq -0x88(%rbp), %rdi
callq 0x8730
jmp 0x10460
movq -0x220(%rbp), %rdi
movl -0x30(%rbp), %edx
leaq -0x88(%rbp), %rsi
callq 0x16fc0
jmp 0x10478
movq -0x228(%rbp), %rdi
movq -0x220(%rbp), %rax
movb $0x0, -0x8a(%rbp)
movq %rax, -0x68(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x11170
jmp 0x1049c
leaq -0x88(%rbp), %rdi
callq 0x3210
leaq -0x89(%rbp), %rdi
callq 0x3400
callq 0x30e0
movl %eax, %ecx
movq -0x1d0(%rbp), %rax
movslq %ecx, %rdx
imulq $0x51eb851f, %rdx, %rdx # imm = 0x51EB851F
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x25, %rdx
addl %esi, %edx
imull $0x64, %edx, %edx
subl %edx, %ecx
movl %ecx, -0x90(%rbp)
movq 0x70(%rax), %rax
movq %rax, -0x240(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x238(%rbp)
jmp 0x10502
movb $0x1, -0xba(%rbp)
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x248(%rbp)
callq 0x35e0
movq -0x248(%rbp), %rdx
leaq 0x829e(%rip), %rsi      # 0x187c8
leaq -0xb8(%rbp), %rdi
callq 0x8730
jmp 0x10538
movq -0x238(%rbp), %rdi
movl -0x90(%rbp), %edx
leaq -0xb8(%rbp), %rsi
callq 0x16fc0
jmp 0x10553
movq -0x240(%rbp), %rdi
movq -0x238(%rbp), %rax
movb $0x0, -0xba(%rbp)
movq %rax, -0x98(%rbp)
leaq -0x98(%rbp), %rsi
callq 0x11170
jmp 0x1057d
leaq -0xb8(%rbp), %rdi
callq 0x3210
leaq -0xb9(%rbp), %rdi
callq 0x3400
callq 0x30e0
movl $0x14, %ecx
cltd
idivl %ecx
movl %edx, %eax
subl $0x5, %eax
addl -0x90(%rbp), %eax
movl %eax, -0x90(%rbp)
cmpl $0x64, -0x90(%rbp)
jle 0x10675
movl $0x64, -0x90(%rbp)
jmp 0x10675
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x105f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x3210
leaq -0x89(%rbp), %rdi
callq 0x3400
testb $0x1, -0x8a(%rbp)
jne 0x1060c
jmp 0x1061d
movq -0x220(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x10648
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x3210
leaq -0xb9(%rbp), %rdi
callq 0x3400
testb $0x1, -0xba(%rbp)
jne 0x1065f
jmp 0x10670
movq -0x238(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq -0x1d0(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x258(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x250(%rbp)
jmp 0x1069a
movb $0x1, -0xea(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x260(%rbp)
callq 0x35e0
movq -0x260(%rbp), %rdx
leaq 0x8106(%rip), %rsi      # 0x187c8
leaq -0xe8(%rbp), %rdi
callq 0x8730
jmp 0x106d0
movq -0x250(%rbp), %rdi
movl -0x90(%rbp), %edx
leaq -0xe8(%rbp), %rsi
callq 0x16fc0
jmp 0x106eb
movq -0x258(%rbp), %rdi
movq -0x250(%rbp), %rax
movb $0x0, -0xea(%rbp)
movq %rax, -0xc8(%rbp)
leaq -0xc8(%rbp), %rsi
callq 0x11170
jmp 0x10715
leaq -0xe8(%rbp), %rdi
callq 0x3210
leaq -0xe9(%rbp), %rdi
callq 0x3400
callq 0x30e0
movl %eax, %ecx
movq -0x1d0(%rbp), %rax
movslq %ecx, %rdx
imulq $0x51eb851f, %rdx, %rdx # imm = 0x51EB851F
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x25, %rdx
addl %esi, %edx
imull $0x64, %edx, %edx
subl %edx, %ecx
movl %ecx, -0xf0(%rbp)
movq 0x70(%rax), %rax
movq %rax, -0x270(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x268(%rbp)
jmp 0x1077b
movb $0x1, -0x11a(%rbp)
leaq -0x119(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x35e0
movq -0x278(%rbp), %rdx
leaq 0x802b(%rip), %rsi      # 0x187ce
leaq -0x118(%rbp), %rdi
callq 0x8730
jmp 0x107b1
movq -0x268(%rbp), %rdi
movl -0xf0(%rbp), %edx
leaq -0x118(%rbp), %rsi
callq 0x16fc0
jmp 0x107cc
movq -0x270(%rbp), %rdi
movq -0x268(%rbp), %rax
movb $0x0, -0x11a(%rbp)
movq %rax, -0xf8(%rbp)
leaq -0xf8(%rbp), %rsi
callq 0x11170
jmp 0x107f6
leaq -0x118(%rbp), %rdi
callq 0x3210
leaq -0x119(%rbp), %rdi
callq 0x3400
callq 0x30e0
movl $0x14, %ecx
cltd
idivl %ecx
movl %edx, %eax
subl $0x5, %eax
addl -0xf0(%rbp), %eax
movl %eax, -0xf0(%rbp)
cmpl $0x64, -0xf0(%rbp)
jle 0x108ee
movl $0x64, -0xf0(%rbp)
jmp 0x108ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x1086e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x3210
leaq -0xe9(%rbp), %rdi
callq 0x3400
testb $0x1, -0xea(%rbp)
jne 0x10885
jmp 0x10896
movq -0x250(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x108c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x3210
leaq -0x119(%rbp), %rdi
callq 0x3400
testb $0x1, -0x11a(%rbp)
jne 0x108d8
jmp 0x108e9
movq -0x268(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq -0x1d0(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x288(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x280(%rbp)
jmp 0x10913
movb $0x1, -0x14a(%rbp)
leaq -0x149(%rbp), %rdi
movq %rdi, -0x290(%rbp)
callq 0x35e0
movq -0x290(%rbp), %rdx
leaq 0x7e93(%rip), %rsi      # 0x187ce
leaq -0x148(%rbp), %rdi
callq 0x8730
jmp 0x10949
movq -0x280(%rbp), %rdi
movl -0xf0(%rbp), %edx
leaq -0x148(%rbp), %rsi
callq 0x16fc0
jmp 0x10964
movq -0x288(%rbp), %rdi
movq -0x280(%rbp), %rax
movb $0x0, -0x14a(%rbp)
movq %rax, -0x128(%rbp)
leaq -0x128(%rbp), %rsi
callq 0x11170
jmp 0x1098e
leaq -0x148(%rbp), %rdi
callq 0x3210
leaq -0x149(%rbp), %rdi
callq 0x3400
callq 0x30e0
movl %eax, %ecx
movq -0x1d0(%rbp), %rax
movslq %ecx, %rdx
imulq $0x51eb851f, %rdx, %rdx # imm = 0x51EB851F
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x25, %rdx
addl %esi, %edx
imull $0x64, %edx, %edx
subl %edx, %ecx
movl %ecx, -0x150(%rbp)
movq 0x70(%rax), %rax
movq %rax, -0x2a0(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x298(%rbp)
jmp 0x109f4
movb $0x1, -0x17a(%rbp)
leaq -0x179(%rbp), %rdi
movq %rdi, -0x2a8(%rbp)
callq 0x35e0
movq -0x2a8(%rbp), %rdx
leaq 0x7dbd(%rip), %rsi      # 0x187d9
leaq -0x178(%rbp), %rdi
callq 0x8730
jmp 0x10a2a
movq -0x298(%rbp), %rdi
movl -0x150(%rbp), %edx
leaq -0x178(%rbp), %rsi
callq 0x16fc0
jmp 0x10a45
movq -0x2a0(%rbp), %rdi
movq -0x298(%rbp), %rax
movb $0x0, -0x17a(%rbp)
movq %rax, -0x158(%rbp)
leaq -0x158(%rbp), %rsi
callq 0x11170
jmp 0x10a6f
leaq -0x178(%rbp), %rdi
callq 0x3210
leaq -0x179(%rbp), %rdi
callq 0x3400
callq 0x30e0
movl $0x14, %ecx
cltd
idivl %ecx
movl %edx, %eax
subl $0x5, %eax
addl -0x150(%rbp), %eax
movl %eax, -0x150(%rbp)
cmpl $0x64, -0x150(%rbp)
jle 0x10b67
movl $0x64, -0x150(%rbp)
jmp 0x10b67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x10ae7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x3210
leaq -0x149(%rbp), %rdi
callq 0x3400
testb $0x1, -0x14a(%rbp)
jne 0x10afe
jmp 0x10b0f
movq -0x280(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x10b3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x3210
leaq -0x179(%rbp), %rdi
callq 0x3400
testb $0x1, -0x17a(%rbp)
jne 0x10b51
jmp 0x10b62
movq -0x298(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq -0x1d0(%rbp), %rax
movq 0x78(%rax), %rax
movq %rax, -0x2b8(%rbp)
movl $0x38, %edi
callq 0x3370
movq %rax, -0x2b0(%rbp)
jmp 0x10b8c
movb $0x1, -0x1aa(%rbp)
leaq -0x1a9(%rbp), %rdi
movq %rdi, -0x2c0(%rbp)
callq 0x35e0
movq -0x2c0(%rbp), %rdx
leaq 0x7c25(%rip), %rsi      # 0x187d9
leaq -0x1a8(%rbp), %rdi
callq 0x8730
jmp 0x10bc2
movq -0x2b0(%rbp), %rdi
movl -0x150(%rbp), %edx
leaq -0x1a8(%rbp), %rsi
callq 0x16fc0
jmp 0x10bdd
movq -0x2b8(%rbp), %rdi
movq -0x2b0(%rbp), %rax
movb $0x0, -0x1aa(%rbp)
movq %rax, -0x188(%rbp)
leaq -0x188(%rbp), %rsi
callq 0x11170
jmp 0x10c07
leaq -0x1a8(%rbp), %rdi
callq 0x3210
leaq -0x1a9(%rbp), %rdi
callq 0x3400
addq $0x2c0, %rsp            # imm = 0x2C0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x10c4e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x3210
leaq -0x1a9(%rbp), %rdi
callq 0x3400
testb $0x1, -0x1aa(%rbp)
jne 0x10c65
jmp 0x10c76
movq -0x2b0(%rbp), %rdi
movl $0x38, %esi
callq 0x3390
jmp 0x10c78
movq -0x1c8(%rbp), %rdi
callq 0x3210
movq -0x1c0(%rbp), %rdi
callq 0x3210
movq -0x1d0(%rbp), %rdi
callq 0x57b0
movq -0x28(%rbp), %rdi
callq 0x35d0
nopw %cs:(%rax,%rax)