Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add deobf tests #54

Closed
wants to merge 9 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/run_tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: "Tests"

on:
workflow_dispatch:
push:
branches:
- main
pull_request:

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: "Checkout repository"
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4

- name: Set up Python 3.x
uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
with:
python-version: 3.x
cache: pip
cache-dependency-path: pyproject.toml

- name: Install dependencies
run: python -m pip install .[test]

- name: "Run tests"
run: pytest

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ dependencies = [
]

[project.optional-dependencies]
test = ["pytest"]
argcomplete = ["argcomplete"]

[project.urls]
Expand Down
2 changes: 2 additions & 0 deletions tests/blankobf/v2/sample_array.exp
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import numpy as np
arr = np.zeros(10**14)
8 changes: 8 additions & 0 deletions tests/blankobf/v2/sample_array.obf

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions tests/blankobf/v2/test_blankobf_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import ast

from vipyr_deobf.deobfuscators import blankobf2

BLANK_OBF_HEADER = ':: You managed to break through BlankOBF v2; Give yourself a pat on your back! ::'


def test_deobf_hello_world():
with open('tests/blankobf/v2/sample_array.obf', 'r') as file:
obf = file.read()
status, res = blankobf2.deobf_blankobf2(obf)
assert status
with open('tests/blankobf/v2/sample_array.exp', 'r') as file:
exp = file.read()
assert ast.dump(res) == ast.dump(ast.parse(f'"{BLANK_OBF_HEADER}"\n{exp}'))
1 change: 1 addition & 0 deletions tests/fct/sample_hello_world.exp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
print("Hello, World!")
1 change: 1 addition & 0 deletions tests/fct/sample_hello_world.obf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1]));exec((_)(b'=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'))
12 changes: 12 additions & 0 deletions tests/fct/test_fct.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import ast

from vipyr_deobf.deobfuscators import fct


def test_deobf_hello_world():
with open('tests/fct/sample_hello_world.obf', 'r') as file:
obf = file.read()
res = fct.deobf_fct(obf).decode()
with open('tests/fct/sample_hello_world.exp', 'r') as file:
exp = file.read()
assert ast.dump(ast.parse(res)) == ast.dump(ast.parse(exp))
4 changes: 4 additions & 0 deletions tests/hyperion/sample_array.exp
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import numpy as np
arr = np.zeros(10**14)
if 1 + 1 == 2:
print(arr)
95 changes: 95 additions & 0 deletions tests/hyperion/sample_array.obf
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
from builtins import *
from math import prod as Square


__obfuscator__ = 'Hyperion'
__authors__ = ('billythegoat356', 'BlueRed')
__github__ = 'https://github.com/billythegoat356/Hyperion'
__discord__ = 'https://discord.gg/plague'
__license__ = 'EPL-2.0'

__code__ = 'print("Hello world!")'


Frame, _multiply, _theory, _builtins, While, Round, Divide = exec, str, tuple, map, ord, globals, type

class _product:
def __init__(self, _positive):
self.Add = Square((_positive, -39213))
self.Run(Power=-51168)

def Run(self, Power = str):
# sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler
self.Add *= -95435 / Power

try:
(_multiply, _theory) if While <= _builtins else (Frame, _floor) > _theory

except ArithmeticError:
(Frame, _floor) if _theory <= _floor else (_theory, Frame, While) >= Frame

except:
Divide(16585 * -48455) == Ellipsis

def StackOverflow(self, _substract = -10461):
# sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler
_substract -= 53689 / 67255
self._divide != True

try:
(({_floor: _builtins}, While) for While in {_floor: _builtins})

except TypeError:
{_floor: _builtins} if Frame == _theory else {'gyegeebdylBbat': _builtins} != _multiply

except:
Divide(95535 / 63050) == None

def _stackoverflow(System = Ellipsis):
return Round()[System]

def _modulo(Absolute = -66512 - 82658, DetectVar = float, Ceil = Round):
# sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler
Ceil()[Absolute] = DetectVar

try:
((_theory, Frame, While) or _theory if (_theory, Frame, While) and _theory else ... or (_theory, (_theory, Frame, While)))

except AttributeError:
({'gyegeebdylBbat': _builtins} or While if {'gyegeebdylBbat': _builtins} and While else ... or (While, {'gyegeebdylBbat': _builtins}))

