4056ec:	85 c0                	test   %eax,%eax
4056ee:	0f 84 d1 01 00 00    	je     0x4058c5
4056f4:	8b c8                	mov    %eax,%ecx
4056f6:	2b cb                	sub    %ebx,%ecx
4056f8:	d1 f9                	sar    $1,%ecx
4056fa:	83 e9 01             	sub    $0x1,%ecx
4056fd:	89 4d f0             	mov    %ecx,-0x10(%ebp)
405700:	75 38                	jne    0x40573a
405702:	2b c7                	sub    %edi,%eax
405704:	d1 f8                	sar    $1,%eax
405706:	40                   	inc    %eax
405707:	50                   	push   %eax
405708:	57                   	push   %edi
405709:	8d 45 f4             	lea    -0xc(%ebp),%eax
40570c:	50                   	push   %eax
40570d:	33 c0                	xor    %eax,%eax
40570f:	39 45 18             	cmp    %eax,0x18(%ebp)
405712:	0f 94 c0             	sete   %al
405715:	50                   	push   %eax
405716:	e8 23 2b 00 00       	call   0x40823e
40571b:	8b f0                	mov    %eax,%esi
40571d:	89 75 0c             	mov    %esi,0xc(%ebp)
405720:	85 f6                	test   %esi,%esi
405722:	0f 89 83 01 00 00    	jns    0x4058ab
405728:	68 8c d2 44 00       	push   $0x44d28c
40572d:	56                   	push   %esi
40572e:	e8 fc a9 03 00       	call   0x44012f
405733:	59                   	pop    %ecx
405734:	59                   	pop    %ecx
405735:	e9 16 04 00 00       	jmp    0x405b50
40573a:	3b df                	cmp    %edi,%ebx
40573c:	76 26                	jbe    0x405764
40573e:	8b c3                	mov    %ebx,%eax
405740:	2b c7                	sub    %edi,%eax
405742:	d1 f8                	sar    $1,%eax
405744:	50                   	push   %eax
405745:	57                   	push   %edi
405746:	8d 45 f4             	lea    -0xc(%ebp),%eax
405749:	50                   	push   %eax
40574a:	33 c0                	xor    %eax,%eax
40574c:	39 45 18             	cmp    %eax,0x18(%ebp)
40574f:	0f 94 c0             	sete   %al
405752:	50                   	push   %eax
405753:	e8 e6 2a 00 00       	call   0x40823e
405758:	8b f0                	mov    %eax,%esi
40575a:	89 75 0c             	mov    %esi,0xc(%ebp)
40575d:	85 f6                	test   %esi,%esi
40575f:	78 c7                	js     0x405728
405761:	8b 4d f0             	mov    -0x10(%ebp),%ecx
405764:	51                   	push   %ecx
405765:	33 c0                	xor    %eax,%eax
405767:	8d 4b 02             	lea    0x2(%ebx),%ecx
40576a:	39 45 18             	cmp    %eax,0x18(%ebp)
40576d:	51                   	push   %ecx
40576e:	8d 4d f8             	lea    -0x8(%ebp),%ecx
405771:	0f 94 c0             	sete   %al
405774:	51                   	push   %ecx
405775:	50                   	push   %eax
405776:	89 45 e8             	mov    %eax,-0x18(%ebp)
405779:	e8 03 2b 00 00       	call   0x408281
40577e:	8b f0                	mov    %eax,%esi
405780:	89 75 0c             	mov    %esi,0xc(%ebp)
405783:	85 f6                	test   %esi,%esi
405785:	0f 88 0d 02 00 00    	js     0x405998
40578b:	8b 45 fc             	mov    -0x4(%ebp),%eax
40578e:	8b 4d ec             	mov    -0x14(%ebp),%ecx
405791:	6a 01                	push   $0x1
405793:	8d 04 85 04 00 00 00 	lea    0x4(,%eax,4),%eax
40579a:	50                   	push   %eax
40579b:	85 c9                	test   %ecx,%ecx
40579d:	74 15                	je     0x4057b4
40579f:	51                   	push   %ecx
4057a0:	e8 cd e2 ff ff       	call   0x403a72
4057a5:	85 c0                	test   %eax,%eax
4057a7:	0f 84 71 01 00 00    	je     0x40591e
4057ad:	8b f8                	mov    %eax,%edi
4057af:	89 7d ec             	mov    %edi,-0x14(%ebp)
4057b2:	eb 12                	jmp    0x4057c6
4057b4:	e8 1b e1 ff ff       	call   0x4038d4
4057b9:	8b f8                	mov    %eax,%edi
4057bb:	89 7d ec             	mov    %edi,-0x14(%ebp)
4057be:	85 ff                	test   %edi,%edi
4057c0:	0f 84 b1 01 00 00    	je     0x405977
4057c6:	83 7d f0 02          	cmpl   $0x2,-0x10(%ebp)
4057ca:	72 26                	jb     0x4057f2
4057cc:	6a 5c                	push   $0x5c
4057ce:	59                   	pop    %ecx
4057cf:	66 3b 4b 02          	cmp    0x2(%ebx),%cx
4057d3:	75 1d                	jne    0x4057f2
4057d5:	8d 43 04             	lea    0x4(%ebx),%eax
4057d8:	8b 5d fc             	mov    -0x4(%ebp),%ebx
4057db:	6a 01                	push   $0x1
4057dd:	50                   	push   %eax
4057de:	8d 04 9f             	lea    (%edi,%ebx,4),%eax
4057e1:	8b 7d e8             	mov    -0x18(%ebp),%edi
4057e4:	50                   	push   %eax
4057e5:	57                   	push   %edi
4057e6:	e8 96 2a 00 00       	call   0x408281
4057eb:	8b f0                	mov    %eax,%esi
4057ed:	89 75 0c             	mov    %esi,0xc(%ebp)
4057f0:	eb 70                	jmp    0x405862
4057f2:	83 7d 18 00          	cmpl   $0x0,0x18(%ebp)
4057f6:	74 1c                	je     0x405814
4057f8:	8d 45 e0             	lea    -0x20(%ebp),%eax
4057fb:	50                   	push   %eax
4057fc:	ff 75 f8             	push   -0x8(%ebp)
4057ff:	ff 75 08             	push   0x8(%ebp)
405802:	e8 0c 26 00 00       	call   0x407e13
405807:	8b f0                	mov    %eax,%esi
405809:	89 75 0c             	mov    %esi,0xc(%ebp)
40580c:	85 f6                	test   %esi,%esi
40580e:	0f 88 2f 01 00 00    	js     0x405943
405814:	83 7d e0 00          	cmpl   $0x0,-0x20(%ebp)
405818:	8b 5d fc             	mov    -0x4(%ebp),%ebx
40581b:	74 13                	je     0x405830
40581d:	33 c0                	xor    %eax,%eax
40581f:	50                   	push   %eax
405820:	68 84 ce 44 00       	push   $0x44ce84
405825:	8d 04 9f             	lea    (%edi,%ebx,4),%eax
405828:	50                   	push   %eax
405829:	e8 77 c9 ff ff       	call   0x4021a5
40582e:	eb 2a                	jmp    0x40585a
405830:	8d 3c 9f             	lea    (%edi,%ebx,4),%edi
405833:	57                   	push   %edi
405834:	ff 75 f8             	push   -0x8(%ebp)
405837:	ff 75 08             	push   0x8(%ebp)
40583a:	e8 c4 19 00 00       	call   0x407203
40583f:	8b f0                	mov    %eax,%esi
405841:	89 75 0c             	mov    %esi,0xc(%ebp)
405844:	81 fe 90 04 07 80    	cmp    $0x80070490,%esi
40584a:	75 13                	jne    0x40585f
40584c:	33 c0                	xor    %eax,%eax
40584e:	50                   	push   %eax
40584f:	68 24 b5 44 00       	push   $0x44b524
405854:	57                   	push   %edi
405855:	e8 9f ca ff ff       	call   0x4022f9
40585a:	8b f0                	mov    %eax,%esi
40585c:	89 75 0c             	mov    %esi,0xc(%ebp)
40585f:	8b 7d e8             	mov    -0x18(%ebp),%edi
405862:	85 f6                	test   %esi,%esi
405864:	0f 88 03 01 00 00    	js     0x40596d
40586a:	43                   	inc    %ebx
40586b:	8d 45 f8             	lea    -0x8(%ebp),%eax
40586e:	53                   	push   %ebx
40586f:	68 44 d3 44 00       	push   $0x44d344
405874:	50                   	push   %eax
405875:	57                   	push   %edi
405876:	89 5d fc             	mov    %ebx,-0x4(%ebp)
405879:	e8 e2 29 00 00       	call   0x408260
40587e:	8b f0                	mov    %eax,%esi
405880:	83 c4 10             	add    $0x10,%esp
405883:	89 75 0c             	mov    %esi,0xc(%ebp)
405886:	85 f6                	test   %esi,%esi
405888:	0f 88 d5 00 00 00    	js     0x405963
40588e:	33 c0                	xor    %eax,%eax
405890:	50                   	push   %eax
405891:	ff 75 f8             	push   -0x8(%ebp)
405894:	8d 45 f4             	lea    -0xc(%ebp),%eax
405897:	50                   	push   %eax
405898:	57                   	push   %edi
405899:	e8 a0 29 00 00       	call   0x40823e
40589e:	8b f0                	mov    %eax,%esi
4058a0:	89 75 0c             	mov    %esi,0xc(%ebp)
4058a3:	85 f6                	test   %esi,%esi
4058a5:	0f 88 ae 00 00 00    	js     0x405959
4058ab:	8b 7d dc             	mov    -0x24(%ebp),%edi
4058ae:	83 c7 02             	add    $0x2,%edi
4058b1:	6a 5b                	push   $0x5b
4058b3:	57                   	push   %edi
4058b4:	e8 11 9f 02 00       	call   0x42f7ca
4058b9:	8b d8                	mov    %eax,%ebx
4058bb:	59                   	pop    %ecx
4058bc:	59                   	pop    %ecx
4058bd:	85 db                	test   %ebx,%ebx
4058bf:	0f 85 17 fe ff ff    	jne    0x4056dc
4058c5:	33 db                	xor    %ebx,%ebx
4058c7:	39 5d 18             	cmp    %ebx,0x18(%ebp)
4058ca:	0f 94 c3             	sete   %bl
4058cd:	33 c0                	xor    %eax,%eax
4058cf:	50                   	push   %eax
4058d0:	57                   	push   %edi
4058d1:	8d 45 f4             	lea    -0xc(%ebp),%eax
4058d4:	50                   	push   %eax
4058d5:	53                   	push   %ebx
4058d6:	e8 63 29 00 00       	call   0x40823e
4058db:	8b f0                	mov    %eax,%esi
4058dd:	89 75 0c             	mov    %esi,0xc(%ebp)
4058e0:	85 f6                	test   %esi,%esi
4058e2:	0f 88 40 fe ff ff    	js     0x405728
4058e8:	ff 75 fc             	push   -0x4(%ebp)
4058eb:	e8 e0 9a 03 00       	call   0x43f3d0
4058f0:	8b f8                	mov    %eax,%edi
4058f2:	89 7d e4             	mov    %edi,-0x1c(%ebp)
4058f5:	85 ff                	test   %edi,%edi
4058f7:	0f 85 a5 00 00 00    	jne    0x4059a2
4058fd:	bf 0e 00 07 80       	mov    $0x8007000e,%edi
405902:	57                   	push   %edi
405903:	68 e6 04 00 00       	push   $0x4e6
405908:	8b f7                	mov    %edi,%esi
40590a:	68 bc cc 44 00       	push   $0x44ccbc
40590f:	89 75 0c             	mov    %esi,0xc(%ebp)
405912:	e8 bc de ff ff       	call   0x4037d3
405917:	68 98 d3 44 00       	push   $0x44d398
40591c:	eb 1f                	jmp    0x40593d
40591e:	bf 0e 00 07 80       	mov    $0x8007000e,%edi
405923:	57                   	push   %edi
405924:	68 b0 04 00 00       	push   $0x4b0
405929:	8b f7                	mov    %edi,%esi
40592b:	68 bc cc 44 00       	push   $0x44ccbc
405930:	89 75 0c             	mov    %esi,0xc(%ebp)
405933:	e8 9b de ff ff       	call   0x4037d3
405938:	68 c8 d2 44 00       	push   $0x44d2c8
40593d:	57                   	push   %edi
40593e:	e9 eb fd ff ff       	jmp    0x40572e
405943:	ff 75 f8             	push   -0x8(%ebp)
405946:	68 14 d3 44 00       	push   $0x44d314
40594b:	56                   	push   %esi
40594c:	e8 de a7 03 00       	call   0x44012f
405951:	83 c4 0c             	add    $0xc,%esp
405954:	e9 f7 01 00 00       	jmp    0x405b50
405959:	68 78 d3 44 00       	push   $0x44d378
40595e:	e9 6c fd ff ff       	jmp    0x4056cf
405963:	68 50 d3 44 00       	push   $0x44d350
405968:	e9 62 fd ff ff       	jmp    0x4056cf
40596d:	68 a4 d1 44 00       	push   $0x44d1a4
405972:	e9 58 fd ff ff       	jmp    0x4056cf
405977:	bf 0e 00 07 80       	mov    $0x8007000e,%edi
40597c:	57                   	push   %edi
40597d:	68 b6 04 00 00       	push   $0x4b6
405982:	8b f7                	mov    %edi,%esi
405984:	68 bc cc 44 00       	push   $0x44ccbc
405989:	89 75 0c             	mov    %esi,0xc(%ebp)
40598c:	e8 42 de ff ff       	call   0x4037d3
405991:	68 f0 d2 44 00       	push   $0x44d2f0
405996:	eb a5                	jmp    0x40593d
405998:	68 a8 d2 44 00       	push   $0x44d2a8
40599d:	e9 8b fd ff ff       	jmp    0x40572d
4059a2:	ff 75 f4             	push   -0xc(%ebp)
4059a5:	33 c0                	xor    %eax,%eax
4059a7:	50                   	push   %eax
4059a8:	57                   	push   %edi
4059a9:	e8 32 9a 03 00       	call   0x43f3e0
4059ae:	85 c0                	test   %eax,%eax
4059b0:	74 35                	je     0x4059e7
4059b2:	0f b7 f0             	movzwl %ax,%esi
4059b5:	81 ce 00 00 07 80    	or     $0x80070000,%esi
4059bb:	85 c0                	test   %eax,%eax
4059bd:	0f 4e f0             	cmovle %eax,%esi
4059c0:	b8 05 40 00 80       	mov    $0x80004005,%eax
4059c5:	85 f6                	test   %esi,%esi
4059c7:	0f 49 f0             	cmovns %eax,%esi
4059ca:	56                   	push   %esi
4059cb:	68 ea 04 00 00       	push   $0x4ea
4059d0:	68 bc cc 44 00       	push   $0x44ccbc
4059d5:	89 75 0c             	mov    %esi,0xc(%ebp)
4059d8:	e8 f6 dd ff ff       	call   0x4037d3
4059dd:	68 b4 d3 44 00       	push   $0x44d3b4
4059e2:	e9 46 fd ff ff       	jmp    0x40572d
4059e7:	33 c9                	xor    %ecx,%ecx
4059e9:	8b f9                	mov    %ecx,%edi
4059eb:	39 4d fc             	cmp    %ecx,-0x4(%ebp)
4059ee:	76 31                	jbe    0x405a21
4059f0:	8b 45 ec             	mov    -0x14(%ebp),%eax
4059f3:	8b 4d fc             	mov    -0x4(%ebp),%ecx
4059f6:	8b 14 b8             	mov    (%eax,%edi,4),%edx
4059f9:	33 f6                	xor    %esi,%esi
4059fb:	66 39 32             	cmp    %si,(%edx)
4059fe:	8b 75 0c             	mov    0xc(%ebp),%esi
405a01:	74 17                	je     0x405a1a
405a03:	52                   	push   %edx
405a04:	8d 47 01             	lea    0x1(%edi),%eax
405a07:	50                   	push   %eax
405a08:	ff 75 e4             	push   -0x1c(%ebp)
405a0b:	e8 d0 99 03 00       	call   0x43f3e0
405a10:	85 c0                	test   %eax,%eax
405a12:	75 63                	jne    0x405a77
405a14:	8b 45 ec             	mov    -0x14(%ebp),%eax
405a17:	8b 4d fc             	mov    -0x4(%ebp),%ecx
405a1a:	47                   	inc    %edi
405a1b:	3b f9                	cmp    %ecx,%edi
405a1d:	72 d7                	jb     0x4059f6
405a1f:	33 c9                	xor    %ecx,%ecx
405a21:	8b 7d e4             	mov    -0x1c(%ebp),%edi
405a24:	8d 45 f0             	lea    -0x10(%ebp),%eax
405a27:	50                   	push   %eax
405a28:	68 24 b5 44 00       	push   $0x44b524
405a2d:	57                   	push   %edi
405a2e:	51                   	push   %ecx
405a2f:	89 4d f0             	mov    %ecx,-0x10(%ebp)
405a32:	e8 b9 99 03 00       	call   0x43f3f0
405a37:	3d ea 00 00 00       	cmp    $0xea,%eax
405a3c:	74 6e                	je     0x405aac
405a3e:	85 c0                	test   %eax,%eax
405a40:	74 6a                	je     0x405aac
405a42:	0f b7 f0             	movzwl %ax,%esi
405a45:	81 ce 00 00 07 80    	or     $0x80070000,%esi
405a4b:	85 c0                	test   %eax,%eax
405a4d:	0f 4e f0             	cmovle %eax,%esi
405a50:	b8 05 40 00 80       	mov    $0x80004005,%eax
405a55:	85 f6                	test   %esi,%esi
405a57:	0f 49 f0             	cmovns %eax,%esi
405a5a:	56                   	push   %esi
405a5b:	68 fe 04 00 00       	push   $0x4fe
405a60:	68 bc cc 44 00       	push   $0x44ccbc
405a65:	89 75 0c             	mov    %esi,0xc(%ebp)
405a68:	e8 66 dd ff ff       	call   0x4037d3
405a6d:	68 f8 d3 44 00       	push   $0x44d3f8
405a72:	e9 b6 fc ff ff       	jmp    0x40572d
405a77:	0f b7 f0             	movzwl %ax,%esi
405a7a:	81 ce 00 00 07 80    	or     $0x80070000,%esi
405a80:	85 c0                	test   %eax,%eax
405a82:	0f 4e f0             	cmovle %eax,%esi
405a85:	b8 05 40 00 80       	mov    $0x80004005,%eax
405a8a:	85 f6                	test   %esi,%esi
405a8c:	0f 49 f0             	cmovns %eax,%esi
405a8f:	56                   	push   %esi
405a90:	68 f2 04 00 00       	push   $0x4f2
405a95:	68 bc cc 44 00       	push   $0x44ccbc
405a9a:	89 75 0c             	mov    %esi,0xc(%ebp)
405a9d:	e8 31 dd ff ff       	call   0x4037d3
405aa2:	68 d8 d3 44 00       	push   $0x44d3d8
405aa7:	e9 81 fc ff ff       	jmp    0x40572d
405aac:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
405ab0:	0f 84 8e 00 00 00    	je     0x405b44
405ab6:	8b 45 f0             	mov    -0x10(%ebp),%eax
405ab9:	40                   	inc    %eax
405aba:	50                   	push   %eax
405abb:	89 45 f0             	mov    %eax,-0x10(%ebp)
405abe:	8d 45 f8             	lea    -0x8(%ebp),%eax
405ac1:	50                   	push   %eax
405ac2:	53                   	push   %ebx
405ac3:	e8 57 27 00 00       	call   0x40821f
405ac8:	8b f0                	mov    %eax,%esi
405aca:	89 75 0c             	mov    %esi,0xc(%ebp)
405acd:	85 f6                	test   %esi,%esi
405acf:	79 0a                	jns    0x405adb
405ad1:	68 18 d4 44 00       	push   $0x44d418
405ad6:	e9 52 fc ff ff       	jmp    0x40572d
405adb:	8d 45 f0             	lea    -0x10(%ebp),%eax
405ade:	33 f6                	xor    %esi,%esi
405ae0:	50                   	push   %eax
405ae1:	ff 75 f8             	push   -0x8(%ebp)
405ae4:	57                   	push   %edi
405ae5:	56                   	push   %esi
405ae6:	e8 05 99 03 00       	call   0x43f3f0
405aeb:	85 c0                	test   %eax,%eax
405aed:	74 35                	je     0x405b24
405aef:	0f b7 f0             	movzwl %ax,%esi
405af2:	81 ce 00 00 07 80    	or     $0x80070000,%esi
405af8:	85 c0                	test   %eax,%eax