import base64

# Encrypted parts from the JavaScript
_0xpart1 = [0x55, 0x6a, 0x49, 0x35, 0x64, 0x6c, 0x70, 0x44, 0x51, 0x6b]
_0xpart2 = [0x4b, 0x10, 0x7, 0x35, 0x78, 0x6c, 0xc, 0x6, 0x51, 0xa]
_0xpart3 = [0x74, 0x69, 0x4d, 0x6b, 0x6c, 0x6f, 0x53, 0x55, 0x56, 0x61]
_0xpart4 = [0x8, 0xa1, 0x2dc, 0x35, 0x82, 0x1, 0x84, 0x44, 0x1, 0x7]
_0xpart5 = [0x63, 0x31, 0x6c, 0x58, 0x59, 0x32, 0x64, 0x68, 0x57, 0x45]
_0xpart6 = [0x5, 0x6a, 0x49, 0x5, 0x79, 0x80, 0x70, 0x6, 0x51, 0x11, 0x79]
_0xpart7 = [0x31, 0x6e, 0x56, 0x46, 0x5a, 0x4f, 0x53, 0x47, 0x56, 0x36, 0x52]
_0xpart8 = [0x5, 0x6a, 0x49, 0x36, 0x66, 0x6c, 0xb, 0x8, 0x1, 0x11, 0x84]
_0xpart9 = [0x6d, 0x5a, 0x4e, 0x56, 0x45, 0x49, 0x79, 0x55, 0x6c, 0x59, 0x35]
_0xpart10 = [0x56, 0x55, 0x30, 0x7a, 0x55, 0x6e, 0x6c, 0x4e, 0x57, 0x45]
_0xpart11 = [0x8, 0x74, 0x21, 0x17, 0x68, 0x1, 0x71, 0x44, 0x29, 0x7f]
_0xpart12 = [0x35, 0x6d, 0x55, 0x6d, 0x78, 0x57, 0x54, 0x32, 0x4a, 0x73, 0x62, 0x44, 0x6b, 0x3d]

# Combine chunks as per the JavaScript code: part1, part3, part5, part7, part9, part10, part12
_0xchunks = _0xpart1 + _0xpart3 + _0xpart5 + _0xpart7 + _0xpart9 + _0xpart10 + _0xpart12

print("Hex chunks:", [hex(x) for x in _0xchunks])

# Function from JavaScript: getGoodEncrypted
def getGoodEncrypted(data):
    result = []
    for byte in data:
        # Check if valid Base64 character
        # 0x41-0x5a (A-Z), 0x61-0x7a (a-z), 0x30-0x39 (0-9), 0x2b (+), 0x2f (/), 0x3d (=)
        if (0x41 <= byte <= 0x5a or
            0x61 <= byte <= 0x7a or
            0x30 <= byte <= 0x39 or
            byte == 0x2b or
            byte == 0x2f or
            byte == 0x3d):
            result.append(byte)
    return bytes(result)

# Function from JavaScript: hey_you_good (base64 decode)
def hey_you_good(encoded):
    return base64.b64decode(encoded)

# Get the good encrypted string
goodencrypted = getGoodEncrypted(_0xchunks)
print("\\nGood encrypted (Base64):", goodencrypted.decode('ascii'))

# First decode
first_decode = hey_you_good(goodencrypted)
print("\\nFirst decode:", first_decode)

# Second decode (double Base64)
try:
    second_decode = hey_you_good(first_decode)
    print("\\nSecond decode (FLAG):", second_decode.decode('ascii'))
except Exception as e:
    print("\\nError on second decode:", e)
    print("First decode is the flag:", first_decode.decode('ascii'))

PS C:\Users\ialle\Desktop\wargame\mics> python -u "c:\Users\ialle\Desktop\wargame\mics\tetris\decode_flag.py" Hex chunks: ['0x55', '0x6a', '0x49', '0x35', '0x64', '0x6c', '0x70', '0x44', '0x51', '0x6b', '0x74', '0x69', '0x4d', '0x6b', '0x6c', '0x6f', '0x53', '0x55', '0x56', '0x61', '0x63', '0x31', '0x6c', '0x58', '0x59', '0x32', '0x64', '0x68', '0x57', '0x45', '0x31', '0x6e', '0x56', '0x46', '0x5a', '0x4f', '0x53', '0x47', '0x56', '0x36', '0x52', '0x6d', '0x5a', '0x4e', '0x56', '0x45', '0x49', '0x79', '0x55', '0x6c', '0x59', '0x35', '0x56', '0x55', '0x30', '0x7a', '0x55', '0x6e', '0x6c', '0x4e', '0x57', '0x45', '0x35', '0x6d', '0x55', '0x6d', '0x78', '0x57', '0x54', '0x32', '0x4a', '0x73', '0x62', '0x44', '0x6b', '0x3d']

Good encrypted (Base64): UjI5dlpDQktiMkloSUVac1lXY2dhWE1nVFZOSGV6RmZNVEIyUlY5VU0zUnlNWE5mUmxWT2JsbDk=

First decode: b'R29vZCBKb2IhIEZsYWcgaXMgTVNHezFfMTB2RV9UM3RyMXNfRlVObll9'

Second decode (FLAG): Good Job! Flag is MSG{1_10vE_T3tr1s_FUNnY}