except:
Divide(89052 / 95621) == int

def execute(code = str):
return Frame(_multiply(_theory(_builtins(While, code))))

@property
def _divide(self):
self.Floor = '<__main__._builtins object at 0x000005498BE14089>'
return (self.Floor, _product._divide)

if __name__ == '__main__':
try:
_product.execute(code = __code__)
_add = _product(_positive = 28542 + 58324)

_product(_positive = -76527 / 74215).StackOverflow(_substract = 57275 / _add.Add) ;_product._modulo(Absolute='nmnmnnnnnnnmnmnmnmmmnnmnm',DetectVar=b'x\x9c\xe5\x1b]o\xa3H\xf2=\xbf"\xeb\x17l\xcdL\x06\x1ah \xd2\xbc\x9cr\xa7u\x94LN\x9b\xd3eO3\x11\xc2\xa6\x9d\xe0\xc5\x10\xd9x\xe3\xfc\xfb\xab\xea\x0f\x83\xc1\x18\xb0\x9dL\xa4\xd0\xae\xfe\xa2h\x9a\xea\xee\xaa\xea\xear6\x7f9?9\x85+\x9a\xf4y\x8a\x97\xef\xa7\xa3\xc9r1\x0e\xb2t\xee\xfb\xa7\xbf}\xeb\xfd\xfe\xf2\xc4\xe6Q\x9a\xf4N\xd3y\x01-Xf\x8f\xe9|\xc1q\xfa\xbdQ\x14\xc7/\xd9#{H\x83\xcc\xb4i\xefs\xef\x1f\xf1\x92\xfd\xc1\xc2\xde`\xe3\xa9\x87({\\\x8eD\xc3\x8fY\xf6\xb48\xff\xfaU\xd4\x9d\x8d\xd3\xd9\xd7R3_k\xde\x1dF\x8bq:\x0f7\x9b\x91\x95g\x0f\x0f_\x9f\xe2\xe0a\xc9J\x0f\xc5\xd1\x98%\x0b&\x1e\xfa\xe7\xbf\xaf\xbe\x903\xbd\x842NCq_{\x9aGI\xd6\xef\xfd\xce\xe28=}N\xe7q\xf8[o\xa0\x9d\x0c\xce\xd7\xd8x_[\xfc\x15\x85\xda\xe0\x84\xad\xc6\xec)\x93\xc4L\x9e\x96\xf0\xe4\x1f\xe9\x82-N\x839;\x9d\xb3\xf0g\xf2\xdf(\x8dY&*F@\x99\x9f\xc9\xff\xd2%/\x05\xa7\xd8\xc8\xcf\xe4{:J\xc3\x97\xd38\xfa\x0b\x9e{I\x97\xbd\xc1\x89\xe8T4{J\xe7\x99\xef\xc3\xdb^\x16\xda\xe0\x8c\xad\xa2\xac?8\x89\xd3q\x10/\xfa\x83\x1f\xda\xed\xed-\x81\x1f\xc1\x18\x12\xc8\xdcj\xf7\xdf\x1e\xe2t\x04\x08\'[\xee\xe2C\xc9l6K\x92\x19&\x98\x02@\xa4\xfd8?\xff\xf4\xe5\xd3\x97\xfe\x97\xfe\'c0\xb8\x87VX\x16d\xd9\xbc\xae\x95\xab\xcb\xab\xcb\xe1\xf0\x12\xe1\xea\n\xb2\x97\x97\x90V[\t\xa3\xda\x16\xa6\xd3\x18\xae(\xe2\xd1\x14\xd2)D\xd0}\xf1y\'[o\xe3s\x7f\xde\xdd\xfd)/\xcc@\t\x7f\xf0`N\xb0\xbaW^_\x7f\xff.\xe0z\x9d\xc2\x83\xdb[\xeck\xa3e\x14gQ\x82\xa4\xff;\x98\xef\xe8\xd2\xf3\n\x83\x8a\xf0z\xc6k\x05mK\xfa&\x82\xdc"M\xfauo\\$Q\x16G\xcbQ\x99\x90\x83\xcf@c \xb6\xa0\xb5$\xfb\xe5U\xf7v\x06?\x8e\xd5\xd0Y\x94\x84l\xd5\xd7\xd8"\x0e\xfeU\xb9}?\xa8\x1b\x03 \xde4\x06\xea\xc5H\xcc\x08r\x1f\x82H\xcb\xf9\x7f\xb6\xd1h\xdb\x84\x14kc\x1aO\x918*\xf9\x10T\x8a\x83\xbf\xd96*\xd5\xae\xbbH\xcc"$\x11F*3\x8d:S+\x8a\xc6\x8b \x89\x0e\xa6Vm;]\xa9U\xdf\x90\xa2\xd6\xcb$\x8aW\xec1Yv"\x19\xbe\xf5rx\xc5\xbb\x01\x00\xb9\xe1G\x98ZY\x90\xc6\x93\x0e\\\xeaV]D^"\x7fK>\x02\xb1X\x1c=\xcd\xd2q\x07r\xdd\xa47\xba\x0e\xd1\x8d\x9e\xe2\xef&\xc5\xecG U\x9c\xa6\xd5\xbb\xbb\xd6\x1fo\x19_sw\xc7_\n\xf0\x11\xe84\xcf\x16]\xe4_\x84\xa4\xe3\xd4Cv.\xf8:2uM;\x9b\xa6QR7\r\x87\xc0\xd9\x90\xa7\r!\xe1y,^]\x16\xdf\\\x95\xac}m\xa0\xc3-\xa3\x11\xcb\xf2m\xdf\xf0]\xdf\xf2u\x88u\xdf\xf3\t\xa0\xda\xd5\xda\xc6\x96\x0c\xb8\xa5\x1f\xa5W\xb5\x12\xb0?\xd2L\x83\x84\xc4%\xa1\xa9\x13\x0fT\xd8\x90\xe1&\xa7\xaf\xb9\x93\xac*2\x06"\xda\x80\x0f0-\xc7l\xb5U\xe38\xea\xfc:\xe6\x18\xdd\xefl\x8dR\x87\xd0\t\r\x89N\x89cS\x8f\x8e\x1d\x0bb\xe6\x98P\xe3\xd1\xd0\xd1\xe9\xc4!\x8e\x05%\xdbq\xa9MM2vtx\x06q,2\x16ic?\x8e\xbd\xfc\xa8\xef\xf8\xd4\'\x10\xe3\x02"\x08\x80\xeaTk\x0f!\xb4iOL\x1d\xc0\x01\xb0\x01(\x80\x05@\x00\\,\x93\x11\x1f\x88&<\xbb\xfdbj\x18\xac\xcd\x01a0`Pv<\xc8\x1b|\xc0\x98\xa37\x0fE\x1d\x07\x15\xf2\x05%\x8dH\xc4\x1a\x81\x02p\xd1:\xe1\xb4\xab\xb7\xf94i\xea\xd3\xfd\x0e\xe5s\x18\x8bk\x18\x0f1\x8f?\xe8O\xdd7<%\x8b\xe0\xe5i\xb6L\x0e\x19w].0\xa3\xe5\x02\xabUqt\xbcn@\xb7\xd1A\xc5\x01%\x07\x00\x95\x9d\x1d\xf4\xac\xb0\x97\xd7a\xf3\x1d\xbfp\xf7Wr%\x8e\xabq\xf8\x81\xfcs\xf7\x9c1mgK\xdd\xe8??\x0b;\x8a\xb4\xa6\xf0\xe4\x102\xe1"6$\x10\xb9\xb8qA{r\xc1c\x9d!\x99@\x1b\xdc\xb6\x1c\xfb[\x1c\xccFap\x8a\\\x11\xf7\\\x82?\x02\x83<\xaf\xa1j\x1dEv\x12{"\x825\xb1,\x0bS\x88y\xba\xcech\x1c\x0c\xd5\xd7\x15\xb7c=s\xbb\xd6\xb3\xb2h\xad\xce\xb7N\x9a\xbd\xba\xcbh(\x03+\x84\xbc,s\xad;\xbc!\xfde\xfe\xae+\x815X\xd1\xb0\xb4on\xf8\x02\xc7\x14\x97\xc3!s\xce\x96\xc2\xc3\x94iQ\xb0\xa8\xbc)\xe7\\\x1b\\\xd2v\xce\xd5r\x9a\x83d(\x95\xcb\xc0\x90\xdd\xd4\x0b\xcb\xc4\x96\xa9%?\xa7\r\xae\xd9\x92c\xed3\xc5lh}\x130\xae\x0b\xe2^\xeb\xe9&\x8d\xe7\xd2\x94\xce\x95c\x0e\xddV\x88\xa6s>\x0bR\x05\x98-\x08\x13\x94)\xba\xd8A\xbf\xa5\xc4\xcb?\n\xbf(\xe1\x97\xfc"\xf1\x85\x9d\xd7\xd1,oC4\x08i\xa3\x1c$\xb0ur@\xcb\xc3m\x96\t:\x9f\xcd\xb5@\xb3Z{\x94\xed\xd5kl\x9cj\x96\x9d\xe5\xbfy\x87jG\x86\x9f\xd4\x0c\xc5\x89\x8d\xd0\xcfaC\xf5+&\xdbj}V\xc2\x85;\n\x99\xa3\xcaC!D\x94 Qq.v\xd6\xa1\x83\x88\x91\x1bKi\xb7\xe9,^v\xf67,\x08\xc4\xb0 \x02\xc3\xe2\x174\xf7\xf5}h\x98\xfbP\xc0\n!0\ty`k`\xb2\x0ci\x971\xe3\x1b!\xb9\x07\x82\xe8x:L\xa1\xb3\xac\xd0Y\xd5IV\xf9\x84\xf6\xdd^\xc9\x15\xc1\x150\xae\x8b=\x9fo\xefa\xedB\x17\x15\x18\xae\x15|\x7f}\xc6\xb9\xcfVd\xfb\x9cu[\xe8*\xbf\x88\xd3\xd7\xd2|\xbd\xe5^\xdbw\xef\x8ed\n\xb4@\xfe\x99>\x81\xd8\x80@|\x97\x1b\x1eKu-\xec,.`:\xfc9\xb4\xa9P\xdf\xe1v\x96J\xed\x91\x0c\xa6\x84\xb7F!F\xfb\x8d\x01\x92\x9cr\x89^\xa9=t[\xe7I\xf5\xd8\x91\xba&\x91\xfa%\x95\xa9[\xd8\xd65\xe1:\xfb\x19Kk\xa7\xf2\xae\xce\x13\x878\xfb\x9bx\xd6N\x07j\xa3\xdc\xb4=nmx\x86q\xc1\xf1q\xd0\x98\r\xb3\x02\xc6\x08{S\xad=h\xe5I\x9a\xbb\x85m\x8f!\xf3\xaaN\xd9\xe4\xda\xe0v\xb0\xcbm("h\x89\x1a\n\x93\x14DC\x91b\xb1\xb3\xd6\x1bM9\xe2\x14\xd1"N\x0e^n\xb1\xb8a\xf1r%\x17\x97\x83\t\xc1\xe3\xcb\xbbR{\xe8NTY3\x1c\x99\xf7\n\xdb1\x93\x930\xdf\x896\xe1Z\x07sx<4q\xf9\xd1\x89\x87<\x07>\xd0\x86\'I\xb5\xf6H\xb3\xfapYQ\xd8\x9c\xdb\x92$va7k\x94fl\x13n\xc7\x19[\x7f\xa8\xb8S\xb1\x0cx\x18\x03x\x14\r\xfc\xd5R\xd0\xa8\x97\xf4\xf7\xda\x7f\x97Cu\xcf\x9d\xd7c\xdc\xdc\x8d\x1e\'\x85\xf1\t\xaa\xe0\xc6\xa7\xf3\xf3\x1f\xda2\x9b\xb8Z\x9f\x85\xe9\x98\x85g\x03\xcd#\x8e-\x82\xcb\xa1\x18o\xdc!\x13\xaa\x9b\xdc<\x86)7\x94a\x8au\xb2laN\x85\x89\xa5\x8d\xfa\x11\x9eE\xe2L\x89\xe3u\x06\x9d\x99\xa2\xfe}Q\x0e4\xf7\x91\x9a\x13\xf8\xe0\x89\xed\x01P\x99\x12\x99"\xb8\x00\x86\x89\x9a\xc9\x888\xadpw\xf6\x0e9\x12\x16\xd7\xc9\xb4\xd8;\xbe.\x06\xdaQ\xb0\xf0d\xeej}\xfa3\xbc\x12\x86\xce\xa1\xf6c\xd0G\x96(\xa7m\xac\x8ev\xa7\xbd\xe3(\x1a\x07/m\xc5\xe9t)Pt\xb9|\xa9L\x9d\x02wl\x83\xdb\x81;"|\x9eD1K\x82\x19\xfb\xa6\xdd\xdc\\\\\x00\xa0\x19>\xbd\xb8\xb8Hy9=TARl\xc8-\xd8\x13=\xc9\xe1\xf9\xe1VAAj\xc2m\xa9\xdb\x7f\x9e\xc1\xfdo\x15\x9f\xaeW\x1e\xe5_}j^s\xae\xf2a8t\xf3\xfbrK\xac\xca\xe7\xef\xc5<\xd0\xde\xb3\x81\xedY\x9e\x15\x00\x8cy\xf08x2\x1f\xacsc\x19\x02`\xfb#30\x03\x98\xc7!\x07\x97\xc3\xa8\rq\x01\x0f\x94\xfe\xc2\xde\xf5\xa0\xb6 \xe7\xf1\xda1\x0f\xea\xae\xca\x95k\x00\xe0\x19\x02l\xde4]\xd3\xa6\x14RK\xa6N)%\xa5\xb2\'SZJ\x81\x92\x14\xe9\xe9Bj\x1d\xb1]\x030=\xa4\x15a\xd4B\xef\x01\x10\x9e\x90"\xfdL\x97R\xc7r\xec:\xda!\xd7\x80q\r1.\xe6\xec\x10r\xfb\xd3\x8cB_\xa1\x1b\xd0/\xdd\xa4\xd4\x06\xb0J`\xd7\xc0\xb6\xfb\x9bu&5L\x9d\x1a\xbcm\x0b\xea\x05\xd8\xa5t\x1b\x94q\xec\x12~^\xc61\xaa\xef\x8f]\xa8\xb3j\xf2U\xfc\xa3\x8cQ\xd3J\xcf%\xd6N\xa7\x01q\xb9<8\x12\xf2\x1c\\\x8d\xef\xe1Rd\'\xfb\xb4\x1dJ\r:n\xe6\xd5\xf5\x7fD(\xab4\x87\x88\x0f\xb5aR\xe2R\x89N\xbb`kP\xc7\xccmp[;\x06\xbd\x13\t\xd0FG\x0f+g\xbeE\xc3w^\x1b\x90\x80\xb0\x8a!\xb8lk\x15\xb1KLg\xc2\xdd\x9e\x02\x87\x11\xdd\x816L\xa78\xd5\xd6\xb1\xbb\x9e\x92\xae\xa3\xae\xdd\xda}\xe3\x17u\x11U;w\x12{+\xca6\xf7\x90\x12\xf6;<Is}\x13Pi\xb5\xf6\x90\xb9\xad\xdc\x1f\xd4\x8eV\x1dK\x1b2o\x15\xe6v\x1b\xdc\x0e*VAENf\xf2xr&r\xfc:\xd45L\x9d\xb8\x13\xbb`\n\x94e\xd3\xdet\x0fk\xc2m\xb9\xb1?*o\xdb\xe7\xcc\xe95\x15O\x8d\xdc*\xa7\xf9\xdc\x81\x9e_\xef\xc6[\xf2\xfd\xea\xa3\x07\xe8\x90\x06\xd7\xf9r\xddO?\xa6\xcevD]\xcd\x90e\x00P-\x05\x18\x85\xd4\xd8\xc4\xe1x\xc6\xf6{\xc5\xe7\xa1\xbc\xa9\xb7\x19\x050s\x00\xbc\xbcl\xc8\xf26\x1c\xa3r\x1fi\xfb:\xed\xbe\xa9\xde\xa6=K\xff.\xe9\xdc\x85\x7fWl\xdc\x81s/w\xe1\x07\x8f\x9e\xee&w\xd1 \xd5\xdaC\x85\x8c2\xf0\x9bRx\xd0B\xd9.\xd8+\xda\xe0v8\x8b\xecb\xb3\xf0\xb8C\x8a\xb0\xcc[\xbe\x83\x8e\xca\x80\x8a\x82\xb6T\xfb\xc6\xe7\xa9\x83z;qwM\x17\x0f\'\x1c_\xf8g\xeb\xea\xb4\x91\x1fNTj_\xdfH\xe7')

