// File: /workspace/github_c_makefile_star2_O3/nh13[P]ksw/src/parasail/src/nw_striped_avx2_256_8.c
// Function: parasail_nw_rowcol_striped_profile_avx2_256_8
parasail_result_t* PNAME(
        const parasail_profile_t * const restrict profile,
        const char * const restrict s2, const int s2Len,
        const int open, const int gap)
{
    /* declare local variables */
    int32_t i = 0;
    int32_t j = 0;
    int32_t k = 0;
    int s1Len = 0;
    int32_t end_query = 0;
    int32_t end_ref = 0;
    const parasail_matrix_t *matrix = NULL;
    int32_t segWidth = 0;
    int32_t segLen = 0;
    int32_t offset = 0;
    int32_t position = 0;
    __m256i* restrict vProfile = NULL;
    __m256i* restrict pvHStore = NULL;
    __m256i* restrict pvHLoad = NULL;
    __m256i* restrict pvE = NULL;
    int8_t* restrict boundary = NULL;
    __m256i vGapO;
    __m256i vGapE;
    int8_t NEG_LIMIT = 0;
    int8_t POS_LIMIT = 0;
    int8_t score = 0;
    __m256i vNegLimit;
    __m256i vPosLimit;
    __m256i vSaturationCheckMin;
    __m256i vSaturationCheckMax;
    parasail_result_t *result = NULL;

    /* validate inputs */
    PARASAIL_CHECK_NULL(profile);
    PARASAIL_CHECK_NULL(profile->profile8.score);
    PARASAIL_CHECK_NULL(profile->matrix);
    PARASAIL_CHECK_GT0(profile->s1Len);
    PARASAIL_CHECK_NULL(s2);
    PARASAIL_CHECK_GT0(s2Len);
    PARASAIL_CHECK_GE0(open);
    PARASAIL_CHECK_GE0(gap);

    /* initialize stack variables */
    i = 0;
    j = 0;
    k = 0;
    s1Len = profile->s1Len;
    end_query = s1Len-1;
    end_ref = s2Len-1;
    matrix = profile->matrix;
    segWidth = 32; /* number of values in vector unit */
    segLen = (s1Len + segWidth - 1) / segWidth;
    offset = (s1Len - 1) % segLen;
    position = (segWidth - 1) - (s1Len - 1) / segLen;
    vProfile = (__m256i*)profile->profile8.score;
    vGapO = _mm256_set1_epi8(open);
    vGapE = _mm256_set1_epi8(gap);
    NEG_LIMIT = (-open < matrix->min ? INT8_MIN + open : INT8_MIN - matrix->min) + 1;
    POS_LIMIT = INT8_MAX - matrix->max - 1;
    score = NEG_LIMIT;
    vNegLimit = _mm256_set1_epi8(NEG_LIMIT);
    vPosLimit = _mm256_set1_epi8(POS_LIMIT);
    vSaturationCheckMin = vPosLimit;
    vSaturationCheckMax = vNegLimit;

    /* initialize result */
#ifdef PARASAIL_TABLE
    result = parasail_result_new_table1(segLen*segWidth, s2Len);
#else
#ifdef PARASAIL_ROWCOL
    result = parasail_result_new_rowcol1(segLen*segWidth, s2Len);
#else
    result = parasail_result_new();
#endif
#endif
    if (!result) return NULL;

    /* set known flags */
    result->flag |= PARASAIL_FLAG_NW | PARASAIL_FLAG_STRIPED
        | PARASAIL_FLAG_BITS_8 | PARASAIL_FLAG_LANES_32;
#ifdef PARASAIL_TABLE
    result->flag |= PARASAIL_FLAG_TABLE;
#endif
#ifdef PARASAIL_ROWCOL
    result->flag |= PARASAIL_FLAG_ROWCOL;
#endif

    /* initialize heap variables */
    pvHStore = parasail_memalign___m256i(32, segLen);
    pvHLoad  = parasail_memalign___m256i(32, segLen);
    pvE      = parasail_memalign___m256i(32, segLen);
    boundary = parasail_memalign_int8_t(32, s2Len+1);

    /* validate heap variables */
    if (!pvHStore) return NULL;
    if (!pvHLoad) return NULL;
    if (!pvE) return NULL;
    if (!boundary) return NULL;

    /* initialize H and E */
    {
        int32_t index = 0;
        for (i=0; i<segLen; ++i) {
            int32_t segNum = 0;
            __m256i_8_t h;
            __m256i_8_t e;
            for (segNum=0; segNum<segWidth; ++segNum) {
                int64_t tmp = -open-gap*(segNum*segLen+i);
                h.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
                tmp = tmp - open;
                e.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
            }
            _mm256_store_si256(&pvHStore[index], h.m);
            _mm256_store_si256(&pvE[index], e.m);
            ++index;
        }
    }

    /* initialize uppder boundary */
    {
        boundary[0] = 0;
        for (i=1; i<=s2Len; ++i) {
            int64_t tmp = -open-gap*(i-1);
            boundary[i] = tmp < INT8_MIN ? INT8_MIN : tmp;
        }
    }

    /* outer loop over database sequence */
    for (j=0; j<s2Len; ++j) {
        __m256i vE;
        /* Initialize F value to -inf.  Any errors to vH values will be
         * corrected in the Lazy_F loop.  */
        __m256i vF = vNegLimit;

        /* load final segment of pvHStore and shift left by 2 bytes */
        __m256i vH = _mm256_slli_si256_rpl(pvHStore[segLen - 1], 1);

        /* Correct part of the vProfile */
        const __m256i* vP = vProfile + matrix->mapper[(unsigned char)s2[j]] * segLen;

        /* Swap the 2 H buffers. */
        __m256i* pv = pvHLoad;
        pvHLoad = pvHStore;
        pvHStore = pv;

        /* insert upper boundary condition */
        vH = _mm256_insert_epi8_rpl(vH, boundary[j], 0);

        /* inner loop to process the query sequence */
        for (i=0; i<segLen; ++i) {
            vH = _mm256_adds_epi8(vH, _mm256_load_si256(vP + i));
            vE = _mm256_load_si256(pvE + i);

            /* Get max from vH, vE and vF. */
            vH = _mm256_max_epi8(vH, vE);
            vH = _mm256_max_epi8(vH, vF);
            /* Save vH values. */
            _mm256_store_si256(pvHStore + i, vH);
            vSaturationCheckMax = _mm256_max_epi8(vSaturationCheckMax, vH);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vH);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vE);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vF);
#ifdef PARASAIL_TABLE
            arr_store_si256(result->tables->score_table, vH, i, segLen, j, s2Len);
