blob: f7b1b06fe3dd37cd57bcfe720c80f909b71cff10 [file] [log] [blame]
Robert Sloan6f79a502017-04-03 09:16:40 -07001#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
Adam Langleyd9e397b2015-01-22 14:27:53 -08002.text
3
4.p2align 4
5_x86_64_AES_encrypt:
6 xorl 0(%r15),%eax
7 xorl 4(%r15),%ebx
8 xorl 8(%r15),%ecx
9 xorl 12(%r15),%edx
10
11 movl 240(%r15),%r13d
12 subl $1,%r13d
13 jmp L$enc_loop
14.p2align 4
15L$enc_loop:
16
17 movzbl %al,%esi
18 movzbl %bl,%edi
19 movzbl %cl,%ebp
20 movl 0(%r14,%rsi,8),%r10d
21 movl 0(%r14,%rdi,8),%r11d
22 movl 0(%r14,%rbp,8),%r12d
23
24 movzbl %bh,%esi
25 movzbl %ch,%edi
26 movzbl %dl,%ebp
27 xorl 3(%r14,%rsi,8),%r10d
28 xorl 3(%r14,%rdi,8),%r11d
29 movl 0(%r14,%rbp,8),%r8d
30
31 movzbl %dh,%esi
32 shrl $16,%ecx
33 movzbl %ah,%ebp
34 xorl 3(%r14,%rsi,8),%r12d
35 shrl $16,%edx
36 xorl 3(%r14,%rbp,8),%r8d
37
38 shrl $16,%ebx
39 leaq 16(%r15),%r15
40 shrl $16,%eax
41
42 movzbl %cl,%esi
43 movzbl %dl,%edi
44 movzbl %al,%ebp
45 xorl 2(%r14,%rsi,8),%r10d
46 xorl 2(%r14,%rdi,8),%r11d
47 xorl 2(%r14,%rbp,8),%r12d
48
49 movzbl %dh,%esi
50 movzbl %ah,%edi
51 movzbl %bl,%ebp
52 xorl 1(%r14,%rsi,8),%r10d
53 xorl 1(%r14,%rdi,8),%r11d
54 xorl 2(%r14,%rbp,8),%r8d
55
56 movl 12(%r15),%edx
57 movzbl %bh,%edi
58 movzbl %ch,%ebp
59 movl 0(%r15),%eax
60 xorl 1(%r14,%rdi,8),%r12d
61 xorl 1(%r14,%rbp,8),%r8d
62
63 movl 4(%r15),%ebx
64 movl 8(%r15),%ecx
65 xorl %r10d,%eax
66 xorl %r11d,%ebx
67 xorl %r12d,%ecx
68 xorl %r8d,%edx
69 subl $1,%r13d
70 jnz L$enc_loop
71 movzbl %al,%esi
72 movzbl %bl,%edi
73 movzbl %cl,%ebp
74 movzbl 2(%r14,%rsi,8),%r10d
75 movzbl 2(%r14,%rdi,8),%r11d
76 movzbl 2(%r14,%rbp,8),%r12d
77
78 movzbl %dl,%esi
79 movzbl %bh,%edi
80 movzbl %ch,%ebp
81 movzbl 2(%r14,%rsi,8),%r8d
82 movl 0(%r14,%rdi,8),%edi
83 movl 0(%r14,%rbp,8),%ebp
84
David Benjamin4969cc92016-04-22 15:02:23 -040085 andl $0x0000ff00,%edi
86 andl $0x0000ff00,%ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -080087
88 xorl %edi,%r10d
89 xorl %ebp,%r11d
90 shrl $16,%ecx
91
92 movzbl %dh,%esi
93 movzbl %ah,%edi
94 shrl $16,%edx
95 movl 0(%r14,%rsi,8),%esi
96 movl 0(%r14,%rdi,8),%edi
97
David Benjamin4969cc92016-04-22 15:02:23 -040098 andl $0x0000ff00,%esi
99 andl $0x0000ff00,%edi
Adam Langleyd9e397b2015-01-22 14:27:53 -0800100 shrl $16,%ebx
101 xorl %esi,%r12d
102 xorl %edi,%r8d
103 shrl $16,%eax
104
105 movzbl %cl,%esi
106 movzbl %dl,%edi
107 movzbl %al,%ebp
108 movl 0(%r14,%rsi,8),%esi
109 movl 0(%r14,%rdi,8),%edi
110 movl 0(%r14,%rbp,8),%ebp
111
David Benjamin4969cc92016-04-22 15:02:23 -0400112 andl $0x00ff0000,%esi
113 andl $0x00ff0000,%edi
114 andl $0x00ff0000,%ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800115
116 xorl %esi,%r10d
117 xorl %edi,%r11d
118 xorl %ebp,%r12d
119
120 movzbl %bl,%esi
121 movzbl %dh,%edi
122 movzbl %ah,%ebp
123 movl 0(%r14,%rsi,8),%esi
124 movl 2(%r14,%rdi,8),%edi
125 movl 2(%r14,%rbp,8),%ebp
126
David Benjamin4969cc92016-04-22 15:02:23 -0400127 andl $0x00ff0000,%esi
128 andl $0xff000000,%edi
129 andl $0xff000000,%ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800130
131 xorl %esi,%r8d
132 xorl %edi,%r10d
133 xorl %ebp,%r11d
134
135 movzbl %bh,%esi
136 movzbl %ch,%edi
137 movl 16+12(%r15),%edx
138 movl 2(%r14,%rsi,8),%esi
139 movl 2(%r14,%rdi,8),%edi
140 movl 16+0(%r15),%eax
141
David Benjamin4969cc92016-04-22 15:02:23 -0400142 andl $0xff000000,%esi
143 andl $0xff000000,%edi
Adam Langleyd9e397b2015-01-22 14:27:53 -0800144
145 xorl %esi,%r12d
146 xorl %edi,%r8d
147
148 movl 16+4(%r15),%ebx
149 movl 16+8(%r15),%ecx
150 xorl %r10d,%eax
151 xorl %r11d,%ebx
152 xorl %r12d,%ecx
153 xorl %r8d,%edx
154.byte 0xf3,0xc3
155
156
157.p2align 4
158_x86_64_AES_encrypt_compact:
159 leaq 128(%r14),%r8
160 movl 0-128(%r8),%edi
161 movl 32-128(%r8),%ebp
162 movl 64-128(%r8),%r10d
163 movl 96-128(%r8),%r11d
164 movl 128-128(%r8),%edi
165 movl 160-128(%r8),%ebp
166 movl 192-128(%r8),%r10d
167 movl 224-128(%r8),%r11d
168 jmp L$enc_loop_compact
169.p2align 4
170L$enc_loop_compact:
171 xorl 0(%r15),%eax
172 xorl 4(%r15),%ebx
173 xorl 8(%r15),%ecx
174 xorl 12(%r15),%edx
175 leaq 16(%r15),%r15
176 movzbl %al,%r10d
177 movzbl %bl,%r11d
178 movzbl %cl,%r12d
179 movzbl %dl,%r8d
180 movzbl %bh,%esi
181 movzbl %ch,%edi
182 shrl $16,%ecx
183 movzbl %dh,%ebp
184 movzbl (%r14,%r10,1),%r10d
185 movzbl (%r14,%r11,1),%r11d
186 movzbl (%r14,%r12,1),%r12d
187 movzbl (%r14,%r8,1),%r8d
188
189 movzbl (%r14,%rsi,1),%r9d
190 movzbl %ah,%esi
191 movzbl (%r14,%rdi,1),%r13d
192 movzbl %cl,%edi
193 movzbl (%r14,%rbp,1),%ebp
194 movzbl (%r14,%rsi,1),%esi
195
196 shll $8,%r9d
197 shrl $16,%edx
198 shll $8,%r13d
199 xorl %r9d,%r10d
200 shrl $16,%eax
201 movzbl %dl,%r9d
202 shrl $16,%ebx
203 xorl %r13d,%r11d
204 shll $8,%ebp
205 movzbl %al,%r13d
206 movzbl (%r14,%rdi,1),%edi
207 xorl %ebp,%r12d
208
209 shll $8,%esi
210 movzbl %bl,%ebp
211 shll $16,%edi
212 xorl %esi,%r8d
213 movzbl (%r14,%r9,1),%r9d
214 movzbl %dh,%esi
215 movzbl (%r14,%r13,1),%r13d
216 xorl %edi,%r10d
217
218 shrl $8,%ecx
219 movzbl %ah,%edi
220 shll $16,%r9d
221 shrl $8,%ebx
222 shll $16,%r13d
223 xorl %r9d,%r11d
224 movzbl (%r14,%rbp,1),%ebp
225 movzbl (%r14,%rsi,1),%esi
226 movzbl (%r14,%rdi,1),%edi
227 movzbl (%r14,%rcx,1),%edx
228 movzbl (%r14,%rbx,1),%ecx
229
230 shll $16,%ebp
231 xorl %r13d,%r12d
232 shll $24,%esi
233 xorl %ebp,%r8d
234 shll $24,%edi
235 xorl %esi,%r10d
236 shll $24,%edx
237 xorl %edi,%r11d
238 shll $24,%ecx
239 movl %r10d,%eax
240 movl %r11d,%ebx
241 xorl %r12d,%ecx
242 xorl %r8d,%edx
243 cmpq 16(%rsp),%r15
244 je L$enc_compact_done
David Benjamin4969cc92016-04-22 15:02:23 -0400245 movl $0x80808080,%r10d
246 movl $0x80808080,%r11d
Adam Langleyd9e397b2015-01-22 14:27:53 -0800247 andl %eax,%r10d
248 andl %ebx,%r11d
249 movl %r10d,%esi
250 movl %r11d,%edi
251 shrl $7,%r10d
252 leal (%rax,%rax,1),%r8d
253 shrl $7,%r11d
254 leal (%rbx,%rbx,1),%r9d
255 subl %r10d,%esi
256 subl %r11d,%edi
David Benjamin4969cc92016-04-22 15:02:23 -0400257 andl $0xfefefefe,%r8d
258 andl $0xfefefefe,%r9d
259 andl $0x1b1b1b1b,%esi
260 andl $0x1b1b1b1b,%edi
Adam Langleyd9e397b2015-01-22 14:27:53 -0800261 movl %eax,%r10d
262 movl %ebx,%r11d
263 xorl %esi,%r8d
264 xorl %edi,%r9d
265
266 xorl %r8d,%eax
267 xorl %r9d,%ebx
David Benjamin4969cc92016-04-22 15:02:23 -0400268 movl $0x80808080,%r12d
Adam Langleyd9e397b2015-01-22 14:27:53 -0800269 roll $24,%eax
David Benjamin4969cc92016-04-22 15:02:23 -0400270 movl $0x80808080,%ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800271 roll $24,%ebx
272 andl %ecx,%r12d
273 andl %edx,%ebp
274 xorl %r8d,%eax
275 xorl %r9d,%ebx
276 movl %r12d,%esi
277 rorl $16,%r10d
278 movl %ebp,%edi
279 rorl $16,%r11d
280 leal (%rcx,%rcx,1),%r8d
281 shrl $7,%r12d
282 xorl %r10d,%eax
283 shrl $7,%ebp
284 xorl %r11d,%ebx
285 rorl $8,%r10d
286 leal (%rdx,%rdx,1),%r9d
287 rorl $8,%r11d
288 subl %r12d,%esi
289 subl %ebp,%edi
290 xorl %r10d,%eax
291 xorl %r11d,%ebx
292
David Benjamin4969cc92016-04-22 15:02:23 -0400293 andl $0xfefefefe,%r8d
294 andl $0xfefefefe,%r9d
295 andl $0x1b1b1b1b,%esi
296 andl $0x1b1b1b1b,%edi
Adam Langleyd9e397b2015-01-22 14:27:53 -0800297 movl %ecx,%r12d
298 movl %edx,%ebp
299 xorl %esi,%r8d
300 xorl %edi,%r9d
301
302 rorl $16,%r12d
303 xorl %r8d,%ecx
304 rorl $16,%ebp
305 xorl %r9d,%edx
306 roll $24,%ecx
307 movl 0(%r14),%esi
308 roll $24,%edx
309 xorl %r8d,%ecx
310 movl 64(%r14),%edi
311 xorl %r9d,%edx
312 movl 128(%r14),%r8d
313 xorl %r12d,%ecx
314 rorl $8,%r12d
315 xorl %ebp,%edx
316 rorl $8,%ebp
317 xorl %r12d,%ecx
318 movl 192(%r14),%r9d
319 xorl %ebp,%edx
320 jmp L$enc_loop_compact
321.p2align 4
322L$enc_compact_done:
323 xorl 0(%r15),%eax
324 xorl 4(%r15),%ebx
325 xorl 8(%r15),%ecx
326 xorl 12(%r15),%edx
327.byte 0xf3,0xc3
328
329.p2align 4
330.globl _asm_AES_encrypt
331.private_extern _asm_AES_encrypt
332
333.private_extern _asm_AES_encrypt
334_asm_AES_encrypt:
Robert Sloanab8b8882018-03-26 11:39:51 -0700335
Robert Sloana94fe052017-02-21 08:49:28 -0800336 movq %rsp,%rax
Robert Sloanab8b8882018-03-26 11:39:51 -0700337
Adam Langleyd9e397b2015-01-22 14:27:53 -0800338 pushq %rbx
Robert Sloanab8b8882018-03-26 11:39:51 -0700339
Adam Langleyd9e397b2015-01-22 14:27:53 -0800340 pushq %rbp
Robert Sloanab8b8882018-03-26 11:39:51 -0700341
Adam Langleyd9e397b2015-01-22 14:27:53 -0800342 pushq %r12
Robert Sloanab8b8882018-03-26 11:39:51 -0700343
Adam Langleyd9e397b2015-01-22 14:27:53 -0800344 pushq %r13
Robert Sloanab8b8882018-03-26 11:39:51 -0700345
Adam Langleyd9e397b2015-01-22 14:27:53 -0800346 pushq %r14
Robert Sloanab8b8882018-03-26 11:39:51 -0700347
Adam Langleyd9e397b2015-01-22 14:27:53 -0800348 pushq %r15
349
350
Robert Sloanab8b8882018-03-26 11:39:51 -0700351
Adam Langleyd9e397b2015-01-22 14:27:53 -0800352 leaq -63(%rdx),%rcx
353 andq $-64,%rsp
354 subq %rsp,%rcx
355 negq %rcx
David Benjamin4969cc92016-04-22 15:02:23 -0400356 andq $0x3c0,%rcx
Adam Langleyd9e397b2015-01-22 14:27:53 -0800357 subq %rcx,%rsp
358 subq $32,%rsp
359
360 movq %rsi,16(%rsp)
Robert Sloana94fe052017-02-21 08:49:28 -0800361 movq %rax,24(%rsp)
Robert Sloanab8b8882018-03-26 11:39:51 -0700362
Adam Langleyd9e397b2015-01-22 14:27:53 -0800363L$enc_prologue:
364
365 movq %rdx,%r15
366 movl 240(%r15),%r13d
367
368 movl 0(%rdi),%eax
369 movl 4(%rdi),%ebx
370 movl 8(%rdi),%ecx
371 movl 12(%rdi),%edx
372
373 shll $4,%r13d
374 leaq (%r15,%r13,1),%rbp
375 movq %r15,(%rsp)
376 movq %rbp,8(%rsp)
377
378
379 leaq L$AES_Te+2048(%rip),%r14
380 leaq 768(%rsp),%rbp
381 subq %r14,%rbp
David Benjamin4969cc92016-04-22 15:02:23 -0400382 andq $0x300,%rbp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800383 leaq (%r14,%rbp,1),%r14
384
385 call _x86_64_AES_encrypt_compact
386
387 movq 16(%rsp),%r9
388 movq 24(%rsp),%rsi
Robert Sloanab8b8882018-03-26 11:39:51 -0700389
Adam Langleyd9e397b2015-01-22 14:27:53 -0800390 movl %eax,0(%r9)
391 movl %ebx,4(%r9)
392 movl %ecx,8(%r9)
393 movl %edx,12(%r9)
394
Robert Sloana94fe052017-02-21 08:49:28 -0800395 movq -48(%rsi),%r15
Robert Sloanab8b8882018-03-26 11:39:51 -0700396
Robert Sloana94fe052017-02-21 08:49:28 -0800397 movq -40(%rsi),%r14
Robert Sloanab8b8882018-03-26 11:39:51 -0700398
Robert Sloana94fe052017-02-21 08:49:28 -0800399 movq -32(%rsi),%r13
Robert Sloanab8b8882018-03-26 11:39:51 -0700400
Robert Sloana94fe052017-02-21 08:49:28 -0800401 movq -24(%rsi),%r12
Robert Sloanab8b8882018-03-26 11:39:51 -0700402
Robert Sloana94fe052017-02-21 08:49:28 -0800403 movq -16(%rsi),%rbp
Robert Sloanab8b8882018-03-26 11:39:51 -0700404
Robert Sloana94fe052017-02-21 08:49:28 -0800405 movq -8(%rsi),%rbx
Robert Sloanab8b8882018-03-26 11:39:51 -0700406
Robert Sloana94fe052017-02-21 08:49:28 -0800407 leaq (%rsi),%rsp
Robert Sloanab8b8882018-03-26 11:39:51 -0700408
Adam Langleyd9e397b2015-01-22 14:27:53 -0800409L$enc_epilogue:
410 .byte 0xf3,0xc3
411
412
Robert Sloanab8b8882018-03-26 11:39:51 -0700413
Adam Langleyd9e397b2015-01-22 14:27:53 -0800414.p2align 4
415_x86_64_AES_decrypt:
416 xorl 0(%r15),%eax
417 xorl 4(%r15),%ebx
418 xorl 8(%r15),%ecx
419 xorl 12(%r15),%edx
420
421 movl 240(%r15),%r13d
422 subl $1,%r13d
423 jmp L$dec_loop
424.p2align 4
425L$dec_loop:
426
427 movzbl %al,%esi
428 movzbl %bl,%edi
429 movzbl %cl,%ebp
430 movl 0(%r14,%rsi,8),%r10d
431 movl 0(%r14,%rdi,8),%r11d
432 movl 0(%r14,%rbp,8),%r12d
433
434 movzbl %dh,%esi
435 movzbl %ah,%edi
436 movzbl %dl,%ebp
437 xorl 3(%r14,%rsi,8),%r10d
438 xorl 3(%r14,%rdi,8),%r11d
439 movl 0(%r14,%rbp,8),%r8d
440
441 movzbl %bh,%esi
442 shrl $16,%eax
443 movzbl %ch,%ebp
444 xorl 3(%r14,%rsi,8),%r12d
445 shrl $16,%edx
446 xorl 3(%r14,%rbp,8),%r8d
447
448 shrl $16,%ebx
449 leaq 16(%r15),%r15
450 shrl $16,%ecx
451
452 movzbl %cl,%esi
453 movzbl %dl,%edi
454 movzbl %al,%ebp
455 xorl 2(%r14,%rsi,8),%r10d
456 xorl 2(%r14,%rdi,8),%r11d
457 xorl 2(%r14,%rbp,8),%r12d
458
459 movzbl %bh,%esi
460 movzbl %ch,%edi
461 movzbl %bl,%ebp
462 xorl 1(%r14,%rsi,8),%r10d
463 xorl 1(%r14,%rdi,8),%r11d
464 xorl 2(%r14,%rbp,8),%r8d
465
466 movzbl %dh,%esi
467 movl 12(%r15),%edx
468 movzbl %ah,%ebp
469 xorl 1(%r14,%rsi,8),%r12d
470 movl 0(%r15),%eax
471 xorl 1(%r14,%rbp,8),%r8d
472
473 xorl %r10d,%eax
474 movl 4(%r15),%ebx
475 movl 8(%r15),%ecx
476 xorl %r12d,%ecx
477 xorl %r11d,%ebx
478 xorl %r8d,%edx
479 subl $1,%r13d
480 jnz L$dec_loop
481 leaq 2048(%r14),%r14
482 movzbl %al,%esi
483 movzbl %bl,%edi
484 movzbl %cl,%ebp
485 movzbl (%r14,%rsi,1),%r10d
486 movzbl (%r14,%rdi,1),%r11d
487 movzbl (%r14,%rbp,1),%r12d
488
489 movzbl %dl,%esi
490 movzbl %dh,%edi
491 movzbl %ah,%ebp
492 movzbl (%r14,%rsi,1),%r8d
493 movzbl (%r14,%rdi,1),%edi
494 movzbl (%r14,%rbp,1),%ebp
495
496 shll $8,%edi
497 shll $8,%ebp
498
499 xorl %edi,%r10d
500 xorl %ebp,%r11d
501 shrl $16,%edx
502
503 movzbl %bh,%esi
504 movzbl %ch,%edi
505 shrl $16,%eax
506 movzbl (%r14,%rsi,1),%esi
507 movzbl (%r14,%rdi,1),%edi
508
509 shll $8,%esi
510 shll $8,%edi
511 shrl $16,%ebx
512 xorl %esi,%r12d
513 xorl %edi,%r8d
514 shrl $16,%ecx
515
516 movzbl %cl,%esi
517 movzbl %dl,%edi
518 movzbl %al,%ebp
519 movzbl (%r14,%rsi,1),%esi
520 movzbl (%r14,%rdi,1),%edi
521 movzbl (%r14,%rbp,1),%ebp
522
523 shll $16,%esi
524 shll $16,%edi
525 shll $16,%ebp
526
527 xorl %esi,%r10d
528 xorl %edi,%r11d
529 xorl %ebp,%r12d
530
531 movzbl %bl,%esi
532 movzbl %bh,%edi
533 movzbl %ch,%ebp
534 movzbl (%r14,%rsi,1),%esi
535 movzbl (%r14,%rdi,1),%edi
536 movzbl (%r14,%rbp,1),%ebp
537
538 shll $16,%esi
539 shll $24,%edi
540 shll $24,%ebp
541
542 xorl %esi,%r8d
543 xorl %edi,%r10d
544 xorl %ebp,%r11d
545
546 movzbl %dh,%esi
547 movzbl %ah,%edi
548 movl 16+12(%r15),%edx
549 movzbl (%r14,%rsi,1),%esi
550 movzbl (%r14,%rdi,1),%edi
551 movl 16+0(%r15),%eax
552
553 shll $24,%esi
554 shll $24,%edi
555
556 xorl %esi,%r12d
557 xorl %edi,%r8d
558
559 movl 16+4(%r15),%ebx
560 movl 16+8(%r15),%ecx
561 leaq -2048(%r14),%r14
562 xorl %r10d,%eax
563 xorl %r11d,%ebx
564 xorl %r12d,%ecx
565 xorl %r8d,%edx
566.byte 0xf3,0xc3
567
568
569.p2align 4
570_x86_64_AES_decrypt_compact:
571 leaq 128(%r14),%r8
572 movl 0-128(%r8),%edi
573 movl 32-128(%r8),%ebp
574 movl 64-128(%r8),%r10d
575 movl 96-128(%r8),%r11d
576 movl 128-128(%r8),%edi
577 movl 160-128(%r8),%ebp
578 movl 192-128(%r8),%r10d
579 movl 224-128(%r8),%r11d
580 jmp L$dec_loop_compact
581
582.p2align 4
583L$dec_loop_compact:
584 xorl 0(%r15),%eax
585 xorl 4(%r15),%ebx
586 xorl 8(%r15),%ecx
587 xorl 12(%r15),%edx
588 leaq 16(%r15),%r15
589 movzbl %al,%r10d
590 movzbl %bl,%r11d
591 movzbl %cl,%r12d
592 movzbl %dl,%r8d
593 movzbl %dh,%esi
594 movzbl %ah,%edi
595 shrl $16,%edx
596 movzbl %bh,%ebp
597 movzbl (%r14,%r10,1),%r10d
598 movzbl (%r14,%r11,1),%r11d
599 movzbl (%r14,%r12,1),%r12d
600 movzbl (%r14,%r8,1),%r8d
601
602 movzbl (%r14,%rsi,1),%r9d
603 movzbl %ch,%esi
604 movzbl (%r14,%rdi,1),%r13d
605 movzbl (%r14,%rbp,1),%ebp
606 movzbl (%r14,%rsi,1),%esi
607
608 shrl $16,%ecx
609 shll $8,%r13d
610 shll $8,%r9d
611 movzbl %cl,%edi
612 shrl $16,%eax
613 xorl %r9d,%r10d
614 shrl $16,%ebx
615 movzbl %dl,%r9d
616
617 shll $8,%ebp
618 xorl %r13d,%r11d
619 shll $8,%esi
620 movzbl %al,%r13d
621 movzbl (%r14,%rdi,1),%edi
622 xorl %ebp,%r12d
623 movzbl %bl,%ebp
624
625 shll $16,%edi
626 xorl %esi,%r8d
627 movzbl (%r14,%r9,1),%r9d
628 movzbl %bh,%esi
629 movzbl (%r14,%rbp,1),%ebp
630 xorl %edi,%r10d
631 movzbl (%r14,%r13,1),%r13d
632 movzbl %ch,%edi
633
634 shll $16,%ebp
635 shll $16,%r9d
636 shll $16,%r13d
637 xorl %ebp,%r8d
638 movzbl %dh,%ebp
639 xorl %r9d,%r11d
640 shrl $8,%eax
641 xorl %r13d,%r12d
642
643 movzbl (%r14,%rsi,1),%esi
644 movzbl (%r14,%rdi,1),%ebx
645 movzbl (%r14,%rbp,1),%ecx
646 movzbl (%r14,%rax,1),%edx
647
648 movl %r10d,%eax
649 shll $24,%esi
650 shll $24,%ebx
651 shll $24,%ecx
652 xorl %esi,%eax
653 shll $24,%edx
654 xorl %r11d,%ebx
655 xorl %r12d,%ecx
656 xorl %r8d,%edx
657 cmpq 16(%rsp),%r15
658 je L$dec_compact_done
659
660 movq 256+0(%r14),%rsi
661 shlq $32,%rbx
662 shlq $32,%rdx
663 movq 256+8(%r14),%rdi
664 orq %rbx,%rax
665 orq %rdx,%rcx
666 movq 256+16(%r14),%rbp
667 movq %rsi,%r9
668 movq %rsi,%r12
669 andq %rax,%r9
670 andq %rcx,%r12
671 movq %r9,%rbx
672 movq %r12,%rdx
673 shrq $7,%r9
674 leaq (%rax,%rax,1),%r8
675 shrq $7,%r12
676 leaq (%rcx,%rcx,1),%r11
677 subq %r9,%rbx
678 subq %r12,%rdx
679 andq %rdi,%r8
680 andq %rdi,%r11
681 andq %rbp,%rbx
682 andq %rbp,%rdx
683 xorq %rbx,%r8
684 xorq %rdx,%r11
685 movq %rsi,%r10
686 movq %rsi,%r13
687
688 andq %r8,%r10
689 andq %r11,%r13
690 movq %r10,%rbx
691 movq %r13,%rdx
692 shrq $7,%r10
693 leaq (%r8,%r8,1),%r9
694 shrq $7,%r13
695 leaq (%r11,%r11,1),%r12
696 subq %r10,%rbx
697 subq %r13,%rdx
698 andq %rdi,%r9
699 andq %rdi,%r12
700 andq %rbp,%rbx
701 andq %rbp,%rdx
702 xorq %rbx,%r9
703 xorq %rdx,%r12
704 movq %rsi,%r10
705 movq %rsi,%r13
706
707 andq %r9,%r10
708 andq %r12,%r13
709 movq %r10,%rbx
710 movq %r13,%rdx
711 shrq $7,%r10
712 xorq %rax,%r8
713 shrq $7,%r13
714 xorq %rcx,%r11
715 subq %r10,%rbx
716 subq %r13,%rdx
717 leaq (%r9,%r9,1),%r10
718 leaq (%r12,%r12,1),%r13
719 xorq %rax,%r9
720 xorq %rcx,%r12
721 andq %rdi,%r10
722 andq %rdi,%r13
723 andq %rbp,%rbx
724 andq %rbp,%rdx
725 xorq %rbx,%r10
726 xorq %rdx,%r13
727
728 xorq %r10,%rax
729 xorq %r13,%rcx
730 xorq %r10,%r8
731 xorq %r13,%r11
732 movq %rax,%rbx
733 movq %rcx,%rdx
734 xorq %r10,%r9
735 shrq $32,%rbx
736 xorq %r13,%r12
737 shrq $32,%rdx
738 xorq %r8,%r10
739 roll $8,%eax
740 xorq %r11,%r13
741 roll $8,%ecx
742 xorq %r9,%r10
743 roll $8,%ebx
744 xorq %r12,%r13
745
746 roll $8,%edx
747 xorl %r10d,%eax
748 shrq $32,%r10
749 xorl %r13d,%ecx
750 shrq $32,%r13
751 xorl %r10d,%ebx
752 xorl %r13d,%edx
753
754 movq %r8,%r10
755 roll $24,%r8d
756 movq %r11,%r13
757 roll $24,%r11d
758 shrq $32,%r10
759 xorl %r8d,%eax
760 shrq $32,%r13
761 xorl %r11d,%ecx
762 roll $24,%r10d
763 movq %r9,%r8
764 roll $24,%r13d
765 movq %r12,%r11
766 shrq $32,%r8
767 xorl %r10d,%ebx
768 shrq $32,%r11
769 xorl %r13d,%edx
770
771 movq 0(%r14),%rsi
772 roll $16,%r9d
773 movq 64(%r14),%rdi
774 roll $16,%r12d
775 movq 128(%r14),%rbp
776 roll $16,%r8d
777 movq 192(%r14),%r10
778 xorl %r9d,%eax
779 roll $16,%r11d
780 xorl %r12d,%ecx
781 movq 256(%r14),%r13
782 xorl %r8d,%ebx
783 xorl %r11d,%edx
784 jmp L$dec_loop_compact
785.p2align 4
786L$dec_compact_done:
787 xorl 0(%r15),%eax
788 xorl 4(%r15),%ebx
789 xorl 8(%r15),%ecx
790 xorl 12(%r15),%edx
791.byte 0xf3,0xc3
792
793.p2align 4
794.globl _asm_AES_decrypt
795.private_extern _asm_AES_decrypt
796
797.private_extern _asm_AES_decrypt
798_asm_AES_decrypt:
Robert Sloanab8b8882018-03-26 11:39:51 -0700799
Robert Sloana94fe052017-02-21 08:49:28 -0800800 movq %rsp,%rax
Robert Sloanab8b8882018-03-26 11:39:51 -0700801
Adam Langleyd9e397b2015-01-22 14:27:53 -0800802 pushq %rbx
Robert Sloanab8b8882018-03-26 11:39:51 -0700803
Adam Langleyd9e397b2015-01-22 14:27:53 -0800804 pushq %rbp
Robert Sloanab8b8882018-03-26 11:39:51 -0700805
Adam Langleyd9e397b2015-01-22 14:27:53 -0800806 pushq %r12
Robert Sloanab8b8882018-03-26 11:39:51 -0700807
Adam Langleyd9e397b2015-01-22 14:27:53 -0800808 pushq %r13
Robert Sloanab8b8882018-03-26 11:39:51 -0700809
Adam Langleyd9e397b2015-01-22 14:27:53 -0800810 pushq %r14
Robert Sloanab8b8882018-03-26 11:39:51 -0700811
Adam Langleyd9e397b2015-01-22 14:27:53 -0800812 pushq %r15
813
814
Robert Sloanab8b8882018-03-26 11:39:51 -0700815
Adam Langleyd9e397b2015-01-22 14:27:53 -0800816 leaq -63(%rdx),%rcx
817 andq $-64,%rsp
818 subq %rsp,%rcx
819 negq %rcx
David Benjamin4969cc92016-04-22 15:02:23 -0400820 andq $0x3c0,%rcx
Adam Langleyd9e397b2015-01-22 14:27:53 -0800821 subq %rcx,%rsp
822 subq $32,%rsp
823
824 movq %rsi,16(%rsp)
Robert Sloana94fe052017-02-21 08:49:28 -0800825 movq %rax,24(%rsp)
Robert Sloanab8b8882018-03-26 11:39:51 -0700826
Adam Langleyd9e397b2015-01-22 14:27:53 -0800827L$dec_prologue:
828
829 movq %rdx,%r15
830 movl 240(%r15),%r13d
831
832 movl 0(%rdi),%eax
833 movl 4(%rdi),%ebx
834 movl 8(%rdi),%ecx
835 movl 12(%rdi),%edx
836
837 shll $4,%r13d
838 leaq (%r15,%r13,1),%rbp
839 movq %r15,(%rsp)
840 movq %rbp,8(%rsp)
841
842
843 leaq L$AES_Td+2048(%rip),%r14
844 leaq 768(%rsp),%rbp
845 subq %r14,%rbp
David Benjamin4969cc92016-04-22 15:02:23 -0400846 andq $0x300,%rbp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800847 leaq (%r14,%rbp,1),%r14
848 shrq $3,%rbp
849 addq %rbp,%r14
850
851 call _x86_64_AES_decrypt_compact
852
853 movq 16(%rsp),%r9
854 movq 24(%rsp),%rsi
Robert Sloanab8b8882018-03-26 11:39:51 -0700855
Adam Langleyd9e397b2015-01-22 14:27:53 -0800856 movl %eax,0(%r9)
857 movl %ebx,4(%r9)
858 movl %ecx,8(%r9)
859 movl %edx,12(%r9)
860
Robert Sloana94fe052017-02-21 08:49:28 -0800861 movq -48(%rsi),%r15
Robert Sloanab8b8882018-03-26 11:39:51 -0700862
Robert Sloana94fe052017-02-21 08:49:28 -0800863 movq -40(%rsi),%r14
Robert Sloanab8b8882018-03-26 11:39:51 -0700864
Robert Sloana94fe052017-02-21 08:49:28 -0800865 movq -32(%rsi),%r13
Robert Sloanab8b8882018-03-26 11:39:51 -0700866
Robert Sloana94fe052017-02-21 08:49:28 -0800867 movq -24(%rsi),%r12
Robert Sloanab8b8882018-03-26 11:39:51 -0700868
Robert Sloana94fe052017-02-21 08:49:28 -0800869 movq -16(%rsi),%rbp
Robert Sloanab8b8882018-03-26 11:39:51 -0700870
Robert Sloana94fe052017-02-21 08:49:28 -0800871 movq -8(%rsi),%rbx
Robert Sloanab8b8882018-03-26 11:39:51 -0700872
Robert Sloana94fe052017-02-21 08:49:28 -0800873 leaq (%rsi),%rsp
Robert Sloanab8b8882018-03-26 11:39:51 -0700874
Adam Langleyd9e397b2015-01-22 14:27:53 -0800875L$dec_epilogue:
876 .byte 0xf3,0xc3
877
Robert Sloanab8b8882018-03-26 11:39:51 -0700878
Adam Langleyd9e397b2015-01-22 14:27:53 -0800879.p2align 4
880.globl _asm_AES_set_encrypt_key
881.private_extern _asm_AES_set_encrypt_key
882
883_asm_AES_set_encrypt_key:
Robert Sloanab8b8882018-03-26 11:39:51 -0700884
Adam Langleyd9e397b2015-01-22 14:27:53 -0800885 pushq %rbx
Robert Sloanab8b8882018-03-26 11:39:51 -0700886
Adam Langleyd9e397b2015-01-22 14:27:53 -0800887 pushq %rbp
Robert Sloanab8b8882018-03-26 11:39:51 -0700888
Adam Langleyd9e397b2015-01-22 14:27:53 -0800889 pushq %r12
Robert Sloanab8b8882018-03-26 11:39:51 -0700890
Adam Langleyd9e397b2015-01-22 14:27:53 -0800891 pushq %r13
Robert Sloanab8b8882018-03-26 11:39:51 -0700892
Adam Langleyd9e397b2015-01-22 14:27:53 -0800893 pushq %r14
Robert Sloanab8b8882018-03-26 11:39:51 -0700894
Adam Langleyd9e397b2015-01-22 14:27:53 -0800895 pushq %r15
Robert Sloanab8b8882018-03-26 11:39:51 -0700896
Adam Langleyd9e397b2015-01-22 14:27:53 -0800897 subq $8,%rsp
Robert Sloanab8b8882018-03-26 11:39:51 -0700898
Adam Langleyd9e397b2015-01-22 14:27:53 -0800899L$enc_key_prologue:
900
901 call _x86_64_AES_set_encrypt_key
902
903 movq 40(%rsp),%rbp
Robert Sloanab8b8882018-03-26 11:39:51 -0700904
Adam Langleyd9e397b2015-01-22 14:27:53 -0800905 movq 48(%rsp),%rbx
Robert Sloanab8b8882018-03-26 11:39:51 -0700906
Adam Langleyd9e397b2015-01-22 14:27:53 -0800907 addq $56,%rsp
Robert Sloanab8b8882018-03-26 11:39:51 -0700908
Adam Langleyd9e397b2015-01-22 14:27:53 -0800909L$enc_key_epilogue:
910 .byte 0xf3,0xc3
911
912
913
Robert Sloanab8b8882018-03-26 11:39:51 -0700914
Adam Langleyd9e397b2015-01-22 14:27:53 -0800915.p2align 4
916_x86_64_AES_set_encrypt_key:
917 movl %esi,%ecx
918 movq %rdi,%rsi
919 movq %rdx,%rdi
920
921 testq $-1,%rsi
922 jz L$badpointer
923 testq $-1,%rdi
924 jz L$badpointer
925
926 leaq L$AES_Te(%rip),%rbp
927 leaq 2048+128(%rbp),%rbp
928
929
930 movl 0-128(%rbp),%eax
931 movl 32-128(%rbp),%ebx
932 movl 64-128(%rbp),%r8d
933 movl 96-128(%rbp),%edx
934 movl 128-128(%rbp),%eax
935 movl 160-128(%rbp),%ebx
936 movl 192-128(%rbp),%r8d
937 movl 224-128(%rbp),%edx
938
939 cmpl $128,%ecx
940 je L$10rounds
941 cmpl $192,%ecx
942 je L$12rounds
943 cmpl $256,%ecx
944 je L$14rounds
945 movq $-2,%rax
946 jmp L$exit
947
948L$10rounds:
949 movq 0(%rsi),%rax
950 movq 8(%rsi),%rdx
951 movq %rax,0(%rdi)
952 movq %rdx,8(%rdi)
953
954 shrq $32,%rdx
955 xorl %ecx,%ecx
956 jmp L$10shortcut
957.p2align 2
958L$10loop:
959 movl 0(%rdi),%eax
960 movl 12(%rdi),%edx
961L$10shortcut:
962 movzbl %dl,%esi
963 movzbl -128(%rbp,%rsi,1),%ebx
964 movzbl %dh,%esi
965 shll $24,%ebx
966 xorl %ebx,%eax
967
968 movzbl -128(%rbp,%rsi,1),%ebx
969 shrl $16,%edx
970 movzbl %dl,%esi
971 xorl %ebx,%eax
972
973 movzbl -128(%rbp,%rsi,1),%ebx
974 movzbl %dh,%esi
975 shll $8,%ebx
976 xorl %ebx,%eax
977
978 movzbl -128(%rbp,%rsi,1),%ebx
979 shll $16,%ebx
980 xorl %ebx,%eax
981
982 xorl 1024-128(%rbp,%rcx,4),%eax
983 movl %eax,16(%rdi)
984 xorl 4(%rdi),%eax
985 movl %eax,20(%rdi)
986 xorl 8(%rdi),%eax
987 movl %eax,24(%rdi)
988 xorl 12(%rdi),%eax
989 movl %eax,28(%rdi)
990 addl $1,%ecx
991 leaq 16(%rdi),%rdi
992 cmpl $10,%ecx
993 jl L$10loop
994
995 movl $10,80(%rdi)
996 xorq %rax,%rax
997 jmp L$exit
998
999L$12rounds:
1000 movq 0(%rsi),%rax
1001 movq 8(%rsi),%rbx
1002 movq 16(%rsi),%rdx
1003 movq %rax,0(%rdi)
1004 movq %rbx,8(%rdi)
1005 movq %rdx,16(%rdi)
1006
1007 shrq $32,%rdx
1008 xorl %ecx,%ecx
1009 jmp L$12shortcut
1010.p2align 2
1011L$12loop:
1012 movl 0(%rdi),%eax
1013 movl 20(%rdi),%edx
1014L$12shortcut:
1015 movzbl %dl,%esi
1016 movzbl -128(%rbp,%rsi,1),%ebx
1017 movzbl %dh,%esi
1018 shll $24,%ebx
1019 xorl %ebx,%eax
1020
1021 movzbl -128(%rbp,%rsi,1),%ebx
1022 shrl $16,%edx
1023 movzbl %dl,%esi
1024 xorl %ebx,%eax
1025
1026 movzbl -128(%rbp,%rsi,1),%ebx
1027 movzbl %dh,%esi
1028 shll $8,%ebx
1029 xorl %ebx,%eax
1030
1031 movzbl -128(%rbp,%rsi,1),%ebx
1032 shll $16,%ebx
1033 xorl %ebx,%eax
1034
1035 xorl 1024-128(%rbp,%rcx,4),%eax
1036 movl %eax,24(%rdi)
1037 xorl 4(%rdi),%eax
1038 movl %eax,28(%rdi)
1039 xorl 8(%rdi),%eax
1040 movl %eax,32(%rdi)
1041 xorl 12(%rdi),%eax
1042 movl %eax,36(%rdi)
1043
1044 cmpl $7,%ecx
1045 je L$12break
1046 addl $1,%ecx
1047
1048 xorl 16(%rdi),%eax
1049 movl %eax,40(%rdi)
1050 xorl 20(%rdi),%eax
1051 movl %eax,44(%rdi)
1052
1053 leaq 24(%rdi),%rdi
1054 jmp L$12loop
1055L$12break:
1056 movl $12,72(%rdi)
1057 xorq %rax,%rax
1058 jmp L$exit
1059
1060L$14rounds:
1061 movq 0(%rsi),%rax
1062 movq 8(%rsi),%rbx
1063 movq 16(%rsi),%rcx
1064 movq 24(%rsi),%rdx
1065 movq %rax,0(%rdi)
1066 movq %rbx,8(%rdi)
1067 movq %rcx,16(%rdi)
1068 movq %rdx,24(%rdi)
1069
1070 shrq $32,%rdx
1071 xorl %ecx,%ecx
1072 jmp L$14shortcut
1073.p2align 2
1074L$14loop:
1075 movl 0(%rdi),%eax
1076 movl 28(%rdi),%edx
1077L$14shortcut:
1078 movzbl %dl,%esi
1079 movzbl -128(%rbp,%rsi,1),%ebx
1080 movzbl %dh,%esi
1081 shll $24,%ebx
1082 xorl %ebx,%eax
1083
1084 movzbl -128(%rbp,%rsi,1),%ebx
1085 shrl $16,%edx
1086 movzbl %dl,%esi
1087 xorl %ebx,%eax
1088
1089 movzbl -128(%rbp,%rsi,1),%ebx
1090 movzbl %dh,%esi
1091 shll $8,%ebx
1092 xorl %ebx,%eax
1093
1094 movzbl -128(%rbp,%rsi,1),%ebx
1095 shll $16,%ebx
1096 xorl %ebx,%eax
1097
1098 xorl 1024-128(%rbp,%rcx,4),%eax
1099 movl %eax,32(%rdi)
1100 xorl 4(%rdi),%eax
1101 movl %eax,36(%rdi)
1102 xorl 8(%rdi),%eax
1103 movl %eax,40(%rdi)
1104 xorl 12(%rdi),%eax
1105 movl %eax,44(%rdi)
1106
1107 cmpl $6,%ecx
1108 je L$14break
1109 addl $1,%ecx
1110
1111 movl %eax,%edx
1112 movl 16(%rdi),%eax
1113 movzbl %dl,%esi
1114 movzbl -128(%rbp,%rsi,1),%ebx
1115 movzbl %dh,%esi
1116 xorl %ebx,%eax
1117
1118 movzbl -128(%rbp,%rsi,1),%ebx
1119 shrl $16,%edx
1120 shll $8,%ebx
1121 movzbl %dl,%esi
1122 xorl %ebx,%eax
1123
1124 movzbl -128(%rbp,%rsi,1),%ebx
1125 movzbl %dh,%esi
1126 shll $16,%ebx
1127 xorl %ebx,%eax
1128
1129 movzbl -128(%rbp,%rsi,1),%ebx
1130 shll $24,%ebx
1131 xorl %ebx,%eax
1132
1133 movl %eax,48(%rdi)
1134 xorl 20(%rdi),%eax
1135 movl %eax,52(%rdi)
1136 xorl 24(%rdi),%eax
1137 movl %eax,56(%rdi)
1138 xorl 28(%rdi),%eax
1139 movl %eax,60(%rdi)
1140
1141 leaq 32(%rdi),%rdi
1142 jmp L$14loop
1143L$14break:
1144 movl $14,48(%rdi)
1145 xorq %rax,%rax
1146 jmp L$exit
1147
1148L$badpointer:
1149 movq $-1,%rax
1150L$exit:
1151.byte 0xf3,0xc3
1152
1153.p2align 4
1154.globl _asm_AES_set_decrypt_key
1155.private_extern _asm_AES_set_decrypt_key
1156
1157_asm_AES_set_decrypt_key:
Robert Sloanab8b8882018-03-26 11:39:51 -07001158
Adam Langleyd9e397b2015-01-22 14:27:53 -08001159 pushq %rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07001160
Adam Langleyd9e397b2015-01-22 14:27:53 -08001161 pushq %rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07001162
Adam Langleyd9e397b2015-01-22 14:27:53 -08001163 pushq %r12
Robert Sloanab8b8882018-03-26 11:39:51 -07001164
Adam Langleyd9e397b2015-01-22 14:27:53 -08001165 pushq %r13
Robert Sloanab8b8882018-03-26 11:39:51 -07001166
Adam Langleyd9e397b2015-01-22 14:27:53 -08001167 pushq %r14
Robert Sloanab8b8882018-03-26 11:39:51 -07001168
Adam Langleyd9e397b2015-01-22 14:27:53 -08001169 pushq %r15
Robert Sloanab8b8882018-03-26 11:39:51 -07001170
Adam Langleyd9e397b2015-01-22 14:27:53 -08001171 pushq %rdx
Robert Sloanab8b8882018-03-26 11:39:51 -07001172
Adam Langleyd9e397b2015-01-22 14:27:53 -08001173L$dec_key_prologue:
1174
1175 call _x86_64_AES_set_encrypt_key
1176 movq (%rsp),%r8
1177 cmpl $0,%eax
1178 jne L$abort
1179
1180 movl 240(%r8),%r14d
1181 xorq %rdi,%rdi
1182 leaq (%rdi,%r14,4),%rcx
1183 movq %r8,%rsi
1184 leaq (%r8,%rcx,4),%rdi
1185.p2align 2
1186L$invert:
1187 movq 0(%rsi),%rax
1188 movq 8(%rsi),%rbx
1189 movq 0(%rdi),%rcx
1190 movq 8(%rdi),%rdx
1191 movq %rax,0(%rdi)
1192 movq %rbx,8(%rdi)
1193 movq %rcx,0(%rsi)
1194 movq %rdx,8(%rsi)
1195 leaq 16(%rsi),%rsi
1196 leaq -16(%rdi),%rdi
1197 cmpq %rsi,%rdi
1198 jne L$invert
1199
1200 leaq L$AES_Te+2048+1024(%rip),%rax
1201
1202 movq 40(%rax),%rsi
1203 movq 48(%rax),%rdi
1204 movq 56(%rax),%rbp
1205
1206 movq %r8,%r15
1207 subl $1,%r14d
1208.p2align 2
1209L$permute:
1210 leaq 16(%r15),%r15
1211 movq 0(%r15),%rax
1212 movq 8(%r15),%rcx
1213 movq %rsi,%r9
1214 movq %rsi,%r12
1215 andq %rax,%r9
1216 andq %rcx,%r12
1217 movq %r9,%rbx
1218 movq %r12,%rdx
1219 shrq $7,%r9
1220 leaq (%rax,%rax,1),%r8
1221 shrq $7,%r12
1222 leaq (%rcx,%rcx,1),%r11
1223 subq %r9,%rbx
1224 subq %r12,%rdx
1225 andq %rdi,%r8
1226 andq %rdi,%r11
1227 andq %rbp,%rbx
1228 andq %rbp,%rdx
1229 xorq %rbx,%r8
1230 xorq %rdx,%r11
1231 movq %rsi,%r10
1232 movq %rsi,%r13
1233
1234 andq %r8,%r10
1235 andq %r11,%r13
1236 movq %r10,%rbx
1237 movq %r13,%rdx
1238 shrq $7,%r10
1239 leaq (%r8,%r8,1),%r9
1240 shrq $7,%r13
1241 leaq (%r11,%r11,1),%r12
1242 subq %r10,%rbx
1243 subq %r13,%rdx
1244 andq %rdi,%r9
1245 andq %rdi,%r12
1246 andq %rbp,%rbx
1247 andq %rbp,%rdx
1248 xorq %rbx,%r9
1249 xorq %rdx,%r12
1250 movq %rsi,%r10
1251 movq %rsi,%r13
1252
1253 andq %r9,%r10
1254 andq %r12,%r13
1255 movq %r10,%rbx
1256 movq %r13,%rdx
1257 shrq $7,%r10
1258 xorq %rax,%r8
1259 shrq $7,%r13
1260 xorq %rcx,%r11
1261 subq %r10,%rbx
1262 subq %r13,%rdx
1263 leaq (%r9,%r9,1),%r10
1264 leaq (%r12,%r12,1),%r13
1265 xorq %rax,%r9
1266 xorq %rcx,%r12
1267 andq %rdi,%r10
1268 andq %rdi,%r13
1269 andq %rbp,%rbx
1270 andq %rbp,%rdx
1271 xorq %rbx,%r10
1272 xorq %rdx,%r13
1273
1274 xorq %r10,%rax
1275 xorq %r13,%rcx
1276 xorq %r10,%r8
1277 xorq %r13,%r11
1278 movq %rax,%rbx
1279 movq %rcx,%rdx
1280 xorq %r10,%r9
1281 shrq $32,%rbx
1282 xorq %r13,%r12
1283 shrq $32,%rdx
1284 xorq %r8,%r10
1285 roll $8,%eax
1286 xorq %r11,%r13
1287 roll $8,%ecx
1288 xorq %r9,%r10
1289 roll $8,%ebx
1290 xorq %r12,%r13
1291
1292 roll $8,%edx
1293 xorl %r10d,%eax
1294 shrq $32,%r10
1295 xorl %r13d,%ecx
1296 shrq $32,%r13
1297 xorl %r10d,%ebx
1298 xorl %r13d,%edx
1299
1300 movq %r8,%r10
1301 roll $24,%r8d
1302 movq %r11,%r13
1303 roll $24,%r11d
1304 shrq $32,%r10
1305 xorl %r8d,%eax
1306 shrq $32,%r13
1307 xorl %r11d,%ecx
1308 roll $24,%r10d
1309 movq %r9,%r8
1310 roll $24,%r13d
1311 movq %r12,%r11
1312 shrq $32,%r8
1313 xorl %r10d,%ebx
1314 shrq $32,%r11
1315 xorl %r13d,%edx
1316
1317
1318 roll $16,%r9d
1319
1320 roll $16,%r12d
1321
1322 roll $16,%r8d
1323
1324 xorl %r9d,%eax
1325 roll $16,%r11d
1326 xorl %r12d,%ecx
1327
1328 xorl %r8d,%ebx
1329 xorl %r11d,%edx
1330 movl %eax,0(%r15)
1331 movl %ebx,4(%r15)
1332 movl %ecx,8(%r15)
1333 movl %edx,12(%r15)
1334 subl $1,%r14d
1335 jnz L$permute
1336
1337 xorq %rax,%rax
1338L$abort:
1339 movq 8(%rsp),%r15
Robert Sloanab8b8882018-03-26 11:39:51 -07001340
Adam Langleyd9e397b2015-01-22 14:27:53 -08001341 movq 16(%rsp),%r14
Robert Sloanab8b8882018-03-26 11:39:51 -07001342
Adam Langleyd9e397b2015-01-22 14:27:53 -08001343 movq 24(%rsp),%r13
Robert Sloanab8b8882018-03-26 11:39:51 -07001344
Adam Langleyd9e397b2015-01-22 14:27:53 -08001345 movq 32(%rsp),%r12
Robert Sloanab8b8882018-03-26 11:39:51 -07001346
Adam Langleyd9e397b2015-01-22 14:27:53 -08001347 movq 40(%rsp),%rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07001348
Adam Langleyd9e397b2015-01-22 14:27:53 -08001349 movq 48(%rsp),%rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07001350
Adam Langleyd9e397b2015-01-22 14:27:53 -08001351 addq $56,%rsp
Robert Sloanab8b8882018-03-26 11:39:51 -07001352
Adam Langleyd9e397b2015-01-22 14:27:53 -08001353L$dec_key_epilogue:
1354 .byte 0xf3,0xc3
1355
Robert Sloanab8b8882018-03-26 11:39:51 -07001356
Adam Langleyd9e397b2015-01-22 14:27:53 -08001357.p2align 4
1358.globl _asm_AES_cbc_encrypt
1359.private_extern _asm_AES_cbc_encrypt
1360
1361
1362.private_extern _asm_AES_cbc_encrypt
1363_asm_AES_cbc_encrypt:
Robert Sloanab8b8882018-03-26 11:39:51 -07001364
Adam Langleyd9e397b2015-01-22 14:27:53 -08001365 cmpq $0,%rdx
1366 je L$cbc_epilogue
1367 pushfq
Robert Sloanab8b8882018-03-26 11:39:51 -07001368
Adam Langleyd9e397b2015-01-22 14:27:53 -08001369 pushq %rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07001370
Adam Langleyd9e397b2015-01-22 14:27:53 -08001371 pushq %rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07001372
Adam Langleyd9e397b2015-01-22 14:27:53 -08001373 pushq %r12
Robert Sloanab8b8882018-03-26 11:39:51 -07001374
Adam Langleyd9e397b2015-01-22 14:27:53 -08001375 pushq %r13
Robert Sloanab8b8882018-03-26 11:39:51 -07001376
Adam Langleyd9e397b2015-01-22 14:27:53 -08001377 pushq %r14
Robert Sloanab8b8882018-03-26 11:39:51 -07001378
Adam Langleyd9e397b2015-01-22 14:27:53 -08001379 pushq %r15
Robert Sloanab8b8882018-03-26 11:39:51 -07001380
Adam Langleyd9e397b2015-01-22 14:27:53 -08001381L$cbc_prologue:
1382
1383 cld
1384 movl %r9d,%r9d
1385
1386 leaq L$AES_Te(%rip),%r14
Robert Sloana94fe052017-02-21 08:49:28 -08001387 leaq L$AES_Td(%rip),%r10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001388 cmpq $0,%r9
Robert Sloana94fe052017-02-21 08:49:28 -08001389 cmoveq %r10,%r14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001390
Robert Sloan2424d842017-05-01 07:46:28 -07001391 leaq _OPENSSL_ia32cap_P(%rip),%r10
Robert Sloan572a4e22017-04-17 10:52:19 -07001392 movl (%r10),%r10d
Adam Langleyd9e397b2015-01-22 14:27:53 -08001393 cmpq $512,%rdx
1394 jb L$cbc_slow_prologue
1395 testq $15,%rdx
1396 jnz L$cbc_slow_prologue
1397 btl $28,%r10d
1398 jc L$cbc_slow_prologue
1399
1400
1401 leaq -88-248(%rsp),%r15
1402 andq $-64,%r15
1403
1404
1405 movq %r14,%r10
1406 leaq 2304(%r14),%r11
1407 movq %r15,%r12
David Benjamin4969cc92016-04-22 15:02:23 -04001408 andq $0xFFF,%r10
1409 andq $0xFFF,%r11
1410 andq $0xFFF,%r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001411
1412 cmpq %r11,%r12
1413 jb L$cbc_te_break_out
1414 subq %r11,%r12
1415 subq %r12,%r15
1416 jmp L$cbc_te_ok
1417L$cbc_te_break_out:
1418 subq %r10,%r12
David Benjamin4969cc92016-04-22 15:02:23 -04001419 andq $0xFFF,%r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001420 addq $320,%r12
1421 subq %r12,%r15
1422.p2align 2
1423L$cbc_te_ok:
1424
1425 xchgq %rsp,%r15
1426
Robert Sloanab8b8882018-03-26 11:39:51 -07001427
Adam Langleyd9e397b2015-01-22 14:27:53 -08001428 movq %r15,16(%rsp)
Robert Sloanab8b8882018-03-26 11:39:51 -07001429
Adam Langleyd9e397b2015-01-22 14:27:53 -08001430L$cbc_fast_body:
1431 movq %rdi,24(%rsp)
1432 movq %rsi,32(%rsp)
1433 movq %rdx,40(%rsp)
1434 movq %rcx,48(%rsp)
1435 movq %r8,56(%rsp)
1436 movl $0,80+240(%rsp)
1437 movq %r8,%rbp
1438 movq %r9,%rbx
1439 movq %rsi,%r9
1440 movq %rdi,%r8
1441 movq %rcx,%r15
1442
1443 movl 240(%r15),%eax
1444
1445 movq %r15,%r10
1446 subq %r14,%r10
David Benjamin4969cc92016-04-22 15:02:23 -04001447 andq $0xfff,%r10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001448 cmpq $2304,%r10
1449 jb L$cbc_do_ecopy
1450 cmpq $4096-248,%r10
1451 jb L$cbc_skip_ecopy
1452.p2align 2
1453L$cbc_do_ecopy:
1454 movq %r15,%rsi
1455 leaq 80(%rsp),%rdi
1456 leaq 80(%rsp),%r15
1457 movl $30,%ecx
1458.long 0x90A548F3
1459 movl %eax,(%rdi)
1460L$cbc_skip_ecopy:
1461 movq %r15,0(%rsp)
1462
1463 movl $18,%ecx
1464.p2align 2
1465L$cbc_prefetch_te:
1466 movq 0(%r14),%r10
1467 movq 32(%r14),%r11
1468 movq 64(%r14),%r12
1469 movq 96(%r14),%r13
1470 leaq 128(%r14),%r14
1471 subl $1,%ecx
1472 jnz L$cbc_prefetch_te
1473 leaq -2304(%r14),%r14
1474
1475 cmpq $0,%rbx
1476 je L$FAST_DECRYPT
1477
1478
1479 movl 0(%rbp),%eax
1480 movl 4(%rbp),%ebx
1481 movl 8(%rbp),%ecx
1482 movl 12(%rbp),%edx
1483
1484.p2align 2
1485L$cbc_fast_enc_loop:
1486 xorl 0(%r8),%eax
1487 xorl 4(%r8),%ebx
1488 xorl 8(%r8),%ecx
1489 xorl 12(%r8),%edx
1490 movq 0(%rsp),%r15
1491 movq %r8,24(%rsp)
1492
1493 call _x86_64_AES_encrypt
1494
1495 movq 24(%rsp),%r8
1496 movq 40(%rsp),%r10
1497 movl %eax,0(%r9)
1498 movl %ebx,4(%r9)
1499 movl %ecx,8(%r9)
1500 movl %edx,12(%r9)
1501
1502 leaq 16(%r8),%r8
1503 leaq 16(%r9),%r9
1504 subq $16,%r10
1505 testq $-16,%r10
1506 movq %r10,40(%rsp)
1507 jnz L$cbc_fast_enc_loop
1508 movq 56(%rsp),%rbp
1509 movl %eax,0(%rbp)
1510 movl %ebx,4(%rbp)
1511 movl %ecx,8(%rbp)
1512 movl %edx,12(%rbp)
1513
1514 jmp L$cbc_fast_cleanup
1515
1516
1517.p2align 4
1518L$FAST_DECRYPT:
1519 cmpq %r8,%r9
1520 je L$cbc_fast_dec_in_place
1521
1522 movq %rbp,64(%rsp)
1523.p2align 2
1524L$cbc_fast_dec_loop:
1525 movl 0(%r8),%eax
1526 movl 4(%r8),%ebx
1527 movl 8(%r8),%ecx
1528 movl 12(%r8),%edx
1529 movq 0(%rsp),%r15
1530 movq %r8,24(%rsp)
1531
1532 call _x86_64_AES_decrypt
1533
1534 movq 64(%rsp),%rbp
1535 movq 24(%rsp),%r8
1536 movq 40(%rsp),%r10
1537 xorl 0(%rbp),%eax
1538 xorl 4(%rbp),%ebx
1539 xorl 8(%rbp),%ecx
1540 xorl 12(%rbp),%edx
1541 movq %r8,%rbp
1542
1543 subq $16,%r10
1544 movq %r10,40(%rsp)
1545 movq %rbp,64(%rsp)
1546
1547 movl %eax,0(%r9)
1548 movl %ebx,4(%r9)
1549 movl %ecx,8(%r9)
1550 movl %edx,12(%r9)
1551
1552 leaq 16(%r8),%r8
1553 leaq 16(%r9),%r9
1554 jnz L$cbc_fast_dec_loop
1555 movq 56(%rsp),%r12
1556 movq 0(%rbp),%r10
1557 movq 8(%rbp),%r11
1558 movq %r10,0(%r12)
1559 movq %r11,8(%r12)
1560 jmp L$cbc_fast_cleanup
1561
1562.p2align 4
1563L$cbc_fast_dec_in_place:
1564 movq 0(%rbp),%r10
1565 movq 8(%rbp),%r11
1566 movq %r10,0+64(%rsp)
1567 movq %r11,8+64(%rsp)
1568.p2align 2
1569L$cbc_fast_dec_in_place_loop:
1570 movl 0(%r8),%eax
1571 movl 4(%r8),%ebx
1572 movl 8(%r8),%ecx
1573 movl 12(%r8),%edx
1574 movq 0(%rsp),%r15
1575 movq %r8,24(%rsp)
1576
1577 call _x86_64_AES_decrypt
1578
1579 movq 24(%rsp),%r8
1580 movq 40(%rsp),%r10
1581 xorl 0+64(%rsp),%eax
1582 xorl 4+64(%rsp),%ebx
1583 xorl 8+64(%rsp),%ecx
1584 xorl 12+64(%rsp),%edx
1585
1586 movq 0(%r8),%r11
1587 movq 8(%r8),%r12
1588 subq $16,%r10
1589 jz L$cbc_fast_dec_in_place_done
1590
1591 movq %r11,0+64(%rsp)
1592 movq %r12,8+64(%rsp)
1593
1594 movl %eax,0(%r9)
1595 movl %ebx,4(%r9)
1596 movl %ecx,8(%r9)
1597 movl %edx,12(%r9)
1598
1599 leaq 16(%r8),%r8
1600 leaq 16(%r9),%r9
1601 movq %r10,40(%rsp)
1602 jmp L$cbc_fast_dec_in_place_loop
1603L$cbc_fast_dec_in_place_done:
1604 movq 56(%rsp),%rdi
1605 movq %r11,0(%rdi)
1606 movq %r12,8(%rdi)
1607
1608 movl %eax,0(%r9)
1609 movl %ebx,4(%r9)
1610 movl %ecx,8(%r9)
1611 movl %edx,12(%r9)
1612
1613.p2align 2
1614L$cbc_fast_cleanup:
1615 cmpl $0,80+240(%rsp)
1616 leaq 80(%rsp),%rdi
1617 je L$cbc_exit
1618 movl $30,%ecx
1619 xorq %rax,%rax
1620.long 0x90AB48F3
1621
1622 jmp L$cbc_exit
1623
1624
1625.p2align 4
1626L$cbc_slow_prologue:
1627
1628 leaq -88(%rsp),%rbp
1629 andq $-64,%rbp
1630
1631 leaq -88-63(%rcx),%r10
1632 subq %rbp,%r10
1633 negq %r10
David Benjamin4969cc92016-04-22 15:02:23 -04001634 andq $0x3c0,%r10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001635 subq %r10,%rbp
1636
1637 xchgq %rsp,%rbp
1638
1639 movq %rbp,16(%rsp)
1640L$cbc_slow_body:
1641
1642
1643
1644
1645 movq %r8,56(%rsp)
1646 movq %r8,%rbp
1647 movq %r9,%rbx
1648 movq %rsi,%r9
1649 movq %rdi,%r8
1650 movq %rcx,%r15
1651 movq %rdx,%r10
1652
1653 movl 240(%r15),%eax
1654 movq %r15,0(%rsp)
1655 shll $4,%eax
1656 leaq (%r15,%rax,1),%rax
1657 movq %rax,8(%rsp)
1658
1659
1660 leaq 2048(%r14),%r14
1661 leaq 768-8(%rsp),%rax
1662 subq %r14,%rax
David Benjamin4969cc92016-04-22 15:02:23 -04001663 andq $0x300,%rax
Adam Langleyd9e397b2015-01-22 14:27:53 -08001664 leaq (%r14,%rax,1),%r14
1665
1666 cmpq $0,%rbx
1667 je L$SLOW_DECRYPT
1668
1669
1670 testq $-16,%r10
1671 movl 0(%rbp),%eax
1672 movl 4(%rbp),%ebx
1673 movl 8(%rbp),%ecx
1674 movl 12(%rbp),%edx
1675 jz L$cbc_slow_enc_tail
1676
1677.p2align 2
1678L$cbc_slow_enc_loop:
1679 xorl 0(%r8),%eax
1680 xorl 4(%r8),%ebx
1681 xorl 8(%r8),%ecx
1682 xorl 12(%r8),%edx
1683 movq 0(%rsp),%r15
1684 movq %r8,24(%rsp)
1685 movq %r9,32(%rsp)
1686 movq %r10,40(%rsp)
1687
1688 call _x86_64_AES_encrypt_compact
1689
1690 movq 24(%rsp),%r8
1691 movq 32(%rsp),%r9
1692 movq 40(%rsp),%r10
1693 movl %eax,0(%r9)
1694 movl %ebx,4(%r9)
1695 movl %ecx,8(%r9)
1696 movl %edx,12(%r9)
1697
1698 leaq 16(%r8),%r8
1699 leaq 16(%r9),%r9
1700 subq $16,%r10
1701 testq $-16,%r10
1702 jnz L$cbc_slow_enc_loop
1703 testq $15,%r10
1704 jnz L$cbc_slow_enc_tail
1705 movq 56(%rsp),%rbp
1706 movl %eax,0(%rbp)
1707 movl %ebx,4(%rbp)
1708 movl %ecx,8(%rbp)
1709 movl %edx,12(%rbp)
1710
1711 jmp L$cbc_exit
1712
1713.p2align 2
1714L$cbc_slow_enc_tail:
1715 movq %rax,%r11
1716 movq %rcx,%r12
1717 movq %r10,%rcx
1718 movq %r8,%rsi
1719 movq %r9,%rdi
1720.long 0x9066A4F3
1721 movq $16,%rcx
1722 subq %r10,%rcx
1723 xorq %rax,%rax
1724.long 0x9066AAF3
1725 movq %r9,%r8
1726 movq $16,%r10
1727 movq %r11,%rax
1728 movq %r12,%rcx
1729 jmp L$cbc_slow_enc_loop
1730
1731.p2align 4
1732L$SLOW_DECRYPT:
1733 shrq $3,%rax
1734 addq %rax,%r14
1735
1736 movq 0(%rbp),%r11
1737 movq 8(%rbp),%r12
1738 movq %r11,0+64(%rsp)
1739 movq %r12,8+64(%rsp)
1740
1741.p2align 2
1742L$cbc_slow_dec_loop:
1743 movl 0(%r8),%eax
1744 movl 4(%r8),%ebx
1745 movl 8(%r8),%ecx
1746 movl 12(%r8),%edx
1747 movq 0(%rsp),%r15
1748 movq %r8,24(%rsp)
1749 movq %r9,32(%rsp)
1750 movq %r10,40(%rsp)
1751
1752 call _x86_64_AES_decrypt_compact
1753
1754 movq 24(%rsp),%r8
1755 movq 32(%rsp),%r9
1756 movq 40(%rsp),%r10
1757 xorl 0+64(%rsp),%eax
1758 xorl 4+64(%rsp),%ebx
1759 xorl 8+64(%rsp),%ecx
1760 xorl 12+64(%rsp),%edx
1761
1762 movq 0(%r8),%r11
1763 movq 8(%r8),%r12
1764 subq $16,%r10
1765 jc L$cbc_slow_dec_partial
1766 jz L$cbc_slow_dec_done
1767
1768 movq %r11,0+64(%rsp)
1769 movq %r12,8+64(%rsp)
1770
1771 movl %eax,0(%r9)
1772 movl %ebx,4(%r9)
1773 movl %ecx,8(%r9)
1774 movl %edx,12(%r9)
1775
1776 leaq 16(%r8),%r8
1777 leaq 16(%r9),%r9
1778 jmp L$cbc_slow_dec_loop
1779L$cbc_slow_dec_done:
1780 movq 56(%rsp),%rdi
1781 movq %r11,0(%rdi)
1782 movq %r12,8(%rdi)
1783
1784 movl %eax,0(%r9)
1785 movl %ebx,4(%r9)
1786 movl %ecx,8(%r9)
1787 movl %edx,12(%r9)
1788
1789 jmp L$cbc_exit
1790
1791.p2align 2
1792L$cbc_slow_dec_partial:
1793 movq 56(%rsp),%rdi
1794 movq %r11,0(%rdi)
1795 movq %r12,8(%rdi)
1796
1797 movl %eax,0+64(%rsp)
1798 movl %ebx,4+64(%rsp)
1799 movl %ecx,8+64(%rsp)
1800 movl %edx,12+64(%rsp)
1801
1802 movq %r9,%rdi
1803 leaq 64(%rsp),%rsi
1804 leaq 16(%r10),%rcx
1805.long 0x9066A4F3
1806 jmp L$cbc_exit
1807
1808.p2align 4
1809L$cbc_exit:
1810 movq 16(%rsp),%rsi
Robert Sloanab8b8882018-03-26 11:39:51 -07001811
Adam Langleyd9e397b2015-01-22 14:27:53 -08001812 movq (%rsi),%r15
Robert Sloanab8b8882018-03-26 11:39:51 -07001813
Adam Langleyd9e397b2015-01-22 14:27:53 -08001814 movq 8(%rsi),%r14
Robert Sloanab8b8882018-03-26 11:39:51 -07001815
Adam Langleyd9e397b2015-01-22 14:27:53 -08001816 movq 16(%rsi),%r13
Robert Sloanab8b8882018-03-26 11:39:51 -07001817
Adam Langleyd9e397b2015-01-22 14:27:53 -08001818 movq 24(%rsi),%r12
Robert Sloanab8b8882018-03-26 11:39:51 -07001819
Adam Langleyd9e397b2015-01-22 14:27:53 -08001820 movq 32(%rsi),%rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07001821
Adam Langleyd9e397b2015-01-22 14:27:53 -08001822 movq 40(%rsi),%rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07001823
Adam Langleyd9e397b2015-01-22 14:27:53 -08001824 leaq 48(%rsi),%rsp
Robert Sloanab8b8882018-03-26 11:39:51 -07001825
Adam Langleyd9e397b2015-01-22 14:27:53 -08001826L$cbc_popfq:
1827 popfq
Robert Sloanab8b8882018-03-26 11:39:51 -07001828
Adam Langleyd9e397b2015-01-22 14:27:53 -08001829L$cbc_epilogue:
1830 .byte 0xf3,0xc3
1831
Robert Sloanab8b8882018-03-26 11:39:51 -07001832
Adam Langleyd9e397b2015-01-22 14:27:53 -08001833.p2align 6
1834L$AES_Te:
1835.long 0xa56363c6,0xa56363c6
1836.long 0x847c7cf8,0x847c7cf8
1837.long 0x997777ee,0x997777ee
1838.long 0x8d7b7bf6,0x8d7b7bf6
1839.long 0x0df2f2ff,0x0df2f2ff
1840.long 0xbd6b6bd6,0xbd6b6bd6
1841.long 0xb16f6fde,0xb16f6fde
1842.long 0x54c5c591,0x54c5c591
1843.long 0x50303060,0x50303060
1844.long 0x03010102,0x03010102
1845.long 0xa96767ce,0xa96767ce
1846.long 0x7d2b2b56,0x7d2b2b56
1847.long 0x19fefee7,0x19fefee7
1848.long 0x62d7d7b5,0x62d7d7b5
1849.long 0xe6abab4d,0xe6abab4d
1850.long 0x9a7676ec,0x9a7676ec
1851.long 0x45caca8f,0x45caca8f
1852.long 0x9d82821f,0x9d82821f
1853.long 0x40c9c989,0x40c9c989
1854.long 0x877d7dfa,0x877d7dfa
1855.long 0x15fafaef,0x15fafaef
1856.long 0xeb5959b2,0xeb5959b2
1857.long 0xc947478e,0xc947478e
1858.long 0x0bf0f0fb,0x0bf0f0fb
1859.long 0xecadad41,0xecadad41
1860.long 0x67d4d4b3,0x67d4d4b3
1861.long 0xfda2a25f,0xfda2a25f
1862.long 0xeaafaf45,0xeaafaf45
1863.long 0xbf9c9c23,0xbf9c9c23
1864.long 0xf7a4a453,0xf7a4a453
1865.long 0x967272e4,0x967272e4
1866.long 0x5bc0c09b,0x5bc0c09b
1867.long 0xc2b7b775,0xc2b7b775
1868.long 0x1cfdfde1,0x1cfdfde1
1869.long 0xae93933d,0xae93933d
1870.long 0x6a26264c,0x6a26264c
1871.long 0x5a36366c,0x5a36366c
1872.long 0x413f3f7e,0x413f3f7e
1873.long 0x02f7f7f5,0x02f7f7f5
1874.long 0x4fcccc83,0x4fcccc83
1875.long 0x5c343468,0x5c343468
1876.long 0xf4a5a551,0xf4a5a551
1877.long 0x34e5e5d1,0x34e5e5d1
1878.long 0x08f1f1f9,0x08f1f1f9
1879.long 0x937171e2,0x937171e2
1880.long 0x73d8d8ab,0x73d8d8ab
1881.long 0x53313162,0x53313162
1882.long 0x3f15152a,0x3f15152a
1883.long 0x0c040408,0x0c040408
1884.long 0x52c7c795,0x52c7c795
1885.long 0x65232346,0x65232346
1886.long 0x5ec3c39d,0x5ec3c39d
1887.long 0x28181830,0x28181830
1888.long 0xa1969637,0xa1969637
1889.long 0x0f05050a,0x0f05050a
1890.long 0xb59a9a2f,0xb59a9a2f
1891.long 0x0907070e,0x0907070e
1892.long 0x36121224,0x36121224
1893.long 0x9b80801b,0x9b80801b
1894.long 0x3de2e2df,0x3de2e2df
1895.long 0x26ebebcd,0x26ebebcd
1896.long 0x6927274e,0x6927274e
1897.long 0xcdb2b27f,0xcdb2b27f
1898.long 0x9f7575ea,0x9f7575ea
1899.long 0x1b090912,0x1b090912
1900.long 0x9e83831d,0x9e83831d
1901.long 0x742c2c58,0x742c2c58
1902.long 0x2e1a1a34,0x2e1a1a34
1903.long 0x2d1b1b36,0x2d1b1b36
1904.long 0xb26e6edc,0xb26e6edc
1905.long 0xee5a5ab4,0xee5a5ab4
1906.long 0xfba0a05b,0xfba0a05b
1907.long 0xf65252a4,0xf65252a4
1908.long 0x4d3b3b76,0x4d3b3b76
1909.long 0x61d6d6b7,0x61d6d6b7
1910.long 0xceb3b37d,0xceb3b37d
1911.long 0x7b292952,0x7b292952
1912.long 0x3ee3e3dd,0x3ee3e3dd
1913.long 0x712f2f5e,0x712f2f5e
1914.long 0x97848413,0x97848413
1915.long 0xf55353a6,0xf55353a6
1916.long 0x68d1d1b9,0x68d1d1b9
1917.long 0x00000000,0x00000000
1918.long 0x2cededc1,0x2cededc1
1919.long 0x60202040,0x60202040
1920.long 0x1ffcfce3,0x1ffcfce3
1921.long 0xc8b1b179,0xc8b1b179
1922.long 0xed5b5bb6,0xed5b5bb6
1923.long 0xbe6a6ad4,0xbe6a6ad4
1924.long 0x46cbcb8d,0x46cbcb8d
1925.long 0xd9bebe67,0xd9bebe67
1926.long 0x4b393972,0x4b393972
1927.long 0xde4a4a94,0xde4a4a94
1928.long 0xd44c4c98,0xd44c4c98
1929.long 0xe85858b0,0xe85858b0
1930.long 0x4acfcf85,0x4acfcf85
1931.long 0x6bd0d0bb,0x6bd0d0bb
1932.long 0x2aefefc5,0x2aefefc5
1933.long 0xe5aaaa4f,0xe5aaaa4f
1934.long 0x16fbfbed,0x16fbfbed
1935.long 0xc5434386,0xc5434386
1936.long 0xd74d4d9a,0xd74d4d9a
1937.long 0x55333366,0x55333366
1938.long 0x94858511,0x94858511
1939.long 0xcf45458a,0xcf45458a
1940.long 0x10f9f9e9,0x10f9f9e9
1941.long 0x06020204,0x06020204
1942.long 0x817f7ffe,0x817f7ffe
1943.long 0xf05050a0,0xf05050a0
1944.long 0x443c3c78,0x443c3c78
1945.long 0xba9f9f25,0xba9f9f25
1946.long 0xe3a8a84b,0xe3a8a84b
1947.long 0xf35151a2,0xf35151a2
1948.long 0xfea3a35d,0xfea3a35d
1949.long 0xc0404080,0xc0404080
1950.long 0x8a8f8f05,0x8a8f8f05
1951.long 0xad92923f,0xad92923f
1952.long 0xbc9d9d21,0xbc9d9d21
1953.long 0x48383870,0x48383870
1954.long 0x04f5f5f1,0x04f5f5f1
1955.long 0xdfbcbc63,0xdfbcbc63
1956.long 0xc1b6b677,0xc1b6b677
1957.long 0x75dadaaf,0x75dadaaf
1958.long 0x63212142,0x63212142
1959.long 0x30101020,0x30101020
1960.long 0x1affffe5,0x1affffe5
1961.long 0x0ef3f3fd,0x0ef3f3fd
1962.long 0x6dd2d2bf,0x6dd2d2bf
1963.long 0x4ccdcd81,0x4ccdcd81
1964.long 0x140c0c18,0x140c0c18
1965.long 0x35131326,0x35131326
1966.long 0x2fececc3,0x2fececc3
1967.long 0xe15f5fbe,0xe15f5fbe
1968.long 0xa2979735,0xa2979735
1969.long 0xcc444488,0xcc444488
1970.long 0x3917172e,0x3917172e
1971.long 0x57c4c493,0x57c4c493
1972.long 0xf2a7a755,0xf2a7a755
1973.long 0x827e7efc,0x827e7efc
1974.long 0x473d3d7a,0x473d3d7a
1975.long 0xac6464c8,0xac6464c8
1976.long 0xe75d5dba,0xe75d5dba
1977.long 0x2b191932,0x2b191932
1978.long 0x957373e6,0x957373e6
1979.long 0xa06060c0,0xa06060c0
1980.long 0x98818119,0x98818119
1981.long 0xd14f4f9e,0xd14f4f9e
1982.long 0x7fdcdca3,0x7fdcdca3
1983.long 0x66222244,0x66222244
1984.long 0x7e2a2a54,0x7e2a2a54
1985.long 0xab90903b,0xab90903b
1986.long 0x8388880b,0x8388880b
1987.long 0xca46468c,0xca46468c
1988.long 0x29eeeec7,0x29eeeec7
1989.long 0xd3b8b86b,0xd3b8b86b
1990.long 0x3c141428,0x3c141428
1991.long 0x79dedea7,0x79dedea7
1992.long 0xe25e5ebc,0xe25e5ebc
1993.long 0x1d0b0b16,0x1d0b0b16
1994.long 0x76dbdbad,0x76dbdbad
1995.long 0x3be0e0db,0x3be0e0db
1996.long 0x56323264,0x56323264
1997.long 0x4e3a3a74,0x4e3a3a74
1998.long 0x1e0a0a14,0x1e0a0a14
1999.long 0xdb494992,0xdb494992
2000.long 0x0a06060c,0x0a06060c
2001.long 0x6c242448,0x6c242448
2002.long 0xe45c5cb8,0xe45c5cb8
2003.long 0x5dc2c29f,0x5dc2c29f
2004.long 0x6ed3d3bd,0x6ed3d3bd
2005.long 0xefacac43,0xefacac43
2006.long 0xa66262c4,0xa66262c4
2007.long 0xa8919139,0xa8919139
2008.long 0xa4959531,0xa4959531
2009.long 0x37e4e4d3,0x37e4e4d3
2010.long 0x8b7979f2,0x8b7979f2
2011.long 0x32e7e7d5,0x32e7e7d5
2012.long 0x43c8c88b,0x43c8c88b
2013.long 0x5937376e,0x5937376e
2014.long 0xb76d6dda,0xb76d6dda
2015.long 0x8c8d8d01,0x8c8d8d01
2016.long 0x64d5d5b1,0x64d5d5b1
2017.long 0xd24e4e9c,0xd24e4e9c
2018.long 0xe0a9a949,0xe0a9a949
2019.long 0xb46c6cd8,0xb46c6cd8
2020.long 0xfa5656ac,0xfa5656ac
2021.long 0x07f4f4f3,0x07f4f4f3
2022.long 0x25eaeacf,0x25eaeacf
2023.long 0xaf6565ca,0xaf6565ca
2024.long 0x8e7a7af4,0x8e7a7af4
2025.long 0xe9aeae47,0xe9aeae47
2026.long 0x18080810,0x18080810
2027.long 0xd5baba6f,0xd5baba6f
2028.long 0x887878f0,0x887878f0
2029.long 0x6f25254a,0x6f25254a
2030.long 0x722e2e5c,0x722e2e5c
2031.long 0x241c1c38,0x241c1c38
2032.long 0xf1a6a657,0xf1a6a657
2033.long 0xc7b4b473,0xc7b4b473
2034.long 0x51c6c697,0x51c6c697
2035.long 0x23e8e8cb,0x23e8e8cb
2036.long 0x7cdddda1,0x7cdddda1
2037.long 0x9c7474e8,0x9c7474e8
2038.long 0x211f1f3e,0x211f1f3e
2039.long 0xdd4b4b96,0xdd4b4b96
2040.long 0xdcbdbd61,0xdcbdbd61
2041.long 0x868b8b0d,0x868b8b0d
2042.long 0x858a8a0f,0x858a8a0f
2043.long 0x907070e0,0x907070e0
2044.long 0x423e3e7c,0x423e3e7c
2045.long 0xc4b5b571,0xc4b5b571
2046.long 0xaa6666cc,0xaa6666cc
2047.long 0xd8484890,0xd8484890
2048.long 0x05030306,0x05030306
2049.long 0x01f6f6f7,0x01f6f6f7
2050.long 0x120e0e1c,0x120e0e1c
2051.long 0xa36161c2,0xa36161c2
2052.long 0x5f35356a,0x5f35356a
2053.long 0xf95757ae,0xf95757ae
2054.long 0xd0b9b969,0xd0b9b969
2055.long 0x91868617,0x91868617
2056.long 0x58c1c199,0x58c1c199
2057.long 0x271d1d3a,0x271d1d3a
2058.long 0xb99e9e27,0xb99e9e27
2059.long 0x38e1e1d9,0x38e1e1d9
2060.long 0x13f8f8eb,0x13f8f8eb
2061.long 0xb398982b,0xb398982b
2062.long 0x33111122,0x33111122
2063.long 0xbb6969d2,0xbb6969d2
2064.long 0x70d9d9a9,0x70d9d9a9
2065.long 0x898e8e07,0x898e8e07
2066.long 0xa7949433,0xa7949433
2067.long 0xb69b9b2d,0xb69b9b2d
2068.long 0x221e1e3c,0x221e1e3c
2069.long 0x92878715,0x92878715
2070.long 0x20e9e9c9,0x20e9e9c9
2071.long 0x49cece87,0x49cece87
2072.long 0xff5555aa,0xff5555aa
2073.long 0x78282850,0x78282850
2074.long 0x7adfdfa5,0x7adfdfa5
2075.long 0x8f8c8c03,0x8f8c8c03
2076.long 0xf8a1a159,0xf8a1a159
2077.long 0x80898909,0x80898909
2078.long 0x170d0d1a,0x170d0d1a
2079.long 0xdabfbf65,0xdabfbf65
2080.long 0x31e6e6d7,0x31e6e6d7
2081.long 0xc6424284,0xc6424284
2082.long 0xb86868d0,0xb86868d0
2083.long 0xc3414182,0xc3414182
2084.long 0xb0999929,0xb0999929
2085.long 0x772d2d5a,0x772d2d5a
2086.long 0x110f0f1e,0x110f0f1e
2087.long 0xcbb0b07b,0xcbb0b07b
2088.long 0xfc5454a8,0xfc5454a8
2089.long 0xd6bbbb6d,0xd6bbbb6d
2090.long 0x3a16162c,0x3a16162c
2091.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2092.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2093.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2094.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2095.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2096.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2097.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2098.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2099.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2100.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2101.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2102.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2103.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2104.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2105.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2106.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2107.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2108.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2109.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2110.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2111.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2112.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2113.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2114.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2115.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2116.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2117.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2118.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2119.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2120.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2121.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2122.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2123.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2124.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2125.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2126.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2127.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2128.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2129.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2130.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2131.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2132.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2133.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2134.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2135.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2136.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2137.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2138.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2139.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2140.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2141.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2142.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2143.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2144.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2145.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2146.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2147.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2148.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2149.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2150.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2151.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2152.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2153.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2154.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2155.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2156.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2157.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2158.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2159.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2160.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2161.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2162.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2163.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2164.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2165.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2166.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2167.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2168.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2169.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2170.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2171.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2172.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2173.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2174.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2175.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2176.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2177.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2178.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2179.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2180.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2181.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2182.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2183.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2184.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2185.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2186.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2187.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2188.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2189.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2190.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2191.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2192.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2193.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2194.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2195.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2196.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2197.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2198.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2199.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2200.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2201.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2202.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2203.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2204.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2205.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2206.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2207.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2208.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2209.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2210.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2211.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2212.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2213.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2214.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2215.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2216.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2217.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2218.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2219.long 0x00000001, 0x00000002, 0x00000004, 0x00000008
2220.long 0x00000010, 0x00000020, 0x00000040, 0x00000080
2221.long 0x0000001b, 0x00000036, 0x80808080, 0x80808080
2222.long 0xfefefefe, 0xfefefefe, 0x1b1b1b1b, 0x1b1b1b1b
2223.p2align 6
2224L$AES_Td:
2225.long 0x50a7f451,0x50a7f451
2226.long 0x5365417e,0x5365417e
2227.long 0xc3a4171a,0xc3a4171a
2228.long 0x965e273a,0x965e273a
2229.long 0xcb6bab3b,0xcb6bab3b
2230.long 0xf1459d1f,0xf1459d1f
2231.long 0xab58faac,0xab58faac
2232.long 0x9303e34b,0x9303e34b
2233.long 0x55fa3020,0x55fa3020
2234.long 0xf66d76ad,0xf66d76ad
2235.long 0x9176cc88,0x9176cc88
2236.long 0x254c02f5,0x254c02f5
2237.long 0xfcd7e54f,0xfcd7e54f
2238.long 0xd7cb2ac5,0xd7cb2ac5
2239.long 0x80443526,0x80443526
2240.long 0x8fa362b5,0x8fa362b5
2241.long 0x495ab1de,0x495ab1de
2242.long 0x671bba25,0x671bba25
2243.long 0x980eea45,0x980eea45
2244.long 0xe1c0fe5d,0xe1c0fe5d
2245.long 0x02752fc3,0x02752fc3
2246.long 0x12f04c81,0x12f04c81
2247.long 0xa397468d,0xa397468d
2248.long 0xc6f9d36b,0xc6f9d36b
2249.long 0xe75f8f03,0xe75f8f03
2250.long 0x959c9215,0x959c9215
2251.long 0xeb7a6dbf,0xeb7a6dbf
2252.long 0xda595295,0xda595295
2253.long 0x2d83bed4,0x2d83bed4
2254.long 0xd3217458,0xd3217458
2255.long 0x2969e049,0x2969e049
2256.long 0x44c8c98e,0x44c8c98e
2257.long 0x6a89c275,0x6a89c275
2258.long 0x78798ef4,0x78798ef4
2259.long 0x6b3e5899,0x6b3e5899
2260.long 0xdd71b927,0xdd71b927
2261.long 0xb64fe1be,0xb64fe1be
2262.long 0x17ad88f0,0x17ad88f0
2263.long 0x66ac20c9,0x66ac20c9
2264.long 0xb43ace7d,0xb43ace7d
2265.long 0x184adf63,0x184adf63
2266.long 0x82311ae5,0x82311ae5
2267.long 0x60335197,0x60335197
2268.long 0x457f5362,0x457f5362
2269.long 0xe07764b1,0xe07764b1
2270.long 0x84ae6bbb,0x84ae6bbb
2271.long 0x1ca081fe,0x1ca081fe
2272.long 0x942b08f9,0x942b08f9
2273.long 0x58684870,0x58684870
2274.long 0x19fd458f,0x19fd458f
2275.long 0x876cde94,0x876cde94
2276.long 0xb7f87b52,0xb7f87b52
2277.long 0x23d373ab,0x23d373ab
2278.long 0xe2024b72,0xe2024b72
2279.long 0x578f1fe3,0x578f1fe3
2280.long 0x2aab5566,0x2aab5566
2281.long 0x0728ebb2,0x0728ebb2
2282.long 0x03c2b52f,0x03c2b52f
2283.long 0x9a7bc586,0x9a7bc586
2284.long 0xa50837d3,0xa50837d3
2285.long 0xf2872830,0xf2872830
2286.long 0xb2a5bf23,0xb2a5bf23
2287.long 0xba6a0302,0xba6a0302
2288.long 0x5c8216ed,0x5c8216ed
2289.long 0x2b1ccf8a,0x2b1ccf8a
2290.long 0x92b479a7,0x92b479a7
2291.long 0xf0f207f3,0xf0f207f3
2292.long 0xa1e2694e,0xa1e2694e
2293.long 0xcdf4da65,0xcdf4da65
2294.long 0xd5be0506,0xd5be0506
2295.long 0x1f6234d1,0x1f6234d1
2296.long 0x8afea6c4,0x8afea6c4
2297.long 0x9d532e34,0x9d532e34
2298.long 0xa055f3a2,0xa055f3a2
2299.long 0x32e18a05,0x32e18a05
2300.long 0x75ebf6a4,0x75ebf6a4
2301.long 0x39ec830b,0x39ec830b
2302.long 0xaaef6040,0xaaef6040
2303.long 0x069f715e,0x069f715e
2304.long 0x51106ebd,0x51106ebd
2305.long 0xf98a213e,0xf98a213e
2306.long 0x3d06dd96,0x3d06dd96
2307.long 0xae053edd,0xae053edd
2308.long 0x46bde64d,0x46bde64d
2309.long 0xb58d5491,0xb58d5491
2310.long 0x055dc471,0x055dc471
2311.long 0x6fd40604,0x6fd40604
2312.long 0xff155060,0xff155060
2313.long 0x24fb9819,0x24fb9819
2314.long 0x97e9bdd6,0x97e9bdd6
2315.long 0xcc434089,0xcc434089
2316.long 0x779ed967,0x779ed967
2317.long 0xbd42e8b0,0xbd42e8b0
2318.long 0x888b8907,0x888b8907
2319.long 0x385b19e7,0x385b19e7
2320.long 0xdbeec879,0xdbeec879
2321.long 0x470a7ca1,0x470a7ca1
2322.long 0xe90f427c,0xe90f427c
2323.long 0xc91e84f8,0xc91e84f8
2324.long 0x00000000,0x00000000
2325.long 0x83868009,0x83868009
2326.long 0x48ed2b32,0x48ed2b32
2327.long 0xac70111e,0xac70111e
2328.long 0x4e725a6c,0x4e725a6c
2329.long 0xfbff0efd,0xfbff0efd
2330.long 0x5638850f,0x5638850f
2331.long 0x1ed5ae3d,0x1ed5ae3d
2332.long 0x27392d36,0x27392d36
2333.long 0x64d90f0a,0x64d90f0a
2334.long 0x21a65c68,0x21a65c68
2335.long 0xd1545b9b,0xd1545b9b
2336.long 0x3a2e3624,0x3a2e3624
2337.long 0xb1670a0c,0xb1670a0c
2338.long 0x0fe75793,0x0fe75793
2339.long 0xd296eeb4,0xd296eeb4
2340.long 0x9e919b1b,0x9e919b1b
2341.long 0x4fc5c080,0x4fc5c080
2342.long 0xa220dc61,0xa220dc61
2343.long 0x694b775a,0x694b775a
2344.long 0x161a121c,0x161a121c
2345.long 0x0aba93e2,0x0aba93e2
2346.long 0xe52aa0c0,0xe52aa0c0
2347.long 0x43e0223c,0x43e0223c
2348.long 0x1d171b12,0x1d171b12
2349.long 0x0b0d090e,0x0b0d090e
2350.long 0xadc78bf2,0xadc78bf2
2351.long 0xb9a8b62d,0xb9a8b62d
2352.long 0xc8a91e14,0xc8a91e14
2353.long 0x8519f157,0x8519f157
2354.long 0x4c0775af,0x4c0775af
2355.long 0xbbdd99ee,0xbbdd99ee
2356.long 0xfd607fa3,0xfd607fa3
2357.long 0x9f2601f7,0x9f2601f7
2358.long 0xbcf5725c,0xbcf5725c
2359.long 0xc53b6644,0xc53b6644
2360.long 0x347efb5b,0x347efb5b
2361.long 0x7629438b,0x7629438b
2362.long 0xdcc623cb,0xdcc623cb
2363.long 0x68fcedb6,0x68fcedb6
2364.long 0x63f1e4b8,0x63f1e4b8
2365.long 0xcadc31d7,0xcadc31d7
2366.long 0x10856342,0x10856342
2367.long 0x40229713,0x40229713
2368.long 0x2011c684,0x2011c684
2369.long 0x7d244a85,0x7d244a85
2370.long 0xf83dbbd2,0xf83dbbd2
2371.long 0x1132f9ae,0x1132f9ae
2372.long 0x6da129c7,0x6da129c7
2373.long 0x4b2f9e1d,0x4b2f9e1d
2374.long 0xf330b2dc,0xf330b2dc
2375.long 0xec52860d,0xec52860d
2376.long 0xd0e3c177,0xd0e3c177
2377.long 0x6c16b32b,0x6c16b32b
2378.long 0x99b970a9,0x99b970a9
2379.long 0xfa489411,0xfa489411
2380.long 0x2264e947,0x2264e947
2381.long 0xc48cfca8,0xc48cfca8
2382.long 0x1a3ff0a0,0x1a3ff0a0
2383.long 0xd82c7d56,0xd82c7d56
2384.long 0xef903322,0xef903322
2385.long 0xc74e4987,0xc74e4987
2386.long 0xc1d138d9,0xc1d138d9
2387.long 0xfea2ca8c,0xfea2ca8c
2388.long 0x360bd498,0x360bd498
2389.long 0xcf81f5a6,0xcf81f5a6
2390.long 0x28de7aa5,0x28de7aa5
2391.long 0x268eb7da,0x268eb7da
2392.long 0xa4bfad3f,0xa4bfad3f
2393.long 0xe49d3a2c,0xe49d3a2c
2394.long 0x0d927850,0x0d927850
2395.long 0x9bcc5f6a,0x9bcc5f6a
2396.long 0x62467e54,0x62467e54
2397.long 0xc2138df6,0xc2138df6
2398.long 0xe8b8d890,0xe8b8d890
2399.long 0x5ef7392e,0x5ef7392e
2400.long 0xf5afc382,0xf5afc382
2401.long 0xbe805d9f,0xbe805d9f
2402.long 0x7c93d069,0x7c93d069
2403.long 0xa92dd56f,0xa92dd56f
2404.long 0xb31225cf,0xb31225cf
2405.long 0x3b99acc8,0x3b99acc8
2406.long 0xa77d1810,0xa77d1810
2407.long 0x6e639ce8,0x6e639ce8
2408.long 0x7bbb3bdb,0x7bbb3bdb
2409.long 0x097826cd,0x097826cd
2410.long 0xf418596e,0xf418596e
2411.long 0x01b79aec,0x01b79aec
2412.long 0xa89a4f83,0xa89a4f83
2413.long 0x656e95e6,0x656e95e6
2414.long 0x7ee6ffaa,0x7ee6ffaa
2415.long 0x08cfbc21,0x08cfbc21
2416.long 0xe6e815ef,0xe6e815ef
2417.long 0xd99be7ba,0xd99be7ba
2418.long 0xce366f4a,0xce366f4a
2419.long 0xd4099fea,0xd4099fea
2420.long 0xd67cb029,0xd67cb029
2421.long 0xafb2a431,0xafb2a431
2422.long 0x31233f2a,0x31233f2a
2423.long 0x3094a5c6,0x3094a5c6
2424.long 0xc066a235,0xc066a235
2425.long 0x37bc4e74,0x37bc4e74
2426.long 0xa6ca82fc,0xa6ca82fc
2427.long 0xb0d090e0,0xb0d090e0
2428.long 0x15d8a733,0x15d8a733
2429.long 0x4a9804f1,0x4a9804f1
2430.long 0xf7daec41,0xf7daec41
2431.long 0x0e50cd7f,0x0e50cd7f
2432.long 0x2ff69117,0x2ff69117
2433.long 0x8dd64d76,0x8dd64d76
2434.long 0x4db0ef43,0x4db0ef43
2435.long 0x544daacc,0x544daacc
2436.long 0xdf0496e4,0xdf0496e4
2437.long 0xe3b5d19e,0xe3b5d19e
2438.long 0x1b886a4c,0x1b886a4c
2439.long 0xb81f2cc1,0xb81f2cc1
2440.long 0x7f516546,0x7f516546
2441.long 0x04ea5e9d,0x04ea5e9d
2442.long 0x5d358c01,0x5d358c01
2443.long 0x737487fa,0x737487fa
2444.long 0x2e410bfb,0x2e410bfb
2445.long 0x5a1d67b3,0x5a1d67b3
2446.long 0x52d2db92,0x52d2db92
2447.long 0x335610e9,0x335610e9
2448.long 0x1347d66d,0x1347d66d
2449.long 0x8c61d79a,0x8c61d79a
2450.long 0x7a0ca137,0x7a0ca137
2451.long 0x8e14f859,0x8e14f859
2452.long 0x893c13eb,0x893c13eb
2453.long 0xee27a9ce,0xee27a9ce
2454.long 0x35c961b7,0x35c961b7
2455.long 0xede51ce1,0xede51ce1
2456.long 0x3cb1477a,0x3cb1477a
2457.long 0x59dfd29c,0x59dfd29c
2458.long 0x3f73f255,0x3f73f255
2459.long 0x79ce1418,0x79ce1418
2460.long 0xbf37c773,0xbf37c773
2461.long 0xeacdf753,0xeacdf753
2462.long 0x5baafd5f,0x5baafd5f
2463.long 0x146f3ddf,0x146f3ddf
2464.long 0x86db4478,0x86db4478
2465.long 0x81f3afca,0x81f3afca
2466.long 0x3ec468b9,0x3ec468b9
2467.long 0x2c342438,0x2c342438
2468.long 0x5f40a3c2,0x5f40a3c2
2469.long 0x72c31d16,0x72c31d16
2470.long 0x0c25e2bc,0x0c25e2bc
2471.long 0x8b493c28,0x8b493c28
2472.long 0x41950dff,0x41950dff
2473.long 0x7101a839,0x7101a839
2474.long 0xdeb30c08,0xdeb30c08
2475.long 0x9ce4b4d8,0x9ce4b4d8
2476.long 0x90c15664,0x90c15664
2477.long 0x6184cb7b,0x6184cb7b
2478.long 0x70b632d5,0x70b632d5
2479.long 0x745c6c48,0x745c6c48
2480.long 0x4257b8d0,0x4257b8d0
2481.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2482.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2483.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2484.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2485.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2486.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2487.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2488.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2489.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2490.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2491.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2492.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2493.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2494.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2495.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2496.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2497.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2498.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2499.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2500.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2501.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2502.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2503.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2504.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2505.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2506.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2507.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2508.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2509.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2510.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2511.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2512.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2513.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
2514.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
2515.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2516.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2517.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2518.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2519.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2520.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2521.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2522.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2523.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2524.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2525.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2526.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2527.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2528.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2529.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2530.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2531.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2532.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2533.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2534.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2535.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2536.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2537.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2538.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2539.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2540.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2541.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2542.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2543.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2544.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2545.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2546.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2547.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
2548.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
2549.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2550.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2551.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2552.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2553.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2554.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2555.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2556.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2557.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2558.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2559.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2560.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2561.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2562.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2563.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2564.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2565.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2566.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2567.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2568.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2569.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2570.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2571.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2572.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2573.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2574.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2575.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2576.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2577.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2578.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2579.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2580.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2581.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
2582.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
2583.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2584.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2585.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2586.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2587.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2588.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2589.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2590.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2591.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2592.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2593.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2594.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2595.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2596.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2597.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2598.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2599.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2600.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2601.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2602.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2603.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2604.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2605.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2606.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2607.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2608.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2609.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2610.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2611.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2612.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2613.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2614.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2615.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
2616.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
2617.byte 65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
2618.p2align 6
2619#endif