1; 1 "crypto/aes/aes-masm-x86_64.S.tmp"
2; 1 "<built-in>" 1
3; 1 "<built-in>" 3
4; 343 "<built-in>" 3
5; 1 "<command line>" 1
6; 1 "<built-in>" 2
7; 1 "crypto/aes/aes-masm-x86_64.S.tmp" 2
8OPTION	DOTNAME
9
10; 1 "./crypto/x86_arch.h" 1
11
12
13; 16 "./crypto/x86_arch.h"
14
15
16
17
18
19
20
21
22
23; 40 "./crypto/x86_arch.h"
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69; 3 "crypto/aes/aes-masm-x86_64.S.tmp" 2
70
71.text$	SEGMENT ALIGN(64) 'CODE'
72
73ALIGN	16
74_x86_64_AES_encrypt	PROC PRIVATE
75	xor	eax,DWORD PTR[r15]
76	xor	ebx,DWORD PTR[4+r15]
77	xor	ecx,DWORD PTR[8+r15]
78	xor	edx,DWORD PTR[12+r15]
79
80	mov	r13d,DWORD PTR[240+r15]
81	sub	r13d,1
82	jmp	$L$enc_loop
83ALIGN	16
84$L$enc_loop::
85
86	movzx	esi,al
87	movzx	edi,bl
88	movzx	ebp,cl
89	mov	r10d,DWORD PTR[rsi*8+r14]
90	mov	r11d,DWORD PTR[rdi*8+r14]
91	mov	r12d,DWORD PTR[rbp*8+r14]
92
93	movzx	esi,bh
94	movzx	edi,ch
95	movzx	ebp,dl
96	xor	r10d,DWORD PTR[3+rsi*8+r14]
97	xor	r11d,DWORD PTR[3+rdi*8+r14]
98	mov	r8d,DWORD PTR[rbp*8+r14]
99
100	movzx	esi,dh
101	shr	ecx,16
102	movzx	ebp,ah
103	xor	r12d,DWORD PTR[3+rsi*8+r14]
104	shr	edx,16
105	xor	r8d,DWORD PTR[3+rbp*8+r14]
106
107	shr	ebx,16
108	lea	r15,QWORD PTR[16+r15]
109	shr	eax,16
110
111	movzx	esi,cl
112	movzx	edi,dl
113	movzx	ebp,al
114	xor	r10d,DWORD PTR[2+rsi*8+r14]
115	xor	r11d,DWORD PTR[2+rdi*8+r14]
116	xor	r12d,DWORD PTR[2+rbp*8+r14]
117
118	movzx	esi,dh
119	movzx	edi,ah
120	movzx	ebp,bl
121	xor	r10d,DWORD PTR[1+rsi*8+r14]
122	xor	r11d,DWORD PTR[1+rdi*8+r14]
123	xor	r8d,DWORD PTR[2+rbp*8+r14]
124
125	mov	edx,DWORD PTR[12+r15]
126	movzx	edi,bh
127	movzx	ebp,ch
128	mov	eax,DWORD PTR[r15]
129	xor	r12d,DWORD PTR[1+rdi*8+r14]
130	xor	r8d,DWORD PTR[1+rbp*8+r14]
131
132	mov	ebx,DWORD PTR[4+r15]
133	mov	ecx,DWORD PTR[8+r15]
134	xor	eax,r10d
135	xor	ebx,r11d
136	xor	ecx,r12d
137	xor	edx,r8d
138	sub	r13d,1
139	jnz	$L$enc_loop
140	movzx	esi,al
141	movzx	edi,bl
142	movzx	ebp,cl
143	movzx	r10d,BYTE PTR[2+rsi*8+r14]
144	movzx	r11d,BYTE PTR[2+rdi*8+r14]
145	movzx	r12d,BYTE PTR[2+rbp*8+r14]
146
147	movzx	esi,dl
148	movzx	edi,bh
149	movzx	ebp,ch
150	movzx	r8d,BYTE PTR[2+rsi*8+r14]
151	mov	edi,DWORD PTR[rdi*8+r14]
152	mov	ebp,DWORD PTR[rbp*8+r14]
153
154	and	edi,00000ff00h
155	and	ebp,00000ff00h
156
157	xor	r10d,edi
158	xor	r11d,ebp
159	shr	ecx,16
160
161	movzx	esi,dh
162	movzx	edi,ah
163	shr	edx,16
164	mov	esi,DWORD PTR[rsi*8+r14]
165	mov	edi,DWORD PTR[rdi*8+r14]
166
167	and	esi,00000ff00h
168	and	edi,00000ff00h
169	shr	ebx,16
170	xor	r12d,esi
171	xor	r8d,edi
172	shr	eax,16
173
174	movzx	esi,cl
175	movzx	edi,dl
176	movzx	ebp,al
177	mov	esi,DWORD PTR[rsi*8+r14]
178	mov	edi,DWORD PTR[rdi*8+r14]
179	mov	ebp,DWORD PTR[rbp*8+r14]
180
181	and	esi,000ff0000h
182	and	edi,000ff0000h
183	and	ebp,000ff0000h
184
185	xor	r10d,esi
186	xor	r11d,edi
187	xor	r12d,ebp
188
189	movzx	esi,bl
190	movzx	edi,dh
191	movzx	ebp,ah
192	mov	esi,DWORD PTR[rsi*8+r14]
193	mov	edi,DWORD PTR[2+rdi*8+r14]
194	mov	ebp,DWORD PTR[2+rbp*8+r14]
195
196	and	esi,000ff0000h
197	and	edi,0ff000000h
198	and	ebp,0ff000000h
199
200	xor	r8d,esi
201	xor	r10d,edi
202	xor	r11d,ebp
203
204	movzx	esi,bh
205	movzx	edi,ch
206	mov	edx,DWORD PTR[((16+12))+r15]
207	mov	esi,DWORD PTR[2+rsi*8+r14]
208	mov	edi,DWORD PTR[2+rdi*8+r14]
209	mov	eax,DWORD PTR[((16+0))+r15]
210
211	and	esi,0ff000000h
212	and	edi,0ff000000h
213
214	xor	r12d,esi
215	xor	r8d,edi
216
217	mov	ebx,DWORD PTR[((16+4))+r15]
218	mov	ecx,DWORD PTR[((16+8))+r15]
219	xor	eax,r10d
220	xor	ebx,r11d
221	xor	ecx,r12d
222	xor	edx,r8d
223	DB	0F3h,0C3h		;repret
224_x86_64_AES_encrypt	ENDP
225
226ALIGN	16
227_x86_64_AES_encrypt_compact	PROC PRIVATE
228	lea	r8,QWORD PTR[128+r14]
229	mov	edi,DWORD PTR[((0-128))+r8]
230	mov	ebp,DWORD PTR[((32-128))+r8]
231	mov	r10d,DWORD PTR[((64-128))+r8]
232	mov	r11d,DWORD PTR[((96-128))+r8]
233	mov	edi,DWORD PTR[((128-128))+r8]
234	mov	ebp,DWORD PTR[((160-128))+r8]
235	mov	r10d,DWORD PTR[((192-128))+r8]
236	mov	r11d,DWORD PTR[((224-128))+r8]
237	jmp	$L$enc_loop_compact
238ALIGN	16
239$L$enc_loop_compact::
240	xor	eax,DWORD PTR[r15]
241	xor	ebx,DWORD PTR[4+r15]
242	xor	ecx,DWORD PTR[8+r15]
243	xor	edx,DWORD PTR[12+r15]
244	lea	r15,QWORD PTR[16+r15]
245	movzx	r10d,al
246	movzx	r11d,bl
247	movzx	r12d,cl
248	movzx	r10d,BYTE PTR[r10*1+r14]
249	movzx	r11d,BYTE PTR[r11*1+r14]
250	movzx	r12d,BYTE PTR[r12*1+r14]
251
252	movzx	r8d,dl
253	movzx	esi,bh
254	movzx	edi,ch
255	movzx	r8d,BYTE PTR[r8*1+r14]
256	movzx	r9d,BYTE PTR[rsi*1+r14]
257	movzx	r13d,BYTE PTR[rdi*1+r14]
258
259	movzx	ebp,dh
260	movzx	esi,ah
261	shr	ecx,16
262	movzx	ebp,BYTE PTR[rbp*1+r14]
263	movzx	esi,BYTE PTR[rsi*1+r14]
264	shr	edx,16
265
266	movzx	edi,cl
267	shl	r9d,8
268	shl	r13d,8
269	movzx	edi,BYTE PTR[rdi*1+r14]
270	xor	r10d,r9d
271	xor	r11d,r13d
272
273	movzx	r9d,dl
274	shr	eax,16
275	shr	ebx,16
276	movzx	r13d,al
277	shl	ebp,8
278	shl	esi,8
279	movzx	r9d,BYTE PTR[r9*1+r14]
280	movzx	r13d,BYTE PTR[r13*1+r14]
281	xor	r12d,ebp
282	xor	r8d,esi
283
284	movzx	ebp,bl
285	movzx	esi,dh
286	shl	edi,16
287	movzx	ebp,BYTE PTR[rbp*1+r14]
288	movzx	esi,BYTE PTR[rsi*1+r14]
289	xor	r10d,edi
290
291	movzx	edi,ah
292	shr	ecx,8
293	shr	ebx,8
294	movzx	edi,BYTE PTR[rdi*1+r14]
295	movzx	edx,BYTE PTR[rcx*1+r14]
296	movzx	ecx,BYTE PTR[rbx*1+r14]
297	shl	r9d,16
298	shl	r13d,16
299	shl	ebp,16
300	xor	r11d,r9d
301	xor	r12d,r13d
302	xor	r8d,ebp
303
304	shl	esi,24
305	shl	edi,24
306	shl	edx,24
307	xor	r10d,esi
308	shl	ecx,24
309	xor	r11d,edi
310	mov	eax,r10d
311	mov	ebx,r11d
312	xor	ecx,r12d
313	xor	edx,r8d
314	cmp	r15,QWORD PTR[16+rsp]
315	je	$L$enc_compact_done
316	mov	esi,eax
317	mov	edi,ebx
318	and	esi,080808080h
319	and	edi,080808080h
320	mov	r10d,esi
321	mov	r11d,edi
322	shr	r10d,7
323	lea	r8d,DWORD PTR[rax*1+rax]
324	shr	r11d,7
325	lea	r9d,DWORD PTR[rbx*1+rbx]
326	sub	esi,r10d
327	sub	edi,r11d
328	and	r8d,0fefefefeh
329	and	r9d,0fefefefeh
330	and	esi,01b1b1b1bh
331	and	edi,01b1b1b1bh
332	mov	r10d,eax
333	mov	r11d,ebx
334	xor	r8d,esi
335	xor	r9d,edi
336
337	xor	eax,r8d
338	xor	ebx,r9d
339	mov	esi,ecx
340	mov	edi,edx
341	rol	eax,24
342	rol	ebx,24
343	and	esi,080808080h
344	and	edi,080808080h
345	xor	eax,r8d
346	xor	ebx,r9d
347	mov	r12d,esi
348	mov	ebp,edi
349	ror	r10d,16
350	ror	r11d,16
351	shr	r12d,7
352	lea	r8d,DWORD PTR[rcx*1+rcx]
353	xor	eax,r10d
354	xor	ebx,r11d
355	shr	ebp,7
356	lea	r9d,DWORD PTR[rdx*1+rdx]
357	ror	r10d,8
358	ror	r11d,8
359	sub	esi,r12d
360	sub	edi,ebp
361	xor	eax,r10d
362	xor	ebx,r11d
363
364	and	r8d,0fefefefeh
365	and	r9d,0fefefefeh
366	and	esi,01b1b1b1bh
367	and	edi,01b1b1b1bh
368	mov	r12d,ecx
369	mov	ebp,edx
370	xor	r8d,esi
371	xor	r9d,edi
372
373	xor	ecx,r8d
374	xor	edx,r9d
375	rol	ecx,24
376	rol	edx,24
377	xor	ecx,r8d
378	xor	edx,r9d
379	mov	esi,DWORD PTR[r14]
380	ror	r12d,16
381	ror	ebp,16
382	mov	edi,DWORD PTR[64+r14]
383	xor	ecx,r12d
384	xor	edx,ebp
385	mov	r8d,DWORD PTR[128+r14]
386	ror	r12d,8
387	ror	ebp,8
388	mov	r9d,DWORD PTR[192+r14]
389	xor	ecx,r12d
390	xor	edx,ebp
391	jmp	$L$enc_loop_compact
392ALIGN	16
393$L$enc_compact_done::
394	xor	eax,DWORD PTR[r15]
395	xor	ebx,DWORD PTR[4+r15]
396	xor	ecx,DWORD PTR[8+r15]
397	xor	edx,DWORD PTR[12+r15]
398	DB	0F3h,0C3h		;repret
399_x86_64_AES_encrypt_compact	ENDP
400PUBLIC	AES_encrypt
401
402ALIGN	16
403PUBLIC	asm_AES_encrypt
404
405asm_AES_encrypt::
406AES_encrypt	PROC PUBLIC
407	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
408	mov	QWORD PTR[16+rsp],rsi
409	mov	rax,rsp
410$L$SEH_begin_AES_encrypt::
411	mov	rdi,rcx
412	mov	rsi,rdx
413	mov	rdx,r8
414
415
416	push	rbx
417	push	rbp
418	push	r12
419	push	r13
420	push	r14
421	push	r15
422
423
424	mov	r10,rsp
425	lea	rcx,QWORD PTR[((-63))+rdx]
426	and	rsp,-64
427	sub	rcx,rsp
428	neg	rcx
429	and	rcx,03c0h
430	sub	rsp,rcx
431	sub	rsp,32
432
433	mov	QWORD PTR[16+rsp],rsi
434	mov	QWORD PTR[24+rsp],r10
435$L$enc_prologue::
436
437	mov	r15,rdx
438	mov	r13d,DWORD PTR[240+r15]
439
440	mov	eax,DWORD PTR[rdi]
441	mov	ebx,DWORD PTR[4+rdi]
442	mov	ecx,DWORD PTR[8+rdi]
443	mov	edx,DWORD PTR[12+rdi]
444
445	shl	r13d,4
446	lea	rbp,QWORD PTR[r13*1+r15]
447	mov	QWORD PTR[rsp],r15
448	mov	QWORD PTR[8+rsp],rbp
449
450
451	lea	r14,QWORD PTR[(($L$AES_Te+2048))]
452	lea	rbp,QWORD PTR[768+rsp]
453	sub	rbp,r14
454	and	rbp,0300h
455	lea	r14,QWORD PTR[rbp*1+r14]
456
457	call	_x86_64_AES_encrypt_compact
458
459	mov	r9,QWORD PTR[16+rsp]
460	mov	rsi,QWORD PTR[24+rsp]
461	mov	DWORD PTR[r9],eax
462	mov	DWORD PTR[4+r9],ebx
463	mov	DWORD PTR[8+r9],ecx
464	mov	DWORD PTR[12+r9],edx
465
466	mov	r15,QWORD PTR[rsi]
467	mov	r14,QWORD PTR[8+rsi]
468	mov	r13,QWORD PTR[16+rsi]
469	mov	r12,QWORD PTR[24+rsi]
470	mov	rbp,QWORD PTR[32+rsi]
471	mov	rbx,QWORD PTR[40+rsi]
472	lea	rsp,QWORD PTR[48+rsi]
473$L$enc_epilogue::
474	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
475	mov	rsi,QWORD PTR[16+rsp]
476	DB	0F3h,0C3h		;repret
477$L$SEH_end_AES_encrypt::
478AES_encrypt	ENDP
479
480ALIGN	16
481_x86_64_AES_decrypt	PROC PRIVATE
482	xor	eax,DWORD PTR[r15]
483	xor	ebx,DWORD PTR[4+r15]
484	xor	ecx,DWORD PTR[8+r15]
485	xor	edx,DWORD PTR[12+r15]
486
487	mov	r13d,DWORD PTR[240+r15]
488	sub	r13d,1
489	jmp	$L$dec_loop
490ALIGN	16
491$L$dec_loop::
492
493	movzx	esi,al
494	movzx	edi,bl
495	movzx	ebp,cl
496	mov	r10d,DWORD PTR[rsi*8+r14]
497	mov	r11d,DWORD PTR[rdi*8+r14]
498	mov	r12d,DWORD PTR[rbp*8+r14]
499
500	movzx	esi,dh
501	movzx	edi,ah
502	movzx	ebp,dl
503	xor	r10d,DWORD PTR[3+rsi*8+r14]
504	xor	r11d,DWORD PTR[3+rdi*8+r14]
505	mov	r8d,DWORD PTR[rbp*8+r14]
506
507	movzx	esi,bh
508	shr	eax,16
509	movzx	ebp,ch
510	xor	r12d,DWORD PTR[3+rsi*8+r14]
511	shr	edx,16
512	xor	r8d,DWORD PTR[3+rbp*8+r14]
513
514	shr	ebx,16
515	lea	r15,QWORD PTR[16+r15]
516	shr	ecx,16
517
518	movzx	esi,cl
519	movzx	edi,dl
520	movzx	ebp,al
521	xor	r10d,DWORD PTR[2+rsi*8+r14]
522	xor	r11d,DWORD PTR[2+rdi*8+r14]
523	xor	r12d,DWORD PTR[2+rbp*8+r14]
524
525	movzx	esi,bh
526	movzx	edi,ch
527	movzx	ebp,bl
528	xor	r10d,DWORD PTR[1+rsi*8+r14]
529	xor	r11d,DWORD PTR[1+rdi*8+r14]
530	xor	r8d,DWORD PTR[2+rbp*8+r14]
531
532	movzx	esi,dh
533	mov	edx,DWORD PTR[12+r15]
534	movzx	ebp,ah
535	xor	r12d,DWORD PTR[1+rsi*8+r14]
536	mov	eax,DWORD PTR[r15]
537	xor	r8d,DWORD PTR[1+rbp*8+r14]
538
539	xor	eax,r10d
540	mov	ebx,DWORD PTR[4+r15]
541	mov	ecx,DWORD PTR[8+r15]
542	xor	ecx,r12d
543	xor	ebx,r11d
544	xor	edx,r8d
545	sub	r13d,1
546	jnz	$L$dec_loop
547	lea	r14,QWORD PTR[2048+r14]
548	movzx	esi,al
549	movzx	edi,bl
550	movzx	ebp,cl
551	movzx	r10d,BYTE PTR[rsi*1+r14]
552	movzx	r11d,BYTE PTR[rdi*1+r14]
553	movzx	r12d,BYTE PTR[rbp*1+r14]
554
555	movzx	esi,dl
556	movzx	edi,dh
557	movzx	ebp,ah
558	movzx	r8d,BYTE PTR[rsi*1+r14]
559	movzx	edi,BYTE PTR[rdi*1+r14]
560	movzx	ebp,BYTE PTR[rbp*1+r14]
561
562	shl	edi,8
563	shl	ebp,8
564
565	xor	r10d,edi
566	xor	r11d,ebp
567	shr	edx,16
568
569	movzx	esi,bh
570	movzx	edi,ch
571	shr	eax,16
572	movzx	esi,BYTE PTR[rsi*1+r14]
573	movzx	edi,BYTE PTR[rdi*1+r14]
574
575	shl	esi,8
576	shl	edi,8
577	shr	ebx,16
578	xor	r12d,esi
579	xor	r8d,edi
580	shr	ecx,16
581
582	movzx	esi,cl
583	movzx	edi,dl
584	movzx	ebp,al
585	movzx	esi,BYTE PTR[rsi*1+r14]
586	movzx	edi,BYTE PTR[rdi*1+r14]
587	movzx	ebp,BYTE PTR[rbp*1+r14]
588
589	shl	esi,16
590	shl	edi,16
591	shl	ebp,16
592
593	xor	r10d,esi
594	xor	r11d,edi
595	xor	r12d,ebp
596
597	movzx	esi,bl
598	movzx	edi,bh
599	movzx	ebp,ch
600	movzx	esi,BYTE PTR[rsi*1+r14]
601	movzx	edi,BYTE PTR[rdi*1+r14]
602	movzx	ebp,BYTE PTR[rbp*1+r14]
603
604	shl	esi,16
605	shl	edi,24
606	shl	ebp,24
607
608	xor	r8d,esi
609	xor	r10d,edi
610	xor	r11d,ebp
611
612	movzx	esi,dh
613	movzx	edi,ah
614	mov	edx,DWORD PTR[((16+12))+r15]
615	movzx	esi,BYTE PTR[rsi*1+r14]
616	movzx	edi,BYTE PTR[rdi*1+r14]
617	mov	eax,DWORD PTR[((16+0))+r15]
618
619	shl	esi,24
620	shl	edi,24
621
622	xor	r12d,esi
623	xor	r8d,edi
624
625	mov	ebx,DWORD PTR[((16+4))+r15]
626	mov	ecx,DWORD PTR[((16+8))+r15]
627	lea	r14,QWORD PTR[((-2048))+r14]
628	xor	eax,r10d
629	xor	ebx,r11d
630	xor	ecx,r12d
631	xor	edx,r8d
632	DB	0F3h,0C3h		;repret
633_x86_64_AES_decrypt	ENDP
634
635ALIGN	16
636_x86_64_AES_decrypt_compact	PROC PRIVATE
637	lea	r8,QWORD PTR[128+r14]
638	mov	edi,DWORD PTR[((0-128))+r8]
639	mov	ebp,DWORD PTR[((32-128))+r8]
640	mov	r10d,DWORD PTR[((64-128))+r8]
641	mov	r11d,DWORD PTR[((96-128))+r8]
642	mov	edi,DWORD PTR[((128-128))+r8]
643	mov	ebp,DWORD PTR[((160-128))+r8]
644	mov	r10d,DWORD PTR[((192-128))+r8]
645	mov	r11d,DWORD PTR[((224-128))+r8]
646	jmp	$L$dec_loop_compact
647
648ALIGN	16
649$L$dec_loop_compact::
650	xor	eax,DWORD PTR[r15]
651	xor	ebx,DWORD PTR[4+r15]
652	xor	ecx,DWORD PTR[8+r15]
653	xor	edx,DWORD PTR[12+r15]
654	lea	r15,QWORD PTR[16+r15]
655	movzx	r10d,al
656	movzx	r11d,bl
657	movzx	r12d,cl
658	movzx	r10d,BYTE PTR[r10*1+r14]
659	movzx	r11d,BYTE PTR[r11*1+r14]
660	movzx	r12d,BYTE PTR[r12*1+r14]
661
662	movzx	r8d,dl
663	movzx	esi,dh
664	movzx	edi,ah
665	movzx	r8d,BYTE PTR[r8*1+r14]
666	movzx	r9d,BYTE PTR[rsi*1+r14]
667	movzx	r13d,BYTE PTR[rdi*1+r14]
668
669	movzx	ebp,bh
670	movzx	esi,ch
671	shr	ecx,16
672	movzx	ebp,BYTE PTR[rbp*1+r14]
673	movzx	esi,BYTE PTR[rsi*1+r14]
674	shr	edx,16
675
676	movzx	edi,cl
677	shl	r9d,8
678	shl	r13d,8
679	movzx	edi,BYTE PTR[rdi*1+r14]
680	xor	r10d,r9d
681	xor	r11d,r13d
682
683	movzx	r9d,dl
684	shr	eax,16
685	shr	ebx,16
686	movzx	r13d,al
687	shl	ebp,8
688	shl	esi,8
689	movzx	r9d,BYTE PTR[r9*1+r14]
690	movzx	r13d,BYTE PTR[r13*1+r14]
691	xor	r12d,ebp
692	xor	r8d,esi
693
694	movzx	ebp,bl
695	movzx	esi,bh
696	shl	edi,16
697	movzx	ebp,BYTE PTR[rbp*1+r14]
698	movzx	esi,BYTE PTR[rsi*1+r14]
699	xor	r10d,edi
700
701	movzx	edi,ch
702	shl	r9d,16
703	shl	r13d,16
704	movzx	ebx,BYTE PTR[rdi*1+r14]
705	xor	r11d,r9d
706	xor	r12d,r13d
707
708	movzx	edi,dh
709	shr	eax,8
710	shl	ebp,16
711	movzx	ecx,BYTE PTR[rdi*1+r14]
712	movzx	edx,BYTE PTR[rax*1+r14]
713	xor	r8d,ebp
714
715	shl	esi,24
716	shl	ebx,24
717	shl	ecx,24
718	xor	r10d,esi
719	shl	edx,24
720	xor	ebx,r11d
721	mov	eax,r10d
722	xor	ecx,r12d
723	xor	edx,r8d
724	cmp	r15,QWORD PTR[16+rsp]
725	je	$L$dec_compact_done
726
727	mov	rsi,QWORD PTR[((256+0))+r14]
728	shl	rbx,32
729	shl	rdx,32
730	mov	rdi,QWORD PTR[((256+8))+r14]
731	or	rax,rbx
732	or	rcx,rdx
733	mov	rbp,QWORD PTR[((256+16))+r14]
734	mov	rbx,rax
735	mov	rdx,rcx
736	and	rbx,rsi
737	and	rdx,rsi
738	mov	r9,rbx
739	mov	r12,rdx
740	shr	r9,7
741	lea	r8,QWORD PTR[rax*1+rax]
742	shr	r12,7
743	lea	r11,QWORD PTR[rcx*1+rcx]
744	sub	rbx,r9
745	sub	rdx,r12
746	and	r8,rdi
747	and	r11,rdi
748	and	rbx,rbp
749	and	rdx,rbp
750	xor	rbx,r8
751	xor	rdx,r11
752	mov	r8,rbx
753	mov	r11,rdx
754
755	and	rbx,rsi
756	and	rdx,rsi
757	mov	r10,rbx
758	mov	r13,rdx
759	shr	r10,7
760	lea	r9,QWORD PTR[r8*1+r8]
761	shr	r13,7
762	lea	r12,QWORD PTR[r11*1+r11]
763	sub	rbx,r10
764	sub	rdx,r13
765	and	r9,rdi
766	and	r12,rdi
767	and	rbx,rbp
768	and	rdx,rbp
769	xor	rbx,r9
770	xor	rdx,r12
771	mov	r9,rbx
772	mov	r12,rdx
773
774	and	rbx,rsi
775	and	rdx,rsi
776	mov	r10,rbx
777	mov	r13,rdx
778	shr	r10,7
779	xor	r8,rax
780	shr	r13,7
781	xor	r11,rcx
782	sub	rbx,r10
783	sub	rdx,r13
784	lea	r10,QWORD PTR[r9*1+r9]
785	lea	r13,QWORD PTR[r12*1+r12]
786	xor	r9,rax
787	xor	r12,rcx
788	and	r10,rdi
789	and	r13,rdi
790	and	rbx,rbp
791	and	rdx,rbp
792	xor	r10,rbx
793	xor	r13,rdx
794
795	xor	rax,r10
796	xor	rcx,r13
797	xor	r8,r10
798	xor	r11,r13
799	mov	rbx,rax
800	mov	rdx,rcx
801	xor	r9,r10
802	xor	r12,r13
803	shr	rbx,32
804	shr	rdx,32
805	xor	r10,r8
806	xor	r13,r11
807	rol	eax,8
808	rol	ecx,8
809	xor	r10,r9
810	xor	r13,r12
811
812	rol	ebx,8
813	rol	edx,8
814	xor	eax,r10d
815	xor	ecx,r13d
816	shr	r10,32
817	shr	r13,32
818	xor	ebx,r10d
819	xor	edx,r13d
820
821	mov	r10,r8
822	mov	r13,r11
823	shr	r10,32
824	shr	r13,32
825	rol	r8d,24
826	rol	r11d,24
827	rol	r10d,24
828	rol	r13d,24
829	xor	eax,r8d
830	xor	ecx,r11d
831	mov	r8,r9
832	mov	r11,r12
833	xor	ebx,r10d
834	xor	edx,r13d
835
836	mov	rsi,QWORD PTR[r14]
837	shr	r8,32
838	shr	r11,32
839	mov	rdi,QWORD PTR[64+r14]
840	rol	r9d,16
841	rol	r12d,16
842	mov	rbp,QWORD PTR[128+r14]
843	rol	r8d,16
844	rol	r11d,16
845	mov	r10,QWORD PTR[192+r14]
846	xor	eax,r9d
847	xor	ecx,r12d
848	mov	r13,QWORD PTR[256+r14]
849	xor	ebx,r8d
850	xor	edx,r11d
851	jmp	$L$dec_loop_compact
852ALIGN	16
853$L$dec_compact_done::
854	xor	eax,DWORD PTR[r15]
855	xor	ebx,DWORD PTR[4+r15]
856	xor	ecx,DWORD PTR[8+r15]
857	xor	edx,DWORD PTR[12+r15]
858	DB	0F3h,0C3h		;repret
859_x86_64_AES_decrypt_compact	ENDP
860PUBLIC	AES_decrypt
861
862ALIGN	16
863PUBLIC	asm_AES_decrypt
864
865asm_AES_decrypt::
866AES_decrypt	PROC PUBLIC
867	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
868	mov	QWORD PTR[16+rsp],rsi
869	mov	rax,rsp
870$L$SEH_begin_AES_decrypt::
871	mov	rdi,rcx
872	mov	rsi,rdx
873	mov	rdx,r8
874
875
876	push	rbx
877	push	rbp
878	push	r12
879	push	r13
880	push	r14
881	push	r15
882
883
884	mov	r10,rsp
885	lea	rcx,QWORD PTR[((-63))+rdx]
886	and	rsp,-64
887	sub	rcx,rsp
888	neg	rcx
889	and	rcx,03c0h
890	sub	rsp,rcx
891	sub	rsp,32
892
893	mov	QWORD PTR[16+rsp],rsi
894	mov	QWORD PTR[24+rsp],r10
895$L$dec_prologue::
896
897	mov	r15,rdx
898	mov	r13d,DWORD PTR[240+r15]
899
900	mov	eax,DWORD PTR[rdi]
901	mov	ebx,DWORD PTR[4+rdi]
902	mov	ecx,DWORD PTR[8+rdi]
903	mov	edx,DWORD PTR[12+rdi]
904
905	shl	r13d,4
906	lea	rbp,QWORD PTR[r13*1+r15]
907	mov	QWORD PTR[rsp],r15
908	mov	QWORD PTR[8+rsp],rbp
909
910
911	lea	r14,QWORD PTR[(($L$AES_Td+2048))]
912	lea	rbp,QWORD PTR[768+rsp]
913	sub	rbp,r14
914	and	rbp,0300h
915	lea	r14,QWORD PTR[rbp*1+r14]
916	shr	rbp,3
917	add	r14,rbp
918
919	call	_x86_64_AES_decrypt_compact
920
921	mov	r9,QWORD PTR[16+rsp]
922	mov	rsi,QWORD PTR[24+rsp]
923	mov	DWORD PTR[r9],eax
924	mov	DWORD PTR[4+r9],ebx
925	mov	DWORD PTR[8+r9],ecx
926	mov	DWORD PTR[12+r9],edx
927
928	mov	r15,QWORD PTR[rsi]
929	mov	r14,QWORD PTR[8+rsi]
930	mov	r13,QWORD PTR[16+rsi]
931	mov	r12,QWORD PTR[24+rsi]
932	mov	rbp,QWORD PTR[32+rsi]
933	mov	rbx,QWORD PTR[40+rsi]
934	lea	rsp,QWORD PTR[48+rsi]
935$L$dec_epilogue::
936	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
937	mov	rsi,QWORD PTR[16+rsp]
938	DB	0F3h,0C3h		;repret
939$L$SEH_end_AES_decrypt::
940AES_decrypt	ENDP
941PUBLIC	AES_set_encrypt_key
942
943ALIGN	16
944AES_set_encrypt_key	PROC PUBLIC
945	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
946	mov	QWORD PTR[16+rsp],rsi
947	mov	rax,rsp
948$L$SEH_begin_AES_set_encrypt_key::
949	mov	rdi,rcx
950	mov	rsi,rdx
951	mov	rdx,r8
952
953
954	push	rbx
955	push	rbp
956	push	r12
957	push	r13
958	push	r14
959	push	r15
960	sub	rsp,8
961$L$enc_key_prologue::
962
963	call	_x86_64_AES_set_encrypt_key
964
965	mov	r15,QWORD PTR[8+rsp]
966	mov	r14,QWORD PTR[16+rsp]
967	mov	r13,QWORD PTR[24+rsp]
968	mov	r12,QWORD PTR[32+rsp]
969	mov	rbp,QWORD PTR[40+rsp]
970	mov	rbx,QWORD PTR[48+rsp]
971	add	rsp,56
972$L$enc_key_epilogue::
973	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
974	mov	rsi,QWORD PTR[16+rsp]
975	DB	0F3h,0C3h		;repret
976$L$SEH_end_AES_set_encrypt_key::
977AES_set_encrypt_key	ENDP
978
979
980ALIGN	16
981_x86_64_AES_set_encrypt_key	PROC PRIVATE
982	mov	ecx,esi
983	mov	rsi,rdi
984	mov	rdi,rdx
985
986	test	rsi,-1
987	jz	$L$badpointer
988	test	rdi,-1
989	jz	$L$badpointer
990
991	lea	rbp,QWORD PTR[$L$AES_Te]
992	lea	rbp,QWORD PTR[((2048+128))+rbp]
993
994
995	mov	eax,DWORD PTR[((0-128))+rbp]
996	mov	ebx,DWORD PTR[((32-128))+rbp]
997	mov	r8d,DWORD PTR[((64-128))+rbp]
998	mov	edx,DWORD PTR[((96-128))+rbp]
999	mov	eax,DWORD PTR[((128-128))+rbp]
1000	mov	ebx,DWORD PTR[((160-128))+rbp]
1001	mov	r8d,DWORD PTR[((192-128))+rbp]
1002	mov	edx,DWORD PTR[((224-128))+rbp]
1003
1004	cmp	ecx,128
1005	je	$L$10rounds
1006	cmp	ecx,192
1007	je	$L$12rounds
1008	cmp	ecx,256
1009	je	$L$14rounds
1010	mov	rax,-2
1011	jmp	$L$exit
1012
1013$L$10rounds::
1014	mov	rax,QWORD PTR[rsi]
1015	mov	rdx,QWORD PTR[8+rsi]
1016	mov	QWORD PTR[rdi],rax
1017	mov	QWORD PTR[8+rdi],rdx
1018
1019	shr	rdx,32
1020	xor	ecx,ecx
1021	jmp	$L$10shortcut
1022ALIGN	4
1023$L$10loop::
1024	mov	eax,DWORD PTR[rdi]
1025	mov	edx,DWORD PTR[12+rdi]
1026$L$10shortcut::
1027	movzx	esi,dl
1028	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1029	movzx	esi,dh
1030	shl	ebx,24
1031	xor	eax,ebx
1032
1033	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1034	shr	edx,16
1035	movzx	esi,dl
1036	xor	eax,ebx
1037
1038	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1039	movzx	esi,dh
1040	shl	ebx,8
1041	xor	eax,ebx
1042
1043	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1044	shl	ebx,16
1045	xor	eax,ebx
1046
1047	xor	eax,DWORD PTR[((1024-128))+rcx*4+rbp]
1048	mov	DWORD PTR[16+rdi],eax
1049	xor	eax,DWORD PTR[4+rdi]
1050	mov	DWORD PTR[20+rdi],eax
1051	xor	eax,DWORD PTR[8+rdi]
1052	mov	DWORD PTR[24+rdi],eax
1053	xor	eax,DWORD PTR[12+rdi]
1054	mov	DWORD PTR[28+rdi],eax
1055	add	ecx,1
1056	lea	rdi,QWORD PTR[16+rdi]
1057	cmp	ecx,10
1058	jl	$L$10loop
1059
1060	mov	DWORD PTR[80+rdi],10
1061	xor	rax,rax
1062	jmp	$L$exit
1063
1064$L$12rounds::
1065	mov	rax,QWORD PTR[rsi]
1066	mov	rbx,QWORD PTR[8+rsi]
1067	mov	rdx,QWORD PTR[16+rsi]
1068	mov	QWORD PTR[rdi],rax
1069	mov	QWORD PTR[8+rdi],rbx
1070	mov	QWORD PTR[16+rdi],rdx
1071
1072	shr	rdx,32
1073	xor	ecx,ecx
1074	jmp	$L$12shortcut
1075ALIGN	4
1076$L$12loop::
1077	mov	eax,DWORD PTR[rdi]
1078	mov	edx,DWORD PTR[20+rdi]
1079$L$12shortcut::
1080	movzx	esi,dl
1081	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1082	movzx	esi,dh
1083	shl	ebx,24
1084	xor	eax,ebx
1085
1086	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1087	shr	edx,16
1088	movzx	esi,dl
1089	xor	eax,ebx
1090
1091	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1092	movzx	esi,dh
1093	shl	ebx,8
1094	xor	eax,ebx
1095
1096	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1097	shl	ebx,16
1098	xor	eax,ebx
1099
1100	xor	eax,DWORD PTR[((1024-128))+rcx*4+rbp]
1101	mov	DWORD PTR[24+rdi],eax
1102	xor	eax,DWORD PTR[4+rdi]
1103	mov	DWORD PTR[28+rdi],eax
1104	xor	eax,DWORD PTR[8+rdi]
1105	mov	DWORD PTR[32+rdi],eax
1106	xor	eax,DWORD PTR[12+rdi]
1107	mov	DWORD PTR[36+rdi],eax
1108
1109	cmp	ecx,7
1110	je	$L$12break
1111	add	ecx,1
1112
1113	xor	eax,DWORD PTR[16+rdi]
1114	mov	DWORD PTR[40+rdi],eax
1115	xor	eax,DWORD PTR[20+rdi]
1116	mov	DWORD PTR[44+rdi],eax
1117
1118	lea	rdi,QWORD PTR[24+rdi]
1119	jmp	$L$12loop
1120$L$12break::
1121	mov	DWORD PTR[72+rdi],12
1122	xor	rax,rax
1123	jmp	$L$exit
1124
1125$L$14rounds::
1126	mov	rax,QWORD PTR[rsi]
1127	mov	rbx,QWORD PTR[8+rsi]
1128	mov	rcx,QWORD PTR[16+rsi]
1129	mov	rdx,QWORD PTR[24+rsi]
1130	mov	QWORD PTR[rdi],rax
1131	mov	QWORD PTR[8+rdi],rbx
1132	mov	QWORD PTR[16+rdi],rcx
1133	mov	QWORD PTR[24+rdi],rdx
1134
1135	shr	rdx,32
1136	xor	ecx,ecx
1137	jmp	$L$14shortcut
1138ALIGN	4
1139$L$14loop::
1140	mov	eax,DWORD PTR[rdi]
1141	mov	edx,DWORD PTR[28+rdi]
1142$L$14shortcut::
1143	movzx	esi,dl
1144	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1145	movzx	esi,dh
1146	shl	ebx,24
1147	xor	eax,ebx
1148
1149	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1150	shr	edx,16
1151	movzx	esi,dl
1152	xor	eax,ebx
1153
1154	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1155	movzx	esi,dh
1156	shl	ebx,8
1157	xor	eax,ebx
1158
1159	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1160	shl	ebx,16
1161	xor	eax,ebx
1162
1163	xor	eax,DWORD PTR[((1024-128))+rcx*4+rbp]
1164	mov	DWORD PTR[32+rdi],eax
1165	xor	eax,DWORD PTR[4+rdi]
1166	mov	DWORD PTR[36+rdi],eax
1167	xor	eax,DWORD PTR[8+rdi]
1168	mov	DWORD PTR[40+rdi],eax
1169	xor	eax,DWORD PTR[12+rdi]
1170	mov	DWORD PTR[44+rdi],eax
1171
1172	cmp	ecx,6
1173	je	$L$14break
1174	add	ecx,1
1175
1176	mov	edx,eax
1177	mov	eax,DWORD PTR[16+rdi]
1178	movzx	esi,dl
1179	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1180	movzx	esi,dh
1181	xor	eax,ebx
1182
1183	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1184	shr	edx,16
1185	shl	ebx,8
1186	movzx	esi,dl
1187	xor	eax,ebx
1188
1189	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1190	movzx	esi,dh
1191	shl	ebx,16
1192	xor	eax,ebx
1193
1194	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1195	shl	ebx,24
1196	xor	eax,ebx
1197
1198	mov	DWORD PTR[48+rdi],eax
1199	xor	eax,DWORD PTR[20+rdi]
1200	mov	DWORD PTR[52+rdi],eax
1201	xor	eax,DWORD PTR[24+rdi]
1202	mov	DWORD PTR[56+rdi],eax
1203	xor	eax,DWORD PTR[28+rdi]
1204	mov	DWORD PTR[60+rdi],eax
1205
1206	lea	rdi,QWORD PTR[32+rdi]
1207	jmp	$L$14loop
1208$L$14break::
1209	mov	DWORD PTR[48+rdi],14
1210	xor	rax,rax
1211	jmp	$L$exit
1212
1213$L$badpointer::
1214	mov	rax,-1
1215$L$exit::
1216	DB	0F3h,0C3h		;repret
1217_x86_64_AES_set_encrypt_key	ENDP
1218PUBLIC	AES_set_decrypt_key
1219
1220ALIGN	16
1221AES_set_decrypt_key	PROC PUBLIC
1222	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
1223	mov	QWORD PTR[16+rsp],rsi
1224	mov	rax,rsp
1225$L$SEH_begin_AES_set_decrypt_key::
1226	mov	rdi,rcx
1227	mov	rsi,rdx
1228	mov	rdx,r8
1229
1230
1231	push	rbx
1232	push	rbp
1233	push	r12
1234	push	r13
1235	push	r14
1236	push	r15
1237	push	rdx
1238$L$dec_key_prologue::
1239
1240	call	_x86_64_AES_set_encrypt_key
1241	mov	r8,QWORD PTR[rsp]
1242	cmp	eax,0
1243	jne	$L$abort
1244
1245	mov	r14d,DWORD PTR[240+r8]
1246	xor	rdi,rdi
1247	lea	rcx,QWORD PTR[r14*4+rdi]
1248	mov	rsi,r8
1249	lea	rdi,QWORD PTR[rcx*4+r8]
1250ALIGN	4
1251$L$invert::
1252	mov	rax,QWORD PTR[rsi]
1253	mov	rbx,QWORD PTR[8+rsi]
1254	mov	rcx,QWORD PTR[rdi]
1255	mov	rdx,QWORD PTR[8+rdi]
1256	mov	QWORD PTR[rdi],rax
1257	mov	QWORD PTR[8+rdi],rbx
1258	mov	QWORD PTR[rsi],rcx
1259	mov	QWORD PTR[8+rsi],rdx
1260	lea	rsi,QWORD PTR[16+rsi]
1261	lea	rdi,QWORD PTR[((-16))+rdi]
1262	cmp	rdi,rsi
1263	jne	$L$invert
1264
1265	lea	rax,QWORD PTR[(($L$AES_Te+2048+1024))]
1266
1267	mov	rsi,QWORD PTR[40+rax]
1268	mov	rdi,QWORD PTR[48+rax]
1269	mov	rbp,QWORD PTR[56+rax]
1270
1271	mov	r15,r8
1272	sub	r14d,1
1273ALIGN	4
1274$L$permute::
1275	lea	r15,QWORD PTR[16+r15]
1276	mov	rax,QWORD PTR[r15]
1277	mov	rcx,QWORD PTR[8+r15]
1278	mov	rbx,rax
1279	mov	rdx,rcx
1280	and	rbx,rsi
1281	and	rdx,rsi
1282	mov	r9,rbx
1283	mov	r12,rdx
1284	shr	r9,7
1285	lea	r8,QWORD PTR[rax*1+rax]
1286	shr	r12,7
1287	lea	r11,QWORD PTR[rcx*1+rcx]
1288	sub	rbx,r9
1289	sub	rdx,r12
1290	and	r8,rdi
1291	and	r11,rdi
1292	and	rbx,rbp
1293	and	rdx,rbp
1294	xor	rbx,r8
1295	xor	rdx,r11
1296	mov	r8,rbx
1297	mov	r11,rdx
1298
1299	and	rbx,rsi
1300	and	rdx,rsi
1301	mov	r10,rbx
1302	mov	r13,rdx
1303	shr	r10,7
1304	lea	r9,QWORD PTR[r8*1+r8]
1305	shr	r13,7
1306	lea	r12,QWORD PTR[r11*1+r11]
1307	sub	rbx,r10
1308	sub	rdx,r13
1309	and	r9,rdi
1310	and	r12,rdi
1311	and	rbx,rbp
1312	and	rdx,rbp
1313	xor	rbx,r9
1314	xor	rdx,r12
1315	mov	r9,rbx
1316	mov	r12,rdx
1317
1318	and	rbx,rsi
1319	and	rdx,rsi
1320	mov	r10,rbx
1321	mov	r13,rdx
1322	shr	r10,7
1323	xor	r8,rax
1324	shr	r13,7
1325	xor	r11,rcx
1326	sub	rbx,r10
1327	sub	rdx,r13
1328	lea	r10,QWORD PTR[r9*1+r9]
1329	lea	r13,QWORD PTR[r12*1+r12]
1330	xor	r9,rax
1331	xor	r12,rcx
1332	and	r10,rdi
1333	and	r13,rdi
1334	and	rbx,rbp
1335	and	rdx,rbp
1336	xor	r10,rbx
1337	xor	r13,rdx
1338
1339	xor	rax,r10
1340	xor	rcx,r13
1341	xor	r8,r10
1342	xor	r11,r13
1343	mov	rbx,rax
1344	mov	rdx,rcx
1345	xor	r9,r10
1346	xor	r12,r13
1347	shr	rbx,32
1348	shr	rdx,32
1349	xor	r10,r8
1350	xor	r13,r11
1351	rol	eax,8
1352	rol	ecx,8
1353	xor	r10,r9
1354	xor	r13,r12
1355
1356	rol	ebx,8
1357	rol	edx,8
1358	xor	eax,r10d
1359	xor	ecx,r13d
1360	shr	r10,32
1361	shr	r13,32
1362	xor	ebx,r10d
1363	xor	edx,r13d
1364
1365	mov	r10,r8
1366	mov	r13,r11
1367	shr	r10,32
1368	shr	r13,32
1369	rol	r8d,24
1370	rol	r11d,24
1371	rol	r10d,24
1372	rol	r13d,24
1373	xor	eax,r8d
1374	xor	ecx,r11d
1375	mov	r8,r9
1376	mov	r11,r12
1377	xor	ebx,r10d
1378	xor	edx,r13d
1379
1380
1381	shr	r8,32
1382	shr	r11,32
1383
1384	rol	r9d,16
1385	rol	r12d,16
1386
1387	rol	r8d,16
1388	rol	r11d,16
1389
1390	xor	eax,r9d
1391	xor	ecx,r12d
1392
1393	xor	ebx,r8d
1394	xor	edx,r11d
1395	mov	DWORD PTR[r15],eax
1396	mov	DWORD PTR[4+r15],ebx
1397	mov	DWORD PTR[8+r15],ecx
1398	mov	DWORD PTR[12+r15],edx
1399	sub	r14d,1
1400	jnz	$L$permute
1401
1402	xor	rax,rax
1403$L$abort::
1404	mov	r15,QWORD PTR[8+rsp]
1405	mov	r14,QWORD PTR[16+rsp]
1406	mov	r13,QWORD PTR[24+rsp]
1407	mov	r12,QWORD PTR[32+rsp]
1408	mov	rbp,QWORD PTR[40+rsp]
1409	mov	rbx,QWORD PTR[48+rsp]
1410	add	rsp,56
1411$L$dec_key_epilogue::
1412	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
1413	mov	rsi,QWORD PTR[16+rsp]
1414	DB	0F3h,0C3h		;repret
1415$L$SEH_end_AES_set_decrypt_key::
1416AES_set_decrypt_key	ENDP
1417PUBLIC	AES_cbc_encrypt
1418
1419ALIGN	16
1420EXTERN	OPENSSL_ia32cap_P:NEAR
1421
1422PUBLIC	asm_AES_cbc_encrypt
1423
1424asm_AES_cbc_encrypt::
1425AES_cbc_encrypt	PROC PUBLIC
1426	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
1427	mov	QWORD PTR[16+rsp],rsi
1428	mov	rax,rsp
1429$L$SEH_begin_AES_cbc_encrypt::
1430	mov	rdi,rcx
1431	mov	rsi,rdx
1432	mov	rdx,r8
1433	mov	rcx,r9
1434	mov	r8,QWORD PTR[40+rsp]
1435	mov	r9,QWORD PTR[48+rsp]
1436
1437
1438	cmp	rdx,0
1439	je	$L$cbc_epilogue
1440	pushfq
1441	push	rbx
1442	push	rbp
1443	push	r12
1444	push	r13
1445	push	r14
1446	push	r15
1447$L$cbc_prologue::
1448
1449	cld
1450	mov	r9d,r9d
1451
1452	lea	r14,QWORD PTR[$L$AES_Te]
1453	cmp	r9,0
1454	jne	$L$cbc_picked_te
1455	lea	r14,QWORD PTR[$L$AES_Td]
1456$L$cbc_picked_te::
1457
1458	mov	r10d,DWORD PTR[OPENSSL_ia32cap_P]
1459	cmp	rdx,512
1460	jb	$L$cbc_slow_prologue
1461	test	rdx,15
1462	jnz	$L$cbc_slow_prologue
1463	bt	r10d,28
1464	jc	$L$cbc_slow_prologue
1465
1466
1467	lea	r15,QWORD PTR[((-88-248))+rsp]
1468	and	r15,-64
1469
1470
1471	mov	r10,r14
1472	lea	r11,QWORD PTR[2304+r14]
1473	mov	r12,r15
1474	and	r10,0FFFh
1475	and	r11,0FFFh
1476	and	r12,0FFFh
1477
1478	cmp	r12,r11
1479	jb	$L$cbc_te_break_out
1480	sub	r12,r11
1481	sub	r15,r12
1482	jmp	$L$cbc_te_ok
1483$L$cbc_te_break_out::
1484	sub	r12,r10
1485	and	r12,0FFFh
1486	add	r12,320
1487	sub	r15,r12
1488ALIGN	4
1489$L$cbc_te_ok::
1490
1491	xchg	r15,rsp
1492
1493	mov	QWORD PTR[16+rsp],r15
1494$L$cbc_fast_body::
1495	mov	QWORD PTR[24+rsp],rdi
1496	mov	QWORD PTR[32+rsp],rsi
1497	mov	QWORD PTR[40+rsp],rdx
1498	mov	QWORD PTR[48+rsp],rcx
1499	mov	QWORD PTR[56+rsp],r8
1500	mov	DWORD PTR[((80+240))+rsp],0
1501	mov	rbp,r8
1502	mov	rbx,r9
1503	mov	r9,rsi
1504	mov	r8,rdi
1505	mov	r15,rcx
1506
1507	mov	eax,DWORD PTR[240+r15]
1508
1509	mov	r10,r15
1510	sub	r10,r14
1511	and	r10,0fffh
1512	cmp	r10,2304
1513	jb	$L$cbc_do_ecopy
1514	cmp	r10,4096-248
1515	jb	$L$cbc_skip_ecopy
1516ALIGN	4
1517$L$cbc_do_ecopy::
1518	mov	rsi,r15
1519	lea	rdi,QWORD PTR[80+rsp]
1520	lea	r15,QWORD PTR[80+rsp]
1521	mov	ecx,240/8
1522	DD	090A548F3h
1523	mov	DWORD PTR[rdi],eax
1524$L$cbc_skip_ecopy::
1525	mov	QWORD PTR[rsp],r15
1526
1527	mov	ecx,18
1528ALIGN	4
1529$L$cbc_prefetch_te::
1530	mov	r10,QWORD PTR[r14]
1531	mov	r11,QWORD PTR[32+r14]
1532	mov	r12,QWORD PTR[64+r14]
1533	mov	r13,QWORD PTR[96+r14]
1534	lea	r14,QWORD PTR[128+r14]
1535	sub	ecx,1
1536	jnz	$L$cbc_prefetch_te
1537	lea	r14,QWORD PTR[((-2304))+r14]
1538
1539	cmp	rbx,0
1540	je	$L$FAST_DECRYPT
1541
1542
1543	mov	eax,DWORD PTR[rbp]
1544	mov	ebx,DWORD PTR[4+rbp]
1545	mov	ecx,DWORD PTR[8+rbp]
1546	mov	edx,DWORD PTR[12+rbp]
1547
1548ALIGN	4
1549$L$cbc_fast_enc_loop::
1550	xor	eax,DWORD PTR[r8]
1551	xor	ebx,DWORD PTR[4+r8]
1552	xor	ecx,DWORD PTR[8+r8]
1553	xor	edx,DWORD PTR[12+r8]
1554	mov	r15,QWORD PTR[rsp]
1555	mov	QWORD PTR[24+rsp],r8
1556
1557	call	_x86_64_AES_encrypt
1558
1559	mov	r8,QWORD PTR[24+rsp]
1560	mov	r10,QWORD PTR[40+rsp]
1561	mov	DWORD PTR[r9],eax
1562	mov	DWORD PTR[4+r9],ebx
1563	mov	DWORD PTR[8+r9],ecx
1564	mov	DWORD PTR[12+r9],edx
1565
1566	lea	r8,QWORD PTR[16+r8]
1567	lea	r9,QWORD PTR[16+r9]
1568	sub	r10,16
1569	test	r10,-16
1570	mov	QWORD PTR[40+rsp],r10
1571	jnz	$L$cbc_fast_enc_loop
1572	mov	rbp,QWORD PTR[56+rsp]
1573	mov	DWORD PTR[rbp],eax
1574	mov	DWORD PTR[4+rbp],ebx
1575	mov	DWORD PTR[8+rbp],ecx
1576	mov	DWORD PTR[12+rbp],edx
1577
1578	jmp	$L$cbc_fast_cleanup
1579
1580
1581ALIGN	16
1582$L$FAST_DECRYPT::
1583	cmp	r9,r8
1584	je	$L$cbc_fast_dec_in_place
1585
1586	mov	QWORD PTR[64+rsp],rbp
1587ALIGN	4
1588$L$cbc_fast_dec_loop::
1589	mov	eax,DWORD PTR[r8]
1590	mov	ebx,DWORD PTR[4+r8]
1591	mov	ecx,DWORD PTR[8+r8]
1592	mov	edx,DWORD PTR[12+r8]
1593	mov	r15,QWORD PTR[rsp]
1594	mov	QWORD PTR[24+rsp],r8
1595
1596	call	_x86_64_AES_decrypt
1597
1598	mov	rbp,QWORD PTR[64+rsp]
1599	mov	r8,QWORD PTR[24+rsp]
1600	mov	r10,QWORD PTR[40+rsp]
1601	xor	eax,DWORD PTR[rbp]
1602	xor	ebx,DWORD PTR[4+rbp]
1603	xor	ecx,DWORD PTR[8+rbp]
1604	xor	edx,DWORD PTR[12+rbp]
1605	mov	rbp,r8
1606
1607	sub	r10,16
1608	mov	QWORD PTR[40+rsp],r10
1609	mov	QWORD PTR[64+rsp],rbp
1610
1611	mov	DWORD PTR[r9],eax
1612	mov	DWORD PTR[4+r9],ebx
1613	mov	DWORD PTR[8+r9],ecx
1614	mov	DWORD PTR[12+r9],edx
1615
1616	lea	r8,QWORD PTR[16+r8]
1617	lea	r9,QWORD PTR[16+r9]
1618	jnz	$L$cbc_fast_dec_loop
1619	mov	r12,QWORD PTR[56+rsp]
1620	mov	r10,QWORD PTR[rbp]
1621	mov	r11,QWORD PTR[8+rbp]
1622	mov	QWORD PTR[r12],r10
1623	mov	QWORD PTR[8+r12],r11
1624	jmp	$L$cbc_fast_cleanup
1625
1626ALIGN	16
1627$L$cbc_fast_dec_in_place::
1628	mov	r10,QWORD PTR[rbp]
1629	mov	r11,QWORD PTR[8+rbp]
1630	mov	QWORD PTR[((0+64))+rsp],r10
1631	mov	QWORD PTR[((8+64))+rsp],r11
1632ALIGN	4
1633$L$cbc_fast_dec_in_place_loop::
1634	mov	eax,DWORD PTR[r8]
1635	mov	ebx,DWORD PTR[4+r8]
1636	mov	ecx,DWORD PTR[8+r8]
1637	mov	edx,DWORD PTR[12+r8]
1638	mov	r15,QWORD PTR[rsp]
1639	mov	QWORD PTR[24+rsp],r8
1640
1641	call	_x86_64_AES_decrypt
1642
1643	mov	r8,QWORD PTR[24+rsp]
1644	mov	r10,QWORD PTR[40+rsp]
1645	xor	eax,DWORD PTR[((0+64))+rsp]
1646	xor	ebx,DWORD PTR[((4+64))+rsp]
1647	xor	ecx,DWORD PTR[((8+64))+rsp]
1648	xor	edx,DWORD PTR[((12+64))+rsp]
1649
1650	mov	r11,QWORD PTR[r8]
1651	mov	r12,QWORD PTR[8+r8]
1652	sub	r10,16
1653	jz	$L$cbc_fast_dec_in_place_done
1654
1655	mov	QWORD PTR[((0+64))+rsp],r11
1656	mov	QWORD PTR[((8+64))+rsp],r12
1657
1658	mov	DWORD PTR[r9],eax
1659	mov	DWORD PTR[4+r9],ebx
1660	mov	DWORD PTR[8+r9],ecx
1661	mov	DWORD PTR[12+r9],edx
1662
1663	lea	r8,QWORD PTR[16+r8]
1664	lea	r9,QWORD PTR[16+r9]
1665	mov	QWORD PTR[40+rsp],r10
1666	jmp	$L$cbc_fast_dec_in_place_loop
1667$L$cbc_fast_dec_in_place_done::
1668	mov	rdi,QWORD PTR[56+rsp]
1669	mov	QWORD PTR[rdi],r11
1670	mov	QWORD PTR[8+rdi],r12
1671
1672	mov	DWORD PTR[r9],eax
1673	mov	DWORD PTR[4+r9],ebx
1674	mov	DWORD PTR[8+r9],ecx
1675	mov	DWORD PTR[12+r9],edx
1676
1677ALIGN	4
1678$L$cbc_fast_cleanup::
1679	cmp	DWORD PTR[((80+240))+rsp],0
1680	lea	rdi,QWORD PTR[80+rsp]
1681	je	$L$cbc_exit
1682	mov	ecx,240/8
1683	xor	rax,rax
1684	DD	090AB48F3h
1685
1686	jmp	$L$cbc_exit
1687
1688
1689ALIGN	16
1690$L$cbc_slow_prologue::
1691
1692	lea	rbp,QWORD PTR[((-88))+rsp]
1693	and	rbp,-64
1694
1695	lea	r10,QWORD PTR[((-88-63))+rcx]
1696	sub	r10,rbp
1697	neg	r10
1698	and	r10,03c0h
1699	sub	rbp,r10
1700
1701	xchg	rbp,rsp
1702
1703	mov	QWORD PTR[16+rsp],rbp
1704$L$cbc_slow_body::
1705
1706
1707
1708
1709	mov	QWORD PTR[56+rsp],r8
1710	mov	rbp,r8
1711	mov	rbx,r9
1712	mov	r9,rsi
1713	mov	r8,rdi
1714	mov	r15,rcx
1715	mov	r10,rdx
1716
1717	mov	eax,DWORD PTR[240+r15]
1718	mov	QWORD PTR[rsp],r15
1719	shl	eax,4
1720	lea	rax,QWORD PTR[rax*1+r15]
1721	mov	QWORD PTR[8+rsp],rax
1722
1723
1724	lea	r14,QWORD PTR[2048+r14]
1725	lea	rax,QWORD PTR[((768-8))+rsp]
1726	sub	rax,r14
1727	and	rax,0300h
1728	lea	r14,QWORD PTR[rax*1+r14]
1729
1730	cmp	rbx,0
1731	je	$L$SLOW_DECRYPT
1732
1733
1734	test	r10,-16
1735	mov	eax,DWORD PTR[rbp]
1736	mov	ebx,DWORD PTR[4+rbp]
1737	mov	ecx,DWORD PTR[8+rbp]
1738	mov	edx,DWORD PTR[12+rbp]
1739	jz	$L$cbc_slow_enc_tail
1740
1741ALIGN	4
1742$L$cbc_slow_enc_loop::
1743	xor	eax,DWORD PTR[r8]
1744	xor	ebx,DWORD PTR[4+r8]
1745	xor	ecx,DWORD PTR[8+r8]
1746	xor	edx,DWORD PTR[12+r8]
1747	mov	r15,QWORD PTR[rsp]
1748	mov	QWORD PTR[24+rsp],r8
1749	mov	QWORD PTR[32+rsp],r9
1750	mov	QWORD PTR[40+rsp],r10
1751
1752	call	_x86_64_AES_encrypt_compact
1753
1754	mov	r8,QWORD PTR[24+rsp]
1755	mov	r9,QWORD PTR[32+rsp]
1756	mov	r10,QWORD PTR[40+rsp]
1757	mov	DWORD PTR[r9],eax
1758	mov	DWORD PTR[4+r9],ebx
1759	mov	DWORD PTR[8+r9],ecx
1760	mov	DWORD PTR[12+r9],edx
1761
1762	lea	r8,QWORD PTR[16+r8]
1763	lea	r9,QWORD PTR[16+r9]
1764	sub	r10,16
1765	test	r10,-16
1766	jnz	$L$cbc_slow_enc_loop
1767	test	r10,15
1768	jnz	$L$cbc_slow_enc_tail
1769	mov	rbp,QWORD PTR[56+rsp]
1770	mov	DWORD PTR[rbp],eax
1771	mov	DWORD PTR[4+rbp],ebx
1772	mov	DWORD PTR[8+rbp],ecx
1773	mov	DWORD PTR[12+rbp],edx
1774
1775	jmp	$L$cbc_exit
1776
1777ALIGN	4
1778$L$cbc_slow_enc_tail::
1779	mov	r11,rax
1780	mov	r12,rcx
1781	mov	rcx,r10
1782	mov	rsi,r8
1783	mov	rdi,r9
1784	DD	09066A4F3h
1785	mov	rcx,16
1786	sub	rcx,r10
1787	xor	rax,rax
1788	DD	09066AAF3h
1789	mov	r8,r9
1790	mov	r10,16
1791	mov	rax,r11
1792	mov	rcx,r12
1793	jmp	$L$cbc_slow_enc_loop
1794
1795ALIGN	16
1796$L$SLOW_DECRYPT::
1797	shr	rax,3
1798	add	r14,rax
1799
1800	mov	r11,QWORD PTR[rbp]
1801	mov	r12,QWORD PTR[8+rbp]
1802	mov	QWORD PTR[((0+64))+rsp],r11
1803	mov	QWORD PTR[((8+64))+rsp],r12
1804
1805ALIGN	4
1806$L$cbc_slow_dec_loop::
1807	mov	eax,DWORD PTR[r8]
1808	mov	ebx,DWORD PTR[4+r8]
1809	mov	ecx,DWORD PTR[8+r8]
1810	mov	edx,DWORD PTR[12+r8]
1811	mov	r15,QWORD PTR[rsp]
1812	mov	QWORD PTR[24+rsp],r8
1813	mov	QWORD PTR[32+rsp],r9
1814	mov	QWORD PTR[40+rsp],r10
1815
1816	call	_x86_64_AES_decrypt_compact
1817
1818	mov	r8,QWORD PTR[24+rsp]
1819	mov	r9,QWORD PTR[32+rsp]
1820	mov	r10,QWORD PTR[40+rsp]
1821	xor	eax,DWORD PTR[((0+64))+rsp]
1822	xor	ebx,DWORD PTR[((4+64))+rsp]
1823	xor	ecx,DWORD PTR[((8+64))+rsp]
1824	xor	edx,DWORD PTR[((12+64))+rsp]
1825
1826	mov	r11,QWORD PTR[r8]
1827	mov	r12,QWORD PTR[8+r8]
1828	sub	r10,16
1829	jc	$L$cbc_slow_dec_partial
1830	jz	$L$cbc_slow_dec_done
1831
1832	mov	QWORD PTR[((0+64))+rsp],r11
1833	mov	QWORD PTR[((8+64))+rsp],r12
1834
1835	mov	DWORD PTR[r9],eax
1836	mov	DWORD PTR[4+r9],ebx
1837	mov	DWORD PTR[8+r9],ecx
1838	mov	DWORD PTR[12+r9],edx
1839
1840	lea	r8,QWORD PTR[16+r8]
1841	lea	r9,QWORD PTR[16+r9]
1842	jmp	$L$cbc_slow_dec_loop
1843$L$cbc_slow_dec_done::
1844	mov	rdi,QWORD PTR[56+rsp]
1845	mov	QWORD PTR[rdi],r11
1846	mov	QWORD PTR[8+rdi],r12
1847
1848	mov	DWORD PTR[r9],eax
1849	mov	DWORD PTR[4+r9],ebx
1850	mov	DWORD PTR[8+r9],ecx
1851	mov	DWORD PTR[12+r9],edx
1852
1853	jmp	$L$cbc_exit
1854
1855ALIGN	4
1856$L$cbc_slow_dec_partial::
1857	mov	rdi,QWORD PTR[56+rsp]
1858	mov	QWORD PTR[rdi],r11
1859	mov	QWORD PTR[8+rdi],r12
1860
1861	mov	DWORD PTR[((0+64))+rsp],eax
1862	mov	DWORD PTR[((4+64))+rsp],ebx
1863	mov	DWORD PTR[((8+64))+rsp],ecx
1864	mov	DWORD PTR[((12+64))+rsp],edx
1865
1866	mov	rdi,r9
1867	lea	rsi,QWORD PTR[64+rsp]
1868	lea	rcx,QWORD PTR[16+r10]
1869	DD	09066A4F3h
1870	jmp	$L$cbc_exit
1871
1872ALIGN	16
1873$L$cbc_exit::
1874	mov	rsi,QWORD PTR[16+rsp]
1875	mov	r15,QWORD PTR[rsi]
1876	mov	r14,QWORD PTR[8+rsi]
1877	mov	r13,QWORD PTR[16+rsi]
1878	mov	r12,QWORD PTR[24+rsi]
1879	mov	rbp,QWORD PTR[32+rsi]
1880	mov	rbx,QWORD PTR[40+rsi]
1881	lea	rsp,QWORD PTR[48+rsi]
1882$L$cbc_popfq::
1883	popfq
1884$L$cbc_epilogue::
1885	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
1886	mov	rsi,QWORD PTR[16+rsp]
1887	DB	0F3h,0C3h		;repret
1888$L$SEH_end_AES_cbc_encrypt::
1889AES_cbc_encrypt	ENDP
1890ALIGN	64
1891$L$AES_Te::
1892	DD	0a56363c6h,0a56363c6h
1893	DD	0847c7cf8h,0847c7cf8h
1894	DD	0997777eeh,0997777eeh
1895	DD	08d7b7bf6h,08d7b7bf6h
1896	DD	00df2f2ffh,00df2f2ffh
1897	DD	0bd6b6bd6h,0bd6b6bd6h
1898	DD	0b16f6fdeh,0b16f6fdeh
1899	DD	054c5c591h,054c5c591h
1900	DD	050303060h,050303060h
1901	DD	003010102h,003010102h
1902	DD	0a96767ceh,0a96767ceh
1903	DD	07d2b2b56h,07d2b2b56h
1904	DD	019fefee7h,019fefee7h
1905	DD	062d7d7b5h,062d7d7b5h
1906	DD	0e6abab4dh,0e6abab4dh
1907	DD	09a7676ech,09a7676ech
1908	DD	045caca8fh,045caca8fh
1909	DD	09d82821fh,09d82821fh
1910	DD	040c9c989h,040c9c989h
1911	DD	0877d7dfah,0877d7dfah
1912	DD	015fafaefh,015fafaefh
1913	DD	0eb5959b2h,0eb5959b2h
1914	DD	0c947478eh,0c947478eh
1915	DD	00bf0f0fbh,00bf0f0fbh
1916	DD	0ecadad41h,0ecadad41h
1917	DD	067d4d4b3h,067d4d4b3h
1918	DD	0fda2a25fh,0fda2a25fh
1919	DD	0eaafaf45h,0eaafaf45h
1920	DD	0bf9c9c23h,0bf9c9c23h
1921	DD	0f7a4a453h,0f7a4a453h
1922	DD	0967272e4h,0967272e4h
1923	DD	05bc0c09bh,05bc0c09bh
1924	DD	0c2b7b775h,0c2b7b775h
1925	DD	01cfdfde1h,01cfdfde1h
1926	DD	0ae93933dh,0ae93933dh
1927	DD	06a26264ch,06a26264ch
1928	DD	05a36366ch,05a36366ch
1929	DD	0413f3f7eh,0413f3f7eh
1930	DD	002f7f7f5h,002f7f7f5h
1931	DD	04fcccc83h,04fcccc83h
1932	DD	05c343468h,05c343468h
1933	DD	0f4a5a551h,0f4a5a551h
1934	DD	034e5e5d1h,034e5e5d1h
1935	DD	008f1f1f9h,008f1f1f9h
1936	DD	0937171e2h,0937171e2h
1937	DD	073d8d8abh,073d8d8abh
1938	DD	053313162h,053313162h
1939	DD	03f15152ah,03f15152ah
1940	DD	00c040408h,00c040408h
1941	DD	052c7c795h,052c7c795h
1942	DD	065232346h,065232346h
1943	DD	05ec3c39dh,05ec3c39dh
1944	DD	028181830h,028181830h
1945	DD	0a1969637h,0a1969637h
1946	DD	00f05050ah,00f05050ah
1947	DD	0b59a9a2fh,0b59a9a2fh
1948	DD	00907070eh,00907070eh
1949	DD	036121224h,036121224h
1950	DD	09b80801bh,09b80801bh
1951	DD	03de2e2dfh,03de2e2dfh
1952	DD	026ebebcdh,026ebebcdh
1953	DD	06927274eh,06927274eh
1954	DD	0cdb2b27fh,0cdb2b27fh
1955	DD	09f7575eah,09f7575eah
1956	DD	01b090912h,01b090912h
1957	DD	09e83831dh,09e83831dh
1958	DD	0742c2c58h,0742c2c58h
1959	DD	02e1a1a34h,02e1a1a34h
1960	DD	02d1b1b36h,02d1b1b36h
1961	DD	0b26e6edch,0b26e6edch
1962	DD	0ee5a5ab4h,0ee5a5ab4h
1963	DD	0fba0a05bh,0fba0a05bh
1964	DD	0f65252a4h,0f65252a4h
1965	DD	04d3b3b76h,04d3b3b76h
1966	DD	061d6d6b7h,061d6d6b7h
1967	DD	0ceb3b37dh,0ceb3b37dh
1968	DD	07b292952h,07b292952h
1969	DD	03ee3e3ddh,03ee3e3ddh
1970	DD	0712f2f5eh,0712f2f5eh
1971	DD	097848413h,097848413h
1972	DD	0f55353a6h,0f55353a6h
1973	DD	068d1d1b9h,068d1d1b9h
1974	DD	000000000h,000000000h
1975	DD	02cededc1h,02cededc1h
1976	DD	060202040h,060202040h
1977	DD	01ffcfce3h,01ffcfce3h
1978	DD	0c8b1b179h,0c8b1b179h
1979	DD	0ed5b5bb6h,0ed5b5bb6h
1980	DD	0be6a6ad4h,0be6a6ad4h
1981	DD	046cbcb8dh,046cbcb8dh
1982	DD	0d9bebe67h,0d9bebe67h
1983	DD	04b393972h,04b393972h
1984	DD	0de4a4a94h,0de4a4a94h
1985	DD	0d44c4c98h,0d44c4c98h
1986	DD	0e85858b0h,0e85858b0h
1987	DD	04acfcf85h,04acfcf85h
1988	DD	06bd0d0bbh,06bd0d0bbh
1989	DD	02aefefc5h,02aefefc5h
1990	DD	0e5aaaa4fh,0e5aaaa4fh
1991	DD	016fbfbedh,016fbfbedh
1992	DD	0c5434386h,0c5434386h
1993	DD	0d74d4d9ah,0d74d4d9ah
1994	DD	055333366h,055333366h
1995	DD	094858511h,094858511h
1996	DD	0cf45458ah,0cf45458ah
1997	DD	010f9f9e9h,010f9f9e9h
1998	DD	006020204h,006020204h
1999	DD	0817f7ffeh,0817f7ffeh
2000	DD	0f05050a0h,0f05050a0h
2001	DD	0443c3c78h,0443c3c78h
2002	DD	0ba9f9f25h,0ba9f9f25h
2003	DD	0e3a8a84bh,0e3a8a84bh
2004	DD	0f35151a2h,0f35151a2h
2005	DD	0fea3a35dh,0fea3a35dh
2006	DD	0c0404080h,0c0404080h
2007	DD	08a8f8f05h,08a8f8f05h
2008	DD	0ad92923fh,0ad92923fh
2009	DD	0bc9d9d21h,0bc9d9d21h
2010	DD	048383870h,048383870h
2011	DD	004f5f5f1h,004f5f5f1h
2012	DD	0dfbcbc63h,0dfbcbc63h
2013	DD	0c1b6b677h,0c1b6b677h
2014	DD	075dadaafh,075dadaafh
2015	DD	063212142h,063212142h
2016	DD	030101020h,030101020h
2017	DD	01affffe5h,01affffe5h
2018	DD	00ef3f3fdh,00ef3f3fdh
2019	DD	06dd2d2bfh,06dd2d2bfh
2020	DD	04ccdcd81h,04ccdcd81h
2021	DD	0140c0c18h,0140c0c18h
2022	DD	035131326h,035131326h
2023	DD	02fececc3h,02fececc3h
2024	DD	0e15f5fbeh,0e15f5fbeh
2025	DD	0a2979735h,0a2979735h
2026	DD	0cc444488h,0cc444488h
2027	DD	03917172eh,03917172eh
2028	DD	057c4c493h,057c4c493h
2029	DD	0f2a7a755h,0f2a7a755h
2030	DD	0827e7efch,0827e7efch
2031	DD	0473d3d7ah,0473d3d7ah
2032	DD	0ac6464c8h,0ac6464c8h
2033	DD	0e75d5dbah,0e75d5dbah
2034	DD	02b191932h,02b191932h
2035	DD	0957373e6h,0957373e6h
2036	DD	0a06060c0h,0a06060c0h
2037	DD	098818119h,098818119h
2038	DD	0d14f4f9eh,0d14f4f9eh
2039	DD	07fdcdca3h,07fdcdca3h
2040	DD	066222244h,066222244h
2041	DD	07e2a2a54h,07e2a2a54h
2042	DD	0ab90903bh,0ab90903bh
2043	DD	08388880bh,08388880bh
2044	DD	0ca46468ch,0ca46468ch
2045	DD	029eeeec7h,029eeeec7h
2046	DD	0d3b8b86bh,0d3b8b86bh
2047	DD	03c141428h,03c141428h
2048	DD	079dedea7h,079dedea7h
2049	DD	0e25e5ebch,0e25e5ebch
2050	DD	01d0b0b16h,01d0b0b16h
2051	DD	076dbdbadh,076dbdbadh
2052	DD	03be0e0dbh,03be0e0dbh
2053	DD	056323264h,056323264h
2054	DD	04e3a3a74h,04e3a3a74h
2055	DD	01e0a0a14h,01e0a0a14h
2056	DD	0db494992h,0db494992h
2057	DD	00a06060ch,00a06060ch
2058	DD	06c242448h,06c242448h
2059	DD	0e45c5cb8h,0e45c5cb8h
2060	DD	05dc2c29fh,05dc2c29fh
2061	DD	06ed3d3bdh,06ed3d3bdh
2062	DD	0efacac43h,0efacac43h
2063	DD	0a66262c4h,0a66262c4h
2064	DD	0a8919139h,0a8919139h
2065	DD	0a4959531h,0a4959531h
2066	DD	037e4e4d3h,037e4e4d3h
2067	DD	08b7979f2h,08b7979f2h
2068	DD	032e7e7d5h,032e7e7d5h
2069	DD	043c8c88bh,043c8c88bh
2070	DD	05937376eh,05937376eh
2071	DD	0b76d6ddah,0b76d6ddah
2072	DD	08c8d8d01h,08c8d8d01h
2073	DD	064d5d5b1h,064d5d5b1h
2074	DD	0d24e4e9ch,0d24e4e9ch
2075	DD	0e0a9a949h,0e0a9a949h
2076	DD	0b46c6cd8h,0b46c6cd8h
2077	DD	0fa5656ach,0fa5656ach
2078	DD	007f4f4f3h,007f4f4f3h
2079	DD	025eaeacfh,025eaeacfh
2080	DD	0af6565cah,0af6565cah
2081	DD	08e7a7af4h,08e7a7af4h
2082	DD	0e9aeae47h,0e9aeae47h
2083	DD	018080810h,018080810h
2084	DD	0d5baba6fh,0d5baba6fh
2085	DD	0887878f0h,0887878f0h
2086	DD	06f25254ah,06f25254ah
2087	DD	0722e2e5ch,0722e2e5ch
2088	DD	0241c1c38h,0241c1c38h
2089	DD	0f1a6a657h,0f1a6a657h
2090	DD	0c7b4b473h,0c7b4b473h
2091	DD	051c6c697h,051c6c697h
2092	DD	023e8e8cbh,023e8e8cbh
2093	DD	07cdddda1h,07cdddda1h
2094	DD	09c7474e8h,09c7474e8h
2095	DD	0211f1f3eh,0211f1f3eh
2096	DD	0dd4b4b96h,0dd4b4b96h
2097	DD	0dcbdbd61h,0dcbdbd61h
2098	DD	0868b8b0dh,0868b8b0dh
2099	DD	0858a8a0fh,0858a8a0fh
2100	DD	0907070e0h,0907070e0h
2101	DD	0423e3e7ch,0423e3e7ch
2102	DD	0c4b5b571h,0c4b5b571h
2103	DD	0aa6666cch,0aa6666cch
2104	DD	0d8484890h,0d8484890h
2105	DD	005030306h,005030306h
2106	DD	001f6f6f7h,001f6f6f7h
2107	DD	0120e0e1ch,0120e0e1ch
2108	DD	0a36161c2h,0a36161c2h
2109	DD	05f35356ah,05f35356ah
2110	DD	0f95757aeh,0f95757aeh
2111	DD	0d0b9b969h,0d0b9b969h
2112	DD	091868617h,091868617h
2113	DD	058c1c199h,058c1c199h
2114	DD	0271d1d3ah,0271d1d3ah
2115	DD	0b99e9e27h,0b99e9e27h
2116	DD	038e1e1d9h,038e1e1d9h
2117	DD	013f8f8ebh,013f8f8ebh
2118	DD	0b398982bh,0b398982bh
2119	DD	033111122h,033111122h
2120	DD	0bb6969d2h,0bb6969d2h
2121	DD	070d9d9a9h,070d9d9a9h
2122	DD	0898e8e07h,0898e8e07h
2123	DD	0a7949433h,0a7949433h
2124	DD	0b69b9b2dh,0b69b9b2dh
2125	DD	0221e1e3ch,0221e1e3ch
2126	DD	092878715h,092878715h
2127	DD	020e9e9c9h,020e9e9c9h
2128	DD	049cece87h,049cece87h
2129	DD	0ff5555aah,0ff5555aah
2130	DD	078282850h,078282850h
2131	DD	07adfdfa5h,07adfdfa5h
2132	DD	08f8c8c03h,08f8c8c03h
2133	DD	0f8a1a159h,0f8a1a159h
2134	DD	080898909h,080898909h
2135	DD	0170d0d1ah,0170d0d1ah
2136	DD	0dabfbf65h,0dabfbf65h
2137	DD	031e6e6d7h,031e6e6d7h
2138	DD	0c6424284h,0c6424284h
2139	DD	0b86868d0h,0b86868d0h
2140	DD	0c3414182h,0c3414182h
2141	DD	0b0999929h,0b0999929h
2142	DD	0772d2d5ah,0772d2d5ah
2143	DD	0110f0f1eh,0110f0f1eh
2144	DD	0cbb0b07bh,0cbb0b07bh
2145	DD	0fc5454a8h,0fc5454a8h
2146	DD	0d6bbbb6dh,0d6bbbb6dh
2147	DD	03a16162ch,03a16162ch
2148DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2149DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2150DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2151DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2152DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2153DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2154DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2155DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2156DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2157DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2158DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2159DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2160DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2161DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2162DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2163DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2164DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2165DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2166DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2167DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2168DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2169DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2170DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2171DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2172DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2173DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2174DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2175DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2176DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2177DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2178DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2179DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2180DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2181DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2182DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2183DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2184DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2185DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2186DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2187DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2188DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2189DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2190DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2191DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2192DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2193DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2194DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2195DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2196DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2197DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2198DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2199DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2200DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2201DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2202DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2203DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2204DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2205DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2206DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2207DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2208DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2209DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2210DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2211DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2212DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2213DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2214DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2215DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2216DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2217DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2218DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2219DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2220DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2221DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2222DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2223DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2224DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2225DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2226DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2227DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2228DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2229DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2230DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2231DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2232DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2233DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2234DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2235DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2236DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2237DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2238DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2239DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2240DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2241DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2242DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2243DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2244DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2245DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2246DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2247DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2248DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2249DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2250DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2251DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2252DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2253DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2254DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2255DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2256DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2257DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2258DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2259DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2260DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2261DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2262DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2263DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2264DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2265DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2266DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2267DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2268DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2269DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2270DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2271DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2272DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2273DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2274DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2275DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2276	DD	000000001h,000000002h,000000004h,000000008h
2277	DD	000000010h,000000020h,000000040h,000000080h
2278	DD	00000001bh,000000036h,080808080h,080808080h
2279	DD	0fefefefeh,0fefefefeh,01b1b1b1bh,01b1b1b1bh
2280ALIGN	64
2281$L$AES_Td::
2282	DD	050a7f451h,050a7f451h
2283	DD	05365417eh,05365417eh
2284	DD	0c3a4171ah,0c3a4171ah
2285	DD	0965e273ah,0965e273ah
2286	DD	0cb6bab3bh,0cb6bab3bh
2287	DD	0f1459d1fh,0f1459d1fh
2288	DD	0ab58faach,0ab58faach
2289	DD	09303e34bh,09303e34bh
2290	DD	055fa3020h,055fa3020h
2291	DD	0f66d76adh,0f66d76adh
2292	DD	09176cc88h,09176cc88h
2293	DD	0254c02f5h,0254c02f5h
2294	DD	0fcd7e54fh,0fcd7e54fh
2295	DD	0d7cb2ac5h,0d7cb2ac5h
2296	DD	080443526h,080443526h
2297	DD	08fa362b5h,08fa362b5h
2298	DD	0495ab1deh,0495ab1deh
2299	DD	0671bba25h,0671bba25h
2300	DD	0980eea45h,0980eea45h
2301	DD	0e1c0fe5dh,0e1c0fe5dh
2302	DD	002752fc3h,002752fc3h
2303	DD	012f04c81h,012f04c81h
2304	DD	0a397468dh,0a397468dh
2305	DD	0c6f9d36bh,0c6f9d36bh
2306	DD	0e75f8f03h,0e75f8f03h
2307	DD	0959c9215h,0959c9215h
2308	DD	0eb7a6dbfh,0eb7a6dbfh
2309	DD	0da595295h,0da595295h
2310	DD	02d83bed4h,02d83bed4h
2311	DD	0d3217458h,0d3217458h
2312	DD	02969e049h,02969e049h
2313	DD	044c8c98eh,044c8c98eh
2314	DD	06a89c275h,06a89c275h
2315	DD	078798ef4h,078798ef4h
2316	DD	06b3e5899h,06b3e5899h
2317	DD	0dd71b927h,0dd71b927h
2318	DD	0b64fe1beh,0b64fe1beh
2319	DD	017ad88f0h,017ad88f0h
2320	DD	066ac20c9h,066ac20c9h
2321	DD	0b43ace7dh,0b43ace7dh
2322	DD	0184adf63h,0184adf63h
2323	DD	082311ae5h,082311ae5h
2324	DD	060335197h,060335197h
2325	DD	0457f5362h,0457f5362h
2326	DD	0e07764b1h,0e07764b1h
2327	DD	084ae6bbbh,084ae6bbbh
2328	DD	01ca081feh,01ca081feh
2329	DD	0942b08f9h,0942b08f9h
2330	DD	058684870h,058684870h
2331	DD	019fd458fh,019fd458fh
2332	DD	0876cde94h,0876cde94h
2333	DD	0b7f87b52h,0b7f87b52h
2334	DD	023d373abh,023d373abh
2335	DD	0e2024b72h,0e2024b72h
2336	DD	0578f1fe3h,0578f1fe3h
2337	DD	02aab5566h,02aab5566h
2338	DD	00728ebb2h,00728ebb2h
2339	DD	003c2b52fh,003c2b52fh
2340	DD	09a7bc586h,09a7bc586h
2341	DD	0a50837d3h,0a50837d3h
2342	DD	0f2872830h,0f2872830h
2343	DD	0b2a5bf23h,0b2a5bf23h
2344	DD	0ba6a0302h,0ba6a0302h
2345	DD	05c8216edh,05c8216edh
2346	DD	02b1ccf8ah,02b1ccf8ah
2347	DD	092b479a7h,092b479a7h
2348	DD	0f0f207f3h,0f0f207f3h
2349	DD	0a1e2694eh,0a1e2694eh
2350	DD	0cdf4da65h,0cdf4da65h
2351	DD	0d5be0506h,0d5be0506h
2352	DD	01f6234d1h,01f6234d1h
2353	DD	08afea6c4h,08afea6c4h
2354	DD	09d532e34h,09d532e34h
2355	DD	0a055f3a2h,0a055f3a2h
2356	DD	032e18a05h,032e18a05h
2357	DD	075ebf6a4h,075ebf6a4h
2358	DD	039ec830bh,039ec830bh
2359	DD	0aaef6040h,0aaef6040h
2360	DD	0069f715eh,0069f715eh
2361	DD	051106ebdh,051106ebdh
2362	DD	0f98a213eh,0f98a213eh
2363	DD	03d06dd96h,03d06dd96h
2364	DD	0ae053eddh,0ae053eddh
2365	DD	046bde64dh,046bde64dh
2366	DD	0b58d5491h,0b58d5491h
2367	DD	0055dc471h,0055dc471h
2368	DD	06fd40604h,06fd40604h
2369	DD	0ff155060h,0ff155060h
2370	DD	024fb9819h,024fb9819h
2371	DD	097e9bdd6h,097e9bdd6h
2372	DD	0cc434089h,0cc434089h
2373	DD	0779ed967h,0779ed967h
2374	DD	0bd42e8b0h,0bd42e8b0h
2375	DD	0888b8907h,0888b8907h
2376	DD	0385b19e7h,0385b19e7h
2377	DD	0dbeec879h,0dbeec879h
2378	DD	0470a7ca1h,0470a7ca1h
2379	DD	0e90f427ch,0e90f427ch
2380	DD	0c91e84f8h,0c91e84f8h
2381	DD	000000000h,000000000h
2382	DD	083868009h,083868009h
2383	DD	048ed2b32h,048ed2b32h
2384	DD	0ac70111eh,0ac70111eh
2385	DD	04e725a6ch,04e725a6ch
2386	DD	0fbff0efdh,0fbff0efdh
2387	DD	05638850fh,05638850fh
2388	DD	01ed5ae3dh,01ed5ae3dh
2389	DD	027392d36h,027392d36h
2390	DD	064d90f0ah,064d90f0ah
2391	DD	021a65c68h,021a65c68h
2392	DD	0d1545b9bh,0d1545b9bh
2393	DD	03a2e3624h,03a2e3624h
2394	DD	0b1670a0ch,0b1670a0ch
2395	DD	00fe75793h,00fe75793h
2396	DD	0d296eeb4h,0d296eeb4h
2397	DD	09e919b1bh,09e919b1bh
2398	DD	04fc5c080h,04fc5c080h
2399	DD	0a220dc61h,0a220dc61h
2400	DD	0694b775ah,0694b775ah
2401	DD	0161a121ch,0161a121ch
2402	DD	00aba93e2h,00aba93e2h
2403	DD	0e52aa0c0h,0e52aa0c0h
2404	DD	043e0223ch,043e0223ch
2405	DD	01d171b12h,01d171b12h
2406	DD	00b0d090eh,00b0d090eh
2407	DD	0adc78bf2h,0adc78bf2h
2408	DD	0b9a8b62dh,0b9a8b62dh
2409	DD	0c8a91e14h,0c8a91e14h
2410	DD	08519f157h,08519f157h
2411	DD	04c0775afh,04c0775afh
2412	DD	0bbdd99eeh,0bbdd99eeh
2413	DD	0fd607fa3h,0fd607fa3h
2414	DD	09f2601f7h,09f2601f7h
2415	DD	0bcf5725ch,0bcf5725ch
2416	DD	0c53b6644h,0c53b6644h
2417	DD	0347efb5bh,0347efb5bh
2418	DD	07629438bh,07629438bh
2419	DD	0dcc623cbh,0dcc623cbh
2420	DD	068fcedb6h,068fcedb6h
2421	DD	063f1e4b8h,063f1e4b8h
2422	DD	0cadc31d7h,0cadc31d7h
2423	DD	010856342h,010856342h
2424	DD	040229713h,040229713h
2425	DD	02011c684h,02011c684h
2426	DD	07d244a85h,07d244a85h
2427	DD	0f83dbbd2h,0f83dbbd2h
2428	DD	01132f9aeh,01132f9aeh
2429	DD	06da129c7h,06da129c7h
2430	DD	04b2f9e1dh,04b2f9e1dh
2431	DD	0f330b2dch,0f330b2dch
2432	DD	0ec52860dh,0ec52860dh
2433	DD	0d0e3c177h,0d0e3c177h
2434	DD	06c16b32bh,06c16b32bh
2435	DD	099b970a9h,099b970a9h
2436	DD	0fa489411h,0fa489411h
2437	DD	02264e947h,02264e947h
2438	DD	0c48cfca8h,0c48cfca8h
2439	DD	01a3ff0a0h,01a3ff0a0h
2440	DD	0d82c7d56h,0d82c7d56h
2441	DD	0ef903322h,0ef903322h
2442	DD	0c74e4987h,0c74e4987h
2443	DD	0c1d138d9h,0c1d138d9h
2444	DD	0fea2ca8ch,0fea2ca8ch
2445	DD	0360bd498h,0360bd498h
2446	DD	0cf81f5a6h,0cf81f5a6h
2447	DD	028de7aa5h,028de7aa5h
2448	DD	0268eb7dah,0268eb7dah
2449	DD	0a4bfad3fh,0a4bfad3fh
2450	DD	0e49d3a2ch,0e49d3a2ch
2451	DD	00d927850h,00d927850h
2452	DD	09bcc5f6ah,09bcc5f6ah
2453	DD	062467e54h,062467e54h
2454	DD	0c2138df6h,0c2138df6h
2455	DD	0e8b8d890h,0e8b8d890h
2456	DD	05ef7392eh,05ef7392eh
2457	DD	0f5afc382h,0f5afc382h
2458	DD	0be805d9fh,0be805d9fh
2459	DD	07c93d069h,07c93d069h
2460	DD	0a92dd56fh,0a92dd56fh
2461	DD	0b31225cfh,0b31225cfh
2462	DD	03b99acc8h,03b99acc8h
2463	DD	0a77d1810h,0a77d1810h
2464	DD	06e639ce8h,06e639ce8h
2465	DD	07bbb3bdbh,07bbb3bdbh
2466	DD	0097826cdh,0097826cdh
2467	DD	0f418596eh,0f418596eh
2468	DD	001b79aech,001b79aech
2469	DD	0a89a4f83h,0a89a4f83h
2470	DD	0656e95e6h,0656e95e6h
2471	DD	07ee6ffaah,07ee6ffaah
2472	DD	008cfbc21h,008cfbc21h
2473	DD	0e6e815efh,0e6e815efh
2474	DD	0d99be7bah,0d99be7bah
2475	DD	0ce366f4ah,0ce366f4ah
2476	DD	0d4099feah,0d4099feah
2477	DD	0d67cb029h,0d67cb029h
2478	DD	0afb2a431h,0afb2a431h
2479	DD	031233f2ah,031233f2ah
2480	DD	03094a5c6h,03094a5c6h
2481	DD	0c066a235h,0c066a235h
2482	DD	037bc4e74h,037bc4e74h
2483	DD	0a6ca82fch,0a6ca82fch
2484	DD	0b0d090e0h,0b0d090e0h
2485	DD	015d8a733h,015d8a733h
2486	DD	04a9804f1h,04a9804f1h
2487	DD	0f7daec41h,0f7daec41h
2488	DD	00e50cd7fh,00e50cd7fh
2489	DD	02ff69117h,02ff69117h
2490	DD	08dd64d76h,08dd64d76h
2491	DD	04db0ef43h,04db0ef43h
2492	DD	0544daacch,0544daacch
2493	DD	0df0496e4h,0df0496e4h
2494	DD	0e3b5d19eh,0e3b5d19eh
2495	DD	01b886a4ch,01b886a4ch
2496	DD	0b81f2cc1h,0b81f2cc1h
2497	DD	07f516546h,07f516546h
2498	DD	004ea5e9dh,004ea5e9dh
2499	DD	05d358c01h,05d358c01h
2500	DD	0737487fah,0737487fah
2501	DD	02e410bfbh,02e410bfbh
2502	DD	05a1d67b3h,05a1d67b3h
2503	DD	052d2db92h,052d2db92h
2504	DD	0335610e9h,0335610e9h
2505	DD	01347d66dh,01347d66dh
2506	DD	08c61d79ah,08c61d79ah
2507	DD	07a0ca137h,07a0ca137h
2508	DD	08e14f859h,08e14f859h
2509	DD	0893c13ebh,0893c13ebh
2510	DD	0ee27a9ceh,0ee27a9ceh
2511	DD	035c961b7h,035c961b7h
2512	DD	0ede51ce1h,0ede51ce1h
2513	DD	03cb1477ah,03cb1477ah
2514	DD	059dfd29ch,059dfd29ch
2515	DD	03f73f255h,03f73f255h
2516	DD	079ce1418h,079ce1418h
2517	DD	0bf37c773h,0bf37c773h
2518	DD	0eacdf753h,0eacdf753h
2519	DD	05baafd5fh,05baafd5fh
2520	DD	0146f3ddfh,0146f3ddfh
2521	DD	086db4478h,086db4478h
2522	DD	081f3afcah,081f3afcah
2523	DD	03ec468b9h,03ec468b9h
2524	DD	02c342438h,02c342438h
2525	DD	05f40a3c2h,05f40a3c2h
2526	DD	072c31d16h,072c31d16h
2527	DD	00c25e2bch,00c25e2bch
2528	DD	08b493c28h,08b493c28h
2529	DD	041950dffh,041950dffh
2530	DD	07101a839h,07101a839h
2531	DD	0deb30c08h,0deb30c08h
2532	DD	09ce4b4d8h,09ce4b4d8h
2533	DD	090c15664h,090c15664h
2534	DD	06184cb7bh,06184cb7bh
2535	DD	070b632d5h,070b632d5h
2536	DD	0745c6c48h,0745c6c48h
2537	DD	04257b8d0h,04257b8d0h
2538DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2539DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2540DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2541DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2542DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2543DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2544DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2545DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2546DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2547DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2548DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2549DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2550DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2551DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2552DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2553DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2554DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2555DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2556DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2557DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2558DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2559DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2560DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2561DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2562DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2563DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2564DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2565DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2566DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2567DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2568DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2569DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2570	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2571	DD	01b1b1b1bh,01b1b1b1bh,0,0
2572DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2573DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2574DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2575DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2576DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2577DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2578DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2579DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2580DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2581DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2582DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2583DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2584DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2585DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2586DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2587DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2588DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2589DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2590DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2591DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2592DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2593DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2594DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2595DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2596DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2597DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2598DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2599DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2600DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2601DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2602DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2603DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2604	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2605	DD	01b1b1b1bh,01b1b1b1bh,0,0
2606DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2607DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2608DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2609DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2610DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2611DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2612DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2613DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2614DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2615DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2616DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2617DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2618DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2619DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2620DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2621DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2622DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2623DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2624DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2625DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2626DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2627DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2628DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2629DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2630DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2631DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2632DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2633DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2634DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2635DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2636DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2637DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2638	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2639	DD	01b1b1b1bh,01b1b1b1bh,0,0
2640DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2641DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2642DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2643DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2644DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2645DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2646DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2647DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2648DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2649DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2650DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2651DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2652DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2653DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2654DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2655DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2656DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2657DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2658DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2659DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2660DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2661DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2662DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2663DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2664DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2665DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2666DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2667DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2668DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2669DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2670DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2671DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2672	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2673	DD	01b1b1b1bh,01b1b1b1bh,0,0
2674DB	65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
2675DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
2676DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
2677DB	62,0
2678ALIGN	64
2679EXTERN	__imp_RtlVirtualUnwind:NEAR
2680
2681ALIGN	16
2682block_se_handler	PROC PRIVATE
2683	push	rsi
2684	push	rdi
2685	push	rbx
2686	push	rbp
2687	push	r12
2688	push	r13
2689	push	r14
2690	push	r15
2691	pushfq
2692	sub	rsp,64
2693
2694	mov	rax,QWORD PTR[120+r8]
2695	mov	rbx,QWORD PTR[248+r8]
2696
2697	mov	rsi,QWORD PTR[8+r9]
2698	mov	r11,QWORD PTR[56+r9]
2699
2700	mov	r10d,DWORD PTR[r11]
2701	lea	r10,QWORD PTR[r10*1+rsi]
2702	cmp	rbx,r10
2703	jb	$L$in_block_prologue
2704
2705	mov	rax,QWORD PTR[152+r8]
2706
2707	mov	r10d,DWORD PTR[4+r11]
2708	lea	r10,QWORD PTR[r10*1+rsi]
2709	cmp	rbx,r10
2710	jae	$L$in_block_prologue
2711
2712	mov	rax,QWORD PTR[24+rax]
2713	lea	rax,QWORD PTR[48+rax]
2714
2715	mov	rbx,QWORD PTR[((-8))+rax]
2716	mov	rbp,QWORD PTR[((-16))+rax]
2717	mov	r12,QWORD PTR[((-24))+rax]
2718	mov	r13,QWORD PTR[((-32))+rax]
2719	mov	r14,QWORD PTR[((-40))+rax]
2720	mov	r15,QWORD PTR[((-48))+rax]
2721	mov	QWORD PTR[144+r8],rbx
2722	mov	QWORD PTR[160+r8],rbp
2723	mov	QWORD PTR[216+r8],r12
2724	mov	QWORD PTR[224+r8],r13
2725	mov	QWORD PTR[232+r8],r14
2726	mov	QWORD PTR[240+r8],r15
2727
2728$L$in_block_prologue::
2729	mov	rdi,QWORD PTR[8+rax]
2730	mov	rsi,QWORD PTR[16+rax]
2731	mov	QWORD PTR[152+r8],rax
2732	mov	QWORD PTR[168+r8],rsi
2733	mov	QWORD PTR[176+r8],rdi
2734
2735	jmp	$L$common_seh_exit
2736block_se_handler	ENDP
2737
2738
2739ALIGN	16
2740key_se_handler	PROC PRIVATE
2741	push	rsi
2742	push	rdi
2743	push	rbx
2744	push	rbp
2745	push	r12
2746	push	r13
2747	push	r14
2748	push	r15
2749	pushfq
2750	sub	rsp,64
2751
2752	mov	rax,QWORD PTR[120+r8]
2753	mov	rbx,QWORD PTR[248+r8]
2754
2755	mov	rsi,QWORD PTR[8+r9]
2756	mov	r11,QWORD PTR[56+r9]
2757
2758	mov	r10d,DWORD PTR[r11]
2759	lea	r10,QWORD PTR[r10*1+rsi]
2760	cmp	rbx,r10
2761	jb	$L$in_key_prologue
2762
2763	mov	rax,QWORD PTR[152+r8]
2764
2765	mov	r10d,DWORD PTR[4+r11]
2766	lea	r10,QWORD PTR[r10*1+rsi]
2767	cmp	rbx,r10
2768	jae	$L$in_key_prologue
2769
2770	lea	rax,QWORD PTR[56+rax]
2771
2772	mov	rbx,QWORD PTR[((-8))+rax]
2773	mov	rbp,QWORD PTR[((-16))+rax]
2774	mov	r12,QWORD PTR[((-24))+rax]
2775	mov	r13,QWORD PTR[((-32))+rax]
2776	mov	r14,QWORD PTR[((-40))+rax]
2777	mov	r15,QWORD PTR[((-48))+rax]
2778	mov	QWORD PTR[144+r8],rbx
2779	mov	QWORD PTR[160+r8],rbp
2780	mov	QWORD PTR[216+r8],r12
2781	mov	QWORD PTR[224+r8],r13
2782	mov	QWORD PTR[232+r8],r14
2783	mov	QWORD PTR[240+r8],r15
2784
2785$L$in_key_prologue::
2786	mov	rdi,QWORD PTR[8+rax]
2787	mov	rsi,QWORD PTR[16+rax]
2788	mov	QWORD PTR[152+r8],rax
2789	mov	QWORD PTR[168+r8],rsi
2790	mov	QWORD PTR[176+r8],rdi
2791
2792	jmp	$L$common_seh_exit
2793key_se_handler	ENDP
2794
2795
2796ALIGN	16
2797cbc_se_handler	PROC PRIVATE
2798	push	rsi
2799	push	rdi
2800	push	rbx
2801	push	rbp
2802	push	r12
2803	push	r13
2804	push	r14
2805	push	r15
2806	pushfq
2807	sub	rsp,64
2808
2809	mov	rax,QWORD PTR[120+r8]
2810	mov	rbx,QWORD PTR[248+r8]
2811
2812	lea	r10,QWORD PTR[$L$cbc_prologue]
2813	cmp	rbx,r10
2814	jb	$L$in_cbc_prologue
2815
2816	lea	r10,QWORD PTR[$L$cbc_fast_body]
2817	cmp	rbx,r10
2818	jb	$L$in_cbc_frame_setup
2819
2820	lea	r10,QWORD PTR[$L$cbc_slow_prologue]
2821	cmp	rbx,r10
2822	jb	$L$in_cbc_body
2823
2824	lea	r10,QWORD PTR[$L$cbc_slow_body]
2825	cmp	rbx,r10
2826	jb	$L$in_cbc_frame_setup
2827
2828$L$in_cbc_body::
2829	mov	rax,QWORD PTR[152+r8]
2830
2831	lea	r10,QWORD PTR[$L$cbc_epilogue]
2832	cmp	rbx,r10
2833	jae	$L$in_cbc_prologue
2834
2835	lea	rax,QWORD PTR[8+rax]
2836
2837	lea	r10,QWORD PTR[$L$cbc_popfq]
2838	cmp	rbx,r10
2839	jae	$L$in_cbc_prologue
2840
2841	mov	rax,QWORD PTR[8+rax]
2842	lea	rax,QWORD PTR[56+rax]
2843
2844$L$in_cbc_frame_setup::
2845	mov	rbx,QWORD PTR[((-16))+rax]
2846	mov	rbp,QWORD PTR[((-24))+rax]
2847	mov	r12,QWORD PTR[((-32))+rax]
2848	mov	r13,QWORD PTR[((-40))+rax]
2849	mov	r14,QWORD PTR[((-48))+rax]
2850	mov	r15,QWORD PTR[((-56))+rax]
2851	mov	QWORD PTR[144+r8],rbx
2852	mov	QWORD PTR[160+r8],rbp
2853	mov	QWORD PTR[216+r8],r12
2854	mov	QWORD PTR[224+r8],r13
2855	mov	QWORD PTR[232+r8],r14
2856	mov	QWORD PTR[240+r8],r15
2857
2858$L$in_cbc_prologue::
2859	mov	rdi,QWORD PTR[8+rax]
2860	mov	rsi,QWORD PTR[16+rax]
2861	mov	QWORD PTR[152+r8],rax
2862	mov	QWORD PTR[168+r8],rsi
2863	mov	QWORD PTR[176+r8],rdi
2864
2865$L$common_seh_exit::
2866
2867	mov	rdi,QWORD PTR[40+r9]
2868	mov	rsi,r8
2869	mov	ecx,154
2870	DD	0a548f3fch
2871
2872	mov	rsi,r9
2873	xor	rcx,rcx
2874	mov	rdx,QWORD PTR[8+rsi]
2875	mov	r8,QWORD PTR[rsi]
2876	mov	r9,QWORD PTR[16+rsi]
2877	mov	r10,QWORD PTR[40+rsi]
2878	lea	r11,QWORD PTR[56+rsi]
2879	lea	r12,QWORD PTR[24+rsi]
2880	mov	QWORD PTR[32+rsp],r10
2881	mov	QWORD PTR[40+rsp],r11
2882	mov	QWORD PTR[48+rsp],r12
2883	mov	QWORD PTR[56+rsp],rcx
2884	call	QWORD PTR[__imp_RtlVirtualUnwind]
2885
2886	mov	eax,1
2887	add	rsp,64
2888	popfq
2889	pop	r15
2890	pop	r14
2891	pop	r13
2892	pop	r12
2893	pop	rbp
2894	pop	rbx
2895	pop	rdi
2896	pop	rsi
2897	DB	0F3h,0C3h		;repret
2898cbc_se_handler	ENDP
2899
2900.text$	ENDS
2901.pdata	SEGMENT READONLY ALIGN(4)
2902ALIGN	4
2903	DD	imagerel $L$SEH_begin_AES_encrypt
2904	DD	imagerel $L$SEH_end_AES_encrypt
2905	DD	imagerel $L$SEH_info_AES_encrypt
2906
2907	DD	imagerel $L$SEH_begin_AES_decrypt
2908	DD	imagerel $L$SEH_end_AES_decrypt
2909	DD	imagerel $L$SEH_info_AES_decrypt
2910
2911	DD	imagerel $L$SEH_begin_AES_set_encrypt_key
2912	DD	imagerel $L$SEH_end_AES_set_encrypt_key
2913	DD	imagerel $L$SEH_info_AES_set_encrypt_key
2914
2915	DD	imagerel $L$SEH_begin_AES_set_decrypt_key
2916	DD	imagerel $L$SEH_end_AES_set_decrypt_key
2917	DD	imagerel $L$SEH_info_AES_set_decrypt_key
2918
2919	DD	imagerel $L$SEH_begin_AES_cbc_encrypt
2920	DD	imagerel $L$SEH_end_AES_cbc_encrypt
2921	DD	imagerel $L$SEH_info_AES_cbc_encrypt
2922
2923.pdata	ENDS
2924.xdata	SEGMENT READONLY ALIGN(8)
2925ALIGN	8
2926$L$SEH_info_AES_encrypt::
2927DB	9,0,0,0
2928	DD	imagerel block_se_handler
2929	DD	imagerel $L$enc_prologue,imagerel $L$enc_epilogue
2930$L$SEH_info_AES_decrypt::
2931DB	9,0,0,0
2932	DD	imagerel block_se_handler
2933	DD	imagerel $L$dec_prologue,imagerel $L$dec_epilogue
2934$L$SEH_info_AES_set_encrypt_key::
2935DB	9,0,0,0
2936	DD	imagerel key_se_handler
2937	DD	imagerel $L$enc_key_prologue,imagerel $L$enc_key_epilogue
2938$L$SEH_info_AES_set_decrypt_key::
2939DB	9,0,0,0
2940	DD	imagerel key_se_handler
2941	DD	imagerel $L$dec_key_prologue,imagerel $L$dec_key_epilogue
2942$L$SEH_info_AES_cbc_encrypt::
2943DB	9,0,0,0
2944	DD	imagerel cbc_se_handler
2945
2946.xdata	ENDS
2947END
2948
2949