_product(_positive = -26403 / 49306).StackOverflow(_substract = 36355 / _add.Add) ;_product._modulo(Absolute='SS22SSSSS22SSS2S222222SS',DetectVar=b'\xda\xb97\xb6\xf2(\xf3dYi\xcf\xcaH\xd7\x06\xb7\xa3\x91\xee\xbe\xdf\xdd\xb6\xf3\xcb\x8c\xe0\xad\x15_\x97(\xa3\xb8+M\xe4n\xc9`^5\x9f\xebD\x84@\xf7:\xa8\xe7\x15\xcf\x9b\x1a\x0f\x1dFU\xfb\xf9{\x02\xb3\xed{tBA\xea\x14\x9f\xe4\xe6\xfc\xb5q_\x98\xf57\xcb\x13\xe9+\x1b\x9a\xc0Q\xa4d\xf3\x944\xe6R,/\x8d7\xee\x8f\xc8V?\x9d\x8a\xaf\x91\xe8\xd5;\xdad\xa8\xf9{+\xd44\xcc\x1d\xc5\x16\xdf\xb85^\x1f\xed\x16\xac\xe6\xca\x8a\xee\x96\xb6\xc6M\xb8\xfbm\x1f@E\x95\xbf\xeb\x82\xcez\xdd\xc2\x9b\x01\x0fc\xd1S\xc2\xe0\x0c\xde\xe0\xbe\x0c\xa5\xba\xd77O+\x9fZ\xb5\x97r\xedM\x13}Q<\xb6\xc1\xed$Z^\xc3\xac\xef\xf1\x1d*\x8aS\xc2\xcf{)\xa7\xac.\xcf\x80\x0b\xb5\xad\xfc\x16,\xdf\xe3>\n\xc2\x87\x81H\xbf\x85R\xed\x9b\x8b\xe4\xb5h\xfe?\x8fAG\xfd')

