// File: /workspace/github_cpp_makefile_star2_O1/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 $0x158, %rsp            # imm = 0x158
movl $0x0, -0x54(%rbp)
movq (%rdi), %r12
cmpq %rdi, %r12
sete %cl
je 0x40670d
leaq 0x48(%rdi), %rax
movq %rax, -0xb8(%rbp)
leaq 0x30(%rdi), %rax
movq %rax, -0xa0(%rbp)
movq %rdi, -0xb0(%rbp)
leaq 0x18(%rdi), %rax
movq %rax, -0xa8(%rbp)
leaq -0xd0(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0xe0(%rbp), %r13
leaq -0x50(%rbp), %r15
leaq -0x100(%rbp), %rbx
movb %cl, -0x55(%rbp)
movq 0x10(%r12), %rsi
leaq -0x160(%rbp), %r14
movq %r14, %rdi
xorl %edx, %edx
callq 0x408edc
movq %r13, %rdi
movq %r14, %rsi
callq 0x4055a4
movq -0x160(%rbp), %rdi
leaq -0x150(%rbp), %rax
cmpq %rax, %rdi
je 0x4059ee
movq -0x150(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq %r13, %rdi
leaq 0x17bb25(%rip), %rsi    # 0x58151d
callq 0x47ecc0
testl %eax, %eax
je 0x405a94
movq %r13, %rdi
leaq 0x17bb94(%rip), %rsi    # 0x5815a3
callq 0x47ecc0
testl %eax, %eax
je 0x405c35
movq %r13, %rdi
leaq 0x180760(%rip), %rsi    # 0x586186
callq 0x47ecc0
movq 0x10(%r12), %rsi
testl %eax, %eax
je 0x405de0
leaq -0x140(%rbp), %r14
movq %r14, %rdi
xorl %edx, %edx
callq 0x408edc
movq %r14, %rsi
callq 0x405872
movl %eax, %r14d
movq -0x140(%rbp), %rdi
leaq -0x130(%rbp), %rax
cmpq %rax, %rdi
je 0x405a76
movq -0x130(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testl %r14d, %r14d
js 0x406078
movl -0x54(%rbp), %eax
movq 0x10(%r12), %rcx
movl %eax, 0x20(%rcx)
incl %eax
movl %eax, -0x54(%rbp)
jmp 0x40647b
movq 0x10(%r12), %rsi
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x60, %rax
jbe 0x4066c2
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x2, %edx
callq 0x408edc
movq %r15, %rdi
leaq 0x17ba89(%rip), %rsi    # 0x581550
callq 0x47ecc0
movl %eax, %r14d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
movq -0xa8(%rbp), %r13
je 0x405aef
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testl %r14d, %r14d
jne 0x4065eb
movq (%r13), %r13
cmpq -0xa8(%rbp), %r13
je 0x405e57
movq 0x10(%r13), %r14
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x1, %edx
callq 0x408edc
movq 0x8(%r14), %rdx
cmpq -0x48(%rbp), %rdx
jne 0x405b42
testq %rdx, %rdx
je 0x405b47
movq -0x50(%rbp), %rsi
movq (%r14), %rdi
callq 0x401080
testl %eax, %eax
sete %r14b
jmp 0x405b4a
xorl %r14d, %r14d
jmp 0x405b4a
movb $0x1, %r14b
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x405b63
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testb %r14b, %r14b
jne 0x405f31
movq 0x10(%r13), %r14
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x3, %edx
callq 0x408edc
movq 0x28(%r14), %rdx
cmpq -0x48(%rbp), %rdx
jne 0x405ba6
testq %rdx, %rdx
je 0x405bab
movq -0x50(%rbp), %rsi
movq 0x20(%r14), %rdi
callq 0x401080
testl %eax, %eax
sete %r14b
jmp 0x405bae
xorl %r14d, %r14d
jmp 0x405bae
movb $0x1, %r14b
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x405bc7
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testb %r14b, %r14b
je 0x405af8
movq 0x10(%r12), %rax
movl (%rax), %r14d
movq 0x10(%r12), %rsi
leaq -0x98(%rbp), %rbx
movq %rbx, %rdi
movl $0x3, %edx
callq 0x408edc
movl $0xf, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x17b97e(%rip), %rcx    # 0x581583
callq 0x47daa0
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x406280
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x406286
movq 0x10(%r12), %rsi
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x61, %rax
jb 0x4066cb
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x2, %edx
callq 0x408edc
movq %r15, %rdi
leaq 0x17b8e8(%rip), %rsi    # 0x581550
callq 0x47ecc0
movl %eax, %r14d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x405c89
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testl %r14d, %r14d
jne 0x4065eb
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x1, %edx
callq 0x408edc
movq -0x50(%rbp), %rax
movzbl (%rax), %ecx
orl $0x20, %ecx
movq -0xa0(%rbp), %r13
cmpl $0x73, %ecx
jne 0x405d04
cmpq $0x2, -0x48(%rbp)
movq -0xa0(%rbp), %r13
jne 0x405d04
movb 0x1(%rax), %al
leal -0x30(%rax), %ecx
cmpb $0xa, %cl
jb 0x4065be
movzbl %al, %eax
addl $-0x41, %eax
movq -0xa0(%rbp), %r13
cmpl $0x25, %eax
ja 0x405d04
movabsq $0x3f0000003f, %rcx     # imm = 0x3F0000003F
btq %rax, %rcx
movq -0xa0(%rbp), %r13
jb 0x4065be
movq (%r13), %r13
cmpq -0xa0(%rbp), %r13
je 0x405f96
movq 0x10(%r13), %r14
movq 0x10(%r12), %rsi
leaq -0x78(%rbp), %rdi
movl $0x1, %edx
callq 0x408edc
movq 0x28(%r14), %rdx
cmpq -0x70(%rbp), %rdx
jne 0x405d50
testq %rdx, %rdx
je 0x405d55
movq -0x78(%rbp), %rsi
movq 0x20(%r14), %rdi
callq 0x401080
testl %eax, %eax
sete %r14b
jmp 0x405d58
xorl %r14d, %r14d
jmp 0x405d58
movb $0x1, %r14b
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x405d71
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testb %r14b, %r14b
je 0x405d04
movq 0x10(%r12), %rax
movl (%rax), %r14d
movq 0x10(%r12), %rsi
movq %rbx, %rdi
movl $0x1, %edx
callq 0x408edc
movl $0xa, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x17b865(%rip), %rcx    # 0x581609
callq 0x47daa0
leaq -0x88(%rbp), %rsi
movq %rsi, -0x98(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x406371
movq %rdx, -0x98(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x88(%rbp)
jmp 0x406377
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x21, %rax
jb 0x4066d4
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x1, %edx
callq 0x408edc
movq -0x50(%rbp), %rdi
leaq 0x17b70b(%rip), %rsi    # 0x58151a
leaq -0x54(%rbp), %rdx
xorl %eax, %eax
callq 0x4d4a40
movl %eax, %r14d
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x405e36
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq 0x10(%r12), %rsi
cmpl $0x1, %r14d
jne 0x4066dd
movl $0x4, 0x24(%rsi)
movl -0x54(%rbp), %eax
movl %eax, 0x20(%rsi)
jmp 0x40647b
movl $0x40, %edi
callq 0x40df60
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
xorl %ecx, %ecx
movq %rcx, 0x8(%r14)
movb %cl, 0x10(%r14)
leaq 0x30(%r14), %rax
movq %rax, 0x20(%r14)
movq %rcx, 0x28(%r14)
movb %cl, 0x30(%r14)
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x1, %edx
callq 0x408edc
movq %r14, %rdi
movq %r15, %rsi
callq 0x47cb00
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x405ebb
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq 0x10(%r12), %rsi
movq %r15, %rdi
movl $0x3, %edx
callq 0x408edc
movq %r14, %rdi
addq $0x20, %rdi
movq %r15, %rsi
callq 0x47cb00
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x405ef5
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movl $0x18, %edi
callq 0x40df60
movq %r14, 0x10(%rax)
movq %rax, %rdi
movq -0xa8(%rbp), %rbx
movq %rbx, %rsi
callq 0x40f070
movq -0xb0(%rbp), %rax
incq 0x28(%rax)
movq 0x10(%r12), %rax
movl $0x2, 0x24(%rax)
jmp 0x406355
movq 0x10(%r12), %rax
movl (%rax), %r14d
movq 0x10(%r12), %rsi
leaq -0x98(%rbp), %rbx
movq %rbx, %rdi
movl $0x1, %edx
callq 0x408edc
movl $0xe, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x17b5fb(%rip), %rcx    # 0x581561
callq 0x47daa0
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x406204
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x40620a
movl $0x40, %edi
callq 0x40df60
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
xorl %ecx, %ecx
movq %rcx, 0x8(%r14)
movb %cl, 0x10(%r14)
leaq 0x30(%r14), %rax
movq %rax, 0x20(%r14)
movq %rcx, 0x28(%r14)
movb %cl, 0x30(%r14)
movq 0x10(%r12), %rsi
leaq -0x78(%rbp), %rbx
movq %rbx, %rdi
movl $0x3, %edx
callq 0x408edc
movq %r14, %rdi
movq %rbx, %rsi
callq 0x47cb00
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x405ffe
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq 0x10(%r12), %rsi
movq %rbx, %rdi
movl $0x1, %edx
callq 0x408edc
movq %r14, %rdi
addq $0x20, %rdi
movq %rbx, %rsi
callq 0x47cb00
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x406038
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movl $0x18, %edi
callq 0x40df60
leaq -0x100(%rbp), %rbx
movq %r14, 0x10(%rax)
movq %rax, %rdi
movq -0xa0(%rbp), %rsi
callq 0x40f070
movq -0xb0(%rbp), %rax
incq 0x40(%rax)
movq 0x10(%r12), %rax
movl $0x3, 0x24(%rax)
jmp 0x40644e
movq -0xb8(%rbp), %r14
movq (%r14), %r14
cmpq -0xb8(%rbp), %r14
je 0x4060ed
movq 0x10(%r14), %r13
movq 0x10(%r12), %rsi
movq %r15, %rdi
xorl %edx, %edx
callq 0x408edc
movq 0x28(%r13), %rdx
cmpq -0x48(%rbp), %rdx
jne 0x4060c2
testq %rdx, %rdx
je 0x4060c7
movq -0x50(%rbp), %rsi
movq 0x20(%r13), %rdi
callq 0x401080
testl %eax, %eax
sete %r13b
jmp 0x4060ca
xorl %r13d, %r13d
jmp 0x4060ca
movb $0x1, %r13b
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4060e3
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testb %r13b, %r13b
je 0x40607f
jmp 0x40655b
movl $0x40, %edi
callq 0x40df60
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
xorl %ecx, %ecx
movq %rcx, 0x8(%r14)
movb %cl, 0x10(%r14)
leaq 0x30(%r14), %rax
movq %rax, 0x20(%r14)
movq %rcx, 0x28(%r14)
movb %cl, 0x30(%r14)
movq 0x10(%r12), %rsi
movq %r15, %rdi
xorl %edx, %edx
callq 0x408edc
movq %r14, %rdi
addq $0x20, %rdi
movq %r15, %rsi
callq 0x47cb00
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x406152
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movl -0x54(%rbp), %edx
movq %r15, %rdi
leaq 0x18be15(%rip), %rsi    # 0x591f74
xorl %eax, %eax
callq 0x4d48b0
movq 0x8(%r14), %r13
movq %r15, %rdi
callq 0x401118
movq %r14, %rdi
xorl %esi, %esi
movq %r13, %rdx
movq %r15, %rcx
movq %rax, %r8
callq 0x47d700
movl $0x18, %edi
callq 0x40df60
movq %r14, 0x10(%rax)
movq %rax, %rdi
movq -0xb8(%rbp), %rsi
callq 0x40f070
movq -0xb0(%rbp), %rax
incq 0x58(%rax)
movq 0x10(%r12), %rax
movl $0x1, 0x24(%rax)
movl -0x54(%rbp), %ecx
movl %ecx, 0x20(%rax)
movq 0x10(%rax), %r14
subq 0x8(%rax), %r14
cmpq $0x21, %r14
jb 0x4064b6
movq 0x10(%r12), %rsi
leaq -0x180(%rbp), %r13
movq %r13, %rdi
movl $0x1, %edx
callq 0x408edc
movq %r13, %rdi
leaq 0x17f619(%rip), %rsi    # 0x58580d
callq 0x47ecc0
testl %eax, %eax
sete %r13b
jmp 0x4064b9
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)
leaq -0x78(%rbp), %rdi
leaq 0x17b344(%rip), %rsi    # 0x581570
callq 0x47e260
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x406255
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x40625b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x50(%rbp), %rdx
movl %r14d, %esi
callq 0x405742
jmp 0x4062fa
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)
leaq -0x78(%rbp), %rdi
leaq 0x17b2eb(%rip), %rsi    # 0x581593
callq 0x47e260
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4062d1
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x4062d7
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x50(%rbp), %rdx
movl %r14d, %esi
callq 0x405742
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x406313
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x40632c
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0x40634e
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0xa8(%rbp), %rbx
cmpq %rbx, %r13
leaq -0xe0(%rbp), %r13
leaq -0x100(%rbp), %rbx
je 0x40647b
jmp 0x4066eb
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x90(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x98(%rbp), %rdi
leaq 0x17b275(%rip), %rsi    # 0x581614
callq 0x47e260
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4063c8
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x4063ce
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 %r14d, %esi
callq 0x405742
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x40640a
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0x40642c
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x40644e
movq -0xf0(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x406467
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
cmpq -0xa0(%rbp), %r13
leaq -0xe0(%rbp), %r13
jne 0x4066eb
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x40649d
movq -0xd0(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq (%r12), %r12
cmpq -0xb0(%rbp), %r12
sete %cl
jne 0x4059a8
jmp 0x40670d
xorl %r13d, %r13d
cmpq $0x21, %r14
jb 0x4064e1
movq -0x180(%rbp), %rdi
leaq -0x170(%rbp), %rax
cmpq %rax, %rdi
je 0x4064e1
movq -0x170(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq 0x10(%r12), %rsi
testb %r13b, %r13b
je 0x406724
movq 0x10(%rsi), %rax
subq 0x8(%rsi), %rax
cmpq $0x41, %rax
leaq -0xe0(%rbp), %r13
jb 0x40647b
leaq -0x120(%rbp), %rdi
movl $0x2, %edx
callq 0x408edc
leaq -0x120(%rbp), %rsi
callq 0x405872
movl %eax, %r14d
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0x40654a
movq -0x110(%rbp), %rsi
incq %rsi
callq 0x40d0c0
testl %r14d, %r14d
js 0x40672d
incl -0x54(%rbp)
jmp 0x40647b
movq 0x10(%r12), %rax
movl (%rax), %r14d
movq 0x10(%r12), %rsi
leaq -0x98(%rbp), %rdi
xorl %edx, %edx
callq 0x408edc
leaq 0x17b0b9(%rip), %rcx    # 0x581636
leaq -0x98(%rbp), %rdi
movl $0x11, %r8d
xorl %esi, %esi
xorl %edx, %edx
leaq -0x88(%rbp), %rbx
callq 0x47daa0
leaq -0x68(%rbp), %r15
movq %r15, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4065fc
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x406603
movq 0x10(%r12), %rax
movl (%rax), %esi
leaq 0x17b001(%rip), %rdx    # 0x5815cd
callq 0x405742
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4066eb
movq -0x40(%rbp), %rsi
jmp 0x4066b8
movq 0x10(%r12), %rsi
leaq 0x17af5b(%rip), %rdx    # 0x581552
jmp 0x4066e4
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq -0x78(%rbp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x17b023(%rip), %rsi    # 0x581648
callq 0x47e260
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x40664e
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x406654
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x50(%rbp), %rdx
movl %r14d, %esi
callq 0x405742
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x406690
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0x78(%rbp), %rdi
cmpq %r15, %rdi
je 0x4066a5
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movq -0x98(%rbp), %rdi
cmpq %rbx, %rdi
je 0x4066eb
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x40d0c0
jmp 0x4066eb
leaq 0x17ae5c(%rip), %rdx    # 0x581525
jmp 0x4066e4
leaq 0x17aeda(%rip), %rdx    # 0x5815ac
jmp 0x4066e4
leaq 0x17af4c(%rip), %rdx    # 0x581627
jmp 0x4066e4
leaq 0x17b729(%rip), %rdx    # 0x581e0d
movl (%rsi), %esi
callq 0x405742
leaq -0xd0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x40670a
movq -0xd0(%rbp), %rsi
incq %rsi
callq 0x40d0c0
movb -0x55(%rbp), %cl
andb $0x1, %cl
movl %ecx, %eax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x17af21(%rip), %rdx    # 0x58164c
jmp 0x406739
movq 0x10(%r12), %rsi
leaq 0x17af1c(%rip), %rdx    # 0x581655
movl (%rsi), %esi
callq 0x405742
jmp 0x4066eb
jmp 0x4068f6
jmp 0x4068d6
movq %rax, %r14
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0x4068f9
movq -0x110(%rbp), %rsi
jmp 0x4068ea
jmp 0x4068f6
jmp 0x40682c
jmp 0x40684a
jmp 0x406868
jmp 0x4068f6
jmp 0x4068f6
jmp 0x4068f6
jmp 0x4068f6
movq %rax, %r14
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x4067bb
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
jmp 0x4067bb
movq %rax, %r14
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0x4067e2
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x40d0c0
jmp 0x4067e2
movq %rax, %r14
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x4068d9
movq -0xf0(%rbp), %rsi
incq %rsi
callq 0x40d0c0
jmp 0x4068d9
jmp 0x4068d6
jmp 0x4068d6
jmp 0x4068d6
jmp 0x40682c
jmp 0x40684a
jmp 0x406868
jmp 0x4068f6
jmp 0x4068f6
movq %rax, %r14
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x40684d
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
jmp 0x40684d
movq %rax, %r14
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x40686b
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x40d0c0
jmp 0x40686b
movq %rax, %r14
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0x4068f9
movq -0x88(%rbp), %rsi
jmp 0x4068ea
jmp 0x4068f6
jmp 0x4068f6
jmp 0x4068f6
jmp 0x4068f6
jmp 0x4068d6
jmp 0x4068f6
jmp 0x4068f6
jmp 0x4068f6
movq %rax, %r14
movq -0x140(%rbp), %rdi
leaq -0x130(%rbp), %rax
cmpq %rax, %rdi
je 0x4068f9
movq -0x130(%rbp), %rsi
jmp 0x4068ea
jmp 0x4068f6
jmp 0x4068f6
movq %rax, %r14
movq -0x160(%rbp), %rdi
leaq -0x150(%rbp), %rax
movq %rax, -0xc0(%rbp)
jmp 0x406907
jmp 0x4068f6
movq %rax, %r14
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x4068f9
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x40d0c0
jmp 0x4068f9
jmp 0x4068f6
movq %rax, %r14
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x40691e
movq -0xc0(%rbp), %rax
movq (%rax), %rsi
incq %rsi
callq 0x40d0c0
movq %r14, %rdi
callq 0x4ad960