// File: /workspace/github_cpp_makefile_star2_O3/stacksmith[P]picoasm/cassembler.cpp
// Function: CAssembler::buildSymbolTable()
bool CAssembler::buildSymbolTable()
{
	list<CSourceLine*>::iterator it ;
	unsigned int address = 0 ;
	
	for ( it = m_source.begin() ; it != m_source.end() ; it++ ) {
		string name = toUpper( (*it)->getColumn( 0 ) ) ; 				// case insensitive
		
		if ( name == "NAMEREG" ) {
			if ( !(*it)->isColumn( 3 ) ) {
				error( (*it)->m_lineNr , "'NAMEREG register_name, new_name' expected" ) ;
				return FALSE ;
			}
			
			if ( (*it)->getColumn( 2 ) != "," ) {
				error( (*it)->m_lineNr , "Comma expected" ) ;
				return FALSE ;
			}
			
			// Check that the NAMEREG is unique

			list<CNamereg*>::iterator it1 ;
			for ( it1 = m_registerTable.begin(); it1 != m_registerTable.end() ; it1++) {
			  if( (*it1)->reg == (*it)->getColumn(1)) {
			    error ( (*it)->m_lineNr , string("NAMEREG  reg ("+ (*it)->getColumn(1)+") already aliased.").c_str());
			    return FALSE;
			  }
			  if( (*it1)->name == (*it)->getColumn(3)) {
			    error ( (*it)->m_lineNr , string ("NAMEREG alias ("+(*it)->getColumn(3)+") already used.").c_str());
			    return FALSE;
			  }
			}

			CNamereg *nr = new CNamereg ;
			nr->reg = (*it)->getColumn( 1 ) ;
			nr->name = (*it)->getColumn( 3 ) ;
			m_registerTable.push_back( nr ) ;
			(*it)->m_type = CSourceLine::stNamereg ;
			
		} else if ( name == "CONSTANT" ) {
			if ( !(*it)->isColumn( 3 ) ) {
				error( (*it)->m_lineNr , "'CONSTANT name, valued' expected" ) ;
				return FALSE ;
			}
			

		 	if ( (*it)->getColumn( 2 ) != "," ) {
				error( (*it)->m_lineNr , "Comma expected" ) ;
				return FALSE ;
			}
						
			// GES: Could enforce the 's' constant rule here.
			//  Cannot have a constant which is a register name.

			string ckname = (*it)->getColumn(1);
			if( (ckname[0] == 's' || ckname[0] == 'S') && ckname.length() == 2) {
			  if( (ckname[1] >= '0' && ckname[1] <= '9') || (ckname[1] >= 'a' && ckname[1] <= 'f')
			      || (ckname[1] >= 'A' && ckname[1] <= 'F')) {
			    error( (*it)->m_lineNr, "ILLEGAL CONSTANT: constant cannot be a register name s[0-f]");
			    return FALSE;
			  }
			}

			// Check that this constant isn't already defined
			list<CConstant*>::iterator ita;
			for ( ita = m_constantTable.begin(); ita != m_constantTable.end(); ita++) {
			  if( (*ita)->name == (*it)->getColumn( 1 )) {
			    error( (*it)->m_lineNr , string("CONSTANT ("+(*it)->getColumn(1)+") already defined.").c_str());
			    return FALSE ;
			  }
			}
			  
			CConstant *nr = new CConstant ;
			nr->value = (*it)->getColumn( 3 ) ;
			nr->name = (*it)->getColumn( 1 ) ; ;
			m_constantTable.push_back( nr ) ;
			(*it)->m_type = CSourceLine::stConstant ;
		} else if ( name == "ADDRESS" ) {
			if ( !(*it)->isColumn( 1 ) ) {
				error( (*it)->m_lineNr , "Value expected" ) ;
				return FALSE ;
			} 
			
			if ( sscanf( (*it)->getColumn( 1 ).c_str(), "%X", &address ) != 1 ) {
				error( (*it)->m_lineNr , "Invalid address" ) ;
				return FALSE ;
			}
			(*it)->m_type = CSourceLine::stAddress ;
			(*it)->m_address = address ;
			
		} else if ( getInstruction( (*it)->getColumn( 0 ) ) < 0 ) {

		  // Check for unique label..
		  list<CLabel*>::iterator it2 ;
		  for ( it2 = m_labelTable.begin() ; it2 != m_labelTable.end() ; it2++ ) {
		    if( (*it2)->name == (*it)->getColumn(0)) {
		      error( (*it)->m_lineNr , string ("Duplicate Lable ("+ (*it)->getColumn(0) +":).").c_str());
			return FALSE;
		    }
		  }
			CLabel *label = new CLabel ;
			label->name = (*it)->getColumn( 0 ) ;
			char buf[ 32 ] ;
			sprintf( buf, "%d", address ) ;
			label->value = buf ;
			m_labelTable.push_back( label ) ;
			
			(*it)->m_type = CSourceLine::stLabel ;
			(*it)->m_address = address ;
			if ( (*it)->isColumn( 1 ) && (*it)->getColumn( 1 ) == ":" ) {
				if ( (*it)->isColumn( 2 ) ) {
					if ( getInstruction( (*it)->getColumn( 2 ) ) < 0 ) {
						error( (*it)->m_lineNr , "Instruction expected" ) ;
						return FALSE ;
					} else {
						address = address + 1 ;
					}
				}
			} else {
				error( (*it)->m_lineNr , "Label or Instruction expected" ) ;
				return FALSE ;
			}
		} else {
			(*it)->m_address = address ;
			address = address + 1 ;
		}
	}	

#ifdef PRINT_DEBUG_TABLE
	// RDC 02/02/2007 - don't print symbol table data
 	cout << "Constants :" << endl ;
 	list<CConstant*>::iterator it0 ;
 	for ( it0 = m_constantTable.begin() ; it0 != m_constantTable.end() ; it0++ ) {
 		cout << (*it0)->name << " = " << (*it0)->value << endl ;
 	}
	
 	cout << "Namereg :" << endl ;
 	list<CNamereg*>::iterator it1 ;
 	for ( it1 = m_registerTable.begin() ; it1 != m_registerTable.end() ; it1++ ) {
 		cout << (*it1)->reg << " = " << (*it1)->name << endl ;
 	}
	
 	cout << "labels :" << endl ;
 	list<CLabel*>::iterator it2 ;
 	for ( it2 = m_labelTable.begin() ; it2 != m_labelTable.end() ; it2++ ) {
 		cout << (*it2)->name << " = " << (*it2)->value << endl ;
 	}
#endif
	return TRUE ;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movl $0x0, -0x54(%rbp)
movq (%rdi), %r14
movb $0x1, %al
cmpq %rdi, %r14
je 0x4066a8
leaq 0x48(%rdi), %rax
movq %rax, -0xd0(%rbp)
leaq -0x40(%rbp), %r13
leaq 0x30(%rdi), %rax
movq %rax, -0x80(%rbp)
movq %rdi, -0xa8(%rbp)
leaq 0x18(%rdi), %rax
movq %rax, -0xd8(%rbp)
leaq -0xb8(%rbp), %r12
leaq -0x168(%rbp), %rbx
leaq -0xc8(%rbp), %r15
movq %r12, -0xe0(%rbp)
movq 0x10(%r14), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x408e9a
movq %r15, %rdi
movq %rbx, %rsi
callq 0x4055ac
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
leaq -0x128(%rbp), %r15
je 0x4059e6
movq -0x158(%rbp), %rsi
incq %rsi
callq 0x40d020
leaq -0xc8(%rbp), %rbx
movq %rbx, %rdi
leaq 0x17bb26(%rip), %rsi    # 0x58151d
callq 0x47ec20
testl %eax, %eax
je 0x405a8a
movq %rbx, %rdi
leaq 0x17bb95(%rip), %rsi    # 0x5815a3
callq 0x47ec20
testl %eax, %eax
je 0x405bcf
movq %rbx, %rdi
leaq 0x180761(%rip), %rsi    # 0x586186
callq 0x47ec20
movq 0x10(%r14), %rsi
testl %eax, %eax
je 0x405c8e
movq %r15, %rdi
xorl %edx, %edx
callq 0x408e9a
movq %r15, %rsi
callq 0x405872
movl %eax, %r15d
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x405a6d
movq -0x118(%rbp), %rsi
incq %rsi
callq 0x40d020
testl %r15d, %r15d
js 0x405dd6
movl -0x54(%rbp), %eax
movq 0x10(%r14), %rcx
movl %eax, 0x20(%rcx)
incl %eax
movl %eax, -0x54(%rbp)
jmp 0x4062c7
movq 0x10(%r14), %rsi
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x60, %rax
jbe 0x406645
leaq -0x50(%rbp), %rbx
movq %rbx, %rdi
movl $0x2, %edx
callq 0x408e9a
movq %rbx, %rdi
leaq 0x17ba95(%rip), %rsi    # 0x581550
callq 0x47ec20
movl %eax, %r15d
movq -0x50(%rbp), %rdi
movq %r13, %rbx
cmpq %r13, %rdi
je 0x405adb
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0xd8(%rbp), %r12
testl %r15d, %r15d
jne 0x40664e
movq (%r12), %r12
cmpq -0xd8(%rbp), %r12
je 0x405cfc
movq 0x10(%r12), %r13
movq 0x10(%r14), %rsi
leaq -0x50(%rbp), %rdi
movl $0x1, %edx
callq 0x408e9a
movq 0x8(%r13), %rdx
cmpq -0x48(%rbp), %rdx
jne 0x405b3a
movq -0x50(%rbp), %r15
testq %rdx, %rdx
je 0x405b43
movq (%r13), %rdi
movq %r15, %rsi
callq 0x401080
testl %eax, %eax
sete %r13b
jmp 0x405b46
movq -0x50(%rbp), %r15
xorl %r13d, %r13d
jmp 0x405b46
movb $0x1, %r13b
cmpq %rbx, %r15
je 0x405b5a
movq -0x40(%rbp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x40d020
testb %r13b, %r13b
jne 0x406307
movq 0x10(%r12), %r13
movq 0x10(%r14), %rsi
leaq -0x50(%rbp), %rdi
movl $0x3, %edx
callq 0x408e9a
movq 0x28(%r13), %rdx
cmpq -0x48(%rbp), %rdx
jne 0x405ba1
movq -0x50(%rbp), %r15
testq %rdx, %rdx
je 0x405baa
movq 0x20(%r13), %rdi
movq %r15, %rsi
callq 0x401080
testl %eax, %eax
sete %r13b
jmp 0x405bad
movq -0x50(%rbp), %r15
xorl %r13d, %r13d
jmp 0x405bad
movb $0x1, %r13b
cmpq %rbx, %r15
je 0x405bc1
movq -0x40(%rbp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x40d020
testb %r13b, %r13b
je 0x405aeb
jmp 0x40636d
movq 0x10(%r14), %rsi
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x61, %rax
jb 0x40665e
leaq -0x50(%rbp), %rbx
movq %rbx, %rdi
movl $0x2, %edx
callq 0x408e9a
movq %rbx, %rdi
leaq 0x17b950(%rip), %rsi    # 0x581550
callq 0x47ec20
movl %eax, %r15d
movq -0x50(%rbp), %rdi
cmpq %r13, %rdi
je 0x405c1d
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
testl %r15d, %r15d
jne 0x406667
movq 0x10(%r14), %rsi
leaq -0x50(%rbp), %rdi
movl $0x1, %edx
callq 0x408e9a
movq -0x50(%rbp), %rax
movzbl (%rax), %ecx
orl $0x20, %ecx
movq -0x80(%rbp), %r12
cmpl $0x73, %ecx
jne 0x406007
cmpq $0x2, -0x48(%rbp)
movq -0x80(%rbp), %r12
jne 0x406007
movb 0x1(%rax), %al
movq -0x80(%rbp), %r12
cmpb $0x30, %al
jl 0x406007
cmpb $0x3a, %al
jb 0x4066ca
cmpb $0x61, %al
jb 0x405ff9
movq -0x80(%rbp), %r12
cmpb $0x67, %al
jae 0x406007
jmp 0x4066ca
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x21, %rax
jb 0x406670
leaq -0x50(%rbp), %rdi
movl $0x1, %edx
callq 0x408e9a
movq -0x50(%rbp), %rdi
leaq 0x17b861(%rip), %rsi    # 0x58151a
leaq -0x54(%rbp), %rdx
xorl %eax, %eax
callq 0x4d49a0
movl %eax, %r15d
movq -0x50(%rbp), %rdi
cmpq %r13, %rdi
je 0x405cdc
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
cmpl $0x1, %r15d
jne 0x406679
movq 0x10(%r14), %rax
movl $0x4, 0x24(%rax)
movl -0x54(%rbp), %ecx
movl %ecx, 0x20(%rax)
jmp 0x4062c7
movl $0x40, %edi
leaq -0xb8(%rbp), %r12
callq 0x40dec0
movq %rax, %r15
movq %rbx, %r13
addq $0x10, %rax
movq %rax, (%r15)
xorl %ecx, %ecx
movq %rcx, 0x8(%r15)
movb %cl, 0x10(%r15)
leaq 0x30(%r15), %rax
movq %rax, 0x20(%r15)
movq %rcx, 0x28(%r15)
movb %cl, 0x30(%r15)
movq 0x10(%r14), %rsi
leaq -0x50(%rbp), %rbx
movq %rbx, %rdi
movl $0x1, %edx
callq 0x408e9a
movq %r15, %rdi
movq %rbx, %rsi
callq 0x47ca60
movq -0x50(%rbp), %rdi
cmpq %r13, %rdi
je 0x405d69
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
movq 0x10(%r14), %rsi
movq %rbx, %rdi
movl $0x3, %edx
callq 0x408e9a
movq %r15, %rdi
addq $0x20, %rdi
movq %rbx, %rsi
callq 0x47ca60
movq -0x50(%rbp), %rdi
cmpq %r13, %rdi
je 0x405d9e
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
movl $0x18, %edi
callq 0x40dec0
movq %r15, 0x10(%rax)
movq %rax, %rdi
movq -0xd8(%rbp), %rsi
callq 0x40efd0
movq -0xa8(%rbp), %rax
incq 0x28(%rax)
movq 0x10(%r14), %rax
movl $0x2, 0x24(%rax)
jmp 0x4062c7
movq %r13, %rbx
movq -0xd0(%rbp), %r12
movq (%r12), %r12
cmpq -0xd0(%rbp), %r12
je 0x405e52
movq 0x10(%r12), %r13
movq 0x10(%r14), %rsi
leaq -0x50(%rbp), %rdi
xorl %edx, %edx
callq 0x408e9a
movq 0x28(%r13), %rdx
cmpq -0x48(%rbp), %rdx
jne 0x405e28
movq -0x50(%rbp), %r15
testq %rdx, %rdx
je 0x405e31
movq 0x20(%r13), %rdi
movq %r15, %rsi
callq 0x401080
testl %eax, %eax
sete %r13b
jmp 0x405e34
movq -0x50(%rbp), %r15
xorl %r13d, %r13d
jmp 0x405e34
movb $0x1, %r13b
cmpq %rbx, %r15
je 0x405e48
movq -0x40(%rbp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x40d020
testb %r13b, %r13b
je 0x405de0
jmp 0x4063d3
movl $0x40, %edi
callq 0x40dec0
movq %rax, %r15
addq $0x10, %rax
movq %rax, (%r15)
xorl %ecx, %ecx
movq %rcx, 0x8(%r15)
movb %cl, 0x10(%r15)
leaq 0x30(%r15), %rax
movq %rax, 0x20(%r15)
movq %rcx, 0x28(%r15)
movb %cl, 0x30(%r15)
movq 0x10(%r14), %rsi
leaq -0x50(%rbp), %rdi
xorl %edx, %edx
leaq -0xb8(%rbp), %r12
callq 0x408e9a
movq %rbx, %r13
movq %r15, %rdi
addq $0x20, %rdi
leaq -0x50(%rbp), %rsi
callq 0x47ca60
movq -0x50(%rbp), %rdi
cmpq %rbx, %rdi
je 0x405ebe
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
movl -0x54(%rbp), %edx
leaq -0x50(%rbp), %rbx
movq %rbx, %rdi
leaq 0x18c0a5(%rip), %rsi    # 0x591f74
xorl %eax, %eax
callq 0x4d4810
movq 0x8(%r15), %rax
movq %rax, -0xe8(%rbp)
movq %rbx, %rdi
callq 0x401118
movq %r15, %rdi
xorl %esi, %esi
movq -0xe8(%rbp), %rdx
movq %rbx, %rcx
movq %rax, %r8
callq 0x47d660
movl $0x18, %edi
callq 0x40dec0
movq %r15, 0x10(%rax)
movq %rax, %rdi
movq -0xd0(%rbp), %rsi
callq 0x40efd0
movq -0xa8(%rbp), %rax
incq 0x58(%rax)
movq 0x10(%r14), %rsi
movl $0x1, 0x24(%rsi)
movl -0x54(%rbp), %eax
movl %eax, 0x20(%rsi)
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x21, %rax
jb 0x4066ba
leaq -0x78(%rbp), %rbx
movq %rbx, %rdi
movl $0x1, %edx
callq 0x408e9a
movq %rbx, %rdi
leaq 0x17f8a7(%rip), %rsi    # 0x58580d
callq 0x47ec20
movl %eax, %r15d
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x405f87
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
movq 0x10(%r14), %rsi
testl %r15d, %r15d
jne 0x4066ba
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x41, %rax
jb 0x4062c7
leaq -0x108(%rbp), %rdi
movl $0x2, %edx
callq 0x408e9a
leaq -0x108(%rbp), %rsi
callq 0x405872
movl %eax, %r15d
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x405fe8
movq -0xf8(%rbp), %rsi
incq %rsi
callq 0x40d020
testl %r15d, %r15d
js 0x4066f9
incl -0x54(%rbp)
jmp 0x4062c7
addb $-0x41, %al
movq -0x80(%rbp), %r12
cmpb $0x5, %al
jbe 0x4066ca
movq (%r12), %r12
cmpq -0x80(%rbp), %r12
je 0x4060e7
movq 0x10(%r12), %r13
movq 0x10(%r14), %rsi
leaq -0x78(%rbp), %rdi
movl $0x1, %edx
callq 0x408e9a
movq 0x28(%r13), %rdx
cmpq -0x70(%rbp), %rdx
jne 0x406053
movq -0x78(%rbp), %r15
testq %rdx, %rdx
je 0x40605c
movq 0x20(%r13), %rdi
movq %r15, %rsi
callq 0x401080
testl %eax, %eax
sete %r13b
jmp 0x40605f
movq -0x78(%rbp), %r15
xorl %r13d, %r13d
jmp 0x40605f
movb $0x1, %r13b
leaq -0x68(%rbp), %rax
cmpq %rax, %r15
je 0x406077
movq -0x68(%rbp), %rsi
incq %rsi
movq %r15, %rdi
callq 0x40d020
testb %r13b, %r13b
je 0x406007
movq 0x10(%r14), %rsi
movl (%rsi), %r15d
leaq -0x148(%rbp), %rbx
movq %rbx, %rdi
movl $0x1, %edx
callq 0x408e9a
movl $0xa, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x17b55e(%rip), %rcx    # 0x581609
callq 0x47da00
leaq -0x90(%rbp), %rsi
movq %rsi, -0xa0(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4061c0
movq %rdx, -0xa0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x90(%rbp)
jmp 0x4061c6
movl $0x40, %edi
leaq -0x40(%rbp), %r13
callq 0x40dec0
movq %rax, %r15
addq $0x10, %rax
movq %rax, (%r15)
xorl %ecx, %ecx
movq %rcx, 0x8(%r15)
movb %cl, 0x10(%r15)
leaq 0x30(%r15), %rax
movq %rax, 0x20(%r15)
movq %rcx, 0x28(%r15)
movb %cl, 0x30(%r15)
movq 0x10(%r14), %rsi
leaq -0x78(%rbp), %rbx
movq %rbx, %rdi
movl $0x3, %edx
callq 0x408e9a
movq %r15, %rdi
movq %rbx, %rsi
callq 0x47ca60
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x406152
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
movq 0x10(%r14), %rsi
movq %rbx, %rdi
movl $0x1, %edx
callq 0x408e9a
movq %r15, %rdi
addq $0x20, %rdi
movq %rbx, %rsi
callq 0x47ca60
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x40618b
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
movl $0x18, %edi
callq 0x40dec0
movq %r15, 0x10(%rax)
movq %rax, %rdi
movq -0x80(%rbp), %rsi
callq 0x40efd0
movq -0xa8(%rbp), %rax
incq 0x40(%rax)
movq 0x10(%r14), %rax
movl $0x3, 0x24(%rax)
jmp 0x4062a1
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
leaq -0x40(%rbp), %r13
movq 0x8(%rax), %rdx
movq %rdx, -0x98(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa0(%rbp), %rdi
leaq 0x17b422(%rip), %rsi    # 0x581614
callq 0x47e1c0
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x40621b
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x406221
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x70(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x78(%rbp), %rdx
movl %r15d, %esi
callq 0x40574a
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x40625d
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x40627f
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x4062a1
movq -0x138(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0x50(%rbp), %rdi
cmpq %r13, %rdi
je 0x4062b6
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
cmpq -0x80(%rbp), %r12
leaq -0xb8(%rbp), %r12
jne 0x40668b
movq -0xc8(%rbp), %rdi
cmpq %r12, %rdi
je 0x4062e2
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x40d020
movq (%r14), %r14
cmpq -0xa8(%rbp), %r14
leaq -0x168(%rbp), %rbx
leaq -0xc8(%rbp), %r15
jne 0x4059a4
movb $0x1, %al
jmp 0x4066a8
movq 0x10(%r14), %rsi
movl (%rsi), %ebx
leaq -0xa0(%rbp), %rdi
movl $0x1, %edx
callq 0x408e9a
leaq 0x17b23c(%rip), %rcx    # 0x581561
leaq -0xa0(%rbp), %rdi
movl $0xe, %r8d
xorl %esi, %esi
xorl %edx, %edx
leaq -0xb8(%rbp), %r12
callq 0x47da00
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x406441
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x406447
movq 0x10(%r14), %rsi
movl (%rsi), %ebx
leaq -0xa0(%rbp), %rdi
movl $0x3, %edx
callq 0x408e9a
leaq 0x17b1f8(%rip), %rcx    # 0x581583
leaq -0xa0(%rbp), %rdi
movl $0xf, %r8d
xorl %esi, %esi
xorl %edx, %edx
leaq -0xb8(%rbp), %r12
callq 0x47da00
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4064bc
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x4064c2
movq 0x10(%r14), %rsi
movl (%rsi), %r15d
leaq -0xa0(%rbp), %rdi
xorl %edx, %edx
callq 0x408e9a
leaq 0x17b247(%rip), %rcx    # 0x581636
leaq -0xa0(%rbp), %rdi
movl $0x11, %r8d
xorl %esi, %esi
xorl %edx, %edx
leaq -0xb8(%rbp), %r12
leaq -0x90(%rbp), %r14
callq 0x47da00
movq %rbx, %r13
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x40658e
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x406594
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x78(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x17b107(%rip), %rsi    # 0x581570
callq 0x47e1c0
leaq -0x40(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x406492
movq %rdx, -0x50(%rbp)
movq (%rcx), %rsi
movq %rsi, -0x40(%rbp)
jmp 0x40649c
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq %r14, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl %ebx, %esi
callq 0x40574a
jmp 0x406535
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x78(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x17b0af(%rip), %rsi    # 0x581593
callq 0x47e1c0
leaq -0x40(%rbp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x40650d
movq %rdx, -0x50(%rbp)
movq (%rcx), %rsi
movq %rsi, -0x40(%rbp)
jmp 0x406517
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq %r14, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl %ebx, %esi
callq 0x40574a
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x40654a
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
leaq -0x90(%rbp), %rbx
je 0x40656a
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0xa0(%rbp), %rdi
cmpq %rbx, %rdi
je 0x40668b
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x40d020
jmp 0x40668b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
leaq -0x78(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x17b092(%rip), %rsi    # 0x581648
callq 0x47e1c0
movq %r13, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4065db
movq %rdx, -0x50(%rbp)
movq (%rcx), %rsi
movq %rsi, -0x40(%rbp)
jmp 0x4065e6
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq %r13, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl %r15d, %esi
callq 0x40574a
movq -0x50(%rbp), %rdi
cmpq %r13, %rdi
je 0x40661a
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x406633
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
movq -0xa0(%rbp), %rdi
cmpq %r14, %rdi
jne 0x40657a
jmp 0x40668b
leaq 0x17aed9(%rip), %rdx    # 0x581525
jmp 0x406684
leaq 0x17aefd(%rip), %rdx    # 0x581552
leaq -0xb8(%rbp), %r12
jmp 0x406680
leaq 0x17af47(%rip), %rdx    # 0x5815ac
jmp 0x406684
leaq 0x17aee4(%rip), %rdx    # 0x581552
jmp 0x406680
leaq 0x17afb0(%rip), %rdx    # 0x581627
jmp 0x406684
leaq 0x17b78d(%rip), %rdx    # 0x581e0d
movq 0x10(%r14), %rsi
movl (%rsi), %esi
callq 0x40574a
movq -0xc8(%rbp), %rdi
cmpq %r12, %rdi
je 0x4066a6
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x40d020
xorl %eax, %eax
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17af8b(%rip), %rdx    # 0x58164c
movl (%rsi), %esi
callq 0x40574a
jmp 0x40668b
movq 0x10(%r14), %rax
movl (%rax), %esi
leaq 0x17aef6(%rip), %rdx    # 0x5815cd
callq 0x40574a
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
leaq -0xb8(%rbp), %r12
je 0x40668b
movq -0x40(%rbp), %rsi
jmp 0x406581
movq 0x10(%r14), %rsi
leaq 0x17af51(%rip), %rdx    # 0x581655
jmp 0x4066c1
jmp 0x4068a6
jmp 0x4068c6
movq %rax, %rbx
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x4068c9
movq -0xf8(%rbp), %rsi
jmp 0x4068ba
movq %rax, %rbx
movq -0x50(%rbp), %rdi
cmpq %r13, %rdi
jne 0x40680c
jmp 0x40681d
jmp 0x40681a
jmp 0x406838
jmp 0x4068c6
jmp 0x4068c6
jmp 0x4068c6
jmp 0x4068c6
jmp 0x4068c6
movq %rax, %rbx
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x40678f
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
jmp 0x40678f
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x4067b6
movq -0x90(%rbp), %rsi
incq %rsi
callq 0x40d020
jmp 0x4067b6
movq %rax, %rbx
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x4068a9
movq -0x138(%rbp), %rsi
incq %rsi
callq 0x40d020
jmp 0x4068a9
jmp 0x4068a6
jmp 0x4068a6
jmp 0x4068a6
jmp 0x406800
jmp 0x40681a
jmp 0x406838
jmp 0x4068c6
jmp 0x4068c6
movq %rax, %rbx
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x40681d
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
jmp 0x40681d
movq %rax, %rbx
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x40683b
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d020
jmp 0x40683b
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
leaq -0x90(%rbp), %rax
cmpq %rax, %rdi
je 0x4068c9
movq -0x90(%rbp), %rsi
jmp 0x4068ba
jmp 0x4068c6
jmp 0x4068c6
jmp 0x4068c6
jmp 0x4068c6
jmp 0x4068c6
jmp 0x4068a6
jmp 0x4068c6
jmp 0x4068c6
movq %rax, %rbx
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x4068c9
movq -0x118(%rbp), %rsi
jmp 0x4068ba
jmp 0x4068c6
jmp 0x4068c6
movq %rax, %rbx
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
movq %rax, -0xe0(%rbp)
jmp 0x4068d7
jmp 0x4068c6
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4068c9
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d020
jmp 0x4068c9
jmp 0x4068c6
movq %rax, %rbx
movq -0xc8(%rbp), %rdi
leaq -0xb8(%rbp), %rax
cmpq %rax, %rdi
je 0x4068ee
movq -0xe0(%rbp), %rax
movq (%rax), %rsi
incq %rsi
callq 0x40d020
movq %rbx, %rdi
callq 0x4ad8c0