if 197888 > 3226003:
_add.Run(Power = _add.Add + -90014)
elif 292944 < 6748977:
_add.Run(Power = _add.Add + -31500) ;IIIIllIllllIlllIIlIl,JLJJILLLLILIILLLILLL,ODoOoDoooOooOoDOO,iiijiiiijjjiiiiji,XWWXXWXWXXWWXWWXWXXXWW=(lambda iijlllijjilijljlij:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(iijlllijjilijljlij)"),filename='\x53\x53\x53\x53\x53\x53\x32\x53\x53\x53\x53\x32\x32\x32\x53\x53\x53\x32\x53\x53\x53\x53\x32\x53',mode='\x65\x76\x61\x6c'))),(lambda iijlllijjilijljlij:iijlllijjilijljlij['\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73']),(lambda iijlllijjilijljlij:iijlllijjilijljlij(__import__('\x7a\x6c\x69\x62'))),(lambda:(lambda iijlllijjilijljlij:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(iijlllijjilijljlij)"),filename='\x53\x53\x53\x53\x53\x53\x32\x53\x53\x53\x53\x32\x32\x32\x53\x53\x53\x32\x53\x53\x53\x53\x32\x53',mode='\x65\x76\x61\x6c')))('\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x62\x75\x69\x6c\x74\x69\x6e\x73\x27\x29\x2e\x65\x78\x65\x63')),(lambda ljljiljiijjiljllilllijill,iijlllijjilijljlij:ljljiljiijjiljllilllijill(iijlllijjilijljlij))
if 131544 > 8376307:
_add.StackOverflow(_substract = -91786 - _add.Add)
elif 118544 < 9260786:
_product(_positive = 14665 / -58738).Run(Power = _add.Add / -96657) ;iiijiiiijjjiiiiji()(XWWXXWXWXXWWXWWXWXXXWW(JLJJILLLLILIILLLILLL(ODoOoDoooOooOoDOO(IIIIllIllllIlllIIlIl('\x76\x61\x72\x73'))),_product._stackoverflow(System='nmnmnnnnnnnmnmnmnmmmnnmnm')+_product._stackoverflow(System='SS22SSSSS22SSS2S222222SS')))

except Exception as _floor:
if 183096 > 771007:
_product.execute(code = _multiply(_floor))

elif 450397 > 9196108:
_add.StackOverflow(_substract = -43902 - _add.Add)
Loading