// File: chhylp123[P]hifiasm/hic.cpp
// Function: print_hc_links(hc_links*, int, H_partition*)
void print_hc_links(hc_links* link, int dir, H_partition* hap)
{
    uint64_t i, k;
    if(dir == 0)
    {
        double f_w, r_w;
        for (i = 0; i < link->a.n; ++i) 
        { 
            f_w = r_w = 0;
            for (k = 0; k < link->a.a[i].e.n; k++)
            {
                if(link->a.a[i].e.a[k].del) continue;
                fprintf(stderr, "s-utg%.6dl(%c)\tCLU:%d:%u\td-utg%.6dl(%c)\tCLU:%d:%u\t%lu\t%c\t%f\te\n", 
                (int)(i+1), "01"[!!(link->a.a[i].e.a[k].dis&(uint64_t)2)],
                get_phase_status(hap, i), hap->hap[i]>>3, 
                (int)(link->a.a[i].e.a[k].uID+1), "01"[!!(link->a.a[i].e.a[k].dis&(uint64_t)1)],
                get_phase_status(hap, link->a.a[i].e.a[k].uID), hap->hap[link->a.a[i].e.a[k].uID]>>3, 
                link->a.a[i].e.a[k].dis == (uint64_t)-1? (uint64_t)-1 : link->a.a[i].e.a[k].dis>>3,
                "fb"[!!(link->a.a[i].e.a[k].dis&(uint64_t)4)], link->a.a[i].e.a[k].weight);  
                if(get_phase_status(hap, i) == get_phase_status(hap, link->a.a[i].e.a[k].uID))
                {
                    f_w += link->a.a[i].e.a[k].weight;
                }  
                else
                {
                    r_w += link->a.a[i].e.a[k].weight;
                }
            }

            // fprintf(stderr, "self-utg%.6dl\tFW:%f\tRW:%f\tRT:%f\n**************************************************\n", 
            // (int)(i+1), f_w, r_w, (f_w+r_w) != 0? r_w/(f_w+r_w):0);
        }
    }
    

    if(dir == 1)
    {
        for (i = 0; i < link->a.n; ++i) 
        { 
            for (k = 0; k < link->a.a[i].f.n; k++)
            {
                if(link->a.a[i].f.a[k].del) continue;
                fprintf(stderr, "s-utg%.6d\td-utg%.6d\t%lu\te\n", 
                (int)(i+1), (int)(link->a.a[i].f.a[k].uID+1), link->a.a[i].f.a[k].dis);    
            }
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xa0, %rsp
movq %rdi, -0x28(%rbp)
movl %esi, -0x2c(%rbp)
movq %rdx, -0x38(%rbp)
cmpl $0x0, -0x2c(%rbp)
jne 0x1d5f1f
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x1d5f1d
xorps %xmm0, %xmm0
movsd %xmm0, -0x58(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x50(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x30, -0x40(%rbp), %rdx
addq %rdx, %rcx
cmpq (%rcx), %rax
jae 0x1d5f0a
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movb 0x18(%rax), %al
shrb $0x7, %al
cmpb $0x0, %al
je 0x1d5c00
jmp 0x1d5ef9
movq 0x1ee3d9(%rip), %rax    # 0x3c3fe0
movq (%rax), %rax
movq %rax, -0x80(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movl %eax, -0x78(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
andq $0x2, %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, %ecx
leaq 0x1b6996(%rip), %rax    # 0x38c5ec
movsbl (%rax,%rcx), %eax
movl %eax, -0x74(%rbp)
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rax
movl %eax, %esi
callq 0x2145e0
movl %eax, -0x70(%rbp)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x40(%rbp), %rcx
movl (%rax,%rcx,4), %eax
shrl $0x3, %eax
movl %eax, -0x6c(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
addl $0x1, %eax
movl %eax, -0x68(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, %ecx
leaq 0x1b6906(%rip), %rax    # 0x38c5ec
movsbl (%rax,%rcx), %eax
movl %eax, -0x64(%rbp)
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %esi
callq 0x2145e0
movl %eax, -0x60(%rbp)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x30, -0x40(%rbp), %rdx
addq %rdx, %rcx
movq 0x10(%rcx), %rcx
imulq $0x28, -0x48(%rbp), %rdx
addq %rdx, %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,4), %eax
shrl $0x3, %eax
movl %eax, -0x5c(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
cmpq $-0x1, 0x10(%rax)
jne 0x1d5d7b
movq $-0x1, %rax
movq %rax, -0x88(%rbp)
jmp 0x1d5da6
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
shrq $0x3, %rax
movq %rax, -0x88(%rbp)
movl -0x5c(%rbp), %r11d
movl -0x60(%rbp), %ebx
movl -0x64(%rbp), %r14d
movl -0x68(%rbp), %r15d
movl -0x6c(%rbp), %r9d
movl -0x70(%rbp), %r8d
movl -0x74(%rbp), %ecx
movl -0x78(%rbp), %edx
movq -0x80(%rbp), %rdi
movq -0x88(%rbp), %r10
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rsi
addq %rsi, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rsi
addq %rsi, %rax
movq 0x10(%rax), %rax
andq $0x4, %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, %esi
leaq 0x1b67e4(%rip), %rax    # 0x38c5ef
movsbl (%rax,%rsi), %eax
movq -0x28(%rbp), %rsi
movq 0x10(%rsi), %rsi
imulq $0x30, -0x40(%rbp), %r12
addq %r12, %rsi
movq 0x10(%rsi), %rsi
imulq $0x28, -0x48(%rbp), %r12
addq %r12, %rsi
movsd (%rsi), %xmm0
leaq 0x1b6777(%rip), %rsi    # 0x38c5ad
movl %r15d, (%rsp)
movl %r14d, 0x8(%rsp)
movl %ebx, 0x10(%rsp)
movl %r11d, 0x18(%rsp)
movq %r10, 0x20(%rsp)
movl %eax, 0x28(%rsp)
movb $0x1, %al
callq 0x22a0
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rax
movl %eax, %esi
callq 0x2145e0
movl %eax, -0x8c(%rbp)
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %esi
callq 0x2145e0
movl %eax, %ecx
movl -0x8c(%rbp), %eax
cmpl %ecx, %eax
jne 0x1d5ecd
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
jmp 0x1d5ef7
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
jmp 0x1d5ef9
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x1d5bb8
jmp 0x1d5f0c
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x1d5b8f
jmp 0x1d5f1f
cmpl $0x1, -0x2c(%rbp)
jne 0x1d601a
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x1d6018
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x30, -0x40(%rbp), %rdx
addq %rdx, %rcx
cmpq 0x18(%rcx), %rax
jae 0x1d6005
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x28(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movb 0x18(%rax), %al
shrb $0x7, %al
cmpb $0x0, %al
je 0x1d5f90
jmp 0x1d5ff4
movq 0x1ee049(%rip), %rax    # 0x3c3fe0
movq (%rax), %rdi
movq -0x40(%rbp), %rax
addq $0x1, %rax
movl %eax, %edx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movq 0x28(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %ecx
addl $0x1, %ecx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rsi
addq %rsi, %rax
movq 0x28(%rax), %rax
imulq $0x28, -0x48(%rbp), %rsi
addq %rsi, %rax
movq 0x10(%rax), %r8
leaq 0x1b6605(%rip), %rsi    # 0x38c5f2
movb $0x0, %al
callq 0x22a0
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x1d5f4a
jmp 0x1d6007
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x1d5f31
jmp 0x1d601a
addq $0xa0, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nopw (%rax,%rax)