// File: /workspace/github_c_makefile_star2_O0/olcaytaner[P]Isell/svmsolve.c
// Function: nu_do_shrinking
void nu_do_shrinking(Solverptr s)
{
	/*Last Changed 29.04.2005*/
	double Gmax1 = -DBL_MAX, Gmax2 = -DBL_MAX, Gmax3 = -DBL_MAX, Gmax4 = -DBL_MAX, Gm1, Gm2, Gm3, Gm4;	
	int k;
	for (k = 0; k < s->active_size; k++)
	 {
	 	if (!is_upper_bound(s, k))
			 {
			  if (s->y[k] == +1)
				 	{
				   if (-s->G[k] > Gmax1) 
								 Gmax1 = -s->G[k];
					 }
			  else	
						 if (-s->G[k] > Gmax3) 
								 Gmax3 = -s->G[k];
			 }
		 if (!is_lower_bound(s, k))
			 {
		  	if (s->y[k] == +1)
					 {	
				   if (s->G[k] > Gmax2) 
								 Gmax2 = s->G[k];
					 }
			  else	
						 if (s->G[k] > Gmax4) 
								 Gmax4 = s->G[k];
			 }
	 }
 Gm1 = -Gmax2;
 Gm2 = -Gmax1;
	Gm3 = -Gmax4;
	Gm4 = -Gmax3;
	for (k = 0; k < s->active_size; k++)
	 {
		 if (is_lower_bound(s, k))
			 {
		  	if (s->y[k] == +1)
					 {
				   if (-s->G[k] >= Gm1) 
								 continue;
					 }
			  else	
						 if (-s->G[k] >= Gm3)  
								 continue;
			 }
		 else 
				 if (is_upper_bound(s, k))
					 {
			    if (s->y[k] == +1)
							 {
				     if (s->G[k] >= Gm2) 
										 continue;
							 }
			    else	
								 if (s->G[k] >= Gm4) 
										 continue;
					 }
		   else 
						 continue;
		 --s->active_size;
		 solver_swap_index(s, k, s->active_size);
		 --k;	
	 }
	if (s->unshrinked || fmax(-(Gm1+Gm2), -(Gm3+Gm4)) > s->eps * 10) 
		 return;
	s->unshrinked = 1;
	reconstruct_gradient(s);
	for (k = s->l - 1; k >= s->active_size; k--)
	 {
	 	if (is_lower_bound(s, k))
			 {
			  if (s->y[k] == +1)
					 {
				   if (-s->G[k] < Gm1) 
								 continue;
					 }
			  else	
						 if (-s->G[k] < Gm3) 
								 continue;
			 }
		 else 
				 if (is_upper_bound(s, k))
					 {
			    if (s->y[k] == +1)
							 {
				     if (s->G[k] < Gm2) 
										 continue;
							 }
			    else	
								 if (s->G[k] < Gm4) 
										 continue;
					 }
		   else 
						 continue;
		 solver_swap_index(s, k, s->active_size);
		 s->active_size++;
		 ++k;	
	 }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movsd 0x18f7c(%rip), %xmm0    # 0xe7570
movsd %xmm0, -0x10(%rbp)
movsd 0x18f6f(%rip), %xmm0    # 0xe7570
movsd %xmm0, -0x18(%rbp)
movsd 0x18f62(%rip), %xmm0    # 0xe7570
movsd %xmm0, -0x20(%rbp)
movsd 0x18f55(%rip), %xmm0    # 0xe7570
movsd %xmm0, -0x28(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xce7b6
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
callq 0xcdc10
cmpl $0x0, %eax
jne 0xce71e
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xce6be
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
ucomisd -0x10(%rbp), %xmm0
jbe 0xce6bc
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x10(%rbp)
jmp 0xce71c
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
ucomisd -0x20(%rbp), %xmm0
jbe 0xce71a
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x20(%rbp)
jmp 0xce71c
jmp 0xce71e
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
callq 0xcdc50
cmpl $0x0, %eax
jne 0xce7a6
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xce774
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd -0x18(%rbp), %xmm0
jbe 0xce772
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x18(%rbp)
jmp 0xce7a4
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd -0x28(%rbp), %xmm0
jbe 0xce7a2
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x28(%rbp)
jmp 0xce7a4
jmp 0xce7a6
jmp 0xce7a8
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0xce627
movsd -0x18(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x10(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x28(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x20(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x48(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xce980
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
callq 0xcdc50
cmpl $0x0, %eax
je 0xce8e8
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xce8b0
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
ucomisd -0x30(%rbp), %xmm0
jb 0xce8ae
jmp 0xce972
jmp 0xce8e6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
ucomisd -0x40(%rbp), %xmm0
jb 0xce8e4
jmp 0xce972
jmp 0xce8e6
jmp 0xce94c
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
callq 0xcdc10
cmpl $0x0, %eax
je 0xce948
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xce92a
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd -0x38(%rbp), %xmm0
jb 0xce928
jmp 0xce972
jmp 0xce946
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd -0x48(%rbp), %xmm0
jb 0xce944
jmp 0xce972
jmp 0xce946
jmp 0xce94a
jmp 0xce972
jmp 0xce94c
movq -0x8(%rbp), %rax
movl (%rax), %ecx
addl $-0x1, %ecx
movl %ecx, (%rax)
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
movq -0x8(%rbp), %rax
movl (%rax), %edx
callq 0xcdd70
movl -0x4c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0xce841
movq -0x8(%rbp), %rax
cmpl $0x0, 0x7c(%rax)
jne 0xcea01
movsd -0x30(%rbp), %xmm0
addsd -0x38(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm3
movsd -0x40(%rbp), %xmm0
addsd -0x48(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordsd %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxsd %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movq -0x8(%rbp), %rax
movsd 0x15f52(%rip), %xmm1    # 0xe4948
mulsd 0x48(%rax), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xcea06
jmp 0xceb76
movq -0x8(%rbp), %rax
movl $0x1, 0x7c(%rax)
movq -0x8(%rbp), %rdi
callq 0xcdf30
movq -0x8(%rbp), %rax
movl 0x78(%rax), %eax
subl $0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl (%rcx), %eax
jl 0xceb76
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
callq 0xcdc50
cmpl $0x0, %eax
je 0xcead6
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xcea9a
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd -0x30(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xcea98
jmp 0xceb68
jmp 0xcead4
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd -0x40(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xcead2
jmp 0xceb68
jmp 0xcead4
jmp 0xceb42
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
callq 0xcdc10
cmpl $0x0, %eax
je 0xceb3e
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xceb1c
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd -0x38(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xceb1a
jmp 0xceb68
jmp 0xceb3c
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd -0x48(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xceb3a
jmp 0xceb68
jmp 0xceb3c
jmp 0xceb40
jmp 0xceb68
jmp 0xceb42
movq -0x8(%rbp), %rdi
movl -0x4c(%rbp), %esi
movq -0x8(%rbp), %rax
movl (%rax), %edx
callq 0xcdd70
movq -0x8(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0xcea27
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)