import namegen import stats from array import array from datetime import date def makends(gba): # Deconstructing GBA .3gpkm file pid = gba[0:4] otid = gba[4:8] nickname = convertname(gba[8:18]) nickname = extendname(nickname, False) lang = gba[18] otname = convertname(gba[20:27]) species = ord(gba[32]) + (ord(gba[33]) << 8) species = pokemonindex.get(species) gend = genderbyte(species, pid) forme = form(species, gend, pid) nicknamed = namegen.namegen(nickname) != stats.species.get(species).upper() ability = abilities.get(species) species = chr(species & 0xff) + chr((species >> 8) & 0xff) item = gba[34:36] exp = gba[36:40] ppup = ord(gba[40]) ppupa = chr((ppup >> 0) & 3) ppupb = chr((ppup >> 2) & 3) ppupc = chr((ppup >> 4) & 3) ppupd = chr((ppup >> 6) & 3) happy = gba[41] atk1 = gba[44:46] atk2 = gba[46:48] atk3 = gba[48:50] atk4 = gba[50:52] pp1 = chr((movepp.get(ord(gba[44]) + (ord(gba[45]) << 8)))) pp2 = chr((movepp.get(ord(gba[46]) + (ord(gba[47]) << 8)))) pp3 = chr((movepp.get(ord(gba[48]) + (ord(gba[49]) << 8)))) pp4 = chr((movepp.get(ord(gba[50]) + (ord(gba[51]) << 8)))) hpev = gba[56] atkev = gba[57] defev = gba[58] speev = gba[59] spaev = gba[60] spdev = gba[61] pkrs = gba[68] lvmet = level(gba) fmlot = ord(gba[71]) & 0x80 origin = ord(gba[0x46]) + (ord(gba[0x47]) << 8) origin = chr((origin >> 7) & 0xF) ball = chr((ord(gba[0x47]) >> 3) & 0xF) ivs = gba[72:76] rib1 = gba[76] rib2 = gba[77] rib3 = gba[78] rib4 = chr(ord(gba[79]) & 0x7F) # Remove FE flag because it's not a ribbon. ribbons = rib1 + rib2 + rib3 + rib4 fateful = ord(gba[0x4F])>>7 # Generating NDS .pkm file pkm = species + item + otid + exp + happy pkm += ability[ord(pid[0]) % 2] pkm += '\x00' # Markings pkm += lang + hpev + atkev + defev + speev + spaev + spdev pkm += '\x00' * 10 # Contest values, Sinnoh ribbons pkm += atk1 + atk2 + atk3 + atk4 + pp1 + pp2 + pp3 + pp4 # Fuck Current PP4 pkm += ppupa + ppupb + ppupc + ppupd pkm += ivbytes(ivs, nicknamed) pkm += ribbons # Hoenn ribbons pkm += chr(forme ^ fateful) pkm += '\x00' * 5 + '\x37\x00' # Shiny leaves, padding, egg from, met at pkm += nickname pkm += '\x00' + origin #Padding, hometown pkm += '\x00' * 8 # Sinnoh Ribbons, Padding pkm += extendname(otname, True, pkm[0x40:0x50]) pkm += '\x00' * 3 # Date egg received pkm += datemet() pkm += '\x00' * 2 # Egg location pkm += '\x37\x00' # Location met (Pal Park) pkm += pkrs pkm += ball # Poke ball pkm += chr(lvmet | fmlot) pkm += '\x00' # Encounter type pkm += '\x00' # Poke ball pkm += '\x00' # Padding chksm = getsum(pkm) pkm = pid + '\x00\x00' + chksm + pkm return pkm def convertname(n): bytes = array('B') bytes.fromstring(n) converted = '' for val in bytes: if val == 0xff: break c = name.get(val) if c: c = [k for k, v in namegen.namelist.iteritems() if v == c][0] converted += chr(c) + '\x01' converted += '\xff\xff' return converted def extendname(n, ot, trash='\x00\x00\x00\x00\x18\x20\x0d\x02\x42\x00\x00\x00\x00\x00\x00\x00\x48\xa1\x0c\x02\xe0\xff'): if ot: if len(n) < 16: n += trash[len(n):] else: if len(n) < 22: n += trash[len(n):] return n def ivbytes(ivs, name): mod = ord(ivs[3]) if name: mod = mod | 0x80 return ivs[0:3] + chr(mod) def genderbyte(species, pid): gid = ord(pid[0]) genratio = gender.get(species) if genratio == 'Genderless': return 4 elif genratio == '0 %': return 2 elif genratio == '12.5 %': if gid < 223: return 2 else: return 0 elif genratio == '25 %': if gid < 191: return 2 else: return 0 elif genratio == '50 %': if gid < 127: return 2 else: return 0 elif genratio == '75 %': if gid < 63: return 2 else: return 0 elif genratio == '87.5 %': if gid < 31: return 2 else: return 0 elif genratio == '100 %': return 0 def form(id, gend, pid): if id == 201: letter1 = ord(pid[3]) & 3 letter2 = ord(pid[2]) & 3 letter3 = ord(pid[1]) & 3 letter4 = ord(pid[0]) & 3 letter = (letter1 << 6) + (letter2 << 4) + (letter3 << 2) + letter4 return (unown.get(letter % 28) << 3) | gend elif id == 386: return (0x18 << 3) | gend else: return gend def datemet(): val = date.today() return chr(val.year - 2000) + chr(val.month) + chr(val.day) def getsum(pkm): ar = array('H') ar.fromstring(pkm) sum = 0 for val in ar: sum += val return chr(sum & 0xff) + chr((sum >> 8) & 0xff) def level(gba): exp = ord(gba[36]) + (ord(gba[37]) << 8) + (ord(gba[38]) << 16) id = ord(gba[32]) + (ord(gba[33]) << 8) exptype = pokestats.get(id)[0] for i in xrange(100): xpneeded = lvlexp.get(i + 1)[exptype] if xpneeded > exp: return i return 100 pokestats = { 1: (3, 45, 49, 49, 65, 65, 45), 2: (3, 60, 62, 63, 80, 80, 60), 3: (3, 80, 82, 83, 100, 100, 80), 4: (3, 39, 52, 43, 60, 50, 65), 5: (3, 58, 64, 58, 80, 65, 80), 6: (3, 78, 84, 78, 109, 85, 100), 7: (3, 44, 48, 65, 50, 64, 43), 8: (3, 59, 63, 80, 65, 80, 58), 9: (3, 79, 83, 100, 85, 105, 78), 10: (2, 45, 30, 35, 20, 20, 45), 11: (2, 50, 20, 55, 25, 25, 30), 12: (2, 60, 45, 50, 80, 80, 70), 13: (2, 40, 35, 30, 20, 20, 50), 14: (2, 45, 25, 50, 25, 25, 35), 15: (2, 65, 80, 40, 45, 80, 75), 16: (3, 40, 45, 40, 35, 35, 56), 17: (3, 63, 60, 55, 50, 50, 71), 18: (3, 83, 80, 75, 70, 70, 91), 19: (2, 30, 56, 35, 25, 35, 72), 20: (2, 55, 81, 60, 50, 70, 97), 21: (2, 40, 60, 30, 31, 31, 70), 22: (2, 65, 90, 65, 61, 61, 100), 23: (2, 35, 60, 44, 40, 54, 55), 24: (2, 60, 85, 69, 65, 79, 80), 25: (2, 35, 55, 30, 50, 40, 90), 26: (2, 60, 90, 55, 90, 80, 100), 27: (2, 50, 75, 85, 20, 30, 40), 28: (2, 75, 100, 110, 45, 55, 65), 29: (3, 55, 47, 52, 40, 40, 41), 30: (3, 70, 62, 67, 55, 55, 56), 31: (3, 90, 82, 87, 75, 85, 76), 32: (3, 46, 57, 40, 40, 40, 50), 33: (3, 61, 72, 57, 55, 55, 65), 34: (3, 81, 92, 77, 85, 75, 85), 35: (1, 70, 45, 48, 60, 65, 35), 36: (1, 95, 70, 73, 85, 90, 60), 37: (2, 38, 41, 40, 50, 65, 65), 38: (2, 73, 76, 75, 81, 100, 100), 39: (1, 115, 45, 20, 45, 25, 20), 40: (1, 140, 70, 45, 75, 50, 45), 41: (2, 40, 45, 35, 30, 40, 55), 42: (2, 75, 80, 70, 65, 75, 90), 43: (3, 45, 50, 55, 75, 65, 30), 44: (3, 60, 65, 70, 85, 75, 40), 45: (3, 75, 80, 85, 100, 90, 50), 46: (2, 35, 70, 55, 45, 55, 25), 47: (2, 60, 95, 80, 60, 80, 30), 48: (2, 60, 55, 50, 40, 55, 45), 49: (2, 70, 65, 60, 90, 75, 90), 50: (2, 10, 55, 25, 35, 45, 95), 51: (2, 35, 80, 50, 50, 70, 120), 52: (2, 40, 45, 35, 40, 40, 90), 53: (2, 65, 70, 60, 65, 65, 115), 54: (2, 50, 52, 48, 65, 50, 55), 55: (2, 80, 82, 78, 95, 80, 85), 56: (2, 40, 80, 35, 35, 45, 70), 57: (2, 65, 105, 60, 60, 70, 95), 58: (4, 55, 70, 45, 70, 50, 60), 59: (4, 90, 110, 80, 100, 80, 95), 60: (3, 40, 50, 40, 40, 40, 90), 61: (3, 65, 65, 65, 50, 50, 90), 62: (3, 90, 85, 95, 70, 90, 70), 63: (3, 25, 20, 15, 105, 55, 90), 64: (3, 40, 35, 30, 120, 70, 105), 65: (3, 55, 50, 45, 135, 85, 120), 66: (3, 70, 80, 50, 35, 35, 35), 67: (3, 80, 100, 70, 50, 60, 45), 68: (3, 90, 130, 80, 65, 85, 55), 69: (3, 50, 75, 35, 70, 30, 40), 70: (3, 65, 90, 50, 85, 45, 55), 71: (3, 80, 105, 65, 100, 60, 70), 72: (4, 40, 40, 35, 50, 100, 70), 73: (4, 80, 70, 65, 80, 120, 100), 74: (3, 40, 80, 100, 30, 30, 20), 75: (3, 55, 95, 115, 45, 45, 35), 76: (3, 80, 110, 130, 55, 65, 45), 77: (2, 50, 85, 55, 65, 65, 90), 78: (2, 65, 100, 70, 80, 80, 105), 79: (2, 90, 65, 65, 40, 40, 15), 80: (2, 95, 75, 110, 100, 80, 30), 81: (2, 25, 35, 70, 95, 55, 45), 82: (2, 50, 60, 95, 120, 70, 70), 83: (2, 52, 65, 55, 58, 62, 60), 84: (2, 35, 85, 45, 35, 35, 75), 85: (2, 60, 110, 70, 60, 60, 100), 86: (2, 65, 45, 55, 45, 70, 45), 87: (2, 90, 70, 80, 70, 95, 70), 88: (2, 80, 80, 50, 40, 50, 25), 89: (2, 105, 105, 75, 65, 100, 50), 90: (4, 30, 65, 100, 45, 25, 40), 91: (4, 50, 95, 180, 85, 45, 70), 92: (3, 30, 35, 30, 100, 35, 80), 93: (3, 45, 50, 45, 115, 55, 95), 94: (3, 60, 65, 60, 130, 75, 110), 95: (2, 35, 45, 160, 30, 45, 70), 96: (2, 60, 48, 45, 43, 90, 42), 97: (2, 85, 73, 70, 73, 115, 67), 98: (2, 30, 105, 90, 25, 25, 50), 99: (2, 55, 130, 115, 50, 50, 75), 100: (2, 40, 30, 50, 55, 55, 100), 101: (2, 60, 50, 70, 80, 80, 140), 102: (4, 60, 40, 80, 60, 45, 40), 103: (4, 95, 95, 85, 125, 65, 55), 104: (2, 50, 50, 95, 40, 50, 35), 105: (2, 60, 80, 110, 50, 80, 45), 106: (2, 50, 120, 53, 35, 110, 87), 107: (2, 50, 105, 79, 35, 110, 76), 108: (2, 90, 55, 75, 60, 75, 30), 109: (2, 40, 65, 95, 60, 45, 35), 110: (2, 65, 90, 120, 85, 70, 60), 111: (4, 80, 85, 95, 30, 30, 25), 112: (4, 105, 130, 120, 45, 45, 40), 113: (1, 250, 5, 5, 35, 105, 50), 114: (2, 65, 55, 115, 100, 40, 60), 115: (2, 105, 95, 80, 40, 80, 90), 116: (2, 30, 40, 70, 70, 25, 60), 117: (2, 55, 65, 95, 95, 45, 85), 118: (2, 45, 67, 60, 35, 50, 63), 119: (2, 80, 92, 65, 65, 80, 68), 120: (4, 30, 45, 55, 70, 55, 85), 121: (4, 60, 75, 85, 100, 85, 115), 122: (2, 40, 45, 65, 100, 120, 90), 123: (2, 70, 110, 80, 55, 80, 105), 124: (2, 65, 50, 35, 115, 95, 95), 125: (2, 65, 83, 57, 95, 85, 105), 126: (2, 65, 95, 57, 100, 85, 93), 127: (4, 65, 125, 100, 55, 70, 85), 128: (4, 75, 100, 95, 40, 70, 110), 129: (4, 20, 10, 55, 15, 20, 80), 130: (4, 95, 125, 79, 60, 100, 81), 131: (4, 130, 85, 80, 85, 95, 60), 132: (2, 48, 48, 48, 48, 48, 48), 133: (2, 55, 55, 50, 45, 65, 55), 134: (2, 130, 65, 60, 110, 95, 65), 135: (2, 65, 65, 60, 110, 95, 130), 136: (2, 65, 130, 60, 95, 110, 65), 137: (2, 65, 60, 70, 85, 75, 40), 138: (2, 35, 40, 100, 90, 55, 35), 139: (2, 70, 60, 125, 115, 70, 55), 140: (2, 30, 80, 90, 55, 45, 55), 141: (2, 60, 115, 105, 65, 70, 80), 142: (4, 80, 105, 65, 60, 75, 130), 143: (4, 160, 110, 65, 65, 110, 30), 144: (4, 90, 85, 100, 95, 125, 85), 145: (4, 90, 90, 85, 125, 90, 100), 146: (4, 90, 100, 90, 125, 85, 90), 147: (4, 41, 64, 45, 50, 50, 50), 148: (4, 61, 84, 65, 70, 70, 70), 149: (4, 91, 134, 95, 100, 100, 80), 150: (4, 106, 110, 90, 154, 90, 130), 151: (3, 100, 100, 100, 100, 100, 100), 152: (3, 45, 49, 65, 49, 65, 45), 153: (3, 60, 62, 80, 63, 80, 60), 154: (3, 80, 82, 100, 83, 100, 80), 155: (3, 39, 52, 43, 60, 50, 65), 156: (3, 58, 64, 58, 80, 65, 80), 157: (3, 78, 84, 78, 109, 85, 100), 158: (3, 50, 65, 64, 44, 48, 43), 159: (3, 65, 80, 80, 59, 63, 58), 160: (3, 85, 105, 100, 79, 83, 78), 161: (2, 35, 46, 34, 35, 45, 20), 162: (2, 85, 76, 64, 45, 55, 90), 163: (2, 60, 30, 30, 36, 56, 50), 164: (2, 100, 50, 50, 76, 96, 70), 165: (1, 40, 20, 30, 40, 80, 55), 166: (1, 55, 35, 50, 55, 110, 85), 167: (1, 40, 60, 40, 40, 40, 30), 168: (1, 70, 90, 70, 60, 60, 40), 169: (2, 85, 90, 80, 70, 80, 130), 170: (4, 75, 38, 38, 56, 56, 67), 171: (4, 125, 58, 58, 76, 76, 67), 172: (2, 20, 40, 15, 35, 35, 60), 173: (1, 50, 25, 28, 45, 55, 15), 174: (1, 90, 30, 15, 40, 20, 15), 175: (1, 35, 20, 65, 40, 65, 20), 176: (1, 55, 40, 85, 80, 105, 40), 177: (2, 40, 50, 45, 70, 45, 70), 178: (2, 65, 75, 70, 95, 70, 95), 179: (3, 55, 40, 40, 65, 45, 35), 180: (3, 70, 55, 55, 80, 60, 45), 181: (3, 90, 75, 75, 115, 90, 55), 182: (3, 75, 80, 85, 90, 100, 50), 183: (1, 70, 20, 50, 20, 50, 40), 184: (1, 100, 50, 80, 50, 80, 50), 185: (2, 70, 100, 115, 30, 65, 30), 186: (3, 90, 75, 75, 90, 100, 70), 187: (3, 35, 35, 40, 35, 55, 50), 188: (3, 55, 45, 50, 45, 65, 80), 189: (3, 75, 55, 70, 55, 85, 110), 190: (1, 55, 70, 55, 40, 55, 85), 191: (3, 30, 30, 30, 30, 30, 30), 192: (3, 75, 75, 55, 105, 85, 30), 193: (2, 65, 65, 45, 75, 45, 95), 194: (2, 55, 45, 45, 25, 25, 15), 195: (2, 95, 85, 85, 65, 65, 35), 196: (2, 65, 65, 60, 130, 95, 110), 197: (2, 95, 65, 110, 60, 130, 65), 198: (3, 60, 85, 42, 85, 42, 91), 199: (2, 95, 75, 80, 100, 110, 30), 200: (1, 60, 60, 60, 85, 85, 85), 201: (2, 48, 72, 48, 72, 48, 48), 202: (2, 190, 33, 58, 33, 58, 33), 203: (2, 70, 80, 65, 90, 65, 85), 204: (2, 50, 65, 90, 35, 35, 15), 205: (2, 75, 90, 140, 60, 60, 40), 206: (2, 100, 70, 70, 65, 65, 45), 207: (3, 65, 75, 105, 35, 65, 85), 208: (2, 75, 85, 200, 55, 65, 30), 209: (1, 60, 80, 50, 40, 40, 30), 210: (1, 90, 120, 75, 60, 60, 45), 211: (2, 65, 95, 75, 55, 55, 85), 212: (2, 70, 130, 100, 55, 80, 65), 213: (3, 20, 10, 230, 10, 230, 5), 214: (4, 80, 125, 75, 40, 95, 85), 215: (3, 55, 95, 55, 35, 75, 115), 216: (2, 60, 80, 50, 50, 50, 40), 217: (2, 90, 130, 75, 75, 75, 55), 218: (2, 40, 40, 40, 70, 40, 20), 219: (2, 50, 50, 120, 80, 80, 30), 220: (4, 50, 50, 40, 30, 30, 50), 221: (4, 100, 100, 80, 60, 60, 50), 222: (1, 55, 55, 85, 65, 85, 35), 223: (2, 35, 65, 35, 65, 35, 65), 224: (2, 75, 105, 75, 105, 75, 45), 225: (1, 45, 55, 45, 65, 45, 75), 226: (4, 65, 40, 70, 80, 140, 70), 227: (4, 65, 80, 140, 40, 70, 70), 228: (4, 45, 60, 30, 80, 50, 65), 229: (4, 75, 90, 50, 110, 80, 95), 230: (2, 75, 95, 95, 95, 95, 85), 231: (2, 90, 60, 60, 40, 40, 40), 232: (2, 90, 120, 120, 60, 60, 50), 233: (2, 85, 80, 90, 105, 95, 60), 234: (4, 73, 95, 62, 85, 65, 85), 235: (1, 55, 20, 35, 20, 45, 75), 236: (2, 35, 35, 35, 35, 35, 35), 237: (2, 50, 95, 95, 35, 110, 70), 238: (2, 45, 30, 15, 85, 65, 65), 239: (2, 45, 63, 37, 65, 55, 95), 240: (2, 45, 75, 37, 70, 55, 83), 241: (4, 95, 80, 105, 40, 70, 100), 242: (1, 255, 10, 10, 75, 135, 55), 243: (4, 90, 85, 75, 115, 100, 115), 244: (4, 115, 115, 85, 90, 75, 100), 245: (4, 100, 75, 115, 90, 115, 85), 246: (4, 50, 64, 50, 45, 50, 41), 247: (4, 70, 84, 70, 65, 70, 51), 248: (4, 100, 134, 110, 95, 100, 61), 249: (4, 106, 90, 130, 90, 154, 110), 250: (4, 106, 130, 90, 110, 154, 90), 251: (3, 100, 100, 100, 100, 100, 100), 252: (3, 40, 45, 35, 65, 55, 70), 253: (3, 50, 65, 45, 85, 65, 95), 254: (3, 70, 85, 65, 105, 85, 120), 255: (3, 45, 60, 40, 70, 50, 45), 256: (3, 60, 85, 60, 85, 60, 55), 257: (3, 80, 120, 70, 110, 70, 80), 258: (3, 50, 70, 50, 50, 50, 40), 259: (3, 70, 85, 70, 60, 70, 50), 260: (3, 100, 110, 90, 85, 90, 60), 261: (2, 35, 55, 35, 30, 30, 35), 262: (2, 70, 90, 70, 60, 60, 70), 263: (2, 38, 30, 41, 30, 41, 60), 264: (2, 78, 70, 61, 50, 61, 100), 265: (2, 45, 45, 35, 20, 30, 20), 266: (2, 50, 35, 55, 25, 25, 15), 267: (2, 60, 70, 50, 90, 50, 65), 268: (2, 50, 35, 55, 25, 25, 15), 269: (2, 60, 50, 70, 50, 90, 65), 270: (3, 40, 30, 30, 40, 50, 30), 271: (3, 60, 50, 50, 60, 70, 50), 272: (3, 80, 70, 70, 90, 100, 70), 273: (3, 40, 40, 50, 30, 30, 30), 274: (3, 70, 70, 40, 60, 40, 60), 275: (3, 90, 100, 60, 90, 60, 80), 276: (3, 40, 55, 30, 30, 30, 85), 277: (3, 60, 85, 60, 50, 50, 125), 278: (2, 40, 30, 30, 55, 30, 85), 279: (2, 60, 50, 100, 85, 70, 65), 280: (4, 28, 25, 25, 45, 35, 40), 281: (4, 38, 35, 35, 65, 55, 50), 282: (4, 68, 65, 65, 125, 115, 80), 283: (2, 40, 30, 32, 50, 52, 65), 284: (2, 70, 60, 62, 80, 82, 60), 285: (5, 60, 40, 60, 40, 60, 35), 286: (5, 60, 130, 80, 60, 60, 70), 287: (4, 60, 60, 60, 35, 35, 30), 288: (4, 80, 80, 80, 55, 55, 90), 289: (4, 150, 160, 100, 95, 65, 100), 290: (0, 31, 45, 90, 30, 30, 40), 291: (0, 61, 90, 45, 50, 50, 160), 292: (0, 1, 90, 45, 30, 30, 40), 293: (3, 64, 51, 23, 51, 23, 28), 294: (3, 84, 71, 43, 71, 43, 48), 295: (3, 104, 91, 63, 91, 63, 68), 296: (5, 72, 60, 30, 20, 30, 25), 297: (5, 144, 120, 60, 40, 60, 50), 298: (1, 50, 20, 40, 20, 40, 20), 299: (2, 30, 45, 135, 45, 90, 30), 300: (1, 50, 45, 45, 35, 35, 50), 301: (1, 70, 65, 65, 55, 55, 70), 302: (3, 50, 75, 75, 65, 65, 50), 303: (1, 50, 85, 85, 55, 55, 50), 304: (4, 50, 70, 100, 40, 40, 30), 305: (4, 60, 90, 140, 50, 50, 40), 306: (4, 70, 110, 180, 60, 60, 50), 307: (2, 30, 40, 55, 40, 55, 60), 308: (2, 60, 60, 75, 60, 75, 80), 309: (4, 40, 45, 40, 65, 40, 65), 310: (4, 70, 75, 60, 105, 60, 105), 311: (2, 60, 50, 40, 85, 75, 95), 312: (2, 60, 40, 50, 75, 85, 95), 313: (0, 65, 73, 55, 47, 75, 85), 314: (5, 65, 47, 55, 73, 75, 85), 315: (3, 50, 60, 45, 100, 80, 65), 316: (5, 70, 43, 53, 43, 53, 40), 317: (5, 100, 73, 83, 73, 83, 55), 318: (4, 45, 90, 20, 65, 20, 65), 319: (4, 70, 120, 40, 95, 40, 95), 320: (5, 130, 70, 35, 70, 35, 60), 321: (5, 170, 90, 45, 90, 45, 60), 322: (2, 60, 60, 40, 65, 45, 35), 323: (2, 70, 100, 70, 105, 75, 40), 324: (2, 70, 85, 140, 85, 70, 20), 325: (1, 60, 25, 35, 70, 80, 60), 326: (1, 80, 45, 65, 90, 110, 80), 327: (1, 60, 60, 60, 60, 60, 60), 328: (3, 45, 100, 45, 45, 45, 10), 329: (3, 50, 70, 50, 50, 50, 70), 330: (3, 80, 100, 80, 80, 80, 100), 331: (3, 50, 85, 40, 85, 40, 35), 332: (3, 70, 115, 60, 115, 60, 55), 333: (0, 45, 40, 60, 40, 75, 50), 334: (0, 75, 70, 90, 70, 105, 80), 335: (0, 73, 115, 60, 60, 60, 90), 336: (5, 73, 100, 60, 100, 60, 65), 337: (1, 70, 55, 65, 95, 85, 70), 338: (1, 70, 95, 85, 55, 65, 70), 339: (2, 50, 48, 43, 46, 41, 60), 340: (2, 110, 78, 73, 76, 71, 60), 341: (5, 43, 80, 65, 50, 35, 35), 342: (5, 63, 120, 85, 90, 55, 55), 343: (2, 40, 40, 55, 40, 70, 55), 344: (2, 60, 70, 105, 70, 120, 75), 345: (0, 66, 41, 77, 61, 87, 23), 346: (0, 86, 81, 97, 81, 107, 43), 347: (0, 45, 95, 50, 40, 50, 75), 348: (0, 75, 125, 100, 70, 80, 45), 349: (0, 20, 15, 20, 10, 55, 80), 350: (0, 95, 60, 79, 100, 125, 81), 351: (2, 70, 70, 70, 70, 70, 70), 352: (3, 60, 90, 70, 60, 120, 40), 353: (1, 44, 75, 35, 63, 33, 45), 354: (1, 64, 115, 65, 83, 63, 65), 355: (1, 20, 40, 90, 30, 90, 25), 356: (1, 40, 70, 130, 60, 130, 25), 357: (4, 99, 68, 83, 72, 87, 51), 358: (1, 65, 50, 70, 95, 80, 65), 359: (3, 65, 130, 60, 75, 60, 75), 360: (2, 95, 23, 48, 23, 48, 23), 361: (2, 50, 50, 50, 50, 50, 50), 362: (2, 80, 80, 80, 80, 80, 80), 363: (3, 70, 40, 50, 55, 50, 25), 364: (3, 90, 60, 70, 75, 70, 45), 365: (3, 110, 80, 90, 95, 90, 65), 366: (0, 35, 64, 85, 74, 55, 32), 367: (0, 55, 104, 105, 94, 75, 52), 368: (0, 55, 84, 105, 114, 75, 52), 369: (4, 100, 90, 130, 45, 65, 55), 370: (1, 43, 30, 55, 40, 65, 97), 371: (4, 45, 75, 60, 40, 30, 50), 372: (4, 65, 95, 100, 60, 50, 50), 373: (4, 95, 135, 80, 110, 80, 100), 374: (4, 40, 55, 80, 35, 60, 30), 375: (4, 60, 75, 100, 55, 80, 50), 376: (4, 80, 135, 130, 95, 90, 70), 377: (4, 80, 100, 200, 50, 100, 50), 378: (4, 80, 50, 100, 100, 200, 50), 379: (4, 80, 75, 150, 75, 150, 50), 380: (4, 80, 80, 90, 110, 130, 110), 381: (4, 80, 90, 80, 130, 110, 110), 382: (4, 100, 100, 90, 150, 140, 90), 383: (4, 100, 150, 140, 100, 90, 90), 384: (4, 105, 150, 90, 150, 90, 95), 385: (4, 100, 100, 100, 100, 100, 100), 386: (4, 50, 150, 50, 150, 50, 150), 387: (3, 55, 68, 64, 45, 55, 31), 388: (3, 75, 89, 85, 55, 65, 36), 389: (3, 95, 109, 105, 75, 85, 56), 390: (3, 44, 58, 44, 58, 44, 61), 391: (3, 64, 78, 52, 78, 52, 81), 392: (3, 76, 104, 71, 104, 71, 108), 393: (3, 53, 51, 53, 61, 56, 40), 394: (3, 64, 66, 68, 81, 76, 50), 395: (3, 84, 86, 88, 111, 101, 60), 396: (3, 40, 55, 30, 30, 30, 60), 397: (3, 55, 75, 50, 40, 40, 80), 398: (3, 85, 120, 70, 50, 50, 100), 399: (2, 59, 45, 40, 35, 40, 31), 400: (2, 79, 85, 60, 55, 60, 71), 401: (3, 37, 25, 41, 25, 41, 25), 402: (3, 77, 85, 51, 55, 51, 65), 403: (3, 45, 65, 34, 40, 34, 45), 404: (3, 60, 85, 49, 60, 49, 60), 405: (3, 80, 120, 79, 95, 79, 70), 406: (3, 40, 30, 35, 50, 70, 55), 407: (3, 60, 70, 55, 125, 105, 90), 408: (0, 67, 125, 40, 30, 30, 58), 409: (0, 97, 165, 60, 65, 50, 58), 410: (0, 30, 42, 118, 42, 88, 30), 411: (0, 60, 52, 168, 47, 138, 30), 412: (2, 40, 29, 45, 29, 45, 36), 413: (2, 60, 59, 85, 79, 105, 36), 414: (2, 70, 94, 50, 94, 50, 66), 415: (3, 30, 30, 42, 30, 42, 70), 416: (3, 70, 80, 102, 80, 102, 40), 417: (2, 60, 45, 70, 45, 90, 95), 418: (2, 55, 65, 35, 60, 30, 85), 419: (2, 85, 105, 55, 85, 50, 115), 420: (2, 45, 35, 45, 62, 53, 35), 421: (2, 70, 60, 70, 87, 78, 85), 422: (2, 76, 48, 48, 57, 62, 34), 423: (2, 111, 83, 68, 92, 82, 39), 424: (1, 75, 100, 66, 60, 66, 115), 425: (5, 90, 50, 34, 60, 44, 70), 426: (5, 150, 80, 44, 90, 54, 80), 427: (2, 55, 66, 44, 44, 56, 85), 428: (2, 65, 76, 84, 54, 96, 105), 429: (1, 60, 60, 60, 105, 105, 105), 430: (3, 100, 125, 52, 105, 52, 71), 431: (1, 49, 55, 42, 42, 37, 85), 432: (1, 71, 82, 64, 64, 59, 112), 433: (1, 45, 30, 50, 65, 50, 45), 434: (2, 63, 63, 47, 41, 41, 74), 435: (2, 103, 93, 67, 71, 61, 84), 436: (2, 57, 24, 86, 24, 86, 23), 437: (2, 67, 89, 116, 79, 116, 33), 438: (2, 50, 80, 95, 10, 45, 10), 439: (2, 20, 25, 45, 70, 90, 60), 440: (1, 100, 5, 5, 15, 65, 30), 441: (3, 76, 65, 45, 92, 42, 91), 442: (2, 50, 92, 108, 92, 108, 35), 443: (4, 58, 70, 45, 40, 45, 42), 444: (4, 68, 90, 65, 50, 55, 82), 445: (4, 108, 130, 95, 80, 85, 102), 446: (4, 135, 85, 40, 40, 85, 5), 447: (3, 40, 70, 40, 35, 40, 60), 448: (3, 70, 110, 70, 115, 70, 90), 449: (4, 68, 72, 78, 38, 42, 32), 450: (4, 108, 112, 118, 68, 72, 47), 451: (4, 40, 50, 90, 30, 55, 65), 452: (4, 70, 90, 110, 60, 75, 95), 453: (2, 48, 61, 40, 61, 40, 50), 454: (2, 83, 106, 65, 86, 65, 85), 455: (4, 74, 100, 72, 90, 72, 46), 456: (0, 49, 49, 56, 49, 61, 66), 457: (0, 69, 69, 76, 69, 86, 91), 458: (4, 45, 20, 50, 60, 120, 50), 459: (4, 60, 62, 50, 62, 60, 40), 460: (4, 90, 92, 75, 92, 85, 60), 461: (3, 70, 120, 65, 45, 85, 125), 462: (2, 70, 70, 115, 130, 90, 60), 463: (2, 110, 85, 95, 80, 95, 50), 464: (4, 115, 140, 130, 55, 55, 40), 465: (2, 100, 100, 125, 110, 50, 50), 466: (2, 75, 123, 67, 95, 85, 95), 467: (2, 75, 95, 67, 125, 95, 83), 468: (1, 85, 50, 95, 120, 115, 80), 469: (2, 86, 76, 86, 116, 56, 95), 470: (2, 65, 110, 130, 60, 65, 95), 471: (2, 65, 60, 110, 130, 95, 65), 472: (3, 75, 95, 125, 45, 75, 95), 473: (4, 110, 130, 80, 70, 60, 80), 474: (2, 85, 80, 70, 135, 75, 90), 475: (4, 68, 125, 65, 65, 115, 80), 476: (2, 60, 55, 145, 75, 150, 40), 477: (1, 45, 100, 135, 65, 135, 45), 478: (2, 70, 80, 70, 80, 70, 110), 479: (2, 50, 50, 77, 95, 77, 91), 480: (4, 75, 75, 130, 75, 130, 95), 481: (4, 80, 105, 105, 105, 105, 80), 482: (4, 75, 125, 70, 125, 70, 115), 483: (4, 100, 120, 120, 150, 100, 90), 484: (4, 90, 120, 100, 150, 120, 100), 485: (4, 91, 90, 106, 130, 106, 77), 486: (4, 110, 160, 110, 80, 110, 100), 487: (4, 150, 100, 120, 100, 120, 90), 488: (4, 120, 70, 120, 75, 130, 85), 489: (4, 80, 80, 80, 80, 80, 80), 490: (4, 100, 100, 100, 100, 100, 100), 491: (4, 70, 90, 90, 135, 90, 125), 492: (3, 100, 100, 100, 100, 100, 100), 493: (4, 120, 120, 120, 120, 120, 120), 494: (4, 100, 100, 100, 100, 100, 100), 495: (3, 45, 45, 55, 45, 55, 63), 496: (3, 60, 60, 75, 60, 75, 83), 497: (3, 75, 75, 95, 75, 95, 113), 498: (3, 65, 63, 45, 45, 45, 45), 499: (3, 90, 93, 55, 70, 55, 55), 500: (3, 110, 123, 65, 100, 65, 65), 501: (3, 55, 55, 45, 63, 45, 45), 502: (3, 75, 75, 60, 83, 60, 60), 503: (3, 95, 100, 85, 108, 70, 70), 504: (2, 45, 55, 39, 35, 39, 42), 505: (2, 60, 85, 69, 60, 69, 77), 506: (3, 45, 60, 45, 25, 45, 55), 507: (3, 65, 80, 65, 35, 65, 60), 508: (3, 85, 100, 90, 45, 90, 80), 509: (2, 41, 50, 37, 50, 37, 66), 510: (2, 64, 88, 50, 88, 50, 106), 511: (2, 50, 53, 48, 53, 48, 64), 512: (2, 75, 98, 63, 98, 63, 101), 513: (2, 50, 53, 48, 53, 48, 64), 514: (2, 75, 98, 63, 98, 63, 101), 515: (2, 50, 53, 48, 53, 48, 64), 516: (2, 75, 98, 63, 98, 63, 101), 517: (1, 76, 25, 45, 67, 55, 24), 518: (1, 116, 55, 85, 107, 95, 29), 519: (3, 50, 55, 50, 36, 30, 43), 520: (3, 62, 77, 62, 50, 42, 65), 521: (3, 80, 105, 80, 65, 55, 93), 522: (2, 45, 60, 32, 50, 32, 76), 523: (2, 75, 100, 63, 80, 63, 116), 524: (3, 55, 75, 85, 25, 25, 15), 525: (3, 70, 105, 105, 50, 40, 20), 526: (3, 85, 135, 130, 60, 70, 25), 527: (2, 55, 45, 43, 55, 43, 72), 528: (2, 67, 57, 55, 77, 55, 114), 529: (2, 60, 85, 40, 30, 45, 68), 530: (2, 110, 135, 60, 50, 65, 88), 531: (1, 103, 60, 86, 60, 86, 50), 532: (3, 75, 80, 55, 25, 35, 35), 533: (3, 85, 105, 85, 40, 50, 40), 534: (3, 105, 140, 95, 55, 65, 45), 535: (3, 50, 50, 40, 50, 40, 64), 536: (3, 75, 65, 55, 65, 55, 69), 537: (3, 105, 85, 75, 85, 75, 74), 538: (2, 120, 100, 85, 30, 85, 45), 539: (2, 75, 125, 75, 30, 75, 85), 540: (3, 45, 53, 70, 40, 60, 42), 541: (3, 55, 63, 90, 50, 80, 42), 542: (3, 75, 103, 80, 70, 70, 92), 543: (3, 30, 45, 59, 30, 39, 57), 544: (3, 40, 55, 99, 40, 79, 47), 545: (3, 60, 90, 89, 55, 69, 112), 546: (2, 40, 27, 60, 37, 50, 66), 547: (2, 60, 67, 85, 77, 75, 116), 548: (2, 45, 35, 50, 70, 50, 30), 549: (2, 70, 60, 75, 110, 75, 90), 550: (2, 70, 92, 65, 80, 55, 98), 551: (3, 50, 72, 35, 35, 35, 65), 552: (3, 60, 82, 45, 45, 45, 74), 553: (3, 95, 117, 70, 65, 70, 92), 554: (3, 70, 90, 45, 15, 45, 50), 555: (3, 105, 140, 55, 30, 55, 95), 556: (2, 75, 86, 67, 106, 67, 60), 557: (2, 50, 65, 85, 35, 35, 55), 558: (2, 70, 95, 125, 65, 75, 45), 559: (2, 50, 75, 70, 35, 70, 48), 560: (2, 65, 90, 115, 45, 115, 58), 561: (2, 72, 58, 80, 103, 80, 97), 562: (2, 38, 30, 85, 55, 65, 30), 563: (2, 58, 50, 145, 95, 105, 30), 564: (2, 54, 78, 103, 53, 45, 22), 565: (2, 74, 108, 133, 83, 65, 32), 566: (2, 55, 112, 45, 74, 45, 70), 567: (2, 75, 140, 65, 112, 65, 110), 568: (2, 50, 50, 62, 40, 62, 65), 569: (2, 80, 95, 82, 60, 82, 75), 570: (3, 40, 65, 40, 80, 40, 65), 571: (3, 60, 105, 60, 120, 60, 105), 572: (1, 55, 50, 40, 40, 40, 75), 573: (1, 75, 95, 60, 65, 60, 115), 574: (3, 45, 30, 50, 55, 65, 45), 575: (3, 60, 45, 70, 75, 85, 55), 576: (3, 70, 55, 95, 95, 110, 65), 577: (3, 45, 30, 40, 105, 50, 20), 578: (3, 65, 40, 50, 125, 60, 30), 579: (3, 110, 65, 75, 125, 85, 30), 580: (2, 62, 44, 50, 44, 50, 55), 581: (2, 75, 87, 63, 87, 63, 98), 582: (4, 36, 50, 50, 65, 60, 44), 583: (4, 51, 65, 65, 80, 75, 59), 584: (4, 71, 95, 85, 110, 95, 79), 585: (2, 60, 60, 50, 40, 50, 75), 586: (2, 80, 100, 70, 60, 70, 95), 587: (2, 55, 75, 60, 75, 60, 103), 588: (2, 50, 75, 45, 40, 45, 60), 589: (2, 70, 135, 105, 60, 105, 20), 590: (2, 69, 55, 45, 55, 55, 15), 591: (2, 114, 85, 70, 85, 80, 30), 592: (2, 55, 40, 50, 65, 85, 40), 593: (2, 100, 60, 70, 85, 105, 60), 594: (1, 165, 75, 80, 40, 45, 65), 595: (2, 50, 47, 50, 57, 50, 65), 596: (2, 70, 77, 60, 97, 60, 108), 597: (2, 44, 50, 91, 24, 86, 10), 598: (2, 74, 94, 131, 54, 116, 20), 599: (3, 40, 55, 70, 45, 60, 30), 600: (3, 60, 80, 95, 70, 85, 50), 601: (3, 60, 100, 115, 70, 85, 90), 602: (4, 35, 55, 40, 45, 40, 60), 603: (4, 65, 85, 70, 75, 70, 40), 604: (4, 85, 115, 80, 105, 80, 50), 605: (2, 55, 55, 55, 85, 55, 30), 606: (2, 75, 75, 75, 125, 95, 40), 607: (3, 50, 30, 55, 65, 55, 20), 608: (3, 60, 40, 60, 95, 60, 55), 609: (3, 60, 55, 90, 145, 90, 80), 610: (4, 46, 87, 60, 30, 40, 57), 611: (4, 66, 117, 70, 40, 50, 67), 612: (4, 76, 147, 90, 60, 70, 97), 613: (2, 55, 70, 40, 60, 40, 40), 614: (2, 95, 110, 80, 70, 80, 50), 615: (2, 70, 50, 30, 95, 135, 105), 616: (2, 50, 40, 85, 40, 65, 25), 617: (2, 80, 70, 40, 100, 60, 145), 618: (2, 109, 66, 84, 81, 99, 32), 619: (3, 45, 85, 50, 55, 50, 65), 620: (3, 65, 125, 60, 95, 60, 105), 621: (2, 77, 120, 90, 60, 90, 48), 622: (2, 59, 74, 50, 35, 50, 35), 623: (2, 89, 124, 80, 55, 80, 55), 624: (2, 45, 85, 70, 40, 40, 60), 625: (2, 65, 125, 100, 60, 70, 70), 626: (2, 95, 110, 95, 40, 95, 55), 627: (4, 70, 83, 50, 37, 50, 60), 628: (4, 100, 123, 75, 57, 75, 80), 629: (4, 70, 55, 75, 45, 65, 60), 630: (4, 110, 65, 105, 55, 95, 80), 631: (2, 85, 97, 66, 105, 66, 65), 632: (2, 58, 109, 112, 48, 48, 109), 633: (4, 52, 65, 50, 45, 50, 38), 634: (4, 72, 85, 70, 65, 70, 58), 635: (4, 92, 105, 90, 125, 90, 98), 636: (4, 55, 85, 55, 50, 55, 60), 637: (4, 85, 60, 65, 135, 105, 100), 638: (4, 91, 90, 129, 90, 72, 108), 639: (4, 91, 129, 90, 72, 90, 108), 640: (4, 91, 90, 72, 90, 129, 108), 641: (4, 79, 115, 70, 125, 80, 111), 642: (4, 79, 115, 70, 125, 80, 111), 643: (4, 100, 120, 100, 150, 120, 90), 644: (4, 100, 150, 120, 120, 100, 90), 645: (4, 89, 125, 90, 115, 80, 101), 646: (4, 125, 130, 90, 130, 90, 95), 647: (4, 91, 72, 90, 129, 90, 108), 648: (4, 100, 77, 77, 128, 128, 90), 649: (4, 71, 120, 95, 120, 95, 99) } # Exp lookup table lvlexp = { 1: (0, 0, 0, 0, 0, 0), 2: (15, 6, 8, 9, 10, 4), 3: (52, 21, 27, 57, 33, 13), 4: (122, 51, 64, 96, 80, 32), 5: (237, 100, 125, 135, 156, 65), 6: (406, 172, 216, 179, 270, 112), 7: (637, 274, 343, 236, 428, 178), 8: (942, 409, 512, 314, 640, 276), 9: (1326, 583, 729, 419, 911, 393), 10: (1800, 800, 1000, 560, 1250, 540), 11: (2369, 1064, 1331, 742, 1663, 745), 12: (3041, 1382, 1728, 973, 2160, 967), 13: (3822, 1757, 2197, 1261, 2746, 1230), 14: (4719, 2195, 2744, 1612, 3430, 1591), 15: (5737, 2700, 3375, 2035, 4218, 1957), 16: (6881, 3276, 4096, 2535, 5120, 2457), 17: (8155, 3930, 4913, 3120, 6141, 3046), 18: (9564, 4665, 5832, 3798, 7290, 3732), 19: (11111, 5487, 6859, 4575, 8573, 4526), 20: (12800, 6400, 8000, 5460, 10000, 5440), 21: (14632, 7408, 9261, 6458, 11576, 6482), 22: (16610, 8518, 10648, 7577, 13310, 7666), 23: (18737, 9733, 12167, 8825, 15208, 9003), 24: (21012, 11059, 13824, 10208, 17280, 10506), 25: (23437, 12500, 15625, 11735, 19531, 12187), 26: (26012, 14060, 17576, 13411, 21970, 14060), 27: (28737, 15746, 19683, 15244, 24603, 16140), 28: (31610, 17561, 21952, 17242, 27440, 18439), 29: (34632, 19511, 24389, 19411, 30486, 20974), 30: (37800, 21600, 27000, 21760, 33750, 23760), 31: (41111, 23832, 29791, 24294, 37238, 26811), 32: (44564, 26214, 32768, 27021, 40960, 30146), 33: (48155, 28749, 35937, 29949, 44921, 33780), 34: (51881, 31443, 39304, 33084, 49130, 37731), 35: (55737, 34300, 42875, 36435, 53593, 42017), 36: (59719, 37324, 46656, 40007, 58320, 46656), 37: (63822, 40522, 50653, 43808, 63316, 50653), 38: (68041, 43897, 54872, 47846, 68590, 55969), 39: (72369, 47455, 59319, 52127, 74148, 60505), 40: (76800, 51200, 64000, 56660, 80000, 66560), 41: (81326, 55136, 68921, 61450, 86151, 71677), 42: (85942, 59270, 74088, 66505, 92610, 78533), 43: (90637, 63605, 79507, 71833, 99383, 84277), 44: (95406, 68147, 85184, 77440, 106480, 91998), 45: (100237, 72900, 91125, 83335, 113906, 98415), 46: (105122, 77868, 97336, 89523, 121670, 107069), 47: (110052, 83058, 103823, 96012, 129778, 114205), 48: (115015, 88473, 110592, 102810, 138240, 123863), 49: (120001, 94119, 117649, 109923, 147061, 131766), 50: (125000, 100000, 125000, 117360, 156250, 142500), 51: (131324, 106120, 132651, 125126, 165813, 151222), 52: (137795, 112486, 140608, 133229, 175760, 163105), 53: (144410, 119101, 148877, 141677, 186096, 172697), 54: (151165, 125971, 157464, 150476, 196830, 185807), 55: (158056, 133100, 166375, 159635, 207968, 196322), 56: (165079, 140492, 175616, 169159, 219520, 210739), 57: (172229, 148154, 185193, 179056, 231491, 222231), 58: (179503, 156089, 195112, 189334, 243890, 238036), 59: (186894, 164303, 205379, 199999, 256723, 250562), 60: (194400, 172800, 216000, 211060, 270000, 267840), 61: (202013, 181584, 226981, 222522, 283726, 281456), 62: (209728, 190662, 238328, 234393, 297910, 300293), 63: (217540, 200037, 250047, 246681, 312558, 315059), 64: (225443, 209715, 262144, 259392, 327680, 335544), 65: (233431, 219700, 274625, 272535, 343281, 351520), 66: (241496, 229996, 287496, 286115, 359370, 373744), 67: (249633, 240610, 300763, 300140, 375953, 390991), 68: (257834, 251545, 314432, 314618, 393040, 415050), 69: (267406, 262807, 328509, 329555, 410636, 433631), 70: (276458, 274400, 343000, 344960, 428750, 459620), 71: (286328, 286328, 357911, 360838, 447388, 479600), 72: (296358, 298598, 373248, 377197, 466560, 507617), 73: (305767, 311213, 389017, 394045, 486271, 529063), 74: (316074, 324179, 405224, 411388, 506530, 559209), 75: (326531, 337500, 421875, 429235, 527343, 582187), 76: (336255, 351180, 438976, 447591, 548720, 614566), 77: (346965, 365226, 456533, 466464, 570666, 639146), 78: (357812, 379641, 474552, 485862, 593190, 673863), 79: (367807, 394431, 493039, 505791, 616298, 700115), 80: (378880, 409600, 512000, 526260, 640000, 737280), 81: (390077, 425152, 531441, 547274, 664301, 765275), 82: (400293, 441094, 551368, 568841, 689210, 804997), 83: (411686, 457429, 571787, 590969, 714733, 834809), 84: (423190, 474163, 592704, 613664, 740880, 877201), 85: (433572, 491300, 614125, 636935, 767656, 908905), 86: (445239, 508844, 636056, 660787, 795070, 954084), 87: (457001, 526802, 658503, 685228, 823128, 987754), 88: (467489, 545177, 681472, 710266, 851840, 1035837), 89: (479378, 563975, 704969, 735907, 881211, 1071552), 90: (491346, 583200, 729000, 762160, 911250, 1122660), 91: (501878, 602856, 753571, 789030, 941963, 1160499), 92: (513934, 622950, 778688, 816525, 973360, 1214753), 93: (526049, 643485, 804357, 844653, 1005446, 1254796), 94: (536557, 664467, 830584, 873420, 1038230, 1312322), 95: (548720, 685900, 857375, 902835, 1071718, 1354652), 96: (560922, 707788, 884736, 932903, 1105920, 1415577), 97: (571333, 730138, 912673, 963632, 1140841, 1460276), 98: (583539, 752953, 941192, 995030, 1176490, 1524731), 99: (591882, 776239, 970299, 1027103, 1212873, 1571884), 100: (600000, 800000, 1000000, 1059860, 1250000, 1640000) } name = { 0xa1: '0', 0xa2: '1', 0xa3: '2', 0xa4: '3', 0xa5: '4', 0xa6: '5', 0xa7: '6', 0xa8: '7', 0xa9: '8', 0xaa: '9', 0xbb: 'A', 0xbc: 'B', 0xbd: 'C', 0xbe: 'D', 0xbf: 'E', 0xc0: 'F', 0xc1: 'G', 0xc2: 'H', 0xc3: 'I', 0xc4: 'J', 0xc5: 'K', 0xc6: 'L', 0xc7: 'M', 0xc8: 'N', 0xc9: 'O', 0xca: 'P', 0xcb: 'Q', 0xcc: 'R', 0xcd: 'S', 0xce: 'T', 0xcf: 'U', 0xd0: 'V', 0xd1: 'W', 0xd2: 'X', 0xd3: 'Y', 0xd4: 'Z', 0xd5: 'a', 0xd6: 'b', 0xd7: 'c', 0xd8: 'd', 0xd9: 'e', 0xda: 'f', 0xdb: 'g', 0xdc: 'h', 0xdd: 'i', 0xde: 'j', 0xdf: 'k', 0xe0: 'l', 0xe1: 'm', 0xe2: 'n', 0xe3: 'o', 0xe4: 'p', 0xe5: 'q', 0xe6: 'r', 0xe7: 's', 0xe8: 't', 0xe9: 'u', 0xea: 'v', 0xeb: 'w', 0xec: 'x', 0xed: 'y', 0xee: 'z' } abilities = { 1: ('\x41', '\x41'), 2: ('\x41', '\x41'), 3: ('\x41', '\x41'), 4: ('\x42', '\x42'), 5: ('\x42', '\x42'), 6: ('\x42', '\x42'), 7: ('\x43', '\x43'), 8: ('\x43', '\x43'), 9: ('\x43', '\x43'), 10: ('\x13', '\x13'), 11: ('\x3d', '\x3d'), 12: ('\x0e', '\x0e'), 13: ('\x13', '\x13'), 14: ('\x3d', '\x3d'), 15: ('\x44', '\x44'), 16: ('\x33', '\x33'), 17: ('\x33', '\x33'), 18: ('\x33', '\x33'), 19: ('\x32', '\x3e'), 20: ('\x32', '\x3e'), 21: ('\x33', '\x33'), 22: ('\x33', '\x33'), 23: ('\x3d', '\x16'), 24: ('\x3d', '\x16'), 25: ('\x09', '\x09'), 26: ('\x09', '\x09'), 27: ('\x08', '\x08'), 28: ('\x08', '\x08'), 29: ('\x26', '\x26'), 30: ('\x26', '\x26'), 31: ('\x26', '\x26'), 32: ('\x26', '\x26'), 33: ('\x26', '\x26'), 34: ('\x26', '\x26'), 35: ('\x38', '\x38'), 36: ('\x38', '\x38'), 37: ('\x12', '\x12'), 38: ('\x12', '\x12'), 39: ('\x38', '\x38'), 40: ('\x38', '\x38'), 41: ('\x27', '\x27'), 42: ('\x27', '\x27'), 43: ('\x22', '\x22'), 44: ('\x22', '\x22'), 45: ('\x22', '\x22'), 46: ('\x1b', '\x1b'), 47: ('\x1b', '\x1b'), 48: ('\x0e', '\x0e'), 49: ('\x13', '\x13'), 50: ('\x08', '\x47'), 51: ('\x08', '\x47'), 52: ('\x35', '\x35'), 53: ('\x07', '\x07'), 54: ('\x06', '\x0d'), 55: ('\x06', '\x0d'), 56: ('\x48', '\x48'), 57: ('\x48', '\x48'), 58: ('\x16', '\x12'), 59: ('\x16', '\x12'), 60: ('\x06', '\x0b'), 61: ('\x06', '\x0b'), 62: ('\x06', '\x0b'), 63: ('\x1c', '\x27'), 64: ('\x1c', '\x27'), 65: ('\x1c', '\x27'), 66: ('\x3e', '\x3e'), 67: ('\x3e', '\x3e'), 68: ('\x3e', '\x3e'), 69: ('\x22', '\x22'), 70: ('\x22', '\x22'), 71: ('\x22', '\x22'), 72: ('\x1d', '\x40'), 73: ('\x1d', '\x40'), 74: ('\x45', '\x05'), 75: ('\x45', '\x05'), 76: ('\x45', '\x05'), 77: ('\x32', '\x12'), 78: ('\x32', '\x12'), 79: ('\x0c', '\x14'), 80: ('\x0c', '\x14'), 81: ('\x2a', '\x05'), 82: ('\x2a', '\x05'), 83: ('\x33', '\x27'), 84: ('\x32', '\x30'), 85: ('\x32', '\x30'), 86: ('\x2f', '\x2f'), 87: ('\x2f', '\x2f'), 88: ('\x01', '\x3c'), 89: ('\x01', '\x3c'), 90: ('\x4b', '\x4b'), 91: ('\x4b', '\x4b'), 92: ('\x1a', '\x1a'), 93: ('\x1a', '\x1a'), 94: ('\x1a', '\x1a'), 95: ('\x45', '\x05'), 96: ('\x0f', '\x0f'), 97: ('\x0f', '\x0f'), 98: ('\x34', '\x4b'), 99: ('\x34', '\x4b'), 100: ('\x2b', '\x09'), 101: ('\x2b', '\x09'), 102: ('\x22', '\x22'), 103: ('\x22', '\x22'), 104: ('\x45', '\x1f'), 105: ('\x45', '\x1f'), 106: ('\x07', '\x07'), 107: ('\x33', '\x33'), 108: ('\x0c', '\x14'), 109: ('\x1a', '\x1a'), 110: ('\x1a', '\x1a'), 111: ('\x45', '\x1f'), 112: ('\x45', '\x1f'), 113: ('\x1e', '\x20'), 114: ('\x22', '\x22'), 115: ('\x30', '\x30'), 116: ('\x21', '\x21'), 117: ('\x26', '\x26'), 118: ('\x21', '\x29'), 119: ('\x21', '\x29'), 120: ('\x23', '\x1e'), 121: ('\x23', '\x1e'), 122: ('\x2b', '\x2b'), 123: ('\x44', '\x44'), 124: ('\x0c', '\x0c'), 125: ('\x09', '\x09'), 126: ('\x31', '\x31'), 127: ('\x34', '\x34'), 128: ('\x16', '\x16'), 129: ('\x21', '\x21'), 130: ('\x16', '\x16'), 131: ('\x0b', '\x4b'), 132: ('\x07', '\x07'), 133: ('\x32', '\x32'), 134: ('\x0b', '\x0b'), 135: ('\x0a', '\x0a'), 136: ('\x12', '\x12'), 137: ('\x24', '\x24'), 138: ('\x21', '\x4b'), 139: ('\x21', '\x4b'), 140: ('\x21', '\x04'), 141: ('\x21', '\x04'), 142: ('\x45', '\x2e'), 143: ('\x11', '\x2f'), 144: ('\x2e', '\x2e'), 145: ('\x2e', '\x2e'), 146: ('\x2e', '\x2e'), 147: ('\x3d', '\x3d'), 148: ('\x3d', '\x3d'), 149: ('\x27', '\x27'), 150: ('\x2e', '\x2e'), 151: ('\x1c', '\x1c'), 152: ('\x41', '\x41'), 153: ('\x41', '\x41'), 154: ('\x41', '\x41'), 155: ('\x42', '\x42'), 156: ('\x42', '\x42'), 157: ('\x42', '\x42'), 158: ('\x43', '\x43'), 159: ('\x43', '\x43'), 160: ('\x43', '\x43'), 161: ('\x32', '\x33'), 162: ('\x32', '\x33'), 163: ('\x0f', '\x33'), 164: ('\x0f', '\x33'), 165: ('\x44', '\x30'), 166: ('\x44', '\x30'), 167: ('\x0f', '\x44'), 168: ('\x0f', '\x44'), 169: ('\x27', '\x27'), 170: ('\x0a', '\x23'), 171: ('\x0a', '\x23'), 172: ('\x09', '\x09'), 173: ('\x38', '\x38'), 174: ('\x38', '\x38'), 175: ('\x37', '\x20'), 176: ('\x37', '\x20'), 177: ('\x1c', '\x30'), 178: ('\x1c', '\x30'), 179: ('\x09', '\x09'), 180: ('\x09', '\x09'), 181: ('\x09', '\x09'), 182: ('\x22', '\x22'), 183: ('\x2f', '\x25'), 184: ('\x2f', '\x25'), 185: ('\x45', '\x05'), 186: ('\x06', '\x0b'), 187: ('\x22', '\x22'), 188: ('\x22', '\x22'), 189: ('\x22', '\x22'), 190: ('\x32', '\x35'), 191: ('\x22', '\x22'), 192: ('\x22', '\x22'), 193: ('\x03', '\x0e'), 194: ('\x06', '\x0b'), 195: ('\x06', '\x0b'), 196: ('\x1c', '\x1c'), 197: ('\x1c', '\x1c'), 198: ('\x0f', '\x0f'), 199: ('\x0c', '\x14'), 200: ('\x1a', '\x1a'), 201: ('\x1a', '\x1a'), 202: ('\x17', '\x17'), 203: ('\x27', '\x30'), 204: ('\x05', '\x05'), 205: ('\x05', '\x05'), 206: ('\x20', '\x32'), 207: ('\x08', '\x34'), 208: ('\x45', '\x05'), 209: ('\x16', '\x32'), 210: ('\x16', '\x16'), 211: ('\x21', '\x26'), 212: ('\x44', '\x44'), 213: ('\x05', '\x05'), 214: ('\x44', '\x3e'), 215: ('\x27', '\x33'), 216: ('\x35', '\x35'), 217: ('\x3e', '\x3e'), 218: ('\x28', '\x31'), 219: ('\x28', '\x31'), 220: ('\x0c', '\x0c'), 221: ('\x0c', '\x0c'), 222: ('\x37', '\x1e'), 223: ('\x37', '\x37'), 224: ('\x15', '\x15'), 225: ('\x37', '\x48'), 226: ('\x21', '\x0b'), 227: ('\x33', '\x05'), 228: ('\x30', '\x12'), 229: ('\x30', '\x12'), 230: ('\x21', '\x21'), 231: ('\x35', '\x35'), 232: ('\x05', '\x05'), 233: ('\x24', '\x24'), 234: ('\x16', '\x16'), 235: ('\x14', '\x14'), 236: ('\x3e', '\x3e'), 237: ('\x16', '\x16'), 238: ('\x0c', '\x0c'), 239: ('\x09', '\x09'), 240: ('\x31', '\x31'), 241: ('\x2f', '\x2f'), 242: ('\x1e', '\x20'), 243: ('\x2e', '\x2e'), 244: ('\x2e', '\x2e'), 245: ('\x2e', '\x2e'), 246: ('\x3e', '\x3e'), 247: ('\x3d', '\x3d'), 248: ('\x2d', '\x2d'), 249: ('\x2e', '\x2e'), 250: ('\x2e', '\x2e'), 251: ('\x1e', '\x1e'), 252: ('\x41', '\x41'), 253: ('\x41', '\x41'), 254: ('\x41', '\x41'), 255: ('\x42', '\x42'), 256: ('\x42', '\x42'), 257: ('\x42', '\x42'), 258: ('\x43', '\x43'), 259: ('\x43', '\x43'), 260: ('\x43', '\x43'), 261: ('\x32', '\x32'), 262: ('\x16', '\x16'), 263: ('\x35', '\x35'), 264: ('\x35', '\x35'), 265: ('\x13', '\x13'), 266: ('\x3d', '\x3d'), 267: ('\x44', '\x44'), 268: ('\x3d', '\x3d'), 269: ('\x13', '\x13'), 270: ('\x21', '\x2c'), 271: ('\x21', '\x2c'), 272: ('\x21', '\x2c'), 273: ('\x22', '\x30'), 274: ('\x22', '\x30'), 275: ('\x22', '\x30'), 276: ('\x3e', '\x3e'), 277: ('\x3e', '\x3e'), 278: ('\x33', '\x33'), 279: ('\x33', '\x33'), 280: ('\x1c', '\x24'), 281: ('\x1c', '\x24'), 282: ('\x1c', '\x24'), 283: ('\x21', '\x21'), 284: ('\x16', '\x16'), 285: ('\x1b', '\x1b'), 286: ('\x1b', '\x1b'), 287: ('\x36', '\x36'), 288: ('\x48', '\x48'), 289: ('\x36', '\x36'), 290: ('\x0e', '\x0e'), 291: ('\x03', '\x03'), 292: ('\x19', '\x19'), 293: ('\x2b', '\x2b'), 294: ('\x2b', '\x2b'), 295: ('\x2b', '\x2b'), 296: ('\x2f', '\x3e'), 297: ('\x2f', '\x3e'), 298: ('\x2f', '\x3e'), 299: ('\x05', '\x2a'), 300: ('\x38', '\x38'), 301: ('\x38', '\x38'), 302: ('\x33', '\x33'), 303: ('\x34', '\x16'), 304: ('\x45', '\x05'), 305: ('\x45', '\x05'), 306: ('\x45', '\x05'), 307: ('\x4a', '\x4a'), 308: ('\x4a', '\x4a'), 309: ('\x09', '\x1f'), 310: ('\x09', '\x1f'), 311: ('\x39', '\x39'), 312: ('\x3a', '\x3a'), 313: ('\x23', '\x44'), 314: ('\x0c', '\x0c'), 315: ('\x1e', '\x26'), 316: ('\x40', '\x3c'), 317: ('\x40', '\x3c'), 318: ('\x18', '\x18'), 319: ('\x18', '\x18'), 320: ('\x29', '\x0c'), 321: ('\x29', '\x0c'), 322: ('\x0c', '\x0c'), 323: ('\x28', '\x28'), 324: ('\x49', '\x49'), 325: ('\x2f', '\x14'), 326: ('\x2f', '\x14'), 327: ('\x14', '\x14'), 328: ('\x34', '\x47'), 329: ('\x1a', '\x1a'), 330: ('\x1a', '\x1a'), 331: ('\x08', '\x08'), 332: ('\x08', '\x08'), 333: ('\x1e', '\x1e'), 334: ('\x1e', '\x1e'), 335: ('\x11', '\x11'), 336: ('\x3d', '\x3d'), 337: ('\x1a', '\x1a'), 338: ('\x1a', '\x1a'), 339: ('\x0c', '\x0c'), 340: ('\x0c', '\x0c'), 341: ('\x34', '\x4b'), 342: ('\x34', '\x4b'), 343: ('\x1a', '\x1a'), 344: ('\x1a', '\x1a'), 345: ('\x15', '\x15'), 346: ('\x15', '\x15'), 347: ('\x04', '\x04'), 348: ('\x04', '\x04'), 349: ('\x21', '\x21'), 350: ('\x3f', '\x3f'), 351: ('\x3b', '\x3b'), 352: ('\x10', '\x10'), 353: ('\x0f', '\x0f'), 354: ('\x0f', '\x0f'), 355: ('\x1a', '\x1a'), 356: ('\x2e', '\x2e'), 357: ('\x22', '\x22'), 358: ('\x1a', '\x1a'), 359: ('\x2e', '\x2e'), 360: ('\x17', '\x17'), 361: ('\x27', '\x27'), 362: ('\x27', '\x27'), 363: ('\x2f', '\x2f'), 364: ('\x2f', '\x2f'), 365: ('\x2f', '\x2f'), 366: ('\x4b', '\x4b'), 367: ('\x21', '\x21'), 368: ('\x21', '\x21'), 369: ('\x21', '\x45'), 370: ('\x21', '\x21'), 371: ('\x45', '\x45'), 372: ('\x45', '\x45'), 373: ('\x16', '\x16'), 374: ('\x1d', '\x1d'), 375: ('\x1d', '\x1d'), 376: ('\x1d', '\x1d'), 377: ('\x1d', '\x1d'), 378: ('\x1d', '\x1d'), 379: ('\x1d', '\x1d'), 380: ('\x1a', '\x1a'), 381: ('\x1a', '\x1a'), 382: ('\x02', '\x02'), 383: ('\x46', '\x46'), 384: ('\x4c', '\x4c'), 385: ('\x20', '\x20'), 386: ('\x2e', '\x2e') } gender = { 1: '87.5 %', 2: '87.5 %', 3: '87.5 %', 4: '87.5 %', 5: '87.5 %', 6: '87.5 %', 7: '87.5 %', 8: '87.5 %', 9: '87.5 %', 10: '50 %', 11: '50 %', 12: '50 %', 13: '50 %', 14: '50 %', 15: '50 %', 16: '50 %', 17: '50 %', 18: '50 %', 19: '50 %', 20: '50 %', 21: '50 %', 22: '50 %', 23: '50 %', 24: '50 %', 25: '50 %', 26: '50 %', 27: '50 %', 28: '50 %', 29: '0 %', 30: '0 %', 31: '0 %', 32: '100 %', 33: '100 %', 34: '100 %', 35: '25 %', 36: '25 %', 37: '25 %', 38: '25 %', 39: '25 %', 40: '25 %', 41: '50 %', 42: '50 %', 43: '50 %', 44: '50 %', 45: '50 %', 46: '50 %', 47: '50 %', 48: '50 %', 49: '50 %', 50: '50 %', 51: '50 %', 52: '50 %', 53: '50 %', 54: '50 %', 55: '50 %', 56: '50 %', 57: '50 %', 58: '75 %', 59: '75 %', 60: '50 %', 61: '50 %', 62: '50 %', 63: '75 %', 64: '75 %', 65: '75 %', 66: '75 %', 67: '75 %', 68: '75 %', 69: '50 %', 70: '50 %', 71: '50 %', 72: '50 %', 73: '50 %', 74: '50 %', 75: '50 %', 76: '50 %', 77: '50 %', 78: '50 %', 79: '50 %', 80: '50 %', 81: 'Genderless', 82: 'Genderless', 83: '50 %', 84: '50 %', 85: '50 %', 86: '50 %', 87: '50 %', 88: '50 %', 89: '50 %', 90: '50 %', 91: '50 %', 92: '50 %', 93: '50 %', 94: '50 %', 95: '50 %', 96: '50 %', 97: '50 %', 98: '50 %', 99: '50 %', 100: 'Genderless', 101: 'Genderless', 102: '50 %', 103: '50 %', 104: '50 %', 105: '50 %', 106: '100 %', 107: '100 %', 108: '50 %', 109: '50 %', 110: '50 %', 111: '50 %', 112: '50 %', 113: '0 %', 114: '50 %', 115: '0 %', 116: '50 %', 117: '50 %', 118: '50 %', 119: '50 %', 120: 'Genderless', 121: 'Genderless', 122: '50 %', 123: '50 %', 124: '0 %', 125: '75 %', 126: '75 %', 127: '50 %', 128: '100 %', 129: '50 %', 130: '50 %', 131: '50 %', 132: 'Genderless', 133: '87.5 %', 134: '87.5 %', 135: '87.5 %', 136: '87.5 %', 137: 'Genderless', 138: '87.5 %', 139: '87.5 %', 140: '87.5 %', 141: '87.5 %', 142: '87.5 %', 143: '87.5 %', 144: 'Genderless', 145: 'Genderless', 146: 'Genderless', 147: '50 %', 148: '50 %', 149: '50 %', 150: 'Genderless', 151: 'Genderless', 152: '87.5 %', 153: '87.5 %', 154: '87.5 %', 155: '87.5 %', 156: '87.5 %', 157: '87.5 %', 158: '87.5 %', 159: '87.5 %', 160: '87.5 %', 161: '50 %', 162: '50 %', 163: '50 %', 164: '50 %', 165: '50 %', 166: '50 %', 167: '50 %', 168: '50 %', 169: '50 %', 170: '50 %', 171: '50 %', 172: '50 %', 173: '25 %', 174: '25 %', 175: '87.5 %', 176: '87.5 %', 177: '50 %', 178: '50 %', 179: '50 %', 180: '50 %', 181: '50 %', 182: '50 %', 183: '50 %', 184: '50 %', 185: '50 %', 186: '50 %', 187: '50 %', 188: '50 %', 189: '50 %', 190: '50 %', 191: '50 %', 192: '50 %', 193: '50 %', 194: '50 %', 195: '50 %', 196: '87.5 %', 197: '87.5 %', 198: '50 %', 199: '50 %', 200: '50 %', 201: 'Genderless', 202: '50 %', 203: '50 %', 204: '50 %', 205: '50 %', 206: '50 %', 207: '50 %', 208: '50 %', 209: '25 %', 210: '25 %', 211: '50 %', 212: '50 %', 213: '50 %', 214: '50 %', 215: '50 %', 216: '50 %', 217: '50 %', 218: '50 %', 219: '50 %', 220: '50 %', 221: '50 %', 222: '25 %', 223: '50 %', 224: '50 %', 225: '50 %', 226: '50 %', 227: '50 %', 228: '50 %', 229: '50 %', 230: '50 %', 231: '50 %', 232: '50 %', 233: 'Genderless', 234: '50 %', 235: '50 %', 236: '100 %', 237: '100 %', 238: '0 %', 239: '75 %', 240: '75 %', 241: '0 %', 242: '0 %', 243: 'Genderless', 244: 'Genderless', 245: 'Genderless', 246: '50 %', 247: '50 %', 248: '50 %', 249: 'Genderless', 250: 'Genderless', 251: 'Genderless', 252: '87.5 %', 253: '87.5 %', 254: '87.5 %', 255: '87.5 %', 256: '87.5 %', 257: '87.5 %', 258: '87.5 %', 259: '87.5 %', 260: '87.5 %', 261: '50 %', 262: '50 %', 263: '50 %', 264: '50 %', 265: '50 %', 266: '50 %', 267: '50 %', 268: '50 %', 269: '50 %', 270: '50 %', 271: '50 %', 272: '50 %', 273: '50 %', 274: '50 %', 275: '50 %', 276: '50 %', 277: '50 %', 278: '50 %', 279: '50 %', 280: '50 %', 281: '50 %', 282: '50 %', 283: '50 %', 284: '50 %', 285: '50 %', 286: '50 %', 287: '50 %', 288: '50 %', 289: '50 %', 290: '50 %', 291: '50 %', 292: 'Genderless', 293: '50 %', 294: '50 %', 295: '50 %', 296: '75 %', 297: '75 %', 298: '75 %', 299: '50 %', 300: '25 %', 301: '25 %', 302: '50 %', 303: '50 %', 304: '50 %', 305: '50 %', 306: '50 %', 307: '50 %', 308: '50 %', 309: '50 %', 310: '50 %', 311: '50 %', 312: '50 %', 313: '100 %', 314: '0 %', 315: '50 %', 316: '50 %', 317: '50 %', 318: '50 %', 319: '50 %', 320: '50 %', 321: '50 %', 322: '50 %', 323: '50 %', 324: '50 %', 325: '50 %', 326: '50 %', 327: '50 %', 328: '50 %', 329: '50 %', 330: '50 %', 331: '50 %', 332: '50 %', 333: '50 %', 334: '50 %', 335: '50 %', 336: '50 %', 337: 'Genderless', 338: 'Genderless', 339: '50 %', 340: '50 %', 341: '50 %', 342: '50 %', 343: 'Genderless', 344: 'Genderless', 345: '87.5 %', 346: '87.5 %', 347: '87.5 %', 348: '87.5 %', 349: '50 %', 350: '50 %', 351: '50 %', 352: '50 %', 353: '50 %', 354: '50 %', 355: '50 %', 356: '50 %', 357: '50 %', 358: '50 %', 359: '50 %', 360: '50 %', 361: '50 %', 362: '50 %', 363: '50 %', 364: '50 %', 365: '50 %', 366: '50 %', 367: '50 %', 368: '50 %', 369: '87.5 %', 370: '25 %', 371: '50 %', 372: '50 %', 373: '50 %', 374: 'Genderless', 375: 'Genderless', 376: 'Genderless', 377: 'Genderless', 378: 'Genderless', 379: 'Genderless', 380: '0 %', 381: '100 %', 382: 'Genderless', 383: 'Genderless', 384: 'Genderless', 385: 'Genderless', 386: 'Genderless' } unown = { 0: 0x00, 1: 0x08, 2: 0x10, 3: 0x18, 4: 0x20, 5: 0x28, 6: 0x30, 7: 0x38, 8: 0x40, 9: 0x48, 10: 0x50, 11: 0x58, 12: 0x60, 13: 0x68, 14: 0x70, 15: 0x78, 16: 0x80, 17: 0x88, 18: 0x90, 19: 0x98, 20: 0xa0, 21: 0xa8, 22: 0xb0, 23: 0xb8, 24: 0xc0, 25: 0xc8, 26: 0xd0, 27: 0xd8 } pokemonindex = { 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 77, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100, 101: 101, 102: 102, 103: 103, 104: 104, 105: 105, 106: 106, 107: 107, 108: 108, 109: 109, 110: 110, 111: 111, 112: 112, 113: 113, 114: 114, 115: 115, 116: 116, 117: 117, 118: 118, 119: 119, 120: 120, 121: 121, 122: 122, 123: 123, 124: 124, 125: 125, 126: 126, 127: 127, 128: 128, 129: 129, 130: 130, 131: 131, 132: 132, 133: 133, 134: 134, 135: 135, 136: 136, 137: 137, 138: 138, 139: 139, 140: 140, 141: 141, 142: 142, 143: 143, 144: 144, 145: 145, 146: 146, 147: 147, 148: 148, 149: 149, 150: 150, 151: 151, 152: 152, 153: 153, 154: 154, 155: 155, 156: 156, 157: 157, 158: 158, 159: 159, 160: 160, 161: 161, 162: 162, 163: 163, 164: 164, 165: 165, 166: 166, 167: 167, 168: 168, 169: 169, 170: 170, 171: 171, 172: 172, 173: 173, 174: 174, 175: 175, 176: 176, 177: 177, 178: 178, 179: 179, 180: 180, 181: 181, 182: 182, 183: 183, 184: 184, 185: 185, 186: 186, 187: 187, 188: 188, 189: 189, 190: 190, 191: 191, 192: 192, 193: 193, 194: 194, 195: 195, 196: 196, 197: 197, 198: 198, 199: 199, 200: 200, 201: 201, 202: 202, 203: 203, 204: 204, 205: 205, 206: 206, 207: 207, 208: 208, 209: 209, 210: 210, 211: 211, 212: 212, 213: 213, 214: 214, 215: 215, 216: 216, 217: 217, 218: 218, 219: 219, 220: 220, 221: 221, 222: 222, 223: 223, 224: 224, 225: 225, 226: 226, 227: 227, 228: 228, 229: 229, 230: 230, 231: 231, 232: 232, 233: 233, 234: 234, 235: 235, 236: 236, 237: 237, 238: 238, 239: 239, 240: 240, 241: 241, 242: 242, 243: 243, 244: 244, 245: 245, 246: 246, 247: 247, 248: 248, 249: 249, 250: 250, 251: 251, 277: 252, 278: 253, 279: 254, 280: 255, 281: 256, 282: 257, 283: 258, 284: 259, 285: 260, 286: 261, 287: 262, 288: 263, 289: 264, 290: 265, 291: 266, 292: 267, 293: 268, 294: 269, 295: 270, 296: 271, 297: 272, 298: 273, 299: 274, 300: 275, 301: 290, 302: 291, 303: 292, 304: 276, 305: 277, 306: 285, 307: 286, 308: 327, 309: 278, 310: 279, 311: 283, 312: 284, 313: 320, 314: 321, 315: 300, 316: 301, 317: 352, 318: 343, 319: 344, 320: 299, 321: 324, 322: 302, 323: 339, 324: 340, 325: 370, 326: 341, 327: 342, 328: 349, 329: 350, 330: 318, 331: 319, 332: 328, 333: 329, 334: 330, 335: 296, 336: 297, 337: 309, 338: 310, 339: 322, 340: 323, 341: 363, 342: 364, 343: 365, 344: 331, 345: 332, 346: 361, 347: 362, 348: 337, 349: 338, 350: 298, 351: 325, 352: 326, 353: 311, 354: 312, 355: 303, 356: 307, 357: 308, 358: 333, 359: 334, 360: 360, 361: 355, 362: 356, 363: 315, 364: 287, 365: 288, 366: 289, 367: 316, 368: 317, 369: 357, 370: 293, 371: 294, 372: 295, 373: 366, 374: 367, 375: 368, 376: 359, 377: 353, 378: 354, 379: 336, 380: 335, 381: 369, 382: 304, 383: 305, 384: 306, 385: 351, 386: 313, 387: 314, 388: 345, 389: 346, 390: 347, 391: 348, 392: 280, 393: 281, 394: 282, 395: 371, 396: 372, 397: 373, 398: 374, 399: 375, 400: 376, 401: 377, 402: 378, 403: 379, 404: 382, 405: 383, 406: 384, 407: 380, 408: 381, 409: 385, 410: 386, 411: 358 } movepp = { 0: 0, 1: 35, 2: 25, 3: 10, 4: 15, 5: 20, 6: 20, 7: 15, 8: 15, 9: 15, 10: 35, 11: 30, 12: 5, 13: 10, 14: 30, 15: 30, 16: 35, 17: 35, 18: 20, 19: 15, 20: 20, 21: 20, 22: 15, 23: 20, 24: 30, 25: 5, 26: 25, 27: 15, 28: 15, 29: 15, 30: 25, 31: 20, 32: 5, 33: 35, 34: 15, 35: 20, 36: 20, 37: 20, 38: 15, 39: 30, 40: 35, 41: 20, 42: 20, 43: 30, 44: 25, 45: 40, 46: 20, 47: 15, 48: 20, 49: 20, 50: 20, 51: 30, 52: 25, 53: 15, 54: 30, 55: 25, 56: 5, 57: 15, 58: 10, 59: 5, 60: 20, 61: 20, 62: 20, 63: 5, 64: 35, 65: 20, 66: 25, 67: 20, 68: 20, 69: 20, 70: 15, 71: 25, 72: 15, 73: 10, 74: 40, 75: 25, 76: 10, 77: 35, 78: 30, 79: 15, 80: 20, 81: 40, 82: 10, 83: 15, 84: 30, 85: 15, 86: 20, 87: 10, 88: 15, 89: 10, 90: 5, 91: 10, 92: 10, 93: 25, 94: 10, 95: 20, 96: 40, 97: 30, 98: 30, 99: 20, 100: 20, 101: 15, 102: 10, 103: 40, 104: 15, 105: 10, 106: 30, 107: 20, 108: 20, 109: 10, 110: 40, 111: 40, 112: 30, 113: 30, 114: 30, 115: 20, 116: 30, 117: 10, 118: 10, 119: 20, 120: 5, 121: 10, 122: 30, 123: 20, 124: 20, 125: 20, 126: 5, 127: 15, 128: 10, 129: 20, 130: 15, 131: 15, 132: 35, 133: 20, 134: 15, 135: 10, 136: 20, 137: 30, 138: 15, 139: 40, 140: 20, 141: 15, 142: 10, 143: 5, 144: 10, 145: 30, 146: 10, 147: 15, 148: 20, 149: 15, 150: 40, 151: 40, 152: 10, 153: 5, 154: 15, 155: 10, 156: 10, 157: 10, 158: 15, 159: 30, 160: 30, 161: 10, 162: 10, 163: 20, 164: 10, 165: 1, 166: 1, 167: 10, 168: 10, 169: 10, 170: 5, 171: 15, 172: 25, 173: 15, 174: 10, 175: 15, 176: 30, 177: 5, 178: 40, 179: 15, 180: 10, 181: 25, 182: 10, 183: 30, 184: 10, 185: 20, 186: 10, 187: 10, 188: 10, 189: 10, 190: 10, 191: 20, 192: 5, 193: 40, 194: 5, 195: 5, 196: 15, 197: 5, 198: 10, 199: 5, 200: 15, 201: 10, 202: 10, 203: 10, 204: 20, 205: 20, 206: 40, 207: 15, 208: 10, 209: 20, 210: 20, 211: 25, 212: 5, 213: 15, 214: 10, 215: 5, 216: 20, 217: 15, 218: 20, 219: 25, 220: 20, 221: 5, 222: 30, 223: 5, 224: 10, 225: 20, 226: 40, 227: 5, 228: 20, 229: 40, 230: 20, 231: 15, 232: 35, 233: 10, 234: 5, 235: 5, 236: 5, 237: 15, 238: 5, 239: 20, 240: 5, 241: 5, 242: 15, 243: 20, 244: 10, 245: 5, 246: 5, 247: 15, 248: 15, 249: 15, 250: 15, 251: 10, 252: 10, 253: 10, 254: 20, 255: 10, 256: 10, 257: 10, 258: 10, 259: 15, 260: 15, 261: 15, 262: 10, 263: 20, 264: 20, 265: 10, 266: 20, 267: 20, 268: 20, 269: 20, 270: 20, 271: 10, 272: 10, 273: 10, 274: 20, 275: 20, 276: 5, 277: 15, 278: 10, 279: 10, 280: 15, 281: 10, 282: 20, 283: 5, 284: 5, 285: 10, 286: 10, 287: 20, 288: 5, 289: 10, 290: 20, 291: 10, 292: 20, 293: 20, 294: 20, 295: 5, 296: 5, 297: 15, 298: 20, 299: 10, 300: 15, 301: 20, 302: 15, 303: 10, 304: 10, 305: 15, 306: 10, 307: 5, 308: 5, 309: 10, 310: 15, 311: 10, 312: 5, 313: 20, 314: 25, 315: 5, 316: 40, 317: 10, 318: 5, 319: 40, 320: 15, 321: 20, 322: 20, 323: 5, 324: 15, 325: 20, 326: 30, 327: 15, 328: 15, 329: 5, 330: 10, 331: 30, 332: 20, 333: 30, 334: 15, 335: 5, 336: 40, 337: 15, 338: 5, 339: 20, 340: 5, 341: 15, 342: 25, 343: 40, 344: 15, 345: 20, 346: 15, 347: 20, 348: 15, 349: 20, 350: 10, 351: 20, 352: 20, 353: 5, 354: 5 }