Sep-01-2018, 07:13 AM
hi guys i need to execute this file but don't know which command line to use could you help me figure it out and maybe tell me how to look for it myself so i wont have to bother you
Thanks!
main.py:
Thanks!
main.py:
from __future__ import print_function
from random import randint, shuffle
import sys
from struct import unpack, pack as pk
from io import BytesIO as BIO
import lzwlib
up = lambda *args: unpack(*args)[0]
def F(f):
assert f.read(3) == 'GIF', ''
assert f.read(3) == '89a', ''
w, h = unpack('HH', f.read(4))
assert 32 <= w <= 500, ''
assert 32 <= h <= 500, ''
logflags = up('B', f.read(1))
assert logflags & 0x80, ''
size_count = logflags & 0x07
gct_count = 2**(size_count+1)
assert 4 <= gct_count <= 256, ''
bgcoloridx = up('B', f.read(1))
f.seek(1, 1)
clrs = []
for i in range(gct_count):
clr = (up('B', f.read(1)), up('B', f.read(1)), up('B', f.read(1)))
clrs.append(clr)
assert len(clrs) > bgcoloridx, ''
return clrs, bgcoloridx, size_count, h, w
class T(object):
I = 0
EG = 1
EA = 2
EC = 3
ET = 4
def C(f):
rb = f.read(1)
b = up('B', rb)
while b != 0x3B:
buf = ''
buf += rb
if b == 0x2c:
nbuf = f.read(2*4)
eb = f.read(1)
assert (up('B', eb) & 0x03) == 0, ''
nbuf += eb
nbuf += f.read(1)
nbuf += V(f)
t = T.I
elif b == 0x21:
rb = f.read(1)
buf += rb
b = up('B', rb)
if b == 0xF9:
nbuf = f.read(1)
blksize = up('B', nbuf)
nbuf += f.read(blksize)
nbuf += f.read(1)
assert nbuf[-1] == '\x00', ''
t = T.EG
elif b in [0xFF, 0x01]:
nbuf = f.read(1)
blksize = up('B', nbuf)
nbuf += f.read(blksize)
nbuf += V(f)
t = (b+3) & 0x0F
elif b == 0xFE:
nbuf = V(f)
t = T.EC
else:
raise Exception("unsupprted thing @{}".format(f.tell()))
buf += nbuf
yield t, buf
rb = f.read(1)
b = up('B', rb)
yield None, '\x3B'
raise StopIteration
def WB(buf):
blockcount = len(buf)/0xFF
blockcount += 1 if len(buf) % 0xFF else 0
blocks = [
pk('B', len(subblock))+subblock for subblock in [
buf[i:0xFF+i] for i in range(0, blockcount*0xFF, 0xFF)
]
]
return ''.join(blocks) + '\x00'
def k(bf):
combined_buf = ''
while True:
cb = ord(bf.read(1))
if not cb:
break
combined_buf += bf.read(cb)
return combined_buf
def V(f):
sbx = ''
while True:
rcb = f.read(1)
sbx += rcb
if rcb == '\x00':
break
cb = up('B', rcb)
blk = f.read(cb)
sbx += blk
return sbx
def Q(delay, w, h, x, y, tidx):
assert 0 <= tidx <= 255
assert 0 <= delay < 2**16
indices = [tidx]*(w*h)
buf = BIO('')
buf.write('\x21\xF9\x04\x05')
buf.write(pk('H', delay))
buf.write(pk('B', tidx))
buf.write('\x00')
buf.write('\x2c')
buf.write(pk('H', x))
buf.write(pk('H', y))
buf.write(pk('H', w))
buf.write(pk('H', h))
buf.write('\x00')
LZWMinimumCodeSize = 8
cmprs, _ = lzwlib.Lzwg.compress(
indices, LZWMinimumCodeSize)
obuf = pk('B', LZWMinimumCodeSize) + WB(cmprs)
buf.write(obuf)
buf.seek(0)
return buf.read()
def z(n):
import math
for i in range(1, int(math.sqrt(n) + 1)):
if n % i == 0:
yield i
def m(a, mm, hh):
if a < 0x08:
if a % 2:
_0 = 0
_1 = 1
_4 = a << 2
_3 = randint(4, mm-1)
else:
_0 = 1
_1 = a << 1
_3 = randint(4, mm/2)
_4 = randint(4, hh/3)
else:
ds = list(z(a))
_0 = 0
_1 = 0
shuffle(ds)
_4 = ds[0]
assert a % _4 == 0
_3 = a/_4
return _0, _1, _3, _4
def h(b6, b1, mw, mh, mci, d=3):
idx = randint(0, (mci-1)/2)*2 + b1
x, xx, xxx, xxxx = m(b6, mw, mh)
f = Q(d, xxx, xxxx, x, xx, idx)
return f
def M(s):
l = list(set(s.upper()))
shuffle(l)
d = ''.join(l)
assert len(d) <= 2**6, ''
return d, [(d.index(c.upper()), int(c.isupper())) for c in s]
def E(f, s, o):
global_colors, bgcoloridx, size_count, hh, ww = F(f)
mp, ks = M(s)
hdr_end = f.tell()
f.seek(0)
o.write(f.read(hdr_end))
fc = 0
o.write('\x21\xFE')
o.write(WB('RDBNB'+mp))
o.flush()
for t, buf in C(f):
print('.', end='')
if t == T.EC:
continue
if t == T.EG:
if ks:
delay = up('<H', buf[4:6])
assert delay >= 6
buf = buf[:4] + pk('<H', delay - 3) + buf[6:]
obuf = buf
elif t == T.I:
fc += 1
total_raw_blocks_data = ''
bf = BIO(buf)
pref = bf.read(10)
LZWMinimumCodeSize = ord(bf.read(1))
total_raw_blocks_data = k(bf)
indices, dcmprsdcodes = lzwlib.Lzwg.decompress(
total_raw_blocks_data, LZWMinimumCodeSize)
xxx = unpack('<B H H H H B', pref)
cmprs, codes = lzwlib.Lzwg.compress(
indices, LZWMinimumCodeSize)
obuf = pref + pk('B', LZWMinimumCodeSize) + WB(cmprs)
if ks:
mpindx, isup = ks.pop(0)
obuf += h(mpindx, isup,
ww, hh, len(global_colors)-1)
else:
obuf = buf
o.write(obuf)
o.flush()
assert not ks, ''
return 0
if __name__ == '__main__':
assert len(sys.argv) > 2, 'bad input'
fpath = sys.argv[1]
flag = sys.argv[2]
if len(sys.argv) > 3:
outpath = sys.argv[3]
else:
outpath = fpath + '.out.gif'
f = open(fpath, 'rb')
o = open(outpath, 'wb')
rv = E(f, flag, o)
sys.exit(rv)
