40fc8c:	57                   	push   %edi
40fc8d:	8b d8                	mov    %eax,%ebx
40fc8f:	57                   	push   %edi
40fc90:	2b de                	sub    %esi,%ebx
40fc92:	d1 fb                	sar    $1,%ebx
40fc94:	53                   	push   %ebx
40fc95:	56                   	push   %esi
40fc96:	57                   	push   %edi
40fc97:	57                   	push   %edi
40fc98:	ff 15 30 b1 41 00    	call   *0x41b130
40fc9e:	89 45 fc             	mov    %eax,-0x4(%ebp)
40fca1:	85 c0                	test   %eax,%eax
40fca3:	74 34                	je     0x40fcd9
40fca5:	50                   	push   %eax
40fca6:	e8 b3 9b ff ff       	call   0x40985e
40fcab:	8b f8                	mov    %eax,%edi
40fcad:	59                   	pop    %ecx
40fcae:	85 ff                	test   %edi,%edi
40fcb0:	74 1c                	je     0x40fcce
40fcb2:	33 c0                	xor    %eax,%eax
40fcb4:	50                   	push   %eax
40fcb5:	50                   	push   %eax
40fcb6:	ff 75 fc             	push   -0x4(%ebp)
40fcb9:	57                   	push   %edi
40fcba:	53                   	push   %ebx
40fcbb:	56                   	push   %esi
40fcbc:	50                   	push   %eax
40fcbd:	50                   	push   %eax
40fcbe:	ff 15 30 b1 41 00    	call   *0x41b130
40fcc4:	85 c0                	test   %eax,%eax
40fcc6:	74 06                	je     0x40fcce
40fcc8:	8b df                	mov    %edi,%ebx
40fcca:	33 ff                	xor    %edi,%edi
40fccc:	eb 02                	jmp    0x40fcd0
40fcce:	33 db                	xor    %ebx,%ebx
40fcd0:	57                   	push   %edi
40fcd1:	e8 4e 9b ff ff       	call   0x409824
40fcd6:	59                   	pop    %ecx
40fcd7:	eb 02                	jmp    0x40fcdb
40fcd9:	8b df                	mov    %edi,%ebx
40fcdb:	85 f6                	test   %esi,%esi
40fcdd:	74 07                	je     0x40fce6
40fcdf:	56                   	push   %esi
40fce0:	ff 15 88 b1 41 00    	call   *0x41b188
40fce6:	5f                   	pop    %edi
40fce7:	5e                   	pop    %esi
40fce8:	8b c3                	mov    %ebx,%eax
40fcea:	5b                   	pop    %ebx
40fceb:	8b e5                	mov    %ebp,%esp
40fced:	5d                   	pop    %ebp
40fcee:	c3                   	ret
40fcef:	8b ff                	mov    %edi,%edi
40fcf1:	56                   	push   %esi
40fcf2:	57                   	push   %edi
40fcf3:	ff 15 84 b1 41 00    	call   *0x41b184
40fcf9:	8b f0                	mov    %eax,%esi
40fcfb:	85 f6                	test   %esi,%esi
40fcfd:	75 04                	jne    0x40fd03
40fcff:	33 ff                	xor    %edi,%edi
40fd01:	eb 37                	jmp    0x40fd3a
40fd03:	53                   	push   %ebx
40fd04:	56                   	push   %esi
40fd05:	e8 2b ff ff ff       	call   0x40fc35
40fd0a:	2b c6                	sub    %esi,%eax
40fd0c:	d1 f8                	sar    $1,%eax
40fd0e:	8d 1c 00             	lea    (%eax,%eax,1),%ebx
40fd11:	53                   	push   %ebx
40fd12:	e8 47 9b ff ff       	call   0x40985e
40fd17:	8b f8                	mov    %eax,%edi
40fd19:	59                   	pop    %ecx
40fd1a:	59                   	pop    %ecx
40fd1b:	85 ff                	test   %edi,%edi
40fd1d:	74 0b                	je     0x40fd2a
40fd1f:	53                   	push   %ebx
40fd20:	56                   	push   %esi
40fd21:	57                   	push   %edi
40fd22:	e8 b9 87 00 00       	call   0x4184e0
40fd27:	83 c4 0c             	add    $0xc,%esp
40fd2a:	6a 00                	push   $0x0
40fd2c:	e8 f3 9a ff ff       	call   0x409824
40fd31:	59                   	pop    %ecx
40fd32:	56                   	push   %esi
40fd33:	ff 15 88 b1 41 00    	call   *0x41b188
40fd39:	5b                   	pop    %ebx
40fd3a:	8b c7                	mov    %edi,%eax
40fd3c:	5f                   	pop    %edi
40fd3d:	5e                   	pop    %esi
40fd3e:	c3                   	ret
40fd3f:	8b ff                	mov    %edi,%edi
40fd41:	55                   	push   %ebp
40fd42:	8b ec                	mov    %esp,%ebp
40fd44:	83 ec 0c             	sub    $0xc,%esp
40fd47:	53                   	push   %ebx
40fd48:	8b 5d 08             	mov    0x8(%ebp),%ebx
40fd4b:	85 db                	test   %ebx,%ebx
40fd4d:	75 10                	jne    0x40fd5f
40fd4f:	e8 b3 7f ff ff       	call   0x407d07
40fd54:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40fd5a:	83 c8 ff             	or     $0xffffffff,%eax
40fd5d:	eb 7c                	jmp    0x40fddb
40fd5f:	56                   	push   %esi
40fd60:	57                   	push   %edi
40fd61:	6a 3d                	push   $0x3d
40fd63:	53                   	push   %ebx
40fd64:	8b fb                	mov    %ebx,%edi
40fd66:	e8 35 8e 00 00       	call   0x418ba0
40fd6b:	89 45 f4             	mov    %eax,-0xc(%ebp)
40fd6e:	59                   	pop    %ecx
40fd6f:	59                   	pop    %ecx
40fd70:	85 c0                	test   %eax,%eax
40fd72:	74 4e                	je     0x40fdc2
40fd74:	3b c3                	cmp    %ebx,%eax
40fd76:	74 4a                	je     0x40fdc2
40fd78:	80 78 01 00          	cmpb   $0x0,0x1(%eax)
40fd7c:	8b 35 4c 41 42 00    	mov    0x42414c,%esi
40fd82:	0f 94 c0             	sete   %al
40fd85:	88 45 ff             	mov    %al,-0x1(%ebp)
40fd88:	3b 35 58 41 42 00    	cmp    0x424158,%esi
40fd8e:	75 12                	jne    0x40fda2
40fd90:	56                   	push   %esi
40fd91:	e8 21 04 00 00       	call   0x4101b7
40fd96:	8b f0                	mov    %eax,%esi
40fd98:	8a 45 ff             	mov    -0x1(%ebp),%al
40fd9b:	59                   	pop    %ecx
40fd9c:	89 35 4c 41 42 00    	mov    %esi,0x42414c
40fda2:	33 db                	xor    %ebx,%ebx
40fda4:	85 f6                	test   %esi,%esi
40fda6:	0f 85 8e 00 00 00    	jne    0x40fe3a
40fdac:	39 5d 0c             	cmp    %ebx,0xc(%ebp)
40fdaf:	74 2f                	je     0x40fde0
40fdb1:	39 1d 50 41 42 00    	cmp    %ebx,0x424150
40fdb7:	74 27                	je     0x40fde0
40fdb9:	e8 ef 8e ff ff       	call   0x408cad
40fdbe:	85 c0                	test   %eax,%eax
40fdc0:	75 6e                	jne    0x40fe30
40fdc2:	e8 40 7f ff ff       	call   0x407d07
40fdc7:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40fdcd:	83 cb ff             	or     $0xffffffff,%ebx
40fdd0:	57                   	push   %edi
40fdd1:	e8 4e 9a ff ff       	call   0x409824
40fdd6:	59                   	pop    %ecx
40fdd7:	5f                   	pop    %edi
40fdd8:	8b c3                	mov    %ebx,%eax
40fdda:	5e                   	pop    %esi
40fddb:	5b                   	pop    %ebx
40fddc:	8b e5                	mov    %ebp,%esp
40fdde:	5d                   	pop    %ebp
40fddf:	c3                   	ret
40fde0:	84 c0                	test   %al,%al
40fde2:	74 04                	je     0x40fde8
40fde4:	33 db                	xor    %ebx,%ebx
40fde6:	eb e8                	jmp    0x40fdd0
40fde8:	6a 04                	push   $0x4
40fdea:	6a 01                	push   $0x1
40fdec:	e8 bb 9a ff ff       	call   0x4098ac
40fdf1:	53                   	push   %ebx
40fdf2:	a3 4c 41 42 00       	mov    %eax,0x42414c
40fdf7:	e8 28 9a ff ff       	call   0x409824
40fdfc:	8b 35 4c 41 42 00    	mov    0x42414c,%esi
40fe02:	83 c4 0c             	add    $0xc,%esp
40fe05:	85 f6                	test   %esi,%esi
40fe07:	74 c4                	je     0x40fdcd
40fe09:	39 1d 50 41 42 00    	cmp    %ebx,0x424150
40fe0f:	75 25                	jne    0x40fe36
40fe11:	6a 04                	push   $0x4
40fe13:	6a 01                	push   $0x1
40fe15:	e8 92 9a ff ff       	call   0x4098ac
40fe1a:	53                   	push   %ebx
40fe1b:	a3 50 41 42 00       	mov    %eax,0x424150
40fe20:	e8 ff 99 ff ff       	call   0x409824
40fe25:	83 c4 0c             	add    $0xc,%esp
40fe28:	39 1d 50 41 42 00    	cmp    %ebx,0x424150
40fe2e:	74 9d                	je     0x40fdcd
40fe30:	8b 35 4c 41 42 00    	mov    0x42414c,%esi
40fe36:	85 f6                	test   %esi,%esi
40fe38:	74 93                	je     0x40fdcd
40fe3a:	8b 45 f4             	mov    -0xc(%ebp),%eax
40fe3d:	8b cf                	mov    %edi,%ecx
40fe3f:	2b c1                	sub    %ecx,%eax
40fe41:	50                   	push   %eax
40fe42:	51                   	push   %ecx
40fe43:	e8 de 04 00 00       	call   0x410326
40fe48:	89 45 f8             	mov    %eax,-0x8(%ebp)
40fe4b:	59                   	pop    %ecx
40fe4c:	59                   	pop    %ecx
40fe4d:	85 c0                	test   %eax,%eax
40fe4f:	78 48                	js     0x40fe99
40fe51:	39 1e                	cmp    %ebx,(%esi)
40fe53:	74 44                	je     0x40fe99
40fe55:	ff 34 86             	push   (%esi,%eax,4)
40fe58:	e8 c7 99 ff ff       	call   0x409824
40fe5d:	59                   	pop    %ecx
40fe5e:	8b 4d f8             	mov    -0x8(%ebp),%ecx
40fe61:	38 5d ff             	cmp    %bl,-0x1(%ebp)
40fe64:	75 12                	jne    0x40fe78
40fe66:	8b 45 08             	mov    0x8(%ebp),%eax
40fe69:	8b fb                	mov    %ebx,%edi
40fe6b:	89 04 8e             	mov    %eax,(%esi,%ecx,4)
40fe6e:	eb 7f                	jmp    0x40feef
40fe70:	8b 44 8e 04          	mov    0x4(%esi,%ecx,4),%eax
40fe74:	89 04 8e             	mov    %eax,(%esi,%ecx,4)
40fe77:	41                   	inc    %ecx
40fe78:	39 1c 8e             	cmp    %ebx,(%esi,%ecx,4)
40fe7b:	75 f3                	jne    0x40fe70
40fe7d:	6a 04                	push   $0x4
40fe7f:	51                   	push   %ecx
40fe80:	56                   	push   %esi
40fe81:	e8 89 98 ff ff       	call   0x40970f
40fe86:	53                   	push   %ebx
40fe87:	8b f0                	mov    %eax,%esi
40fe89:	e8 96 99 ff ff       	call   0x409824
40fe8e:	83 c4 10             	add    $0x10,%esp
40fe91:	8b c7                	mov    %edi,%eax
40fe93:	85 f6                	test   %esi,%esi
40fe95:	74 58                	je     0x40feef
40fe97:	eb 50                	jmp    0x40fee9
40fe99:	38 5d ff             	cmp    %bl,-0x1(%ebp)
40fe9c:	0f 85 2e ff ff ff    	jne    0x40fdd0
40fea2:	f7 d8                	neg    %eax
40fea4:	89 45 f8             	mov    %eax,-0x8(%ebp)
40fea7:	8d 48 02             	lea    0x2(%eax),%ecx
40feaa:	3b c8                	cmp    %eax,%ecx
40feac:	0f 82 1b ff ff ff    	jb     0x40fdcd
40feb2:	81 f9 ff ff ff 3f    	cmp    $0x3fffffff,%ecx
40feb8:	0f 83 0f ff ff ff    	jae    0x40fdcd
40febe:	6a 04                	push   $0x4
40fec0:	51                   	push   %ecx
40fec1:	56                   	push   %esi
40fec2:	e8 48 98 ff ff       	call   0x40970f
40fec7:	53                   	push   %ebx
40fec8:	8b f0                	mov    %eax,%esi
40feca:	e8 55 99 ff ff       	call   0x409824
40fecf:	83 c4 10             	add    $0x10,%esp
40fed2:	85 f6                	test   %esi,%esi
40fed4:	0f 84 f3 fe ff ff    	je     0x40fdcd
40feda:	8b 4d f8             	mov    -0x8(%ebp),%ecx
40fedd:	8b fb                	mov    %ebx,%edi
40fedf:	8b 45 08             	mov    0x8(%ebp),%eax
40fee2:	89 04 8e             	mov    %eax,(%esi,%ecx,4)
40fee5:	89 5c 8e 04          	mov    %ebx,0x4(%esi,%ecx,4)
40fee9:	89 35 4c 41 42 00    	mov    %esi,0x42414c
40feef:	39 5d 0c             	cmp    %ebx,0xc(%ebp)
40fef2:	0f 84 d8 fe ff ff    	je     0x40fdd0
40fef8:	8b c8                	mov    %eax,%ecx
40fefa:	8d 51 01             	lea    0x1(%ecx),%edx
40fefd:	8a 01                	mov    (%ecx),%al
40feff:	41                   	inc    %ecx
40ff00:	84 c0                	test   %al,%al
40ff02:	75 f9                	jne    0x40fefd
40ff04:	2b ca                	sub    %edx,%ecx
40ff06:	6a 01                	push   $0x1
40ff08:	8d 41 02             	lea    0x2(%ecx),%eax
40ff0b:	50                   	push   %eax
40ff0c:	89 45 f8             	mov    %eax,-0x8(%ebp)
40ff0f:	e8 98 99 ff ff       	call   0x4098ac
40ff14:	8b f0                	mov    %eax,%esi
40ff16:	59                   	pop    %ecx
40ff17:	59                   	pop    %ecx
40ff18:	85 f6                	test   %esi,%esi
40ff1a:	74 47                	je     0x40ff63
40ff1c:	ff 75 08             	push   0x8(%ebp)
40ff1f:	ff 75 f8             	push   -0x8(%ebp)
40ff22:	56                   	push   %esi
40ff23:	e8 5f 98 ff ff       	call   0x409787
40ff28:	83 c4 0c             	add    $0xc,%esp
40ff2b:	85 c0                	test   %eax,%eax
40ff2d:	75 40                	jne    0x40ff6f
40ff2f:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40ff32:	8b c6                	mov    %esi,%eax
40ff34:	2b 45 08             	sub    0x8(%ebp),%eax
40ff37:	41                   	inc    %ecx
40ff38:	03 c8                	add    %eax,%ecx
40ff3a:	0f b6 45 ff          	movzbl -0x1(%ebp),%eax
40ff3e:	f7 d8                	neg    %eax
40ff40:	1b c0                	sbb    %eax,%eax
40ff42:	f7 d0                	not    %eax
40ff44:	88 59 ff             	mov    %bl,-0x1(%ecx)
40ff47:	23 c1                	and    %ecx,%eax
40ff49:	50                   	push   %eax
40ff4a:	56                   	push   %esi
40ff4b:	ff 15 8c b1 41 00    	call   *0x41b18c
40ff51:	85 c0                	test   %eax,%eax
40ff53:	75 0e                	jne    0x40ff63
40ff55:	e8 ad 7d ff ff       	call   0x407d07
40ff5a:	83 cb ff             	or     $0xffffffff,%ebx
40ff5d:	c7 00 2a 00 00 00    	movl   $0x2a,(%eax)
40ff63:	56                   	push   %esi
40ff64:	e8 bb 98 ff ff       	call   0x409824
40ff69:	59                   	pop    %ecx
40ff6a:	e9 61 fe ff ff       	jmp    0x40fdd0
40ff6f:	53                   	push   %ebx
40ff70:	53                   	push   %ebx
40ff71:	53                   	push   %ebx
40ff72:	53                   	push   %ebx
40ff73:	53                   	push   %ebx
40ff74:	e8 e2 7c ff ff       	call   0x407c5b
40ff79:	cc                   	int3
40ff7a:	8b ff                	mov    %edi,%edi
40ff7c:	55                   	push   %ebp
40ff7d:	8b ec                	mov    %esp,%ebp
40ff7f:	83 ec 0c             	sub    $0xc,%esp
40ff82:	53                   	push   %ebx
40ff83:	8b 5d 08             	mov    0x8(%ebp),%ebx
40ff86:	85 db                	test   %ebx,%ebx
40ff88:	75 10                	jne    0x40ff9a
40ff8a:	e8 78 7d ff ff       	call   0x407d07
40ff8f:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40ff95:	83 c8 ff             	or     $0xffffffff,%eax
40ff98:	eb 7d                	jmp    0x410017
40ff9a:	56                   	push   %esi
40ff9b:	57                   	push   %edi
40ff9c:	6a 3d                	push   $0x3d
40ff9e:	53                   	push   %ebx
40ff9f:	8b fb                	mov    %ebx,%edi
40ffa1:	e8 25 8d 00 00       	call   0x418ccb
40ffa6:	89 45 f4             	mov    %eax,-0xc(%ebp)
40ffa9:	59                   	pop    %ecx
40ffaa:	59                   	pop    %ecx
40ffab:	85 c0                	test   %eax,%eax
40ffad:	74 4f                	je     0x40fffe
40ffaf:	3b c3                	cmp    %ebx,%eax
40ffb1:	74 4b                	je     0x40fffe
40ffb3:	8b 35 50 41 42 00    	mov    0x424150,%esi
40ffb9:	33 db                	xor    %ebx,%ebx
40ffbb:	66 39 58 02          	cmp    %bx,0x2(%eax)
40ffbf:	0f 94 c1             	sete   %cl
40ffc2:	88 4d ff             	mov    %cl,-0x1(%ebp)
40ffc5:	3b 35 54 41 42 00    	cmp    0x424154,%esi
40ffcb:	75 12                	jne    0x40ffdf
40ffcd:	56                   	push   %esi
40ffce:	e8 95 02 00 00       	call   0x410268
40ffd3:	59                   	pop    %ecx
40ffd4:	8a 4d ff             	mov    -0x1(%ebp),%cl
40ffd7:	8b f0                	mov    %eax,%esi
40ffd9:	89 35 50 41 42 00    	mov    %esi,0x424150
40ffdf:	85 f6                	test   %esi,%esi
40ffe1:	0f 85 87 00 00 00    	jne    0x41006e
40ffe7:	a1 4c 41 42 00       	mov    0x42414c,%eax
40ffec:	39 5d 0c             	cmp    %ebx,0xc(%ebp)
40ffef:	74 2b                	je     0x41001c
40fff1:	85 c0                	test   %eax,%eax
40fff3:	74 27                	je     0x41001c
40fff5:	e8 b8 8c ff ff       	call   0x408cb2
40fffa:	85 c0                	test   %eax,%eax
40fffc:	75 66                	jne    0x410064
40fffe:	e8 04 7d ff ff       	call   0x407d07
410003:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
410009:	83 cb ff             	or     $0xffffffff,%ebx
41000c:	57                   	push   %edi
41000d:	e8 12 98 ff ff       	call   0x409824