4086f4:	33 c9                	xor    %ecx,%ecx
4086f6:	eb 11                	jmp    0x408709
4086f8:	8b 47 20             	mov    0x20(%edi),%eax
4086fb:	8b 08                	mov    (%eax),%ecx
4086fd:	85 c9                	test   %ecx,%ecx
4086ff:	74 08                	je     0x408709
408701:	39 4f 38             	cmp    %ecx,0x38(%edi)
408704:	73 03                	jae    0x408709
408706:	89 4f 38             	mov    %ecx,0x38(%edi)
408709:	8b 47 0c             	mov    0xc(%edi),%eax
40870c:	8b 10                	mov    (%eax),%edx
40870e:	8b 47 38             	mov    0x38(%edi),%eax
408711:	89 44 24 14          	mov    %eax,0x14(%esp)
408715:	2b c2                	sub    %edx,%eax
408717:	d1 f8                	sar    $1,%eax
408719:	89 54 24 10          	mov    %edx,0x10(%esp)
40871d:	99                   	cltd
40871e:	39 54 24 18          	cmp    %edx,0x18(%esp)
408722:	0f 87 ac 00 00 00    	ja     0x4087d4
408728:	72 08                	jb     0x408732
40872a:	3b d8                	cmp    %eax,%ebx
40872c:	0f 87 a2 00 00 00    	ja     0x4087d4
408732:	8b 55 24             	mov    0x24(%ebp),%edx
408735:	8b c3                	mov    %ebx,%eax
408737:	0b 44 24 18          	or     0x18(%esp),%eax
40873b:	74 19                	je     0x408756
40873d:	f6 c2 01             	test   $0x1,%dl
408740:	74 0b                	je     0x40874d
408742:	83 7c 24 1c 00       	cmpl   $0x0,0x1c(%esp)
408747:	0f 84 87 00 00 00    	je     0x4087d4
40874d:	f6 c2 02             	test   $0x2,%dl
408750:	74 04                	je     0x408756
408752:	85 c9                	test   %ecx,%ecx
408754:	74 7e                	je     0x4087d4
408756:	f6 c2 01             	test   $0x1,%dl
408759:	74 38                	je     0x408793
40875b:	83 7c 24 1c 00       	cmpl   $0x0,0x1c(%esp)
408760:	74 31                	je     0x408793
408762:	8b 57 0c             	mov    0xc(%edi),%edx
408765:	8b 44 24 10          	mov    0x10(%esp),%eax
408769:	8b 74 24 10          	mov    0x10(%esp),%esi
40876d:	89 02                	mov    %eax,(%edx)
40876f:	8b 47 1c             	mov    0x1c(%edi),%eax
408772:	8d 14 5e             	lea    (%esi,%ebx,2),%edx
408775:	8b 74 24 20          	mov    0x20(%esp),%esi
408779:	89 10                	mov    %edx,(%eax)
40877b:	8b 44 24 14          	mov    0x14(%esp),%eax
40877f:	2b c2                	sub    %edx,%eax
408781:	d1 f8                	sar    $1,%eax
408783:	89 44 24 14          	mov    %eax,0x14(%esp)
408787:	8b 47 2c             	mov    0x2c(%edi),%eax
40878a:	8b 54 24 14          	mov    0x14(%esp),%edx
40878e:	89 10                	mov    %edx,(%eax)
408790:	8b 55 24             	mov    0x24(%ebp),%edx
408793:	f6 c2 02             	test   $0x2,%dl
408796:	74 31                	je     0x4087c9
408798:	85 c9                	test   %ecx,%ecx
40879a:	74 2d                	je     0x4087c9
40879c:	8b 47 30             	mov    0x30(%edi),%eax
40879f:	8b 54 24 10          	mov    0x10(%esp),%edx
4087a3:	8b f2                	mov    %edx,%esi
4087a5:	8b 08                	mov    (%eax),%ecx
4087a7:	8b 47 20             	mov    0x20(%edi),%eax
4087aa:	8b 00                	mov    (%eax),%eax
4087ac:	8d 0c 48             	lea    (%eax,%ecx,2),%ecx
4087af:	8b 47 10             	mov    0x10(%edi),%eax
4087b2:	89 10                	mov    %edx,(%eax)
4087b4:	8d 14 5e             	lea    (%esi,%ebx,2),%edx
4087b7:	8b 47 20             	mov    0x20(%edi),%eax
4087ba:	2b ca                	sub    %edx,%ecx
4087bc:	8b 74 24 20          	mov    0x20(%esp),%esi
4087c0:	d1 f9                	sar    $1,%ecx
4087c2:	89 10                	mov    %edx,(%eax)
4087c4:	8b 47 30             	mov    0x30(%edi),%eax
4087c7:	89 08                	mov    %ecx,(%eax)
4087c9:	8b 44 24 18          	mov    0x18(%esp),%eax
4087cd:	89 1e                	mov    %ebx,(%esi)
4087cf:	89 46 04             	mov    %eax,0x4(%esi)
4087d2:	eb 0d                	jmp    0x4087e1
4087d4:	c7 06 ff ff ff ff    	movl   $0xffffffff,(%esi)
4087da:	c7 46 04 ff ff ff ff 	movl   $0xffffffff,0x4(%esi)
4087e1:	c7 46 08 00 00 00 00 	movl   $0x0,0x8(%esi)
4087e8:	0f 57 c0             	xorps  %xmm0,%xmm0
4087eb:	c7 46 0c 00 00 00 00 	movl   $0x0,0xc(%esi)
4087f2:	8b c6                	mov    %esi,%eax
4087f4:	5f                   	pop    %edi
4087f5:	66 0f d6 46 10       	movq   %xmm0,0x10(%esi)
4087fa:	5e                   	pop    %esi
4087fb:	5b                   	pop    %ebx
4087fc:	8b e5                	mov    %ebp,%esp
4087fe:	5d                   	pop    %ebp
4087ff:	c2 20 00             	ret    $0x20
408802:	cc                   	int3
408803:	cc                   	int3
408804:	cc                   	int3
408805:	cc                   	int3
408806:	cc                   	int3
408807:	cc                   	int3
408808:	cc                   	int3
408809:	cc                   	int3
40880a:	cc                   	int3
40880b:	cc                   	int3
40880c:	cc                   	int3
40880d:	cc                   	int3
40880e:	cc                   	int3
40880f:	cc                   	int3
408810:	55                   	push   %ebp
408811:	8b ec                	mov    %esp,%ebp
408813:	83 e4 f8             	and    $0xfffffff8,%esp
408816:	83 ec 24             	sub    $0x24,%esp
408819:	53                   	push   %ebx
40881a:	56                   	push   %esi
40881b:	8b f1                	mov    %ecx,%esi
40881d:	57                   	push   %edi
40881e:	f6 46 3c 02          	testb  $0x2,0x3c(%esi)
408822:	8b 46 1c             	mov    0x1c(%esi),%eax
408825:	8b 00                	mov    (%eax),%eax
408827:	89 44 24 10          	mov    %eax,0x10(%esp)
40882b:	74 04                	je     0x408831
40882d:	33 c9                	xor    %ecx,%ecx
40882f:	eb 11                	jmp    0x408842
408831:	8b 46 20             	mov    0x20(%esi),%eax
408834:	8b 08                	mov    (%eax),%ecx
408836:	85 c9                	test   %ecx,%ecx
408838:	74 08                	je     0x408842
40883a:	39 4e 38             	cmp    %ecx,0x38(%esi)
40883d:	73 03                	jae    0x408842
40883f:	89 4e 38             	mov    %ecx,0x38(%esi)
408842:	8b 46 0c             	mov    0xc(%esi),%eax
408845:	8b 7e 38             	mov    0x38(%esi),%edi
408848:	8b 5d 18             	mov    0x18(%ebp),%ebx
40884b:	89 7c 24 2c          	mov    %edi,0x2c(%esp)
40884f:	8b 10                	mov    (%eax),%edx
408851:	2b fa                	sub    %edx,%edi
408853:	8b 45 14             	mov    0x14(%ebp),%eax
408856:	d1 ff                	sar    $1,%edi
408858:	89 54 24 24          	mov    %edx,0x24(%esp)
40885c:	89 7c 24 14          	mov    %edi,0x14(%esp)
408860:	83 e8 00             	sub    $0x0,%eax
408863:	74 66                	je     0x4088cb
408865:	83 e8 01             	sub    $0x1,%eax
408868:	74 12                	je     0x40887c
40886a:	83 e8 01             	sub    $0x1,%eax
40886d:	0f 85 1c 01 00 00    	jne    0x40898f
408873:	8b c7                	mov    %edi,%eax
408875:	99                   	cltd
408876:	8b f8                	mov    %eax,%edi
408878:	8b c2                	mov    %edx,%eax
40887a:	eb 60                	jmp    0x4088dc
40887c:	8b c3                	mov    %ebx,%eax
40887e:	83 e0 03             	and    $0x3,%eax
408881:	3c 03                	cmp    $0x3,%al
408883:	0f 84 06 01 00 00    	je     0x40898f
408889:	f6 c3 01             	test   $0x1,%bl
40888c:	74 1b                	je     0x4088a9
40888e:	8b 44 24 10          	mov    0x10(%esp),%eax
408892:	85 c0                	test   %eax,%eax
408894:	75 08                	jne    0x40889e
408896:	85 d2                	test   %edx,%edx
408898:	0f 85 f1 00 00 00    	jne    0x40898f
40889e:	2b c2                	sub    %edx,%eax
4088a0:	d1 f8                	sar    $1,%eax
4088a2:	99                   	cltd
4088a3:	8b f8                	mov    %eax,%edi
4088a5:	8b c2                	mov    %edx,%eax
4088a7:	eb 33                	jmp    0x4088dc
4088a9:	f6 c3 02             	test   $0x2,%bl
4088ac:	0f 84 dd 00 00 00    	je     0x40898f
4088b2:	85 c9                	test   %ecx,%ecx
4088b4:	75 08                	jne    0x4088be
4088b6:	85 d2                	test   %edx,%edx
4088b8:	0f 85 d1 00 00 00    	jne    0x40898f
4088be:	8b c1                	mov    %ecx,%eax
4088c0:	2b c2                	sub    %edx,%eax
4088c2:	d1 f8                	sar    $1,%eax
4088c4:	99                   	cltd
4088c5:	8b f8                	mov    %eax,%edi
4088c7:	8b c2                	mov    %edx,%eax
4088c9:	eb 11                	jmp    0x4088dc
4088cb:	0f 57 c0             	xorps  %xmm0,%xmm0
4088ce:	66 0f 13 44 24 18    	movlpd %xmm0,0x18(%esp)
4088d4:	8b 44 24 1c          	mov    0x1c(%esp),%eax
4088d8:	8b 7c 24 18          	mov    0x18(%esp),%edi
4088dc:	03 7d 0c             	add    0xc(%ebp),%edi
4088df:	13 45 10             	adc    0x10(%ebp),%eax
4088e2:	89 44 24 18          	mov    %eax,0x18(%esp)
4088e6:	8b 44 24 14          	mov    0x14(%esp),%eax
4088ea:	99                   	cltd
4088eb:	39 54 24 18          	cmp    %edx,0x18(%esp)
4088ef:	0f 87 9a 00 00 00    	ja     0x40898f
4088f5:	72 08                	jb     0x4088ff
4088f7:	3b f8                	cmp    %eax,%edi
4088f9:	0f 87 90 00 00 00    	ja     0x40898f
4088ff:	8b c7                	mov    %edi,%eax
408901:	0b 44 24 18          	or     0x18(%esp),%eax
408905:	74 15                	je     0x40891c
408907:	f6 c3 01             	test   $0x1,%bl
40890a:	74 07                	je     0x408913
40890c:	83 7c 24 10 00       	cmpl   $0x0,0x10(%esp)
408911:	74 7c                	je     0x40898f
408913:	f6 c3 02             	test   $0x2,%bl
408916:	74 04                	je     0x40891c
408918:	85 c9                	test   %ecx,%ecx
40891a:	74 73                	je     0x40898f
40891c:	8b 54 24 24          	mov    0x24(%esp),%edx
408920:	8d 04 7a             	lea    (%edx,%edi,2),%eax
408923:	89 44 24 14          	mov    %eax,0x14(%esp)
408927:	f6 c3 01             	test   $0x1,%bl
40892a:	74 28                	je     0x408954
40892c:	83 7c 24 10 00       	cmpl   $0x0,0x10(%esp)
408931:	74 21                	je     0x408954
408933:	8b 46 0c             	mov    0xc(%esi),%eax
408936:	89 10                	mov    %edx,(%eax)
408938:	8b 46 1c             	mov    0x1c(%esi),%eax
40893b:	8b 54 24 14          	mov    0x14(%esp),%edx
40893f:	89 10                	mov    %edx,(%eax)
408941:	8b 54 24 2c          	mov    0x2c(%esp),%edx
408945:	2b 54 24 14          	sub    0x14(%esp),%edx
408949:	8b 46 2c             	mov    0x2c(%esi),%eax
40894c:	d1 fa                	sar    $1,%edx
40894e:	89 10                	mov    %edx,(%eax)
408950:	8b 54 24 24          	mov    0x24(%esp),%edx
408954:	f6 c3 02             	test   $0x2,%bl
408957:	74 28                	je     0x408981
408959:	85 c9                	test   %ecx,%ecx
40895b:	74 24                	je     0x408981
40895d:	8b 46 30             	mov    0x30(%esi),%eax
408960:	8b 08                	mov    (%eax),%ecx
408962:	8b 46 20             	mov    0x20(%esi),%eax
408965:	8b 00                	mov    (%eax),%eax
408967:	8d 0c 48             	lea    (%eax,%ecx,2),%ecx
40896a:	8b 46 10             	mov    0x10(%esi),%eax
40896d:	89 10                	mov    %edx,(%eax)
40896f:	8b 46 20             	mov    0x20(%esi),%eax
408972:	8b 54 24 14          	mov    0x14(%esp),%edx
408976:	2b ca                	sub    %edx,%ecx
408978:	d1 f9                	sar    $1,%ecx
40897a:	89 10                	mov    %edx,(%eax)
40897c:	8b 46 30             	mov    0x30(%esi),%eax
40897f:	89 08                	mov    %ecx,(%eax)
408981:	8b 45 08             	mov    0x8(%ebp),%eax
408984:	8b 4c 24 18          	mov    0x18(%esp),%ecx
408988:	89 38                	mov    %edi,(%eax)
40898a:	89 48 04             	mov    %ecx,0x4(%eax)
40898d:	eb 10                	jmp    0x40899f
40898f:	8b 45 08             	mov    0x8(%ebp),%eax
408992:	c7 00 ff ff ff ff    	movl   $0xffffffff,(%eax)
408998:	c7 40 04 ff ff ff ff 	movl   $0xffffffff,0x4(%eax)
40899f:	5f                   	pop    %edi
4089a0:	0f 57 c0             	xorps  %xmm0,%xmm0
4089a3:	c7 40 08 00 00 00 00 	movl   $0x0,0x8(%eax)
4089aa:	5e                   	pop    %esi
4089ab:	c7 40 0c 00 00 00 00 	movl   $0x0,0xc(%eax)
4089b2:	66 0f d6 40 10       	movq   %xmm0,0x10(%eax)
4089b7:	5b                   	pop    %ebx
4089b8:	8b e5                	mov    %ebp,%esp
4089ba:	5d                   	pop    %ebp
4089bb:	c2 14 00             	ret    $0x14
4089be:	cc                   	int3
4089bf:	cc                   	int3
4089c0:	55                   	push   %ebp
4089c1:	8b ec                	mov    %esp,%ebp
4089c3:	51                   	push   %ecx
4089c4:	8b d1                	mov    %ecx,%edx
4089c6:	53                   	push   %ebx
4089c7:	56                   	push   %esi
4089c8:	57                   	push   %edi
4089c9:	8b 5a 1c             	mov    0x1c(%edx),%ebx
4089cc:	8b 33                	mov    (%ebx),%esi
4089ce:	85 f6                	test   %esi,%esi
4089d0:	74 52                	je     0x408a24
4089d2:	8b 4a 2c             	mov    0x2c(%edx),%ecx
4089d5:	8b 09                	mov    (%ecx),%ecx
4089d7:	8d 0c 4e             	lea    (%esi,%ecx,2),%ecx
4089da:	3b f1                	cmp    %ecx,%esi
4089dc:	73 0a                	jae    0x4089e8
4089de:	66 8b 06             	mov    (%esi),%ax
4089e1:	5f                   	pop    %edi
4089e2:	5e                   	pop    %esi
4089e3:	5b                   	pop    %ebx
4089e4:	8b e5                	mov    %ebp,%esp
4089e6:	5d                   	pop    %ebp
4089e7:	c3                   	ret
4089e8:	8b 42 20             	mov    0x20(%edx),%eax
4089eb:	8b 00                	mov    (%eax),%eax
4089ed:	85 c0                	test   %eax,%eax
4089ef:	74 33                	je     0x408a24
4089f1:	f6 42 3c 04          	testb  $0x4,0x3c(%edx)
4089f5:	75 2d                	jne    0x408a24
4089f7:	8b 7a 38             	mov    0x38(%edx),%edi
4089fa:	3b f8                	cmp    %eax,%edi
4089fc:	0f 42 f8             	cmovb  %eax,%edi
4089ff:	3b fe                	cmp    %esi,%edi
408a01:	76 21                	jbe    0x408a24
408a03:	89 7a 38             	mov    %edi,0x38(%edx)
408a06:	8b c3                	mov    %ebx,%eax
408a08:	8b 0b                	mov    (%ebx),%ecx
408a0a:	2b f9                	sub    %ecx,%edi
408a0c:	d1 ff                	sar    $1,%edi
408a0e:	89 08                	mov    %ecx,(%eax)
408a10:	8b 42 2c             	mov    0x2c(%edx),%eax
408a13:	89 38                	mov    %edi,(%eax)
408a15:	8b 42 1c             	mov    0x1c(%edx),%eax
408a18:	5f                   	pop    %edi
408a19:	5e                   	pop    %esi
408a1a:	5b                   	pop    %ebx
408a1b:	8b 00                	mov    (%eax),%eax
408a1d:	66 8b 00             	mov    (%eax),%ax
408a20:	8b e5                	mov    %ebp,%esp
408a22:	5d                   	pop    %ebp
408a23:	c3                   	ret
408a24:	5f                   	pop    %edi
408a25:	5e                   	pop    %esi
408a26:	b8 ff ff 00 00       	mov    $0xffff,%eax
408a2b:	5b                   	pop    %ebx
408a2c:	8b e5                	mov    %ebp,%esp
408a2e:	5d                   	pop    %ebp
408a2f:	c3                   	ret
408a30:	55                   	push   %ebp
408a31:	8b ec                	mov    %esp,%ebp
408a33:	8b 41 1c             	mov    0x1c(%ecx),%eax
408a36:	66 8b 55 08          	mov    0x8(%ebp),%dx
408a3a:	53                   	push   %ebx
408a3b:	56                   	push   %esi
408a3c:	8b 30                	mov    (%eax),%esi
408a3e:	bb ff ff 00 00       	mov    $0xffff,%ebx
408a43:	57                   	push   %edi
408a44:	0f b7 fa             	movzwl %dx,%edi
408a47:	85 f6                	test   %esi,%esi
408a49:	74 41                	je     0x408a8c
408a4b:	8b 41 0c             	mov    0xc(%ecx),%eax
408a4e:	3b 30                	cmp    (%eax),%esi
408a50:	76 3a                	jbe    0x408a8c
408a52:	66 3b da             	cmp    %dx,%bx
408a55:	74 0c                	je     0x408a63
408a57:	66 3b 56 fe          	cmp    -0x2(%esi),%dx
408a5b:	74 06                	je     0x408a63
408a5d:	f6 41 3c 02          	testb  $0x2,0x3c(%ecx)
408a61:	75 29                	jne    0x408a8c
408a63:	8b 41 2c             	mov    0x2c(%ecx),%eax
408a66:	ff 00                	incl   (%eax)
408a68:	8b 41 1c             	mov    0x1c(%ecx),%eax
408a6b:	83 00 fe             	addl   $0xfffffffe,(%eax)
408a6e:	66 3b da             	cmp    %dx,%bx
408a71:	74 08                	je     0x408a7b
408a73:	8b 41 1c             	mov    0x1c(%ecx),%eax
408a76:	8b 00                	mov    (%eax),%eax
408a78:	66 89 10             	mov    %dx,(%eax)
408a7b:	8b c7                	mov    %edi,%eax
408a7d:	33 c9                	xor    %ecx,%ecx