#endif

            /* Update vE value. */
            vH = _mm256_subs_epi8(vH, vGapO);
            vE = _mm256_subs_epi8(vE, vGapE);
            vE = _mm256_max_epi8(vE, vH);
            _mm256_store_si256(pvE + i, vE);

            /* Update vF value. */
            vF = _mm256_subs_epi8(vF, vGapE);
            vF = _mm256_max_epi8(vF, vH);

            /* Load the next vH. */
            vH = _mm256_load_si256(pvHLoad + i);
        }

        /* Lazy_F loop: has been revised to disallow adjecent insertion and
         * then deletion, so don't update E(i, i), learn from SWPS3 */
        for (k=0; k<segWidth; ++k) {
            int64_t tmp = boundary[j+1]-open;
            int8_t tmp2 = tmp < INT8_MIN ? INT8_MIN : tmp;
            vF = _mm256_slli_si256_rpl(vF, 1);
            vF = _mm256_insert_epi8_rpl(vF, tmp2, 0);
            for (i=0; i<segLen; ++i) {
                vH = _mm256_load_si256(pvHStore + i);
                vH = _mm256_max_epi8(vH,vF);
                _mm256_store_si256(pvHStore + i, vH);
                vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vH);
                vSaturationCheckMax = _mm256_max_epi8(vSaturationCheckMax, vH);
#ifdef PARASAIL_TABLE
                arr_store_si256(result->tables->score_table, vH, i, segLen, j, s2Len);
#endif
                vH = _mm256_subs_epi8(vH, vGapO);
                vF = _mm256_subs_epi8(vF, vGapE);
                if (! _mm256_movemask_epi8(_mm256_cmpgt_epi8(vF, vH))) goto end;
                /*vF = _mm256_max_epi8(vF, vH);*/
            }
        }
end:
        {
        }

#ifdef PARASAIL_ROWCOL
        /* extract last value from the column */
        {
            vH = _mm256_load_si256(pvHStore + offset);
            for (k=0; k<position; ++k) {
                vH = _mm256_slli_si256_rpl(vH, 1);
            }
            result->rowcols->score_row[j] = (int8_t) _mm256_extract_epi8_rpl (vH, 31);
        }
#endif
    }

#ifdef PARASAIL_ROWCOL
    for (i=0; i<segLen; ++i) {
        __m256i vH = _mm256_load_si256(pvHStore+i);
        arr_store_col(result->rowcols->score_col, vH, i, segLen);
    }
#endif

    /* extract last value from the last column */
    {
        __m256i vH = _mm256_load_si256(pvHStore + offset);
        for (k=0; k<position; ++k) {
            vH = _mm256_slli_si256_rpl (vH, 1);
        }
        score = (int8_t) _mm256_extract_epi8_rpl (vH, 31);
    }

    if (_mm256_movemask_epi8(_mm256_or_si256(
            _mm256_cmplt_epi8_rpl(vSaturationCheckMin, vNegLimit),
            _mm256_cmpgt_epi8(vSaturationCheckMax, vPosLimit)))) {
        result->flag |= PARASAIL_FLAG_SATURATED;
        score = 0;
        end_query = 0;
        end_ref = 0;
    }

    result->score = score;
    result->end_query = end_query;
    result->end_ref = end_ref;

    parasail_free(boundary);
    parasail_free(pvE);
    parasail_free(pvHLoad);
    parasail_free(pvHStore);

    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x288, %rsp            # imm = 0x288
