# OVERVIEW # # Run Length Decoder Scratch Pad # # DESCRIPTION # # The Cosmopolitan library includes many compressed lookup tables that # are easy to edit by hand. The toilsome part is usually just creating # them. This script should provide some insight on how it can be done. C = ['\xe2\x88\x85', '\xe2\x98\xba', '\xe2\x98\xbb', '\xe2\x99\xa5', '\xe2\x99\xa6', '\xe2\x99\xa3', '\xe2\x99\xa0', '\xe2\x80\xa2', '\xe2\x97\x98', '\xe2\x97\x8b', '\xe2\x97\x99', '\xe2\x99\x82', '\xe2\x99\x80', '\xe2\x99\xaa', '\xe2\x99\xab', '\xe2\x98\xbc', '\xe2\x96\xba', '\xe2\x97\x84', '\xe2\x86\x95', '\xe2\x80\xbc', '\xc2\xb6', '\xc2\xa7', '\xe2\x96\xac', '\xe2\x86\xa8', '\xe2\x86\x91', '\xe2\x86\x93', '\xe2\x86\x92', '\xe2\x86\x90', '\xe2\x88\x9f', '\xe2\x86\x94', '\xe2\x96\xb2', '\xe2\x96\xbc', ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\xE2\x88\x96', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '\xe2\x8c\x82', '\xc3\x87', '\xc3\xbc', '\xc3\xa9', '\xc3\xa2', '\xc3\xa4', '\xc3\xa0', '\xc3\xa5', '\xc3\xa7', '\xc3\xaa', '\xc3\xab', '\xc3\xa8', '\xc3\xaf', '\xc3\xae', '\xc3\xac', '\xc3\x84', '\xc3\x85', '\xc3\x89', '\xc3\xa6', '\xc3\x86', '\xc3\xb4', '\xc3\xb6', '\xc3\xb2', '\xc3\xbb', '\xc3\xb9', '\xc3\xbf', '\xc3\x96', '\xc3\x9c', '\xc2\xa2', '\xc2\xa3', '\xc2\xa5', '\xe2\x82\xac', '\xc6\x92', '\xc3\xa1', '\xc2\xa1', '\xc3\xb3', '\xc3\xba', '\xc3\xb1', '\xc3\x91', '\xc2\xaa', '\xc2\xba', '\xc2\xbf', '\xe2\x8c\x90', '\xc2\xac', '\xc2\xbd', '\xc2\xbc', '\xc2\xa1', '\xc2\xab', '\xc2\xbb', '\xe2\x96\x91', '\xe2\x96\x92', '\xe2\x96\x93', '\xe2\x94\x82', '\xe2\x94\xa4', '\xe2\x95\xa1', '\xe2\x95\xa2', '\xe2\x95\x96', '\xe2\x95\x95', '\xe2\x95\xa3', '\xe2\x95\x91', '\xe2\x95\x97', '\xe2\x95\x9d', '\xe2\x95\x9c', '\xe2\x95\x9b', '\xe2\x94\x90', '\xe2\x94\x94', '\xe2\x94\xb4', '\xe2\x94\xac', '\xe2\x94\x9c', '\xe2\x94\x80', '\xe2\x94\xbc', '\xe2\x95\x9e', '\xe2\x95\x9f', '\xe2\x95\x9a', '\xe2\x95\x94', '\xe2\x95\xa9', '\xe2\x95\xa6', '\xe2\x95\xa0', '\xe2\x95\x90', '\xe2\x95\xac', '\xe2\x95\xa7', '\xe2\x95\xa8', '\xe2\x95\xa4', '\xe2\x95\xa5', '\xe2\x95\x99', '\xe2\x95\x98', '\xe2\x95\x92', '\xe2\x95\x93', '\xe2\x95\xab', '\xe2\x95\xaa', '\xe2\x94\x98', '\xe2\x94\x8c', '\xe2\x96\x88', '\xe2\x96\x84', '\xe2\x96\x8c', '\xe2\x96\x90', '\xe2\x96\x80', '\xce\xb1', '\xc3\x9f', '\xce\x93', '\xcf\x80', '\xce\xa3', '\xcf\x83', '\xce\xbc', '\xcf\x84', '\xce\xa6', '\xce\x98', '\xce\xa9', '\xce\xb4', '\xe2\x88\x9e', '\xcf\x86', '\xce\xb5', '\xe2\x88\xa9', '\xe2\x89\xa1', '\xc2\xb1', '\xe2\x89\xa5', '\xe2\x89\xa4', '\xe2\x8c\xa0', '\xe2\x8c\xa1', '\xc3\xb7', '\xe2\x89\x88', '\xc2\xb0', '\xe2\x88\x99', '\xc2\xb7', '\xe2\x88\x9a', '\xe2\x81\xbf', '\xc2\xb2', '\xe2\x96\xa0', '\xce\xbb'] A = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x00,0x80,0x00,0x40,0x00,0x00,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, 0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x80,0x00,0x00,0x00,0x40, 0x80,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, 0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40] xed_prefix_table_bit = [ 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0xff, 0xff, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, ] # please rise for the x86 national flag xed_has_modrm_2d = [ # 0x00 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 3, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 3, 0, 1, 1, 1, 1, 0, 0, 3, 0, 1, 1, 1, 1, 0, 0, 3, 0, 1, 1, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, # 0x0f 1, 1, 1, 1, 3, 0, 0, 0, 0, 0, 3, 0, 3, 1, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ] def tabify(s): res = [] for line in s.split("\n"): if not line: continue directive, number = line.split() number = int(number) if directive == ".zero": res = res + [0] * number elif directive == ".byte": res.append(number) else: assert False return res kHasSib = tabify("""\ .zero 32 .zero 4 .byte 1 .zero 3 .zero 4 .byte 1 .zero 3 .zero 4 .byte 1 .zero 3 .zero 8 .zero 4 .byte 1 .zero 3 .zero 4 .byte 1 .zero 3 .zero 4 .byte 1 .zero 3 .zero 8 """) assert len(kHasSib) == 96, len(kHasSib) kHasDisp = tabify("""\ .zero 6 .byte 2 .zero 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 2 .byte 2 .byte 2 .byte 2 .byte 2 .byte 2 .byte 2 .byte 2 .zero 8 .zero 5 .byte 4 .zero 2 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .zero 8 .zero 5 .byte 4 .zero 2 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .zero 8 """) assert len(kHasDisp) == 96, len(kHasDisp) xed_disp_bits_2d = tabify("""\ .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 0 .byte 0 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 2 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 5 .byte 5 .byte 5 .byte 5 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 6 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 1 .byte 1 .byte 1 .byte 1 .byte 4 .byte 4 .byte 4 .byte 4 .byte 3 .byte 3 .byte 2 .byte 1 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 0 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 0 .byte 4 .byte 4 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 0 .byte 0 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 4 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 3 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 0 .byte 0 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 .byte 4 """) assert len(xed_disp_bits_2d) == 512 xed_imm_bits_2d = tabify("""\ .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 7 .byte 1 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 7 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 0 .byte 0 .byte 0 .byte 0 .byte 6 .byte 7 .byte 5 .byte 5 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 5 .byte 5 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 8 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 5 .byte 7 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 9 .byte 9 .byte 9 .byte 9 .byte 9 .byte 9 .byte 9 .byte 10 .byte 10 .byte 10 .byte 10 .byte 10 .byte 10 .byte 10 .byte 10 .byte 9 .byte 9 .byte 8 .byte 1 .byte 1 .byte 1 .byte 9 .byte 2 .byte 11 .byte 1 .byte 8 .byte 1 .byte 1 .byte 9 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 9 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 9 .byte 9 .byte 9 .byte 1 .byte 1 .byte 8 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 0 .byte 1 .byte 0 .byte 0 .byte 1 .byte 1 .byte 3 .byte 4 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 1 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 0 .byte 0 .byte 0 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 0 .byte 1 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 9 .byte 9 .byte 9 .byte 1 .byte 1 .byte 1 .byte 1 .byte 12 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 1 .byte 0 .byte 0 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 9 .byte 1 .byte 9 .byte 9 .byte 9 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1""") tables = [('xed_prefix_table_bit', xed_prefix_table_bit), ('xed_has_modrm_2d', xed_has_modrm_2d), ('xed_has_disp_regular', kHasDisp), ('xed_has_sib_table', kHasSib), ('xed_disp_bits_2d', xed_disp_bits_2d), ('xed_imm_bits_2d', xed_imm_bits_2d)] # int main(int argc, char *argv[]) { # int l = 0; # for (unsigned i = 0; i < 256; ++i) { # int t = 0; # if (isspace(i)) t |= 0x01; # if (isalpha(i)) t |= 0x02; # if (isdigit(i)) t |= 0x04; # if (isxdigit(i)) t |= 0x08; # if (isprint(i)) t |= 0x10; # if (islower(i)) t |= 0x20; # if (isupper(i)) t |= 0x40; # if (isblank(i)) t |= 0x80; # printf("0x%02x,", t); # if (++l % 8 == 0) printf("\n"); # } # return 0; # } kCtype = [ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x81,0x01,0x01,0x01,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, 0x1c,0x1c,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52, 0x52,0x52,0x52,0x10,0x10,0x10,0x10,0x10, 0x10,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x32, 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, 0x32,0x32,0x32,0x10,0x10,0x10,0x10,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ] tables = [('kCtype', kCtype)] kWidthTab1 = [ 16, 16, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 16, 16, 32, 16, 16, 16, 33, 34, 35, 36, 37, 38, 39, 16, 16, 40, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 41, 42, 16, 16, 43, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 44, 16, 45, 46, 47, 48, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 49, 16, 16, 50, 51, 16, 52, 53, 54, 16, 16, 16, 16, 16, 16, 55, 16, 16, 16, 16, 16, 56, 57, 58, 59, 60, 61, 62, 63, 16, 16, 64, 16, 65, 66, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 67, 68, 16, 16, 16, 69, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 70, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 71, 72, 16, 16, 16, 16, 16, 16, 16, 73, 16, 16, 16, 16, 16, 74, 16, 16, 16, 16, 16, 16, 16, 75, 76, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 0, 0, 63, 0, 255, 23, 0, 0, 0, 0, 0, 248, 255, 255, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 191, 159, 61, 0, 0, 0, 128, 2, 0, 0, 0, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 255, 1, 0, 0, 0, 0, 0, 0, 248, 15, 0, 0, 0, 192, 251, 239, 62, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 20, 254, 33, 254, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 16, 30, 32, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 16, 134, 57, 2, 0, 0, 0, 35, 0, 6, 0, 0, 0, 0, 0, 0, 16, 190, 33, 0, 0, 12, 0, 0, 252, 2, 0, 0, 0, 0, 0, 0, 144, 30, 32, 64, 0, 12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 192, 193, 61, 96, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 144, 64, 48, 0, 0, 12, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 24, 30, 32, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 7, 128, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 27, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 0, 0, 0, 0, 254, 127, 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 253, 102, 0, 0, 0, 195, 1, 0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 176, 63, 64, 254, 15, 32, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 1, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 9, 0, 0, 0, 0, 0, 0, 64, 127, 229, 31, 248, 159, 0, 0, 0, 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 208, 23, 4, 0, 0, 0, 0, 248, 15, 0, 3, 0, 0, 0, 60, 59, 0, 0, 0, 0, 0, 0, 64, 163, 3, 0, 0, 0, 0, 0, 0, 240, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 255, 253, 33, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 251, 0, 248, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 223, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 247, 63, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 68, 8, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 255, 255, 3, 0, 0, 0, 0, 0, 192, 63, 0, 0, 128, 255, 3, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 200, 19, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 126, 102, 0, 8, 16, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 157, 193, 2, 0, 0, 0, 0, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 240, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 0, 128, 3, 0, 0, 0, 0, 0, 120, 38, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 128, 239, 31, 0, 0, 0, 0, 0, 0, 0, 8, 0, 3, 0, 0, 0, 0, 0, 192, 127, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 211, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 248, 7, 0, 0, 3, 0, 0, 0, 0, 0, 0, 16, 1, 0, 0, 0, 192, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 133, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 176, 1, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 188, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 6, 0, 0, 0, 0, 248, 121, 128, 0, 126, 14, 0, 0, 0, 0, 0, 252, 127, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 252, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 180, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 3, 248, 255, 231, 15, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 127, 248, 255, 255, 255, 255, 255, 31, 32, 0, 16, 0, 0, 248, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 255, 255, 249, 219, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] kWidthTab2 = [ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 16, 20, 21, 22, 16, 16, 16, 23, 16, 16, 24, 25, 26, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 29, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 30, 16, 16, 16, 16, 31, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 32, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 16, 16, 16, 33, 34, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 35, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 36, 17, 17, 37, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 38, 39, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 40, 41, 42, 43, 44, 45, 46, 16, 16, 47, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 48, 0, 0, 0, 0, 0, 0, 255, 15, 0, 0, 0, 0, 128, 0, 0, 8, 0, 2, 12, 0, 96, 48, 64, 16, 0, 0, 4, 44, 36, 32, 12, 0, 0, 0, 1, 0, 0, 0, 80, 184, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 0, 0, 0, 255, 15, 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 255, 255, 255, 255, 127, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 7, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 255, 255, 255, 255, 247, 255, 127, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7, 0, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 254, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 255, 255, 255, 255, 255, 15, 255, 1, 3, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 224, 191, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 15, 0, 255, 255, 255, 255, 255, 135, 15, 0, 255, 255, 17, 255, 255, 255, 255, 255, 255, 255, 255, 127, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 255, 255, 255, 255, 255, 255, 255, 63, 0, 120, 255, 255, 255, 0, 0, 4, 0, 0, 96, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 63, 16, 7, 0, 0, 24, 240, 1, 0, 0, 255, 255, 255, 255, 255, 127, 255, 31, 255, 255, 255, 15, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 1, 0, 255, 255, 127, 0, 0, 0, ] kZlibDistCode = [ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29] # kZlibLengthCode = [ # 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, # 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, # 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, # 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, # 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, # 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, # 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, # 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, # 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, # 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, # 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, # 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, # 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, # 27, 27, 27, 27, 27, 27, 27, 27, 28] # duk_hex_dectab = [ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x00-0x0f */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x10-0x1f */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x20-0x2f */ # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,0xff,0xff,0xff,0xff,0xff,0xff, # 0x30-0x3f */ # 0xff, 10, 11, 12, 13, 14, 15,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x40-0x4f */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x50-0x5f */ # 0xff, 10, 11, 12, 13, 14, 15,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x60-0x6f */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x70-0x7f */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x80-0x8f */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x90-0x9f */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xa0-0xaf */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xb0-0xbf */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xc0-0xcf */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xd0-0xdf */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xe0-0xef */ # 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff # 0xf0-0xff */ # ] # tables = [('duk__base64_dectab_fast', duk__base64_dectab_fast)] def kXtermXlat1(c): if c >= 3: return (c - 3) / 10 return 0 def kXtermXlat2(c): if c <= 52: return 0 if c <= 115: return 1 if c <= 155: return 2 if c <= 195: return 3 if c <= 235: return 4 return 5 tables = [('kXtermXlat', ([kXtermXlat1(i) for i in range(256)] + [kXtermXlat2(i) for i in range(256)]))] kBoop = [int(s,16) for s in """ 00 00 00 00 00 00 00 00 00 00 01 01 01 01 01 01 01 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00 00 00 00 00 00 01 02 02 02 02 02 02 02 02 02 02 01 01 01 01 01 01 01 02 02 02 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 02 02 01 03 03 03 03 03 03 03 03 03 03 01 01 01 01 01 01 01 03 03 03 03 03 03 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 03 03 03 03 03 03 01 04 04 04 04 04 04 04 04 04 04 01 01 01 01 01 01 01 04 04 04 04 04 04 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 04 04 04 04 04 04 01 05 05 05 05 05 05 05 05 05 05 01 01 01 01 01 01 01 05 05 05 05 05 05 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 05 05 05 05 05 05 01 06 06 06 06 06 06 06 06 06 06 01 01 01 01 01 01 01 06 06 06 06 06 06 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 06 06 06 06 06 06 01 07 01 01 07 08 07 07 07 07 07 07 01 07 07 01 07 07 07 07 07 07 07 07 07 07 07 01 01 01 01 01 01 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 01 07 01 07 01 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 01 01 01 07 01 09 09 09 09 09 09 09 09 09 09 01 01 01 01 01 01 01 09 09 09 09 09 09 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 09 09 09 09 09 09 01 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 01 01 01 01 01 01 01 0a 0a 0a 0a 0a 0a 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0a 0a 0a 0a 0a 0a 01 0b 01 01 0b 0c 0b 0b 0b 0b 0b 0b 01 0b 0b 01 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 01 01 01 01 01 01 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 01 0b 01 0b 01 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 01 01 01 0b 01 0d 0d 0d 0d 0d 0d 0d 0d 0d 0d 01 01 01 01 01 01 01 0d 0d 0d 0d 0d 0d 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0d 0d 0d 0d 0d 0d 01 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 01 01 01 01 01 01 01 0e 0e 0e 0e 0e 0e 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0e 0e 0e 0e 0e 0e 01 0f 01 01 0f 10 01 0f 0f 0f 0f 0f 01 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 01 01 01 01 0f 01 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 01 0f 01 0f 01 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 01 01 01 0f 01 11 11 11 11 11 11 11 11 11 11 01 01 01 01 01 01 01 11 11 11 11 11 11 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 11 11 11 11 11 11 01 12 12 12 12 12 12 12 12 12 12 01 01 01 01 01 01 01 12 12 12 12 12 12 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 12 12 12 12 12 12 01 13 01 01 13 14 01 13 13 13 13 13 01 13 13 13 13 13 13 13 13 13 13 13 13 13 13 01 01 01 01 13 01 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 01 13 01 13 01 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 01 01 01 13 01 15 15 15 15 15 15 15 15 15 15 01 01 01 01 01 01 01 15 15 15 15 15 15 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 15 15 15 15 15 15 01 16 16 16 16 16 16 16 16 16 16 01 01 01 01 01 01 01 16 16 16 16 16 16 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 16 16 16 16 16 16 01 17 17 17 17 17 17 17 17 17 17 01 01 01 01 01 01 01 17 17 17 17 17 17 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 17 17 17 17 17 17 01 18 18 18 18 18 18 18 18 18 18 01 01 01 01 01 01 01 18 18 18 18 18 18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 18 18 18 18 18 18 01 19 01 01 19 1a 1b 19 19 19 19 19 1b 19 19 0f 19 19 19 19 19 19 19 19 19 19 19 01 01 1b 01 19 1c 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 0f 01 0f 01 19 01 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 01 01 01 19 01 1d 1d 1d 1d 1d 1d 1d 1d 1d 1d 01 01 01 01 01 01 01 1d 1d 1d 1d 1d 1d 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 1d 1d 1d 1d 1d 1d 01 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 01 01 01 01 01 01 01 1e 1e 1e 1e 1e 1e 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 1e 1e 1e 1e 1e 1e 01 1b 01 01 1b 1f 1b 1b 1b 1b 1b 1b 1b 1b 1b 01 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 01 01 1b 01 1b 1c 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 01 01 01 01 1b 01 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 01 01 01 1b 01 20 20 20 20 20 20 20 20 20 20 01 01 01 01 01 01 01 20 20 20 20 20 20 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 20 20 20 20 20 20 01 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 01 01 01 01 01 01 01 1b 1b 1b 1b 1b 1b 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 1b 1b 1b 1b 1b 1b 01 21 01 21 21 01 21 21 21 21 21 21 21 21 21 21 01 01 01 01 01 01 01 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 01 01 01 01 01 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 01 23 23 23 23 23 23 23 23 23 23 01 24 01 24 24 24 24 24 24 24 24 24 24 24 01 01 01 01 01 01 24 24 24 24 24 24 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 24 24 24 24 24 24 01 25 01 25 25 25 25 25 25 25 25 25 25 25 01 01 01 01 01 01 25 25 25 25 25 25 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 26 01 01 01 25 25 25 25 25 25 01 27 01 01 27 28 1b 27 27 27 27 27 1b 27 27 13 27 27 27 27 27 27 27 27 27 27 27 01 01 1b 01 27 1c 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 13 01 13 01 27 01 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 01 01 01 27 01 29 29 29 29 29 29 29 29 29 29 01 01 01 01 01 01 01 29 29 29 29 29 29 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 29 29 29 29 29 29 01 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 01 01 01 01 01 01 01 2a 2a 2a 2a 2a 2a 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 2a 2a 2a 2a 2a 2a 01 2b 01 01 2b 2c 2b 2b 2b 2b 2b 2d 2b 2d 2d 2e 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 2f 01 2b 01 2b 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 30 01 01 01 2b 01 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 01 01 01 2b 01 31 31 31 31 31 31 31 31 31 31 01 01 01 01 01 01 01 31 31 31 31 31 31 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 31 31 31 31 31 31 01 32 32 32 32 32 32 32 32 32 32 01 01 01 01 01 01 01 32 32 32 32 32 32 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 32 32 32 32 32 32 01 33 33 33 33 33 33 33 33 33 33 01 01 01 01 01 01 01 33 33 33 33 33 33 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 33 33 33 33 33 33 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 01 01 01 01 2f 2f 2f 2f 2f 2f 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 2f 2f 2f 2f 2f 2f 01 34 34 34 34 34 34 34 34 34 34 01 01 01 01 01 01 01 34 34 34 34 34 34 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 34 34 34 34 34 34 01 35 35 35 35 35 35 35 35 35 35 01 01 01 01 01 01 01 35 35 35 35 35 35 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 35 35 35 35 35 35 01 36 36 36 36 36 36 36 36 36 36 01 01 01 01 01 01 01 36 36 36 36 36 36 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 36 36 36 36 36 36 01 37 37 37 37 37 37 37 37 37 37 01 01 01 01 01 01 01 37 37 37 37 37 37 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 37 37 37 37 37 37 01 38 38 38 38 38 38 38 38 38 38 01 01 01 01 01 01 01 38 38 38 38 38 38 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 38 38 38 38 38 38 01 39 39 39 39 39 39 39 39 39 39 01 01 01 01 01 01 01 39 39 39 39 39 39 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 39 39 39 39 39 39 01 3a 01 01 3a 3b 3a 3a 3a 3a 3a 3a 01 3a 3a 01 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 01 01 01 01 01 01 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 01 3a 01 3a 01 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 01 01 01 3a 01 3c 3c 3c 3c 3c 3c 3c 3c 3c 3c 01 01 01 01 01 01 01 3c 3c 3c 3c 3c 3c 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 3c 3c 3c 3c 3c 3c 01 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 01 01 01 01 01 01 01 3d 3d 3d 3d 3d 3d 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 3d 3d 3d 3d 3d 3d 01 3e 01 01 3e 3f 3e 3e 3e 3e 3e 3e 01 3e 3e 01 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 01 01 01 01 01 01 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 01 3e 01 3e 01 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 01 01 01 3e 01 40 01 40 40 40 40 40 40 40 40 40 40 40 01 01 01 01 01 01 40 40 40 40 40 40 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 40 40 40 40 40 40 01 41 01 41 41 41 41 41 41 41 41 41 41 41 01 01 01 01 01 01 41 41 41 41 41 41 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 42 01 01 01 41 41 41 41 41 41 01 43 43 43 43 43 43 43 43 43 43 01 44 01 45 44 46 44 44 44 44 44 44 44 44 44 2e 44 44 44 44 44 44 44 44 44 44 01 44 01 44 01 01 44 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 01 01 01 01 44 01 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 01 01 01 44 01 04 01 48 04 49 04 04 04 04 04 04 04 04 04 4a 04 04 04 04 04 04 04 04 04 04 01 04 01 04 01 4b 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 01 01 01 01 04 01 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 01 01 01 04 01 4c 01 01 4c 4d 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 01 4c 01 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 01 01 01 01 4c 01 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 01 01 01 4c 01 02 01 01 02 4e 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 01 02 01 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 01 01 01 01 02 01 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 01 01 01 02 01 06 01 48 06 4f 06 06 06 06 06 06 06 06 06 4a 06 06 06 06 06 06 06 06 06 06 06 50 01 06 01 4b 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 01 06 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 06 01 0a 01 51 0a 52 0a 0a 0a 0a 0a 0a 01 0a 0a 53 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 54 01 55 01 56 01 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 01 0a 01 0a 01 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 01 01 01 0a 01 0e 01 57 0e 58 0e 0e 0e 0e 0e 0e 01 0e 0e 59 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 5a 01 01 01 5b 01 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 01 0e 01 0e 01 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 01 01 01 0e 01 12 01 5c 12 5d 5e 12 12 12 12 12 01 12 12 12 12 12 12 12 12 12 12 12 12 12 12 01 01 5f 01 12 01 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 01 12 01 12 01 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 01 01 01 12 01 16 01 60 16 61 62 16 16 16 16 16 01 16 16 16 16 16 16 16 16 16 16 16 16 16 16 01 01 01 01 16 01 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 01 16 01 16 01 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 01 01 01 16 01 06 01 48 06 4f 06 06 06 06 06 06 06 06 06 63 06 06 06 06 06 06 06 06 06 06 06 50 01 06 01 4b 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 01 06 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 06 01 64 01 48 64 65 64 64 64 64 64 66 64 66 66 4a 66 66 66 66 66 66 66 66 66 66 64 50 01 64 01 67 06 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 22 01 01 01 64 01 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 01 01 01 64 01 18 01 48 18 68 18 18 18 18 18 18 18 18 18 4a 18 18 18 18 18 18 18 18 18 18 18 50 01 18 01 69 6a 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 01 01 01 01 18 01 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 01 01 01 18 01 1e 01 5c 1e 6b 6c 1e 1e 1e 1e 1e 1b 1e 1e 12 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 01 01 6d 01 1e 1c 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 12 01 12 01 1e 01 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 01 01 01 1e 01 6e 01 01 01 01 01 01 01 6f 01 6f 6f 70 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 71 01 01 01 01 72 01 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 01 01 01 01 01 01 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 01 73 01 01 01 01 01 01 01 01 01 01 01 74 75 75 75 75 75 75 75 75 75 75 01 01 01 01 01 76 01 45 01 01 01 01 01 01 01 01 01 01 01 77 01 01 01 01 01 01 01 01 01 01 78 01 01 01 01 79 01 2a 01 60 2a 7a 7b 2a 2a 2a 2a 2a 1b 2a 2a 16 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 01 01 1b 01 2a 1c 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 16 01 16 01 2a 01 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 01 01 01 2a 01 06 01 48 06 4f 06 06 06 06 06 7c 06 7c 7c 4a 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 06 50 01 06 01 4b 06 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 22 01 01 01 06 01 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 01 01 01 06 01 06 01 7d 06 4f 06 06 06 06 06 7e 06 7e 7e 7f 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 80 50 01 06 01 81 06 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 01 01 01 01 06 01 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 01 01 01 06 01 06 01 48 06 4f 06 06 06 06 06 06 06 06 06 4a 82 82 82 82 82 82 82 82 82 82 06 50 01 06 01 4b 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 01 06 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 06 01 06 01 83 06 4f 06 06 06 06 06 06 06 06 06 84 85 85 85 85 85 85 85 85 85 85 06 50 01 06 01 86 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 01 06 01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 01 01 01 06 01 18 01 7d 18 68 18 18 18 18 18 87 18 87 87 7f 87 87 87 87 87 87 87 87 87 87 88 50 01 18 01 89 6a 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 01 01 01 01 18 01 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 01 01 01 18 01 18 01 48 18 68 18 18 18 18 18 18 18 18 18 4a 8a 8a 8a 8a 8a 8a 8a 8a 8a 8a 18 50 01 18 01 69 6a 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 01 01 01 01 18 01 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 01 01 01 18 01 18 01 83 18 68 18 18 18 18 18 18 18 18 18 84 8b 8b 8b 8b 8b 8b 8b 8b 8b 8b 18 50 01 18 01 8c 6a 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 01 01 01 01 18 01 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 01 01 01 18 01 04 01 48 04 49 04 04 04 04 04 8d 04 8d 8d 4a 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8e 04 01 04 01 4b 04 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 01 01 01 01 04 01 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 01 01 01 04 01 32 01 45 32 8f 32 32 32 32 32 32 32 32 32 90 32 32 32 32 32 32 32 32 32 32 32 2f 01 32 01 32 91 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01 01 01 32 01 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01 01 32 01 45 01 2f 01 45 2f 92 2f 2f 2f 2f 2f 2f 2f 2f 2f 90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 2f 01 2f 01 45 2f 92 2f 2f 2f 2f 2f 93 2f 93 93 90 93 93 93 93 93 93 93 93 93 93 2f 2f 01 2f 01 2f 2f 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 30 01 01 01 2f 01 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 93 01 01 01 2f 01 2f 01 6e 2f 92 2f 2f 2f 2f 2f 94 2f 94 94 90 94 94 94 94 94 94 94 94 94 94 95 96 01 2f 01 2f 2f 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 01 01 01 01 2f 01 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 01 01 01 2f 01 2f 01 45 2f 92 2f 2f 2f 2f 2f 2f 2f 2f 2f 90 97 97 97 97 97 97 97 97 97 97 2f 2f 01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 2f 01 2f 01 73 2f 92 2f 2f 2f 2f 2f 2f 2f 2f 2f 90 98 98 98 98 98 98 98 98 98 98 2f 99 01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 2f 01 9a 01 45 9a 9b 9a 9a 9a 9a 9a 9a 2f 9a 9a 90 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 2f 01 2f 01 2f 2f 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 3a 01 3a 01 9a 01 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 01 01 01 9a 01 35 01 51 35 9c 35 35 35 35 35 35 2f 35 35 90 35 35 35 35 35 35 35 35 35 35 35 9d 01 9e 01 2f 2f 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 3d 01 3d 01 35 01 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 01 01 01 35 01 9f 01 45 9f a0 9f 9f 9f 9f 9f 9f 2f 9f 9f 90 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 2f 01 2f 01 2f 2f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 3e 01 3e 01 9f 01 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 01 01 01 9f 01 37 01 57 37 a1 37 37 37 37 37 37 2f 37 37 90 37 37 37 37 37 37 37 37 37 37 37 a2 01 2f 01 2f 2f 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 39 01 39 01 37 01 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 01 01 01 37 01 39 01 57 39 a3 39 39 39 39 39 39 01 39 39 01 39 39 39 39 39 39 39 39 39 39 39 a4 01 01 01 01 01 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 01 39 01 39 01 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 01 01 01 39 01 3d 01 51 3d a5 3d 3d 3d 3d 3d 3d 01 3d 3d 01 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d a6 01 a7 01 01 01 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 01 3d 01 3d 01 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 01 01 01 3d 01 45 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 a8 a9 01 73 01 01 01 01 01 01 01 01 01 01 01 01 aa aa aa aa aa aa aa aa aa aa 01 ab 01 32 01 6e 32 8f 32 32 32 32 32 ac 32 ac ac 90 ac ac ac ac ac ac ac ac ac ac ad 96 01 32 01 32 91 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac 01 01 01 01 32 01 ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac 01 01 01 32 01 32 01 45 32 8f 32 32 32 32 32 32 32 32 32 90 ae ae ae ae ae ae ae ae ae ae 32 2f 01 32 01 32 91 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01 01 01 32 01 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01 01 32 01 32 01 73 32 8f 32 32 32 32 32 32 32 32 32 90 af af af af af af af af af af 32 99 01 32 01 32 91 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01 01 01 32 01 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01 01 32 01 00 """.split()] tables = [('kBoop', kBoop)] lines = [] def put(l): lines.append(l) oc = 0 toto = 0 for name, table in tables: toto += len(table) it = iter(table) c2 = next(it) i2 = 0 put(".L%s.rodata:" % (name)) while c2 is not None: c1, i1, run = c2, i2, 0 while c1 == c2: run += 1 i2 += 1 c2 = next(it, None) s = ' ' if 0 <= i1 < 256 and 0 <= i2 <= 256: s = "%s " % C[i1] if i2 - i1 == 1 else "%s-%s" % (C[i1], C[i2-1]) put("\t.byte\t%d,0x%02x\t\t# %02x-%02x %s" % (run, c1, i1, i2-1, s)) oc += 2 put("\t.endobj\t.L%s.rodata" % (name)) put("\t.byte\t0,0\t\t# terminator") oc += 2 align = 8 pad = align - oc % align if pad != align: put("\t.byte\t%s\t\t# padding" % (",".join(["0"] * pad))) oc += pad print "\t.initbss 300,_init_%s" % (name) for name, table in tables: print "%s:" % (name) print "\t.zero\t%d" % (len(table)) print "\t.endobj\t%s,globl,hidden" % (name) print "\t.previous" print print "\t.initro 300,_init_%s\t# %d bytes (%d%%)" % ( name, oc, int(round((oc / float(toto)) * 100))) print "\n".join(lines) print "\t.previous" print print "\t.init.start 300,_init_%s" % tables[0][0] print "\tcall\trldecode" if pad != align: while pad: for op, add in (("lodsq", 8), ("lodsl", 4), ("lodsw", 2), ("lodsb", 1)): if pad >= add: print "\t%s" % (op) pad -= add print "\t.init.end 300,_init_%s" % tables[0][0]