// File: theuni[P]libbtcnet/src/handler.cpp
// Function: CConnectionHandlerInt::OnDisconnected(long, bool)
void CConnectionHandlerInt::OnDisconnected(ConnID id, bool reconnect)
{
    assert(IsEventThread());
    std::unique_ptr<ConnectionBase> moved;
    reconnect = reconnect && !m_shutdown;
    {
        optional_lock(m_conn_mutex, m_enable_threading);
        auto it = m_connected.find(id);
        assert(it != m_connected.end());
        moved.swap(it->second);
        m_connected.erase(it);
    }

    bool outgoing = moved->IsOutgoing();
    if (outgoing)
        m_outgoing_conn_count--;
    else
        m_incoming_conn_count--;

    bool ret = m_interface.OnDisconnected(id, reconnect);
    if (reconnect && ret) {
        ConnID newId = GetNextConnectionIndex();
        auto it = m_connecting.emplace_hint(m_connecting.end(), newId, std::move(moved));
        it->second->Retry(newId);
    } else if (m_request_event)
        m_request_event.active();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movb %dl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x90(%rbp)
callq 0xe790
testb $0x1, %al
jne 0xeb10
jmp 0xeb12
jmp 0xeb31
leaq 0x16d84(%rip), %rdi     # 0x2589d
leaq 0x16c6f(%rip), %rsi     # 0x2578f
movl $0xd3, %edx
leaq 0x16f7e(%rip), %rcx     # 0x25aaa
callq 0x52e0
leaq -0x20(%rbp), %rdi
callq 0x117d0
xorl %eax, %eax
testb $0x1, -0x11(%rbp)
movb %al, -0x91(%rbp)
je 0xeb5d
movq -0x90(%rbp), %rax
movb 0xed(%rax), %al
xorb $-0x1, %al
movb %al, -0x91(%rbp)
movq -0x90(%rbp), %rax
movb -0x91(%rbp), %cl
andb $0x1, %cl
movb %cl, -0x11(%rbp)
movq %rax, %rsi
addq $0xf0, %rsi
movzbl 0xec(%rax), %edx
andl $0x1, %edx
leaq -0x30(%rbp), %rdi
callq 0x11290
jmp 0xeb8f
movq -0x90(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x11800
movq %rax, -0xa0(%rbp)
jmp 0xeba8
movq -0x90(%rbp), %rdi
movq -0xa0(%rbp), %rax
movq %rax, -0x48(%rbp)
callq 0x113e0
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x113b0
testb $0x1, %al
jne 0xebd6
jmp 0xebd8
jmp 0xec22
leaq 0x16f04(%rip), %rdi     # 0x25ae3
leaq 0x16ba9(%rip), %rsi     # 0x2578f
movl $0xd9, %edx
leaq 0x16eb8(%rip), %rcx     # 0x25aaa
callq 0x52e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xee06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x11310
jmp 0xee06
leaq -0x48(%rbp), %rdi
callq 0x11410
movq %rax, %rsi
addq $0x8, %rsi
leaq -0x20(%rbp), %rdi
callq 0x11830
movq -0x90(%rbp), %rdi
movq -0x48(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rsi
callq 0x11450
movq %rax, -0xa8(%rbp)
jmp 0xec5c
movq -0xa8(%rbp), %rax
movq %rax, -0x60(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x11310
leaq -0x20(%rbp), %rdi
callq 0x11430
movq %rax, %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movb %al, -0xa9(%rbp)
jmp 0xec8d
movb -0xa9(%rbp), %al
andb $0x1, %al
movb %al, -0x61(%rbp)
testb $0x1, -0x61(%rbp)
je 0xecb6
movq -0x90(%rbp), %rax
movl 0xe0(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xe0(%rax)
jmp 0xeccc
movq -0x90(%rbp), %rax
movl 0xe4(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xe4(%rax)
movq -0x90(%rbp), %rax
movq 0xc0(%rax), %rdi
movq -0x10(%rbp), %rsi
movq (%rdi), %rax
movq 0x50(%rax), %rax
movzbl -0x11(%rbp), %edx
andl $0x1, %edx
callq *%rax
movb %al, -0xaa(%rbp)
jmp 0xecf6
movb -0xaa(%rbp), %al
andb $0x1, %al
movb %al, -0x62(%rbp)
testb $0x1, -0x11(%rbp)
je 0xedb4
testb $0x1, -0x62(%rbp)
je 0xedb4
movq -0x90(%rbp), %rdi
callq 0xee20
movq %rax, -0xb8(%rbp)
jmp 0xed2a
movq -0x90(%rbp), %rdi
movq -0xb8(%rbp), %rax
movq %rax, -0x70(%rbp)
addq $0x30, %rdi
movq %rdi, -0xc8(%rbp)
callq 0x113e0
movq %rax, -0x88(%rbp)
leaq -0x80(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x118b0
movq -0xc8(%rbp), %rdi
movq -0x80(%rbp), %rsi
leaq -0x70(%rbp), %rdx
leaq -0x20(%rbp), %rcx
callq 0x11860
movq %rax, -0xc0(%rbp)
jmp 0xed84
movq -0xc0(%rbp), %rax
movq %rax, -0x78(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x11410
movq %rax, %rdi
addq $0x8, %rdi
callq 0x11430
movq %rax, %rdi
movq -0x70(%rbp), %rsi
callq 0x1b000
jmp 0xedb2
jmp 0xedf4
movq -0x90(%rbp), %rdi
addq $0x1a0, %rdi            # imm = 0x1A0
callq 0x239f0
movb %al, -0xc9(%rbp)
jmp 0xedcf
movb -0xc9(%rbp), %al
testb $0x1, %al
jne 0xeddb
jmp 0xedf2
movq -0x90(%rbp), %rdi
addq $0x1a0, %rdi            # imm = 0x1A0
callq 0x23ac0
jmp 0xedf0
jmp 0xedf2
jmp 0xedf4
leaq -0x20(%rbp), %rdi
callq 0x118d0
addq $0xd0, %rsp
popq %rbp
retq
leaq -0x20(%rbp), %rdi
callq 0x118d0
movq -0x38(%rbp), %rdi
callq 0x5710
nopl (%rax,%rax)