// File: chhylp123[P]hifiasm/./Correct.h
// Function: SetSnpMatrix(haplotype_evdience_alloc*, unsigned int*, unsigned long*, int, void*)
inline void SetSnpMatrix(haplotype_evdience_alloc* h, uint32_t *nn_snp, uint64_t *overlap_num, int32_t set_matrix, void *km)
{
    if(nn_snp && overlap_num) {
        if(!km) kv_resize(SnpStats, h->snp_stat, *nn_snp);
        else kv_resize_km(km, SnpStats, h->snp_stat, *nn_snp);
        h->snp_stat.n = 0; h->overlap = *overlap_num; h->core_snp = 0;
    } 

    if(set_matrix) {
        uint64_t n_snp = nn_snp? *nn_snp:h->snp_stat.n;
        uint64_t n_ovlp = overlap_num? *overlap_num:h->overlap;
        uint64_t new_size = n_snp* n_ovlp;
        if(h->snp_matrix_size < new_size) {
            h->snp_matrix_size = new_size;
            if(!km) REALLOC(h->snp_matrix, h->snp_matrix_size);
            else KREALLOC(km, h->snp_matrix, h->snp_matrix_size);
        }
        memset(h->snp_matrix, -1, n_snp * n_ovlp);

        if(h->r_snp_size < n_ovlp) {
            h->r_snp_size = n_ovlp;
            if(!km) REALLOC(h->r_snp, h->r_snp_size);
            else KREALLOC(km, h->r_snp, h->r_snp_size);
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq %r8, -0x28(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0xa277d
cmpq $0x0, -0x18(%rbp)
je 0xa277d
cmpq $0x0, -0x28(%rbp)
jne 0xa261c
jmp 0xa24ee
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
cmpq %rcx, %rax
jae 0xa2615
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x2, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x4, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x8, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x10, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x218(%rax), %rdi
movq -0x8(%rbp), %rax
imulq $0x28, 0x228(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x218(%rax)
jmp 0xa2617
jmp 0xa274d
jmp 0xa261e
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
cmpq %rcx, %rax
jae 0xa2749
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x2, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x4, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x8, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
shrq $0x10, %rcx
movq -0x8(%rbp), %rax
orq 0x228(%rax), %rcx
movq %rcx, 0x228(%rax)
movq -0x8(%rbp), %rax
movq 0x228(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x228(%rax)
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x218(%rax), %rsi
movq -0x8(%rbp), %rax
imulq $0x28, 0x228(%rax), %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x218(%rax)
jmp 0xa274b
jmp 0xa274d
movq -0x8(%rbp), %rax
movq $0x0, 0x220(%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1c8(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x1c4(%rax)
cmpl $0x0, -0x1c(%rbp)
je 0xa291e
cmpq $0x0, -0x10(%rbp)
je 0xa279a
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x48(%rbp)
jmp 0xa27a9
movq -0x8(%rbp), %rax
movq 0x220(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0xa27c5
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0xa27d3
movq -0x8(%rbp), %rax
movl 0x1c8(%rax), %eax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rax
imulq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movl 0x1d8(%rax), %eax
cmpq -0x40(%rbp), %rax
jae 0xa2873
movq -0x40(%rbp), %rax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1d8(%rax)
cmpq $0x0, -0x28(%rbp)
jne 0xa283f
movq -0x8(%rbp), %rax
movq 0x1d0(%rax), %rdi
movq -0x8(%rbp), %rax
movl 0x1d8(%rax), %eax
movl %eax, %esi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x1d0(%rax)
jmp 0xa2871
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x1d0(%rax), %rsi
movq -0x8(%rbp), %rax
movl 0x1d8(%rax), %eax
movl %eax, %edx
shlq $0x0, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x1d0(%rax)
jmp 0xa2873
movq -0x8(%rbp), %rax
movq 0x1d0(%rax), %rdi
movq -0x30(%rbp), %rdx
imulq -0x38(%rbp), %rdx
movl $0xff, %esi
callq 0x2100
movq -0x8(%rbp), %rax
movl 0x1e8(%rax), %eax
cmpq -0x38(%rbp), %rax
jae 0xa291c
movq -0x38(%rbp), %rax
movl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1e8(%rax)
cmpq $0x0, -0x28(%rbp)
jne 0xa28e8
movq -0x8(%rbp), %rax
movq 0x1e0(%rax), %rdi
movq -0x8(%rbp), %rax
movl 0x1e8(%rax), %eax
movl %eax, %esi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x1e0(%rax)
jmp 0xa291a
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x1e0(%rax), %rsi
movq -0x8(%rbp), %rax
movl 0x1e8(%rax), %eax
movl %eax, %edx
shlq $0x0, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x1e0(%rax)
jmp 0xa291c
jmp 0xa291e
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop