406bfc:	33 c0                	xor    %eax,%eax
406bfe:	8b 75 14             	mov    0x14(%ebp),%esi
406c01:	85 f6                	test   %esi,%esi
406c03:	0f 95 c0             	setne  %al
406c06:	85 c0                	test   %eax,%eax
406c08:	75 18                	jne    0x406c22
406c0a:	e8 6e 15 00 00       	call   0x40817d
406c0f:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
406c15:	e8 db 49 00 00       	call   0x40b5f5
406c1a:	33 c0                	xor    %eax,%eax
406c1c:	e8 d4 41 00 00       	call   0x40adf5
406c21:	c3                   	ret
406c22:	56                   	push   %esi
406c23:	e8 f3 f6 ff ff       	call   0x40631b
406c28:	59                   	pop    %ecx
406c29:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
406c2d:	56                   	push   %esi
406c2e:	ff 75 10             	push   0x10(%ebp)
406c31:	ff 75 0c             	push   0xc(%ebp)
406c34:	ff 75 08             	push   0x8(%ebp)
406c37:	e8 51 fe ff ff       	call   0x406a8d
406c3c:	83 c4 10             	add    $0x10,%esp
406c3f:	8b f8                	mov    %eax,%edi
406c41:	89 7d e4             	mov    %edi,-0x1c(%ebp)
406c44:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
406c4b:	e8 0a 00 00 00       	call   0x406c5a
406c50:	8b c7                	mov    %edi,%eax
406c52:	eb c8                	jmp    0x406c1c
406c54:	8b 75 14             	mov    0x14(%ebp),%esi
406c57:	8b 7d e4             	mov    -0x1c(%ebp),%edi
406c5a:	56                   	push   %esi
406c5b:	e8 2a f7 ff ff       	call   0x40638a
406c60:	59                   	pop    %ecx
406c61:	c3                   	ret
406c62:	6a 10                	push   $0x10
406c64:	68 f0 e2 41 00       	push   $0x41e2f0
406c69:	e8 42 41 00 00       	call   0x40adb0
406c6e:	33 ff                	xor    %edi,%edi
406c70:	89 7d e4             	mov    %edi,-0x1c(%ebp)
406c73:	33 c0                	xor    %eax,%eax
406c75:	8b 75 08             	mov    0x8(%ebp),%esi
406c78:	85 f6                	test   %esi,%esi
406c7a:	0f 95 c0             	setne  %al
406c7d:	85 c0                	test   %eax,%eax
406c7f:	75 18                	jne    0x406c99
406c81:	e8 f7 14 00 00       	call   0x40817d
406c86:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
406c8c:	e8 64 49 00 00       	call   0x40b5f5
406c91:	83 c8 ff             	or     $0xffffffff,%eax
406c94:	e9 bb 00 00 00       	jmp    0x406d54
406c99:	8b 5d 10             	mov    0x10(%ebp),%ebx
406c9c:	83 fb 04             	cmp    $0x4,%ebx
406c9f:	74 09                	je     0x406caa
406ca1:	85 db                	test   %ebx,%ebx
406ca3:	74 13                	je     0x406cb8
406ca5:	83 fb 40             	cmp    $0x40,%ebx
406ca8:	75 d7                	jne    0x406c81
406caa:	85 db                	test   %ebx,%ebx
406cac:	74 0a                	je     0x406cb8
406cae:	83 fb 40             	cmp    $0x40,%ebx
406cb1:	74 05                	je     0x406cb8
406cb3:	8b 4d 14             	mov    0x14(%ebp),%ecx
406cb6:	eb 0d                	jmp    0x406cc5
406cb8:	8b 4d 14             	mov    0x14(%ebp),%ecx
406cbb:	8d 41 fe             	lea    -0x2(%ecx),%eax
406cbe:	3d fd ff ff 7f       	cmp    $0x7ffffffd,%eax
406cc3:	77 bc                	ja     0x406c81
406cc5:	83 e1 fe             	and    $0xfffffffe,%ecx
406cc8:	89 4d 08             	mov    %ecx,0x8(%ebp)
406ccb:	89 75 e0             	mov    %esi,-0x20(%ebp)
406cce:	56                   	push   %esi
406ccf:	e8 47 f6 ff ff       	call   0x40631b
406cd4:	59                   	pop    %ecx
406cd5:	89 7d fc             	mov    %edi,-0x4(%ebp)
406cd8:	56                   	push   %esi
406cd9:	e8 3c f8 ff ff       	call   0x40651a
406cde:	56                   	push   %esi
406cdf:	e8 f8 73 00 00       	call   0x40e0dc
406ce4:	59                   	pop    %ecx
406ce5:	59                   	pop    %ecx
406ce6:	81 66 0c f3 c2 ff ff 	andl   $0xffffc2f3,0xc(%esi)
406ced:	8b 4e 0c             	mov    0xc(%esi),%ecx
406cf0:	f6 c3 04             	test   $0x4,%bl
406cf3:	74 0e                	je     0x406d03
406cf5:	83 c9 04             	or     $0x4,%ecx
406cf8:	89 4e 0c             	mov    %ecx,0xc(%esi)
406cfb:	8d 46 14             	lea    0x14(%esi),%eax
406cfe:	6a 02                	push   $0x2
406d00:	5b                   	pop    %ebx
406d01:	eb 38                	jmp    0x406d3b
406d03:	8b 45 0c             	mov    0xc(%ebp),%eax
406d06:	85 c0                	test   %eax,%eax
406d08:	75 25                	jne    0x406d2f
406d0a:	8b 5d 08             	mov    0x8(%ebp),%ebx
406d0d:	53                   	push   %ebx
406d0e:	e8 8f 1d 00 00       	call   0x408aa2
406d13:	59                   	pop    %ecx
406d14:	85 c0                	test   %eax,%eax
406d16:	75 0e                	jne    0x406d26
406d18:	ff 05 50 1c 42 00    	incl   0x421c50
406d1e:	83 cf ff             	or     $0xffffffff,%edi
406d21:	89 7d e4             	mov    %edi,-0x1c(%ebp)
406d24:	eb 20                	jmp    0x406d46
406d26:	81 4e 0c 08 04 00 00 	orl    $0x408,0xc(%esi)
406d2d:	eb 0c                	jmp    0x406d3b
406d2f:	81 c9 00 05 00 00    	or     $0x500,%ecx
406d35:	89 4e 0c             	mov    %ecx,0xc(%esi)
406d38:	8b 5d 08             	mov    0x8(%ebp),%ebx
406d3b:	89 5e 18             	mov    %ebx,0x18(%esi)
406d3e:	89 46 08             	mov    %eax,0x8(%esi)
406d41:	89 06                	mov    %eax,(%esi)
406d43:	89 7e 04             	mov    %edi,0x4(%esi)
406d46:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
406d4d:	e8 0e 00 00 00       	call   0x406d60
406d52:	8b c7                	mov    %edi,%eax
406d54:	e8 9c 40 00 00       	call   0x40adf5
406d59:	c3                   	ret
406d5a:	8b 7d e4             	mov    -0x1c(%ebp),%edi
406d5d:	8b 75 e0             	mov    -0x20(%ebp),%esi
406d60:	56                   	push   %esi
406d61:	e8 24 f6 ff ff       	call   0x40638a
406d66:	59                   	pop    %ecx
406d67:	c3                   	ret
406d68:	55                   	push   %ebp
406d69:	8b ec                	mov    %esp,%ebp
406d6b:	53                   	push   %ebx
406d6c:	56                   	push   %esi
406d6d:	8b 75 0c             	mov    0xc(%ebp),%esi
406d70:	57                   	push   %edi
406d71:	83 cf ff             	or     $0xffffffff,%edi
406d74:	f6 46 0c 40          	testb  $0x40,0xc(%esi)
406d78:	75 6f                	jne    0x406de9
406d7a:	56                   	push   %esi
406d7b:	e8 b9 71 00 00       	call   0x40df39
406d80:	59                   	pop    %ecx
406d81:	8b c8                	mov    %eax,%ecx
406d83:	bb 18 10 42 00       	mov    $0x421018,%ebx
406d88:	3b cf                	cmp    %edi,%ecx
406d8a:	74 19                	je     0x406da5
406d8c:	83 f9 fe             	cmp    $0xfffffffe,%ecx
406d8f:	74 14                	je     0x406da5
406d91:	8b d1                	mov    %ecx,%edx
406d93:	83 e2 1f             	and    $0x1f,%edx
406d96:	c1 f8 05             	sar    $0x5,%eax
406d99:	c1 e2 06             	shl    $0x6,%edx
406d9c:	03 14 85 20 2a 42 00 	add    0x422a20(,%eax,4),%edx
406da3:	eb 02                	jmp    0x406da7
406da5:	8b d3                	mov    %ebx,%edx
406da7:	f6 42 24 7f          	testb  $0x7f,0x24(%edx)
406dab:	75 25                	jne    0x406dd2
406dad:	3b cf                	cmp    %edi,%ecx
406daf:	74 19                	je     0x406dca
406db1:	83 f9 fe             	cmp    $0xfffffffe,%ecx
406db4:	74 14                	je     0x406dca
406db6:	8b c1                	mov    %ecx,%eax
406db8:	83 e1 1f             	and    $0x1f,%ecx
406dbb:	c1 f8 05             	sar    $0x5,%eax
406dbe:	c1 e1 06             	shl    $0x6,%ecx
406dc1:	03 0c 85 20 2a 42 00 	add    0x422a20(,%eax,4),%ecx
406dc8:	eb 02                	jmp    0x406dcc
406dca:	8b cb                	mov    %ebx,%ecx
406dcc:	f6 41 24 80          	testb  $0x80,0x24(%ecx)
406dd0:	74 17                	je     0x406de9
406dd2:	e8 a6 13 00 00       	call   0x40817d
406dd7:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
406ddd:	e8 13 48 00 00       	call   0x40b5f5
406de2:	8b c7                	mov    %edi,%eax
406de4:	5f                   	pop    %edi
406de5:	5e                   	pop    %esi
406de6:	5b                   	pop    %ebx
406de7:	5d                   	pop    %ebp
406de8:	c3                   	ret
406de9:	8b 5d 08             	mov    0x8(%ebp),%ebx
406dec:	3b df                	cmp    %edi,%ebx
406dee:	74 f2                	je     0x406de2
406df0:	f6 46 0c 01          	testb  $0x1,0xc(%esi)
406df4:	75 0c                	jne    0x406e02
406df6:	f6 46 0c 80          	testb  $0x80,0xc(%esi)
406dfa:	74 e6                	je     0x406de2
406dfc:	f6 46 0c 02          	testb  $0x2,0xc(%esi)
406e00:	75 e0                	jne    0x406de2
406e02:	83 7e 08 00          	cmpl   $0x0,0x8(%esi)
406e06:	75 07                	jne    0x406e0f
406e08:	56                   	push   %esi
406e09:	e8 fe 83 00 00       	call   0x40f20c
406e0e:	59                   	pop    %ecx
406e0f:	8b 06                	mov    (%esi),%eax
406e11:	3b 46 08             	cmp    0x8(%esi),%eax
406e14:	75 09                	jne    0x406e1f
406e16:	83 7e 04 00          	cmpl   $0x0,0x4(%esi)
406e1a:	75 c6                	jne    0x406de2
406e1c:	40                   	inc    %eax
406e1d:	89 06                	mov    %eax,(%esi)
406e1f:	ff 0e                	decl   (%esi)
406e21:	f6 46 0c 40          	testb  $0x40,0xc(%esi)
406e25:	8b 06                	mov    (%esi),%eax
406e27:	74 09                	je     0x406e32
406e29:	38 18                	cmp    %bl,(%eax)
406e2b:	74 07                	je     0x406e34
406e2d:	40                   	inc    %eax
406e2e:	89 06                	mov    %eax,(%esi)
406e30:	eb b0                	jmp    0x406de2
406e32:	88 18                	mov    %bl,(%eax)
406e34:	8b 46 0c             	mov    0xc(%esi),%eax
406e37:	ff 46 04             	incl   0x4(%esi)
406e3a:	83 e0 ef             	and    $0xffffffef,%eax
406e3d:	83 c8 01             	or     $0x1,%eax
406e40:	89 46 0c             	mov    %eax,0xc(%esi)
406e43:	0f b6 c3             	movzbl %bl,%eax
406e46:	eb 9c                	jmp    0x406de4
406e48:	6a 0c                	push   $0xc
406e4a:	68 10 e3 41 00       	push   $0x41e310
406e4f:	e8 5c 3f 00 00       	call   0x40adb0
406e54:	33 c0                	xor    %eax,%eax
406e56:	8b 75 0c             	mov    0xc(%ebp),%esi
406e59:	85 f6                	test   %esi,%esi
406e5b:	0f 95 c0             	setne  %al
406e5e:	85 c0                	test   %eax,%eax
406e60:	75 15                	jne    0x406e77
406e62:	e8 16 13 00 00       	call   0x40817d
406e67:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
406e6d:	e8 83 47 00 00       	call   0x40b5f5
406e72:	83 c8 ff             	or     $0xffffffff,%eax
406e75:	eb 32                	jmp    0x406ea9
406e77:	e8 76 67 00 00       	call   0x40d5f2
406e7c:	85 c0                	test   %eax,%eax
406e7e:	78 f2                	js     0x406e72
406e80:	56                   	push   %esi
406e81:	e8 95 f4 ff ff       	call   0x40631b
406e86:	59                   	pop    %ecx
406e87:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
406e8b:	56                   	push   %esi
406e8c:	ff 75 08             	push   0x8(%ebp)
406e8f:	e8 d4 fe ff ff       	call   0x406d68
406e94:	59                   	pop    %ecx
406e95:	59                   	pop    %ecx
406e96:	8b f8                	mov    %eax,%edi
406e98:	89 7d e4             	mov    %edi,-0x1c(%ebp)
406e9b:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
406ea2:	e8 0e 00 00 00       	call   0x406eb5
406ea7:	8b c7                	mov    %edi,%eax
406ea9:	e8 47 3f 00 00       	call   0x40adf5
406eae:	c3                   	ret
406eaf:	8b 75 0c             	mov    0xc(%ebp),%esi
406eb2:	8b 7d e4             	mov    -0x1c(%ebp),%edi
406eb5:	56                   	push   %esi
406eb6:	e8 cf f4 ff ff       	call   0x40638a
406ebb:	59                   	pop    %ecx
406ebc:	c3                   	ret
406ebd:	55                   	push   %ebp
406ebe:	8b ec                	mov    %esp,%ebp
406ec0:	56                   	push   %esi
406ec1:	8b 75 14             	mov    0x14(%ebp),%esi
406ec4:	85 f6                	test   %esi,%esi
406ec6:	75 04                	jne    0x406ecc
406ec8:	33 c0                	xor    %eax,%eax
406eca:	eb 6d                	jmp    0x406f39
406ecc:	8b 45 08             	mov    0x8(%ebp),%eax
406ecf:	85 c0                	test   %eax,%eax
406ed1:	75 13                	jne    0x406ee6
406ed3:	e8 a5 12 00 00       	call   0x40817d
406ed8:	6a 16                	push   $0x16
406eda:	5e                   	pop    %esi
406edb:	89 30                	mov    %esi,(%eax)
406edd:	e8 13 47 00 00       	call   0x40b5f5
406ee2:	8b c6                	mov    %esi,%eax
406ee4:	eb 53                	jmp    0x406f39
406ee6:	57                   	push   %edi
406ee7:	8b 7d 10             	mov    0x10(%ebp),%edi
406eea:	85 ff                	test   %edi,%edi
406eec:	74 14                	je     0x406f02
406eee:	39 75 0c             	cmp    %esi,0xc(%ebp)
406ef1:	72 0f                	jb     0x406f02
406ef3:	56                   	push   %esi
406ef4:	57                   	push   %edi
406ef5:	50                   	push   %eax
406ef6:	e8 a5 e7 ff ff       	call   0x4056a0
406efb:	83 c4 0c             	add    $0xc,%esp
406efe:	33 c0                	xor    %eax,%eax
406f00:	eb 36                	jmp    0x406f38
406f02:	ff 75 0c             	push   0xc(%ebp)
406f05:	6a 00                	push   $0x0
406f07:	50                   	push   %eax
406f08:	e8 33 00 00 00       	call   0x406f40
406f0d:	83 c4 0c             	add    $0xc,%esp
406f10:	85 ff                	test   %edi,%edi
406f12:	75 09                	jne    0x406f1d
406f14:	e8 64 12 00 00       	call   0x40817d
406f19:	6a 16                	push   $0x16
406f1b:	eb 0c                	jmp    0x406f29
406f1d:	39 75 0c             	cmp    %esi,0xc(%ebp)
406f20:	73 13                	jae    0x406f35
406f22:	e8 56 12 00 00       	call   0x40817d
406f27:	6a 22                	push   $0x22
406f29:	5e                   	pop    %esi
406f2a:	89 30                	mov    %esi,(%eax)
406f2c:	e8 c4 46 00 00       	call   0x40b5f5
406f31:	8b c6                	mov    %esi,%eax
406f33:	eb 03                	jmp    0x406f38
406f35:	6a 16                	push   $0x16
406f37:	58                   	pop    %eax
406f38:	5f                   	pop    %edi
406f39:	5e                   	pop    %esi
406f3a:	5d                   	pop    %ebp
406f3b:	c3                   	ret
406f3c:	cc                   	int3
406f3d:	cc                   	int3
406f3e:	cc                   	int3
406f3f:	cc                   	int3
406f40:	8b 54 24 0c          	mov    0xc(%esp),%edx
406f44:	8b 4c 24 04          	mov    0x4(%esp),%ecx
406f48:	85 d2                	test   %edx,%edx
406f4a:	74 7f                	je     0x406fcb
406f4c:	0f b6 44 24 08       	movzbl 0x8(%esp),%eax
406f51:	0f ba 25 d4 20 42 00 	btl    $0x1,0x4220d4
406f58:	01
406f59:	73 0d                	jae    0x406f68
406f5b:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
406f5f:	57                   	push   %edi
406f60:	8b 7c 24 08          	mov    0x8(%esp),%edi
406f64:	f3 aa                	rep stos %al,%es:(%edi)
406f66:	eb 5d                	jmp    0x406fc5
406f68:	8b 54 24 0c          	mov    0xc(%esp),%edx
406f6c:	81 fa 80 00 00 00    	cmp    $0x80,%edx
406f72:	7c 0e                	jl     0x406f82
406f74:	0f ba 25 a8 08 42 00 	btl    $0x1,0x4208a8
406f7b:	01
406f7c:	0f 82 d0 82 00 00    	jb     0x40f252
406f82:	57                   	push   %edi
406f83:	8b f9                	mov    %ecx,%edi
406f85:	83 fa 04             	cmp    $0x4,%edx
406f88:	72 31                	jb     0x406fbb
406f8a:	f7 d9                	neg    %ecx
406f8c:	83 e1 03             	and    $0x3,%ecx
406f8f:	74 0c                	je     0x406f9d
406f91:	2b d1                	sub    %ecx,%edx
406f93:	88 07                	mov    %al,(%edi)
406f95:	83 c7 01             	add    $0x1,%edi
406f98:	83 e9 01             	sub    $0x1,%ecx
406f9b:	75 f6                	jne    0x406f93
406f9d:	8b c8                	mov    %eax,%ecx
406f9f:	c1 e0 08             	shl    $0x8,%eax
406fa2:	03 c1                	add    %ecx,%eax
406fa4:	8b c8                	mov    %eax,%ecx
406fa6:	c1 e0 10             	shl    $0x10,%eax
406fa9:	03 c1                	add    %ecx,%eax
406fab:	8b ca                	mov    %edx,%ecx
406fad:	83 e2 03             	and    $0x3,%edx
406fb0:	c1 e9 02             	shr    $0x2,%ecx
406fb3:	74 06                	je     0x406fbb