#!/usr/bin/python # # This code is public domain code. import string, sys seq = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-' def decode(s): s = map(lambda x: string.index(seq, x), s) l = len(s) % 4 if l: if l == 1: raise ValueError() l = 4-l s.extend([0]*l) r = '' while s: n = ((s[0] << 6 | s[1]) << 6 | s[2]) << 6 | s[3] r = r + chr((n >> 16) ^ 67) + chr((n >> 8 & 255) ^ 67) + chr((n & 255) ^ 67) s = s[4:] return l and r[:-l] or r def cc(s): return string.join(map(lambda x: '%02d'%(ord(x) ^ 0x20), s), ' ') def do(s): s = filter(lambda x: x and x[0] > ' ', string.split(s, '.')) s = map(decode, s) if len(s) == 3: print 'Serial: '+s[0] print 'Type: '+s[1] if s[1] == 'CC!': print 'Code: C 01 '+cc(s[2]) else: print 'Code: '+s[2] else: for x in s: print x if __name__ == '__main__': if len(sys.argv) > 1: do(sys.argv[1]) else: while 1: try: s = raw_input('Scan/Enter> ') except EOFError: break if not s: break try: do(s) except ValueError: print 'Invalid input'