// File: cjlin1[P]liblinear/linear.cpp
// Function: train
model* train(const problem *prob, const parameter *param)
{
	int i,j;
	int l = prob->l;
	int n = prob->n;
	int w_size = prob->n;
	model *model_ = Malloc(model,1);

	if(prob->bias>=0)
		model_->nr_feature=n-1;
	else
		model_->nr_feature=n;
	model_->param = *param;
	model_->bias = prob->bias;

	if(check_regression_model(model_))
	{
		model_->w = Malloc(double, w_size);

		if(param->init_sol != NULL)
			for(i=0;i<w_size;i++)
				model_->w[i] = param->init_sol[i];
		else
			for(i=0;i<w_size;i++)
				model_->w[i] = 0;

		model_->nr_class = 2;
		model_->label = NULL;
		train_one(prob, param, model_->w, 0, 0);
	}
	else if(check_oneclass_model(model_))
	{
		model_->w = Malloc(double, w_size);
		model_->nr_class = 2;
		model_->label = NULL;
		solve_oneclass_svm(prob, param, model_->w, &(model_->rho));
	}
	else
	{
		int nr_class;
		int *label = NULL;
		int *start = NULL;
		int *count = NULL;
		int *perm = Malloc(int,l);

		// group training data of the same class
		group_classes(prob,&nr_class,&label,&start,&count,perm);

		model_->nr_class=nr_class;
		model_->label = Malloc(int,nr_class);
		for(i=0;i<nr_class;i++)
			model_->label[i] = label[i];

		// calculate weighted C
		double *weighted_C = Malloc(double, nr_class);
		for(i=0;i<nr_class;i++)
			weighted_C[i] = param->C;
		for(i=0;i<param->nr_weight;i++)
		{
			for(j=0;j<nr_class;j++)
				if(param->weight_label[i] == label[j])
					break;
			if(j == nr_class)
				fprintf(stderr,"WARNING: class label %d specified in weight is not found\n", param->weight_label[i]);
			else
				weighted_C[j] *= param->weight[i];
		}

		// constructing the subproblem
		feature_node **x = Malloc(feature_node *,l);
		for(i=0;i<l;i++)
			x[i] = prob->x[perm[i]];

		int k;
		problem sub_prob;
		sub_prob.l = l;
		sub_prob.n = n;
		sub_prob.x = Malloc(feature_node *,sub_prob.l);
		sub_prob.y = Malloc(double,sub_prob.l);

		for(k=0; k<sub_prob.l; k++)
			sub_prob.x[k] = x[k];

		// multi-class svm by Crammer and Singer
		if(param->solver_type == MCSVM_CS)
		{
			model_->w=Malloc(double, n*nr_class);
			for(i=0;i<nr_class;i++)
				for(j=start[i];j<start[i]+count[i];j++)
					sub_prob.y[j] = i;
			Solver_MCSVM_CS Solver(&sub_prob, nr_class, weighted_C, param->eps);
			Solver.Solve(model_->w);
		}
		else
		{
			if(nr_class == 2)
			{
				model_->w=Malloc(double, w_size);

				int e0 = start[0]+count[0];
				k=0;
				for(; k<e0; k++)
					sub_prob.y[k] = +1;
				for(; k<sub_prob.l; k++)
					sub_prob.y[k] = -1;

				if(param->init_sol != NULL)
					for(i=0;i<w_size;i++)
						model_->w[i] = param->init_sol[i];
				else
					for(i=0;i<w_size;i++)
						model_->w[i] = 0;

				train_one(&sub_prob, param, model_->w, weighted_C[0], weighted_C[1]);
			}
			else
			{
				model_->w=Malloc(double, w_size*nr_class);
				double *w=Malloc(double, w_size);
				for(i=0;i<nr_class;i++)
				{
					int si = start[i];
					int ei = si+count[i];

					k=0;
					for(; k<si; k++)
						sub_prob.y[k] = -1;
					for(; k<ei; k++)
						sub_prob.y[k] = +1;
					for(; k<sub_prob.l; k++)
						sub_prob.y[k] = -1;

					if(param->init_sol != NULL)
						for(j=0;j<w_size;j++)
							w[j] = param->init_sol[j*nr_class+i];
					else
						for(j=0;j<w_size;j++)
							w[j] = 0;

					train_one(&sub_prob, param, w, weighted_C[i], param->C);

					for(j=0;j<w_size;j++)
						model_->w[j*nr_class+i] = w[j];
				}
				free(w);
			}

		}

		free(x);
		free(label);
		free(start);
		free(count);
		free(perm);
		free(sub_prob.x);
		free(sub_prob.y);
		free(weighted_C);
	}
	return model_;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x24(%rbp)
movl $0x78, %edi
callq 0x21c0
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movsd 0x18(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x725f
movl -0x20(%rbp), %ecx
subl $0x1, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x54(%rax)
jmp 0x7269
movl -0x20(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x54(%rax)
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdi
movl $0x50, %edx
callq 0x20f0
movq -0x8(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, 0x68(%rax)
movq -0x30(%rbp), %rdi
callq 0x7ae0
cmpl $0x0, %eax
je 0x7367
movslq -0x24(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0x7300
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x72fe
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movslq -0x14(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rax
movslq -0x14(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x72c9
jmp 0x7330
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x732e
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rax
movslq -0x14(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x7307
jmp 0x7330
movq -0x30(%rbp), %rax
movl $0x2, 0x50(%rax)
movq -0x30(%rbp), %rax
movq $0x0, 0x60(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rdx
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x7b20
jmp 0x7ac3
movq -0x30(%rbp), %rdi
callq 0x84b0
cmpl $0x0, %eax
je 0x73c6
movslq -0x24(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x30(%rbp), %rax
movl $0x2, 0x50(%rax)
movq -0x30(%rbp), %rax
movq $0x0, 0x60(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rdx
movq -0x30(%rbp), %rcx
addq $0x70, %rcx
callq 0x84d0
jmp 0x7ac1
movq $0x0, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movslq -0x1c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x21c0
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rdi
movq -0x58(%rbp), %r9
leaq -0x34(%rbp), %rsi
leaq -0x40(%rbp), %rdx
leaq -0x48(%rbp), %rcx
leaq -0x50(%rbp), %r8
callq 0x9500
movl -0x34(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x50(%rax)
movslq -0x34(%rbp), %rdi
shlq $0x2, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x60(%rax)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x7462
movq -0x40(%rbp), %rax
movslq -0x14(%rbp), %rcx
movl (%rax,%rcx,4), %edx
movq -0x30(%rbp), %rax
movq 0x60(%rax), %rax
movslq -0x14(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x7435
movslq -0x34(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, -0x60(%rbp)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x74a3
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm0
movq -0x60(%rbp), %rax
movslq -0x14(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x747a
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl 0x18(%rcx), %eax
jge 0x7558
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x74f4
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x14(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x40(%rbp), %rcx
movslq -0x18(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
jne 0x74e7
jmp 0x74f4
jmp 0x74e9
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x74c1
movl -0x18(%rbp), %eax
cmpl -0x34(%rbp), %eax
jne 0x7525
movq 0xeadd(%rip), %rax      # 0x15fe0
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x14(%rbp), %rcx
movl (%rax,%rcx,4), %edx
leaq 0xba42(%rip), %rsi      # 0x12f5e
movb $0x0, %al
callq 0x21f0
jmp 0x7548
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movslq -0x14(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x60(%rbp), %rax
movslq -0x18(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
jmp 0x754a
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x74aa
movslq -0x1c(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, -0x68(%rbp)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x75a7
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x58(%rbp), %rcx
movslq -0x14(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x68(%rbp), %rax
movslq -0x14(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x7570
movl -0x1c(%rbp), %eax
movl %eax, -0x90(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x8c(%rbp)
movslq -0x90(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, -0x80(%rbp)
movslq -0x90(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, -0x88(%rbp)
movl $0x0, -0x6c(%rbp)
movl -0x6c(%rbp), %eax
cmpl -0x90(%rbp), %eax
jge 0x7619
movq -0x68(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x80(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x75eb
movq -0x10(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x7725
movl -0x20(%rbp), %eax
imull -0x34(%rbp), %eax
movslq %eax, %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x58(%rax)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x76ab
movq -0x48(%rbp), %rax
movslq -0x14(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
movq -0x48(%rbp), %rcx
movslq -0x14(%rbp), %rdx
movl (%rcx,%rdx,4), %ecx
movq -0x50(%rbp), %rdx
movslq -0x14(%rbp), %rsi
addl (%rdx,%rsi,4), %ecx
cmpl %ecx, %eax
jge 0x769e
cvtsi2sdl -0x14(%rbp), %xmm0
movq -0x88(%rbp), %rax
movslq -0x18(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x7661
jmp 0x76a0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x764b
movl -0x34(%rbp), %edx
movq -0x60(%rbp), %rcx
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
leaq -0xc8(%rbp), %rdi
movq %rdi, -0xf0(%rbp)
leaq -0x90(%rbp), %rsi
movl $0x186a0, %r8d          # imm = 0x186A0
callq 0x5b80
movq -0xf0(%rbp), %rdi
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rsi
callq 0x6010
jmp 0x76f1
leaq -0xc8(%rbp), %rdi
callq 0x5c50
jmp 0x7a76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x5c50
jmp 0x7ad0
cmpl $0x2, -0x34(%rbp)
jne 0x7865
movslq -0x24(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x48(%rbp), %rax
movl (%rax), %eax
movq -0x50(%rbp), %rcx
addl (%rcx), %eax
movl %eax, -0xd8(%rbp)
movl $0x0, -0x6c(%rbp)
movl -0x6c(%rbp), %eax
cmpl -0xd8(%rbp), %eax
jge 0x778e
movq -0x88(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movsd 0xa8aa(%rip), %xmm0     # 0x12028
movsd %xmm0, (%rax,%rcx,8)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x7760
jmp 0x7790
movl -0x6c(%rbp), %eax
cmpl -0x90(%rbp), %eax
jge 0x77be
movq -0x88(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movsd 0xa85a(%rip), %xmm0     # 0x12008
movsd %xmm0, (%rax,%rcx,8)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x7790
movq -0x10(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0x7807
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x7805
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movslq -0x14(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rax
movslq -0x14(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x77d0
jmp 0x7837
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x7835
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rax
movslq -0x14(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x780e
jmp 0x7837
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rdx
movq -0x60(%rbp), %rax
movsd (%rax), %xmm0
movq -0x60(%rbp), %rax
movsd 0x8(%rax), %xmm1
leaq -0x90(%rbp), %rdi
callq 0x7b20
jmp 0x7a74
movl -0x24(%rbp), %eax
imull -0x34(%rbp), %eax
movslq %eax, %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x58(%rax)
movslq -0x24(%rbp), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, -0xe0(%rbp)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x7a68
movq -0x48(%rbp), %rax
movslq -0x14(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0xe4(%rbp)
movl -0xe4(%rbp), %eax
movq -0x50(%rbp), %rcx
movslq -0x14(%rbp), %rdx
addl (%rcx,%rdx,4), %eax
movl %eax, -0xe8(%rbp)
movl $0x0, -0x6c(%rbp)
movl -0x6c(%rbp), %eax
cmpl -0xe4(%rbp), %eax
jge 0x7907
movq -0x88(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movsd 0xa711(%rip), %xmm0     # 0x12008
movsd %xmm0, (%rax,%rcx,8)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x78d9
jmp 0x7909
movl -0x6c(%rbp), %eax
cmpl -0xe8(%rbp), %eax
jge 0x7937
movq -0x88(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movsd 0xa701(%rip), %xmm0     # 0x12028
movsd %xmm0, (%rax,%rcx,8)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x7909
jmp 0x7939
movl -0x6c(%rbp), %eax
cmpl -0x90(%rbp), %eax
jge 0x7967
movq -0x88(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movsd 0xa6b1(%rip), %xmm0     # 0x12008
movsd %xmm0, (%rax,%rcx,8)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x7939
movq -0x10(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0x79b8
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x79b6
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movl -0x18(%rbp), %ecx
imull -0x34(%rbp), %ecx
addl -0x14(%rbp), %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0xe0(%rbp), %rax
movslq -0x18(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x7979
jmp 0x79e7
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x79e5
movq -0xe0(%rbp), %rax
movslq -0x18(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x79bf
jmp 0x79e7
movq -0x10(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq -0x60(%rbp), %rax
movslq -0x14(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movsd 0x10(%rax), %xmm1
leaq -0x90(%rbp), %rdi
callq 0x7b20
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x7a58
movq -0xe0(%rbp), %rax
movslq -0x18(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movq 0x58(%rax), %rax
movl -0x18(%rbp), %ecx
imull -0x34(%rbp), %ecx
addl -0x14(%rbp), %ecx
movslq %ecx, %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x7a1b
jmp 0x7a5a
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x789e
movq -0xe0(%rbp), %rdi
callq 0x2180
jmp 0x7a76
movq -0x68(%rbp), %rdi
callq 0x2180
movq -0x40(%rbp), %rdi
callq 0x2180
movq -0x48(%rbp), %rdi
callq 0x2180
movq -0x50(%rbp), %rdi
callq 0x2180
movq -0x58(%rbp), %rdi
callq 0x2180
movq -0x80(%rbp), %rdi
callq 0x2180
movq -0x88(%rbp), %rdi
callq 0x2180
movq -0x60(%rbp), %rdi
callq 0x2180
jmp 0x7ac3
movq -0x30(%rbp), %rax
addq $0xf0, %rsp
popq %rbp
retq
movq -0xd0(%rbp), %rdi
callq 0x2260
nopl (%rax)