movl %ecx, 0x10(%rsp)
movq %rsi, 0x38(%rsp)
testq %rdi, %rdi
je 0x56d5ef
movq 0x18(%rdi), %rax
movq %rax, 0x60(%rsp)
testq %rax, %rax
je 0x56d5f6
movq 0x10(%rdi), %rax
movq %rax, 0x30(%rsp)
testq %rax, %rax
je 0x56d5fd
movl 0x8(%rdi), %edi
testl %edi, %edi
jle 0x56d604
cmpq $0x0, 0x38(%rsp)
je 0x56d60b
movl %edx, %r9d
testl %edx, %edx
jle 0x56d612
cmpl $0x0, 0x10(%rsp)
js 0x56d619
testl %r8d, %r8d
js 0x56d620
movl %r8d, 0x50(%rsp)
leal -0x1(%rdi), %eax
addq $0x1f, %rdi
movq %rdi, %rbp
shrq $0x5, %rbp
movl %eax, 0x6c(%rsp)
xorl %edx, %edx
divl %ebp
movl %eax, 0xc(%rsp)
movl %edx, %ebx
movq 0x30(%rsp), %rdx
movl 0x20(%rdx), %eax
movl %eax, %ecx
negb %cl
movzbl %cl, %r12d
movl 0x10(%rsp), %ecx
movl %ecx, %esi
negl %esi
movl %esi, 0x48(%rsp)
cmpl %esi, %eax
cmovgl %ecx, %r12d
movb $0x7e, %r13b
subb 0x1c(%rdx), %r13b
andl $0x7fffffe0, %edi       # imm = 0x7FFFFFE0
movl %r9d, %esi
movq %r9, 0x28(%rsp)
callq 0x20ac53
testq %rax, %rax
je 0x56d625
movl %ebx, 0x40(%rsp)
movq %rax, 0x58(%rsp)
orl $0x20140801, 0xc(%rax)  # imm = 0x20140801
movl $0x20, %edi
movq %rbp, %rsi
callq 0x4f1904
movq %rax, %r14
movl $0x20, %edi
movq %rbp, %rsi
callq 0x4f1904
movq %rax, %rbx
movl $0x20, %edi
movq %rbp, %rsi
callq 0x4f1904
movq %rax, %r15
movq 0x28(%rsp), %rax
leal 0x1(%rax), %esi
movl $0x20, %edi
callq 0x20a620
testq %r14, %r14
sete %cl
testq %rbx, %rbx
sete %dl
orb %cl, %dl
testq %r15, %r15
sete %cl
testq %rax, %rax
sete %sil
orb %cl, %sil
orb %dl, %sil
jne 0x56d625
movq 0x28(%rsp), %r9
leal -0x1(%r9), %ecx
movl %ecx, 0x24(%rsp)
movl $0x1f, %edx
subl 0xc(%rsp), %edx
movl 0x10(%rsp), %ecx
vmovd %ecx, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x200(%rsp)
movl 0x50(%rsp), %r10d
vmovd %r10d, %xmm0
vpbroadcastb %xmm0, %ymm3
addb $-0x7f, %r12b
vmovd %r12d, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x260(%rsp)
vmovd %r13d, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x240(%rsp)
movl %ecx, %ecx
movl %ebp, %r8d
movl %r10d, %esi
movl 0x48(%rsp), %r11d
movslq %r11d, %rdi
vmovq %rsi, %xmm0
vpbroadcastq %xmm0, %ymm0
vmovq %rdi, %xmm1
vpbroadcastq %xmm1, %ymm1
vmovdqu %ymm1, 0x1c0(%rsp)
vmovq %rcx, %xmm4
movq %r8, 0x18(%rsp)
vmovq %r8, %xmm5
vpbroadcastq %xmm5, %ymm5
vpmuldq 0xc1c6b(%rip), %ymm5, %ymm1 # 0x62df00
vmovdqu %ymm1, 0x1a0(%rsp)
vpmuldq 0xc1c79(%rip), %ymm5, %ymm1 # 0x62df20
vmovdqu %ymm1, 0x180(%rsp)
vpmuldq 0xc1c87(%rip), %ymm5, %ymm1 # 0x62df40
vmovdqu %ymm1, 0x160(%rsp)
vpmuldq 0xc1c95(%rip), %ymm5, %ymm1 # 0x62df60
vmovdqu %ymm1, 0x140(%rsp)
vpmuldq 0xc1b03(%rip), %ymm5, %ymm1 # 0x62dde0
vmovdqu %ymm1, 0x120(%rsp)
vpmuldq 0xc1b11(%rip), %ymm5, %ymm1 # 0x62de00
vmovdqu %ymm1, 0x100(%rsp)
vpmuldq 0xc193f(%rip), %ymm5, %ymm1 # 0x62dc40
vmovdqu %ymm1, 0xe0(%rsp)
vpmuldq 0xc182d(%rip), %ymm5, %ymm1 # 0x62db40
vmovdqu %ymm1, 0xc0(%rsp)
vpbroadcastq %xmm4, %ymm1
vmovdqu %ymm1, 0x220(%rsp)
xorl %ecx, %ecx
vpbroadcastq 0xc1c8b(%rip), %ymm13 # 0x62dfc0
movq %r14, %rsi
movq %r15, %rdi
vbroadcastsd 0xc1c84(%rip), %ymm14 # 0x62dfc8
vmovq %rcx, %xmm4
vpbroadcastq %xmm4, %ymm5
vpaddq 0xe0(%rsp), %ymm5, %ymm4
vpaddq 0xc0(%rsp), %ymm5, %ymm6
vpaddq 0x100(%rsp), %ymm5, %ymm7
vpaddq 0x120(%rsp), %ymm5, %ymm8
vpaddq 0x140(%rsp), %ymm5, %ymm9
vpaddq 0x160(%rsp), %ymm5, %ymm10
vpaddq 0x180(%rsp), %ymm5, %ymm11
vpaddq 0x1a0(%rsp), %ymm5, %ymm5
vpmuludq %ymm0, %ymm5, %ymm15
vpsrlq $0x20, %ymm5, %ymm5
vpmuludq %ymm0, %ymm5, %ymm5
vpsllq $0x20, %ymm5, %ymm5
vpaddq %ymm5, %ymm15, %ymm5
vpmuludq %ymm0, %ymm11, %ymm15
vpsrlq $0x20, %ymm11, %ymm11
vpmuludq %ymm0, %ymm11, %ymm11
vpsllq $0x20, %ymm11, %ymm11
vpaddq %ymm11, %ymm15, %ymm2
vpmuludq %ymm0, %ymm10, %ymm15
vpsrlq $0x20, %ymm10, %ymm10
vpmuludq %ymm0, %ymm10, %ymm10
vpsllq $0x20, %ymm10, %ymm10
vpaddq %ymm10, %ymm15, %ymm10
vpmuludq %ymm0, %ymm9, %ymm15
vpsrlq $0x20, %ymm9, %ymm9
vpmuludq %ymm0, %ymm9, %ymm9
vpsllq $0x20, %ymm9, %ymm9
vpaddq %ymm9, %ymm15, %ymm1
vpmuludq %ymm0, %ymm8, %ymm9
vpsrlq $0x20, %ymm8, %ymm8
vpmuludq %ymm0, %ymm8, %ymm8
vpsllq $0x20, %ymm8, %ymm8
vpaddq %ymm8, %ymm9, %ymm8
vpmuludq %ymm0, %ymm7, %ymm9
vpsrlq $0x20, %ymm7, %ymm7
vpmuludq %ymm0, %ymm7, %ymm7
vpsllq $0x20, %ymm7, %ymm7
vpaddq %ymm7, %ymm9, %ymm11
vpmuludq %ymm0, %ymm6, %ymm7
vpsrlq $0x20, %ymm6, %ymm6
vpmuludq %ymm0, %ymm6, %ymm6
vpsllq $0x20, %ymm6, %ymm6
vpaddq %ymm6, %ymm7, %ymm7
vpmuludq %ymm0, %ymm4, %ymm6
vpsrlq $0x20, %ymm4, %ymm4
vpmuludq %ymm0, %ymm4, %ymm4
vpsllq $0x20, %ymm4, %ymm4
vpaddq %ymm4, %ymm6, %ymm4
vmovdqu 0x1c0(%rsp), %ymm9
vpsubq %ymm4, %ymm9, %ymm6
vpsubq %ymm7, %ymm9, %ymm7
vpsubq %ymm11, %ymm9, %ymm15
vpsubq %ymm8, %ymm9, %ymm4
vpsubq %ymm5, %ymm9, %ymm8
vpcmpgtq %ymm13, %ymm8, %ymm5
vblendvpd %ymm5, %ymm8, %ymm13, %ymm5
vmovupd %ymm5, 0x1e0(%rsp)
vpsubq %ymm1, %ymm9, %ymm5
vpcmpgtq %ymm13, %ymm4, %ymm1
vblendvpd %ymm1, %ymm4, %ymm13, %ymm1
vpsubq %ymm10, %ymm9, %ymm10
vpcmpgtq %ymm13, %ymm7, %ymm11
vblendvpd %ymm11, %ymm7, %ymm13, %ymm12
vpsubq %ymm2, %ymm9, %ymm11
vpcmpgtq %ymm13, %ymm6, %ymm9
vblendvpd %ymm9, %ymm6, %ymm13, %ymm9
vandpd %ymm14, %ymm9, %ymm9
vandpd %ymm14, %ymm12, %ymm12
vpackusdw %ymm9, %ymm12, %ymm9
vpcmpgtq %ymm13, %ymm15, %ymm12
vblendvpd %ymm12, %ymm15, %ymm13, %ymm12
vandpd %ymm14, %ymm12, %ymm12
vandpd %ymm1, %ymm14, %ymm1
vpackusdw %ymm1, %ymm12, %ymm1
vpcmpgtq %ymm13, %ymm10, %ymm12
vblendvpd %ymm12, %ymm10, %ymm13, %ymm12
vpermq $0xd8, %ymm9, %ymm9     # ymm9 = ymm9[0,2,1,3]
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpackusdw %ymm1, %ymm9, %ymm1
vmovdqu %ymm1, 0x70(%rsp)
vpcmpgtq %ymm13, %ymm5, %ymm1
vblendvpd %ymm1, %ymm5, %ymm13, %ymm1
vandpd %ymm1, %ymm14, %ymm1
vandpd %ymm14, %ymm12, %ymm9
vpackusdw %ymm9, %ymm1, %ymm1
vpcmpgtq %ymm13, %ymm11, %ymm9
vblendvpd %ymm9, %ymm11, %ymm13, %ymm9
vandpd %ymm14, %ymm9, %ymm9
vandpd 0x1e0(%rsp), %ymm14, %ymm12
vpackusdw %ymm12, %ymm9, %ymm9
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpermq $0xd8, %ymm9, %ymm9     # ymm9 = ymm9[0,2,1,3]
vpackusdw %ymm9, %ymm1, %ymm9
vmovdqu 0x220(%rsp), %ymm2
vpsubq %ymm2, %ymm6, %ymm1
vpsubq %ymm2, %ymm7, %ymm12
vpsubq %ymm2, %ymm8, %ymm6
vpcmpgtq %ymm13, %ymm6, %ymm7
vblendvpd %ymm7, %ymm6, %ymm13, %ymm6
vpsubq %ymm2, %ymm11, %ymm7
vpcmpgtq %ymm13, %ymm7, %ymm8
vblendvpd %ymm8, %ymm7, %ymm13, %ymm7
vpsubq %ymm2, %ymm10, %ymm8
vpcmpgtq %ymm13, %ymm8, %ymm10
vblendvpd %ymm10, %ymm8, %ymm13, %ymm8
vpsubq %ymm2, %ymm5, %ymm5
vpcmpgtq %ymm13, %ymm5, %ymm10
vblendvpd %ymm10, %ymm5, %ymm13, %ymm5
vpsubq %ymm2, %ymm4, %ymm4
vpcmpgtq %ymm13, %ymm4, %ymm10
vblendvpd %ymm10, %ymm4, %ymm13, %ymm4
vpsubq %ymm2, %ymm15, %ymm10
vpcmpgtq %ymm13, %ymm10, %ymm11
vblendvpd %ymm11, %ymm10, %ymm13, %ymm10
vpcmpgtq %ymm13, %ymm12, %ymm11
vblendvpd %ymm11, %ymm12, %ymm13, %ymm11
vpcmpgtq %ymm13, %ymm1, %ymm12
vblendvpd %ymm12, %ymm1, %ymm13, %ymm1
vpermq $0xd8, 0x70(%rsp), %ymm12 # ymm12 = mem[0,2,1,3]
vpermq $0xd8, %ymm9, %ymm9     # ymm9 = ymm9[0,2,1,3]
vpackuswb %ymm9, %ymm12, %ymm9
vandpd %ymm1, %ymm14, %ymm1
vandpd %ymm14, %ymm11, %ymm11
vpackusdw %ymm1, %ymm11, %ymm1
vandpd %ymm14, %ymm10, %ymm10
vandpd %ymm4, %ymm14, %ymm4
vpackusdw %ymm4, %ymm10, %ymm4
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpackusdw %ymm4, %ymm1, %ymm1
vandpd %ymm5, %ymm14, %ymm4
vandpd %ymm14, %ymm8, %ymm5
vpackusdw %ymm5, %ymm4, %ymm4
vandpd %ymm7, %ymm14, %ymm5
vandpd %ymm6, %ymm14, %ymm6
vpackusdw %ymm6, %ymm5, %ymm5
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpermq $0xd8, %ymm5, %ymm5     # ymm5 = ymm5[0,2,1,3]
vpackusdw %ymm5, %ymm4, %ymm4
vpermq $0xd8, %ymm9, %ymm5     # ymm5 = ymm9[0,2,1,3]
vmovdqa %ymm5, (%rsi)
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpackuswb %ymm4, %ymm1, %ymm1
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vmovdqa %ymm1, (%rdi)
incq %rcx
addq $0x20, %rdi
addq $0x20, %rsi
cmpq %rcx, %rbp
jne 0x56c344
movb $0x0, (%rax)
movl %r9d, %edi
addl $0x1f, %r9d
andl $-0x20, %r9d
leaq -0x1(%rdi), %rcx
vmovq %rcx, %xmm0
vpbroadcastq %xmm0, %ymm4
vmovd %r10d, %xmm0
vpbroadcastd %xmm0, %ymm0
vmovdqu %ymm0, 0x180(%rsp)
vmovd %r11d, %xmm0
vpbroadcastd %xmm0, %ymm0
vmovdqu %ymm0, 0x160(%rsp)
vpmovsxbd 0xc191b(%rip), %ymm7 # 0x62dfd0
vmovaps 0xc18e3(%rip), %ymm0    # 0x62dfa0
vmovups %ymm0, 0x70(%rsp)
vpmovsxbd 0xc177c(%rip), %ymm8 # 0x62de48
vpmovsxbd 0xc15fb(%rip), %ymm5 # 0x62dcd0
xorl %r8d, %r8d
vpbroadcastq 0xc149f(%rip), %xmm13 # 0x62db80
vbroadcastss 0xc18ee(%rip), %ymm0 # 0x62dfd8
vmovups %ymm0, 0x140(%rsp)
vbroadcastss 0xc18e0(%rip), %ymm0 # 0x62dfdc
vmovups %ymm0, 0x120(%rsp)
vpbroadcastq 0xc1472(%rip), %ymm10 # 0x62db80
vpbroadcastd 0xc14a9(%rip), %xmm14 # 0x62dbc0
vpbroadcastd 0xc18c0(%rip), %ymm0 # 0x62dfe0
vmovdqu %ymm0, 0xc0(%rsp)
vmovdqu %ymm10, 0x100(%rsp)
vmovdqu %ymm14, 0xe0(%rsp)
vmovq %r8, %xmm0
vpbroadcastq %xmm0, %ymm0
vmovdqu %ymm0, 0x1a0(%rsp)
vpor 0xc13ea(%rip), %ymm0, %ymm0 # 0x62db40
vpxor %xmm4, %xmm13, %xmm1
vpxor %xmm0, %xmm13, %xmm11
vmovdqu %ymm5, 0x1c0(%rsp)
vpaddd 0xc1af1(%rip), %ymm5, %ymm5 # 0x62e260
vpcmpeqd %ymm9, %ymm9, %ymm9
vmovdqa %ymm8, %ymm12
vpaddd %ymm9, %ymm8, %ymm15
vmovdqu %ymm7, 0x1e0(%rsp)
vpaddd %ymm7, %ymm9, %ymm7
vmovdqu 0x180(%rsp), %ymm8
vpmulld %ymm8, %ymm7, %ymm7
vpmulld %ymm8, %ymm15, %ymm15
vpmulld %ymm8, %ymm5, %ymm5
vpcmpgtq %xmm1, %xmm11, %xmm1
vmovdqu 0x160(%rsp), %ymm9
vpsubd %ymm5, %ymm9, %ymm5
vpsubd %ymm15, %ymm9, %ymm11
vmovdqu 0x70(%rsp), %ymm6
vpcmpeqd %ymm14, %ymm14, %ymm14
vmovdqu 0x140(%rsp), %ymm15
vpmaxsd %ymm15, %ymm11, %ymm11
vpmaxsd %ymm15, %ymm5, %ymm5
vmovdqu 0x120(%rsp), %ymm10
vpand %ymm5, %ymm10, %ymm5
vpand %ymm10, %ymm11, %ymm11
vpackusdw %ymm11, %ymm5, %ymm5
vpaddd %ymm6, %ymm14, %ymm11
vpmulld %ymm8, %ymm11, %ymm11
vpsubd %ymm11, %ymm9, %ymm11
vpsubd %ymm7, %ymm9, %ymm7
vpcmpeqd %xmm9, %xmm9, %xmm9
vpmaxsd %ymm15, %ymm7, %ymm7
vpmaxsd %ymm15, %ymm11, %ymm11
vpand %ymm10, %ymm11, %ymm11
vpand %ymm7, %ymm10, %ymm7
vpackusdw %ymm7, %ymm11, %ymm7
vpermq $0xd8, %ymm5, %ymm5     # ymm5 = ymm5[0,2,1,3]
vpermq $0xd8, %ymm7, %ymm7     # ymm7 = ymm7[0,2,1,3]
vpackuswb %ymm7, %ymm5, %ymm5
vpackssdw %xmm1, %xmm1, %xmm1
vpxor %xmm1, %xmm9, %xmm1
vpackssdw %xmm1, %xmm1, %xmm1
vpacksswb %xmm1, %xmm1, %xmm1
vmovd %xmm1, %ecx
vpermq $0xd8, %ymm5, %ymm11    # ymm11 = ymm5[0,2,1,3]
testb $0x1, %cl
je 0x56c855
vpextrb $0x0, %xmm11, 0x1(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm1
vpxor %xmm0, %xmm13, %xmm5
vpcmpgtq %xmm1, %xmm5, %xmm1
vpackssdw %xmm1, %xmm1, %xmm1
vpxor %xmm1, %xmm9, %xmm1
vpackssdw %xmm1, %xmm1, %xmm1
vpacksswb %xmm1, %xmm1, %xmm1
vpextrb $0x1, %xmm1, %ecx
testb $0x1, %cl
vmovdqu 0x100(%rsp), %ymm10
vmovdqu 0xe0(%rsp), %ymm14
je 0x56c897
vpextrb $0x1, %xmm11, 0x2(%rax,%r8)
vpxor %ymm4, %ymm10, %ymm1
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpshuflw $0xe8, %ymm0, %ymm5     # ymm5 = ymm0[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0xc19af(%rip), %ymm5, %ymm5 # 0x62e260
vpermd %ymm5, %ymm14, %ymm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x2, %xmm5, %ecx
testb $0x1, %cl
vmovdqa %ymm12, %ymm8
vmovdqu 0x1a0(%rsp), %ymm6
je 0x56c8df
vpextrb $0x2, %xmm11, 0x3(%rax,%r8)
vextracti128 $0x1, %ymm0, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpxor %xmm0, %xmm9, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpacksswb %xmm0, %xmm0, %xmm0
vpextrb $0x3, %xmm0, %ecx
testb $0x1, %cl
je 0x56c908
vpextrb $0x3, %xmm11, 0x4(%rax,%r8)
vpor 0xc1330(%rip), %ymm6, %ymm0 # 0x62dc40
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastw %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x4, %xmm5, %ecx
testb $0x1, %cl
je 0x56c951
vpextrb $0x4, %xmm11, 0x5(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastd %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x5, %xmm5, %ecx
testb $0x1, %cl
je 0x56c993
vpextrb $0x5, %xmm11, 0x6(%rax,%r8)
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpackssdw %ymm0, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x6, %xmm5, %ecx
testb $0x1, %cl
je 0x56c9c5
vpextrb $0x6, %xmm11, 0x7(%rax,%r8)
vpshufhw $0x84, %ymm0, %ymm0     # ymm0 = ymm0[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm0, %xmm0
vpxor %xmm0, %xmm9, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpacksswb %xmm0, %xmm0, %xmm0
vpextrb $0x7, %xmm0, %ecx
testb $0x1, %cl
je 0x56c9ef
vpextrb $0x7, %xmm11, 0x8(%rax,%r8)
vpor 0xc1409(%rip), %ymm6, %ymm0 # 0x62de00
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpmovzxwd %xmm5, %ymm5    # ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vmovd %xmm5, %ecx
testb $0x1, %cl
je 0x56ca30
vpextrb $0x8, %xmm11, 0x9(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x1, %xmm5, %ecx
testb $0x1, %cl
je 0x56ca6c
vpextrb $0x9, %xmm11, 0xa(%rax,%r8)
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpshuflw $0xe8, %ymm0, %ymm5     # ymm5 = ymm0[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0xc17de(%rip), %ymm5, %ymm5 # 0x62e260
vpermd %ymm5, %ymm14, %ymm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x2, %xmm5, %ecx
testb $0x1, %cl
je 0x56caae
vpextrb $0xa, %xmm11, 0xb(%rax,%r8)
vextracti128 $0x1, %ymm0, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpxor %xmm0, %xmm9, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpermq $0x55, %ymm0, %ymm0     # ymm0 = ymm0[1,1,1,1]
vpacksswb %ymm0, %ymm0, %ymm0
vextracti128 $0x1, %ymm0, %xmm0
vpextrb $0x3, %xmm0, %ecx
testb $0x1, %cl
je 0x56cae3
vpextrb $0xb, %xmm11, 0xc(%rax,%r8)
vpor 0xc12f5(%rip), %ymm6, %ymm0 # 0x62dde0
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x4, %xmm5, %ecx
testb $0x1, %cl
je 0x56cb27
vpextrb $0xc, %xmm11, 0xd(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x5, %xmm5, %ecx
testb $0x1, %cl
je 0x56cb64
vpextrb $0xd, %xmm11, 0xe(%rax,%r8)
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpackssdw %ymm0, %ymm0, %ymm5
vpxor 0xc16e7(%rip), %ymm5, %ymm5 # 0x62e260
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x6, %xmm5, %ecx
testb $0x1, %cl
je 0x56cb9a
vpextrb $0xe, %xmm11, 0xf(%rax,%r8)
vpshufhw $0x84, %ymm0, %ymm0     # ymm0 = ymm0[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor 0xc16b9(%rip), %ymm0, %ymm0 # 0x62e260
vpackssdw %ymm0, %ymm0, %ymm0
vpacksswb %ymm0, %ymm0, %ymm0
vextracti128 $0x1, %ymm0, %xmm0
vpextrb $0x7, %xmm0, %ecx
testb $0x1, %cl
je 0x56cbc8
vpextrb $0xf, %xmm11, 0x10(%rax,%r8)
vpor 0xc1390(%rip), %ymm6, %ymm0 # 0x62df60
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x8, %xmm5, %ecx
vextracti128 $0x1, %ymm11, %xmm11
testb $0x1, %cl
je 0x56cc06
vpextrb $0x0, %xmm11, 0x11(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x9, %xmm5, %ecx
testb $0x1, %cl
je 0x56cc36
vpextrb $0x1, %xmm11, 0x12(%rax,%r8)
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpshuflw $0xe8, %ymm0, %ymm5     # ymm5 = ymm0[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0xc1614(%rip), %ymm5, %ymm5 # 0x62e260
vpermd %ymm5, %ymm14, %ymm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xa, %xmm5, %ecx
testb $0x1, %cl
je 0x56cc6c
vpextrb $0x2, %xmm11, 0x13(%rax,%r8)
vextracti128 $0x1, %ymm0, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpxor %xmm0, %xmm9, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpacksswb %xmm0, %xmm0, %xmm0
vpextrb $0xb, %xmm0, %ecx
testb $0x1, %cl
je 0x56cc95
vpextrb $0x3, %xmm11, 0x14(%rax,%r8)
vpor 0xc12a3(%rip), %ymm6, %ymm0 # 0x62df40
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastw %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xc, %xmm5, %ecx
testb $0x1, %cl
je 0x56ccde
vpextrb $0x4, %xmm11, 0x15(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastd %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xd, %xmm5, %ecx
testb $0x1, %cl
je 0x56cd20
vpextrb $0x5, %xmm11, 0x16(%rax,%r8)
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpackssdw %ymm0, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xe, %xmm5, %ecx
testb $0x1, %cl
je 0x56cd52
vpextrb $0x6, %xmm11, 0x17(%rax,%r8)
vpshufhw $0x84, %ymm0, %ymm0     # ymm0 = ymm0[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm0, %xmm0
vpxor %xmm0, %xmm9, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpacksswb %xmm0, %xmm0, %xmm0
vpextrb $0xf, %xmm0, %ecx
testb $0x1, %cl
je 0x56cd7c
vpextrb $0x7, %xmm11, 0x18(%rax,%r8)
vpor 0xc119c(%rip), %ymm6, %ymm0 # 0x62df20
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpmovzxwd %xmm5, %ymm5    # ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x8, %xmm5, %ecx
testb $0x1, %cl
je 0x56cdbf
vpextrb $0x8, %xmm11, 0x19(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm7
vpcmpgtq %xmm5, %xmm7, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x9, %xmm5, %ecx
testb $0x1, %cl
je 0x56cdfb
vpextrb $0x9, %xmm11, 0x1a(%rax,%r8)
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpshuflw $0xe8, %ymm0, %ymm5     # ymm5 = ymm0[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0xc144f(%rip), %ymm5, %ymm5 # 0x62e260
vpermd %ymm5, %ymm14, %ymm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xa, %xmm5, %ecx
testb $0x1, %cl
vmovdqu 0x1e0(%rsp), %ymm7
je 0x56ce46
vpextrb $0xa, %xmm11, 0x1b(%rax,%r8)
vextracti128 $0x1, %ymm0, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpxor %xmm0, %xmm9, %xmm0
vpackssdw %xmm0, %xmm0, %xmm0
vpermq $0x55, %ymm0, %ymm0     # ymm0 = ymm0[1,1,1,1]
vpacksswb %ymm0, %ymm0, %ymm0
vextracti128 $0x1, %ymm0, %xmm0
vpextrb $0xb, %xmm0, %ecx
testb $0x1, %cl
je 0x56ce7b
vpextrb $0xb, %xmm11, 0x1c(%rax,%r8)
vpor 0xc107d(%rip), %ymm6, %ymm0 # 0x62df00
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm6
vpcmpgtq %xmm5, %xmm6, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xc, %xmm5, %ecx
testb $0x1, %cl
je 0x56cebf
vpextrb $0xc, %xmm11, 0x1d(%rax,%r8)
vpxor %xmm4, %xmm13, %xmm5
vpxor %xmm0, %xmm13, %xmm6
vpcmpgtq %xmm5, %xmm6, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm9, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xd, %xmm5, %ecx
testb $0x1, %cl
je 0x56cefc
vpextrb $0xd, %xmm11, 0x1e(%rax,%r8)
vpxor %ymm0, %ymm10, %ymm0
vpcmpgtq %ymm1, %ymm0, %ymm0
vpackssdw %ymm0, %ymm0, %ymm1
vpxor 0xc134f(%rip), %ymm1, %ymm1 # 0x62e260
vpackssdw %ymm1, %ymm0, %ymm1
vpacksswb %ymm1, %ymm0, %ymm1
vextracti128 $0x1, %ymm1, %xmm1
vpextrb $0xe, %xmm1, %ecx
testb $0x1, %cl
vmovdqu 0x1c0(%rsp), %ymm5
je 0x56cf3b
vpextrb $0xe, %xmm11, 0x1f(%rax,%r8)
vpshufhw $0x84, %ymm0, %ymm0     # ymm0 = ymm0[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor 0xc1318(%rip), %ymm0, %ymm0 # 0x62e260
vpackssdw %ymm0, %ymm0, %ymm0
vpacksswb %ymm0, %ymm0, %ymm0
vextracti128 $0x1, %ymm0, %xmm0
vpextrb $0xf, %xmm0, %ecx
testb $0x1, %cl
je 0x56cf69
vpextrb $0xf, %xmm11, 0x20(%rax,%r8)
addq $0x20, %r8
vmovdqu 0xc0(%rsp), %ymm1
vpaddd %ymm1, %ymm5, %ymm5
vpaddd %ymm1, %ymm8, %ymm8
vmovdqu 0x70(%rsp), %ymm0
vpaddd %ymm1, %ymm0, %ymm0
vmovdqu %ymm0, 0x70(%rsp)
vpaddd %ymm1, %ymm7, %ymm7
cmpq %r8, %r9
jne 0x56c73b
movq %rbp, 0x70(%rsp)
leal -0x1(%rbp), %ecx
movl 0x40(%rsp), %r10d
movq 0x18(%rsp), %r9
shlq $0x5, %r9
xorl %esi, %esi
shlq $0x5, %rcx
movl $0xffffff80, %r8d       # imm = 0xFFFFFF80
movq %r10, 0x90(%rsp)
shlq $0x5, %r10
vmovdqu 0x260(%rsp), %ymm8
vmovdqa %ymm8, %ymm0
vmovdqu 0x240(%rsp), %ymm9
vmovdqa %ymm9, %ymm1
movl 0xc(%rsp), %ebp
vmovdqu 0x200(%rsp), %ymm2
movq %r14, %r13
movq %rbx, %r14
vmovdqa (%r13,%rcx), %ymm4
vinserti128 $0x1, %xmm4, %ymm0, %ymm5
vpalignr $0xf, %ymm5, %ymm4, %ymm4 # ymm4 = ymm5[15],ymm4[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm5[31],ymm4[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
movq 0x30(%rsp), %r11
movq 0x10(%r11), %r11
movq 0x38(%rsp), %rbx
movzbl (%rbx,%rsi), %ebx
movslq (%r11,%rbx,4), %rbx
movq 0x18(%rsp), %r11
imulq %rbx, %r11
shlq $0x5, %r11
addq 0x60(%rsp), %r11
vpinsrb $0x0, (%rax,%rsi), %xmm4, %xmm5
vpblendd $0xf, %ymm5, %ymm4, %ymm5 # ymm5 = ymm5[0,1,2,3],ymm4[4,5,6,7]
xorl %ebx, %ebx
vmovdqa %ymm8, %ymm4
vpaddsb (%r11,%rbx), %ymm5, %ymm5
vmovdqa (%r15,%rbx), %ymm6
vpmaxsb %ymm4, %ymm6, %ymm7
vpmaxsb %ymm7, %ymm5, %ymm5
vmovdqa %ymm5, (%r14,%rbx)
vpmaxsb %ymm5, %ymm0, %ymm0
vpminsb %ymm6, %ymm1, %ymm1
vpminsb %ymm4, %ymm1, %ymm1
vpminsb %ymm5, %ymm1, %ymm1
vpsubsb %ymm2, %ymm5, %ymm5
vpsubsb %ymm3, %ymm6, %ymm6
vpmaxsb %ymm5, %ymm6, %ymm6
vmovdqa %ymm6, (%r15,%rbx)
vpsubsb %ymm3, %ymm4, %ymm4
vpmaxsb %ymm5, %ymm4, %ymm4
vmovdqa (%r13,%rbx), %ymm5
addq $0x20, %rbx
cmpq %rbx, %r9
jne 0x56d044
xorl %r11d, %r11d
movsbl 0x1(%rax,%rsi), %ebx
subl 0x10(%rsp), %ebx
cmpl $-0x7f, %ebx
cmovll %r8d, %ebx
vinserti128 $0x1, %xmm4, %ymm0, %ymm5
vpalignr $0xf, %ymm5, %ymm4, %ymm4 # ymm4 = ymm5[15],ymm4[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm5[31],ymm4[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpinsrb $0x0, %ebx, %xmm4, %xmm5
vpblendd $0xf, %ymm5, %ymm4, %ymm4 # ymm4 = ymm5[0,1,2,3],ymm4[4,5,6,7]
xorl %ebx, %ebx
vpmaxsb (%r14,%rbx), %ymm4, %ymm5
vmovdqa %ymm5, (%r14,%rbx)
vpminsb %ymm5, %ymm1, %ymm1
vpmaxsb %ymm5, %ymm0, %ymm0
vpsubsb %ymm2, %ymm5, %ymm5
vpsubsb %ymm3, %ymm4, %ymm4
vpcmpgtb %ymm5, %ymm4, %ymm5
vpmovmskb %ymm5, %r12d
testl %r12d, %r12d
je 0x56d10a
addq $0x20, %rbx
cmpq %rbx, %r9
jne 0x56d0cd
incl %r11d
cmpl $0x20, %r11d
jne 0x56d0a3
vmovdqa (%r14,%r10), %ymm4
cmpl $0x1e, %ebp
jg 0x56d133
xorl %r11d, %r11d
movq 0x58(%rsp), %rbx
vperm2i128 $0x28, %ymm4, %ymm4, %ymm5 # ymm5 = zero,zero,ymm4[0,1]
vpalignr $0xf, %ymm5, %ymm4, %ymm4 # ymm4 = ymm5[15],ymm4[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm5[31],ymm4[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
incl %r11d
cmpl %edx, %r11d
jl 0x56d11d
jmp 0x56d138
movq 0x58(%rsp), %rbx
vextracti128 $0x1, %ymm4, %xmm4
vpextrb $0xf, %xmm4, %r11d
movsbl %r11b, %r11d
movq 0x10(%rbx), %rbx
movq (%rbx), %rbx
movl %r11d, (%rbx,%rsi,4)
incq %rsi
movq %r13, %rbx
cmpq %rdi, %rsi
jne 0x56cff0
movq 0x70(%rsp), %rcx
leal (,%rcx,4), %edi
leal (,%rcx,8), %r11d
shll $0x4, %ecx
movq %rcx, 0x70(%rsp)
movq 0x18(%rsp), %r10
leaq (%r10,%r10,8), %rcx
leaq (%rcx,%rcx,2), %rcx
addq %r10, %rcx
movq %rcx, 0x10(%rsp)
imulq $0x7c, %r10, %rcx
movq %rcx, 0x1e0(%rsp)
imulq $0x78, %r10, %rcx
movq %rcx, 0x1c0(%rsp)
imulq $0x74, %r10, %rcx
movq %rcx, 0x1a0(%rsp)
imulq $0x70, %r10, %rcx
movq %rcx, 0x38(%rsp)
imulq $0x6c, %r10, %rcx
movq %rcx, 0x30(%rsp)
imulq $0x68, %r10, %rcx
movq %rcx, 0x60(%rsp)
imulq $0x64, %r10, %rcx
movq %rcx, 0x180(%rsp)
imulq $0x5c, %r10, %rcx
movq %rcx, 0x160(%rsp)
movl %r10d, %esi
shll $0x4, %esi
leaq (%rsi,%rsi,4), %rcx
movq %rcx, 0x140(%rsp)
movq %r10, %rcx
shlq $0x6, %rcx
leaq (%rsi,%rsi,2), %rsi
movq %rsi, 0x120(%rsp)
imulq $0x58, %r10, %rsi
movq %rsi, 0x100(%rsp)
imulq $0x54, %r10, %rsi
movq %rsi, 0xe0(%rsp)
imulq $0x4c, %r10, %rsi
movq %rsi, 0xc0(%rsp)
leal (,%r10,8), %esi
leal (,%r10,4), %r8d
imulq $0x3c, %r10, %rbx
movq %rbx, 0x220(%rsp)
imulq $0x38, %r10, %rbx
movq %rbx, 0x28(%rsp)
imulq $0x34, %r10, %rbx
movq %rbx, 0x50(%rsp)
imulq $0x2c, %r10, %r10
movq %r10, 0x48(%rsp)
leaq (%rsi,%rsi,8), %r10
movq %r10, 0x40(%rsp)
leaq (%rsi,%rsi,4), %rsi
movq %rsi, 0x200(%rsp)
movq %rcx, 0x18(%rsp)
addq %r8, %rcx
movq %rcx, 0xb8(%rsp)
leaq (%r8,%r8,8), %rcx
movq %rcx, 0xb0(%rsp)
leaq (%rdi,%rdi,2), %rcx
movq %rcx, 0xa8(%rsp)
leaq (%rdi,%rdi,4), %rcx
movq %rcx, 0xa0(%rsp)
movq %r11, %r8
leaq (%r11,%r11,2), %rcx
movq %rcx, 0x98(%rsp)
leaq (%r9,%r9,2), %rsi
xorl %r12d, %r12d
movq 0x58(%rsp), %r11
movq 0x10(%r11), %r10
movq 0x8(%r10), %r10
vmovdqa (%r14,%r12,8), %xmm3
vmovdqa 0x10(%r14,%r12,8), %xmm2
vmovd %xmm3, %ebx
movsbl %bl, %ebx
movl %ebx, (%r10,%r12)
vpextrb $0x1, %xmm3, %ebx
addq %r12, %r10
movsbl %bl, %ebx
vpextrb $0x2, %xmm3, %ecx
movl %ebx, (%rdi,%r10)
movsbl %cl, %ecx
vpextrb $0x3, %xmm3, %ebx
movl %ecx, (%r8,%r10)
movsbl %bl, %ecx
vpextrb $0x4, %xmm3, %ebx
movq 0xa8(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0x5, %xmm3, %ebx
movq 0x70(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0x6, %xmm3, %ebx
movq 0xa0(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0x7, %xmm3, %ebx
movq 0x98(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0x8, %xmm3, %ebx
movq 0x10(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0x9, %xmm3, %ebx
movl %ecx, (%r9,%r10)
movsbl %bl, %ecx
vpextrb $0xa, %xmm3, %ebx
movq 0xb0(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0xb, %xmm3, %ebx
movq 0x200(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0xc, %xmm3, %ebx
movq 0x48(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0xd, %xmm3, %ebx
movq 0x120(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0xe, %xmm3, %ebx
movq 0x50(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
vpextrb $0xf, %xmm3, %ebx
movq 0x28(%rsp), %rbp
movl %ecx, (%rbp,%r10)
movsbl %bl, %ecx
movq 0x220(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vmovd %xmm2, %ecx
movsbl %cl, %ecx
movq 0x18(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x1, %xmm2, %ecx
movsbl %cl, %ecx
movq 0xb8(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x2, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x40(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x3, %xmm2, %ecx
movsbl %cl, %ecx
movq 0xc0(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x4, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x140(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x5, %xmm2, %ecx
movsbl %cl, %ecx
movq 0xe0(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x6, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x100(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x7, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x160(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0x8, %xmm2, %ecx
movsbl %cl, %ecx
movl %ecx, (%rsi,%r10)
vpextrb $0x9, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x180(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0xa, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x60(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0xb, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x30(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0xc, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x38(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0xd, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x1a0(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0xe, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x1c0(%rsp), %rbx
movl %ecx, (%rbx,%r10)
vpextrb $0xf, %xmm2, %ecx
movsbl %cl, %ecx
movq 0x1e0(%rsp), %rbx
movl %ecx, (%rbx,%r10)
addq $0x4, %r12
cmpq %r12, %rdi
jne 0x56d2ce
movq 0x90(%rsp), %rcx
shlq $0x5, %rcx
vmovdqa (%r14,%rcx), %ymm2
cmpl $0x1e, 0xc(%rsp)
movq %r11, %rbx
jg 0x56d58a
xorl %ecx, %ecx
movl 0x24(%rsp), %esi
vperm2i128 $0x28, %ymm2, %ymm2, %ymm3 # ymm3 = zero,zero,ymm2[0,1]
vpalignr $0xf, %ymm3, %ymm2, %ymm2 # ymm2 = ymm3[15],ymm2[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm3[31],ymm2[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
incl %ecx
cmpl %edx, %ecx
jl 0x56d576
jmp 0x56d58e
movl 0x24(%rsp), %esi
vpcmpgtb %ymm1, %ymm8, %ymm1
vpcmpgtb %ymm9, %ymm0, %ymm0
vpor %ymm1, %ymm0, %ymm0
vpmovmskb %ymm0, %ecx
testl %ecx, %ecx
je 0x56d5af
orb $0x40, 0xc(%rbx)
xorl %ecx, %ecx
xorl %esi, %esi
xorl %edx, %edx
jmp 0x56d5bf
vextracti128 $0x1, %ymm2, %xmm0
vpextrb $0xf, %xmm0, %ecx
movl 0x6c(%rsp), %edx
movsbl %cl, %ecx
movl %ecx, (%rbx)
movl %edx, 0x4(%rbx)
movl %esi, 0x8(%rbx)
movq %rax, %rdi
vzeroupper
callq 0x20a60d
movq %r15, %rdi
callq 0x20a60d
movq %r13, %rdi
callq 0x20a60d
movq %r14, %rdi
callq 0x20a60d
jmp 0x56d627
callq 0x1f2ba7
jmp 0x56d625
callq 0x1f2b81
jmp 0x56d625
callq 0x1f2b5b
jmp 0x56d625
callq 0x1f2b35
jmp 0x56d625
callq 0x1f2b0f
jmp 0x56d625
callq 0x1f2ae9
jmp 0x56d625
callq 0x1f2ac3
jmp 0x56d625
callq 0x1f2a9d
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x288, %rsp            # imm = 0x288
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq