// File: chhylp123[P]hifiasm/gfa_ut.cpp
// Function: clean_poa_g_t(poa_g_t*)
void clean_poa_g_t(poa_g_t *g)
{
    uint64_t set_n = g->seq.n<<1;
    assert(g->arc.n >= g->update_arc); assert(g->seq.n >= g->update_seq);
    if(g->seq.n > g->update_seq) {
        kv_resize(uint64_t, g->idx, (g->seq.n<<1)); set_n = g->update_seq<<1;
        memset(g->idx.a + (g->update_seq<<1), 0, sizeof((*g->idx.a))*((g->seq.n<<1)-(g->update_seq<<1)));
        g->update_seq = g->seq.n; g->idx.n = (g->seq.n<<1);
    }

    if(g->arc.n > g->update_arc) {
        radix_sort_poa_arc_srt(g->arc.a, g->arc.a + g->arc.n);
        memset(g->idx.a, 0, sizeof((*g->idx.a))*set_n);
        int64_t k, last, n = g->arc.n;
        for (k = 1, last = 0; k <= n; ++k){
            if (k == n || g->arc.a[k-1].ul>>32 != g->arc.a[k].ul>>32) {
                g->idx.a[g->arc.a[k-1].ul>>32] = (((uint64_t)last<<32)) | (k - last), last = k;
            }
        }
        g->update_arc = g->arc.n;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
shlq %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x4c(%rcx), %ecx
cmpq %rcx, %rax
jb 0x32ed10
jmp 0x32ed2f
leaq 0x68b56(%rip), %rdi     # 0x39786d
leaq 0x6749b(%rip), %rsi     # 0x3961b9
movl $0x1519, %edx           # imm = 0x1519
leaq 0x68b5d(%rip), %rcx     # 0x397887
callq 0x2130
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x48(%rcx), %ecx
cmpq %rcx, %rax
jb 0x32ed44
jmp 0x32ed63
leaq 0x68b5a(%rip), %rdi     # 0x3978a5
leaq 0x67467(%rip), %rsi     # 0x3961b9
movl $0x1519, %edx           # imm = 0x1519
leaq 0x68b29(%rip), %rcx     # 0x397887
callq 0x2130
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x48(%rcx), %ecx
cmpq %rcx, %rax
jbe 0x32eed4
jmp 0x32ed7c
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
shlq %rcx
cmpq %rcx, %rax
jae 0x32ee64
movq -0x8(%rbp), %rax
movq (%rax), %rcx
shlq %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rcx
shrq %rcx
movq -0x8(%rbp), %rax
orq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rcx
shrq $0x2, %rcx
movq -0x8(%rbp), %rax
orq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rcx
shrq $0x4, %rcx
movq -0x8(%rbp), %rax
orq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rcx
shrq $0x8, %rcx
movq -0x8(%rbp), %rax
orq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rcx
shrq $0x10, %rcx
movq -0x8(%rbp), %rax
orq 0x38(%rax), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x40(%rax)
jmp 0x32ee66
movq -0x8(%rbp), %rax
movl 0x48(%rax), %eax
shll %eax
movl %eax, %eax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x8(%rbp), %rax
movl 0x48(%rax), %eax
shll %eax
movl %eax, %eax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rax
movq (%rax), %rdx
shlq %rdx
movq -0x8(%rbp), %rax
movl 0x48(%rax), %eax
shll %eax
movl %eax, %eax
subq %rax, %rdx
shlq $0x3, %rdx
xorl %esi, %esi
callq 0x2100
movq -0x8(%rbp), %rax
movq (%rax), %rax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x48(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
shlq %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x4c(%rcx), %ecx
cmpq %rcx, %rax
jbe 0x32f001
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
shlq $0x4, %rax
addq %rax, %rsi
callq 0x310a90
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x10(%rbp), %rdx
shlq $0x3, %rdx
xorl %esi, %esi
callq 0x2100
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x28(%rbp)
movq $0x1, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x28(%rbp), %rax
jg 0x32eff0
movq -0x18(%rbp), %rax
cmpq -0x28(%rbp), %rax
je 0x32ef98
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x18(%rbp), %rcx
subq $0x1, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
shrq $0x20, %rax
movq -0x8(%rbp), %rcx
movq 0x28(%rcx), %rcx
movq -0x18(%rbp), %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rcx
shrq $0x20, %rcx
cmpq %rcx, %rax
je 0x32efdd
movq -0x20(%rbp), %rdx
shlq $0x20, %rdx
movq -0x18(%rbp), %rax
subq -0x20(%rbp), %rax
orq %rax, %rdx
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x28(%rcx), %rcx
movq -0x18(%rbp), %rsi
subq $0x1, %rsi
shlq $0x4, %rsi
addq %rsi, %rcx
movq (%rcx), %rcx
shrq $0x20, %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
jmp 0x32efdf
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x32ef43
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4c(%rax)
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)