// File: ctSkennerton[P]fxtract/util/scan.c
// Function: scanbrk
char const*
scanbrk(char const* tgt, char const* chrs)
{
    int         nchrs = strlen(chrs);
    if (nchrs != 2) return strpbrk(tgt, chrs);
    XMM         zero = {}, x;
    XMM         xp0 = xm_fill(chrs[0]), xp1 = xm_fill(chrs[1]);
    unsigned    z, d, f = 15 & (uintptr_t)tgt;

    // Initial unaligned chunk of tgt:
    if (f) {
        z = xm_same(x = xm_load(tgt - f), zero) >> f;
        d = ((xm_same(x, xp0) | xm_same(x, xp1)) >> f) & under(z);
        if (d) return tgt + ffs(d) - 1;
        if (z) return NULL;
        tgt += 16 - f;
    }

    // 16-byte aligned chunks of tgt:
    for (; !(z = xm_same(x = xm_load(tgt), zero)); tgt += 16)
        if ((d = xm_same(x, xp0) | xm_same(x, xp1)))
            return tgt + ffs(d) - 1;

    // Final 0..15 bytes of tgt:
    if ((d = (xm_same(x, xp0) | xm_same(x, xp1)) & under(z)))
        return tgt + ffs(d) - 1;

    return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x58(%rbp)
movq %rsi, -0x60(%rbp)
movq -0x60(%rbp), %rdi
callq 0x30d0
movl %eax, -0x64(%rbp)
cmpl $0x2, -0x64(%rbp)
je 0x95fb
movq -0x58(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0x3350
movq %rax, -0x50(%rbp)
jmp 0x9a95
xorps %xmm0, %xmm0
movaps %xmm0, -0x80(%rbp)
movq -0x60(%rbp), %rax
movb (%rax), %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
movb %al, -0xbe(%rbp)
movb %al, -0x21(%rbp)
movb %al, -0x22(%rbp)
movb %al, -0x23(%rbp)
movb %al, -0x24(%rbp)
movb %al, -0x25(%rbp)
movb %al, -0x26(%rbp)
movb %al, -0x27(%rbp)
movb %al, -0x28(%rbp)
movb %al, -0x29(%rbp)
movb %al, -0x2a(%rbp)
movb %al, -0x2b(%rbp)
movb %al, -0x2c(%rbp)
movb %al, -0x2d(%rbp)
movb %al, -0x2e(%rbp)
movb %al, -0x2f(%rbp)
movb %al, -0x30(%rbp)
movzbl -0x21(%rbp), %eax
movd %eax, %xmm0
movzbl -0x22(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
movzbl -0x23(%rbp), %eax
movd %eax, %xmm2
movzbl -0x24(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
punpcklwd %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
movzbl -0x25(%rbp), %eax
movd %eax, %xmm1
movzbl -0x26(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
movzbl -0x27(%rbp), %eax
movd %eax, %xmm3
movzbl -0x28(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
punpcklwd %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movzbl -0x29(%rbp), %eax
movd %eax, %xmm2
movzbl -0x2a(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
movzbl -0x2b(%rbp), %eax
movd %eax, %xmm3
movzbl -0x2c(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
punpcklwd %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
movzbl -0x2d(%rbp), %eax
movd %eax, %xmm0
movzbl -0x2e(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
movzbl -0x2f(%rbp), %eax
movd %eax, %xmm4
movzbl -0x30(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
punpcklwd %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movaps %xmm0, -0x40(%rbp)
movaps -0x40(%rbp), %xmm0
movaps %xmm0, -0xa0(%rbp)
movq -0x60(%rbp), %rax
movb 0x1(%rax), %al
movb %al, -0x42(%rbp)
movb -0x42(%rbp), %al
movb %al, -0xbd(%rbp)
movb %al, -0x1(%rbp)
movb %al, -0x2(%rbp)
movb %al, -0x3(%rbp)
movb %al, -0x4(%rbp)
movb %al, -0x5(%rbp)
movb %al, -0x6(%rbp)
movb %al, -0x7(%rbp)
movb %al, -0x8(%rbp)
movb %al, -0x9(%rbp)
movb %al, -0xa(%rbp)
movb %al, -0xb(%rbp)
movb %al, -0xc(%rbp)
movb %al, -0xd(%rbp)
movb %al, -0xe(%rbp)
movb %al, -0xf(%rbp)
movb %al, -0x10(%rbp)
movzbl -0x1(%rbp), %eax
movd %eax, %xmm0
movzbl -0x2(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
movzbl -0x3(%rbp), %eax
movd %eax, %xmm2
movzbl -0x4(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
punpcklwd %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
movzbl -0x5(%rbp), %eax
movd %eax, %xmm1
movzbl -0x6(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
movzbl -0x7(%rbp), %eax
movd %eax, %xmm3
movzbl -0x8(%rbp), %eax
movd %eax, %xmm1
punpcklbw %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
punpcklwd %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movzbl -0x9(%rbp), %eax
movd %eax, %xmm2
movzbl -0xa(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
movzbl -0xb(%rbp), %eax
movd %eax, %xmm3
movzbl -0xc(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
punpcklwd %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
movzbl -0xd(%rbp), %eax
movd %eax, %xmm0
movzbl -0xe(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
movzbl -0xf(%rbp), %eax
movd %eax, %xmm4
movzbl -0x10(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
punpcklwd %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movdqa %xmm0, -0x20(%rbp)
movdqa -0x20(%rbp), %xmm0
movdqa %xmm0, -0xb0(%rbp)
movq -0x58(%rbp), %rax
andq $0xf, %rax
movl %eax, -0xbc(%rbp)
cmpl $0x0, -0xbc(%rbp)
je 0x9940
movq -0x58(%rbp), %rdi
movl -0xbc(%rbp), %eax
movl %eax, %ecx
xorl %eax, %eax
subq %rcx, %rax
addq %rax, %rdi
callq 0x9af0
movdqa %xmm0, -0x90(%rbp)
movdqa -0x80(%rbp), %xmm1
callq 0x9ab0
movl -0xbc(%rbp), %ecx
shrl %cl, %eax
movl %eax, -0xb4(%rbp)
movdqa -0x90(%rbp), %xmm0
movdqa -0xa0(%rbp), %xmm1
callq 0x9ab0
movl %eax, -0xc8(%rbp)
movdqa -0x90(%rbp), %xmm0
movdqa -0xb0(%rbp), %xmm1
callq 0x9ab0
movl %eax, %ecx
movl -0xc8(%rbp), %eax
orl %ecx, %eax
movl -0xbc(%rbp), %ecx
shrl %cl, %eax
movl %eax, -0xc4(%rbp)
movl -0xb4(%rbp), %edi
callq 0x9b10
movl %eax, %ecx
movl -0xc4(%rbp), %eax
andl %ecx, %eax
movl %eax, -0xb8(%rbp)
cmpl $0x0, -0xb8(%rbp)
je 0x9912
movq -0x58(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl -0xb8(%rbp), %edi
callq 0x32f0
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x9a95
cmpl $0x0, -0xb4(%rbp)
je 0x9928
movq $0x0, -0x50(%rbp)
jmp 0x9a95
movl $0x10, %ecx
subl -0xbc(%rbp), %ecx
movq -0x58(%rbp), %rax
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
jmp 0x9942
movq -0x58(%rbp), %rdi
callq 0x9af0
movdqa %xmm0, -0x90(%rbp)
movdqa -0x80(%rbp), %xmm1
callq 0x9ab0
movl %eax, -0xb4(%rbp)
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x9974
jmp 0x99fe
movdqa -0x90(%rbp), %xmm0
movdqa -0xa0(%rbp), %xmm1
callq 0x9ab0
movl %eax, -0xd4(%rbp)
movdqa -0x90(%rbp), %xmm0
movdqa -0xb0(%rbp), %xmm1
callq 0x9ab0
movl %eax, %ecx
movl -0xd4(%rbp), %eax
orl %ecx, %eax
movl %eax, -0xb8(%rbp)
cmpl $0x0, %eax
je 0x99eb
movq -0x58(%rbp), %rax
movq %rax, -0xe0(%rbp)
movl -0xb8(%rbp), %edi
callq 0x32f0
movl %eax, %ecx
movq -0xe0(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x9a95
jmp 0x99ed
movq -0x58(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x58(%rbp)
jmp 0x9942
movdqa -0x90(%rbp), %xmm0
movdqa -0xa0(%rbp), %xmm1
callq 0x9ab0
movl %eax, -0xe8(%rbp)
movdqa -0x90(%rbp), %xmm0
movdqa -0xb0(%rbp), %xmm1
callq 0x9ab0
movl %eax, %ecx
movl -0xe8(%rbp), %eax
orl %ecx, %eax
movl %eax, -0xe4(%rbp)
movl -0xb4(%rbp), %edi
callq 0x9b10
movl %eax, %ecx
movl -0xe4(%rbp), %eax
andl %ecx, %eax
movl %eax, -0xb8(%rbp)
cmpl $0x0, %eax
je 0x9a8d
movq -0x58(%rbp), %rax
movq %rax, -0xf0(%rbp)
movl -0xb8(%rbp), %edi
callq 0x32f0
movl %eax, %ecx
movq -0xf0(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x9a95
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
addq $0xf0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)