// File: myudelson[P]hmm-scalable/InputUtil.cpp
// Function: InputUtil::readTxt(char const*, param*)
bool InputUtil::readTxt(const char *fn, struct param * param) {
	FILE *fid = fopen(fn,"r");
    if( fid == NULL) {
        fprintf(stderr,"Could not read input file (%s).\n",fn);
        return false;
    }
    
	int number_columns = 0;
	max_line_length = 1024;
	char *col;
    
	// count lines and check for number of columns
	line = (char *)malloc((size_t)max_line_length);// Malloc(char,max_line_length);
	
	// grab memory and read all data
	StripedArray<NPAR> *striped_dat_obs = new StripedArray<NPAR>();
	StripedArray<NCAT> *striped_dat_group = new StripedArray<NCAT>();
    StripedArray<NCAT> *striped_dat_skill = NULL;
    StripedArray<NCAT> *striped_dat_skill_stacked = NULL;
    StripedArray<NCAT> *striped_dat_skill_rcount  = NULL;
    StripedArray<NCAT> *striped_dat_skill_rix     = NULL;
    NDAT current_stacked = 0;
    if(param->multiskill==0)
        striped_dat_skill = new StripedArray<NCAT>();
    else {
//        param->dat_multiskill = new StripedArray< NCAT* >(true);
        striped_dat_skill_stacked = new StripedArray<NCAT>();
        striped_dat_skill_rcount  = new StripedArray<NCAT>();
        striped_dat_skill_rix     = new StripedArray<NCAT>();
    }
	StripedArray<NCAT> * striped_dat_item = new StripedArray<NCAT>();
    StripedArray<NPAR> *striped_dat_slice = NULL;
    if(param->sliced)
        striped_dat_slice = new StripedArray<NPAR>();
    param->map_group_fwd = new map<string,NCAT>();
    param->map_group_bwd = new map<NCAT,string>();
    param->map_skill_fwd = new map<string,NCAT>();
    param->map_skill_bwd = new map<NCAT,string>();
    param->map_step_fwd = new map<string,NCAT>();
    param->map_step_bwd = new map<NCAT,string>();
	string s_group, s_step, s_skill;
    NPAR slice = 0;
	map<string,NCAT>::iterator it;
	map<string,NCAT>::iterator it2;
	bool wrong_no_columns = false;
    param->N = 0;
    param->Nstacked = 0;
    NDAT Nstacked_alt = 0;
    param->N_null = 0;
	while( readline(fid)!=NULL && !wrong_no_columns) {
        //    while( NULL!=fgets(line,max_line_length,fid) && !wrong_no_columns) {
		number_columns = 0;
		// Observation
		col = strtok(line,"\t\n\r");
		if(col == NULL) {
			wrong_no_columns = true;
			break;
		}
		number_columns++;
		NPAR obs = (NPAR)(atoi( col )-1);
		if(obs==NPAR_MAX) {
			fprintf(stderr,"Number of observtions exceeds allowed maximum of %d.\n",NPAR_MAX);
			return false;
		}
		striped_dat_obs->add(obs); // dat_obs[t] = (NPAR)obs;
		if( (obs >= 0) && ((param->nO-1) < obs) )
			param->nO = (NPAR)(obs + 1); // obs[t] + 1;

		// Group
		col = strtok(NULL,"\t\n\r");
		if(col == NULL) {
			wrong_no_columns = true;
			break;
		}
		number_columns++;
		s_group = string( col );
		it = param->map_group_fwd->find(s_group);
		if( it==param->map_group_fwd->end() ) { // not found
			if(param->map_group_fwd->size()==NCAT_MAX) {
				fprintf(stderr,"Number of unique groups exceeds allowed maximum of %d.\n",NCAT_MAX);
				return false;
			}
			NCAT newg = (NCAT)param->map_group_fwd->size();
			striped_dat_group->add(newg); //[t] = param->map_group_fwd.size();
			param->map_group_fwd->insert(pair<string,NCAT>(s_group, newg));
			param->map_group_bwd->insert(pair<NCAT,string>(newg, s_group));
		}
		else
			striped_dat_group->add(it->second); // [t] = it->second;
		
		
		// Step
		col = strtok(NULL,"\t\n\r");
		if(col == NULL) {
			wrong_no_columns = true;
			break;
		}
		number_columns++;
		s_step = string( col );
		it2 = param->map_step_fwd->find(s_step);
		if( it2==param->map_step_fwd->end() ) { // not found
			if(param->map_step_fwd->size()==NCAT_MAX) {
				fprintf(stderr,"Number of unique steps exceeds allowed maximum of %d.\n",NCAT_MAX);
				return false;
			}
            NCAT news = (NCAT)param->map_step_fwd->size();
			striped_dat_item->add(news); //[t] = param->map_group_fwd.size();
			param->map_step_fwd->insert(pair<string,NCAT>(s_step, news));
			param->map_step_bwd->insert(pair<NCAT,string>(news, s_step));
		}
		else
            striped_dat_item->add(it2->second);
		
        
		// Skill
		col = strtok(NULL,"\t\n\r");
		if(col == NULL) {
			wrong_no_columns = true;
			break;
		}
		number_columns++;
		s_skill = string( col );
        // process skills later
        
        // Slice
        if(param->sliced) {
            col = strtok(NULL,"\t\n\r");
            if(col == NULL) {
                wrong_no_columns = true;
                break;
            }
            number_columns++;
            slice = (NPAR) atoi( col );
            if( slice<0 ) {
                fprintf(stderr,"Slice cannot be negative (line %d).\n",param->N+1);
				return false;
            }
            if( (slice >= 0) && ((param->nZ-1) < slice) ) // update slice count
                param->nZ = (NPAR)(slice + 1);
            striped_dat_slice->add(slice);
        } // time
        
        // back to skill processing
		if( (s_skill.empty() || ( s_skill.size()==1 && (s_skill[0]=='.' || s_skill[0]==' ') ) ) ) { // null skill
            param->N_null++;
            param->Nstacked++;	// increase stackd count too
            if(param->multiskill == 0) {
                striped_dat_skill->add(-1); // [t] = -1;
            }
            else {
                NCAT* a_skills = Malloc(NCAT, 2);
                a_skills[0] = 1; // count
                a_skills[1] = -1; // value
//                param->dat_multiskill->add(a_skills);
                // add whole multi-skill row
                striped_dat_skill_rcount->add(1);
                striped_dat_skill_rix->add(current_stacked++); // first add pointer, then increase
                striped_dat_skill_stacked->add(-1);
            }
		} // empty skill
		else { // non-empty skill
            // multiskill
            if(param->multiskill != 0) {
                list<NCAT> a_skills;//
                char* a_kc;
                col = &s_skill[0];//. c_str();
                a_kc  = strtok(col, "~\n\r");
                string s_kc;
                // stacked
                NDAT skill_count = 0;
                striped_dat_skill_rix->add(current_stacked); // add stacked pointer once (but increase it with every next skill
                while(a_kc != NULL) {
                    s_kc = string(a_kc);
                    // stacked
                    skill_count++;
                    current_stacked++;
                    param->Nstacked++;	// increase line count
                    // adding vvvv
                    it = param->map_skill_fwd->find(s_kc);
                    if( it==param->map_skill_fwd->end() ) { // not found
                        if(param->map_skill_fwd->size()==NCAT_MAX) {
                            fprintf(stderr,"Number of unique skills exceeds allowed maximum of %d.\n",NCAT_MAX);
                            return false;
                        }
                        a_skills.insert(a_skills.end(), (NCAT)param->map_skill_fwd->size()); //dat_skill->add(param->map_skill_fwd->size());
                        param->map_skill_fwd->insert(pair<string,NCAT>(s_kc, (NCAT)param->map_skill_fwd->size()));
                        param->map_skill_bwd->insert(pair<NCAT,string>((NCAT)param->map_skill_bwd->size(),s_kc));
                        // add stacked skill
                        striped_dat_skill_stacked->add((NCAT)param->map_skill_fwd->size()-1); // -1 because after adding
                    }
                    else {
                        a_skills.insert(a_skills.end(), it->second); //dat_skill->add(it->second); //[t] = it->second;
                        // add stacked skill
                        striped_dat_skill_stacked->add(it->second);
                    }
                    // adding ^^^^
                    a_kc  = strtok(NULL,"~\n\r");
                }
//                NCAT *b_skills = Malloc(NCAT, a_skills.size()+1);
//                b_skills[0] = (NCAT)a_skills.size();
//                int count = 0;
//                for(list<NCAT>::iterator it=a_skills.begin(); it!=a_skills.end(); it++)
//                    b_skills[++count] = *it;
//                param->dat_multiskill->add(b_skills);
                // add stacked count
                striped_dat_skill_rcount->add(skill_count);
                Nstacked_alt+=skill_count;
                // multi skill
            } else {
                // single skill
                it = param->map_skill_fwd->find(s_skill);
                if( it==param->map_skill_fwd->end() ) { // not found
                    if(param->map_skill_fwd->size()==NCAT_MAX) {
                        fprintf(stderr,"Number of unique skills exceeds allowed maximum of %d.\n",NCAT_MAX);
                        return false;
                    }
                    striped_dat_skill->add((NCAT)param->map_skill_fwd->size()); //[t] = param->map_skill_fwd.size();
                    param->map_skill_fwd->insert(pair<string,NCAT>(s_skill, (NCAT)param->map_skill_fwd->size()));
                    param->map_skill_bwd->insert(pair<NCAT,string>((NCAT)param->map_skill_bwd->size(),s_skill));
                }
                else
                    striped_dat_skill->add(it->second); //[t] = it->second;
            } // single skill
		} // non empty skill
        
		// count lines
		param->N++;	// increase line count
	}// reading loop
	if(wrong_no_columns) {
		fprintf(stderr,"Wrong number of columns in line %u. Expected %d, found %d\n",param->N+1,COLUMNS+param->sliced, number_columns);
		free(line);
		fclose(fid);
        return false;
	}
	param->nG = (NCAT)param->map_group_fwd->size();
	param->nK = (NCAT)param->map_skill_fwd->size();
	param->nI = (NCAT)param->map_step_fwd->size();
    
    // copy striped to lined
    param->dat_obs = striped_dat_obs->toArray();
  
    delete striped_dat_obs;
    param->dat_group = striped_dat_group->toArray();
    delete striped_dat_group;
    if(param->multiskill==0) {
        param->dat_skill = striped_dat_skill->toArray();
        delete striped_dat_skill;
    } else {
        param->dat_skill_stacked = striped_dat_skill_stacked->toArray();
        param->dat_skill_rcount  = striped_dat_skill_rcount->toArray();
        param->dat_skill_rix     = striped_dat_skill_rix->toArray();
        delete striped_dat_skill_stacked;
        delete striped_dat_skill_rcount;
        delete striped_dat_skill_rix;
    }
    param->dat_item = striped_dat_item->toArray();
    delete striped_dat_item;
    if(param->sliced) {
        param->dat_slice = striped_dat_slice->toArray();
        delete striped_dat_slice;
    }

	fclose(fid);
	free(line);
    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x720, %rsp            # imm = 0x720
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rdi
leaq 0x3beaa(%rip), %rsi     # 0x4f178
callq 0x5370
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x13303
movq 0x47cf3(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
movq -0x10(%rbp), %rdx
leaq 0x3ccd9(%rip), %rsi     # 0x4ffcc
movb $0x0, %al
callq 0x5440
movb $0x0, -0x1(%rbp)
jmp 0x14d05
movl $0x0, -0x24(%rbp)
movl $0x400, 0x48ad0(%rip)   # imm = 0x400
movslq 0x48ac9(%rip), %rdi     # 0x5bde4
callq 0x53e0
movq %rax, 0x48ac1(%rip)     # 0x5bde8
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x470(%rbp)
callq 0x165d0
jmp 0x13345
movq -0x470(%rbp), %rax
movq %rax, -0x38(%rbp)
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x478(%rbp)
callq 0x16610
jmp 0x1336e
movq -0x478(%rbp), %rax
movq %rax, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
movq $0x0, -0x68(%rbp)
movq $0x0, -0x70(%rbp)
movl $0x0, -0x74(%rbp)
movq -0x18(%rbp), %rax
movsbl 0x918(%rax), %eax
cmpl $0x0, %eax
jne 0x13448
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x480(%rbp)
callq 0x16610
jmp 0x133d2
movq -0x480(%rbp), %rax
movq %rax, -0x58(%rbp)
jmp 0x1352b
movq -0x470(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movq -0x478(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movq -0x480(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x488(%rbp)
callq 0x16610
jmp 0x13466
movq -0x488(%rbp), %rax
movq %rax, -0x60(%rbp)
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x490(%rbp)
callq 0x16610
jmp 0x1348f
movq -0x490(%rbp), %rax
movq %rax, -0x68(%rbp)
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x498(%rbp)
callq 0x16610
jmp 0x134b8
movq -0x498(%rbp), %rax
movq %rax, -0x70(%rbp)
jmp 0x1352b
movq -0x488(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movq -0x490(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movq -0x498(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x4a0(%rbp)
callq 0x16610
jmp 0x13549
movq -0x4a0(%rbp), %rax
movq %rax, -0x80(%rbp)
movq $0x0, -0x88(%rbp)
movq -0x18(%rbp), %rax
cmpb $0x0, 0x33(%rax)
je 0x135db
movl $0x18, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x4a8(%rbp)
callq 0x165d0
jmp 0x13587
movq -0x4a8(%rbp), %rax
movq %rax, -0x88(%rbp)
jmp 0x135db
movq -0x4a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movq -0x4a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x18, %esi
callq 0x52e0
jmp 0x14d13
movl $0x30, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, -0x4d8(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x5150
movq -0x4d8(%rbp), %rdi
callq 0x6850
movq -0x4d8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x920(%rax)
movl $0x30, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, -0x4d0(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x5150
movq -0x4d0(%rbp), %rdi
callq 0x6890
movq -0x4d0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x928(%rax)
movl $0x30, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, -0x4c8(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x5150
movq -0x4c8(%rbp), %rdi
callq 0x6850
movq -0x4c8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x940(%rax)
movl $0x30, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, -0x4c0(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x5150
movq -0x4c0(%rbp), %rdi
callq 0x6890
movq -0x4c0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x948(%rax)
movl $0x30, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, -0x4b8(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x5150
movq -0x4b8(%rbp), %rdi
callq 0x6850
movq -0x4b8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x930(%rax)
movl $0x30, %edi
callq 0x52d0
movq %rax, %rdi
movq %rdi, -0x4b0(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x5150
movq -0x4b0(%rbp), %rdi
callq 0x6890
movq -0x4b0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x938(%rax)
leaq -0xa8(%rbp), %rdi
callq 0x5420
leaq -0xc8(%rbp), %rdi
callq 0x5420
leaq -0xe8(%rbp), %rdi
callq 0x5420
movb $0x0, -0xe9(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x16650
leaq -0x100(%rbp), %rdi
callq 0x16650
movb $0x0, -0x101(%rbp)
movq -0x18(%rbp), %rax
movl $0x0, 0x8b0(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x8b4(%rax)
movl $0x0, -0x108(%rbp)
movq -0x18(%rbp), %rax
movl $0x0, 0x8cc(%rax)
movq -0x20(%rbp), %rdi
callq 0x14d20
movq %rax, -0x4e0(%rbp)
jmp 0x137df
movq -0x4e0(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x4e1(%rbp)
je 0x13802
movb -0x101(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4e1(%rbp)
movb -0x4e1(%rbp), %al
testb $0x1, %al
jne 0x13811
jmp 0x14925
movl $0x0, -0x24(%rbp)
movq 0x485c9(%rip), %rdi     # 0x5bde8
leaq 0x3c113(%rip), %rsi     # 0x4f939
callq 0x54a0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x13853
movb $0x1, -0x101(%rbp)
jmp 0x14925
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x14cdf
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rdi
callq 0x5490
subl $0x1, %eax
movb %al, -0x109(%rbp)
movsbl -0x109(%rbp), %eax
cmpl $0x7f, %eax
jne 0x138aa
movq 0x47757(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
leaq 0x3c762(%rip), %rsi     # 0x4ffed
movl $0x7f, %edx
movb $0x0, %al
callq 0x5440
movb $0x0, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
jmp 0x14cb9
movq -0x38(%rbp), %rdi
movsbl -0x109(%rbp), %esi
callq 0x16670
jmp 0x138bc
movsbl -0x109(%rbp), %eax
cmpl $0x0, %eax
jl 0x138f7
movq -0x18(%rbp), %rax
movsbl 0x8b9(%rax), %eax
subl $0x1, %eax
movsbl -0x109(%rbp), %ecx
cmpl %ecx, %eax
jge 0x138f7
movsbl -0x109(%rbp), %eax
addl $0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x8b9(%rax)
xorl %eax, %eax
movl %eax, %edi
leaq 0x3c037(%rip), %rsi     # 0x4f939
callq 0x54a0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x1391e
movb $0x1, -0x101(%rbp)
jmp 0x14925
movl -0x24(%rbp), %eax
incl %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x4f8(%rbp)
leaq -0x131(%rbp), %rdi
movq %rdi, -0x4f0(%rbp)
callq 0x5550
movq -0x4f8(%rbp), %rsi
movq -0x4f0(%rbp), %rdx
leaq -0x130(%rbp), %rdi
callq 0xc470
jmp 0x13960
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x508(%rbp)
leaq -0x130(%rbp), %rsi
movq %rsi, -0x510(%rbp)
callq 0x53a0
movq -0x510(%rbp), %rdi
callq 0x5170
leaq -0x131(%rbp), %rdi
callq 0x5320
movq -0x508(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x920(%rax), %rdi
callq 0x16710
movq %rax, -0x500(%rbp)
jmp 0x139b9
movq -0x500(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x18(%rbp), %rax
movq 0x920(%rax), %rdi
callq 0x16770
movq %rax, -0x148(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x16740
testb $0x1, %al
jne 0x13a08
jmp 0x13bbc
movq -0x18(%rbp), %rax
movq 0x920(%rax), %rdi
callq 0x167a0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0x13a6d
movq 0x475b1(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
leaq 0x3c5f2(%rip), %rsi     # 0x50023
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x5440
movb $0x0, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
jmp 0x14cb9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x131(%rbp), %rdi
callq 0x5320
jmp 0x14cdf
movq -0x18(%rbp), %rax
movq 0x920(%rax), %rdi
callq 0x167a0
movl %eax, -0x14c(%rbp)
movq -0x50(%rbp), %rdi
movl -0x14c(%rbp), %esi
callq 0x167c0
jmp 0x13a94
movq -0x18(%rbp), %rax
movq 0x920(%rax), %rax
movq %rax, -0x518(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
leaq -0x14c(%rbp), %rdx
callq 0x16890
jmp 0x13ac2
movq -0x518(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x16850
movb %dl, -0x521(%rbp)
movq %rax, -0x520(%rbp)
jmp 0x13ae4
movb -0x521(%rbp), %al
movq -0x520(%rbp), %rcx
movq %rcx, -0x188(%rbp)
movb %al, -0x180(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x168d0
movq -0x18(%rbp), %rax
movq 0x928(%rax), %rax
movq %rax, -0x530(%rbp)
leaq -0x1b0(%rbp), %rdi
leaq -0x14c(%rbp), %rsi
leaq -0xa8(%rbp), %rdx
callq 0x16930
jmp 0x13b38
movq -0x530(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x168f0
movb %dl, -0x539(%rbp)
movq %rax, -0x538(%rbp)
jmp 0x13b5a
movb -0x539(%rbp), %al
movq -0x538(%rbp), %rcx
movq %rcx, -0x1c0(%rbp)
movb %al, -0x1b8(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x16970
jmp 0x13be6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x168d0
jmp 0x14cdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x16970
jmp 0x14cdf
movq -0x50(%rbp), %rax
movq %rax, -0x548(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x16990
movq -0x548(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x167c0
jmp 0x13be4
jmp 0x13be6
xorl %eax, %eax
movl %eax, %edi
leaq 0x3bd48(%rip), %rsi     # 0x4f939
callq 0x54a0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x13c0d
movb $0x1, -0x101(%rbp)
jmp 0x14925
movl -0x24(%rbp), %eax
incl %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x558(%rbp)
leaq -0x1e1(%rbp), %rdi
movq %rdi, -0x550(%rbp)
callq 0x5550
movq -0x558(%rbp), %rsi
movq -0x550(%rbp), %rdx
leaq -0x1e0(%rbp), %rdi
callq 0xc470
jmp 0x13c4f
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x568(%rbp)
leaq -0x1e0(%rbp), %rsi
movq %rsi, -0x570(%rbp)
callq 0x53a0
movq -0x570(%rbp), %rdi
callq 0x5170
leaq -0x1e1(%rbp), %rdi
callq 0x5320
movq -0x568(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x930(%rax), %rdi
callq 0x16710
movq %rax, -0x560(%rbp)
jmp 0x13ca8
movq -0x560(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x18(%rbp), %rax
movq 0x930(%rax), %rdi
callq 0x16770
movq %rax, -0x1f8(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x16740
testb $0x1, %al
jne 0x13cf7
jmp 0x13eab
movq -0x18(%rbp), %rax
movq 0x930(%rax), %rdi
callq 0x167a0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0x13d5c
movq 0x472c2(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
leaq 0x3c33b(%rip), %rsi     # 0x5005b
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x5440
movb $0x0, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
jmp 0x14cb9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1e1(%rbp), %rdi
callq 0x5320
jmp 0x14cdf
movq -0x18(%rbp), %rax
movq 0x930(%rax), %rdi
callq 0x167a0
movl %eax, -0x1fc(%rbp)
movq -0x80(%rbp), %rdi
movl -0x1fc(%rbp), %esi
callq 0x167c0
jmp 0x13d83
movq -0x18(%rbp), %rax
movq 0x930(%rax), %rax
movq %rax, -0x578(%rbp)
leaq -0x228(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
leaq -0x1fc(%rbp), %rdx
callq 0x16890
jmp 0x13db1
movq -0x578(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x16850
movb %dl, -0x581(%rbp)
movq %rax, -0x580(%rbp)
jmp 0x13dd3
movb -0x581(%rbp), %al
movq -0x580(%rbp), %rcx
movq %rcx, -0x238(%rbp)
movb %al, -0x230(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x168d0
movq -0x18(%rbp), %rax
movq 0x938(%rax), %rax
movq %rax, -0x590(%rbp)
leaq -0x260(%rbp), %rdi
leaq -0x1fc(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x16930
jmp 0x13e27
movq -0x590(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x168f0
movb %dl, -0x599(%rbp)
movq %rax, -0x598(%rbp)
jmp 0x13e49
movb -0x599(%rbp), %al
movq -0x598(%rbp), %rcx
movq %rcx, -0x270(%rbp)
movb %al, -0x268(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x16970
jmp 0x13ed5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x168d0
jmp 0x14cdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x16970
jmp 0x14cdf
movq -0x80(%rbp), %rax
movq %rax, -0x5a8(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x16990
movq -0x5a8(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x167c0
jmp 0x13ed3
jmp 0x13ed5
xorl %eax, %eax
movl %eax, %edi
leaq 0x3ba59(%rip), %rsi     # 0x4f939
callq 0x54a0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x13efc
movb $0x1, -0x101(%rbp)
jmp 0x14925
movl -0x24(%rbp), %eax
incl %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x291(%rbp), %rdi
movq %rdi, -0x5b0(%rbp)
callq 0x5550
movq -0x5b8(%rbp), %rsi
movq -0x5b0(%rbp), %rdx
leaq -0x290(%rbp), %rdi
callq 0xc470
jmp 0x13f3e
leaq -0xe8(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x53a0
leaq -0x290(%rbp), %rdi
callq 0x5170
leaq -0x291(%rbp), %rdi
callq 0x5320
movq -0x18(%rbp), %rax
cmpb $0x0, 0x33(%rax)
je 0x14069
xorl %eax, %eax
movl %eax, %edi
leaq 0x3b9b7(%rip), %rsi     # 0x4f939
callq 0x54a0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x13fbb
movb $0x1, -0x101(%rbp)
jmp 0x14925
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x291(%rbp), %rdi
callq 0x5320
jmp 0x14cdf
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rdi
callq 0x5490
movb %al, -0xe9(%rbp)
movsbl -0xe9(%rbp), %eax
cmpl $0x0, %eax
jge 0x14017
movq 0x46ff2(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movl 0x8b0(%rax), %edx
addl $0x1, %edx
leaq 0x3c095(%rip), %rsi     # 0x50092
movb $0x0, %al
callq 0x5440
movb $0x0, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
jmp 0x14cb9
movsbl -0xe9(%rbp), %eax
cmpl $0x0, %eax
jl 0x14052
movq -0x18(%rbp), %rax
movsbl 0x8c8(%rax), %eax
subl $0x1, %eax
movsbl -0xe9(%rbp), %ecx
cmpl %ecx, %eax
jge 0x14052
movsbl -0xe9(%rbp), %eax
addl $0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x8c8(%rax)
movq -0x88(%rbp), %rdi
movsbl -0xe9(%rbp), %esi
callq 0x16670
jmp 0x14067
jmp 0x14069
leaq -0xe8(%rbp), %rdi
callq 0x54f0
testb $0x1, %al
jne 0x140e3
leaq -0xe8(%rbp), %rdi
callq 0x51c0
cmpq $0x1, %rax
jne 0x14193
xorl %eax, %eax
movl %eax, %esi
leaq -0xe8(%rbp), %rdi
callq 0x55d0
movq %rax, -0x5c0(%rbp)
jmp 0x140a8
movq -0x5c0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2e, %eax
je 0x140e3
xorl %eax, %eax
movl %eax, %esi
leaq -0xe8(%rbp), %rdi
callq 0x55d0
movq %rax, -0x5c8(%rbp)
jmp 0x140d0
movq -0x5c8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x20, %eax
jne 0x14193
movq -0x18(%rbp), %rax
movl 0x8cc(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8cc(%rax)
movq -0x18(%rbp), %rax
movl 0x8b4(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8b4(%rax)
movq -0x18(%rbp), %rax
movsbl 0x918(%rax), %eax
cmpl $0x0, %eax
jne 0x1412b
movq -0x58(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x167c0
jmp 0x14129
jmp 0x1418e
movl $0x8, %edi
callq 0x53e0
movq %rax, -0x2a0(%rbp)
movq -0x2a0(%rbp), %rax
movl $0x1, (%rax)
movq -0x2a0(%rbp), %rax
movl $0xffffffff, 0x4(%rax)  # imm = 0xFFFFFFFF
movq -0x68(%rbp), %rdi
movl $0x1, %esi
callq 0x167c0
jmp 0x14167
movq -0x70(%rbp), %rdi
movl -0x74(%rbp), %esi
movl %esi, %eax
incl %eax
movl %eax, -0x74(%rbp)
callq 0x167c0
jmp 0x1417c
movq -0x60(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x167c0
jmp 0x1418c
jmp 0x1418e
jmp 0x1490d
movq -0x18(%rbp), %rax
movsbl 0x918(%rax), %eax
cmpl $0x0, %eax
je 0x146bf
leaq -0x2b8(%rbp), %rdi
callq 0x169b0
xorl %eax, %eax
movl %eax, %esi
leaq -0xe8(%rbp), %rdi
callq 0x55d0
movq %rax, -0x5d0(%rbp)
jmp 0x141cc
movq -0x5d0(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
leaq 0x3bed5(%rip), %rsi     # 0x500b7
callq 0x54a0
movq %rax, -0x2c0(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x5420
movl $0x0, -0x2e4(%rbp)
movq -0x70(%rbp), %rdi
movl -0x74(%rbp), %esi
callq 0x167c0
jmp 0x14212
jmp 0x14214
cmpq $0x0, -0x2c0(%rbp)
je 0x14648
movq -0x2c0(%rbp), %rax
movq %rax, -0x5e0(%rbp)
leaq -0x309(%rbp), %rdi
movq %rdi, -0x5d8(%rbp)
callq 0x5550
movq -0x5e0(%rbp), %rsi
movq -0x5d8(%rbp), %rdx
leaq -0x308(%rbp), %rdi
callq 0xc470
jmp 0x1425f
leaq -0x2e0(%rbp), %rdi
movq %rdi, -0x5f0(%rbp)
leaq -0x308(%rbp), %rsi
movq %rsi, -0x5f8(%rbp)
callq 0x53a0
movq -0x5f8(%rbp), %rdi
callq 0x5170
leaq -0x309(%rbp), %rdi
callq 0x5320
movq -0x5f0(%rbp), %rsi
movl -0x2e4(%rbp), %eax
incl %eax
movl %eax, -0x2e4(%rbp)
movl -0x74(%rbp), %eax
incl %eax
movl %eax, -0x74(%rbp)
movq -0x18(%rbp), %rax
movl 0x8b4(%rax), %ecx
incl %ecx
movl %ecx, 0x8b4(%rax)
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x16710
movq %rax, -0x5e8(%rbp)
jmp 0x142e0
movq -0x5e8(%rbp), %rax
movq %rax, -0x318(%rbp)
movq -0x318(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x16770
movq %rax, -0x320(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x16740
testb $0x1, %al
jne 0x1432f
jmp 0x14598
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x167a0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0x143b6
movq 0x46c8a(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
leaq 0x3bd63(%rip), %rsi     # 0x500bb
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x5440
movb $0x0, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
jmp 0x14675
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x146ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x146a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x309(%rbp), %rdi
callq 0x5320
jmp 0x146a2
leaq -0x2b8(%rbp), %rdi
movq %rdi, -0x608(%rbp)
callq 0x16a10
movq %rax, -0x330(%rbp)
leaq -0x328(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x16a40
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x167a0
movq -0x608(%rbp), %rdi
movl %eax, -0x334(%rbp)
movq -0x328(%rbp), %rsi
leaq -0x334(%rbp), %rdx
callq 0x169d0
movq %rax, -0x600(%rbp)
jmp 0x1441c
movq -0x600(%rbp), %rax
movq %rax, -0x340(%rbp)
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
movq %rdi, -0x610(%rbp)
callq 0x167a0
movl %eax, -0x36c(%rbp)
leaq -0x368(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
leaq -0x36c(%rbp), %rdx
callq 0x16a60
jmp 0x14463
movq -0x610(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x16850
movb %dl, -0x619(%rbp)
movq %rax, -0x618(%rbp)
jmp 0x14485
movb -0x619(%rbp), %al
movq -0x618(%rbp), %rcx
movq %rcx, -0x380(%rbp)
movb %al, -0x378(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x168d0
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
movq %rdi, -0x628(%rbp)
callq 0x16aa0
movl %eax, -0x3ac(%rbp)
leaq -0x3a8(%rbp), %rdi
leaq -0x3ac(%rbp), %rsi
leaq -0x2e0(%rbp), %rdx
callq 0x16ac0
jmp 0x144e4
movq -0x628(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x168f0
movb %dl, -0x631(%rbp)
movq %rax, -0x630(%rbp)
jmp 0x14506
movb -0x631(%rbp), %al
movq -0x630(%rbp), %rcx
movq %rcx, -0x3c0(%rbp)
movb %al, -0x3b8(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0x16970
movq -0x60(%rbp), %rax
movq %rax, -0x640(%rbp)
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x167a0
movq -0x640(%rbp), %rdi
movl %eax, %esi
decl %esi
callq 0x167c0
jmp 0x14559
jmp 0x1462c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x168d0
jmp 0x146a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0x16970
jmp 0x146a2
leaq -0x2b8(%rbp), %rdi
movq %rdi, -0x650(%rbp)
callq 0x16a10
movq %rax, -0x3d0(%rbp)
leaq -0x3c8(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0x16a40
leaq -0xf8(%rbp), %rdi
callq 0x16990
movq -0x650(%rbp), %rdi
movq %rax, %rdx
addq $0x20, %rdx
movq -0x3c8(%rbp), %rsi
callq 0x16b00
movq %rax, -0x648(%rbp)
jmp 0x145f4
movq -0x648(%rbp), %rax
movq %rax, -0x3d8(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x658(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x16990
movq -0x658(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x167c0
jmp 0x1462a
jmp 0x1462c
xorl %eax, %eax
movl %eax, %edi
leaq 0x3ba80(%rip), %rsi     # 0x500b7
callq 0x54a0
movq %rax, -0x2c0(%rbp)
jmp 0x14214
movq -0x68(%rbp), %rdi
movl -0x2e4(%rbp), %esi
callq 0x167c0
jmp 0x14659
movl -0x2e4(%rbp), %eax
addl -0x108(%rbp), %eax
movl %eax, -0x108(%rbp)
movl $0x0, -0x110(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x5170
leaq -0x2b8(%rbp), %rdi
callq 0x16b70
movl -0x110(%rbp), %eax
testl %eax, %eax
jne 0x14cb9
jmp 0x1469d
jmp 0x1490b
leaq -0x2e0(%rbp), %rdi
callq 0x5170
leaq -0x2b8(%rbp), %rdi
callq 0x16b70
jmp 0x14cdf
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x16710
movq %rax, -0x660(%rbp)
jmp 0x146df
movq -0x660(%rbp), %rax
movq %rax, -0x3e0(%rbp)
movq -0x3e0(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x16770
movq %rax, -0x3e8(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x16740
testb $0x1, %al
jne 0x1472e
jmp 0x148df
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x167a0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0x14776
movq 0x4688b(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
leaq 0x3b964(%rip), %rsi     # 0x500bb
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x5440
movb $0x0, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
jmp 0x14cb9
movq -0x58(%rbp), %rax
movq %rax, -0x668(%rbp)
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x167a0
movq -0x668(%rbp), %rdi
movl %eax, %esi
callq 0x167c0
jmp 0x147a1
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
movq %rdi, -0x670(%rbp)
callq 0x167a0
movl %eax, -0x414(%rbp)
leaq -0x410(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
leaq -0x414(%rbp), %rdx
callq 0x16a60
jmp 0x147da
movq -0x670(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x16850
movb %dl, -0x679(%rbp)
movq %rax, -0x678(%rbp)
jmp 0x147fc
movb -0x679(%rbp), %al
movq -0x678(%rbp), %rcx
movq %rcx, -0x428(%rbp)
movb %al, -0x420(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x168d0
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
movq %rdi, -0x688(%rbp)
callq 0x16aa0
movl %eax, -0x454(%rbp)
leaq -0x450(%rbp), %rdi
leaq -0x454(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x16ac0
jmp 0x1485b
movq -0x688(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0x168f0
movb %dl, -0x691(%rbp)
movq %rax, -0x690(%rbp)
jmp 0x1487d
movb -0x691(%rbp), %al
movq -0x690(%rbp), %rcx
movq %rcx, -0x468(%rbp)
movb %al, -0x460(%rbp)
leaq -0x450(%rbp), %rdi
callq 0x16970
jmp 0x14909
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x168d0
jmp 0x14cdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x450(%rbp), %rdi
callq 0x16970
jmp 0x14cdf
movq -0x58(%rbp), %rax
movq %rax, -0x6a0(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x16990
movq -0x6a0(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0x167c0
jmp 0x14907
jmp 0x14909
jmp 0x1490b
jmp 0x1490d
movq -0x18(%rbp), %rax
movl 0x8b0(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8b0(%rax)
jmp 0x137cd
testb $0x1, -0x101(%rbp)
je 0x14987
movq 0x466a3(%rip), %rax     # 0x5afd8
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movl 0x8b0(%rax), %edx
incl %edx
movsbl 0x33(%rax), %ecx
addl $0x4, %ecx
movl -0x24(%rbp), %r8d
leaq 0x3b79d(%rip), %rsi     # 0x500f3
xorl %eax, %eax
callq 0x5440
movq 0x47484(%rip), %rdi     # 0x5bde8
callq 0x5380
movq -0x20(%rbp), %rdi
callq 0x52c0
jmp 0x14974
movb $0x0, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
jmp 0x14cb9
movq -0x18(%rbp), %rax
movq 0x920(%rax), %rdi
callq 0x167a0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x8bc(%rax)
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rdi
callq 0x167a0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x8c0(%rax)
movq -0x18(%rbp), %rax
movq 0x930(%rax), %rdi
callq 0x167a0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x8c4(%rax)
movq -0x38(%rbp), %rdi
callq 0x16b90
movq %rax, -0x6a8(%rbp)
jmp 0x149ed
movq -0x6a8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x870(%rax)
movq -0x38(%rbp), %rax
movq %rax, -0x6b0(%rbp)
cmpq $0x0, %rax
je 0x14a2d
movq -0x6b0(%rbp), %rdi
callq 0x16c50
movq -0x6b0(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
movq -0x50(%rbp), %rdi
callq 0x16cb0
movq %rax, -0x6b8(%rbp)
jmp 0x14a3f
movq -0x6b8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x878(%rax)
movq -0x50(%rbp), %rax
movq %rax, -0x6c0(%rbp)
cmpq $0x0, %rax
je 0x14a7f
movq -0x6c0(%rbp), %rdi
callq 0x16d70
movq -0x6c0(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
movq -0x18(%rbp), %rax
movsbl 0x918(%rax), %eax
cmpl $0x0, %eax
jne 0x14ae6
movq -0x58(%rbp), %rdi
callq 0x16cb0
movq %rax, -0x6c8(%rbp)
jmp 0x14aa1
movq -0x6c8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x880(%rax)
movq -0x58(%rbp), %rax
movq %rax, -0x6d0(%rbp)
cmpq $0x0, %rax
je 0x14ae1
movq -0x6d0(%rbp), %rdi
callq 0x16d70
movq -0x6d0(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
jmp 0x14bde
movq -0x60(%rbp), %rdi
callq 0x16cb0
movq %rax, -0x6d8(%rbp)
jmp 0x14af8
movq -0x6d8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x888(%rax)
movq -0x68(%rbp), %rdi
callq 0x16cb0
movq %rax, -0x6e0(%rbp)
jmp 0x14b1c
movq -0x6e0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x890(%rax)
movq -0x70(%rbp), %rdi
callq 0x16cb0
movq %rax, -0x6e8(%rbp)
jmp 0x14b40
movq -0x6e8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x898(%rax)
movq -0x60(%rbp), %rax
movq %rax, -0x6f0(%rbp)
cmpq $0x0, %rax
je 0x14b80
movq -0x6f0(%rbp), %rdi
callq 0x16d70
movq -0x6f0(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
movq -0x68(%rbp), %rax
movq %rax, -0x6f8(%rbp)
cmpq $0x0, %rax
je 0x14bae
movq -0x6f8(%rbp), %rdi
callq 0x16d70
movq -0x6f8(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
movq -0x70(%rbp), %rax
movq %rax, -0x700(%rbp)
cmpq $0x0, %rax
je 0x14bdc
movq -0x700(%rbp), %rdi
callq 0x16d70
movq -0x700(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
jmp 0x14bde
movq -0x80(%rbp), %rdi
callq 0x16cb0
movq %rax, -0x708(%rbp)
jmp 0x14bf0
movq -0x708(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8a0(%rax)
movq -0x80(%rbp), %rax
movq %rax, -0x710(%rbp)
cmpq $0x0, %rax
je 0x14c30
movq -0x710(%rbp), %rdi
callq 0x16d70
movq -0x710(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
movq -0x18(%rbp), %rax
cmpb $0x0, 0x33(%rax)
je 0x14c94
movq -0x88(%rbp), %rdi
callq 0x16b90
movq %rax, -0x718(%rbp)
jmp 0x14c4f
movq -0x718(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8a8(%rax)
movq -0x88(%rbp), %rax
movq %rax, -0x720(%rbp)
cmpq $0x0, %rax
je 0x14c92
movq -0x720(%rbp), %rdi
callq 0x16c50
movq -0x720(%rbp), %rdi
movl $0x18, %esi
callq 0x52e0
jmp 0x14c94
movq -0x20(%rbp), %rdi
callq 0x52c0
jmp 0x14c9f
movq 0x47142(%rip), %rdi     # 0x5bde8
callq 0x5380
movb $0x1, -0x1(%rbp)
movl $0x1, -0x110(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x5170
leaq -0xc8(%rbp), %rdi
callq 0x5170
leaq -0xa8(%rbp), %rdi
callq 0x5170
jmp 0x14d05
leaq -0xe8(%rbp), %rdi
callq 0x5170
leaq -0xc8(%rbp), %rdi
callq 0x5170
leaq -0xa8(%rbp), %rdi
callq 0x5170
jmp 0x14d13
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x720, %rsp            # imm = 0x720
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x5540
nopl (%rax)