// File: melop[P]admixem/config.cpp
// Function: MarkerConfigurations::CalculateMapDistances()
void MarkerConfigurations::CalculateMapDistances() { // calculate map distances for each marker
	
	vector<double> * pvMaleMapDistances = ((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->GetBreakPointMapDistances(1);

	//if (!pvMaleMapDistances) return; //The recombination mode is not predetermined mode , not available;

	vector<double> * pvFemaleMapDistances = ((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->GetBreakPointMapDistances(0);
	vector<double> * pvAvgMapDistances = ((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->GetBreakPointMapDistances(2);
	vector<double> * pvBreakpointSamplePositions = ((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->GetBreakPointSamplePositions();
	vAbsToMapDistanceMale.clear();
	vAbsToMapDistanceFemale.clear();
	vAbsToMapDistanceAvg.clear();


	for (int nChr=0 ; nChr < this->_nHaploidChrNum; nChr++ ) {

		double nMaleExpBreakpoints = ((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->HowManyBreakpointsOnArm(true, nChr, 1) + 
										((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->HowManyBreakpointsOnArm(true, nChr, 2);
		double nFemaleExpBreakpoints = ((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->HowManyBreakpointsOnArm(false, nChr, 1) + 
										((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->HowManyBreakpointsOnArm(false, nChr, 2);
		double nAvgExpBreakpoints = (nMaleExpBreakpoints + nFemaleExpBreakpoints) / 2;

		double nChrLen = this->pChrLen[nChr];

		vector<double> * pvBreakpointSamplePositionsOnChr = &pvBreakpointSamplePositions[nChr];
		vector<double> * pvMaleMapDistancesOnChr = &pvMaleMapDistances[nChr];
		vector<double> * pvFemaleMapDistancesOnChr = &pvFemaleMapDistances[nChr];
		vector<double> * pvAvgMapDistancesOnChr = &pvAvgMapDistances[nChr];

		map<double, int> * pmMarkerIndexOnChr = &(vMarkerIndex.at(nChr));
		map<double, double> mAbsToMapDistanceOnChrMale, mAbsToMapDistanceOnChrFemale, mAbsToMapDistanceOnChrAvg ;

		double nPosLastSample = 0;

		for (map<double,int>::iterator itMarker=pmMarkerIndexOnChr->begin(); itMarker!= pmMarkerIndexOnChr->end(); ++itMarker) 
		{

			double nPos = (*itMarker).first;
			double nAbsSampleDistance, nMapMaleSampleDistance, nMapFemaleSampleDistance, nMapAvgSampleDistance, nMapMaleDistance, nMapFemaleDistance, nMapAvgDistance;

			if (((SimulationConfigurations *)this->_pParentConfig)->pRecombProbConfig->IsUseUniform()) { //if user specified using uniform rate, then no need to extrapolate.
				nMapMaleDistance = (nPos / nChrLen ) * nMaleExpBreakpoints;
				nMapFemaleDistance = (nPos / nChrLen ) * nFemaleExpBreakpoints;
				nMapAvgDistance = (nPos / nChrLen ) * nAvgExpBreakpoints;
			}
			else {

				vector<double>::iterator itClosestFollowingBreakpoint = upper_bound(pvBreakpointSamplePositionsOnChr->begin(), pvBreakpointSamplePositionsOnChr->end(), nPos);
				if (itClosestFollowingBreakpoint ==pvBreakpointSamplePositionsOnChr->end() ) {
					int nIndexLastSample = pvBreakpointSamplePositionsOnChr->size()-1;
					int nIndexSecondToLastSample = nIndexLastSample - 1;
					double nPosLastSample = pvBreakpointSamplePositionsOnChr->at(nIndexLastSample);//Last breakpoint sample
					double nPosSecondToLastSample = pvBreakpointSamplePositionsOnChr->at(nIndexSecondToLastSample);
					nAbsSampleDistance = (nPosLastSample - nPosSecondToLastSample);
					nMapMaleSampleDistance = pvMaleMapDistancesOnChr->at(nIndexLastSample);// - pvMaleMapDistancesOnChr->at(nIndexSecondToLastSample);
					nMapFemaleSampleDistance = pvFemaleMapDistancesOnChr->at(nIndexLastSample);// - pvFemaleMapDistancesOnChr->at(nIndexSecondToLastSample);
					nMapAvgSampleDistance = pvAvgMapDistancesOnChr->at(nIndexLastSample);// - pvAvgMapDistancesOnChr->at(nIndexSecondToLastSample);

					//extrapolate
					double nAbsDistanceMarkerToPrevMarker = nPos - nPosLastSample;
					double nPercentFromPrevSample = ( nAbsDistanceMarkerToPrevMarker / nAbsSampleDistance);
					nMapMaleDistance = nMapMaleSampleDistance  * nPercentFromPrevSample;
					nMapFemaleDistance = nMapFemaleSampleDistance * nPercentFromPrevSample;
					nMapAvgDistance = nMapAvgSampleDistance * nPercentFromPrevSample;
				}
				else {
					if (itClosestFollowingBreakpoint != pvBreakpointSamplePositionsOnChr->begin())
					{
						vector<double>::iterator itClosestPrevBreakpoint = itClosestFollowingBreakpoint - 1;
						size_t nIndexClosestFollowingBreakpoint = distance(pvBreakpointSamplePositionsOnChr->begin(),itClosestFollowingBreakpoint );
						size_t nIndexClosestPrevBreakpoint = nIndexClosestFollowingBreakpoint - 1;

						nAbsSampleDistance = ( *itClosestFollowingBreakpoint - *itClosestPrevBreakpoint);
						nMapMaleSampleDistance = pvMaleMapDistancesOnChr->at(nIndexClosestFollowingBreakpoint);// - pvMaleMapDistancesOnChr->at(nIndexClosestPrevBreakpoint);
						nMapFemaleSampleDistance = pvFemaleMapDistancesOnChr->at(nIndexClosestFollowingBreakpoint);// - pvFemaleMapDistancesOnChr->at(nIndexClosestPrevBreakpoint);
						nMapAvgSampleDistance = pvAvgMapDistancesOnChr->at(nIndexClosestFollowingBreakpoint);// - pvAvgMapDistancesOnChr->at(nIndexClosestPrevBreakpoint);


					}
					else {
						nAbsSampleDistance = *itClosestFollowingBreakpoint;
						nMapMaleSampleDistance = pvMaleMapDistancesOnChr->at(0);
						nMapFemaleSampleDistance = pvFemaleMapDistancesOnChr->at(0);
						nMapAvgSampleDistance = pvAvgMapDistancesOnChr->at(0);

					}



					//extrapolate
					double nAbsDistanceMarkerToPrevMarker = nPos - nPosLastSample;;
					double nPercentFromPrevSample = (nAbsDistanceMarkerToPrevMarker  / nAbsSampleDistance);

					nMapMaleDistance = nMapMaleSampleDistance * nPercentFromPrevSample;
					nMapFemaleDistance = nMapFemaleSampleDistance * nPercentFromPrevSample;
					nMapAvgDistance = nMapAvgSampleDistance * nPercentFromPrevSample;
				}

				nPosLastSample = nPos;
				/*
				if (nMapMaleDistance == 0.0) {
					printf("f");
				}
				*/
			}
			mAbsToMapDistanceOnChrMale.insert(pair<double, double>(nPos, nMapMaleDistance * 100));
			mAbsToMapDistanceOnChrFemale.insert(pair<double, double>(nPos, nMapFemaleDistance * 100 ));
			mAbsToMapDistanceOnChrAvg.insert(pair<double, double>(nPos, nMapAvgDistance * 100));
		}

		this->vAbsToMapDistanceAvg.push_back(mAbsToMapDistanceOnChrAvg);
		this->vAbsToMapDistanceMale.push_back(mAbsToMapDistanceOnChrMale);
		this->vAbsToMapDistanceFemale.push_back(mAbsToMapDistanceOnChrFemale);
	}
	//printf("hello");

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x330, %rsp            # imm = 0x330
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x278(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
movl $0x1, %esi
callq 0x1cc60
movq %rax, %rcx
movq -0x278(%rbp), %rax
movq %rcx, -0x10(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
xorl %esi, %esi
callq 0x1cc60
movq %rax, %rcx
movq -0x278(%rbp), %rax
movq %rcx, -0x18(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
movl $0x2, %esi
callq 0x1cc60
movq %rax, %rcx
movq -0x278(%rbp), %rax
movq %rcx, -0x20(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
callq 0x1cce0
movq -0x278(%rbp), %rdi
movq %rax, -0x28(%rbp)
addq $0x80, %rdi
callq 0x2a580
movq -0x278(%rbp), %rdi
addq $0x98, %rdi
callq 0x2a580
movq -0x278(%rbp), %rdi
addq $0xb0, %rdi
callq 0x2a580
movl $0x0, -0x2c(%rbp)
movq -0x278(%rbp), %rcx
movl -0x2c(%rbp), %eax
cmpl 0x8(%rcx), %eax
jge 0x1cc43
movq -0x278(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rdi
movl -0x2c(%rbp), %edx
movl $0x1, %ecx
movl %ecx, %esi
callq 0x1cd00
movq -0x278(%rbp), %rax
movsd %xmm0, -0x288(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
movl -0x2c(%rbp), %edx
movl $0x1, %esi
movl $0x2, %ecx
callq 0x1cd00
movq -0x278(%rbp), %rax
movaps %xmm0, %xmm1
movsd -0x288(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
movl -0x2c(%rbp), %edx
xorl %esi, %esi
movl $0x1, %ecx
callq 0x1cd00
movq -0x278(%rbp), %rax
movsd %xmm0, -0x280(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
movl -0x2c(%rbp), %edx
xorl %esi, %esi
movl $0x2, %ecx
callq 0x1cd00
movq -0x278(%rbp), %rdi
movaps %xmm0, %xmm1
movsd -0x280(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x38(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
movsd 0x5a2a1(%rip), %xmm1    # 0x766b0
divsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movq 0x30(%rdi), %rax
movslq -0x2c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x70(%rbp)
addq $0x68, %rdi
movslq -0x2c(%rbp), %rsi
callq 0x2a5a0
movq %rax, -0x78(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x2a230
leaq -0xd8(%rbp), %rdi
callq 0x2a230
leaq -0x108(%rbp), %rdi
callq 0x2a230
xorps %xmm0, %xmm0
movsd %xmm0, -0x110(%rbp)
movq -0x78(%rbp), %rdi
callq 0x2a5e0
movq %rax, -0x118(%rbp)
movq -0x78(%rbp), %rdi
callq 0x2a640
movq %rax, -0x120(%rbp)
leaq -0x118(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x2a610
testb $0x1, %al
jne 0x1c4f2
jmp 0x1cbc0
leaq -0x118(%rbp), %rdi
callq 0x2a670
movq %rax, %rcx
movq -0x278(%rbp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, -0x128(%rbp)
movq (%rax), %rax
movq 0x8(%rax), %rdi
callq 0x1cdc0
movb %al, -0x289(%rbp)
jmp 0x1c528
movb -0x289(%rbp), %al
testb $0x1, %al
jne 0x1c537
jmp 0x1c5c5
movsd -0x128(%rbp), %xmm0
divsd -0x50(%rbp), %xmm0
mulsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x128(%rbp), %xmm0
divsd -0x50(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x158(%rbp)
movsd -0x128(%rbp), %xmm0
divsd -0x50(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x160(%rbp)
jmp 0x1ca53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x2a9d0
leaq -0xd8(%rbp), %rdi
callq 0x2a9d0
leaq -0xa8(%rbp), %rdi
callq 0x2a9d0
jmp 0x1cc4c
movq -0x58(%rbp), %rdi
callq 0x2a6e0
movq %rax, -0x180(%rbp)
movq -0x58(%rbp), %rdi
callq 0x2a710
movq %rax, -0x188(%rbp)
movq -0x180(%rbp), %rdi
movq -0x188(%rbp), %rsi
leaq -0x128(%rbp), %rdx
callq 0x2a690
movq %rax, -0x298(%rbp)
jmp 0x1c608
movq -0x298(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x58(%rbp), %rdi
callq 0x2a710
movq %rax, -0x190(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x2a740
testb $0x1, %al
jne 0x1c642
jmp 0x1c7d6
movq -0x58(%rbp), %rdi
callq 0x2a780
decl %eax
movl %eax, -0x194(%rbp)
movl -0x194(%rbp), %eax
decl %eax
movl %eax, -0x198(%rbp)
movq -0x58(%rbp), %rdi
movslq -0x194(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2a0(%rbp)
jmp 0x1c67a
movq -0x2a0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x1a0(%rbp)
movq -0x58(%rbp), %rdi
movslq -0x198(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2a8(%rbp)
jmp 0x1c6a6
movq -0x2a8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x1a8(%rbp)
movsd -0x1a0(%rbp), %xmm0
movsd -0x1a8(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x130(%rbp)
movq -0x60(%rbp), %rdi
movslq -0x194(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2b0(%rbp)
jmp 0x1c6ee
movq -0x2b0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x138(%rbp)
movq -0x68(%rbp), %rdi
movslq -0x194(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2b8(%rbp)
jmp 0x1c71a
movq -0x2b8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x140(%rbp)
movq -0x70(%rbp), %rdi
movslq -0x194(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2c0(%rbp)
jmp 0x1c746
movq -0x2c0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x148(%rbp)
movsd -0x128(%rbp), %xmm0
subsd -0x1a0(%rbp), %xmm0
movsd %xmm0, -0x1b0(%rbp)
movsd -0x1b0(%rbp), %xmm0
divsd -0x130(%rbp), %xmm0
movsd %xmm0, -0x1b8(%rbp)
movsd -0x138(%rbp), %xmm0
mulsd -0x1b8(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x140(%rbp), %xmm0
mulsd -0x1b8(%rbp), %xmm0
movsd %xmm0, -0x158(%rbp)
movsd -0x148(%rbp), %xmm0
mulsd -0x1b8(%rbp), %xmm0
movsd %xmm0, -0x160(%rbp)
jmp 0x1ca43
movq -0x58(%rbp), %rdi
callq 0x2a6e0
movq %rax, -0x1c0(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x2a7e0
testb $0x1, %al
jne 0x1c802
jmp 0x1c938
leaq -0x178(%rbp), %rdi
movl $0x1, %esi
callq 0x2a820
movq %rax, -0x1c8(%rbp)
movq -0x58(%rbp), %rdi
callq 0x2a6e0
movq %rax, -0x1d8(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movq -0x1d8(%rbp), %rdi
movq -0x1e0(%rbp), %rsi
callq 0x2a860
movq %rax, -0x2c8(%rbp)
jmp 0x1c854
movq -0x2c8(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x1d0(%rbp), %rax
decq %rax
movq %rax, -0x1e8(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x2a8a0
movsd (%rax), %xmm0
movsd %xmm0, -0x2d8(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x2a8a0
movsd -0x2d8(%rbp), %xmm0
movsd (%rax), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x130(%rbp)
movq -0x60(%rbp), %rdi
movq -0x1d0(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2d0(%rbp)
jmp 0x1c8c8
movq -0x2d0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x138(%rbp)
movq -0x68(%rbp), %rdi
movq -0x1d0(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2e0(%rbp)
jmp 0x1c8f4
movq -0x2e0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x140(%rbp)
movq -0x70(%rbp), %rdi
movq -0x1d0(%rbp), %rsi
callq 0x2a7a0
movq %rax, -0x2e8(%rbp)
jmp 0x1c920
movq -0x2e8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x148(%rbp)
jmp 0x1c9cb
leaq -0x178(%rbp), %rdi
callq 0x2a8a0
movsd (%rax), %xmm0
movsd %xmm0, -0x130(%rbp)
movq -0x60(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a7a0
movq %rax, -0x2f0(%rbp)
jmp 0x1c966
movq -0x2f0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x138(%rbp)
movq -0x68(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a7a0
movq %rax, -0x2f8(%rbp)
jmp 0x1c98f
movq -0x2f8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x140(%rbp)
movq -0x70(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a7a0
movq %rax, -0x300(%rbp)
jmp 0x1c9b8
movq -0x300(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x148(%rbp)
movsd -0x128(%rbp), %xmm0
subsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x1f0(%rbp)
movsd -0x1f0(%rbp), %xmm0
divsd -0x130(%rbp), %xmm0
movsd %xmm0, -0x1f8(%rbp)
movsd -0x138(%rbp), %xmm0
mulsd -0x1f8(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x140(%rbp), %xmm0
mulsd -0x1f8(%rbp), %xmm0
movsd %xmm0, -0x158(%rbp)
movsd -0x148(%rbp), %xmm0
mulsd -0x1f8(%rbp), %xmm0
movsd %xmm0, -0x160(%rbp)
movsd -0x128(%rbp), %xmm0
movsd %xmm0, -0x110(%rbp)
movsd -0x150(%rbp), %xmm0
movsd 0x59cad(%rip), %xmm1    # 0x76710
mulsd %xmm1, %xmm0
movsd %xmm0, -0x210(%rbp)
leaq -0x208(%rbp), %rdi
leaq -0x128(%rbp), %rsi
leaq -0x210(%rbp), %rdx
callq 0x2a900
jmp 0x1ca8b
leaq -0xa8(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x2a8c0
movb %dl, -0x309(%rbp)
movq %rax, -0x308(%rbp)
jmp 0x1caad
movb -0x309(%rbp), %al
movq -0x308(%rbp), %rcx
movq %rcx, -0x220(%rbp)
movb %al, -0x218(%rbp)
movsd -0x158(%rbp), %xmm0
movsd 0x59c39(%rip), %xmm1    # 0x76710
mulsd %xmm1, %xmm0
movsd %xmm0, -0x238(%rbp)
leaq -0x230(%rbp), %rdi
leaq -0x128(%rbp), %rsi
leaq -0x238(%rbp), %rdx
callq 0x2a900
jmp 0x1caff
leaq -0xd8(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x2a8c0
movb %dl, -0x319(%rbp)
movq %rax, -0x318(%rbp)
jmp 0x1cb21
movb -0x319(%rbp), %al
movq -0x318(%rbp), %rcx
movq %rcx, -0x248(%rbp)
movb %al, -0x240(%rbp)
movsd -0x160(%rbp), %xmm0
movsd 0x59bc5(%rip), %xmm1    # 0x76710
mulsd %xmm1, %xmm0
movsd %xmm0, -0x260(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x128(%rbp), %rsi
leaq -0x260(%rbp), %rdx
callq 0x2a900
jmp 0x1cb73
leaq -0x108(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x2a8c0
movb %dl, -0x329(%rbp)
movq %rax, -0x328(%rbp)
jmp 0x1cb95
movb -0x329(%rbp), %al
movq -0x328(%rbp), %rcx
movq %rcx, -0x270(%rbp)
movb %al, -0x268(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x2a930
jmp 0x1c4c6
movq -0x278(%rbp), %rdi
addq $0xb0, %rdi
leaq -0x108(%rbp), %rsi
callq 0x2a960
jmp 0x1cbdc
movq -0x278(%rbp), %rdi
subq $-0x80, %rdi
leaq -0xa8(%rbp), %rsi
callq 0x2a960
jmp 0x1cbf5
movq -0x278(%rbp), %rdi
addq $0x98, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2a960
jmp 0x1cc11
leaq -0x108(%rbp), %rdi
callq 0x2a9d0
leaq -0xd8(%rbp), %rdi
callq 0x2a9d0
leaq -0xa8(%rbp), %rdi
callq 0x2a9d0
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x1c334
addq $0x330, %rsp            # imm = 0x330
popq %rbp
retq
movq -0x168(%rbp), %rdi
callq 0x8860
nopl (%rax,%rax)