github.com/google/syzkaller@v0.0.0-20240517125934-c0f1611a36d6/pkg/ifuzz/x86/pseudo.go (about) 1 // Copyright 2017 syzkaller project authors. All rights reserved. 2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 package x86 5 6 import ( 7 "math/rand" 8 9 "github.com/google/syzkaller/pkg/ifuzz/iset" 10 ) 11 12 var pseudo = []*Insn{ 13 { 14 Name: "PSEUDO_RDMSR", 15 Mode: 1<<iset.ModeLast - 1, 16 Priv: true, 17 Pseudo: true, 18 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 19 gen := makeGen(cfg, r) 20 msr := msrs[r.Intn(len(msrs))] 21 gen.mov32(regECX, msr) 22 gen.byte(0x0f, 0x32) // rdmsr 23 return gen.text 24 }, 25 }, 26 { 27 Name: "PSEUDO_WRMSR", 28 Mode: 1<<iset.ModeLast - 1, 29 Priv: true, 30 Pseudo: true, 31 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 32 gen := makeGen(cfg, r) 33 msr := msrs[r.Intn(len(msrs))] 34 v := iset.GenerateInt(cfg, r, 8) 35 gen.mov32(regECX, msr) 36 gen.mov32(regEAX, uint32(v>>0)) 37 gen.mov32(regEDX, uint32(v>>32)) 38 gen.byte(0x0f, 0x30) // wrmsr 39 return gen.text 40 }, 41 }, 42 { 43 Name: "PSEUDO_PCI_READ", 44 Mode: 1<<iset.ModeLast - 1, 45 Priv: true, 46 Pseudo: true, 47 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 48 gen := makeGen(cfg, r) 49 addr, port, size := pciAddrPort(r) 50 gen.out32(0xcf8, addr) 51 gen.in(port, size) 52 return gen.text 53 }, 54 }, 55 { 56 Name: "PSEUDO_PCI_WRITE", 57 Mode: 1<<iset.ModeLast - 1, 58 Priv: true, 59 Pseudo: true, 60 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 61 gen := makeGen(cfg, r) 62 addr, port, size := pciAddrPort(r) 63 val := iset.GenerateInt(cfg, r, 4) 64 gen.out32(0xcf8, addr) 65 gen.out(port, uint32(val), size) 66 return gen.text 67 }, 68 }, 69 { 70 Name: "PSEUDO_PORT_READ", 71 Mode: 1<<iset.ModeLast - 1, 72 Priv: true, 73 Pseudo: true, 74 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 75 gen := makeGen(cfg, r) 76 port := ports[r.Intn(len(ports))] 77 gen.in(port, r.Intn(3)) 78 return gen.text 79 }, 80 }, 81 { 82 Name: "PSEUDO_PORT_WRITE", 83 Mode: 1<<iset.ModeLast - 1, 84 Priv: true, 85 Pseudo: true, 86 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 87 gen := makeGen(cfg, r) 88 port := ports[r.Intn(len(ports))] 89 val := iset.GenerateInt(cfg, r, 4) 90 gen.out(port, uint32(val), r.Intn(3)) 91 return gen.text 92 }, 93 }, 94 { 95 Name: "PSEUDO_XOR_CR", 96 Mode: 1<<iset.ModeLast - 1, 97 Priv: true, 98 Pseudo: true, 99 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 100 gen := makeGen(cfg, r) 101 cr := controlRegisters[r.Intn(len(controlRegisters))] 102 var v uint32 103 if cr == 8 { 104 v = uint32(r.Intn(15) + 1) 105 } else { 106 bit := controlRegistersBits[cr][r.Intn(len(controlRegistersBits[cr]))] 107 v = 1 << bit 108 } 109 gen.readCR(cr) 110 gen.xor32(regEAX, v) 111 gen.writeCR(cr) 112 return gen.text 113 }, 114 }, 115 { 116 Name: "PSEUDO_XOR_EFER", 117 Mode: 1<<iset.ModeLast - 1, 118 Priv: true, 119 Pseudo: true, 120 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 121 gen := makeGen(cfg, r) 122 gen.mov32(regECX, eferMSR) 123 gen.byte(0x0f, 0x32) // rdmsr 124 bit := eferBits[r.Intn(len(eferBits))] 125 gen.xor32(regEAX, 1<<bit) 126 gen.byte(0x0f, 0x30) // wrmsr 127 return gen.text 128 }, 129 }, 130 { 131 Name: "PSEUDO_SET_BREAK", 132 Mode: 1<<iset.ModeLast - 1, 133 Priv: true, 134 Pseudo: true, 135 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 136 gen := makeGen(cfg, r) 137 br := uint8(r.Intn(4)) 138 loc := uint32(r.Intn(4)) 139 typ := uint32(r.Intn(16)) 140 addr := iset.GenerateInt(cfg, r, 8) 141 if cfg.Mode == iset.ModeLong64 { 142 gen.mov64(regRAX, addr) 143 } else { 144 gen.mov32(regEAX, uint32(addr)) 145 } 146 gen.writeDR(br) 147 gen.readDR(7) 148 gen.xor32(regEAX, loc<<(br*2)|typ<<(16+br*4)) 149 gen.writeDR(7) 150 return gen.text 151 }, 152 }, 153 { 154 Name: "PSEUDO_LOAD_SEG", 155 Mode: 1<<iset.ModeLast - 1, 156 Priv: true, 157 Pseudo: true, 158 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 159 gen := makeGen(cfg, r) 160 sel := randSelector(r) 161 if cfg.Mode == iset.ModeReal16 { 162 sel = uint16(iset.GenerateInt(cfg, r, 8)) >> 4 163 } 164 reg := uint8(r.Intn(6)) 165 gen.mov16(regAX, sel) 166 gen.byte(0x8e, 0xc0|(reg<<3)) // MOV %ax, %seg 167 return gen.text 168 }, 169 }, 170 { 171 Name: "PSEUDO_FAR_JMP", 172 Mode: 1<<iset.ModeLong64 | 1<<iset.ModeProt32 | 1<<iset.ModeProt16, 173 Priv: true, 174 Pseudo: true, 175 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 176 gen := makeGen(cfg, r) 177 sel := randSelector(r) 178 off := iset.GenerateInt(cfg, r, 4) 179 if cfg.Mode == iset.ModeLong64 { 180 gen.mov32toSPaddr(uint32(sel), 0) 181 gen.mov32toSPaddr(uint32(off), 2) 182 if r.Intn(2) == 0 { 183 gen.byte(0xff, 0x2c, 0x24) // ljmp (%rsp) 184 } else { 185 gen.byte(0xff, 0x1c, 0x24) // lcall (%rsp) 186 } 187 } else { 188 if r.Intn(2) == 0 { 189 gen.byte(0xea) // ljmp $imm16, $imm16/32 190 } else { 191 gen.byte(0x9a) // lcall $imm16, $imm16/32 192 } 193 if cfg.Mode == iset.ModeProt16 { 194 gen.imm16(uint16(off)) 195 } else { 196 gen.imm32(uint32(off)) 197 } 198 gen.imm16(sel) 199 } 200 return gen.text 201 }, 202 }, 203 { 204 Name: "PSEUDO_LTR_LLDT", 205 Mode: 1<<iset.ModeLong64 | 1<<iset.ModeProt32 | 1<<iset.ModeProt16, 206 Priv: true, 207 Pseudo: true, 208 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 209 gen := makeGen(cfg, r) 210 sel := randSelector(r) 211 gen.mov16(regAX, sel) 212 if r.Intn(2) == 0 { 213 gen.byte(0x0f, 0x00, 0xd8) // ltr %ax 214 } else { 215 gen.byte(0x0f, 0x00, 0xd0) // lldt %ax 216 } 217 return gen.text 218 }, 219 }, 220 { 221 Name: "PSEUDO_LGIDT", 222 Mode: 1<<iset.ModeLong64 | 1<<iset.ModeProt32 | 1<<iset.ModeProt16, 223 Priv: true, 224 Pseudo: true, 225 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 226 gen := makeGen(cfg, r) 227 limit := uint32(iset.GenerateInt(cfg, r, 2)) 228 base := uint32(iset.GenerateInt(cfg, r, 4)) 229 gen.mov32toSPaddr(limit, 0) 230 gen.mov32toSPaddr(base, 2) 231 gen.mov32toSPaddr(0, 6) 232 gen.addr32() 233 if r.Intn(2) == 0 { 234 gen.byte(0x0f, 0x01, 0x14, 0x24) // lgdt (%rsp) 235 } else { 236 gen.byte(0x0f, 0x01, 0x1c, 0x24) // lidt (%rsp) 237 } 238 return gen.text 239 }, 240 }, 241 { 242 Name: "PSEUDO_HYPERCALL", 243 Mode: 1<<iset.ModeLong64 | 1<<iset.ModeProt32 | 1<<iset.ModeProt16, 244 Priv: true, 245 Pseudo: true, 246 generator: func(cfg *iset.Config, r *rand.Rand) []byte { 247 gen := makeGen(cfg, r) 248 switch r.Intn(2) { 249 case 0: 250 gen.mov32(regEAX, 1) // KVM_HC_VAPIC_POLL_IRQ 251 case 1: 252 gen.mov32(regEAX, 5) // KVM_HC_KICK_CPU 253 gen.mov32(regECX, uint32(iset.GenerateInt(cfg, r, 4))) // APIC ID 254 default: 255 panic("bad") 256 } 257 if r.Intn(2) == 0 { 258 gen.byte(0x0f, 0x01, 0xd9) // vmmcall 259 } else { 260 gen.byte(0x0f, 0x01, 0xc1) // vmcall 261 } 262 return gen.text 263 }, 264 }, 265 } 266 267 const ( 268 regAL = iota 269 regAX 270 regEAX 271 regRAX 272 regCL 273 regCX 274 regECX 275 regRCX 276 regDL 277 regDX 278 regEDX 279 regRDX 280 ) 281 282 type generator struct { 283 mode iset.Mode 284 r *rand.Rand 285 text []byte 286 } 287 288 func makeGen(cfg *iset.Config, r *rand.Rand) *generator { 289 return &generator{ 290 mode: cfg.Mode, 291 r: r, 292 } 293 } 294 295 func (gen *generator) byte(v ...uint8) { 296 gen.text = append(gen.text, v...) 297 } 298 299 func (gen *generator) imm16(v uint16) { 300 gen.byte(byte(v>>0), byte(v>>8)) 301 } 302 303 func (gen *generator) imm32(v uint32) { 304 gen.byte(byte(v>>0), byte(v>>8), byte(v>>16), byte(v>>24)) 305 } 306 307 func (gen *generator) imm64(v uint64) { 308 gen.byte(byte(v>>0), byte(v>>8), byte(v>>16), byte(v>>24), 309 byte(v>>32), byte(v>>40), byte(v>>48), byte(v>>56)) 310 } 311 312 func (gen *generator) operand16() { 313 switch gen.mode { 314 case iset.ModeLong64, iset.ModeProt32: 315 gen.byte(0x66) 316 case iset.ModeProt16, iset.ModeReal16: 317 default: 318 panic("bad mode") 319 } 320 } 321 322 func (gen *generator) operand32() { 323 switch gen.mode { 324 case iset.ModeLong64, iset.ModeProt32: 325 case iset.ModeProt16, iset.ModeReal16: 326 gen.byte(0x66) 327 default: 328 panic("bad mode") 329 } 330 } 331 332 func (gen *generator) addr32() { 333 switch gen.mode { 334 case iset.ModeLong64, iset.ModeProt32: 335 case iset.ModeProt16, iset.ModeReal16: 336 gen.byte(0x67) 337 default: 338 panic("bad mode") 339 } 340 } 341 342 func (gen *generator) mov8(reg int, v uint8) { 343 switch reg { 344 case regAL: 345 gen.byte(0xb0) 346 case regCL: 347 gen.byte(0xb1) 348 case regDL: 349 gen.byte(0xb2) 350 default: 351 panic("unknown register") 352 } 353 gen.byte(v) 354 } 355 356 func (gen *generator) mov16(reg int, v uint16) { 357 gen.operand16() 358 switch reg { 359 case regAX: 360 gen.byte(0xb8) 361 case regCX: 362 gen.byte(0xb9) 363 case regDX: 364 gen.byte(0xba) 365 default: 366 panic("unknown register") 367 } 368 gen.imm16(v) 369 } 370 371 func (gen *generator) mov32(reg int, v uint32) { 372 gen.operand32() 373 switch reg { 374 case regEAX: 375 gen.byte(0xb8) 376 case regECX: 377 gen.byte(0xb9) 378 case regEDX: 379 gen.byte(0xba) 380 default: 381 panic("unknown register") 382 } 383 gen.imm32(v) 384 } 385 386 func (gen *generator) mov64(reg int, v uint64) { 387 if gen.mode != iset.ModeLong64 { 388 panic("bad mode") 389 } 390 gen.byte(0x48) 391 switch reg { 392 case regRAX: 393 gen.byte(0xb8) 394 case regRCX: 395 gen.byte(0xb9) 396 case regRDX: 397 gen.byte(0xba) 398 default: 399 panic("unknown register") 400 } 401 gen.imm64(v) 402 } 403 404 // movl $v, off(%rsp). 405 func (gen *generator) mov32toSPaddr(v uint32, off uint8) { 406 gen.addr32() 407 gen.operand32() 408 gen.byte(0xc7, 0x44, 0x24, off) 409 gen.imm32(v) 410 } 411 412 func (gen *generator) xor32(reg int, v uint32) { 413 gen.operand32() 414 switch reg { 415 case regEAX: 416 gen.byte(0x35) 417 default: 418 panic("unknown register") 419 } 420 gen.imm32(v) 421 } 422 423 func (gen *generator) readCR(cr uint8) { 424 if cr < 8 { 425 // MOV %crN, %eax/%rax 426 gen.byte(0x0f, 0x20, 0xc0|cr<<3) 427 } else if cr < 16 { 428 // MOV %crN, %eax/%rax 429 gen.byte(0x44, 0x0f, 0x20, 0xc0|(cr-8)<<3) 430 } else { 431 panic("bad cr") 432 } 433 } 434 435 func (gen *generator) writeCR(cr uint8) { 436 if cr < 8 { 437 // MOV %eax/%rax, %crN 438 gen.byte(0x0f, 0x22, 0xc0|cr<<3) 439 } else if cr < 16 { 440 // MOV %eax/%rax, %crN 441 gen.byte(0x44, 0x0f, 0x22, 0xc0|(cr-8)<<3) 442 } else { 443 panic("bad cr") 444 } 445 } 446 447 func (gen *generator) readDR(dr uint8) { 448 if dr >= 8 { 449 panic("bad dr") 450 } 451 // MOV %drN, %eax/%rax 452 gen.byte(0x0f, 0x21, 0xc0|dr<<3) 453 } 454 455 func (gen *generator) writeDR(dr uint8) { 456 if dr >= 8 { 457 panic("bad dr") 458 } 459 // MOV %eax/%rax, %drN 460 gen.byte(0x0f, 0x23, 0xc0|dr<<3) 461 } 462 463 func (gen *generator) in8(port uint16) { 464 gen.mov16(regDX, port) 465 gen.byte(0xec) // in %al, %dx 466 } 467 468 func (gen *generator) in16(port uint16) { 469 gen.mov16(regDX, port) 470 gen.operand16() 471 gen.byte(0xed) // in %ax, %dx 472 } 473 474 func (gen *generator) in32(port uint16) { 475 gen.mov16(regDX, port) 476 gen.operand32() 477 gen.byte(0xed) // in %eax, %dx 478 } 479 480 func (gen *generator) in(port uint16, size int) { 481 switch size { 482 case 0: 483 gen.in8(port) 484 case 1: 485 gen.in16(port) 486 case 2: 487 gen.in32(port) 488 default: 489 panic("bad size") 490 } 491 } 492 493 func (gen *generator) out8(port uint16, v uint8) { 494 gen.mov16(regDX, port) 495 gen.mov8(regAL, v) 496 gen.byte(0xee) // out %dx, %al 497 } 498 499 func (gen *generator) out16(port, v uint16) { 500 gen.mov16(regDX, port) 501 gen.mov16(regAX, v) 502 gen.operand16() 503 gen.byte(0xef) // out %dx, %ax 504 } 505 506 func (gen *generator) out32(port uint16, v uint32) { 507 gen.mov16(regDX, port) 508 gen.mov32(regEAX, v) 509 gen.operand32() 510 gen.byte(0xef) // out %dx, %eax 511 } 512 513 func (gen *generator) out(port uint16, v uint32, size int) { 514 switch size { 515 case 0: 516 gen.out8(port, uint8(v)) 517 case 1: 518 gen.out16(port, uint16(v)) 519 case 2: 520 gen.out32(port, v) 521 default: 522 panic("bad size") 523 } 524 } 525 526 func randSelector(r *rand.Rand) uint16 { 527 seg := uint16(r.Intn(40)) 528 dpl := uint16(r.Intn(4)) 529 ldt := uint16(r.Intn(2)) 530 return seg<<3 | ldt<<2 | dpl 531 } 532 533 func pciAddrPort(r *rand.Rand) (addr uint32, port uint16, size int) { 534 bus := uint32(r.Intn(256)) 535 dev := uint32(r.Intn(32)) 536 fn := uint32(r.Intn(8)) 537 reghi := uint32(r.Intn(16)) 538 reglo := uint32(r.Intn(64)) << 2 539 port = 0xcfc 540 switch size = r.Intn(3); size { 541 case 0: 542 port += uint16(reglo & 3) 543 reglo += uint32(r.Intn(4)) 544 case 1: 545 port += uint16(reglo & 2) 546 reglo += uint32(r.Intn(2) * 2) 547 case 2: 548 } 549 addr = 0x80000000 | reghi<<24 | bus<<16 | dev<<11 | fn<<8 | reglo 550 return 551 } 552 553 var controlRegisters = []uint8{0, 3, 4, 8} 554 var controlRegistersBits = map[uint8][]uint8{ 555 0: {0, 1, 2, 3, 4, 5, 16, 18, 29, 30, 31}, 556 3: {3, 5}, 557 4: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 20, 21, 22}, 558 } 559 560 const eferMSR = 0xC0000080 561 562 var eferBits = []uint8{0, 8, 10, 11, 12, 13, 14, 15} 563 564 var ports = []uint16{ 565 0x40, 0x41, 0x42, 0x43, // PIT 566 0x61, // speaker 567 0x20, 0x21, 0xa0, 0xa1, 0x4d0, 0x4d1, // 8259 568 } 569 570 // sys/kvm.txt also knows this list. 571 var msrs = []uint32{ 572 0x0, 0x1, 0x10, 0x11, 0x12, 0x13, 0x17, 0x1b, 573 0x20, 0x21, 0x28, 0x29, 0x2a, 0x2c, 0x33, 0x34, 574 0x3a, 0x3b, 0x40, 0x60, 0x79, 0x88, 0x89, 0x8a, 575 0x8b, 0x9b, 0x9e, 0xc1, 0xc2, 0xcd, 0xce, 0xe2, 576 0xe7, 0xe8, 0xfe, 0x116, 0x118, 0x119, 0x11a, 0x11b, 577 0x11e, 0x174, 0x175, 0x176, 0x179, 0x17a, 0x17b, 0x180, 578 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, 0x188, 579 0x189, 0x18a, 0x198, 0x199, 0x19a, 0x19b, 0x19c, 0x19d, 580 0x1a0, 0x1a2, 0x1a6, 0x1a7, 0x1aa, 0x1ad, 0x1ae, 0x1af, 581 0x1b0, 0x1b1, 0x1b2, 0x1c8, 0x1c9, 0x1d9, 0x1db, 0x1dc, 582 0x1dd, 0x1de, 0x1e0, 0x1fc, 0x200, 0x201, 0x202, 0x203, 583 0x204, 0x205, 0x206, 0x207, 0x208, 0x209, 0x20a, 0x20b, 584 0x20c, 0x20d, 0x20e, 0x20f, 0x210, 0x211, 0x212, 0x213, 585 0x214, 0x215, 0x216, 0x217, 0x218, 0x219, 0x21a, 0x21b, 586 0x21c, 0x21d, 0x21e, 0x21f, 0x220, 0x221, 0x222, 0x223, 587 0x224, 0x225, 0x226, 0x227, 0x228, 0x229, 0x22a, 0x22b, 588 0x22c, 0x22d, 0x22e, 0x22f, 0x230, 0x231, 0x232, 0x233, 589 0x234, 0x235, 0x236, 0x237, 0x238, 0x239, 0x23a, 0x23b, 590 0x23c, 0x23d, 0x23e, 0x23f, 0x240, 0x241, 0x242, 0x243, 591 0x244, 0x245, 0x246, 0x247, 0x248, 0x249, 0x24a, 0x24b, 592 0x24c, 0x24d, 0x24e, 0x24f, 0x250, 0x251, 0x252, 0x253, 593 0x254, 0x255, 0x256, 0x257, 0x258, 0x259, 0x25a, 0x25b, 594 0x25c, 0x25d, 0x25e, 0x25f, 0x260, 0x261, 0x262, 0x263, 595 0x264, 0x265, 0x266, 0x267, 0x268, 0x269, 0x26a, 0x26b, 596 0x26c, 0x26d, 0x26e, 0x26f, 0x270, 0x271, 0x272, 0x273, 597 0x274, 0x275, 0x276, 0x277, 0x278, 0x279, 0x27a, 0x27b, 598 0x27c, 0x27d, 0x27e, 0x27f, 0x280, 0x281, 0x282, 0x283, 599 0x284, 0x285, 0x286, 0x287, 0x288, 0x289, 0x28a, 0x28b, 600 0x28c, 0x28d, 0x28e, 0x28f, 0x290, 0x291, 0x292, 0x293, 601 0x294, 0x295, 0x296, 0x297, 0x298, 0x299, 0x29a, 0x29b, 602 0x29c, 0x29d, 0x29e, 0x29f, 0x2a0, 0x2a1, 0x2a2, 0x2a3, 603 0x2a4, 0x2a5, 0x2a6, 0x2a7, 0x2a8, 0x2a9, 0x2aa, 0x2ab, 604 0x2ac, 0x2ad, 0x2ae, 0x2af, 0x2b0, 0x2b1, 0x2b2, 0x2b3, 605 0x2b4, 0x2b5, 0x2b6, 0x2b7, 0x2b8, 0x2b9, 0x2ba, 0x2bb, 606 0x2bc, 0x2bd, 0x2be, 0x2bf, 0x2c0, 0x2c1, 0x2c2, 0x2c3, 607 0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 608 0x2cc, 0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 609 0x2d4, 0x2d5, 0x2d6, 0x2d7, 0x2d8, 0x2d9, 0x2da, 0x2db, 610 0x2dc, 0x2dd, 0x2de, 0x2df, 0x2e0, 0x2e1, 0x2e2, 0x2e3, 611 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9, 0x2ea, 0x2eb, 612 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2, 0x2f3, 613 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x2f9, 0x2fa, 0x2fb, 614 0x2fc, 0x2fd, 0x2fe, 0x2ff, 0x300, 0x301, 0x302, 0x303, 615 0x304, 0x305, 0x306, 0x307, 0x308, 0x309, 0x30a, 0x30b, 616 0x30c, 0x30d, 0x30e, 0x30f, 0x310, 0x311, 0x312, 0x313, 617 0x314, 0x315, 0x316, 0x317, 0x318, 0x319, 0x31a, 0x31b, 618 0x31c, 0x31d, 0x31e, 0x31f, 0x320, 0x321, 0x322, 0x323, 619 0x324, 0x325, 0x326, 0x327, 0x328, 0x329, 0x32a, 0x32b, 620 0x32c, 0x32d, 0x32e, 0x32f, 0x330, 0x331, 0x332, 0x333, 621 0x334, 0x335, 0x336, 0x337, 0x338, 0x339, 0x33a, 0x33b, 622 0x33c, 0x33d, 0x33e, 0x33f, 0x340, 0x341, 0x342, 0x343, 623 0x344, 0x345, 0x346, 0x347, 0x348, 0x349, 0x34a, 0x34b, 624 0x34c, 0x34d, 0x34e, 0x34f, 0x350, 0x351, 0x352, 0x353, 625 0x354, 0x355, 0x356, 0x357, 0x358, 0x359, 0x35a, 0x35b, 626 0x35c, 0x35d, 0x35e, 0x35f, 0x360, 0x361, 0x362, 0x363, 627 0x364, 0x365, 0x366, 0x367, 0x368, 0x369, 0x36a, 0x36b, 628 0x36c, 0x36d, 0x36e, 0x36f, 0x370, 0x371, 0x372, 0x373, 629 0x374, 0x375, 0x376, 0x377, 0x378, 0x379, 0x37a, 0x37b, 630 0x37c, 0x37d, 0x37e, 0x37f, 0x380, 0x381, 0x382, 0x383, 631 0x384, 0x385, 0x386, 0x387, 0x388, 0x389, 0x38a, 0x38b, 632 0x38c, 0x38d, 0x38e, 0x38f, 0x390, 0x391, 0x392, 0x393, 633 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 634 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a2, 0x3a3, 635 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 636 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3b0, 0x3b1, 0x3b2, 0x3b3, 637 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 638 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 639 0x3f1, 0x3f2, 0x3f6, 0x3f7, 0x3f8, 0x3f9, 0x3fa, 0x3fc, 640 0x3fd, 0x3fe, 0x3ff, 0x400, 0x401, 0x402, 0x403, 0x404, 641 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 642 0x40d, 0x40e, 0x40f, 0x410, 0x411, 0x412, 0x413, 0x480, 643 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 644 0x489, 0x48a, 0x48b, 0x48c, 0x48d, 0x48e, 0x48f, 0x490, 645 0x491, 0x4c1, 0x4d0, 0x560, 0x561, 0x570, 0x571, 0x572, 646 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x587, 647 0x600, 0x606, 0x60a, 0x60b, 0x60c, 0x60d, 0x610, 0x611, 648 0x613, 0x614, 0x618, 0x619, 0x61b, 0x61c, 0x630, 0x631, 649 0x632, 0x633, 0x634, 0x635, 0x638, 0x639, 0x63a, 0x63b, 650 0x640, 0x641, 0x642, 0x648, 0x649, 0x64a, 0x64b, 0x64c, 651 0x64d, 0x64e, 0x64f, 0x658, 0x659, 0x65a, 0x65b, 0x660, 652 0x668, 0x669, 0x680, 0x690, 0x6b0, 0x6b1, 0x6c0, 0x6e0, 653 0x770, 0x771, 0x772, 0x773, 0x774, 0x777, 0x800, 0x801, 654 0x802, 0x803, 0x804, 0x805, 0x806, 0x807, 0x808, 0x809, 655 0x80a, 0x80b, 0x80c, 0x80d, 0x80e, 0x80f, 0x810, 0x811, 656 0x812, 0x813, 0x814, 0x815, 0x816, 0x817, 0x818, 0x819, 657 0x81a, 0x81b, 0x81c, 0x81d, 0x81e, 0x81f, 0x820, 0x821, 658 0x822, 0x823, 0x824, 0x825, 0x826, 0x827, 0x828, 0x829, 659 0x82a, 0x82b, 0x82c, 0x82d, 0x82e, 0x82f, 0x830, 0x831, 660 0x832, 0x833, 0x834, 0x835, 0x836, 0x837, 0x838, 0x839, 661 0x83a, 0x83b, 0x83c, 0x83d, 0x83e, 0x83f, 0x840, 0x841, 662 0x842, 0x843, 0x844, 0x845, 0x846, 0x847, 0x848, 0x849, 663 0x84a, 0x84b, 0x84c, 0x84d, 0x84e, 0x84f, 0x850, 0x851, 664 0x852, 0x853, 0x854, 0x855, 0x856, 0x857, 0x858, 0x859, 665 0x85a, 0x85b, 0x85c, 0x85d, 0x85e, 0x85f, 0x860, 0x861, 666 0x862, 0x863, 0x864, 0x865, 0x866, 0x867, 0x868, 0x869, 667 0x86a, 0x86b, 0x86c, 0x86d, 0x86e, 0x86f, 0x870, 0x871, 668 0x872, 0x873, 0x874, 0x875, 0x876, 0x877, 0x878, 0x879, 669 0x87a, 0x87b, 0x87c, 0x87d, 0x87e, 0x87f, 0x880, 0x881, 670 0x882, 0x883, 0x884, 0x885, 0x886, 0x887, 0x888, 0x889, 671 0x88a, 0x88b, 0x88c, 0x88d, 0x88e, 0x88f, 0x890, 0x891, 672 0x892, 0x893, 0x894, 0x895, 0x896, 0x897, 0x898, 0x899, 673 0x89a, 0x89b, 0x89c, 0x89d, 0x89e, 0x89f, 0x8a0, 0x8a1, 674 0x8a2, 0x8a3, 0x8a4, 0x8a5, 0x8a6, 0x8a7, 0x8a8, 0x8a9, 675 0x8aa, 0x8ab, 0x8ac, 0x8ad, 0x8ae, 0x8af, 0x8b0, 0x8b1, 676 0x8b2, 0x8b3, 0x8b4, 0x8b5, 0x8b6, 0x8b7, 0x8b8, 0x8b9, 677 0x8ba, 0x8bb, 0x8bc, 0x8bd, 0x8be, 0x8bf, 0x8c0, 0x8c1, 678 0x8c2, 0x8c3, 0x8c4, 0x8c5, 0x8c6, 0x8c7, 0x8c8, 0x8c9, 679 0x8ca, 0x8cb, 0x8cc, 0x8cd, 0x8ce, 0x8cf, 0x8d0, 0x8d1, 680 0x8d2, 0x8d3, 0x8d4, 0x8d5, 0x8d6, 0x8d7, 0x8d8, 0x8d9, 681 0x8da, 0x8db, 0x8dc, 0x8dd, 0x8de, 0x8df, 0x8e0, 0x8e1, 682 0x8e2, 0x8e3, 0x8e4, 0x8e5, 0x8e6, 0x8e7, 0x8e8, 0x8e9, 683 0x8ea, 0x8eb, 0x8ec, 0x8ed, 0x8ee, 0x8ef, 0x8f0, 0x8f1, 684 0x8f2, 0x8f3, 0x8f4, 0x8f5, 0x8f6, 0x8f7, 0x8f8, 0x8f9, 685 0x8fa, 0x8fb, 0x8fc, 0x8fd, 0x8fe, 0x8ff, 0x900, 0x901, 686 0x902, 0x903, 0x904, 0x905, 0x906, 0x907, 0x908, 0x909, 687 0x90a, 0x90b, 0x90c, 0x90d, 0x90e, 0x90f, 0x910, 0x911, 688 0x912, 0x913, 0x914, 0x915, 0x916, 0x917, 0x918, 0x919, 689 0x91a, 0x91b, 0x91c, 0x91d, 0x91e, 0x91f, 0x920, 0x921, 690 0x922, 0x923, 0x924, 0x925, 0x926, 0x927, 0x928, 0x929, 691 0x92a, 0x92b, 0x92c, 0x92d, 0x92e, 0x92f, 0x930, 0x931, 692 0x932, 0x933, 0x934, 0x935, 0x936, 0x937, 0x938, 0x939, 693 0x93a, 0x93b, 0x93c, 0x93d, 0x93e, 0x93f, 0x940, 0x941, 694 0x942, 0x943, 0x944, 0x945, 0x946, 0x947, 0x948, 0x949, 695 0x94a, 0x94b, 0x94c, 0x94d, 0x94e, 0x94f, 0x950, 0x951, 696 0x952, 0x953, 0x954, 0x955, 0x956, 0x957, 0x958, 0x959, 697 0x95a, 0x95b, 0x95c, 0x95d, 0x95e, 0x95f, 0x960, 0x961, 698 0x962, 0x963, 0x964, 0x965, 0x966, 0x967, 0x968, 0x969, 699 0x96a, 0x96b, 0x96c, 0x96d, 0x96e, 0x96f, 0x970, 0x971, 700 0x972, 0x973, 0x974, 0x975, 0x976, 0x977, 0x978, 0x979, 701 0x97a, 0x97b, 0x97c, 0x97d, 0x97e, 0x97f, 0x980, 0x981, 702 0x982, 0x983, 0x984, 0x985, 0x986, 0x987, 0x988, 0x989, 703 0x98a, 0x98b, 0x98c, 0x98d, 0x98e, 0x98f, 0x990, 0x991, 704 0x992, 0x993, 0x994, 0x995, 0x996, 0x997, 0x998, 0x999, 705 0x99a, 0x99b, 0x99c, 0x99d, 0x99e, 0x99f, 0x9a0, 0x9a1, 706 0x9a2, 0x9a3, 0x9a4, 0x9a5, 0x9a6, 0x9a7, 0x9a8, 0x9a9, 707 0x9aa, 0x9ab, 0x9ac, 0x9ad, 0x9ae, 0x9af, 0x9b0, 0x9b1, 708 0x9b2, 0x9b3, 0x9b4, 0x9b5, 0x9b6, 0x9b7, 0x9b8, 0x9b9, 709 0x9ba, 0x9bb, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c1, 710 0x9c2, 0x9c3, 0x9c4, 0x9c5, 0x9c6, 0x9c7, 0x9c8, 0x9c9, 711 0x9ca, 0x9cb, 0x9cc, 0x9cd, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 712 0x9d2, 0x9d3, 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9d9, 713 0x9da, 0x9db, 0x9dc, 0x9dd, 0x9de, 0x9df, 0x9e0, 0x9e1, 714 0x9e2, 0x9e3, 0x9e4, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 715 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9ef, 0x9f0, 0x9f1, 716 0x9f2, 0x9f3, 0x9f4, 0x9f5, 0x9f6, 0x9f7, 0x9f8, 0x9f9, 717 0x9fa, 0x9fb, 0x9fc, 0x9fd, 0x9fe, 0x9ff, 0xa00, 0xa01, 718 0xa02, 0xa03, 0xa04, 0xa05, 0xa06, 0xa07, 0xa08, 0xa09, 719 0xa0a, 0xa0b, 0xa0c, 0xa0d, 0xa0e, 0xa0f, 0xa10, 0xa11, 720 0xa12, 0xa13, 0xa14, 0xa15, 0xa16, 0xa17, 0xa18, 0xa19, 721 0xa1a, 0xa1b, 0xa1c, 0xa1d, 0xa1e, 0xa1f, 0xa20, 0xa21, 722 0xa22, 0xa23, 0xa24, 0xa25, 0xa26, 0xa27, 0xa28, 0xa29, 723 0xa2a, 0xa2b, 0xa2c, 0xa2d, 0xa2e, 0xa2f, 0xa30, 0xa31, 724 0xa32, 0xa33, 0xa34, 0xa35, 0xa36, 0xa37, 0xa38, 0xa39, 725 0xa3a, 0xa3b, 0xa3c, 0xa3d, 0xa3e, 0xa3f, 0xa40, 0xa41, 726 0xa42, 0xa43, 0xa44, 0xa45, 0xa46, 0xa47, 0xa48, 0xa49, 727 0xa4a, 0xa4b, 0xa4c, 0xa4d, 0xa4e, 0xa4f, 0xa50, 0xa51, 728 0xa52, 0xa53, 0xa54, 0xa55, 0xa56, 0xa57, 0xa58, 0xa59, 729 0xa5a, 0xa5b, 0xa5c, 0xa5d, 0xa5e, 0xa5f, 0xa60, 0xa61, 730 0xa62, 0xa63, 0xa64, 0xa65, 0xa66, 0xa67, 0xa68, 0xa69, 731 0xa6a, 0xa6b, 0xa6c, 0xa6d, 0xa6e, 0xa6f, 0xa70, 0xa71, 732 0xa72, 0xa73, 0xa74, 0xa75, 0xa76, 0xa77, 0xa78, 0xa79, 733 0xa7a, 0xa7b, 0xa7c, 0xa7d, 0xa7e, 0xa7f, 0xa80, 0xa81, 734 0xa82, 0xa83, 0xa84, 0xa85, 0xa86, 0xa87, 0xa88, 0xa89, 735 0xa8a, 0xa8b, 0xa8c, 0xa8d, 0xa8e, 0xa8f, 0xa90, 0xa91, 736 0xa92, 0xa93, 0xa94, 0xa95, 0xa96, 0xa97, 0xa98, 0xa99, 737 0xa9a, 0xa9b, 0xa9c, 0xa9d, 0xa9e, 0xa9f, 0xaa0, 0xaa1, 738 0xaa2, 0xaa3, 0xaa4, 0xaa5, 0xaa6, 0xaa7, 0xaa8, 0xaa9, 739 0xaaa, 0xaab, 0xaac, 0xaad, 0xaae, 0xaaf, 0xab0, 0xab1, 740 0xab2, 0xab3, 0xab4, 0xab5, 0xab6, 0xab7, 0xab8, 0xab9, 741 0xaba, 0xabb, 0xabc, 0xabd, 0xabe, 0xabf, 0xac0, 0xac1, 742 0xac2, 0xac3, 0xac4, 0xac5, 0xac6, 0xac7, 0xac8, 0xac9, 743 0xaca, 0xacb, 0xacc, 0xacd, 0xace, 0xacf, 0xad0, 0xad1, 744 0xad2, 0xad3, 0xad4, 0xad5, 0xad6, 0xad7, 0xad8, 0xad9, 745 0xada, 0xadb, 0xadc, 0xadd, 0xade, 0xadf, 0xae0, 0xae1, 746 0xae2, 0xae3, 0xae4, 0xae5, 0xae6, 0xae7, 0xae8, 0xae9, 747 0xaea, 0xaeb, 0xaec, 0xaed, 0xaee, 0xaef, 0xaf0, 0xaf1, 748 0xaf2, 0xaf3, 0xaf4, 0xaf5, 0xaf6, 0xaf7, 0xaf8, 0xaf9, 749 0xafa, 0xafb, 0xafc, 0xafd, 0xafe, 0xaff, 0xb00, 0xb01, 750 0xb02, 0xb03, 0xb04, 0xb05, 0xb06, 0xb07, 0xb08, 0xb09, 751 0xb0a, 0xb0b, 0xb0c, 0xb0d, 0xb0e, 0xb0f, 0xb10, 0xb11, 752 0xb12, 0xb13, 0xb14, 0xb15, 0xb16, 0xb17, 0xb18, 0xb19, 753 0xb1a, 0xb1b, 0xb1c, 0xb1d, 0xb1e, 0xb1f, 0xb20, 0xb21, 754 0xb22, 0xb23, 0xb24, 0xb25, 0xb26, 0xb27, 0xb28, 0xb29, 755 0xb2a, 0xb2b, 0xb2c, 0xb2d, 0xb2e, 0xb2f, 0xb30, 0xb31, 756 0xb32, 0xb33, 0xb34, 0xb35, 0xb36, 0xb37, 0xb38, 0xb39, 757 0xb3a, 0xb3b, 0xb3c, 0xb3d, 0xb3e, 0xb3f, 0xb40, 0xb41, 758 0xb42, 0xb43, 0xb44, 0xb45, 0xb46, 0xb47, 0xb48, 0xb49, 759 0xb4a, 0xb4b, 0xb4c, 0xb4d, 0xb4e, 0xb4f, 0xb50, 0xb51, 760 0xb52, 0xb53, 0xb54, 0xb55, 0xb56, 0xb57, 0xb58, 0xb59, 761 0xb5a, 0xb5b, 0xb5c, 0xb5d, 0xb5e, 0xb5f, 0xb60, 0xb61, 762 0xb62, 0xb63, 0xb64, 0xb65, 0xb66, 0xb67, 0xb68, 0xb69, 763 0xb6a, 0xb6b, 0xb6c, 0xb6d, 0xb6e, 0xb6f, 0xb70, 0xb71, 764 0xb72, 0xb73, 0xb74, 0xb75, 0xb76, 0xb77, 0xb78, 0xb79, 765 0xb7a, 0xb7b, 0xb7c, 0xb7d, 0xb7e, 0xb7f, 0xb80, 0xb81, 766 0xb82, 0xb83, 0xb84, 0xb85, 0xb86, 0xb87, 0xb88, 0xb89, 767 0xb8a, 0xb8b, 0xb8c, 0xb8d, 0xb8e, 0xb8f, 0xb90, 0xb91, 768 0xb92, 0xb93, 0xb94, 0xb95, 0xb96, 0xb97, 0xb98, 0xb99, 769 0xb9a, 0xb9b, 0xb9c, 0xb9d, 0xb9e, 0xb9f, 0xba0, 0xba1, 770 0xba2, 0xba3, 0xba4, 0xba5, 0xba6, 0xba7, 0xba8, 0xba9, 771 0xbaa, 0xbab, 0xbac, 0xbad, 0xbae, 0xbaf, 0xbb0, 0xbb1, 772 0xbb2, 0xbb3, 0xbb4, 0xbb5, 0xbb6, 0xbb7, 0xbb8, 0xbb9, 773 0xbba, 0xbbb, 0xbbc, 0xbbd, 0xbbe, 0xbbf, 0xbc0, 0xbc1, 774 0xbc2, 0xbc3, 0xbc4, 0xbc5, 0xbc6, 0xbc7, 0xbc8, 0xbc9, 775 0xbca, 0xbcb, 0xbcc, 0xbcd, 0xbce, 0xbcf, 0xbd0, 0xbd1, 776 0xbd2, 0xbd3, 0xbd4, 0xbd5, 0xbd6, 0xbd7, 0xbd8, 0xbd9, 777 0xbda, 0xbdb, 0xbdc, 0xbdd, 0xbde, 0xbdf, 0xbe0, 0xbe1, 778 0xbe2, 0xbe3, 0xbe4, 0xbe5, 0xbe6, 0xbe7, 0xbe8, 0xbe9, 779 0xbea, 0xbeb, 0xbec, 0xbed, 0xbee, 0xbef, 0xbf0, 0xbf1, 780 0xbf2, 0xbf3, 0xbf4, 0xbf5, 0xbf6, 0xbf7, 0xbf8, 0xbf9, 781 0xbfa, 0xbfb, 0xbfc, 0xbfd, 0xbfe, 0xbff, 0xd90, 0xda0, 782 0xdc0, 0xdc1, 0xdc2, 0xdc3, 0xdc4, 0xdc5, 0xdc6, 0xdc7, 783 0x40000000, 0x40000001, 0x40000002, 0x40000003, 0x40000010, 0x40000020, 0x40000022, 0x40000023, 784 0x40000070, 0x40000071, 0x40000072, 0x40000073, 0x40000080, 0x40000081, 0x40000082, 0x40000083, 785 0x40000084, 0x40000090, 0x40000091, 0x40000092, 0x40000093, 0x40000094, 0x40000095, 0x40000096, 786 0x40000097, 0x40000098, 0x40000099, 0x4000009a, 0x4000009b, 0x4000009c, 0x4000009d, 0x4000009e, 787 0x4000009f, 0x400000b0, 0x400000b1, 0x400000b2, 0x400000b3, 0x400000b4, 0x400000b5, 0x400000b6, 788 0x400000b7, 0x40000100, 0x40000101, 0x40000102, 0x40000103, 0x40000104, 0x40000105, 0x4b564d00, 789 0x4b564d01, 0x4b564d02, 0x4b564d03, 0x4b564d04, 0xc0000080, 0xc0000081, 0xc0000082, 0xc0000083, 790 0xc0000084, 0xc0000100, 0xc0000101, 0xc0000102, 0xc0000103, 0xc0000104, 0xc001001f, 0xc0010020, 791 0xc0010044, 0xc0010062, 0xc0010063, 0xc0010064, 0xc0010114, 0xc0010115, 0xc0010117, 0xc0010140, 792 0xc0010141, 0xc0011020, 0xc0011022, 0xc001102a, 0xc0011030, 0xc0011031, 0xc0011032, 0xc0011033, 793 0xc0011034, 0xc0011035, 0xc0011036, 0xc0011037, 0xc0011038, 0xc0011039, 0xc001103a, 0xc001103b, 794 0xc001103d, 795 }