// File: AraKhachatryan[P]GraphAlgo/biconnectivity.cpp
// Function: GraphAlgo::biconnectivity::biDFS(int const&)
void biconnectivity::
biDFS( const vertex& v )
{
	++time;
	int children = 0;
	
	m_discovery_time[v] = time ;
	m_back[v] = m_discovery_time[v] ;
	
	vertices::const_iterator it = m_neighborhood[v].begin();
	for ( ; it != m_neighborhood[v].end(); ++it )
	{
		if ( m_discovery_time[*it] == 0 )
		{
			++children;
			m_edge_stack.push( edge(v, *it) );
			m_parent[*it] = v ;
			biDFS(*it);
			if ( m_back[*it] >= m_discovery_time[v] )
			{
				new_bicomponent(v, *it);
				if ( m_parent[v] != -1 ) {
					m_cutvertices.insert(v);
				}
			} else {
				m_back[v] = std::min(m_back[v], m_back[*it]) ;
			}
		} else if ( (m_discovery_time[*it] < m_discovery_time[v]) && (*it != m_parent[v]) ) {
			// (v, *it) is back edge
			m_edge_stack.push( edge(v, *it) );
			m_back[v] =  std::min(m_back[v], m_discovery_time[*it]);
		}
	}	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x58(%rbp)
movl (%rdi), %eax
addl $0x1, %eax
movl %eax, (%rdi)
movl $0x0, -0x14(%rbp)
movl (%rdi), %eax
movl %eax, -0x60(%rbp)
addq $0x88, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movl -0x60(%rbp), %ecx
movq -0x58(%rbp), %rdi
movl %ecx, (%rax)
addq $0x88, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movq -0x58(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x5c(%rbp)
addq $0xb8, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movl -0x5c(%rbp), %ecx
movq -0x58(%rbp), %rdi
movl %ecx, (%rax)
addq $0x1a8, %rdi            # imm = 0x1A8
movq -0x10(%rbp), %rsi
callq 0x5f70
movq %rax, %rdi
callq 0x6050
movq %rax, -0x28(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x6080
movq -0x58(%rbp), %rdi
addq $0x1a8, %rdi            # imm = 0x1A8
movq -0x10(%rbp), %rsi
callq 0x5f70
movq %rax, %rdi
callq 0x6100
movq %rax, -0x30(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x60c0
testb $0x1, %al
jne 0x5468
jmp 0x57a7
movq -0x58(%rbp), %rax
addq $0x88, %rax
movq %rax, -0x68(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x5e90
cmpl $0x0, (%rax)
jne 0x564c
movq -0x58(%rbp), %rax
movl -0x14(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x14(%rbp)
addq $0x8, %rax
movq %rax, -0x90(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x98(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0x98(%rbp), %rsi
movq %rax, %rdx
leaq -0x38(%rbp), %rdi
callq 0x6180
movq -0x90(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x6150
movq -0x58(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
movl %ecx, -0x7c(%rbp)
addq $0x58, %rax
movq %rax, -0x88(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0x88(%rbp), %rdi
movq %rax, %rsi
callq 0x5e90
movl -0x7c(%rbp), %ecx
movl %ecx, (%rax)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0x58(%rbp), %rdi
movq %rax, %rsi
callq 0x5390
movq -0x58(%rbp), %rax
addq $0xb8, %rax
movq %rax, -0x78(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0x78(%rbp), %rdi
movq %rax, %rsi
callq 0x5e90
movq -0x58(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x6c(%rbp)
addq $0x88, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movq %rax, %rcx
movl -0x6c(%rbp), %eax
cmpl (%rcx), %eax
jl 0x55cd
movq -0x10(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0xa0(%rbp), %rsi
movq -0x58(%rbp), %rdi
movq %rax, %rdx
callq 0x5250
movq -0x58(%rbp), %rdi
addq $0x58, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
cmpl $-0x1, (%rax)
je 0x55cb
movq -0x58(%rbp), %rdi
addq $0x178, %rdi            # imm = 0x178
movq -0x10(%rbp), %rsi
callq 0x61b0
movq %rax, -0x48(%rbp)
movb %dl, -0x40(%rbp)
jmp 0x5647
movq -0x58(%rbp), %rdi
addq $0xb8, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movq %rax, %rcx
movq -0x58(%rbp), %rax
movq %rcx, -0xb0(%rbp)
addq $0xb8, %rax
movq %rax, -0xb8(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0xb8(%rbp), %rdi
movq %rax, %rsi
callq 0x5e90
movq -0xb0(%rbp), %rdi
movq %rax, %rsi
callq 0x6200
movq -0x58(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0xa4(%rbp)
addq $0xb8, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movl -0xa4(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x5797
movq -0x58(%rbp), %rax
addq $0x88, %rax
movq %rax, -0xc8(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0xc8(%rbp), %rdi
movq %rax, %rsi
callq 0x5e90
movq -0x58(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0xbc(%rbp)
addq $0x88, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movq %rax, %rcx
movl -0xbc(%rbp), %eax
cmpl (%rcx), %eax
jge 0x5795
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0x58(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0xcc(%rbp)
addq $0x58, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movq %rax, %rcx
movl -0xcc(%rbp), %eax
cmpl (%rcx), %eax
je 0x5795
movq -0x58(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xe8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0xf0(%rbp), %rsi
movq %rax, %rdx
leaq -0x50(%rbp), %rdi
callq 0x6180
movq -0xe8(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x6150
movq -0x58(%rbp), %rdi
addq $0xb8, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movq %rax, %rcx
movq -0x58(%rbp), %rax
movq %rcx, -0xd8(%rbp)
addq $0x88, %rax
movq %rax, -0xe0(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x6130
movq -0xe0(%rbp), %rdi
movq %rax, %rsi
callq 0x5e90
movq -0xd8(%rbp), %rdi
movq %rax, %rsi
callq 0x6200
movq -0x58(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0xd0(%rbp)
addq $0xb8, %rdi
movq -0x10(%rbp), %rsi
callq 0x5e90
movl -0xd0(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x5797
jmp 0x5799
leaq -0x20(%rbp), %rdi
callq 0x6240
jmp 0x5432
addq $0xf0, %rsp
popq %rbp
retq