Function at 0x6292e258
Capabilities:
Encrypt data using rc4 ksa

Disassembly:
push ebp
push edi
push esi
push ebx
mov ebx, ecx
sub esp, 0x4c
mov eax, dword [ebx + 0x1064d8]
lea esi, [eax + 1]
lea eax, [ebx + 0x1064c8]
mov dword [ebx + 0x1064d8], esi
mov ecx, eax
mov dword [esp + 0x1c], eax
call method.OpenMPT::CSoundFile::PlayState.TicksOnRow___const
mov edx, eax
mov eax, dword [ebx + 0x753d0]
cmp esi, edx
jb 0x6292e999
shr eax, 0x13
mov ecx, ebx
and eax, 1
mov dword [esp + 4], eax
lea eax, [ebx + 0x1064c8]
mov dword [esp], eax
call method.OpenMPT::CSoundFile.NextRow_OpenMPT::CSoundFile::PlayState__bool__const
test byte [ebx + 0x753d0], 0x20
push ecx
push ecx
mov byte [esp + 0x23], al
jne 0x6292e40c
movzx eax, byte [ebx + 0x76418]
imul eax, eax, 0x2c
add eax, dword [ebx + 0x76408]
movzx edx, word [ebx + 0x106510]
mov ecx, dword [eax]
mov esi, dword [eax + 4]
sub esi, ecx
mov eax, 0xffff
sar esi, 1
cmp edx, esi
jae 0x6292e2eb
movzx eax, word [ecx + edx*2]
mov edx, dword [ebx + 0x763f8]
mov ecx, dword [ebx + 0x763fc]
sub ecx, edx
mov word [ebx + 0x10650e], ax
sar ecx, 6
cmp ax, cx
jae 0x6292e31d
shl eax, 6
add eax, edx
mov edi, dword [eax]
cmp dword [eax + 4], edi
jne 0x6292e31d
mov word [ebx + 0x10650e], 0xfffe
mov edx, dword [ebx + 0x763fc]
mov ax, word [ebx + 0x10650e]
sub edx, dword [ebx + 0x763f8]
sar edx, 6
cmp ax, dx
jb 0x6292e3ff
movzx ecx, byte [ebx + 0x76418]
imul ecx, ecx, 0x2c
add ecx, dword [ebx + 0x76408]
mov esi, dword [ecx]
mov edx, dword [ecx + 4]
sub edx, esi
sar edx, 1
inc ax
je 0x6292e373
movzx edi, word [ebx + 0x106510]
mov eax, edi
cmp edi, edx
jae 0x6292e373
inc eax
mov word [ebx + 0x106510], ax
jmp 0x6292e2be
mov ax, word [ecx + 0x28]
test ax, ax
jne 0x6292e3ad
mov edi, dword [ebx + 0x106510]
test di, di
je 0x6292e3ad
movzx ebp, di
cmp ebp, edx
ja 0x6292e3ad
lea eax, [edi - 1]
movzx edi, ax
add edi, edi
add edi, esi
test ax, ax
je 0x6292e3ad
sub edi, 2
cmp word [edi + 2], 0xffff
jne 0x6292e3aa
inc eax
jmp 0x6292e3ad
dec eax
jmp 0x6292e398
and dword [ebx + 0x753d0], 0xfff7ffff
mov word [ebx + 0x106510], ax
movzx edi, word [ebx + 0x106510]
mov eax, edi
cmp edi, edx
jae 0x6292e3ed
cmp word [esi + edi*2], 0xfffe
jne 0x6292e3dc
inc eax
mov word [ebx + 0x106510], ax
jmp 0x6292e3be
mov dword [esp], edi
call method.OpenMPT::ModSequence.IsValidPat_unsigned_short__const
test al, al
push edx
jne 0x6292e2be
lea ecx, [ebx + 0x13cf70]
mov dword [esp], 1
jmp 0x6292e5c0
mov eax, dword [ebx + 0x106510]
mov word [ebx + 0x106512], ax
movzx esi, word [ebx + 0x10650e]
lea eax, [ebx + 0x763f8]
mov dword [esp], esi
mov ecx, eax
mov dword [esp + 0x24], eax
call method.OpenMPT::CPatternContainer.IsValidPat_unsigned_short__const
test al, al
push edx
je 0x6292e992
shl esi, 6
add esi, dword [ebx + 0x763f8]
mov eax, dword [esi + 0xc]
cmp dword [ebx + 0x1064f8], eax
jb 0x6292e44e
mov dword [ebx + 0x1064f8], 0
cmp dword [ebx + 0x75410], 0xffffffff
je 0x6292e464
test byte [ebx + 0x753d0], 0x20
jne 0x6292e6e9
lea eax, [ebx + 0x13cf70]
lea edi, [ebx + 0x106730]
mov dword [esp + 0x18], eax
lea eax, [esp + 0x38]
mov dword [esp + 8], eax
mov eax, dword [ebx + 0x1064f8]
movzx esi, byte [esp + 0x23]
mov dword [esp + 4], eax
mov dword [esp + 0xc], esi
movzx eax, word [ebx + 0x106510]
lea ecx, [ebx + 0x13cf70]
mov dword [esp], eax
mov dword [esp + 0x38], edi
mov dword [esp + 0x3c], 0x100
call method.OpenMPT::RowVisitor.Visit_unsigned_short__unsigned_int__mpt::mpt_libopenmpt::span_OpenMPT::ModChannel_const__const__bool_
sub esp, 0x10
test al, al
je 0x6292e6e9
mov eax, dword [ebx + 0x75410]
test eax, eax
je 0x6292e520
jle 0x6292e4ce
dec eax
mov dword [ebx + 0x75410], eax
lea ecx, [ebx + 0x13cf70]
mov dword [esp], 1
call method.OpenMPT::RowVisitor.Initialize_bool_
lea ecx, [ebx + 0x13cf70]
push eax
mov dword [esp + 0xc], esi
mov dword [esp + 0x38], edi
lea eax, [esp + 0x38]
mov dword [esp + 0x3c], 0x100
mov dword [esp + 8], eax
mov eax, dword [ebx + 0x1064f8]
mov dword [esp + 4], eax
movzx eax, word [ebx + 0x106510]
mov dword [esp], eax
call method.OpenMPT::RowVisitor.Visit_unsigned_short__unsigned_int__mpt::mpt_libopenmpt::span_OpenMPT::ModChannel_const__const__bool_
sub esp, 0x10
jmp 0x6292e6e9
test byte [ebx + 0x753d2], 0x40
je 0x6292e5b5
lea eax, [ebx + 0x1064f8]
mov dword [esp + 8], 1
mov dword [esp + 4], eax
lea eax, [ebx + 0x106510]
mov dword [esp], eax
lea ecx, [ebx + 0x13cf70]
call method.OpenMPT::RowVisitor.GetFirstUnvisitedRow_unsigned_short__unsigned_int__bool__const
sub esp, 0xc
test al, al
jne 0x6292e5eb
mov eax, dword [ebx + 0x7640c]
mov dword [ebx + 0x106510], 0
sub eax, dword [ebx + 0x76408]
mov dword [ebx + 0x1064f8], 0
sar eax, 2
mov dword [ebx + 0x1064fc], 0
imul eax, eax, 0xba2e8ba3
movzx ebp, byte [ebx + 0x76418]
movzx eax, al
dec eax
mov edx, ebp
lea ecx, [ebx + 0x76408]
cmp ebp, eax
jl 0x6292e5cb
mov dword [esp], 0
call method.OpenMPT::ModSequenceSet.SetSequence_unsigned_char_
push eax
mov dword [esp], 1
mov ecx, dword [esp + 0x18]
call method.OpenMPT::RowVisitor.Initialize_bool_
push eax
jmp 0x6292e992
inc edx
movzx edx, dl
mov dword [esp], edx
call method.OpenMPT::ModSequenceSet.SetSequence_unsigned_char_
lea ecx, [ebx + 0x13cf70]
push ebp
mov dword [esp], 1
call method.OpenMPT::RowVisitor.Initialize_bool_
push eax
call method.OpenMPT::CSoundFile.GetChannelMuteFlag__
xor ebp, ebp
lea edx, [ebx + 0x106730]
mov dword [esp + 0xc], eax
mov dword [esp + 8], ebp
mov ecx, edx
mov dword [esp + 4], ebx
mov dword [esp], 7
mov dword [esp + 0x2c], eax
mov dword [esp + 0x28], edx
call method.OpenMPT::ModChannel.Reset_OpenMPT::ModChannel::ResetFlags__OpenMPT::CSoundFile_const__unsigned_short__OpenMPT::ChannelFlags_
sub esp, 0x10
inc ebp
mov edx, dword [esp + 0x28]
mov eax, dword [esp + 0x2c]
add edx, 0x368
cmp ebp, 0x100
jne 0x6292e5f8
mov ecx, ebx
call method.OpenMPT::CSoundFile.StopAllVsti__
mov eax, dword [ebx + 0x753c4]
movzx edx, byte [ebx + 0x76418]
imul edx, edx, 0x2c
add edx, dword [ebx + 0x76408]
mov dword [ebx + 0x1064f0], eax
mov eax, dword [ebx + 0x753cc]
mov ecx, dword [ebx + 0x1064f8]
mov ebp, dword [edx]
mov dword [ebx + 0x1064f4], eax
mov edx, dword [edx + 4]
mov eax, dword [ebx + 0x753c8]
sub edx, ebp
mov dword [ebx + 0x106518], eax
movzx eax, word [ebx + 0x106510]
sar edx, 1
mov word [ebx + 0x106512], ax
mov dword [ebx + 0x1064fc], ecx
cmp eax, edx
jae 0x6292e6a2
mov dx, word [ebp + eax*2]
mov word [ebx + 0x10650e], dx
lea edx, [esp + 0x38]
mov dword [esp + 0xc], esi
mov dword [esp + 8], edx
mov dword [esp + 4], ecx
mov dword [esp], eax
mov ecx, dword [esp + 0x18]
mov dword [esp + 0x38], edi
mov dword [esp + 0x3c], 0x100
call method.OpenMPT::RowVisitor.Visit_unsigned_short__unsigned_int__mpt::mpt_libopenmpt::span_OpenMPT::ModChannel_const__const__bool_
movzx eax, word [ebx + 0x10650e]
sub esp, 0x10
mov dword [esp], eax
mov ecx, dword [esp + 0x24]
call method.OpenMPT::CPatternContainer.IsValidPat_unsigned_short__const
test al, al
push esi
je 0x6292e992
mov eax, dword [ebx + 0x753d0]
mov ecx, ebx
shr eax, 5
and eax, 1
mov dword [esp + 4], eax
mov eax, dword [esp + 0x1c]
mov dword [esp], eax
call method.OpenMPT::CSoundFile.SetupNextRow_OpenMPT::CSoundFile::PlayState__bool__const
mov edi, dword [ebx + 0x1064f8]
movzx ebp, word [ebx + 0x10650e]
shl ebp, 6
push ecx
add ebp, dword [ebx + 0x763f8]
push ecx
mov ecx, ebp
call method.OpenMPT::CPattern.GetNumChannels___const
movzx esi, ax
imul edi, esi
movzx eax, word [ebx + 0x753bc]
imul esi, edi, 6
imul eax, eax, 0x368
add esi, dword [ebp]
lea ebp, [ebx + 0x106730]
add eax, ebp
mov dword [esp + 0x24], eax
cmp ebp, dword [esp + 0x24]
je 0x6292e973
lea edi, [ebx + 0x106490]
lea ecx, [esp + 0x38]
mov dword [esp + 0x38], edi
mov dword [esp + 0x3c], 0x12
call method.std::bitset_122u_::reference.operator_bool___const
test al, al
je 0x6292e7b6
cmp byte [ebp + 0x325], 1
jne 0x6292e7b6
mov al, byte [esi + 3]
sub eax, 2
cmp al, 1
ja 0x6292e7b6
mov eax, dword [ebp + 0x2c0]
mov ecx, ebx
mov dword [esp + 8], eax
movsx eax, word [ebp + 0x304]
mov dword [esp + 4], eax
movzx eax, byte [ebp + 0x320]
mov dword [esp], eax
call method.OpenMPT::CSoundFile.GetPeriodFromNote_unsigned_int__int__unsigned_int__const
sub esp, 0xc
mov dword [ebp + 0x2bc], eax
lea ecx, [esp + 0x38]
mov dword [esp + 0x38], edi
mov dword [esp + 0x3c], 0x1b
call method.std::bitset_122u_::reference.operator_bool___const
test al, al
je 0x6292e83a
mov ecx, esi
call method.OpenMPT::ModCommand.IsNote___const
test al, al
jne 0x6292e83a
lea ecx, [ebp + 0x314]
call method.OpenMPT::ModCommand.IsNote___const
test al, al
je 0x6292e83a
cmp byte [ebp + 0x317], 0x13
jne 0x6292e83a
mov al, byte [ebp + 0x319]
mov cl, al
and ecx, 0xfffffff0
cmp cl, 0xd0
jne 0x6292e83a
and eax, 0xf
cmp eax, dword [ebx + 0x1064f0]
jb 0x6292e83a
mov dword [esp + 8], 0
mov ecx, ebx
movsx eax, word [ebp + 0x304]
mov dword [esp + 4], eax
movzx eax, byte [ebp + 0x314]
mov dword [esp], eax
call method.OpenMPT::CSoundFile.GetPeriodFromNote_unsigned_int__int__unsigned_int__const
sub esp, 0xc
mov dword [ebp + 0x2bc], eax
lea eax, [ebx + 0x106494]
lea ecx, [esp + 0x38]
mov dword [esp + 0x38], eax
mov dword [esp + 0x3c], 0x16
call method.std::bitset_122u_::reference.operator_bool___const
test al, al
je 0x6292e8a2
mov ecx, esi
call method.OpenMPT::ModCommand.IsNote___const
test al, al
jne 0x6292e8a2
test byte [ebp + 0x59], 2
je 0x6292e8a2
mov eax, dword [ebp + 0x2c4]
mov dword [esp + 0x18], eax
test eax, eax
je 0x6292e8a2
lea ecx, [ebp + 0x314]
mov dword [esp + 0x28], ecx
call method.OpenMPT::ModCommand.IsNote___const
test al, al
je 0x6292e8a2
mov ecx, dword [esp + 0x28]
call method.OpenMPT::ModCommand.IsPortamento___const
test al, al
je 0x6292e8a2
mov eax, dword [esp + 0x18]
mov dword [ebp + 0x2bc], eax
lea ecx, [esp + 0x30]
mov dword [esp + 0x30], edi
mov dword [esp + 0x34], 0x1c
call method.std::bitset_122u_::reference.operator_bool___const
lea edi, [ebx + 0x106488]
test al, al
je 0x6292e908
lea ecx, [esp + 0x38]
mov dword [esp + 0x38], edi
mov dword [esp + 0x3c], 5
call method.std::bitset_122u_::reference.operator_bool___const
test al, al
jne 0x6292e908
cmp dword [ebx + 0x1064f0], 1
jne 0x6292e908
cmp byte [ebp + 0x317], 0x11
jne 0x6292e908
movzx eax, byte [ebp + 0x319]
test al, al
jne 0x6292e8fc
mov eax, 1
imul eax, eax, 0x2710
mov dword [ebx + 0x1064f4], eax
mov eax, dword [esi]
lea ecx, [esp + 0x38]
mov dword [ebp + 0x314], eax
mov ax, word [esi + 4]
mov dword [esp + 0x38], edi
and dword [ebp + 0x58], 0xfff9ffff
mov word [ebp + 0x318], ax
mov eax, dword [ebp + 0x2a4]
mov dword [ebp + 0x18], eax
mov eax, dword [ebp + 0x2a0]
mov dword [ebp + 0x14], eax
mov dword [esp + 0x3c], 0x15
call method.std::bitset_122u_::reference.operator_bool___const
test al, al
jne 0x6292e954
mov byte [ebp + 0x33f], 0
mov byte [ebp + 0x325], 0
mov dword [ebp + 0x35c], 0
add esi, 6
add ebp, 0x368
jmp 0x6292e74b
mov ecx, ebx
call method.OpenMPT::CSoundFile.UpdateTimeSignature__
cmp byte [esp + 0x23], 0
je 0x6292e999
mov eax, dword [ebx + 0x1064f0]
mov dword [ebx + 0x1064d8], eax
jmp 0x6292e261
xor eax, eax
jmp 0x6292ea27
cmp dword [ebx + 0x1064f0], 0
jne 0x6292e9ac
mov dword [ebx + 0x1064f0], 1
mov edi, dword [ebx + 0x1064d8]
mov ecx, dword [ebx + 0x753d0]
test edi, edi
je 0x6292ea11
mov esi, ecx
mov eax, dword [ebx + 0x753b4]
and esi, 0xffffefff
test eax, 0x100004
mov dword [ebx + 0x753d0], esi
jne 0x6292ea20
dec eax
jne 0x6292e9e0
bt ecx, 0x15
jae 0x6292ea20
mov ecx, dword [esp + 0x1c]
call method.OpenMPT::CSoundFile::PlayState.TicksOnRow___const
cmp edi, eax
jae 0x6292ea20
mov ecx, dword [ebx + 0x1064e0]
xor edx, edx
add ecx, dword [ebx + 0x1064f0]
mov eax, edi
div ecx
test edx, edx
jne 0x6292ea20
or esi, 0x1000
mov dword [ebx + 0x753d0], esi
jmp 0x6292ea20
and ecx, 0xfff7ffff
or ch, 0x10
mov dword [ebx + 0x753d0], ecx
mov ecx, ebx
call method.OpenMPT::CSoundFile.ProcessEffects__
add esp, 0x4c
pop ebx
pop esi
pop edi
pop ebp
ret