Home | History | Annotate | Download | only in aes
      1 default	rel
      2 %define XMMWORD
      3 %define YMMWORD
      4 %define ZMMWORD
      5 section	.text code align=64
      6 
      7 
      8 ALIGN	16
      9 _x86_64_AES_encrypt:
     10 	xor	eax,DWORD[r15]
     11 	xor	ebx,DWORD[4+r15]
     12 	xor	ecx,DWORD[8+r15]
     13 	xor	edx,DWORD[12+r15]
     14 
     15 	mov	r13d,DWORD[240+r15]
     16 	sub	r13d,1
     17 	jmp	NEAR $L$enc_loop
     18 ALIGN	16
     19 $L$enc_loop:
     20 
     21 	movzx	esi,al
     22 	movzx	edi,bl
     23 	movzx	ebp,cl
     24 	mov	r10d,DWORD[rsi*8+r14]
     25 	mov	r11d,DWORD[rdi*8+r14]
     26 	mov	r12d,DWORD[rbp*8+r14]
     27 
     28 	movzx	esi,bh
     29 	movzx	edi,ch
     30 	movzx	ebp,dl
     31 	xor	r10d,DWORD[3+rsi*8+r14]
     32 	xor	r11d,DWORD[3+rdi*8+r14]
     33 	mov	r8d,DWORD[rbp*8+r14]
     34 
     35 	movzx	esi,dh
     36 	shr	ecx,16
     37 	movzx	ebp,ah
     38 	xor	r12d,DWORD[3+rsi*8+r14]
     39 	shr	edx,16
     40 	xor	r8d,DWORD[3+rbp*8+r14]
     41 
     42 	shr	ebx,16
     43 	lea	r15,[16+r15]
     44 	shr	eax,16
     45 
     46 	movzx	esi,cl
     47 	movzx	edi,dl
     48 	movzx	ebp,al
     49 	xor	r10d,DWORD[2+rsi*8+r14]
     50 	xor	r11d,DWORD[2+rdi*8+r14]
     51 	xor	r12d,DWORD[2+rbp*8+r14]
     52 
     53 	movzx	esi,dh
     54 	movzx	edi,ah
     55 	movzx	ebp,bl
     56 	xor	r10d,DWORD[1+rsi*8+r14]
     57 	xor	r11d,DWORD[1+rdi*8+r14]
     58 	xor	r8d,DWORD[2+rbp*8+r14]
     59 
     60 	mov	edx,DWORD[12+r15]
     61 	movzx	edi,bh
     62 	movzx	ebp,ch
     63 	mov	eax,DWORD[r15]
     64 	xor	r12d,DWORD[1+rdi*8+r14]
     65 	xor	r8d,DWORD[1+rbp*8+r14]
     66 
     67 	mov	ebx,DWORD[4+r15]
     68 	mov	ecx,DWORD[8+r15]
     69 	xor	eax,r10d
     70 	xor	ebx,r11d
     71 	xor	ecx,r12d
     72 	xor	edx,r8d
     73 	sub	r13d,1
     74 	jnz	NEAR $L$enc_loop
     75 	movzx	esi,al
     76 	movzx	edi,bl
     77 	movzx	ebp,cl
     78 	movzx	r10d,BYTE[2+rsi*8+r14]
     79 	movzx	r11d,BYTE[2+rdi*8+r14]
     80 	movzx	r12d,BYTE[2+rbp*8+r14]
     81 
     82 	movzx	esi,dl
     83 	movzx	edi,bh
     84 	movzx	ebp,ch
     85 	movzx	r8d,BYTE[2+rsi*8+r14]
     86 	mov	edi,DWORD[rdi*8+r14]
     87 	mov	ebp,DWORD[rbp*8+r14]
     88 
     89 	and	edi,0x0000ff00
     90 	and	ebp,0x0000ff00
     91 
     92 	xor	r10d,edi
     93 	xor	r11d,ebp
     94 	shr	ecx,16
     95 
     96 	movzx	esi,dh
     97 	movzx	edi,ah
     98 	shr	edx,16
     99 	mov	esi,DWORD[rsi*8+r14]
    100 	mov	edi,DWORD[rdi*8+r14]
    101 
    102 	and	esi,0x0000ff00
    103 	and	edi,0x0000ff00
    104 	shr	ebx,16
    105 	xor	r12d,esi
    106 	xor	r8d,edi
    107 	shr	eax,16
    108 
    109 	movzx	esi,cl
    110 	movzx	edi,dl
    111 	movzx	ebp,al
    112 	mov	esi,DWORD[rsi*8+r14]
    113 	mov	edi,DWORD[rdi*8+r14]
    114 	mov	ebp,DWORD[rbp*8+r14]
    115 
    116 	and	esi,0x00ff0000
    117 	and	edi,0x00ff0000
    118 	and	ebp,0x00ff0000
    119 
    120 	xor	r10d,esi
    121 	xor	r11d,edi
    122 	xor	r12d,ebp
    123 
    124 	movzx	esi,bl
    125 	movzx	edi,dh
    126 	movzx	ebp,ah
    127 	mov	esi,DWORD[rsi*8+r14]
    128 	mov	edi,DWORD[2+rdi*8+r14]
    129 	mov	ebp,DWORD[2+rbp*8+r14]
    130 
    131 	and	esi,0x00ff0000
    132 	and	edi,0xff000000
    133 	and	ebp,0xff000000
    134 
    135 	xor	r8d,esi
    136 	xor	r10d,edi
    137 	xor	r11d,ebp
    138 
    139 	movzx	esi,bh
    140 	movzx	edi,ch
    141 	mov	edx,DWORD[((16+12))+r15]
    142 	mov	esi,DWORD[2+rsi*8+r14]
    143 	mov	edi,DWORD[2+rdi*8+r14]
    144 	mov	eax,DWORD[((16+0))+r15]
    145 
    146 	and	esi,0xff000000
    147 	and	edi,0xff000000
    148 
    149 	xor	r12d,esi
    150 	xor	r8d,edi
    151 
    152 	mov	ebx,DWORD[((16+4))+r15]
    153 	mov	ecx,DWORD[((16+8))+r15]
    154 	xor	eax,r10d
    155 	xor	ebx,r11d
    156 	xor	ecx,r12d
    157 	xor	edx,r8d
    158 DB	0xf3,0xc3
    159 
    160 
    161 ALIGN	16
    162 _x86_64_AES_encrypt_compact:
    163 	lea	r8,[128+r14]
    164 	mov	edi,DWORD[((0-128))+r8]
    165 	mov	ebp,DWORD[((32-128))+r8]
    166 	mov	r10d,DWORD[((64-128))+r8]
    167 	mov	r11d,DWORD[((96-128))+r8]
    168 	mov	edi,DWORD[((128-128))+r8]
    169 	mov	ebp,DWORD[((160-128))+r8]
    170 	mov	r10d,DWORD[((192-128))+r8]
    171 	mov	r11d,DWORD[((224-128))+r8]
    172 	jmp	NEAR $L$enc_loop_compact
    173 ALIGN	16
    174 $L$enc_loop_compact:
    175 	xor	eax,DWORD[r15]
    176 	xor	ebx,DWORD[4+r15]
    177 	xor	ecx,DWORD[8+r15]
    178 	xor	edx,DWORD[12+r15]
    179 	lea	r15,[16+r15]
    180 	movzx	r10d,al
    181 	movzx	r11d,bl
    182 	movzx	r12d,cl
    183 	movzx	r8d,dl
    184 	movzx	esi,bh
    185 	movzx	edi,ch
    186 	shr	ecx,16
    187 	movzx	ebp,dh
    188 	movzx	r10d,BYTE[r10*1+r14]
    189 	movzx	r11d,BYTE[r11*1+r14]
    190 	movzx	r12d,BYTE[r12*1+r14]
    191 	movzx	r8d,BYTE[r8*1+r14]
    192 
    193 	movzx	r9d,BYTE[rsi*1+r14]
    194 	movzx	esi,ah
    195 	movzx	r13d,BYTE[rdi*1+r14]
    196 	movzx	edi,cl
    197 	movzx	ebp,BYTE[rbp*1+r14]
    198 	movzx	esi,BYTE[rsi*1+r14]
    199 
    200 	shl	r9d,8
    201 	shr	edx,16
    202 	shl	r13d,8
    203 	xor	r10d,r9d
    204 	shr	eax,16
    205 	movzx	r9d,dl
    206 	shr	ebx,16
    207 	xor	r11d,r13d
    208 	shl	ebp,8
    209 	movzx	r13d,al
    210 	movzx	edi,BYTE[rdi*1+r14]
    211 	xor	r12d,ebp
    212 
    213 	shl	esi,8
    214 	movzx	ebp,bl
    215 	shl	edi,16
    216 	xor	r8d,esi
    217 	movzx	r9d,BYTE[r9*1+r14]
    218 	movzx	esi,dh
    219 	movzx	r13d,BYTE[r13*1+r14]
    220 	xor	r10d,edi
    221 
    222 	shr	ecx,8
    223 	movzx	edi,ah
    224 	shl	r9d,16
    225 	shr	ebx,8
    226 	shl	r13d,16
    227 	xor	r11d,r9d
    228 	movzx	ebp,BYTE[rbp*1+r14]
    229 	movzx	esi,BYTE[rsi*1+r14]
    230 	movzx	edi,BYTE[rdi*1+r14]
    231 	movzx	edx,BYTE[rcx*1+r14]
    232 	movzx	ecx,BYTE[rbx*1+r14]
    233 
    234 	shl	ebp,16
    235 	xor	r12d,r13d
    236 	shl	esi,24
    237 	xor	r8d,ebp
    238 	shl	edi,24
    239 	xor	r10d,esi
    240 	shl	edx,24
    241 	xor	r11d,edi
    242 	shl	ecx,24
    243 	mov	eax,r10d
    244 	mov	ebx,r11d
    245 	xor	ecx,r12d
    246 	xor	edx,r8d
    247 	cmp	r15,QWORD[16+rsp]
    248 	je	NEAR $L$enc_compact_done
    249 	mov	r10d,0x80808080
    250 	mov	r11d,0x80808080
    251 	and	r10d,eax
    252 	and	r11d,ebx
    253 	mov	esi,r10d
    254 	mov	edi,r11d
    255 	shr	r10d,7
    256 	lea	r8d,[rax*1+rax]
    257 	shr	r11d,7
    258 	lea	r9d,[rbx*1+rbx]
    259 	sub	esi,r10d
    260 	sub	edi,r11d
    261 	and	r8d,0xfefefefe
    262 	and	r9d,0xfefefefe
    263 	and	esi,0x1b1b1b1b
    264 	and	edi,0x1b1b1b1b
    265 	mov	r10d,eax
    266 	mov	r11d,ebx
    267 	xor	r8d,esi
    268 	xor	r9d,edi
    269 
    270 	xor	eax,r8d
    271 	xor	ebx,r9d
    272 	mov	r12d,0x80808080
    273 	rol	eax,24
    274 	mov	ebp,0x80808080
    275 	rol	ebx,24
    276 	and	r12d,ecx
    277 	and	ebp,edx
    278 	xor	eax,r8d
    279 	xor	ebx,r9d
    280 	mov	esi,r12d
    281 	ror	r10d,16
    282 	mov	edi,ebp
    283 	ror	r11d,16
    284 	lea	r8d,[rcx*1+rcx]
    285 	shr	r12d,7
    286 	xor	eax,r10d
    287 	shr	ebp,7
    288 	xor	ebx,r11d
    289 	ror	r10d,8
    290 	lea	r9d,[rdx*1+rdx]
    291 	ror	r11d,8
    292 	sub	esi,r12d
    293 	sub	edi,ebp
    294 	xor	eax,r10d
    295 	xor	ebx,r11d
    296 
    297 	and	r8d,0xfefefefe
    298 	and	r9d,0xfefefefe
    299 	and	esi,0x1b1b1b1b
    300 	and	edi,0x1b1b1b1b
    301 	mov	r12d,ecx
    302 	mov	ebp,edx
    303 	xor	r8d,esi
    304 	xor	r9d,edi
    305 
    306 	ror	r12d,16
    307 	xor	ecx,r8d
    308 	ror	ebp,16
    309 	xor	edx,r9d
    310 	rol	ecx,24
    311 	mov	esi,DWORD[r14]
    312 	rol	edx,24
    313 	xor	ecx,r8d
    314 	mov	edi,DWORD[64+r14]
    315 	xor	edx,r9d
    316 	mov	r8d,DWORD[128+r14]
    317 	xor	ecx,r12d
    318 	ror	r12d,8
    319 	xor	edx,ebp
    320 	ror	ebp,8
    321 	xor	ecx,r12d
    322 	mov	r9d,DWORD[192+r14]
    323 	xor	edx,ebp
    324 	jmp	NEAR $L$enc_loop_compact
    325 ALIGN	16
    326 $L$enc_compact_done:
    327 	xor	eax,DWORD[r15]
    328 	xor	ebx,DWORD[4+r15]
    329 	xor	ecx,DWORD[8+r15]
    330 	xor	edx,DWORD[12+r15]
    331 DB	0xf3,0xc3
    332 
    333 ALIGN	16
    334 global	asm_AES_encrypt
    335 
    336 
    337 asm_AES_encrypt:
    338 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    339 	mov	QWORD[16+rsp],rsi
    340 	mov	rax,rsp
    341 $L$SEH_begin_asm_AES_encrypt:
    342 	mov	rdi,rcx
    343 	mov	rsi,rdx
    344 	mov	rdx,r8
    345 
    346 
    347 	push	rbx
    348 	push	rbp
    349 	push	r12
    350 	push	r13
    351 	push	r14
    352 	push	r15
    353 
    354 
    355 	mov	r10,rsp
    356 	lea	rcx,[((-63))+rdx]
    357 	and	rsp,-64
    358 	sub	rcx,rsp
    359 	neg	rcx
    360 	and	rcx,0x3c0
    361 	sub	rsp,rcx
    362 	sub	rsp,32
    363 
    364 	mov	QWORD[16+rsp],rsi
    365 	mov	QWORD[24+rsp],r10
    366 $L$enc_prologue:
    367 
    368 	mov	r15,rdx
    369 	mov	r13d,DWORD[240+r15]
    370 
    371 	mov	eax,DWORD[rdi]
    372 	mov	ebx,DWORD[4+rdi]
    373 	mov	ecx,DWORD[8+rdi]
    374 	mov	edx,DWORD[12+rdi]
    375 
    376 	shl	r13d,4
    377 	lea	rbp,[r13*1+r15]
    378 	mov	QWORD[rsp],r15
    379 	mov	QWORD[8+rsp],rbp
    380 
    381 
    382 	lea	r14,[(($L$AES_Te+2048))]
    383 	lea	rbp,[768+rsp]
    384 	sub	rbp,r14
    385 	and	rbp,0x300
    386 	lea	r14,[rbp*1+r14]
    387 
    388 	call	_x86_64_AES_encrypt_compact
    389 
    390 	mov	r9,QWORD[16+rsp]
    391 	mov	rsi,QWORD[24+rsp]
    392 	mov	DWORD[r9],eax
    393 	mov	DWORD[4+r9],ebx
    394 	mov	DWORD[8+r9],ecx
    395 	mov	DWORD[12+r9],edx
    396 
    397 	mov	r15,QWORD[rsi]
    398 	mov	r14,QWORD[8+rsi]
    399 	mov	r13,QWORD[16+rsi]
    400 	mov	r12,QWORD[24+rsi]
    401 	mov	rbp,QWORD[32+rsi]
    402 	mov	rbx,QWORD[40+rsi]
    403 	lea	rsp,[48+rsi]
    404 $L$enc_epilogue:
    405 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    406 	mov	rsi,QWORD[16+rsp]
    407 	DB	0F3h,0C3h		;repret
    408 $L$SEH_end_asm_AES_encrypt:
    409 
    410 ALIGN	16
    411 _x86_64_AES_decrypt:
    412 	xor	eax,DWORD[r15]
    413 	xor	ebx,DWORD[4+r15]
    414 	xor	ecx,DWORD[8+r15]
    415 	xor	edx,DWORD[12+r15]
    416 
    417 	mov	r13d,DWORD[240+r15]
    418 	sub	r13d,1
    419 	jmp	NEAR $L$dec_loop
    420 ALIGN	16
    421 $L$dec_loop:
    422 
    423 	movzx	esi,al
    424 	movzx	edi,bl
    425 	movzx	ebp,cl
    426 	mov	r10d,DWORD[rsi*8+r14]
    427 	mov	r11d,DWORD[rdi*8+r14]
    428 	mov	r12d,DWORD[rbp*8+r14]
    429 
    430 	movzx	esi,dh
    431 	movzx	edi,ah
    432 	movzx	ebp,dl
    433 	xor	r10d,DWORD[3+rsi*8+r14]
    434 	xor	r11d,DWORD[3+rdi*8+r14]
    435 	mov	r8d,DWORD[rbp*8+r14]
    436 
    437 	movzx	esi,bh
    438 	shr	eax,16
    439 	movzx	ebp,ch
    440 	xor	r12d,DWORD[3+rsi*8+r14]
    441 	shr	edx,16
    442 	xor	r8d,DWORD[3+rbp*8+r14]
    443 
    444 	shr	ebx,16
    445 	lea	r15,[16+r15]
    446 	shr	ecx,16
    447 
    448 	movzx	esi,cl
    449 	movzx	edi,dl
    450 	movzx	ebp,al
    451 	xor	r10d,DWORD[2+rsi*8+r14]
    452 	xor	r11d,DWORD[2+rdi*8+r14]
    453 	xor	r12d,DWORD[2+rbp*8+r14]
    454 
    455 	movzx	esi,bh
    456 	movzx	edi,ch
    457 	movzx	ebp,bl
    458 	xor	r10d,DWORD[1+rsi*8+r14]
    459 	xor	r11d,DWORD[1+rdi*8+r14]
    460 	xor	r8d,DWORD[2+rbp*8+r14]
    461 
    462 	movzx	esi,dh
    463 	mov	edx,DWORD[12+r15]
    464 	movzx	ebp,ah
    465 	xor	r12d,DWORD[1+rsi*8+r14]
    466 	mov	eax,DWORD[r15]
    467 	xor	r8d,DWORD[1+rbp*8+r14]
    468 
    469 	xor	eax,r10d
    470 	mov	ebx,DWORD[4+r15]
    471 	mov	ecx,DWORD[8+r15]
    472 	xor	ecx,r12d
    473 	xor	ebx,r11d
    474 	xor	edx,r8d
    475 	sub	r13d,1
    476 	jnz	NEAR $L$dec_loop
    477 	lea	r14,[2048+r14]
    478 	movzx	esi,al
    479 	movzx	edi,bl
    480 	movzx	ebp,cl
    481 	movzx	r10d,BYTE[rsi*1+r14]
    482 	movzx	r11d,BYTE[rdi*1+r14]
    483 	movzx	r12d,BYTE[rbp*1+r14]
    484 
    485 	movzx	esi,dl
    486 	movzx	edi,dh
    487 	movzx	ebp,ah
    488 	movzx	r8d,BYTE[rsi*1+r14]
    489 	movzx	edi,BYTE[rdi*1+r14]
    490 	movzx	ebp,BYTE[rbp*1+r14]
    491 
    492 	shl	edi,8
    493 	shl	ebp,8
    494 
    495 	xor	r10d,edi
    496 	xor	r11d,ebp
    497 	shr	edx,16
    498 
    499 	movzx	esi,bh
    500 	movzx	edi,ch
    501 	shr	eax,16
    502 	movzx	esi,BYTE[rsi*1+r14]
    503 	movzx	edi,BYTE[rdi*1+r14]
    504 
    505 	shl	esi,8
    506 	shl	edi,8
    507 	shr	ebx,16
    508 	xor	r12d,esi
    509 	xor	r8d,edi
    510 	shr	ecx,16
    511 
    512 	movzx	esi,cl
    513 	movzx	edi,dl
    514 	movzx	ebp,al
    515 	movzx	esi,BYTE[rsi*1+r14]
    516 	movzx	edi,BYTE[rdi*1+r14]
    517 	movzx	ebp,BYTE[rbp*1+r14]
    518 
    519 	shl	esi,16
    520 	shl	edi,16
    521 	shl	ebp,16
    522 
    523 	xor	r10d,esi
    524 	xor	r11d,edi
    525 	xor	r12d,ebp
    526 
    527 	movzx	esi,bl
    528 	movzx	edi,bh
    529 	movzx	ebp,ch
    530 	movzx	esi,BYTE[rsi*1+r14]
    531 	movzx	edi,BYTE[rdi*1+r14]
    532 	movzx	ebp,BYTE[rbp*1+r14]
    533 
    534 	shl	esi,16
    535 	shl	edi,24
    536 	shl	ebp,24
    537 
    538 	xor	r8d,esi
    539 	xor	r10d,edi
    540 	xor	r11d,ebp
    541 
    542 	movzx	esi,dh
    543 	movzx	edi,ah
    544 	mov	edx,DWORD[((16+12))+r15]
    545 	movzx	esi,BYTE[rsi*1+r14]
    546 	movzx	edi,BYTE[rdi*1+r14]
    547 	mov	eax,DWORD[((16+0))+r15]
    548 
    549 	shl	esi,24
    550 	shl	edi,24
    551 
    552 	xor	r12d,esi
    553 	xor	r8d,edi
    554 
    555 	mov	ebx,DWORD[((16+4))+r15]
    556 	mov	ecx,DWORD[((16+8))+r15]
    557 	lea	r14,[((-2048))+r14]
    558 	xor	eax,r10d
    559 	xor	ebx,r11d
    560 	xor	ecx,r12d
    561 	xor	edx,r8d
    562 DB	0xf3,0xc3
    563 
    564 
    565 ALIGN	16
    566 _x86_64_AES_decrypt_compact:
    567 	lea	r8,[128+r14]
    568 	mov	edi,DWORD[((0-128))+r8]
    569 	mov	ebp,DWORD[((32-128))+r8]
    570 	mov	r10d,DWORD[((64-128))+r8]
    571 	mov	r11d,DWORD[((96-128))+r8]
    572 	mov	edi,DWORD[((128-128))+r8]
    573 	mov	ebp,DWORD[((160-128))+r8]
    574 	mov	r10d,DWORD[((192-128))+r8]
    575 	mov	r11d,DWORD[((224-128))+r8]
    576 	jmp	NEAR $L$dec_loop_compact
    577 
    578 ALIGN	16
    579 $L$dec_loop_compact:
    580 	xor	eax,DWORD[r15]
    581 	xor	ebx,DWORD[4+r15]
    582 	xor	ecx,DWORD[8+r15]
    583 	xor	edx,DWORD[12+r15]
    584 	lea	r15,[16+r15]
    585 	movzx	r10d,al
    586 	movzx	r11d,bl
    587 	movzx	r12d,cl
    588 	movzx	r8d,dl
    589 	movzx	esi,dh
    590 	movzx	edi,ah
    591 	shr	edx,16
    592 	movzx	ebp,bh
    593 	movzx	r10d,BYTE[r10*1+r14]
    594 	movzx	r11d,BYTE[r11*1+r14]
    595 	movzx	r12d,BYTE[r12*1+r14]
    596 	movzx	r8d,BYTE[r8*1+r14]
    597 
    598 	movzx	r9d,BYTE[rsi*1+r14]
    599 	movzx	esi,ch
    600 	movzx	r13d,BYTE[rdi*1+r14]
    601 	movzx	ebp,BYTE[rbp*1+r14]
    602 	movzx	esi,BYTE[rsi*1+r14]
    603 
    604 	shr	ecx,16
    605 	shl	r13d,8
    606 	shl	r9d,8
    607 	movzx	edi,cl
    608 	shr	eax,16
    609 	xor	r10d,r9d
    610 	shr	ebx,16
    611 	movzx	r9d,dl
    612 
    613 	shl	ebp,8
    614 	xor	r11d,r13d
    615 	shl	esi,8
    616 	movzx	r13d,al
    617 	movzx	edi,BYTE[rdi*1+r14]
    618 	xor	r12d,ebp
    619 	movzx	ebp,bl
    620 
    621 	shl	edi,16
    622 	xor	r8d,esi
    623 	movzx	r9d,BYTE[r9*1+r14]
    624 	movzx	esi,bh
    625 	movzx	ebp,BYTE[rbp*1+r14]
    626 	xor	r10d,edi
    627 	movzx	r13d,BYTE[r13*1+r14]
    628 	movzx	edi,ch
    629 
    630 	shl	ebp,16
    631 	shl	r9d,16
    632 	shl	r13d,16
    633 	xor	r8d,ebp
    634 	movzx	ebp,dh
    635 	xor	r11d,r9d
    636 	shr	eax,8
    637 	xor	r12d,r13d
    638 
    639 	movzx	esi,BYTE[rsi*1+r14]
    640 	movzx	ebx,BYTE[rdi*1+r14]
    641 	movzx	ecx,BYTE[rbp*1+r14]
    642 	movzx	edx,BYTE[rax*1+r14]
    643 
    644 	mov	eax,r10d
    645 	shl	esi,24
    646 	shl	ebx,24
    647 	shl	ecx,24
    648 	xor	eax,esi
    649 	shl	edx,24
    650 	xor	ebx,r11d
    651 	xor	ecx,r12d
    652 	xor	edx,r8d
    653 	cmp	r15,QWORD[16+rsp]
    654 	je	NEAR $L$dec_compact_done
    655 
    656 	mov	rsi,QWORD[((256+0))+r14]
    657 	shl	rbx,32
    658 	shl	rdx,32
    659 	mov	rdi,QWORD[((256+8))+r14]
    660 	or	rax,rbx
    661 	or	rcx,rdx
    662 	mov	rbp,QWORD[((256+16))+r14]
    663 	mov	r9,rsi
    664 	mov	r12,rsi
    665 	and	r9,rax
    666 	and	r12,rcx
    667 	mov	rbx,r9
    668 	mov	rdx,r12
    669 	shr	r9,7
    670 	lea	r8,[rax*1+rax]
    671 	shr	r12,7
    672 	lea	r11,[rcx*1+rcx]
    673 	sub	rbx,r9
    674 	sub	rdx,r12
    675 	and	r8,rdi
    676 	and	r11,rdi
    677 	and	rbx,rbp
    678 	and	rdx,rbp
    679 	xor	r8,rbx
    680 	xor	r11,rdx
    681 	mov	r10,rsi
    682 	mov	r13,rsi
    683 
    684 	and	r10,r8
    685 	and	r13,r11
    686 	mov	rbx,r10
    687 	mov	rdx,r13
    688 	shr	r10,7
    689 	lea	r9,[r8*1+r8]
    690 	shr	r13,7
    691 	lea	r12,[r11*1+r11]
    692 	sub	rbx,r10
    693 	sub	rdx,r13
    694 	and	r9,rdi
    695 	and	r12,rdi
    696 	and	rbx,rbp
    697 	and	rdx,rbp
    698 	xor	r9,rbx
    699 	xor	r12,rdx
    700 	mov	r10,rsi
    701 	mov	r13,rsi
    702 
    703 	and	r10,r9
    704 	and	r13,r12
    705 	mov	rbx,r10
    706 	mov	rdx,r13
    707 	shr	r10,7
    708 	xor	r8,rax
    709 	shr	r13,7
    710 	xor	r11,rcx
    711 	sub	rbx,r10
    712 	sub	rdx,r13
    713 	lea	r10,[r9*1+r9]
    714 	lea	r13,[r12*1+r12]
    715 	xor	r9,rax
    716 	xor	r12,rcx
    717 	and	r10,rdi
    718 	and	r13,rdi
    719 	and	rbx,rbp
    720 	and	rdx,rbp
    721 	xor	r10,rbx
    722 	xor	r13,rdx
    723 
    724 	xor	rax,r10
    725 	xor	rcx,r13
    726 	xor	r8,r10
    727 	xor	r11,r13
    728 	mov	rbx,rax
    729 	mov	rdx,rcx
    730 	xor	r9,r10
    731 	shr	rbx,32
    732 	xor	r12,r13
    733 	shr	rdx,32
    734 	xor	r10,r8
    735 	rol	eax,8
    736 	xor	r13,r11
    737 	rol	ecx,8
    738 	xor	r10,r9
    739 	rol	ebx,8
    740 	xor	r13,r12
    741 
    742 	rol	edx,8
    743 	xor	eax,r10d
    744 	shr	r10,32
    745 	xor	ecx,r13d
    746 	shr	r13,32
    747 	xor	ebx,r10d
    748 	xor	edx,r13d
    749 
    750 	mov	r10,r8
    751 	rol	r8d,24
    752 	mov	r13,r11
    753 	rol	r11d,24
    754 	shr	r10,32
    755 	xor	eax,r8d
    756 	shr	r13,32
    757 	xor	ecx,r11d
    758 	rol	r10d,24
    759 	mov	r8,r9
    760 	rol	r13d,24
    761 	mov	r11,r12
    762 	shr	r8,32
    763 	xor	ebx,r10d
    764 	shr	r11,32
    765 	xor	edx,r13d
    766 
    767 	mov	rsi,QWORD[r14]
    768 	rol	r9d,16
    769 	mov	rdi,QWORD[64+r14]
    770 	rol	r12d,16
    771 	mov	rbp,QWORD[128+r14]
    772 	rol	r8d,16
    773 	mov	r10,QWORD[192+r14]
    774 	xor	eax,r9d
    775 	rol	r11d,16
    776 	xor	ecx,r12d
    777 	mov	r13,QWORD[256+r14]
    778 	xor	ebx,r8d
    779 	xor	edx,r11d
    780 	jmp	NEAR $L$dec_loop_compact
    781 ALIGN	16
    782 $L$dec_compact_done:
    783 	xor	eax,DWORD[r15]
    784 	xor	ebx,DWORD[4+r15]
    785 	xor	ecx,DWORD[8+r15]
    786 	xor	edx,DWORD[12+r15]
    787 DB	0xf3,0xc3
    788 
    789 ALIGN	16
    790 global	asm_AES_decrypt
    791 
    792 
    793 asm_AES_decrypt:
    794 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    795 	mov	QWORD[16+rsp],rsi
    796 	mov	rax,rsp
    797 $L$SEH_begin_asm_AES_decrypt:
    798 	mov	rdi,rcx
    799 	mov	rsi,rdx
    800 	mov	rdx,r8
    801 
    802 
    803 	push	rbx
    804 	push	rbp
    805 	push	r12
    806 	push	r13
    807 	push	r14
    808 	push	r15
    809 
    810 
    811 	mov	r10,rsp
    812 	lea	rcx,[((-63))+rdx]
    813 	and	rsp,-64
    814 	sub	rcx,rsp
    815 	neg	rcx
    816 	and	rcx,0x3c0
    817 	sub	rsp,rcx
    818 	sub	rsp,32
    819 
    820 	mov	QWORD[16+rsp],rsi
    821 	mov	QWORD[24+rsp],r10
    822 $L$dec_prologue:
    823 
    824 	mov	r15,rdx
    825 	mov	r13d,DWORD[240+r15]
    826 
    827 	mov	eax,DWORD[rdi]
    828 	mov	ebx,DWORD[4+rdi]
    829 	mov	ecx,DWORD[8+rdi]
    830 	mov	edx,DWORD[12+rdi]
    831 
    832 	shl	r13d,4
    833 	lea	rbp,[r13*1+r15]
    834 	mov	QWORD[rsp],r15
    835 	mov	QWORD[8+rsp],rbp
    836 
    837 
    838 	lea	r14,[(($L$AES_Td+2048))]
    839 	lea	rbp,[768+rsp]
    840 	sub	rbp,r14
    841 	and	rbp,0x300
    842 	lea	r14,[rbp*1+r14]
    843 	shr	rbp,3
    844 	add	r14,rbp
    845 
    846 	call	_x86_64_AES_decrypt_compact
    847 
    848 	mov	r9,QWORD[16+rsp]
    849 	mov	rsi,QWORD[24+rsp]
    850 	mov	DWORD[r9],eax
    851 	mov	DWORD[4+r9],ebx
    852 	mov	DWORD[8+r9],ecx
    853 	mov	DWORD[12+r9],edx
    854 
    855 	mov	r15,QWORD[rsi]
    856 	mov	r14,QWORD[8+rsi]
    857 	mov	r13,QWORD[16+rsi]
    858 	mov	r12,QWORD[24+rsi]
    859 	mov	rbp,QWORD[32+rsi]
    860 	mov	rbx,QWORD[40+rsi]
    861 	lea	rsp,[48+rsi]
    862 $L$dec_epilogue:
    863 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    864 	mov	rsi,QWORD[16+rsp]
    865 	DB	0F3h,0C3h		;repret
    866 $L$SEH_end_asm_AES_decrypt:
    867 ALIGN	16
    868 global	asm_AES_set_encrypt_key
    869 
    870 asm_AES_set_encrypt_key:
    871 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    872 	mov	QWORD[16+rsp],rsi
    873 	mov	rax,rsp
    874 $L$SEH_begin_asm_AES_set_encrypt_key:
    875 	mov	rdi,rcx
    876 	mov	rsi,rdx
    877 	mov	rdx,r8
    878 
    879 
    880 	push	rbx
    881 	push	rbp
    882 	push	r12
    883 	push	r13
    884 	push	r14
    885 	push	r15
    886 	sub	rsp,8
    887 $L$enc_key_prologue:
    888 
    889 	call	_x86_64_AES_set_encrypt_key
    890 
    891 	mov	rbp,QWORD[40+rsp]
    892 	mov	rbx,QWORD[48+rsp]
    893 	add	rsp,56
    894 $L$enc_key_epilogue:
    895 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    896 	mov	rsi,QWORD[16+rsp]
    897 	DB	0F3h,0C3h		;repret
    898 $L$SEH_end_asm_AES_set_encrypt_key:
    899 
    900 
    901 ALIGN	16
    902 _x86_64_AES_set_encrypt_key:
    903 	mov	ecx,esi
    904 	mov	rsi,rdi
    905 	mov	rdi,rdx
    906 
    907 	test	rsi,-1
    908 	jz	NEAR $L$badpointer
    909 	test	rdi,-1
    910 	jz	NEAR $L$badpointer
    911 
    912 	lea	rbp,[$L$AES_Te]
    913 	lea	rbp,[((2048+128))+rbp]
    914 
    915 
    916 	mov	eax,DWORD[((0-128))+rbp]
    917 	mov	ebx,DWORD[((32-128))+rbp]
    918 	mov	r8d,DWORD[((64-128))+rbp]
    919 	mov	edx,DWORD[((96-128))+rbp]
    920 	mov	eax,DWORD[((128-128))+rbp]
    921 	mov	ebx,DWORD[((160-128))+rbp]
    922 	mov	r8d,DWORD[((192-128))+rbp]
    923 	mov	edx,DWORD[((224-128))+rbp]
    924 
    925 	cmp	ecx,128
    926 	je	NEAR $L$10rounds
    927 	cmp	ecx,192
    928 	je	NEAR $L$12rounds
    929 	cmp	ecx,256
    930 	je	NEAR $L$14rounds
    931 	mov	rax,-2
    932 	jmp	NEAR $L$exit
    933 
    934 $L$10rounds:
    935 	mov	rax,QWORD[rsi]
    936 	mov	rdx,QWORD[8+rsi]
    937 	mov	QWORD[rdi],rax
    938 	mov	QWORD[8+rdi],rdx
    939 
    940 	shr	rdx,32
    941 	xor	ecx,ecx
    942 	jmp	NEAR $L$10shortcut
    943 ALIGN	4
    944 $L$10loop:
    945 	mov	eax,DWORD[rdi]
    946 	mov	edx,DWORD[12+rdi]
    947 $L$10shortcut:
    948 	movzx	esi,dl
    949 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
    950 	movzx	esi,dh
    951 	shl	ebx,24
    952 	xor	eax,ebx
    953 
    954 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
    955 	shr	edx,16
    956 	movzx	esi,dl
    957 	xor	eax,ebx
    958 
    959 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
    960 	movzx	esi,dh
    961 	shl	ebx,8
    962 	xor	eax,ebx
    963 
    964 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
    965 	shl	ebx,16
    966 	xor	eax,ebx
    967 
    968 	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
    969 	mov	DWORD[16+rdi],eax
    970 	xor	eax,DWORD[4+rdi]
    971 	mov	DWORD[20+rdi],eax
    972 	xor	eax,DWORD[8+rdi]
    973 	mov	DWORD[24+rdi],eax
    974 	xor	eax,DWORD[12+rdi]
    975 	mov	DWORD[28+rdi],eax
    976 	add	ecx,1
    977 	lea	rdi,[16+rdi]
    978 	cmp	ecx,10
    979 	jl	NEAR $L$10loop
    980 
    981 	mov	DWORD[80+rdi],10
    982 	xor	rax,rax
    983 	jmp	NEAR $L$exit
    984 
    985 $L$12rounds:
    986 	mov	rax,QWORD[rsi]
    987 	mov	rbx,QWORD[8+rsi]
    988 	mov	rdx,QWORD[16+rsi]
    989 	mov	QWORD[rdi],rax
    990 	mov	QWORD[8+rdi],rbx
    991 	mov	QWORD[16+rdi],rdx
    992 
    993 	shr	rdx,32
    994 	xor	ecx,ecx
    995 	jmp	NEAR $L$12shortcut
    996 ALIGN	4
    997 $L$12loop:
    998 	mov	eax,DWORD[rdi]
    999 	mov	edx,DWORD[20+rdi]
   1000 $L$12shortcut:
   1001 	movzx	esi,dl
   1002 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1003 	movzx	esi,dh
   1004 	shl	ebx,24
   1005 	xor	eax,ebx
   1006 
   1007 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1008 	shr	edx,16
   1009 	movzx	esi,dl
   1010 	xor	eax,ebx
   1011 
   1012 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1013 	movzx	esi,dh
   1014 	shl	ebx,8
   1015 	xor	eax,ebx
   1016 
   1017 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1018 	shl	ebx,16
   1019 	xor	eax,ebx
   1020 
   1021 	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
   1022 	mov	DWORD[24+rdi],eax
   1023 	xor	eax,DWORD[4+rdi]
   1024 	mov	DWORD[28+rdi],eax
   1025 	xor	eax,DWORD[8+rdi]
   1026 	mov	DWORD[32+rdi],eax
   1027 	xor	eax,DWORD[12+rdi]
   1028 	mov	DWORD[36+rdi],eax
   1029 
   1030 	cmp	ecx,7
   1031 	je	NEAR $L$12break
   1032 	add	ecx,1
   1033 
   1034 	xor	eax,DWORD[16+rdi]
   1035 	mov	DWORD[40+rdi],eax
   1036 	xor	eax,DWORD[20+rdi]
   1037 	mov	DWORD[44+rdi],eax
   1038 
   1039 	lea	rdi,[24+rdi]
   1040 	jmp	NEAR $L$12loop
   1041 $L$12break:
   1042 	mov	DWORD[72+rdi],12
   1043 	xor	rax,rax
   1044 	jmp	NEAR $L$exit
   1045 
   1046 $L$14rounds:
   1047 	mov	rax,QWORD[rsi]
   1048 	mov	rbx,QWORD[8+rsi]
   1049 	mov	rcx,QWORD[16+rsi]
   1050 	mov	rdx,QWORD[24+rsi]
   1051 	mov	QWORD[rdi],rax
   1052 	mov	QWORD[8+rdi],rbx
   1053 	mov	QWORD[16+rdi],rcx
   1054 	mov	QWORD[24+rdi],rdx
   1055 
   1056 	shr	rdx,32
   1057 	xor	ecx,ecx
   1058 	jmp	NEAR $L$14shortcut
   1059 ALIGN	4
   1060 $L$14loop:
   1061 	mov	eax,DWORD[rdi]
   1062 	mov	edx,DWORD[28+rdi]
   1063 $L$14shortcut:
   1064 	movzx	esi,dl
   1065 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1066 	movzx	esi,dh
   1067 	shl	ebx,24
   1068 	xor	eax,ebx
   1069 
   1070 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1071 	shr	edx,16
   1072 	movzx	esi,dl
   1073 	xor	eax,ebx
   1074 
   1075 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1076 	movzx	esi,dh
   1077 	shl	ebx,8
   1078 	xor	eax,ebx
   1079 
   1080 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1081 	shl	ebx,16
   1082 	xor	eax,ebx
   1083 
   1084 	xor	eax,DWORD[((1024-128))+rcx*4+rbp]
   1085 	mov	DWORD[32+rdi],eax
   1086 	xor	eax,DWORD[4+rdi]
   1087 	mov	DWORD[36+rdi],eax
   1088 	xor	eax,DWORD[8+rdi]
   1089 	mov	DWORD[40+rdi],eax
   1090 	xor	eax,DWORD[12+rdi]
   1091 	mov	DWORD[44+rdi],eax
   1092 
   1093 	cmp	ecx,6
   1094 	je	NEAR $L$14break
   1095 	add	ecx,1
   1096 
   1097 	mov	edx,eax
   1098 	mov	eax,DWORD[16+rdi]
   1099 	movzx	esi,dl
   1100 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1101 	movzx	esi,dh
   1102 	xor	eax,ebx
   1103 
   1104 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1105 	shr	edx,16
   1106 	shl	ebx,8
   1107 	movzx	esi,dl
   1108 	xor	eax,ebx
   1109 
   1110 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1111 	movzx	esi,dh
   1112 	shl	ebx,16
   1113 	xor	eax,ebx
   1114 
   1115 	movzx	ebx,BYTE[((-128))+rsi*1+rbp]
   1116 	shl	ebx,24
   1117 	xor	eax,ebx
   1118 
   1119 	mov	DWORD[48+rdi],eax
   1120 	xor	eax,DWORD[20+rdi]
   1121 	mov	DWORD[52+rdi],eax
   1122 	xor	eax,DWORD[24+rdi]
   1123 	mov	DWORD[56+rdi],eax
   1124 	xor	eax,DWORD[28+rdi]
   1125 	mov	DWORD[60+rdi],eax
   1126 
   1127 	lea	rdi,[32+rdi]
   1128 	jmp	NEAR $L$14loop
   1129 $L$14break:
   1130 	mov	DWORD[48+rdi],14
   1131 	xor	rax,rax
   1132 	jmp	NEAR $L$exit
   1133 
   1134 $L$badpointer:
   1135 	mov	rax,-1
   1136 $L$exit:
   1137 DB	0xf3,0xc3
   1138 
   1139 ALIGN	16
   1140 global	asm_AES_set_decrypt_key
   1141 
   1142 asm_AES_set_decrypt_key:
   1143 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   1144 	mov	QWORD[16+rsp],rsi
   1145 	mov	rax,rsp
   1146 $L$SEH_begin_asm_AES_set_decrypt_key:
   1147 	mov	rdi,rcx
   1148 	mov	rsi,rdx
   1149 	mov	rdx,r8
   1150 
   1151 
   1152 	push	rbx
   1153 	push	rbp
   1154 	push	r12
   1155 	push	r13
   1156 	push	r14
   1157 	push	r15
   1158 	push	rdx
   1159 $L$dec_key_prologue:
   1160 
   1161 	call	_x86_64_AES_set_encrypt_key
   1162 	mov	r8,QWORD[rsp]
   1163 	cmp	eax,0
   1164 	jne	NEAR $L$abort
   1165 
   1166 	mov	r14d,DWORD[240+r8]
   1167 	xor	rdi,rdi
   1168 	lea	rcx,[r14*4+rdi]
   1169 	mov	rsi,r8
   1170 	lea	rdi,[rcx*4+r8]
   1171 ALIGN	4
   1172 $L$invert:
   1173 	mov	rax,QWORD[rsi]
   1174 	mov	rbx,QWORD[8+rsi]
   1175 	mov	rcx,QWORD[rdi]
   1176 	mov	rdx,QWORD[8+rdi]
   1177 	mov	QWORD[rdi],rax
   1178 	mov	QWORD[8+rdi],rbx
   1179 	mov	QWORD[rsi],rcx
   1180 	mov	QWORD[8+rsi],rdx
   1181 	lea	rsi,[16+rsi]
   1182 	lea	rdi,[((-16))+rdi]
   1183 	cmp	rdi,rsi
   1184 	jne	NEAR $L$invert
   1185 
   1186 	lea	rax,[(($L$AES_Te+2048+1024))]
   1187 
   1188 	mov	rsi,QWORD[40+rax]
   1189 	mov	rdi,QWORD[48+rax]
   1190 	mov	rbp,QWORD[56+rax]
   1191 
   1192 	mov	r15,r8
   1193 	sub	r14d,1
   1194 ALIGN	4
   1195 $L$permute:
   1196 	lea	r15,[16+r15]
   1197 	mov	rax,QWORD[r15]
   1198 	mov	rcx,QWORD[8+r15]
   1199 	mov	r9,rsi
   1200 	mov	r12,rsi
   1201 	and	r9,rax
   1202 	and	r12,rcx
   1203 	mov	rbx,r9
   1204 	mov	rdx,r12
   1205 	shr	r9,7
   1206 	lea	r8,[rax*1+rax]
   1207 	shr	r12,7
   1208 	lea	r11,[rcx*1+rcx]
   1209 	sub	rbx,r9
   1210 	sub	rdx,r12
   1211 	and	r8,rdi
   1212 	and	r11,rdi
   1213 	and	rbx,rbp
   1214 	and	rdx,rbp
   1215 	xor	r8,rbx
   1216 	xor	r11,rdx
   1217 	mov	r10,rsi
   1218 	mov	r13,rsi
   1219 
   1220 	and	r10,r8
   1221 	and	r13,r11
   1222 	mov	rbx,r10
   1223 	mov	rdx,r13
   1224 	shr	r10,7
   1225 	lea	r9,[r8*1+r8]
   1226 	shr	r13,7
   1227 	lea	r12,[r11*1+r11]
   1228 	sub	rbx,r10
   1229 	sub	rdx,r13
   1230 	and	r9,rdi
   1231 	and	r12,rdi
   1232 	and	rbx,rbp
   1233 	and	rdx,rbp
   1234 	xor	r9,rbx
   1235 	xor	r12,rdx
   1236 	mov	r10,rsi
   1237 	mov	r13,rsi
   1238 
   1239 	and	r10,r9
   1240 	and	r13,r12
   1241 	mov	rbx,r10
   1242 	mov	rdx,r13
   1243 	shr	r10,7
   1244 	xor	r8,rax
   1245 	shr	r13,7
   1246 	xor	r11,rcx
   1247 	sub	rbx,r10
   1248 	sub	rdx,r13
   1249 	lea	r10,[r9*1+r9]
   1250 	lea	r13,[r12*1+r12]
   1251 	xor	r9,rax
   1252 	xor	r12,rcx
   1253 	and	r10,rdi
   1254 	and	r13,rdi
   1255 	and	rbx,rbp
   1256 	and	rdx,rbp
   1257 	xor	r10,rbx
   1258 	xor	r13,rdx
   1259 
   1260 	xor	rax,r10
   1261 	xor	rcx,r13
   1262 	xor	r8,r10
   1263 	xor	r11,r13
   1264 	mov	rbx,rax
   1265 	mov	rdx,rcx
   1266 	xor	r9,r10
   1267 	shr	rbx,32
   1268 	xor	r12,r13
   1269 	shr	rdx,32
   1270 	xor	r10,r8
   1271 	rol	eax,8
   1272 	xor	r13,r11
   1273 	rol	ecx,8
   1274 	xor	r10,r9
   1275 	rol	ebx,8
   1276 	xor	r13,r12
   1277 
   1278 	rol	edx,8
   1279 	xor	eax,r10d
   1280 	shr	r10,32
   1281 	xor	ecx,r13d
   1282 	shr	r13,32
   1283 	xor	ebx,r10d
   1284 	xor	edx,r13d
   1285 
   1286 	mov	r10,r8
   1287 	rol	r8d,24
   1288 	mov	r13,r11
   1289 	rol	r11d,24
   1290 	shr	r10,32
   1291 	xor	eax,r8d
   1292 	shr	r13,32
   1293 	xor	ecx,r11d
   1294 	rol	r10d,24
   1295 	mov	r8,r9
   1296 	rol	r13d,24
   1297 	mov	r11,r12
   1298 	shr	r8,32
   1299 	xor	ebx,r10d
   1300 	shr	r11,32
   1301 	xor	edx,r13d
   1302 
   1303 
   1304 	rol	r9d,16
   1305 
   1306 	rol	r12d,16
   1307 
   1308 	rol	r8d,16
   1309 
   1310 	xor	eax,r9d
   1311 	rol	r11d,16
   1312 	xor	ecx,r12d
   1313 
   1314 	xor	ebx,r8d
   1315 	xor	edx,r11d
   1316 	mov	DWORD[r15],eax
   1317 	mov	DWORD[4+r15],ebx
   1318 	mov	DWORD[8+r15],ecx
   1319 	mov	DWORD[12+r15],edx
   1320 	sub	r14d,1
   1321 	jnz	NEAR $L$permute
   1322 
   1323 	xor	rax,rax
   1324 $L$abort:
   1325 	mov	r15,QWORD[8+rsp]
   1326 	mov	r14,QWORD[16+rsp]
   1327 	mov	r13,QWORD[24+rsp]
   1328 	mov	r12,QWORD[32+rsp]
   1329 	mov	rbp,QWORD[40+rsp]
   1330 	mov	rbx,QWORD[48+rsp]
   1331 	add	rsp,56
   1332 $L$dec_key_epilogue:
   1333 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   1334 	mov	rsi,QWORD[16+rsp]
   1335 	DB	0F3h,0C3h		;repret
   1336 $L$SEH_end_asm_AES_set_decrypt_key:
   1337 ALIGN	16
   1338 global	asm_AES_cbc_encrypt
   1339 
   1340 EXTERN	OPENSSL_ia32cap_P
   1341 
   1342 asm_AES_cbc_encrypt:
   1343 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   1344 	mov	QWORD[16+rsp],rsi
   1345 	mov	rax,rsp
   1346 $L$SEH_begin_asm_AES_cbc_encrypt:
   1347 	mov	rdi,rcx
   1348 	mov	rsi,rdx
   1349 	mov	rdx,r8
   1350 	mov	rcx,r9
   1351 	mov	r8,QWORD[40+rsp]
   1352 	mov	r9,QWORD[48+rsp]
   1353 
   1354 
   1355 	cmp	rdx,0
   1356 	je	NEAR $L$cbc_epilogue
   1357 	pushfq
   1358 	push	rbx
   1359 	push	rbp
   1360 	push	r12
   1361 	push	r13
   1362 	push	r14
   1363 	push	r15
   1364 $L$cbc_prologue:
   1365 
   1366 	cld
   1367 	mov	r9d,r9d
   1368 
   1369 	lea	r14,[$L$AES_Te]
   1370 	cmp	r9,0
   1371 	jne	NEAR $L$cbc_picked_te
   1372 	lea	r14,[$L$AES_Td]
   1373 $L$cbc_picked_te:
   1374 
   1375 	mov	r10d,DWORD[OPENSSL_ia32cap_P]
   1376 	cmp	rdx,512
   1377 	jb	NEAR $L$cbc_slow_prologue
   1378 	test	rdx,15
   1379 	jnz	NEAR $L$cbc_slow_prologue
   1380 	bt	r10d,28
   1381 	jc	NEAR $L$cbc_slow_prologue
   1382 
   1383 
   1384 	lea	r15,[((-88-248))+rsp]
   1385 	and	r15,-64
   1386 
   1387 
   1388 	mov	r10,r14
   1389 	lea	r11,[2304+r14]
   1390 	mov	r12,r15
   1391 	and	r10,0xFFF
   1392 	and	r11,0xFFF
   1393 	and	r12,0xFFF
   1394 
   1395 	cmp	r12,r11
   1396 	jb	NEAR $L$cbc_te_break_out
   1397 	sub	r12,r11
   1398 	sub	r15,r12
   1399 	jmp	NEAR $L$cbc_te_ok
   1400 $L$cbc_te_break_out:
   1401 	sub	r12,r10
   1402 	and	r12,0xFFF
   1403 	add	r12,320
   1404 	sub	r15,r12
   1405 ALIGN	4
   1406 $L$cbc_te_ok:
   1407 
   1408 	xchg	r15,rsp
   1409 
   1410 	mov	QWORD[16+rsp],r15
   1411 $L$cbc_fast_body:
   1412 	mov	QWORD[24+rsp],rdi
   1413 	mov	QWORD[32+rsp],rsi
   1414 	mov	QWORD[40+rsp],rdx
   1415 	mov	QWORD[48+rsp],rcx
   1416 	mov	QWORD[56+rsp],r8
   1417 	mov	DWORD[((80+240))+rsp],0
   1418 	mov	rbp,r8
   1419 	mov	rbx,r9
   1420 	mov	r9,rsi
   1421 	mov	r8,rdi
   1422 	mov	r15,rcx
   1423 
   1424 	mov	eax,DWORD[240+r15]
   1425 
   1426 	mov	r10,r15
   1427 	sub	r10,r14
   1428 	and	r10,0xfff
   1429 	cmp	r10,2304
   1430 	jb	NEAR $L$cbc_do_ecopy
   1431 	cmp	r10,4096-248
   1432 	jb	NEAR $L$cbc_skip_ecopy
   1433 ALIGN	4
   1434 $L$cbc_do_ecopy:
   1435 	mov	rsi,r15
   1436 	lea	rdi,[80+rsp]
   1437 	lea	r15,[80+rsp]
   1438 	mov	ecx,240/8
   1439 	DD	0x90A548F3
   1440 	mov	DWORD[rdi],eax
   1441 $L$cbc_skip_ecopy:
   1442 	mov	QWORD[rsp],r15
   1443 
   1444 	mov	ecx,18
   1445 ALIGN	4
   1446 $L$cbc_prefetch_te:
   1447 	mov	r10,QWORD[r14]
   1448 	mov	r11,QWORD[32+r14]
   1449 	mov	r12,QWORD[64+r14]
   1450 	mov	r13,QWORD[96+r14]
   1451 	lea	r14,[128+r14]
   1452 	sub	ecx,1
   1453 	jnz	NEAR $L$cbc_prefetch_te
   1454 	lea	r14,[((-2304))+r14]
   1455 
   1456 	cmp	rbx,0
   1457 	je	NEAR $L$FAST_DECRYPT
   1458 
   1459 
   1460 	mov	eax,DWORD[rbp]
   1461 	mov	ebx,DWORD[4+rbp]
   1462 	mov	ecx,DWORD[8+rbp]
   1463 	mov	edx,DWORD[12+rbp]
   1464 
   1465 ALIGN	4
   1466 $L$cbc_fast_enc_loop:
   1467 	xor	eax,DWORD[r8]
   1468 	xor	ebx,DWORD[4+r8]
   1469 	xor	ecx,DWORD[8+r8]
   1470 	xor	edx,DWORD[12+r8]
   1471 	mov	r15,QWORD[rsp]
   1472 	mov	QWORD[24+rsp],r8
   1473 
   1474 	call	_x86_64_AES_encrypt
   1475 
   1476 	mov	r8,QWORD[24+rsp]
   1477 	mov	r10,QWORD[40+rsp]
   1478 	mov	DWORD[r9],eax
   1479 	mov	DWORD[4+r9],ebx
   1480 	mov	DWORD[8+r9],ecx
   1481 	mov	DWORD[12+r9],edx
   1482 
   1483 	lea	r8,[16+r8]
   1484 	lea	r9,[16+r9]
   1485 	sub	r10,16
   1486 	test	r10,-16
   1487 	mov	QWORD[40+rsp],r10
   1488 	jnz	NEAR $L$cbc_fast_enc_loop
   1489 	mov	rbp,QWORD[56+rsp]
   1490 	mov	DWORD[rbp],eax
   1491 	mov	DWORD[4+rbp],ebx
   1492 	mov	DWORD[8+rbp],ecx
   1493 	mov	DWORD[12+rbp],edx
   1494 
   1495 	jmp	NEAR $L$cbc_fast_cleanup
   1496 
   1497 
   1498 ALIGN	16
   1499 $L$FAST_DECRYPT:
   1500 	cmp	r9,r8
   1501 	je	NEAR $L$cbc_fast_dec_in_place
   1502 
   1503 	mov	QWORD[64+rsp],rbp
   1504 ALIGN	4
   1505 $L$cbc_fast_dec_loop:
   1506 	mov	eax,DWORD[r8]
   1507 	mov	ebx,DWORD[4+r8]
   1508 	mov	ecx,DWORD[8+r8]
   1509 	mov	edx,DWORD[12+r8]
   1510 	mov	r15,QWORD[rsp]
   1511 	mov	QWORD[24+rsp],r8
   1512 
   1513 	call	_x86_64_AES_decrypt
   1514 
   1515 	mov	rbp,QWORD[64+rsp]
   1516 	mov	r8,QWORD[24+rsp]
   1517 	mov	r10,QWORD[40+rsp]
   1518 	xor	eax,DWORD[rbp]
   1519 	xor	ebx,DWORD[4+rbp]
   1520 	xor	ecx,DWORD[8+rbp]
   1521 	xor	edx,DWORD[12+rbp]
   1522 	mov	rbp,r8
   1523 
   1524 	sub	r10,16
   1525 	mov	QWORD[40+rsp],r10
   1526 	mov	QWORD[64+rsp],rbp
   1527 
   1528 	mov	DWORD[r9],eax
   1529 	mov	DWORD[4+r9],ebx
   1530 	mov	DWORD[8+r9],ecx
   1531 	mov	DWORD[12+r9],edx
   1532 
   1533 	lea	r8,[16+r8]
   1534 	lea	r9,[16+r9]
   1535 	jnz	NEAR $L$cbc_fast_dec_loop
   1536 	mov	r12,QWORD[56+rsp]
   1537 	mov	r10,QWORD[rbp]
   1538 	mov	r11,QWORD[8+rbp]
   1539 	mov	QWORD[r12],r10
   1540 	mov	QWORD[8+r12],r11
   1541 	jmp	NEAR $L$cbc_fast_cleanup
   1542 
   1543 ALIGN	16
   1544 $L$cbc_fast_dec_in_place:
   1545 	mov	r10,QWORD[rbp]
   1546 	mov	r11,QWORD[8+rbp]
   1547 	mov	QWORD[((0+64))+rsp],r10
   1548 	mov	QWORD[((8+64))+rsp],r11
   1549 ALIGN	4
   1550 $L$cbc_fast_dec_in_place_loop:
   1551 	mov	eax,DWORD[r8]
   1552 	mov	ebx,DWORD[4+r8]
   1553 	mov	ecx,DWORD[8+r8]
   1554 	mov	edx,DWORD[12+r8]
   1555 	mov	r15,QWORD[rsp]
   1556 	mov	QWORD[24+rsp],r8
   1557 
   1558 	call	_x86_64_AES_decrypt
   1559 
   1560 	mov	r8,QWORD[24+rsp]
   1561 	mov	r10,QWORD[40+rsp]
   1562 	xor	eax,DWORD[((0+64))+rsp]
   1563 	xor	ebx,DWORD[((4+64))+rsp]
   1564 	xor	ecx,DWORD[((8+64))+rsp]
   1565 	xor	edx,DWORD[((12+64))+rsp]
   1566 
   1567 	mov	r11,QWORD[r8]
   1568 	mov	r12,QWORD[8+r8]
   1569 	sub	r10,16
   1570 	jz	NEAR $L$cbc_fast_dec_in_place_done
   1571 
   1572 	mov	QWORD[((0+64))+rsp],r11
   1573 	mov	QWORD[((8+64))+rsp],r12
   1574 
   1575 	mov	DWORD[r9],eax
   1576 	mov	DWORD[4+r9],ebx
   1577 	mov	DWORD[8+r9],ecx
   1578 	mov	DWORD[12+r9],edx
   1579 
   1580 	lea	r8,[16+r8]
   1581 	lea	r9,[16+r9]
   1582 	mov	QWORD[40+rsp],r10
   1583 	jmp	NEAR $L$cbc_fast_dec_in_place_loop
   1584 $L$cbc_fast_dec_in_place_done:
   1585 	mov	rdi,QWORD[56+rsp]
   1586 	mov	QWORD[rdi],r11
   1587 	mov	QWORD[8+rdi],r12
   1588 
   1589 	mov	DWORD[r9],eax
   1590 	mov	DWORD[4+r9],ebx
   1591 	mov	DWORD[8+r9],ecx
   1592 	mov	DWORD[12+r9],edx
   1593 
   1594 ALIGN	4
   1595 $L$cbc_fast_cleanup:
   1596 	cmp	DWORD[((80+240))+rsp],0
   1597 	lea	rdi,[80+rsp]
   1598 	je	NEAR $L$cbc_exit
   1599 	mov	ecx,240/8
   1600 	xor	rax,rax
   1601 	DD	0x90AB48F3
   1602 
   1603 	jmp	NEAR $L$cbc_exit
   1604 
   1605 
   1606 ALIGN	16
   1607 $L$cbc_slow_prologue:
   1608 
   1609 	lea	rbp,[((-88))+rsp]
   1610 	and	rbp,-64
   1611 
   1612 	lea	r10,[((-88-63))+rcx]
   1613 	sub	r10,rbp
   1614 	neg	r10
   1615 	and	r10,0x3c0
   1616 	sub	rbp,r10
   1617 
   1618 	xchg	rbp,rsp
   1619 
   1620 	mov	QWORD[16+rsp],rbp
   1621 $L$cbc_slow_body:
   1622 
   1623 
   1624 
   1625 
   1626 	mov	QWORD[56+rsp],r8
   1627 	mov	rbp,r8
   1628 	mov	rbx,r9
   1629 	mov	r9,rsi
   1630 	mov	r8,rdi
   1631 	mov	r15,rcx
   1632 	mov	r10,rdx
   1633 
   1634 	mov	eax,DWORD[240+r15]
   1635 	mov	QWORD[rsp],r15
   1636 	shl	eax,4
   1637 	lea	rax,[rax*1+r15]
   1638 	mov	QWORD[8+rsp],rax
   1639 
   1640 
   1641 	lea	r14,[2048+r14]
   1642 	lea	rax,[((768-8))+rsp]
   1643 	sub	rax,r14
   1644 	and	rax,0x300
   1645 	lea	r14,[rax*1+r14]
   1646 
   1647 	cmp	rbx,0
   1648 	je	NEAR $L$SLOW_DECRYPT
   1649 
   1650 
   1651 	test	r10,-16
   1652 	mov	eax,DWORD[rbp]
   1653 	mov	ebx,DWORD[4+rbp]
   1654 	mov	ecx,DWORD[8+rbp]
   1655 	mov	edx,DWORD[12+rbp]
   1656 	jz	NEAR $L$cbc_slow_enc_tail
   1657 
   1658 ALIGN	4
   1659 $L$cbc_slow_enc_loop:
   1660 	xor	eax,DWORD[r8]
   1661 	xor	ebx,DWORD[4+r8]
   1662 	xor	ecx,DWORD[8+r8]
   1663 	xor	edx,DWORD[12+r8]
   1664 	mov	r15,QWORD[rsp]
   1665 	mov	QWORD[24+rsp],r8
   1666 	mov	QWORD[32+rsp],r9
   1667 	mov	QWORD[40+rsp],r10
   1668 
   1669 	call	_x86_64_AES_encrypt_compact
   1670 
   1671 	mov	r8,QWORD[24+rsp]
   1672 	mov	r9,QWORD[32+rsp]
   1673 	mov	r10,QWORD[40+rsp]
   1674 	mov	DWORD[r9],eax
   1675 	mov	DWORD[4+r9],ebx
   1676 	mov	DWORD[8+r9],ecx
   1677 	mov	DWORD[12+r9],edx
   1678 
   1679 	lea	r8,[16+r8]
   1680 	lea	r9,[16+r9]
   1681 	sub	r10,16
   1682 	test	r10,-16
   1683 	jnz	NEAR $L$cbc_slow_enc_loop
   1684 	test	r10,15
   1685 	jnz	NEAR $L$cbc_slow_enc_tail
   1686 	mov	rbp,QWORD[56+rsp]
   1687 	mov	DWORD[rbp],eax
   1688 	mov	DWORD[4+rbp],ebx
   1689 	mov	DWORD[8+rbp],ecx
   1690 	mov	DWORD[12+rbp],edx
   1691 
   1692 	jmp	NEAR $L$cbc_exit
   1693 
   1694 ALIGN	4
   1695 $L$cbc_slow_enc_tail:
   1696 	mov	r11,rax
   1697 	mov	r12,rcx
   1698 	mov	rcx,r10
   1699 	mov	rsi,r8
   1700 	mov	rdi,r9
   1701 	DD	0x9066A4F3
   1702 	mov	rcx,16
   1703 	sub	rcx,r10
   1704 	xor	rax,rax
   1705 	DD	0x9066AAF3
   1706 	mov	r8,r9
   1707 	mov	r10,16
   1708 	mov	rax,r11
   1709 	mov	rcx,r12
   1710 	jmp	NEAR $L$cbc_slow_enc_loop
   1711 
   1712 ALIGN	16
   1713 $L$SLOW_DECRYPT:
   1714 	shr	rax,3
   1715 	add	r14,rax
   1716 
   1717 	mov	r11,QWORD[rbp]
   1718 	mov	r12,QWORD[8+rbp]
   1719 	mov	QWORD[((0+64))+rsp],r11
   1720 	mov	QWORD[((8+64))+rsp],r12
   1721 
   1722 ALIGN	4
   1723 $L$cbc_slow_dec_loop:
   1724 	mov	eax,DWORD[r8]
   1725 	mov	ebx,DWORD[4+r8]
   1726 	mov	ecx,DWORD[8+r8]
   1727 	mov	edx,DWORD[12+r8]
   1728 	mov	r15,QWORD[rsp]
   1729 	mov	QWORD[24+rsp],r8
   1730 	mov	QWORD[32+rsp],r9
   1731 	mov	QWORD[40+rsp],r10
   1732 
   1733 	call	_x86_64_AES_decrypt_compact
   1734 
   1735 	mov	r8,QWORD[24+rsp]
   1736 	mov	r9,QWORD[32+rsp]
   1737 	mov	r10,QWORD[40+rsp]
   1738 	xor	eax,DWORD[((0+64))+rsp]
   1739 	xor	ebx,DWORD[((4+64))+rsp]
   1740 	xor	ecx,DWORD[((8+64))+rsp]
   1741 	xor	edx,DWORD[((12+64))+rsp]
   1742 
   1743 	mov	r11,QWORD[r8]
   1744 	mov	r12,QWORD[8+r8]
   1745 	sub	r10,16
   1746 	jc	NEAR $L$cbc_slow_dec_partial
   1747 	jz	NEAR $L$cbc_slow_dec_done
   1748 
   1749 	mov	QWORD[((0+64))+rsp],r11
   1750 	mov	QWORD[((8+64))+rsp],r12
   1751 
   1752 	mov	DWORD[r9],eax
   1753 	mov	DWORD[4+r9],ebx
   1754 	mov	DWORD[8+r9],ecx
   1755 	mov	DWORD[12+r9],edx
   1756 
   1757 	lea	r8,[16+r8]
   1758 	lea	r9,[16+r9]
   1759 	jmp	NEAR $L$cbc_slow_dec_loop
   1760 $L$cbc_slow_dec_done:
   1761 	mov	rdi,QWORD[56+rsp]
   1762 	mov	QWORD[rdi],r11
   1763 	mov	QWORD[8+rdi],r12
   1764 
   1765 	mov	DWORD[r9],eax
   1766 	mov	DWORD[4+r9],ebx
   1767 	mov	DWORD[8+r9],ecx
   1768 	mov	DWORD[12+r9],edx
   1769 
   1770 	jmp	NEAR $L$cbc_exit
   1771 
   1772 ALIGN	4
   1773 $L$cbc_slow_dec_partial:
   1774 	mov	rdi,QWORD[56+rsp]
   1775 	mov	QWORD[rdi],r11
   1776 	mov	QWORD[8+rdi],r12
   1777 
   1778 	mov	DWORD[((0+64))+rsp],eax
   1779 	mov	DWORD[((4+64))+rsp],ebx
   1780 	mov	DWORD[((8+64))+rsp],ecx
   1781 	mov	DWORD[((12+64))+rsp],edx
   1782 
   1783 	mov	rdi,r9
   1784 	lea	rsi,[64+rsp]
   1785 	lea	rcx,[16+r10]
   1786 	DD	0x9066A4F3
   1787 	jmp	NEAR $L$cbc_exit
   1788 
   1789 ALIGN	16
   1790 $L$cbc_exit:
   1791 	mov	rsi,QWORD[16+rsp]
   1792 	mov	r15,QWORD[rsi]
   1793 	mov	r14,QWORD[8+rsi]
   1794 	mov	r13,QWORD[16+rsi]
   1795 	mov	r12,QWORD[24+rsi]
   1796 	mov	rbp,QWORD[32+rsi]
   1797 	mov	rbx,QWORD[40+rsi]
   1798 	lea	rsp,[48+rsi]
   1799 $L$cbc_popfq:
   1800 	popfq
   1801 $L$cbc_epilogue:
   1802 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   1803 	mov	rsi,QWORD[16+rsp]
   1804 	DB	0F3h,0C3h		;repret
   1805 $L$SEH_end_asm_AES_cbc_encrypt:
   1806 ALIGN	64
   1807 $L$AES_Te:
   1808 	DD	0xa56363c6,0xa56363c6
   1809 	DD	0x847c7cf8,0x847c7cf8
   1810 	DD	0x997777ee,0x997777ee
   1811 	DD	0x8d7b7bf6,0x8d7b7bf6
   1812 	DD	0x0df2f2ff,0x0df2f2ff
   1813 	DD	0xbd6b6bd6,0xbd6b6bd6
   1814 	DD	0xb16f6fde,0xb16f6fde
   1815 	DD	0x54c5c591,0x54c5c591
   1816 	DD	0x50303060,0x50303060
   1817 	DD	0x03010102,0x03010102
   1818 	DD	0xa96767ce,0xa96767ce
   1819 	DD	0x7d2b2b56,0x7d2b2b56
   1820 	DD	0x19fefee7,0x19fefee7
   1821 	DD	0x62d7d7b5,0x62d7d7b5
   1822 	DD	0xe6abab4d,0xe6abab4d
   1823 	DD	0x9a7676ec,0x9a7676ec
   1824 	DD	0x45caca8f,0x45caca8f
   1825 	DD	0x9d82821f,0x9d82821f
   1826 	DD	0x40c9c989,0x40c9c989
   1827 	DD	0x877d7dfa,0x877d7dfa
   1828 	DD	0x15fafaef,0x15fafaef
   1829 	DD	0xeb5959b2,0xeb5959b2
   1830 	DD	0xc947478e,0xc947478e
   1831 	DD	0x0bf0f0fb,0x0bf0f0fb
   1832 	DD	0xecadad41,0xecadad41
   1833 	DD	0x67d4d4b3,0x67d4d4b3
   1834 	DD	0xfda2a25f,0xfda2a25f
   1835 	DD	0xeaafaf45,0xeaafaf45
   1836 	DD	0xbf9c9c23,0xbf9c9c23
   1837 	DD	0xf7a4a453,0xf7a4a453
   1838 	DD	0x967272e4,0x967272e4
   1839 	DD	0x5bc0c09b,0x5bc0c09b
   1840 	DD	0xc2b7b775,0xc2b7b775
   1841 	DD	0x1cfdfde1,0x1cfdfde1
   1842 	DD	0xae93933d,0xae93933d
   1843 	DD	0x6a26264c,0x6a26264c
   1844 	DD	0x5a36366c,0x5a36366c
   1845 	DD	0x413f3f7e,0x413f3f7e
   1846 	DD	0x02f7f7f5,0x02f7f7f5
   1847 	DD	0x4fcccc83,0x4fcccc83
   1848 	DD	0x5c343468,0x5c343468
   1849 	DD	0xf4a5a551,0xf4a5a551
   1850 	DD	0x34e5e5d1,0x34e5e5d1
   1851 	DD	0x08f1f1f9,0x08f1f1f9
   1852 	DD	0x937171e2,0x937171e2
   1853 	DD	0x73d8d8ab,0x73d8d8ab
   1854 	DD	0x53313162,0x53313162
   1855 	DD	0x3f15152a,0x3f15152a
   1856 	DD	0x0c040408,0x0c040408
   1857 	DD	0x52c7c795,0x52c7c795
   1858 	DD	0x65232346,0x65232346
   1859 	DD	0x5ec3c39d,0x5ec3c39d
   1860 	DD	0x28181830,0x28181830
   1861 	DD	0xa1969637,0xa1969637
   1862 	DD	0x0f05050a,0x0f05050a
   1863 	DD	0xb59a9a2f,0xb59a9a2f
   1864 	DD	0x0907070e,0x0907070e
   1865 	DD	0x36121224,0x36121224
   1866 	DD	0x9b80801b,0x9b80801b
   1867 	DD	0x3de2e2df,0x3de2e2df
   1868 	DD	0x26ebebcd,0x26ebebcd
   1869 	DD	0x6927274e,0x6927274e
   1870 	DD	0xcdb2b27f,0xcdb2b27f
   1871 	DD	0x9f7575ea,0x9f7575ea
   1872 	DD	0x1b090912,0x1b090912
   1873 	DD	0x9e83831d,0x9e83831d
   1874 	DD	0x742c2c58,0x742c2c58
   1875 	DD	0x2e1a1a34,0x2e1a1a34
   1876 	DD	0x2d1b1b36,0x2d1b1b36
   1877 	DD	0xb26e6edc,0xb26e6edc
   1878 	DD	0xee5a5ab4,0xee5a5ab4
   1879 	DD	0xfba0a05b,0xfba0a05b
   1880 	DD	0xf65252a4,0xf65252a4
   1881 	DD	0x4d3b3b76,0x4d3b3b76
   1882 	DD	0x61d6d6b7,0x61d6d6b7
   1883 	DD	0xceb3b37d,0xceb3b37d
   1884 	DD	0x7b292952,0x7b292952
   1885 	DD	0x3ee3e3dd,0x3ee3e3dd
   1886 	DD	0x712f2f5e,0x712f2f5e
   1887 	DD	0x97848413,0x97848413
   1888 	DD	0xf55353a6,0xf55353a6
   1889 	DD	0x68d1d1b9,0x68d1d1b9
   1890 	DD	0x00000000,0x00000000
   1891 	DD	0x2cededc1,0x2cededc1
   1892 	DD	0x60202040,0x60202040
   1893 	DD	0x1ffcfce3,0x1ffcfce3
   1894 	DD	0xc8b1b179,0xc8b1b179
   1895 	DD	0xed5b5bb6,0xed5b5bb6
   1896 	DD	0xbe6a6ad4,0xbe6a6ad4
   1897 	DD	0x46cbcb8d,0x46cbcb8d
   1898 	DD	0xd9bebe67,0xd9bebe67
   1899 	DD	0x4b393972,0x4b393972
   1900 	DD	0xde4a4a94,0xde4a4a94
   1901 	DD	0xd44c4c98,0xd44c4c98
   1902 	DD	0xe85858b0,0xe85858b0
   1903 	DD	0x4acfcf85,0x4acfcf85
   1904 	DD	0x6bd0d0bb,0x6bd0d0bb
   1905 	DD	0x2aefefc5,0x2aefefc5
   1906 	DD	0xe5aaaa4f,0xe5aaaa4f
   1907 	DD	0x16fbfbed,0x16fbfbed
   1908 	DD	0xc5434386,0xc5434386
   1909 	DD	0xd74d4d9a,0xd74d4d9a
   1910 	DD	0x55333366,0x55333366
   1911 	DD	0x94858511,0x94858511
   1912 	DD	0xcf45458a,0xcf45458a
   1913 	DD	0x10f9f9e9,0x10f9f9e9
   1914 	DD	0x06020204,0x06020204
   1915 	DD	0x817f7ffe,0x817f7ffe
   1916 	DD	0xf05050a0,0xf05050a0
   1917 	DD	0x443c3c78,0x443c3c78
   1918 	DD	0xba9f9f25,0xba9f9f25
   1919 	DD	0xe3a8a84b,0xe3a8a84b
   1920 	DD	0xf35151a2,0xf35151a2
   1921 	DD	0xfea3a35d,0xfea3a35d
   1922 	DD	0xc0404080,0xc0404080
   1923 	DD	0x8a8f8f05,0x8a8f8f05
   1924 	DD	0xad92923f,0xad92923f
   1925 	DD	0xbc9d9d21,0xbc9d9d21
   1926 	DD	0x48383870,0x48383870
   1927 	DD	0x04f5f5f1,0x04f5f5f1
   1928 	DD	0xdfbcbc63,0xdfbcbc63
   1929 	DD	0xc1b6b677,0xc1b6b677
   1930 	DD	0x75dadaaf,0x75dadaaf
   1931 	DD	0x63212142,0x63212142
   1932 	DD	0x30101020,0x30101020
   1933 	DD	0x1affffe5,0x1affffe5
   1934 	DD	0x0ef3f3fd,0x0ef3f3fd
   1935 	DD	0x6dd2d2bf,0x6dd2d2bf
   1936 	DD	0x4ccdcd81,0x4ccdcd81
   1937 	DD	0x140c0c18,0x140c0c18
   1938 	DD	0x35131326,0x35131326
   1939 	DD	0x2fececc3,0x2fececc3
   1940 	DD	0xe15f5fbe,0xe15f5fbe
   1941 	DD	0xa2979735,0xa2979735
   1942 	DD	0xcc444488,0xcc444488
   1943 	DD	0x3917172e,0x3917172e
   1944 	DD	0x57c4c493,0x57c4c493
   1945 	DD	0xf2a7a755,0xf2a7a755
   1946 	DD	0x827e7efc,0x827e7efc
   1947 	DD	0x473d3d7a,0x473d3d7a
   1948 	DD	0xac6464c8,0xac6464c8
   1949 	DD	0xe75d5dba,0xe75d5dba
   1950 	DD	0x2b191932,0x2b191932
   1951 	DD	0x957373e6,0x957373e6
   1952 	DD	0xa06060c0,0xa06060c0
   1953 	DD	0x98818119,0x98818119
   1954 	DD	0xd14f4f9e,0xd14f4f9e
   1955 	DD	0x7fdcdca3,0x7fdcdca3
   1956 	DD	0x66222244,0x66222244
   1957 	DD	0x7e2a2a54,0x7e2a2a54
   1958 	DD	0xab90903b,0xab90903b
   1959 	DD	0x8388880b,0x8388880b
   1960 	DD	0xca46468c,0xca46468c
   1961 	DD	0x29eeeec7,0x29eeeec7
   1962 	DD	0xd3b8b86b,0xd3b8b86b
   1963 	DD	0x3c141428,0x3c141428
   1964 	DD	0x79dedea7,0x79dedea7
   1965 	DD	0xe25e5ebc,0xe25e5ebc
   1966 	DD	0x1d0b0b16,0x1d0b0b16
   1967 	DD	0x76dbdbad,0x76dbdbad
   1968 	DD	0x3be0e0db,0x3be0e0db
   1969 	DD	0x56323264,0x56323264
   1970 	DD	0x4e3a3a74,0x4e3a3a74
   1971 	DD	0x1e0a0a14,0x1e0a0a14
   1972 	DD	0xdb494992,0xdb494992
   1973 	DD	0x0a06060c,0x0a06060c
   1974 	DD	0x6c242448,0x6c242448
   1975 	DD	0xe45c5cb8,0xe45c5cb8
   1976 	DD	0x5dc2c29f,0x5dc2c29f
   1977 	DD	0x6ed3d3bd,0x6ed3d3bd
   1978 	DD	0xefacac43,0xefacac43
   1979 	DD	0xa66262c4,0xa66262c4
   1980 	DD	0xa8919139,0xa8919139
   1981 	DD	0xa4959531,0xa4959531
   1982 	DD	0x37e4e4d3,0x37e4e4d3
   1983 	DD	0x8b7979f2,0x8b7979f2
   1984 	DD	0x32e7e7d5,0x32e7e7d5
   1985 	DD	0x43c8c88b,0x43c8c88b
   1986 	DD	0x5937376e,0x5937376e
   1987 	DD	0xb76d6dda,0xb76d6dda
   1988 	DD	0x8c8d8d01,0x8c8d8d01
   1989 	DD	0x64d5d5b1,0x64d5d5b1
   1990 	DD	0xd24e4e9c,0xd24e4e9c
   1991 	DD	0xe0a9a949,0xe0a9a949
   1992 	DD	0xb46c6cd8,0xb46c6cd8
   1993 	DD	0xfa5656ac,0xfa5656ac
   1994 	DD	0x07f4f4f3,0x07f4f4f3
   1995 	DD	0x25eaeacf,0x25eaeacf
   1996 	DD	0xaf6565ca,0xaf6565ca
   1997 	DD	0x8e7a7af4,0x8e7a7af4
   1998 	DD	0xe9aeae47,0xe9aeae47
   1999 	DD	0x18080810,0x18080810
   2000 	DD	0xd5baba6f,0xd5baba6f
   2001 	DD	0x887878f0,0x887878f0
   2002 	DD	0x6f25254a,0x6f25254a
   2003 	DD	0x722e2e5c,0x722e2e5c
   2004 	DD	0x241c1c38,0x241c1c38
   2005 	DD	0xf1a6a657,0xf1a6a657
   2006 	DD	0xc7b4b473,0xc7b4b473
   2007 	DD	0x51c6c697,0x51c6c697
   2008 	DD	0x23e8e8cb,0x23e8e8cb
   2009 	DD	0x7cdddda1,0x7cdddda1
   2010 	DD	0x9c7474e8,0x9c7474e8
   2011 	DD	0x211f1f3e,0x211f1f3e
   2012 	DD	0xdd4b4b96,0xdd4b4b96
   2013 	DD	0xdcbdbd61,0xdcbdbd61
   2014 	DD	0x868b8b0d,0x868b8b0d
   2015 	DD	0x858a8a0f,0x858a8a0f
   2016 	DD	0x907070e0,0x907070e0
   2017 	DD	0x423e3e7c,0x423e3e7c
   2018 	DD	0xc4b5b571,0xc4b5b571
   2019 	DD	0xaa6666cc,0xaa6666cc
   2020 	DD	0xd8484890,0xd8484890
   2021 	DD	0x05030306,0x05030306
   2022 	DD	0x01f6f6f7,0x01f6f6f7
   2023 	DD	0x120e0e1c,0x120e0e1c
   2024 	DD	0xa36161c2,0xa36161c2
   2025 	DD	0x5f35356a,0x5f35356a
   2026 	DD	0xf95757ae,0xf95757ae
   2027 	DD	0xd0b9b969,0xd0b9b969
   2028 	DD	0x91868617,0x91868617
   2029 	DD	0x58c1c199,0x58c1c199
   2030 	DD	0x271d1d3a,0x271d1d3a
   2031 	DD	0xb99e9e27,0xb99e9e27
   2032 	DD	0x38e1e1d9,0x38e1e1d9
   2033 	DD	0x13f8f8eb,0x13f8f8eb
   2034 	DD	0xb398982b,0xb398982b
   2035 	DD	0x33111122,0x33111122
   2036 	DD	0xbb6969d2,0xbb6969d2
   2037 	DD	0x70d9d9a9,0x70d9d9a9
   2038 	DD	0x898e8e07,0x898e8e07
   2039 	DD	0xa7949433,0xa7949433
   2040 	DD	0xb69b9b2d,0xb69b9b2d
   2041 	DD	0x221e1e3c,0x221e1e3c
   2042 	DD	0x92878715,0x92878715
   2043 	DD	0x20e9e9c9,0x20e9e9c9
   2044 	DD	0x49cece87,0x49cece87
   2045 	DD	0xff5555aa,0xff5555aa
   2046 	DD	0x78282850,0x78282850
   2047 	DD	0x7adfdfa5,0x7adfdfa5
   2048 	DD	0x8f8c8c03,0x8f8c8c03
   2049 	DD	0xf8a1a159,0xf8a1a159
   2050 	DD	0x80898909,0x80898909
   2051 	DD	0x170d0d1a,0x170d0d1a
   2052 	DD	0xdabfbf65,0xdabfbf65
   2053 	DD	0x31e6e6d7,0x31e6e6d7
   2054 	DD	0xc6424284,0xc6424284
   2055 	DD	0xb86868d0,0xb86868d0
   2056 	DD	0xc3414182,0xc3414182
   2057 	DD	0xb0999929,0xb0999929
   2058 	DD	0x772d2d5a,0x772d2d5a
   2059 	DD	0x110f0f1e,0x110f0f1e
   2060 	DD	0xcbb0b07b,0xcbb0b07b
   2061 	DD	0xfc5454a8,0xfc5454a8
   2062 	DD	0xd6bbbb6d,0xd6bbbb6d
   2063 	DD	0x3a16162c,0x3a16162c
   2064 DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
   2065 DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
   2066 DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
   2067 DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
   2068 DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
   2069 DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
   2070 DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
   2071 DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
   2072 DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
   2073 DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
   2074 DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
   2075 DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
   2076 DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
   2077 DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
   2078 DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
   2079 DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
   2080 DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
   2081 DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
   2082 DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
   2083 DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
   2084 DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
   2085 DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
   2086 DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
   2087 DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
   2088 DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
   2089 DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
   2090 DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
   2091 DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
   2092 DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
   2093 DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
   2094 DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
   2095 DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
   2096 DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
   2097 DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
   2098 DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
   2099 DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
   2100 DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
   2101 DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
   2102 DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
   2103 DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
   2104 DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
   2105 DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
   2106 DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
   2107 DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
   2108 DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
   2109 DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
   2110 DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
   2111 DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
   2112 DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
   2113 DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
   2114 DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
   2115 DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
   2116 DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
   2117 DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
   2118 DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
   2119 DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
   2120 DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
   2121 DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
   2122 DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
   2123 DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
   2124 DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
   2125 DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
   2126 DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
   2127 DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
   2128 DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
   2129 DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
   2130 DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
   2131 DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
   2132 DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
   2133 DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
   2134 DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
   2135 DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
   2136 DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
   2137 DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
   2138 DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
   2139 DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
   2140 DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
   2141 DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
   2142 DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
   2143 DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
   2144 DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
   2145 DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
   2146 DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
   2147 DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
   2148 DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
   2149 DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
   2150 DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
   2151 DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
   2152 DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
   2153 DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
   2154 DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
   2155 DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
   2156 DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
   2157 DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
   2158 DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
   2159 DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
   2160 DB	0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
   2161 DB	0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
   2162 DB	0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
   2163 DB	0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
   2164 DB	0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
   2165 DB	0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
   2166 DB	0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
   2167 DB	0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
   2168 DB	0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
   2169 DB	0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
   2170 DB	0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
   2171 DB	0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
   2172 DB	0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
   2173 DB	0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
   2174 DB	0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
   2175 DB	0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
   2176 DB	0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
   2177 DB	0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
   2178 DB	0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
   2179 DB	0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
   2180 DB	0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
   2181 DB	0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
   2182 DB	0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
   2183 DB	0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
   2184 DB	0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
   2185 DB	0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
   2186 DB	0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
   2187 DB	0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
   2188 DB	0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
   2189 DB	0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
   2190 DB	0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
   2191 DB	0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
   2192 	DD	0x00000001,0x00000002,0x00000004,0x00000008
   2193 	DD	0x00000010,0x00000020,0x00000040,0x00000080
   2194 	DD	0x0000001b,0x00000036,0x80808080,0x80808080
   2195 	DD	0xfefefefe,0xfefefefe,0x1b1b1b1b,0x1b1b1b1b
   2196 ALIGN	64
   2197 $L$AES_Td:
   2198 	DD	0x50a7f451,0x50a7f451
   2199 	DD	0x5365417e,0x5365417e
   2200 	DD	0xc3a4171a,0xc3a4171a
   2201 	DD	0x965e273a,0x965e273a
   2202 	DD	0xcb6bab3b,0xcb6bab3b
   2203 	DD	0xf1459d1f,0xf1459d1f
   2204 	DD	0xab58faac,0xab58faac
   2205 	DD	0x9303e34b,0x9303e34b
   2206 	DD	0x55fa3020,0x55fa3020
   2207 	DD	0xf66d76ad,0xf66d76ad
   2208 	DD	0x9176cc88,0x9176cc88
   2209 	DD	0x254c02f5,0x254c02f5
   2210 	DD	0xfcd7e54f,0xfcd7e54f
   2211 	DD	0xd7cb2ac5,0xd7cb2ac5
   2212 	DD	0x80443526,0x80443526
   2213 	DD	0x8fa362b5,0x8fa362b5
   2214 	DD	0x495ab1de,0x495ab1de
   2215 	DD	0x671bba25,0x671bba25
   2216 	DD	0x980eea45,0x980eea45
   2217 	DD	0xe1c0fe5d,0xe1c0fe5d
   2218 	DD	0x02752fc3,0x02752fc3
   2219 	DD	0x12f04c81,0x12f04c81
   2220 	DD	0xa397468d,0xa397468d
   2221 	DD	0xc6f9d36b,0xc6f9d36b
   2222 	DD	0xe75f8f03,0xe75f8f03
   2223 	DD	0x959c9215,0x959c9215
   2224 	DD	0xeb7a6dbf,0xeb7a6dbf
   2225 	DD	0xda595295,0xda595295
   2226 	DD	0x2d83bed4,0x2d83bed4
   2227 	DD	0xd3217458,0xd3217458
   2228 	DD	0x2969e049,0x2969e049
   2229 	DD	0x44c8c98e,0x44c8c98e
   2230 	DD	0x6a89c275,0x6a89c275
   2231 	DD	0x78798ef4,0x78798ef4
   2232 	DD	0x6b3e5899,0x6b3e5899
   2233 	DD	0xdd71b927,0xdd71b927
   2234 	DD	0xb64fe1be,0xb64fe1be
   2235 	DD	0x17ad88f0,0x17ad88f0
   2236 	DD	0x66ac20c9,0x66ac20c9
   2237 	DD	0xb43ace7d,0xb43ace7d
   2238 	DD	0x184adf63,0x184adf63
   2239 	DD	0x82311ae5,0x82311ae5
   2240 	DD	0x60335197,0x60335197
   2241 	DD	0x457f5362,0x457f5362
   2242 	DD	0xe07764b1,0xe07764b1
   2243 	DD	0x84ae6bbb,0x84ae6bbb
   2244 	DD	0x1ca081fe,0x1ca081fe
   2245 	DD	0x942b08f9,0x942b08f9
   2246 	DD	0x58684870,0x58684870
   2247 	DD	0x19fd458f,0x19fd458f
   2248 	DD	0x876cde94,0x876cde94
   2249 	DD	0xb7f87b52,0xb7f87b52
   2250 	DD	0x23d373ab,0x23d373ab
   2251 	DD	0xe2024b72,0xe2024b72
   2252 	DD	0x578f1fe3,0x578f1fe3
   2253 	DD	0x2aab5566,0x2aab5566
   2254 	DD	0x0728ebb2,0x0728ebb2
   2255 	DD	0x03c2b52f,0x03c2b52f
   2256 	DD	0x9a7bc586,0x9a7bc586
   2257 	DD	0xa50837d3,0xa50837d3
   2258 	DD	0xf2872830,0xf2872830
   2259 	DD	0xb2a5bf23,0xb2a5bf23
   2260 	DD	0xba6a0302,0xba6a0302
   2261 	DD	0x5c8216ed,0x5c8216ed
   2262 	DD	0x2b1ccf8a,0x2b1ccf8a
   2263 	DD	0x92b479a7,0x92b479a7
   2264 	DD	0xf0f207f3,0xf0f207f3
   2265 	DD	0xa1e2694e,0xa1e2694e
   2266 	DD	0xcdf4da65,0xcdf4da65
   2267 	DD	0xd5be0506,0xd5be0506
   2268 	DD	0x1f6234d1,0x1f6234d1
   2269 	DD	0x8afea6c4,0x8afea6c4
   2270 	DD	0x9d532e34,0x9d532e34
   2271 	DD	0xa055f3a2,0xa055f3a2
   2272 	DD	0x32e18a05,0x32e18a05
   2273 	DD	0x75ebf6a4,0x75ebf6a4
   2274 	DD	0x39ec830b,0x39ec830b
   2275 	DD	0xaaef6040,0xaaef6040
   2276 	DD	0x069f715e,0x069f715e
   2277 	DD	0x51106ebd,0x51106ebd
   2278 	DD	0xf98a213e,0xf98a213e
   2279 	DD	0x3d06dd96,0x3d06dd96
   2280 	DD	0xae053edd,0xae053edd
   2281 	DD	0x46bde64d,0x46bde64d
   2282 	DD	0xb58d5491,0xb58d5491
   2283 	DD	0x055dc471,0x055dc471
   2284 	DD	0x6fd40604,0x6fd40604
   2285 	DD	0xff155060,0xff155060
   2286 	DD	0x24fb9819,0x24fb9819
   2287 	DD	0x97e9bdd6,0x97e9bdd6
   2288 	DD	0xcc434089,0xcc434089
   2289 	DD	0x779ed967,0x779ed967
   2290 	DD	0xbd42e8b0,0xbd42e8b0
   2291 	DD	0x888b8907,0x888b8907
   2292 	DD	0x385b19e7,0x385b19e7
   2293 	DD	0xdbeec879,0xdbeec879
   2294 	DD	0x470a7ca1,0x470a7ca1
   2295 	DD	0xe90f427c,0xe90f427c
   2296 	DD	0xc91e84f8,0xc91e84f8
   2297 	DD	0x00000000,0x00000000
   2298 	DD	0x83868009,0x83868009
   2299 	DD	0x48ed2b32,0x48ed2b32
   2300 	DD	0xac70111e,0xac70111e
   2301 	DD	0x4e725a6c,0x4e725a6c
   2302 	DD	0xfbff0efd,0xfbff0efd
   2303 	DD	0x5638850f,0x5638850f
   2304 	DD	0x1ed5ae3d,0x1ed5ae3d
   2305 	DD	0x27392d36,0x27392d36
   2306 	DD	0x64d90f0a,0x64d90f0a
   2307 	DD	0x21a65c68,0x21a65c68
   2308 	DD	0xd1545b9b,0xd1545b9b
   2309 	DD	0x3a2e3624,0x3a2e3624
   2310 	DD	0xb1670a0c,0xb1670a0c
   2311 	DD	0x0fe75793,0x0fe75793
   2312 	DD	0xd296eeb4,0xd296eeb4
   2313 	DD	0x9e919b1b,0x9e919b1b
   2314 	DD	0x4fc5c080,0x4fc5c080
   2315 	DD	0xa220dc61,0xa220dc61
   2316 	DD	0x694b775a,0x694b775a
   2317 	DD	0x161a121c,0x161a121c
   2318 	DD	0x0aba93e2,0x0aba93e2
   2319 	DD	0xe52aa0c0,0xe52aa0c0
   2320 	DD	0x43e0223c,0x43e0223c
   2321 	DD	0x1d171b12,0x1d171b12
   2322 	DD	0x0b0d090e,0x0b0d090e
   2323 	DD	0xadc78bf2,0xadc78bf2
   2324 	DD	0xb9a8b62d,0xb9a8b62d
   2325 	DD	0xc8a91e14,0xc8a91e14
   2326 	DD	0x8519f157,0x8519f157
   2327 	DD	0x4c0775af,0x4c0775af
   2328 	DD	0xbbdd99ee,0xbbdd99ee
   2329 	DD	0xfd607fa3,0xfd607fa3
   2330 	DD	0x9f2601f7,0x9f2601f7
   2331 	DD	0xbcf5725c,0xbcf5725c
   2332 	DD	0xc53b6644,0xc53b6644
   2333 	DD	0x347efb5b,0x347efb5b
   2334 	DD	0x7629438b,0x7629438b
   2335 	DD	0xdcc623cb,0xdcc623cb
   2336 	DD	0x68fcedb6,0x68fcedb6
   2337 	DD	0x63f1e4b8,0x63f1e4b8
   2338 	DD	0xcadc31d7,0xcadc31d7
   2339 	DD	0x10856342,0x10856342
   2340 	DD	0x40229713,0x40229713
   2341 	DD	0x2011c684,0x2011c684
   2342 	DD	0x7d244a85,0x7d244a85
   2343 	DD	0xf83dbbd2,0xf83dbbd2
   2344 	DD	0x1132f9ae,0x1132f9ae
   2345 	DD	0x6da129c7,0x6da129c7
   2346 	DD	0x4b2f9e1d,0x4b2f9e1d
   2347 	DD	0xf330b2dc,0xf330b2dc
   2348 	DD	0xec52860d,0xec52860d
   2349 	DD	0xd0e3c177,0xd0e3c177
   2350 	DD	0x6c16b32b,0x6c16b32b
   2351 	DD	0x99b970a9,0x99b970a9
   2352 	DD	0xfa489411,0xfa489411
   2353 	DD	0x2264e947,0x2264e947
   2354 	DD	0xc48cfca8,0xc48cfca8
   2355 	DD	0x1a3ff0a0,0x1a3ff0a0
   2356 	DD	0xd82c7d56,0xd82c7d56
   2357 	DD	0xef903322,0xef903322
   2358 	DD	0xc74e4987,0xc74e4987
   2359 	DD	0xc1d138d9,0xc1d138d9
   2360 	DD	0xfea2ca8c,0xfea2ca8c
   2361 	DD	0x360bd498,0x360bd498
   2362 	DD	0xcf81f5a6,0xcf81f5a6
   2363 	DD	0x28de7aa5,0x28de7aa5
   2364 	DD	0x268eb7da,0x268eb7da
   2365 	DD	0xa4bfad3f,0xa4bfad3f
   2366 	DD	0xe49d3a2c,0xe49d3a2c
   2367 	DD	0x0d927850,0x0d927850
   2368 	DD	0x9bcc5f6a,0x9bcc5f6a
   2369 	DD	0x62467e54,0x62467e54
   2370 	DD	0xc2138df6,0xc2138df6
   2371 	DD	0xe8b8d890,0xe8b8d890
   2372 	DD	0x5ef7392e,0x5ef7392e
   2373 	DD	0xf5afc382,0xf5afc382
   2374 	DD	0xbe805d9f,0xbe805d9f
   2375 	DD	0x7c93d069,0x7c93d069
   2376 	DD	0xa92dd56f,0xa92dd56f
   2377 	DD	0xb31225cf,0xb31225cf
   2378 	DD	0x3b99acc8,0x3b99acc8
   2379 	DD	0xa77d1810,0xa77d1810
   2380 	DD	0x6e639ce8,0x6e639ce8
   2381 	DD	0x7bbb3bdb,0x7bbb3bdb
   2382 	DD	0x097826cd,0x097826cd
   2383 	DD	0xf418596e,0xf418596e
   2384 	DD	0x01b79aec,0x01b79aec
   2385 	DD	0xa89a4f83,0xa89a4f83
   2386 	DD	0x656e95e6,0x656e95e6
   2387 	DD	0x7ee6ffaa,0x7ee6ffaa
   2388 	DD	0x08cfbc21,0x08cfbc21
   2389 	DD	0xe6e815ef,0xe6e815ef
   2390 	DD	0xd99be7ba,0xd99be7ba
   2391 	DD	0xce366f4a,0xce366f4a
   2392 	DD	0xd4099fea,0xd4099fea
   2393 	DD	0xd67cb029,0xd67cb029
   2394 	DD	0xafb2a431,0xafb2a431
   2395 	DD	0x31233f2a,0x31233f2a
   2396 	DD	0x3094a5c6,0x3094a5c6
   2397 	DD	0xc066a235,0xc066a235
   2398 	DD	0x37bc4e74,0x37bc4e74
   2399 	DD	0xa6ca82fc,0xa6ca82fc
   2400 	DD	0xb0d090e0,0xb0d090e0
   2401 	DD	0x15d8a733,0x15d8a733
   2402 	DD	0x4a9804f1,0x4a9804f1
   2403 	DD	0xf7daec41,0xf7daec41
   2404 	DD	0x0e50cd7f,0x0e50cd7f
   2405 	DD	0x2ff69117,0x2ff69117
   2406 	DD	0x8dd64d76,0x8dd64d76
   2407 	DD	0x4db0ef43,0x4db0ef43
   2408 	DD	0x544daacc,0x544daacc
   2409 	DD	0xdf0496e4,0xdf0496e4
   2410 	DD	0xe3b5d19e,0xe3b5d19e
   2411 	DD	0x1b886a4c,0x1b886a4c
   2412 	DD	0xb81f2cc1,0xb81f2cc1
   2413 	DD	0x7f516546,0x7f516546
   2414 	DD	0x04ea5e9d,0x04ea5e9d
   2415 	DD	0x5d358c01,0x5d358c01
   2416 	DD	0x737487fa,0x737487fa
   2417 	DD	0x2e410bfb,0x2e410bfb
   2418 	DD	0x5a1d67b3,0x5a1d67b3
   2419 	DD	0x52d2db92,0x52d2db92
   2420 	DD	0x335610e9,0x335610e9
   2421 	DD	0x1347d66d,0x1347d66d
   2422 	DD	0x8c61d79a,0x8c61d79a
   2423 	DD	0x7a0ca137,0x7a0ca137
   2424 	DD	0x8e14f859,0x8e14f859
   2425 	DD	0x893c13eb,0x893c13eb
   2426 	DD	0xee27a9ce,0xee27a9ce
   2427 	DD	0x35c961b7,0x35c961b7
   2428 	DD	0xede51ce1,0xede51ce1
   2429 	DD	0x3cb1477a,0x3cb1477a
   2430 	DD	0x59dfd29c,0x59dfd29c
   2431 	DD	0x3f73f255,0x3f73f255
   2432 	DD	0x79ce1418,0x79ce1418
   2433 	DD	0xbf37c773,0xbf37c773
   2434 	DD	0xeacdf753,0xeacdf753
   2435 	DD	0x5baafd5f,0x5baafd5f
   2436 	DD	0x146f3ddf,0x146f3ddf
   2437 	DD	0x86db4478,0x86db4478
   2438 	DD	0x81f3afca,0x81f3afca
   2439 	DD	0x3ec468b9,0x3ec468b9
   2440 	DD	0x2c342438,0x2c342438
   2441 	DD	0x5f40a3c2,0x5f40a3c2
   2442 	DD	0x72c31d16,0x72c31d16
   2443 	DD	0x0c25e2bc,0x0c25e2bc
   2444 	DD	0x8b493c28,0x8b493c28
   2445 	DD	0x41950dff,0x41950dff
   2446 	DD	0x7101a839,0x7101a839
   2447 	DD	0xdeb30c08,0xdeb30c08
   2448 	DD	0x9ce4b4d8,0x9ce4b4d8
   2449 	DD	0x90c15664,0x90c15664
   2450 	DD	0x6184cb7b,0x6184cb7b
   2451 	DD	0x70b632d5,0x70b632d5
   2452 	DD	0x745c6c48,0x745c6c48
   2453 	DD	0x4257b8d0,0x4257b8d0
   2454 DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
   2455 DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
   2456 DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
   2457 DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
   2458 DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
   2459 DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
   2460 DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
   2461 DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
   2462 DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
   2463 DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
   2464 DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
   2465 DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
   2466 DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
   2467 DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
   2468 DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
   2469 DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
   2470 DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
   2471 DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
   2472 DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
   2473 DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
   2474 DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
   2475 DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
   2476 DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
   2477 DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
   2478 DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
   2479 DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
   2480 DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
   2481 DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
   2482 DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
   2483 DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
   2484 DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
   2485 DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
   2486 	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
   2487 	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
   2488 DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
   2489 DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
   2490 DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
   2491 DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
   2492 DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
   2493 DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
   2494 DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
   2495 DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
   2496 DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
   2497 DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
   2498 DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
   2499 DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
   2500 DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
   2501 DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
   2502 DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
   2503 DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
   2504 DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
   2505 DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
   2506 DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
   2507 DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
   2508 DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
   2509 DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
   2510 DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
   2511 DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
   2512 DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
   2513 DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
   2514 DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
   2515 DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
   2516 DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
   2517 DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
   2518 DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
   2519 DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
   2520 	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
   2521 	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
   2522 DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
   2523 DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
   2524 DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
   2525 DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
   2526 DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
   2527 DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
   2528 DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
   2529 DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
   2530 DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
   2531 DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
   2532 DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
   2533 DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
   2534 DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
   2535 DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
   2536 DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
   2537 DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
   2538 DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
   2539 DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
   2540 DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
   2541 DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
   2542 DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
   2543 DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
   2544 DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
   2545 DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
   2546 DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
   2547 DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
   2548 DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
   2549 DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
   2550 DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
   2551 DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
   2552 DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
   2553 DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
   2554 	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
   2555 	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
   2556 DB	0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
   2557 DB	0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
   2558 DB	0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
   2559 DB	0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
   2560 DB	0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
   2561 DB	0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
   2562 DB	0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
   2563 DB	0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
   2564 DB	0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
   2565 DB	0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
   2566 DB	0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
   2567 DB	0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
   2568 DB	0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
   2569 DB	0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
   2570 DB	0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
   2571 DB	0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
   2572 DB	0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
   2573 DB	0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
   2574 DB	0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
   2575 DB	0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
   2576 DB	0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
   2577 DB	0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
   2578 DB	0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
   2579 DB	0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
   2580 DB	0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
   2581 DB	0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
   2582 DB	0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
   2583 DB	0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
   2584 DB	0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
   2585 DB	0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
   2586 DB	0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
   2587 DB	0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
   2588 	DD	0x80808080,0x80808080,0xfefefefe,0xfefefefe
   2589 	DD	0x1b1b1b1b,0x1b1b1b1b,0,0
   2590 DB	65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
   2591 DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
   2592 DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
   2593 DB	62,0
   2594 ALIGN	64
   2595 EXTERN	__imp_RtlVirtualUnwind
   2596 
   2597 ALIGN	16
   2598 block_se_handler:
   2599 	push	rsi
   2600 	push	rdi
   2601 	push	rbx
   2602 	push	rbp
   2603 	push	r12
   2604 	push	r13
   2605 	push	r14
   2606 	push	r15
   2607 	pushfq
   2608 	sub	rsp,64
   2609 
   2610 	mov	rax,QWORD[120+r8]
   2611 	mov	rbx,QWORD[248+r8]
   2612 
   2613 	mov	rsi,QWORD[8+r9]
   2614 	mov	r11,QWORD[56+r9]
   2615 
   2616 	mov	r10d,DWORD[r11]
   2617 	lea	r10,[r10*1+rsi]
   2618 	cmp	rbx,r10
   2619 	jb	NEAR $L$in_block_prologue
   2620 
   2621 	mov	rax,QWORD[152+r8]
   2622 
   2623 	mov	r10d,DWORD[4+r11]
   2624 	lea	r10,[r10*1+rsi]
   2625 	cmp	rbx,r10
   2626 	jae	NEAR $L$in_block_prologue
   2627 
   2628 	mov	rax,QWORD[24+rax]
   2629 	lea	rax,[48+rax]
   2630 
   2631 	mov	rbx,QWORD[((-8))+rax]
   2632 	mov	rbp,QWORD[((-16))+rax]
   2633 	mov	r12,QWORD[((-24))+rax]
   2634 	mov	r13,QWORD[((-32))+rax]
   2635 	mov	r14,QWORD[((-40))+rax]
   2636 	mov	r15,QWORD[((-48))+rax]
   2637 	mov	QWORD[144+r8],rbx
   2638 	mov	QWORD[160+r8],rbp
   2639 	mov	QWORD[216+r8],r12
   2640 	mov	QWORD[224+r8],r13
   2641 	mov	QWORD[232+r8],r14
   2642 	mov	QWORD[240+r8],r15
   2643 
   2644 $L$in_block_prologue:
   2645 	mov	rdi,QWORD[8+rax]
   2646 	mov	rsi,QWORD[16+rax]
   2647 	mov	QWORD[152+r8],rax
   2648 	mov	QWORD[168+r8],rsi
   2649 	mov	QWORD[176+r8],rdi
   2650 
   2651 	jmp	NEAR $L$common_seh_exit
   2652 
   2653 
   2654 
   2655 ALIGN	16
   2656 key_se_handler:
   2657 	push	rsi
   2658 	push	rdi
   2659 	push	rbx
   2660 	push	rbp
   2661 	push	r12
   2662 	push	r13
   2663 	push	r14
   2664 	push	r15
   2665 	pushfq
   2666 	sub	rsp,64
   2667 
   2668 	mov	rax,QWORD[120+r8]
   2669 	mov	rbx,QWORD[248+r8]
   2670 
   2671 	mov	rsi,QWORD[8+r9]
   2672 	mov	r11,QWORD[56+r9]
   2673 
   2674 	mov	r10d,DWORD[r11]
   2675 	lea	r10,[r10*1+rsi]
   2676 	cmp	rbx,r10
   2677 	jb	NEAR $L$in_key_prologue
   2678 
   2679 	mov	rax,QWORD[152+r8]
   2680 
   2681 	mov	r10d,DWORD[4+r11]
   2682 	lea	r10,[r10*1+rsi]
   2683 	cmp	rbx,r10
   2684 	jae	NEAR $L$in_key_prologue
   2685 
   2686 	lea	rax,[56+rax]
   2687 
   2688 	mov	rbx,QWORD[((-8))+rax]
   2689 	mov	rbp,QWORD[((-16))+rax]
   2690 	mov	r12,QWORD[((-24))+rax]
   2691 	mov	r13,QWORD[((-32))+rax]
   2692 	mov	r14,QWORD[((-40))+rax]
   2693 	mov	r15,QWORD[((-48))+rax]
   2694 	mov	QWORD[144+r8],rbx
   2695 	mov	QWORD[160+r8],rbp
   2696 	mov	QWORD[216+r8],r12
   2697 	mov	QWORD[224+r8],r13
   2698 	mov	QWORD[232+r8],r14
   2699 	mov	QWORD[240+r8],r15
   2700 
   2701 $L$in_key_prologue:
   2702 	mov	rdi,QWORD[8+rax]
   2703 	mov	rsi,QWORD[16+rax]
   2704 	mov	QWORD[152+r8],rax
   2705 	mov	QWORD[168+r8],rsi
   2706 	mov	QWORD[176+r8],rdi
   2707 
   2708 	jmp	NEAR $L$common_seh_exit
   2709 
   2710 
   2711 
   2712 ALIGN	16
   2713 cbc_se_handler:
   2714 	push	rsi
   2715 	push	rdi
   2716 	push	rbx
   2717 	push	rbp
   2718 	push	r12
   2719 	push	r13
   2720 	push	r14
   2721 	push	r15
   2722 	pushfq
   2723 	sub	rsp,64
   2724 
   2725 	mov	rax,QWORD[120+r8]
   2726 	mov	rbx,QWORD[248+r8]
   2727 
   2728 	lea	r10,[$L$cbc_prologue]
   2729 	cmp	rbx,r10
   2730 	jb	NEAR $L$in_cbc_prologue
   2731 
   2732 	lea	r10,[$L$cbc_fast_body]
   2733 	cmp	rbx,r10
   2734 	jb	NEAR $L$in_cbc_frame_setup
   2735 
   2736 	lea	r10,[$L$cbc_slow_prologue]
   2737 	cmp	rbx,r10
   2738 	jb	NEAR $L$in_cbc_body
   2739 
   2740 	lea	r10,[$L$cbc_slow_body]
   2741 	cmp	rbx,r10
   2742 	jb	NEAR $L$in_cbc_frame_setup
   2743 
   2744 $L$in_cbc_body:
   2745 	mov	rax,QWORD[152+r8]
   2746 
   2747 	lea	r10,[$L$cbc_epilogue]
   2748 	cmp	rbx,r10
   2749 	jae	NEAR $L$in_cbc_prologue
   2750 
   2751 	lea	rax,[8+rax]
   2752 
   2753 	lea	r10,[$L$cbc_popfq]
   2754 	cmp	rbx,r10
   2755 	jae	NEAR $L$in_cbc_prologue
   2756 
   2757 	mov	rax,QWORD[8+rax]
   2758 	lea	rax,[56+rax]
   2759 
   2760 $L$in_cbc_frame_setup:
   2761 	mov	rbx,QWORD[((-16))+rax]
   2762 	mov	rbp,QWORD[((-24))+rax]
   2763 	mov	r12,QWORD[((-32))+rax]
   2764 	mov	r13,QWORD[((-40))+rax]
   2765 	mov	r14,QWORD[((-48))+rax]
   2766 	mov	r15,QWORD[((-56))+rax]
   2767 	mov	QWORD[144+r8],rbx
   2768 	mov	QWORD[160+r8],rbp
   2769 	mov	QWORD[216+r8],r12
   2770 	mov	QWORD[224+r8],r13
   2771 	mov	QWORD[232+r8],r14
   2772 	mov	QWORD[240+r8],r15
   2773 
   2774 $L$in_cbc_prologue:
   2775 	mov	rdi,QWORD[8+rax]
   2776 	mov	rsi,QWORD[16+rax]
   2777 	mov	QWORD[152+r8],rax
   2778 	mov	QWORD[168+r8],rsi
   2779 	mov	QWORD[176+r8],rdi
   2780 
   2781 $L$common_seh_exit:
   2782 
   2783 	mov	rdi,QWORD[40+r9]
   2784 	mov	rsi,r8
   2785 	mov	ecx,154
   2786 	DD	0xa548f3fc
   2787 
   2788 	mov	rsi,r9
   2789 	xor	rcx,rcx
   2790 	mov	rdx,QWORD[8+rsi]
   2791 	mov	r8,QWORD[rsi]
   2792 	mov	r9,QWORD[16+rsi]
   2793 	mov	r10,QWORD[40+rsi]
   2794 	lea	r11,[56+rsi]
   2795 	lea	r12,[24+rsi]
   2796 	mov	QWORD[32+rsp],r10
   2797 	mov	QWORD[40+rsp],r11
   2798 	mov	QWORD[48+rsp],r12
   2799 	mov	QWORD[56+rsp],rcx
   2800 	call	QWORD[__imp_RtlVirtualUnwind]
   2801 
   2802 	mov	eax,1
   2803 	add	rsp,64
   2804 	popfq
   2805 	pop	r15
   2806 	pop	r14
   2807 	pop	r13
   2808 	pop	r12
   2809 	pop	rbp
   2810 	pop	rbx
   2811 	pop	rdi
   2812 	pop	rsi
   2813 	DB	0F3h,0C3h		;repret
   2814 
   2815 
   2816 section	.pdata rdata align=4
   2817 ALIGN	4
   2818 	DD	$L$SEH_begin_asm_AES_encrypt wrt ..imagebase
   2819 	DD	$L$SEH_end_asm_AES_encrypt wrt ..imagebase
   2820 	DD	$L$SEH_info_asm_AES_encrypt wrt ..imagebase
   2821 
   2822 	DD	$L$SEH_begin_asm_AES_decrypt wrt ..imagebase
   2823 	DD	$L$SEH_end_asm_AES_decrypt wrt ..imagebase
   2824 	DD	$L$SEH_info_asm_AES_decrypt wrt ..imagebase
   2825 
   2826 	DD	$L$SEH_begin_asm_AES_set_encrypt_key wrt ..imagebase
   2827 	DD	$L$SEH_end_asm_AES_set_encrypt_key wrt ..imagebase
   2828 	DD	$L$SEH_info_asm_AES_set_encrypt_key wrt ..imagebase
   2829 
   2830 	DD	$L$SEH_begin_asm_AES_set_decrypt_key wrt ..imagebase
   2831 	DD	$L$SEH_end_asm_AES_set_decrypt_key wrt ..imagebase
   2832 	DD	$L$SEH_info_asm_AES_set_decrypt_key wrt ..imagebase
   2833 
   2834 	DD	$L$SEH_begin_asm_AES_cbc_encrypt wrt ..imagebase
   2835 	DD	$L$SEH_end_asm_AES_cbc_encrypt wrt ..imagebase
   2836 	DD	$L$SEH_info_asm_AES_cbc_encrypt wrt ..imagebase
   2837 
   2838 section	.xdata rdata align=8
   2839 ALIGN	8
   2840 $L$SEH_info_asm_AES_encrypt:
   2841 DB	9,0,0,0
   2842 	DD	block_se_handler wrt ..imagebase
   2843 	DD	$L$enc_prologue wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
   2844 $L$SEH_info_asm_AES_decrypt:
   2845 DB	9,0,0,0
   2846 	DD	block_se_handler wrt ..imagebase
   2847 	DD	$L$dec_prologue wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
   2848 $L$SEH_info_asm_AES_set_encrypt_key:
   2849 DB	9,0,0,0
   2850 	DD	key_se_handler wrt ..imagebase
   2851 	DD	$L$enc_key_prologue wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
   2852 $L$SEH_info_asm_AES_set_decrypt_key:
   2853 DB	9,0,0,0
   2854 	DD	key_se_handler wrt ..imagebase
   2855 	DD	$L$dec_key_prologue wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
   2856 $L$SEH_info_asm_AES_cbc_encrypt:
   2857 DB	9,0,0,0
   2858 	DD	cbc_se_handler wrt ..imagebase
   2859