// File: myudelson[P]hmm-scalable/InputUtilSt.cpp
// Function: InputUtilSt::readTxt(char const*, task*)
bool InputUtilSt::readTxt(const char *fn, struct task *task) {
    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;
    NDAT co = 0;
    
    // 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(task->multiskill==0)
        striped_dat_skill = new StripedArray<NCAT>();
    else {
//        task->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(task->sliced) {
        striped_dat_slice = new StripedArray<NPAR>();
    }
    task->map_group_fwd = new map<string,NCAT>();
    task->map_group_bwd = new map<NCAT,string>();
    task->map_skill_fwd = new map<string,NCAT>();
    task->map_skill_bwd = new map<NCAT,string>();
    task->map_step_fwd = new map<string,NCAT>();
    task->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;
    task->N = 0;
    task->Nst = 0;
    NDAT Nst_alt = 0;
    task->N_null = 0;
    bool res = true;
    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);
            res=false;
            goto recycle;
        }
        striped_dat_obs->add(obs); // dat_obs[t] = (NPAR)obs;
        if( (obs >= 0) && ((task->nO-1) < obs) )
            task->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 = task->map_group_fwd->find(s_group);
        if( it==task->map_group_fwd->end() ) { // not found
            if(task->map_group_fwd->size()==NCAT_MAX) {
                fprintf(stderr,"Number of unique groups exceeds allowed maximum of %d.\n",NCAT_MAX);
                res = false;
                goto recycle;
            }
            NCAT newg = (NCAT)task->map_group_fwd->size();
            striped_dat_group->add(newg); //[t] = task->map_group_fwd.size();
            task->map_group_fwd->insert(pair<string,NCAT>(s_group, newg));
            task->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 = task->map_step_fwd->find(s_step);
        if( it2==task->map_step_fwd->end() ) { // not found
            if(task->map_step_fwd->size()==NCAT_MAX) {
                fprintf(stderr,"Number of unique steps exceeds allowed maximum of %d.\n",NCAT_MAX);
                res=false;
                goto recycle;
            }
            NCAT news = (NCAT)task->map_step_fwd->size();
            striped_dat_item->add(news); //[t] = task->map_group_fwd.size();
            task->map_step_fwd->insert(pair<string,NCAT>(s_step, news));
            task->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(task->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",task->N+1);
                res=false;
                goto recycle;
            }
            if( (slice >= 0) && ((task->nZ-1) < slice) ) // update slice count
                task->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
            task->N_null++;
            task->Nst++;    // increase stackd count too
            if(task->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
//                task->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(task->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++;
                    task->Nst++;    // increase line count
                    // adding vvvv
                    it = task->map_skill_fwd->find(s_kc);
                    if( it==task->map_skill_fwd->end() ) { // not found
                        if(task->map_skill_fwd->size()==NCAT_MAX) {
                            fprintf(stderr,"Number of unique skills exceeds allowed maximum of %d.\n",NCAT_MAX);
                            res = false;
                            goto recycle;
                        }
                        a_skills.insert(a_skills.end(), (NCAT)task->map_skill_fwd->size()); //dat_skill->add(task->map_skill_fwd->size());
                        task->map_skill_fwd->insert(pair<string,NCAT>(s_kc, (NCAT)task->map_skill_fwd->size()));
                        task->map_skill_bwd->insert(pair<NCAT,string>((NCAT)task->map_skill_bwd->size(),s_kc));
                        // add stacked skill
                        striped_dat_skill_stacked->add((NCAT)task->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;
//                task->dat_multiskill->add(b_skills);
                // add stacked count
                striped_dat_skill_rcount->add(skill_count);
                Nst_alt+=skill_count;
                // multi skill
            } else {
                // single skill
                it = task->map_skill_fwd->find(s_skill);
                if( it==task->map_skill_fwd->end() ) { // not found
                    if(task->map_skill_fwd->size()==NCAT_MAX) {
                        fprintf(stderr,"Number of unique skills exceeds allowed maximum of %d.\n",NCAT_MAX);
                        res = false;
                        goto recycle;
                    }
                    striped_dat_skill->add((NCAT)task->map_skill_fwd->size()); //[t] = task->map_skill_fwd.size();
                    task->map_skill_fwd->insert(pair<string,NCAT>(s_skill, (NCAT)task->map_skill_fwd->size()));
                    task->map_skill_bwd->insert(pair<NCAT,string>((NCAT)task->map_skill_bwd->size(),s_skill));
                }
                else
                    striped_dat_skill->add(it->second); //[t] = it->second;
            } // single skill
        } // non empty skill
        
        // count lines
        task->N++;    // increase line count
    }// reading loop
    if(wrong_no_columns) {
        fprintf(stderr,"Wrong number of columns in line %u. Expected %d, found %d\n",task->N+1,COLUMNS+task->sliced, number_columns);
        res = false;
        goto recycle;
    }
    task->nG = (NCAT)task->map_group_fwd->size();
    task->nK = (NCAT)task->map_skill_fwd->size();
    task->nI = (NCAT)task->map_step_fwd->size();
    
    // copy striped to lined
    task->dat_obs = striped_dat_obs->toArray();
    task->dat_obs_stacked = init1D<NPAR>(task->Nst);
    task->dat_predict = initToValue2D<NUMBER>(task->N, task->nO, 0);

    task->dat_group = striped_dat_group->toArray();
    if(task->multiskill==0) {
        task->dat_skill = striped_dat_skill->toArray();
    } else {
        task->dat_skill_stacked = striped_dat_skill_stacked->toArray();
        task->dat_skill_rcount  = striped_dat_skill_rcount->toArray();
        task->dat_skill_rix     = striped_dat_skill_rix->toArray();
    }
    task->dat_item = striped_dat_item->toArray();
    if(task->sliced) {
        task->dat_slice = striped_dat_slice->toArray();
    }
    // build dat_obs_stacked
    co = 0;
    if(task->multiskill!=0) {
        for(NDAT t=0;t<task->N;t++) {
            for(NDAT tt=0; tt<task->dat_skill_rcount[t]; tt++) {
                task->dat_obs_stacked[co] = task->dat_obs[t];
                co++;
            }
        }
    } else {
        memcpy( task->dat_obs_stacked, task->dat_obs , sizeof(NPAR)*(size_t)task->N );
    }

    //
    // create connectivities: skill-skill, student-skill
    //
    createConnectivities(task);

    recycle: delete striped_dat_obs;
    delete striped_dat_group;
    if(striped_dat_skill!=NULL) delete striped_dat_skill;
    if(striped_dat_skill_stacked!=NULL) delete striped_dat_skill_stacked;
    if(striped_dat_skill_rcount!=NULL) delete striped_dat_skill_rcount;
    if(striped_dat_skill_rix!=NULL) delete striped_dat_skill_rix;
    if(striped_dat_item!=NULL) delete striped_dat_item;
    if(striped_dat_slice!=NULL) delete striped_dat_slice;
    
    if(fid!=NULL) fclose(fid);
    free(line);
    return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x750, %rsp            # imm = 0x750
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rdi
leaq 0xf6f6(%rip), %rsi      # 0x1b144
callq 0x3310
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0xba83
movq 0x16573(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
movq -0x10(%rbp), %rdx
leaq 0x10455(%rip), %rsi     # 0x1bec8
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x1(%rbp)
jmp 0xd5e4
movl $0x0, -0x24(%rbp)
movl $0x400, 0x172f0(%rip)   # imm = 0x400
movl $0x0, -0x34(%rbp)
movslq 0x172e2(%rip), %rdi     # 0x22d84
callq 0x3380
movq %rax, 0x172da(%rip)     # 0x22d88
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x480(%rbp)
callq 0xece0
jmp 0xbacc
movq -0x480(%rbp), %rax
movq %rax, -0x40(%rbp)
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x488(%rbp)
callq 0xed20
jmp 0xbaf5
movq -0x488(%rbp), %rax
movq %rax, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
movq $0x0, -0x68(%rbp)
movq $0x0, -0x70(%rbp)
movq $0x0, -0x78(%rbp)
movl $0x0, -0x7c(%rbp)
movq -0x18(%rbp), %rax
movsbl 0x920(%rax), %eax
cmpl $0x0, %eax
jne 0xbbcf
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x490(%rbp)
callq 0xed20
jmp 0xbb59
movq -0x490(%rbp), %rax
movq %rax, -0x60(%rbp)
jmp 0xbcb2
movq -0x480(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movq -0x488(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movq -0x490(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x498(%rbp)
callq 0xed20
jmp 0xbbed
movq -0x498(%rbp), %rax
movq %rax, -0x68(%rbp)
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x4a0(%rbp)
callq 0xed20
jmp 0xbc16
movq -0x4a0(%rbp), %rax
movq %rax, -0x70(%rbp)
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x4a8(%rbp)
callq 0xed20
jmp 0xbc3f
movq -0x4a8(%rbp), %rax
movq %rax, -0x78(%rbp)
jmp 0xbcb2
movq -0x498(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movq -0x4a0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movq -0x4a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x4b0(%rbp)
callq 0xed20
jmp 0xbcd0
movq -0x4b0(%rbp), %rax
movq %rax, -0x88(%rbp)
movq $0x0, -0x90(%rbp)
movq -0x18(%rbp), %rax
cmpb $0x0, 0x43(%rax)
je 0xbd65
movl $0x18, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x4b8(%rbp)
callq 0xece0
jmp 0xbd11
movq -0x4b8(%rbp), %rax
movq %rax, -0x90(%rbp)
jmp 0xbd65
movq -0x4b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movq -0x4b8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
movl $0x18, %esi
callq 0x3280
jmp 0xd5f2
movl $0x30, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, -0x4e8(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x3140
movq -0x4e8(%rbp), %rdi
callq 0x4430
movq -0x4e8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x928(%rax)
movl $0x30, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, -0x4e0(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x3140
movq -0x4e0(%rbp), %rdi
callq 0x4470
movq -0x4e0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x930(%rax)
movl $0x30, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, -0x4d8(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x3140
movq -0x4d8(%rbp), %rdi
callq 0x4430
movq -0x4d8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x948(%rax)
movl $0x30, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, -0x4d0(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x3140
movq -0x4d0(%rbp), %rdi
callq 0x4470
movq -0x4d0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x950(%rax)
movl $0x30, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, -0x4c8(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x3140
movq -0x4c8(%rbp), %rdi
callq 0x4430
movq -0x4c8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x938(%rax)
movl $0x30, %edi
callq 0x3270
movq %rax, %rdi
movq %rdi, -0x4c0(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x3140
movq -0x4c0(%rbp), %rdi
callq 0x4470
movq -0x4c0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x940(%rax)
leaq -0xb0(%rbp), %rdi
callq 0x33b0
leaq -0xd0(%rbp), %rdi
callq 0x33b0
leaq -0xf0(%rbp), %rdi
callq 0x33b0
movb $0x0, -0xf1(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xed60
leaq -0x108(%rbp), %rdi
callq 0xed60
movb $0x0, -0x109(%rbp)
movq -0x18(%rbp), %rax
movl $0x0, 0x8f8(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x8fc(%rax)
movl $0x0, -0x110(%rbp)
movq -0x18(%rbp), %rax
movl $0x0, 0x914(%rax)
movb $0x1, -0x111(%rbp)
movq -0x20(%rbp), %rdi
callq 0xd600
movq %rax, -0x4f0(%rbp)
jmp 0xbf70
movq -0x4f0(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x4f1(%rbp)
je 0xbf93
movb -0x109(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4f1(%rbp)
movb -0x4f1(%rbp), %al
testb $0x1, %al
jne 0xbfa2
jmp 0xd086
movl $0x0, -0x24(%rbp)
movq 0x16dd8(%rip), %rdi     # 0x22d88
leaq 0xf977(%rip), %rsi      # 0x1b92e
callq 0x3410
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xbfe4
movb $0x1, -0x109(%rbp)
jmp 0xd086
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xd5be
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rdi
callq 0x3400
subl $0x1, %eax
movb %al, -0x112(%rbp)
movsbl -0x112(%rbp), %eax
cmpl $0x7f, %eax
jne 0xc034
movq 0x15fc6(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
leaq 0xfecd(%rip), %rsi      # 0x1bee9
movl $0x7f, %edx
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x111(%rbp)
jmp 0xd3b1
movq -0x40(%rbp), %rdi
movsbl -0x112(%rbp), %esi
callq 0xed80
jmp 0xc046
movsbl -0x112(%rbp), %eax
cmpl $0x0, %eax
jl 0xc081
movq -0x18(%rbp), %rax
movsbl 0x901(%rax), %eax
subl $0x1, %eax
movsbl -0x112(%rbp), %ecx
cmpl %ecx, %eax
jge 0xc081
movsbl -0x112(%rbp), %eax
addl $0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x901(%rax)
xorl %eax, %eax
movl %eax, %edi
leaq 0xf8a2(%rip), %rsi      # 0x1b92e
callq 0x3410
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xc0a8
movb $0x1, -0x109(%rbp)
jmp 0xd086
movl -0x24(%rbp), %eax
incl %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x508(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0x500(%rbp)
callq 0x34a0
movq -0x508(%rbp), %rsi
movq -0x500(%rbp), %rdx
leaq -0x138(%rbp), %rdi
callq 0x9e00
jmp 0xc0ea
leaq -0xb0(%rbp), %rdi
movq %rdi, -0x518(%rbp)
leaq -0x138(%rbp), %rsi
movq %rsi, -0x520(%rbp)
callq 0x3340
movq -0x520(%rbp), %rdi
callq 0x3160
leaq -0x139(%rbp), %rdi
callq 0x32c0
movq -0x518(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x928(%rax), %rdi
callq 0xee20
movq %rax, -0x510(%rbp)
jmp 0xc143
movq -0x510(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x148(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x18(%rbp), %rax
movq 0x928(%rax), %rdi
callq 0xee80
movq %rax, -0x150(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0xee50
testb $0x1, %al
jne 0xc192
jmp 0xc33f
movq -0x18(%rbp), %rax
movq 0x928(%rax), %rdi
callq 0xeeb0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0xc1f0
movq 0x15e27(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
leaq 0xfd64(%rip), %rsi      # 0x1bf1f
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x111(%rbp)
jmp 0xd3b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x139(%rbp), %rdi
callq 0x32c0
jmp 0xd5be
movq -0x18(%rbp), %rax
movq 0x928(%rax), %rdi
callq 0xeeb0
movl %eax, -0x154(%rbp)
movq -0x58(%rbp), %rdi
movl -0x154(%rbp), %esi
callq 0xeed0
jmp 0xc217
movq -0x18(%rbp), %rax
movq 0x928(%rax), %rax
movq %rax, -0x528(%rbp)
leaq -0x180(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
leaq -0x154(%rbp), %rdx
callq 0xefa0
jmp 0xc245
movq -0x528(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0xef60
movb %dl, -0x531(%rbp)
movq %rax, -0x530(%rbp)
jmp 0xc267
movb -0x531(%rbp), %al
movq -0x530(%rbp), %rcx
movq %rcx, -0x190(%rbp)
movb %al, -0x188(%rbp)
leaq -0x180(%rbp), %rdi
callq 0xefe0
movq -0x18(%rbp), %rax
movq 0x930(%rax), %rax
movq %rax, -0x540(%rbp)
leaq -0x1b8(%rbp), %rdi
leaq -0x154(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
callq 0xf040
jmp 0xc2bb
movq -0x540(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0xf000
movb %dl, -0x549(%rbp)
movq %rax, -0x548(%rbp)
jmp 0xc2dd
movb -0x549(%rbp), %al
movq -0x548(%rbp), %rcx
movq %rcx, -0x1c8(%rbp)
movb %al, -0x1c0(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0xf080
jmp 0xc369
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x180(%rbp), %rdi
callq 0xefe0
jmp 0xd5be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0xf080
jmp 0xd5be
movq -0x58(%rbp), %rax
movq %rax, -0x558(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xf0a0
movq -0x558(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0xeed0
jmp 0xc367
jmp 0xc369
xorl %eax, %eax
movl %eax, %edi
leaq 0xf5ba(%rip), %rsi      # 0x1b92e
callq 0x3410
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xc390
movb $0x1, -0x109(%rbp)
jmp 0xd086
movl -0x24(%rbp), %eax
incl %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x568(%rbp)
leaq -0x1e9(%rbp), %rdi
movq %rdi, -0x560(%rbp)
callq 0x34a0
movq -0x568(%rbp), %rsi
movq -0x560(%rbp), %rdx
leaq -0x1e8(%rbp), %rdi
callq 0x9e00
jmp 0xc3d2
leaq -0xd0(%rbp), %rdi
movq %rdi, -0x578(%rbp)
leaq -0x1e8(%rbp), %rsi
movq %rsi, -0x580(%rbp)
callq 0x3340
movq -0x580(%rbp), %rdi
callq 0x3160
leaq -0x1e9(%rbp), %rdi
callq 0x32c0
movq -0x578(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x938(%rax), %rdi
callq 0xee20
movq %rax, -0x570(%rbp)
jmp 0xc42b
movq -0x570(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq -0x1f8(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x18(%rbp), %rax
movq 0x938(%rax), %rdi
callq 0xee80
movq %rax, -0x200(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0xee50
testb $0x1, %al
jne 0xc47a
jmp 0xc62a
movq -0x18(%rbp), %rax
movq 0x938(%rax), %rdi
callq 0xeeb0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0xc4d8
movq 0x15b3f(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
leaq 0xfab4(%rip), %rsi      # 0x1bf57
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x111(%rbp)
jmp 0xd3b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1e9(%rbp), %rdi
callq 0x32c0
jmp 0xd5be
movq -0x18(%rbp), %rax
movq 0x938(%rax), %rdi
callq 0xeeb0
movl %eax, -0x204(%rbp)
movq -0x88(%rbp), %rdi
movl -0x204(%rbp), %esi
callq 0xeed0
jmp 0xc502
movq -0x18(%rbp), %rax
movq 0x938(%rax), %rax
movq %rax, -0x588(%rbp)
leaq -0x230(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0x204(%rbp), %rdx
callq 0xefa0
jmp 0xc530
movq -0x588(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0xef60
movb %dl, -0x591(%rbp)
movq %rax, -0x590(%rbp)
jmp 0xc552
movb -0x591(%rbp), %al
movq -0x590(%rbp), %rcx
movq %rcx, -0x240(%rbp)
movb %al, -0x238(%rbp)
leaq -0x230(%rbp), %rdi
callq 0xefe0
movq -0x18(%rbp), %rax
movq 0x940(%rax), %rax
movq %rax, -0x5a0(%rbp)
leaq -0x268(%rbp), %rdi
leaq -0x204(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0xf040
jmp 0xc5a6
movq -0x5a0(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0xf000
movb %dl, -0x5a9(%rbp)
movq %rax, -0x5a8(%rbp)
jmp 0xc5c8
movb -0x5a9(%rbp), %al
movq -0x5a8(%rbp), %rcx
movq %rcx, -0x278(%rbp)
movb %al, -0x270(%rbp)
leaq -0x268(%rbp), %rdi
callq 0xf080
jmp 0xc657
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x230(%rbp), %rdi
callq 0xefe0
jmp 0xd5be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x268(%rbp), %rdi
callq 0xf080
jmp 0xd5be
movq -0x88(%rbp), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xf0a0
movq -0x5b8(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0xeed0
jmp 0xc655
jmp 0xc657
xorl %eax, %eax
movl %eax, %edi
leaq 0xf2cc(%rip), %rsi      # 0x1b92e
callq 0x3410
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xc67e
movb $0x1, -0x109(%rbp)
jmp 0xd086
movl -0x24(%rbp), %eax
incl %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x5c8(%rbp)
leaq -0x299(%rbp), %rdi
movq %rdi, -0x5c0(%rbp)
callq 0x34a0
movq -0x5c8(%rbp), %rsi
movq -0x5c0(%rbp), %rdx
leaq -0x298(%rbp), %rdi
callq 0x9e00
jmp 0xc6c0
leaq -0xf0(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x3340
leaq -0x298(%rbp), %rdi
callq 0x3160
leaq -0x299(%rbp), %rdi
callq 0x32c0
movq -0x18(%rbp), %rax
cmpb $0x0, 0x43(%rax)
je 0xc7e4
xorl %eax, %eax
movl %eax, %edi
leaq 0xf22a(%rip), %rsi      # 0x1b92e
callq 0x3410
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0xc73d
movb $0x1, -0x109(%rbp)
jmp 0xd086
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x299(%rbp), %rdi
callq 0x32c0
jmp 0xd5be
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x30(%rbp), %rdi
callq 0x3400
movb %al, -0xf1(%rbp)
movsbl -0xf1(%rbp), %eax
cmpl $0x0, %eax
jge 0xc792
movq 0x15870(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movl 0x8f8(%rax), %edx
addl $0x1, %edx
leaq 0xf80f(%rip), %rsi      # 0x1bf8e
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x111(%rbp)
jmp 0xd3b1
movsbl -0xf1(%rbp), %eax
cmpl $0x0, %eax
jl 0xc7cd
movq -0x18(%rbp), %rax
movsbl 0x910(%rax), %eax
subl $0x1, %eax
movsbl -0xf1(%rbp), %ecx
cmpl %ecx, %eax
jge 0xc7cd
movsbl -0xf1(%rbp), %eax
addl $0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x910(%rax)
movq -0x90(%rbp), %rdi
movsbl -0xf1(%rbp), %esi
callq 0xed80
jmp 0xc7e2
jmp 0xc7e4
leaq -0xf0(%rbp), %rdi
callq 0x3460
testb $0x1, %al
jne 0xc85e
leaq -0xf0(%rbp), %rdi
callq 0x31b0
cmpq $0x1, %rax
jne 0xc8e2
xorl %eax, %eax
movl %eax, %esi
leaq -0xf0(%rbp), %rdi
callq 0x3540
movq %rax, -0x5d0(%rbp)
jmp 0xc823
movq -0x5d0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2e, %eax
je 0xc85e
xorl %eax, %eax
movl %eax, %esi
leaq -0xf0(%rbp), %rdi
callq 0x3540
movq %rax, -0x5d8(%rbp)
jmp 0xc84b
movq -0x5d8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x20, %eax
jne 0xc8e2
movq -0x18(%rbp), %rax
movl 0x914(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x914(%rax)
movq -0x18(%rbp), %rax
movl 0x8fc(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8fc(%rax)
movq -0x18(%rbp), %rax
movsbl 0x920(%rax), %eax
cmpl $0x0, %eax
jne 0xc8a6
movq -0x60(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0xeed0
jmp 0xc8a4
jmp 0xc8dd
movq -0x70(%rbp), %rdi
movl $0x1, %esi
callq 0xeed0
jmp 0xc8b6
movq -0x78(%rbp), %rdi
movl -0x7c(%rbp), %esi
movl %esi, %eax
incl %eax
movl %eax, -0x7c(%rbp)
callq 0xeed0
jmp 0xc8cb
movq -0x68(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0xeed0
jmp 0xc8db
jmp 0xc8dd
jmp 0xd06e
movq -0x18(%rbp), %rax
movsbl 0x920(%rax), %eax
cmpl $0x0, %eax
je 0xce27
leaq -0x2b8(%rbp), %rdi
callq 0xf0c0
xorl %eax, %eax
movl %eax, %esi
leaq -0xf0(%rbp), %rdi
callq 0x3540
movq %rax, -0x5e0(%rbp)
jmp 0xc91b
movq -0x5e0(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
leaq 0xf682(%rip), %rsi      # 0x1bfb3
callq 0x3410
movq %rax, -0x2c0(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x33b0
movl $0x0, -0x2e4(%rbp)
movq -0x78(%rbp), %rdi
movl -0x7c(%rbp), %esi
callq 0xeed0
jmp 0xc961
jmp 0xc963
cmpq $0x0, -0x2c0(%rbp)
je 0xcd9a
movq -0x2c0(%rbp), %rax
movq %rax, -0x5f0(%rbp)
leaq -0x309(%rbp), %rdi
movq %rdi, -0x5e8(%rbp)
callq 0x34a0
movq -0x5f0(%rbp), %rsi
movq -0x5e8(%rbp), %rdx
leaq -0x308(%rbp), %rdi
callq 0x9e00
jmp 0xc9ae
leaq -0x2e0(%rbp), %rdi
movq %rdi, -0x600(%rbp)
leaq -0x308(%rbp), %rsi
movq %rsi, -0x608(%rbp)
callq 0x3340
movq -0x608(%rbp), %rdi
callq 0x3160
leaq -0x309(%rbp), %rdi
callq 0x32c0
movq -0x600(%rbp), %rsi
movl -0x2e4(%rbp), %eax
incl %eax
movl %eax, -0x2e4(%rbp)
movl -0x7c(%rbp), %eax
incl %eax
movl %eax, -0x7c(%rbp)
movq -0x18(%rbp), %rax
movl 0x8fc(%rax), %ecx
incl %ecx
movl %ecx, 0x8fc(%rax)
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xee20
movq %rax, -0x5f8(%rbp)
jmp 0xca2f
movq -0x5f8(%rbp), %rax
movq %rax, -0x318(%rbp)
movq -0x318(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xee80
movq %rax, -0x320(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0xee50
testb $0x1, %al
jne 0xca7e
jmp 0xccea
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xeeb0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0xcb08
movq 0x1553b(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
leaq 0xf510(%rip), %rsi      # 0x1bfb7
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x111(%rbp)
movl $0x4, -0x3dc(%rbp)
jmp 0xcdc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xce16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xce0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x309(%rbp), %rdi
callq 0x32c0
jmp 0xce0a
leaq -0x2b8(%rbp), %rdi
movq %rdi, -0x618(%rbp)
callq 0xf120
movq %rax, -0x330(%rbp)
leaq -0x328(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xf150
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xeeb0
movq -0x618(%rbp), %rdi
movl %eax, -0x334(%rbp)
movq -0x328(%rbp), %rsi
leaq -0x334(%rbp), %rdx
callq 0xf0e0
movq %rax, -0x610(%rbp)
jmp 0xcb6e
movq -0x610(%rbp), %rax
movq %rax, -0x340(%rbp)
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
movq %rdi, -0x620(%rbp)
callq 0xeeb0
movl %eax, -0x36c(%rbp)
leaq -0x368(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
leaq -0x36c(%rbp), %rdx
callq 0xf170
jmp 0xcbb5
movq -0x620(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0xef60
movb %dl, -0x629(%rbp)
movq %rax, -0x628(%rbp)
jmp 0xcbd7
movb -0x629(%rbp), %al
movq -0x628(%rbp), %rcx
movq %rcx, -0x380(%rbp)
movb %al, -0x378(%rbp)
leaq -0x368(%rbp), %rdi
callq 0xefe0
movq -0x18(%rbp), %rax
movq 0x950(%rax), %rdi
movq %rdi, -0x638(%rbp)
callq 0xf1b0
movl %eax, -0x3ac(%rbp)
leaq -0x3a8(%rbp), %rdi
leaq -0x3ac(%rbp), %rsi
leaq -0x2e0(%rbp), %rdx
callq 0xf1d0
jmp 0xcc36
movq -0x638(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0xf000
movb %dl, -0x641(%rbp)
movq %rax, -0x640(%rbp)
jmp 0xcc58
movb -0x641(%rbp), %al
movq -0x640(%rbp), %rcx
movq %rcx, -0x3c0(%rbp)
movb %al, -0x3b8(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0xf080
movq -0x68(%rbp), %rax
movq %rax, -0x650(%rbp)
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xeeb0
movq -0x650(%rbp), %rdi
movl %eax, %esi
decl %esi
callq 0xeed0
jmp 0xccab
jmp 0xcd7e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x368(%rbp), %rdi
callq 0xefe0
jmp 0xce0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0xf080
jmp 0xce0a
leaq -0x2b8(%rbp), %rdi
movq %rdi, -0x660(%rbp)
callq 0xf120
movq %rax, -0x3d0(%rbp)
leaq -0x3c8(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0xf150
leaq -0x100(%rbp), %rdi
callq 0xf0a0
movq -0x660(%rbp), %rdi
movq %rax, %rdx
addq $0x20, %rdx
movq -0x3c8(%rbp), %rsi
callq 0xf210
movq %rax, -0x658(%rbp)
jmp 0xcd46
movq -0x658(%rbp), %rax
movq %rax, -0x3d8(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x668(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xf0a0
movq -0x668(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0xeed0
jmp 0xcd7c
jmp 0xcd7e
xorl %eax, %eax
movl %eax, %edi
leaq 0xf22a(%rip), %rsi      # 0x1bfb3
callq 0x3410
movq %rax, -0x2c0(%rbp)
jmp 0xc963
movq -0x70(%rbp), %rdi
movl -0x2e4(%rbp), %esi
callq 0xeed0
jmp 0xcdab
movl -0x2e4(%rbp), %eax
addl -0x110(%rbp), %eax
movl %eax, -0x110(%rbp)
movl $0x0, -0x3dc(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x3160
leaq -0x2b8(%rbp), %rdi
callq 0xf280
movl -0x3dc(%rbp), %eax
movl %eax, -0x66c(%rbp)
testl %eax, %eax
je 0xce05
jmp 0xcdf1
movl -0x66c(%rbp), %eax
subl $0x4, %eax
je 0xd3b1
jmp 0xd598
jmp 0xd06c
leaq -0x2e0(%rbp), %rdi
callq 0x3160
leaq -0x2b8(%rbp), %rdi
callq 0xf280
jmp 0xd5be
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
leaq -0xf0(%rbp), %rsi
callq 0xee20
movq %rax, -0x678(%rbp)
jmp 0xce47
movq -0x678(%rbp), %rax
movq %rax, -0x3e8(%rbp)
movq -0x3e8(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xee80
movq %rax, -0x3f0(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0xee50
testb $0x1, %al
jne 0xce96
jmp 0xd040
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xeeb0
cmpq $0x7fffffff, %rax       # imm = 0x7FFFFFFF
jne 0xced7
movq 0x15123(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
leaq 0xf0f8(%rip), %rsi      # 0x1bfb7
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x111(%rbp)
jmp 0xd3b1
movq -0x60(%rbp), %rax
movq %rax, -0x680(%rbp)
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xeeb0
movq -0x680(%rbp), %rdi
movl %eax, %esi
callq 0xeed0
jmp 0xcf02
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
movq %rdi, -0x688(%rbp)
callq 0xeeb0
movl %eax, -0x41c(%rbp)
leaq -0x418(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
leaq -0x41c(%rbp), %rdx
callq 0xf170
jmp 0xcf3b
movq -0x688(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0xef60
movb %dl, -0x691(%rbp)
movq %rax, -0x690(%rbp)
jmp 0xcf5d
movb -0x691(%rbp), %al
movq -0x690(%rbp), %rcx
movq %rcx, -0x430(%rbp)
movb %al, -0x428(%rbp)
leaq -0x418(%rbp), %rdi
callq 0xefe0
movq -0x18(%rbp), %rax
movq 0x950(%rax), %rdi
movq %rdi, -0x6a0(%rbp)
callq 0xf1b0
movl %eax, -0x45c(%rbp)
leaq -0x458(%rbp), %rdi
leaq -0x45c(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
callq 0xf1d0
jmp 0xcfbc
movq -0x6a0(%rbp), %rdi
leaq -0x458(%rbp), %rsi
callq 0xf000
movb %dl, -0x6a9(%rbp)
movq %rax, -0x6a8(%rbp)
jmp 0xcfde
movb -0x6a9(%rbp), %al
movq -0x6a8(%rbp), %rcx
movq %rcx, -0x470(%rbp)
movb %al, -0x468(%rbp)
leaq -0x458(%rbp), %rdi
callq 0xf080
jmp 0xd06a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x418(%rbp), %rdi
callq 0xefe0
jmp 0xd5be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x458(%rbp), %rdi
callq 0xf080
jmp 0xd5be
movq -0x60(%rbp), %rax
movq %rax, -0x6b8(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xf0a0
movq -0x6b8(%rbp), %rdi
movl 0x20(%rax), %esi
callq 0xeed0
jmp 0xd068
jmp 0xd06a
jmp 0xd06c
jmp 0xd06e
movq -0x18(%rbp), %rax
movl 0x8f8(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8f8(%rax)
jmp 0xbf5e
testb $0x1, -0x109(%rbp)
je 0xd0cf
movq 0x14f42(%rip), %rax     # 0x21fd8
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movl 0x8f8(%rax), %edx
addl $0x1, %edx
movq -0x18(%rbp), %rax
movsbl 0x43(%rax), %ecx
addl $0x4, %ecx
movl -0x24(%rbp), %r8d
leaq 0xef33(%rip), %rsi      # 0x1bfef
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x111(%rbp)
jmp 0xd3b1
movq -0x18(%rbp), %rax
movq 0x928(%rax), %rdi
callq 0xeeb0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x904(%rax)
movq -0x18(%rbp), %rax
movq 0x948(%rax), %rdi
callq 0xeeb0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x908(%rax)
movq -0x18(%rbp), %rax
movq 0x938(%rax), %rdi
callq 0xeeb0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x90c(%rax)
movq -0x40(%rbp), %rdi
callq 0xf2a0
movq %rax, -0x6c0(%rbp)
jmp 0xd135
movq -0x6c0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x880(%rax)
movq -0x18(%rbp), %rax
movl 0x8fc(%rax), %edi
callq 0xf360
movq %rax, -0x6c8(%rbp)
jmp 0xd15f
movq -0x6c8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x888(%rax)
movq -0x18(%rbp), %rax
movl 0x8f8(%rax), %edi
movsbl 0x901(%rax), %esi
xorps %xmm0, %xmm0
callq 0xf390
movq %rax, -0x6d0(%rbp)
jmp 0xd193
movq -0x6d0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8c8(%rax)
movq -0x58(%rbp), %rdi
callq 0xf430
movq %rax, -0x6d8(%rbp)
jmp 0xd1b7
movq -0x6d8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x890(%rax)
movq -0x18(%rbp), %rax
movsbl 0x920(%rax), %eax
cmpl $0x0, %eax
jne 0xd1ff
movq -0x60(%rbp), %rdi
callq 0xf430
movq %rax, -0x6e0(%rbp)
jmp 0xd1eb
movq -0x6e0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x898(%rax)
jmp 0xd26b
movq -0x68(%rbp), %rdi
callq 0xf430
movq %rax, -0x6e8(%rbp)
jmp 0xd211
movq -0x6e8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8a0(%rax)
movq -0x70(%rbp), %rdi
callq 0xf430
movq %rax, -0x6f0(%rbp)
jmp 0xd235
movq -0x6f0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8a8(%rax)
movq -0x78(%rbp), %rdi
callq 0xf430
movq %rax, -0x6f8(%rbp)
jmp 0xd259
movq -0x6f8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8b0(%rax)
movq -0x88(%rbp), %rdi
callq 0xf430
movq %rax, -0x700(%rbp)
jmp 0xd280
movq -0x700(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8b8(%rax)
movq -0x18(%rbp), %rax
cmpb $0x0, 0x43(%rax)
je 0xd2c3
movq -0x90(%rbp), %rdi
callq 0xf2a0
movq %rax, -0x708(%rbp)
jmp 0xd2b1
movq -0x708(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8c0(%rax)
movl $0x0, -0x34(%rbp)
movq -0x18(%rbp), %rax
movsbl 0x920(%rax), %eax
cmpl $0x0, %eax
je 0xd37a
movl $0x0, -0x474(%rbp)
movl -0x474(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl 0x8f8(%rcx), %eax
jge 0xd378
movl $0x0, -0x478(%rbp)
movl -0x478(%rbp), %eax
movq -0x18(%rbp), %rcx
movq 0x8a8(%rcx), %rcx
movslq -0x474(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jge 0xd362
movq -0x18(%rbp), %rax
movq 0x880(%rax), %rax
movslq -0x474(%rbp), %rcx
movb (%rax,%rcx), %dl
movq -0x18(%rbp), %rax
movq 0x888(%rax), %rax
movslq -0x34(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movl -0x478(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x478(%rbp)
jmp 0xd304
jmp 0xd364
movl -0x474(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x474(%rbp)
jmp 0xd2e8
jmp 0xd3a4
movq -0x18(%rbp), %rax
movq 0x888(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x880(%rax), %rsi
movq -0x18(%rbp), %rax
movslq 0x8f8(%rax), %rdx
shlq $0x0, %rdx
callq 0x3220
movq -0x18(%rbp), %rdi
callq 0xd700
jmp 0xd3af
jmp 0xd3b1
movq -0x40(%rbp), %rax
movq %rax, -0x710(%rbp)
cmpq $0x0, %rax
je 0xd3df
movq -0x710(%rbp), %rdi
callq 0xf4f0
movq -0x710(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
movq -0x58(%rbp), %rax
movq %rax, -0x718(%rbp)
cmpq $0x0, %rax
je 0xd40d
movq -0x718(%rbp), %rdi
callq 0xf550
movq -0x718(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
cmpq $0x0, -0x60(%rbp)
je 0xd444
movq -0x60(%rbp), %rax
movq %rax, -0x720(%rbp)
cmpq $0x0, %rax
je 0xd442
movq -0x720(%rbp), %rdi
callq 0xf550
movq -0x720(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
jmp 0xd444
cmpq $0x0, -0x68(%rbp)
je 0xd47b
movq -0x68(%rbp), %rax
movq %rax, -0x728(%rbp)
cmpq $0x0, %rax
je 0xd479
movq -0x728(%rbp), %rdi
callq 0xf550
movq -0x728(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
jmp 0xd47b
cmpq $0x0, -0x70(%rbp)
je 0xd4b2
movq -0x70(%rbp), %rax
movq %rax, -0x730(%rbp)
cmpq $0x0, %rax
je 0xd4b0
movq -0x730(%rbp), %rdi
callq 0xf550
movq -0x730(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
jmp 0xd4b2
cmpq $0x0, -0x78(%rbp)
je 0xd4e9
movq -0x78(%rbp), %rax
movq %rax, -0x738(%rbp)
cmpq $0x0, %rax
je 0xd4e7
movq -0x738(%rbp), %rdi
callq 0xf550
movq -0x738(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
jmp 0xd4e9
cmpq $0x0, -0x88(%rbp)
je 0xd526
movq -0x88(%rbp), %rax
movq %rax, -0x740(%rbp)
cmpq $0x0, %rax
je 0xd524
movq -0x740(%rbp), %rdi
callq 0xf550
movq -0x740(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
jmp 0xd526
cmpq $0x0, -0x90(%rbp)
je 0xd563
movq -0x90(%rbp), %rax
movq %rax, -0x748(%rbp)
cmpq $0x0, %rax
je 0xd561
movq -0x748(%rbp), %rdi
callq 0xf4f0
movq -0x748(%rbp), %rdi
movl $0x18, %esi
callq 0x3280
jmp 0xd563
cmpq $0x0, -0x20(%rbp)
je 0xd577
movq -0x20(%rbp), %rdi
callq 0x3260
jmp 0xd575
jmp 0xd577
movq 0x1580a(%rip), %rdi     # 0x22d88
callq 0x3320
movb -0x111(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movl $0x1, -0x3dc(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x3160
leaq -0xd0(%rbp), %rdi
callq 0x3160
leaq -0xb0(%rbp), %rdi
callq 0x3160
jmp 0xd5e4
leaq -0xf0(%rbp), %rdi
callq 0x3160
leaq -0xd0(%rbp), %rdi
callq 0x3160
leaq -0xb0(%rbp), %rdi
callq 0x3160
jmp 0xd5f2
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x750, %rsp            # imm = 0x750
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x3490
nopl (%rax,%rax)