406d6c:	33 c0                	xor    %eax,%eax
406d6e:	3b 45 fc             	cmp    -0x4(%ebp),%eax
406d71:	1b c0                	sbb    %eax,%eax
406d73:	f7 d8                	neg    %eax
406d75:	c9                   	leave
406d76:	c2 04 00             	ret    $0x4
406d79:	8b ff                	mov    %edi,%edi
406d7b:	56                   	push   %esi
406d7c:	8b f1                	mov    %ecx,%esi
406d7e:	83 3e 00             	cmpl   $0x0,(%esi)
406d81:	74 0b                	je     0x406d8e
406d83:	ff 36                	push   (%esi)
406d85:	ff 15 00 f0 40 00    	call   *0x40f000
406d8b:	83 26 00             	andl   $0x0,(%esi)
406d8e:	5e                   	pop    %esi
406d8f:	c3                   	ret
406d90:	8b ff                	mov    %edi,%edi
406d92:	55                   	push   %ebp
406d93:	8b ec                	mov    %esp,%ebp
406d95:	53                   	push   %ebx
406d96:	56                   	push   %esi
406d97:	8b f1                	mov    %ecx,%esi
406d99:	33 db                	xor    %ebx,%ebx
406d9b:	57                   	push   %edi
406d9c:	39 5e 04             	cmp    %ebx,0x4(%esi)
406d9f:	75 45                	jne    0x406de6
406da1:	39 5e 08             	cmp    %ebx,0x8(%esi)
406da4:	75 40                	jne    0x406de6
406da6:	68 a8 27 40 00       	push   $0x4027a8
406dab:	ff 15 88 f0 40 00    	call   *0x40f088
406db1:	85 c0                	test   %eax,%eax
406db3:	74 11                	je     0x406dc6
406db5:	68 fc 27 40 00       	push   $0x4027fc
406dba:	50                   	push   %eax
406dbb:	ff 15 80 f0 40 00    	call   *0x40f080
406dc1:	89 46 04             	mov    %eax,0x4(%esi)
406dc4:	eb 20                	jmp    0x406de6
406dc6:	53                   	push   %ebx
406dc7:	53                   	push   %ebx
406dc8:	68 0c 28 40 00       	push   $0x40280c
406dcd:	ff 15 84 f0 40 00    	call   *0x40f084
406dd3:	85 c0                	test   %eax,%eax
406dd5:	74 0f                	je     0x406de6
406dd7:	68 28 28 40 00       	push   $0x402828
406ddc:	50                   	push   %eax
406ddd:	ff 15 80 f0 40 00    	call   *0x40f080
406de3:	89 46 08             	mov    %eax,0x8(%esi)
406de6:	8b 7e 04             	mov    0x4(%esi),%edi
406de9:	85 ff                	test   %edi,%edi
406deb:	74 13                	je     0x406e00
406ded:	53                   	push   %ebx
406dee:	53                   	push   %ebx
406def:	ff 75 08             	push   0x8(%ebp)
406df2:	8b cf                	mov    %edi,%ecx
406df4:	ff 36                	push   (%esi)
406df6:	ff 15 20 f2 40 00    	call   *0x40f220
406dfc:	ff d7                	call   *%edi
406dfe:	eb 1e                	jmp    0x406e1e
406e00:	8b 7e 08             	mov    0x8(%esi),%edi
406e03:	85 ff                	test   %edi,%edi
406e05:	74 11                	je     0x406e18
406e07:	ff 75 08             	push   0x8(%ebp)
406e0a:	8b cf                	mov    %edi,%ecx
406e0c:	ff 36                	push   (%esi)
406e0e:	ff 15 20 f2 40 00    	call   *0x40f220
406e14:	ff d7                	call   *%edi
406e16:	eb 06                	jmp    0x406e1e
406e18:	ff 15 7c f0 40 00    	call   *0x40f07c
406e1e:	5f                   	pop    %edi
406e1f:	5e                   	pop    %esi
406e20:	5b                   	pop    %ebx
406e21:	5d                   	pop    %ebp
406e22:	c2 04 00             	ret    $0x4
406e25:	85 c9                	test   %ecx,%ecx
406e27:	7e 09                	jle    0x406e32
406e29:	0f b7 c9             	movzwl %cx,%ecx
406e2c:	81 c9 00 00 07 80    	or     $0x80070000,%ecx
406e32:	8b c1                	mov    %ecx,%eax
406e34:	c3                   	ret
406e35:	8b ff                	mov    %edi,%edi
406e37:	55                   	push   %ebp
406e38:	8b ec                	mov    %esp,%ebp
406e3a:	51                   	push   %ecx
406e3b:	51                   	push   %ecx
406e3c:	53                   	push   %ebx
406e3d:	56                   	push   %esi
406e3e:	57                   	push   %edi
406e3f:	8b f9                	mov    %ecx,%edi
406e41:	e8 ec 07 00 00       	call   0x407632
406e46:	8b 1f                	mov    (%edi),%ebx
406e48:	33 d2                	xor    %edx,%edx
406e4a:	0f b7 03             	movzwl (%ebx),%eax
406e4d:	66 3b d0             	cmp    %ax,%dx
406e50:	0f 84 2d 01 00 00    	je     0x406f83
406e56:	8b 75 08             	mov    0x8(%ebp),%esi
406e59:	6a 27                	push   $0x27
406e5b:	8d 96 00 20 00 00    	lea    0x2000(%esi),%edx
406e61:	89 55 fc             	mov    %edx,-0x4(%ebp)
406e64:	5a                   	pop    %edx
406e65:	66 3b d0             	cmp    %ax,%dx
406e68:	0f 85 a8 00 00 00    	jne    0x406f16
406e6e:	53                   	push   %ebx
406e6f:	ff 15 f8 f0 40 00    	call   *0x40f0f8
406e75:	8b d0                	mov    %eax,%edx
406e77:	33 db                	xor    %ebx,%ebx
406e79:	89 17                	mov    %edx,(%edi)
406e7b:	0f b7 0a             	movzwl (%edx),%ecx
406e7e:	8b c1                	mov    %ecx,%eax
406e80:	66 3b d9             	cmp    %cx,%bx
406e83:	74 6e                	je     0x406ef3
406e85:	6a 27                	push   $0x27
406e87:	5b                   	pop    %ebx
406e88:	66 3b d8             	cmp    %ax,%bx
406e8b:	75 0c                	jne    0x406e99
406e8d:	52                   	push   %edx
406e8e:	ff 15 f8 f0 40 00    	call   *0x40f0f8
406e94:	66 3b 18             	cmp    (%eax),%bx
406e97:	75 5a                	jne    0x406ef3
406e99:	8b 1f                	mov    (%edi),%ebx
406e9b:	6a 27                	push   $0x27
406e9d:	58                   	pop    %eax
406e9e:	66 3b 03             	cmp    (%ebx),%ax
406ea1:	75 0b                	jne    0x406eae
406ea3:	53                   	push   %ebx
406ea4:	ff 15 f8 f0 40 00    	call   *0x40f0f8
406eaa:	8b d8                	mov    %eax,%ebx
406eac:	89 1f                	mov    %ebx,(%edi)
406eae:	53                   	push   %ebx
406eaf:	ff 15 f8 f0 40 00    	call   *0x40f0f8
406eb5:	8b d0                	mov    %eax,%edx
406eb7:	8b ca                	mov    %edx,%ecx
406eb9:	89 17                	mov    %edx,(%edi)
406ebb:	2b cb                	sub    %ebx,%ecx
406ebd:	d1 f9                	sar    $1,%ecx
406ebf:	8d 41 01             	lea    0x1(%ecx),%eax
406ec2:	8d 04 46             	lea    (%esi,%eax,2),%eax
406ec5:	3b 45 fc             	cmp    -0x4(%ebp),%eax
406ec8:	0f 83 b5 00 00 00    	jae    0x406f83
406ece:	85 c9                	test   %ecx,%ecx
406ed0:	7e 13                	jle    0x406ee5
406ed2:	2b de                	sub    %esi,%ebx
406ed4:	66 8b 04 33          	mov    (%ebx,%esi,1),%ax
406ed8:	66 89 06             	mov    %ax,(%esi)
406edb:	83 c6 02             	add    $0x2,%esi
406ede:	83 e9 01             	sub    $0x1,%ecx
406ee1:	75 f1                	jne    0x406ed4
406ee3:	8b 17                	mov    (%edi),%edx
406ee5:	0f b7 02             	movzwl (%edx),%eax
406ee8:	33 db                	xor    %ebx,%ebx
406eea:	8b c8                	mov    %eax,%ecx
406eec:	66 3b d8             	cmp    %ax,%bx
406eef:	74 02                	je     0x406ef3
406ef1:	eb 92                	jmp    0x406e85
406ef3:	8b 07                	mov    (%edi),%eax
406ef5:	33 c9                	xor    %ecx,%ecx
406ef7:	66 3b 08             	cmp    (%eax),%cx
406efa:	0f 84 83 00 00 00    	je     0x406f83
406f00:	3b 75 fc             	cmp    -0x4(%ebp),%esi
406f03:	73 7e                	jae    0x406f83
406f05:	33 c0                	xor    %eax,%eax
406f07:	66 89 06             	mov    %ax,(%esi)
406f0a:	ff 37                	push   (%edi)
406f0c:	ff 15 f8 f0 40 00    	call   *0x40f0f8
406f12:	89 07                	mov    %eax,(%edi)
406f14:	eb 69                	jmp    0x406f7f
406f16:	0f b7 c0             	movzwl %ax,%eax
406f19:	83 f8 09             	cmp    $0x9,%eax
406f1c:	72 0f                	jb     0x406f2d
406f1e:	83 f8 0a             	cmp    $0xa,%eax
406f21:	76 52                	jbe    0x406f75
406f23:	83 f8 0d             	cmp    $0xd,%eax
406f26:	74 4d                	je     0x406f75
406f28:	83 f8 20             	cmp    $0x20,%eax
406f2b:	74 48                	je     0x406f75
406f2d:	53                   	push   %ebx
406f2e:	ff 15 f8 f0 40 00    	call   *0x40f0f8
406f34:	8b d0                	mov    %eax,%edx
406f36:	89 45 f8             	mov    %eax,-0x8(%ebp)
406f39:	2b d3                	sub    %ebx,%edx
406f3b:	89 07                	mov    %eax,(%edi)
406f3d:	d1 fa                	sar    $1,%edx
406f3f:	8d 4a 01             	lea    0x1(%edx),%ecx
406f42:	8d 0c 4e             	lea    (%esi,%ecx,2),%ecx
406f45:	3b 4d fc             	cmp    -0x4(%ebp),%ecx
406f48:	73 39                	jae    0x406f83
406f4a:	85 d2                	test   %edx,%edx
406f4c:	7e 16                	jle    0x406f64
406f4e:	2b de                	sub    %esi,%ebx
406f50:	66 8b 04 33          	mov    (%ebx,%esi,1),%ax
406f54:	66 89 06             	mov    %ax,(%esi)
406f57:	83 c6 02             	add    $0x2,%esi
406f5a:	83 ea 01             	sub    $0x1,%edx
406f5d:	75 f1                	jne    0x406f50
406f5f:	8b 07                	mov    (%edi),%eax
406f61:	89 45 f8             	mov    %eax,-0x8(%ebp)
406f64:	0f b7 00             	movzwl (%eax),%eax
406f67:	33 d2                	xor    %edx,%edx
406f69:	8b 5d f8             	mov    -0x8(%ebp),%ebx
406f6c:	8b c8                	mov    %eax,%ecx
406f6e:	66 3b d0             	cmp    %ax,%dx
406f71:	74 02                	je     0x406f75
406f73:	eb a1                	jmp    0x406f16
406f75:	3b 75 fc             	cmp    -0x4(%ebp),%esi
406f78:	73 09                	jae    0x406f83
406f7a:	33 c0                	xor    %eax,%eax
406f7c:	66 89 06             	mov    %ax,(%esi)
406f7f:	33 c0                	xor    %eax,%eax
406f81:	eb 05                	jmp    0x406f88
406f83:	b8 09 00 02 80       	mov    $0x80020009,%eax
406f88:	5f                   	pop    %edi
406f89:	5e                   	pop    %esi
406f8a:	5b                   	pop    %ebx
406f8b:	c9                   	leave
406f8c:	c2 04 00             	ret    $0x4
406f8f:	8b ff                	mov    %edi,%edi
406f91:	55                   	push   %ebp
406f92:	8b ec                	mov    %esp,%ebp
406f94:	6a ff                	push   $0xffffffff
406f96:	68 2e a6 40 00       	push   $0x40a62e
406f9b:	64 a1 00 00 00 00    	mov    %fs:0x0,%eax
406fa1:	50                   	push   %eax
406fa2:	b8 58 22 00 00       	mov    $0x2258,%eax
406fa7:	e8 04 34 00 00       	call   0x40a3b0
406fac:	a1 e4 c1 40 00       	mov    0x40c1e4,%eax
406fb1:	33 c5                	xor    %ebp,%eax
406fb3:	89 45 f0             	mov    %eax,-0x10(%ebp)
406fb6:	53                   	push   %ebx
406fb7:	56                   	push   %esi
406fb8:	57                   	push   %edi
406fb9:	50                   	push   %eax
406fba:	8d 45 f4             	lea    -0xc(%ebp),%eax
406fbd:	64 a3 00 00 00 00    	mov    %eax,%fs:0x0
406fc3:	8b c1                	mov    %ecx,%eax
406fc5:	89 85 e0 dd ff ff    	mov    %eax,-0x2220(%ebp)
406fcb:	8b 4d 0c             	mov    0xc(%ebp),%ecx
406fce:	8b 7d 08             	mov    0x8(%ebp),%edi
406fd1:	89 8d dc dd ff ff    	mov    %ecx,-0x2224(%ebp)
406fd7:	33 c9                	xor    %ecx,%ecx
406fd9:	8b d9                	mov    %ecx,%ebx
406fdb:	89 8d c4 dd ff ff    	mov    %ecx,-0x223c(%ebp)
406fe1:	89 9d c8 dd ff ff    	mov    %ebx,-0x2238(%ebp)
406fe7:	89 8d cc dd ff ff    	mov    %ecx,-0x2234(%ebp)
406fed:	89 8d d0 dd ff ff    	mov    %ecx,-0x2230(%ebp)
406ff3:	89 4d fc             	mov    %ecx,-0x4(%ebp)
406ff6:	8b c8                	mov    %eax,%ecx
406ff8:	57                   	push   %edi
406ff9:	e8 37 fe ff ff       	call   0x406e35
406ffe:	8b f0                	mov    %eax,%esi
407000:	85 f6                	test   %esi,%esi
407002:	0f 88 0c 06 00 00    	js     0x407614
407008:	e9 c2 05 00 00       	jmp    0x4075cf
40700d:	68 c0 23 40 00       	push   $0x4023c0
407012:	57                   	push   %edi
407013:	c7 85 d8 dd ff ff 01 	movl   $0x1,-0x2228(%ebp)
40701a:	00 00 00
40701d:	ff 15 8c f0 40 00    	call   *0x40f08c
407023:	f7 d8                	neg    %eax
407025:	68 94 23 40 00       	push   $0x402394
40702a:	1b f6                	sbb    %esi,%esi
40702c:	46                   	inc    %esi
40702d:	57                   	push   %edi
40702e:	89 b5 e4 dd ff ff    	mov    %esi,-0x221c(%ebp)
407034:	ff 15 8c f0 40 00    	call   *0x40f08c
40703a:	85 c0                	test   %eax,%eax
40703c:	74 08                	je     0x407046
40703e:	85 f6                	test   %esi,%esi
407040:	0f 84 a0 00 00 00    	je     0x4070e6
407046:	8b 8d e0 dd ff ff    	mov    -0x2220(%ebp),%ecx
40704c:	57                   	push   %edi
40704d:	e8 e3 fd ff ff       	call   0x406e35
407052:	8b f0                	mov    %eax,%esi
407054:	85 f6                	test   %esi,%esi
407056:	0f 88 ad 05 00 00    	js     0x407609
40705c:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
407060:	0f 84 80 00 00 00    	je     0x4070e6
407066:	33 c0                	xor    %eax,%eax
407068:	8b cf                	mov    %edi,%ecx
40706a:	6a 5c                	push   $0x5c
40706c:	5a                   	pop    %edx
40706d:	89 85 b8 dd ff ff    	mov    %eax,-0x2248(%ebp)
407073:	89 85 bc dd ff ff    	mov    %eax,-0x2244(%ebp)
407079:	89 85 c0 dd ff ff    	mov    %eax,-0x2240(%ebp)
40707f:	e8 67 f5 ff ff       	call   0x4065eb
407084:	85 c0                	test   %eax,%eax
407086:	0f 85 78 05 00 00    	jne    0x407604
40708c:	57                   	push   %edi
40708d:	e8 71 fb ff ff       	call   0x406c03
407092:	85 c0                	test   %eax,%eax
407094:	74 20                	je     0x4070b6
407096:	8b 85 dc dd ff ff    	mov    -0x2224(%ebp),%eax
40709c:	8d 8d b8 dd ff ff    	lea    -0x2248(%ebp),%ecx
4070a2:	57                   	push   %edi
4070a3:	89 85 b8 dd ff ff    	mov    %eax,-0x2248(%ebp)
4070a9:	e8 86 fb ff ff       	call   0x406c34
4070ae:	33 c0                	xor    %eax,%eax
4070b0:	89 85 b8 dd ff ff    	mov    %eax,-0x2248(%ebp)
4070b6:	83 bd e4 dd ff ff 00 	cmpl   $0x0,-0x221c(%ebp)
4070bd:	74 27                	je     0x4070e6
4070bf:	8b 8d e0 dd ff ff    	mov    -0x2220(%ebp),%ecx
4070c5:	57                   	push   %edi
4070c6:	e8 6a fd ff ff       	call   0x406e35
4070cb:	8b f0                	mov    %eax,%esi
4070cd:	85 f6                	test   %esi,%esi
4070cf:	0f 88 34 05 00 00    	js     0x407609
4070d5:	8b 8d e0 dd ff ff    	mov    -0x2220(%ebp),%ecx
4070db:	57                   	push   %edi
4070dc:	e8 bb fa ff ff       	call   0x406b9c
4070e1:	e9 81 02 00 00       	jmp    0x407367
4070e6:	68 ac 23 40 00       	push   $0x4023ac
4070eb:	57                   	push   %edi
4070ec:	ff 15 8c f0 40 00    	call   *0x40f08c
4070f2:	85 c0                	test   %eax,%eax
4070f4:	75 1c                	jne    0x407112
4070f6:	8b 8d e0 dd ff ff    	mov    -0x2220(%ebp),%ecx
4070fc:	57                   	push   %edi
4070fd:	89 85 d8 dd ff ff    	mov    %eax,-0x2228(%ebp)
407103:	e8 2d fd ff ff       	call   0x406e35
407108:	8b f0                	mov    %eax,%esi
40710a:	85 f6                	test   %esi,%esi
40710c:	0f 88 f7 04 00 00    	js     0x407609
407112:	68 8c 23 40 00       	push   $0x40238c
407117:	57                   	push   %edi
407118:	ff 15 8c f0 40 00    	call   *0x40f08c
40711e:	85 c0                	test   %eax,%eax
407120:	0f 85 1c 01 00 00    	jne    0x407242
407126:	8b 8d e0 dd ff ff    	mov    -0x2220(%ebp),%ecx
40712c:	8d 85 e8 dd ff ff    	lea    -0x2218(%ebp),%eax
407132:	50                   	push   %eax
407133:	e8 fd fc ff ff       	call   0x406e35
407138:	8b f0                	mov    %eax,%esi
40713a:	85 f6                	test   %esi,%esi
40713c:	0f 88 c7 04 00 00    	js     0x407609
407142:	8b 8d e0 dd ff ff    	mov    -0x2220(%ebp),%ecx
407148:	57                   	push   %edi
407149:	e8 e7 fc ff ff       	call   0x406e35
40714e:	8b f0                	mov    %eax,%esi
407150:	85 f6                	test   %esi,%esi
407152:	0f 88 b1 04 00 00    	js     0x407609
407158:	6a 3d                	push   $0x3d
40715a:	58                   	pop    %eax
40715b:	66 39 07             	cmp    %ax,(%edi)
40715e:	0f 85 a0 04 00 00    	jne    0x407604
407164:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
407168:	74 52                	je     0x4071bc
40716a:	33 c0                	xor    %eax,%eax
40716c:	89 85 b0 dd ff ff    	mov    %eax,-0x2250(%ebp)
407172:	89 85 b4 dd ff ff    	mov    %eax,-0x224c(%ebp)
407178:	8b 85 dc dd ff ff    	mov    -0x2224(%ebp),%eax
40717e:	8b 8d e0 dd ff ff    	mov    -0x2220(%ebp),%ecx
407184:	c6 45 fc 01          	movb   $0x1,-0x4(%ebp)