40e009:	8b 47 0c             	mov    0xc(%edi),%eax
40e00c:	90                   	nop
40e00d:	a8 01                	test   $0x1,%al
40e00f:	0f 85 dd 00 00 00    	jne    0x40e0f2
40e015:	8b 47 08             	mov    0x8(%edi),%eax
40e018:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e01b:	3b f0                	cmp    %eax,%esi
40e01d:	73 05                	jae    0x40e024
40e01f:	8b c6                	mov    %esi,%eax
40e021:	89 75 f8             	mov    %esi,-0x8(%ebp)
40e024:	50                   	push   %eax
40e025:	52                   	push   %edx
40e026:	ff 37                	push   (%edi)
40e028:	e8 43 a9 ff ff       	call   0x408970
40e02d:	8b 45 f8             	mov    -0x8(%ebp),%eax
40e030:	83 c4 0c             	add    $0xc,%esp
40e033:	29 47 08             	sub    %eax,0x8(%edi)
40e036:	2b f0                	sub    %eax,%esi
40e038:	01 07                	add    %eax,(%edi)
40e03a:	eb 6b                	jmp    0x40e0a7
40e03c:	3b f1                	cmp    %ecx,%esi
40e03e:	72 6c                	jb     0x40e0ac
40e040:	8b 47 0c             	mov    0xc(%edi),%eax
40e043:	90                   	nop
40e044:	a8 c0                	test   $0xc0,%al
40e046:	74 12                	je     0x40e05a
40e048:	57                   	push   %edi
40e049:	e8 83 f4 ff ff       	call   0x40d4d1
40e04e:	59                   	pop    %ecx
40e04f:	85 c0                	test   %eax,%eax
40e051:	0f 85 9b 00 00 00    	jne    0x40e0f2
40e057:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40e05a:	8b c6                	mov    %esi,%eax
40e05c:	85 c9                	test   %ecx,%ecx
40e05e:	74 0d                	je     0x40e06d
40e060:	33 d2                	xor    %edx,%edx
40e062:	f7 f1                	div    %ecx
40e064:	8b c6                	mov    %esi,%eax
40e066:	2b c2                	sub    %edx,%eax
40e068:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e06b:	eb 03                	jmp    0x40e070
40e06d:	89 75 f8             	mov    %esi,-0x8(%ebp)
40e070:	83 f8 fe             	cmp    $0xfffffffe,%eax
40e073:	72 06                	jb     0x40e07b
40e075:	6a fe                	push   $0xfffffffe
40e077:	58                   	pop    %eax
40e078:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e07b:	50                   	push   %eax
40e07c:	ff 75 08             	push   0x8(%ebp)
40e07f:	57                   	push   %edi
40e080:	e8 09 6f 00 00       	call   0x414f8e
40e085:	59                   	pop    %ecx
40e086:	50                   	push   %eax
40e087:	e8 f1 84 00 00       	call   0x41657d
40e08c:	8b d0                	mov    %eax,%edx
40e08e:	83 c4 0c             	add    $0xc,%esp
40e091:	83 fa ff             	cmp    $0xffffffff,%edx
40e094:	74 53                	je     0x40e0e9
40e096:	8b 4d f8             	mov    -0x8(%ebp),%ecx
40e099:	8b c1                	mov    %ecx,%eax
40e09b:	3b d1                	cmp    %ecx,%edx
40e09d:	77 02                	ja     0x40e0a1
40e09f:	8b c2                	mov    %edx,%eax
40e0a1:	2b f0                	sub    %eax,%esi
40e0a3:	3b d1                	cmp    %ecx,%edx
40e0a5:	72 42                	jb     0x40e0e9
40e0a7:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40e0aa:	eb 25                	jmp    0x40e0d1
40e0ac:	0f be 02             	movsbl (%edx),%eax
40e0af:	57                   	push   %edi
40e0b0:	50                   	push   %eax
40e0b1:	e8 50 91 00 00       	call   0x417206
40e0b6:	59                   	pop    %ecx
40e0b7:	59                   	pop    %ecx
40e0b8:	83 f8 ff             	cmp    $0xffffffff,%eax
40e0bb:	74 35                	je     0x40e0f2
40e0bd:	8b 4f 18             	mov    0x18(%edi),%ecx
40e0c0:	4e                   	dec    %esi
40e0c1:	33 c0                	xor    %eax,%eax
40e0c3:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40e0c6:	85 c9                	test   %ecx,%ecx
40e0c8:	7f 06                	jg     0x40e0d0
40e0ca:	33 c9                	xor    %ecx,%ecx
40e0cc:	41                   	inc    %ecx
40e0cd:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40e0d0:	40                   	inc    %eax
40e0d1:	8b 55 08             	mov    0x8(%ebp),%edx
40e0d4:	03 d0                	add    %eax,%edx
40e0d6:	89 55 08             	mov    %edx,0x8(%ebp)
40e0d9:	85 f6                	test   %esi,%esi
40e0db:	0f 85 13 ff ff ff    	jne    0x40dff4
40e0e1:	8b 45 10             	mov    0x10(%ebp),%eax
40e0e4:	e9 c8 fe ff ff       	jmp    0x40dfb1
40e0e9:	8b 45 f4             	mov    -0xc(%ebp),%eax
40e0ec:	6a 10                	push   $0x10
40e0ee:	59                   	pop    %ecx
40e0ef:	f0 09 08             	lock or %ecx,(%eax)
40e0f2:	2b de                	sub    %esi,%ebx
40e0f4:	33 d2                	xor    %edx,%edx
40e0f6:	8b c3                	mov    %ebx,%eax
40e0f8:	f7 75 0c             	divl   0xc(%ebp)
40e0fb:	e9 b1 fe ff ff       	jmp    0x40dfb1
40e100:	8b ff                	mov    %edi,%edi
40e102:	55                   	push   %ebp
40e103:	8b ec                	mov    %esp,%ebp
40e105:	83 ec 1c             	sub    $0x1c,%esp
40e108:	83 7d 0c 00          	cmpl   $0x0,0xc(%ebp)
40e10c:	74 1d                	je     0x40e12b
40e10e:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
40e112:	74 17                	je     0x40e12b
40e114:	8b 45 14             	mov    0x14(%ebp),%eax
40e117:	85 c0                	test   %eax,%eax
40e119:	75 14                	jne    0x40e12f
40e11b:	e8 db 0c 00 00       	call   0x40edfb
40e120:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40e126:	e8 56 ef ff ff       	call   0x40d081
40e12b:	33 c0                	xor    %eax,%eax
40e12d:	c9                   	leave
40e12e:	c3                   	ret
40e12f:	8d 4d 14             	lea    0x14(%ebp),%ecx
40e132:	89 45 f8             	mov    %eax,-0x8(%ebp)
40e135:	89 4d e4             	mov    %ecx,-0x1c(%ebp)
40e138:	8d 4d 08             	lea    0x8(%ebp),%ecx
40e13b:	89 45 f4             	mov    %eax,-0xc(%ebp)
40e13e:	8d 45 f8             	lea    -0x8(%ebp),%eax
40e141:	89 4d e8             	mov    %ecx,-0x18(%ebp)
40e144:	8d 4d 0c             	lea    0xc(%ebp),%ecx
40e147:	50                   	push   %eax
40e148:	89 4d ec             	mov    %ecx,-0x14(%ebp)
40e14b:	8d 45 e4             	lea    -0x1c(%ebp),%eax
40e14e:	50                   	push   %eax
40e14f:	8d 4d 10             	lea    0x10(%ebp),%ecx
40e152:	8d 45 f4             	lea    -0xc(%ebp),%eax
40e155:	89 4d f0             	mov    %ecx,-0x10(%ebp)
40e158:	50                   	push   %eax
40e159:	8d 4d ff             	lea    -0x1(%ebp),%ecx
40e15c:	e8 80 fd ff ff       	call   0x40dee1
40e161:	c9                   	leave
40e162:	c3                   	ret
40e163:	6a 0c                	push   $0xc
40e165:	68 d8 15 43 00       	push   $0x4315d8
40e16a:	e8 51 9e ff ff       	call   0x407fc0
40e16f:	83 65 e4 00          	andl   $0x0,-0x1c(%ebp)
40e173:	8b 45 08             	mov    0x8(%ebp),%eax
40e176:	ff 30                	push   (%eax)
40e178:	e8 09 d6 ff ff       	call   0x40b786
40e17d:	59                   	pop    %ecx
40e17e:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40e182:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40e185:	e8 34 00 00 00       	call   0x40e1be
40e18a:	8b f0                	mov    %eax,%esi
40e18c:	89 75 e4             	mov    %esi,-0x1c(%ebp)
40e18f:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40e196:	e8 17 00 00 00       	call   0x40e1b2
40e19b:	8b c6                	mov    %esi,%eax
40e19d:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40e1a0:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
40e1a7:	59                   	pop    %ecx
40e1a8:	5f                   	pop    %edi
40e1a9:	5e                   	pop    %esi
40e1aa:	5b                   	pop    %ebx
40e1ab:	c9                   	leave
40e1ac:	c2 0c 00             	ret    $0xc
40e1af:	8b 75 e4             	mov    -0x1c(%ebp),%esi
40e1b2:	8b 45 10             	mov    0x10(%ebp),%eax
40e1b5:	ff 30                	push   (%eax)
40e1b7:	e8 de d5 ff ff       	call   0x40b79a
40e1bc:	59                   	pop    %ecx
40e1bd:	c3                   	ret
40e1be:	8b ff                	mov    %edi,%edi
40e1c0:	53                   	push   %ebx
40e1c1:	56                   	push   %esi
40e1c2:	8b f1                	mov    %ecx,%esi
40e1c4:	57                   	push   %edi
40e1c5:	8b 06                	mov    (%esi),%eax
40e1c7:	8b 38                	mov    (%eax),%edi
40e1c9:	8b 46 04             	mov    0x4(%esi),%eax
40e1cc:	83 e7 fe             	and    $0xfffffffe,%edi
40e1cf:	ff 30                	push   (%eax)
40e1d1:	e8 fb f2 ff ff       	call   0x40d4d1
40e1d6:	8b 46 04             	mov    0x4(%esi),%eax
40e1d9:	ff 30                	push   (%eax)
40e1db:	e8 50 57 00 00       	call   0x413930
40e1e0:	8b 46 04             	mov    0x4(%esi),%eax
40e1e3:	59                   	pop    %ecx
40e1e4:	59                   	pop    %ecx
40e1e5:	b9 1f f8 ff ff       	mov    $0xfffff81f,%ecx
40e1ea:	8b 00                	mov    (%eax),%eax
40e1ec:	83 c0 0c             	add    $0xc,%eax
40e1ef:	f0 21 08             	lock and %ecx,(%eax)
40e1f2:	8b 46 08             	mov    0x8(%esi),%eax
40e1f5:	f6 00 04             	testb  $0x4,(%eax)
40e1f8:	74 14                	je     0x40e20e
40e1fa:	8b 4e 04             	mov    0x4(%esi),%ecx
40e1fd:	68 00 04 00 00       	push   $0x400
40e202:	6a 02                	push   $0x2
40e204:	8b 01                	mov    (%ecx),%eax
40e206:	83 c0 14             	add    $0x14,%eax
40e209:	50                   	push   %eax
40e20a:	ff 31                	push   (%ecx)
40e20c:	eb 41                	jmp    0x40e24f
40e20e:	8b 46 0c             	mov    0xc(%esi),%eax
40e211:	8b 00                	mov    (%eax),%eax
40e213:	85 c0                	test   %eax,%eax
40e215:	75 2c                	jne    0x40e243
40e217:	6a 01                	push   $0x1
40e219:	57                   	push   %edi
40e21a:	e8 8f 4e 00 00       	call   0x4130ae
40e21f:	6a 00                	push   $0x0
40e221:	8b d8                	mov    %eax,%ebx
40e223:	e8 e3 4e 00 00       	call   0x41310b
40e228:	83 c4 0c             	add    $0xc,%esp
40e22b:	85 db                	test   %ebx,%ebx
40e22d:	75 0b                	jne    0x40e23a
40e22f:	ff 05 1c 46 43 00    	incl   0x43461c
40e235:	83 c8 ff             	or     $0xffffffff,%eax
40e238:	eb 1d                	jmp    0x40e257
40e23a:	68 40 01 00 00       	push   $0x140
40e23f:	57                   	push   %edi
40e240:	53                   	push   %ebx
40e241:	eb 07                	jmp    0x40e24a
40e243:	68 80 01 00 00       	push   $0x180
40e248:	57                   	push   %edi
40e249:	50                   	push   %eax
40e24a:	8b 46 04             	mov    0x4(%esi),%eax
40e24d:	ff 30                	push   (%eax)
40e24f:	e8 07 00 00 00       	call   0x40e25b
40e254:	83 c4 10             	add    $0x10,%esp
40e257:	5f                   	pop    %edi
40e258:	5e                   	pop    %esi
40e259:	5b                   	pop    %ebx
40e25a:	c3                   	ret
40e25b:	8b ff                	mov    %edi,%edi
40e25d:	55                   	push   %ebp
40e25e:	8b ec                	mov    %esp,%ebp
40e260:	8b 45 08             	mov    0x8(%ebp),%eax
40e263:	8b 4d 14             	mov    0x14(%ebp),%ecx
40e266:	83 c0 0c             	add    $0xc,%eax
40e269:	f0 09 08             	lock or %ecx,(%eax)
40e26c:	8b 4d 08             	mov    0x8(%ebp),%ecx
40e26f:	8b 45 10             	mov    0x10(%ebp),%eax
40e272:	89 41 18             	mov    %eax,0x18(%ecx)
40e275:	8b 45 08             	mov    0x8(%ebp),%eax
40e278:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40e27b:	89 08                	mov    %ecx,(%eax)
40e27d:	8b 45 08             	mov    0x8(%ebp),%eax
40e280:	89 48 04             	mov    %ecx,0x4(%eax)
40e283:	8b 45 08             	mov    0x8(%ebp),%eax
40e286:	83 60 08 00          	andl   $0x0,0x8(%eax)
40e28a:	33 c0                	xor    %eax,%eax
40e28c:	5d                   	pop    %ebp
40e28d:	c3                   	ret
40e28e:	8b ff                	mov    %edi,%edi
40e290:	55                   	push   %ebp
40e291:	8b ec                	mov    %esp,%ebp
40e293:	83 ec 20             	sub    $0x20,%esp
40e296:	8b 4d 08             	mov    0x8(%ebp),%ecx
40e299:	89 4d f8             	mov    %ecx,-0x8(%ebp)
40e29c:	85 c9                	test   %ecx,%ecx
40e29e:	75 15                	jne    0x40e2b5
40e2a0:	e8 56 0b 00 00       	call   0x40edfb
40e2a5:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40e2ab:	e8 d1 ed ff ff       	call   0x40d081
40e2b0:	83 c8 ff             	or     $0xffffffff,%eax
40e2b3:	c9                   	leave
40e2b4:	c3                   	ret
40e2b5:	8b 45 10             	mov    0x10(%ebp),%eax
40e2b8:	83 f8 04             	cmp    $0x4,%eax
40e2bb:	74 09                	je     0x40e2c6
40e2bd:	85 c0                	test   %eax,%eax
40e2bf:	74 0e                	je     0x40e2cf
40e2c1:	83 f8 40             	cmp    $0x40,%eax
40e2c4:	75 da                	jne    0x40e2a0
40e2c6:	85 c0                	test   %eax,%eax
40e2c8:	74 05                	je     0x40e2cf
40e2ca:	83 f8 40             	cmp    $0x40,%eax
40e2cd:	75 0d                	jne    0x40e2dc
40e2cf:	8b 45 14             	mov    0x14(%ebp),%eax
40e2d2:	83 c0 fe             	add    $0xfffffffe,%eax
40e2d5:	3d fd ff ff 7f       	cmp    $0x7ffffffd,%eax
40e2da:	77 c4                	ja     0x40e2a0
40e2dc:	8d 45 14             	lea    0x14(%ebp),%eax
40e2df:	89 4d f4             	mov    %ecx,-0xc(%ebp)
40e2e2:	89 45 e0             	mov    %eax,-0x20(%ebp)
40e2e5:	8d 45 f8             	lea    -0x8(%ebp),%eax
40e2e8:	89 45 e4             	mov    %eax,-0x1c(%ebp)
40e2eb:	8d 45 10             	lea    0x10(%ebp),%eax
40e2ee:	89 45 e8             	mov    %eax,-0x18(%ebp)
40e2f1:	8d 45 0c             	lea    0xc(%ebp),%eax
40e2f4:	89 45 ec             	mov    %eax,-0x14(%ebp)
40e2f7:	8d 45 f4             	lea    -0xc(%ebp),%eax
40e2fa:	50                   	push   %eax
40e2fb:	8d 45 e0             	lea    -0x20(%ebp),%eax
40e2fe:	89 4d f0             	mov    %ecx,-0x10(%ebp)
40e301:	50                   	push   %eax
40e302:	8d 45 f0             	lea    -0x10(%ebp),%eax
40e305:	50                   	push   %eax
40e306:	8d 4d ff             	lea    -0x1(%ebp),%ecx
40e309:	e8 55 fe ff ff       	call   0x40e163
40e30e:	c9                   	leave
40e30f:	c3                   	ret
40e310:	8b ff                	mov    %edi,%edi
40e312:	55                   	push   %ebp
40e313:	8b ec                	mov    %esp,%ebp
40e315:	53                   	push   %ebx
40e316:	56                   	push   %esi
40e317:	8b 75 0c             	mov    0xc(%ebp),%esi
40e31a:	57                   	push   %edi
40e31b:	8d 56 0c             	lea    0xc(%esi),%edx
40e31e:	8b 02                	mov    (%edx),%eax
40e320:	90                   	nop
40e321:	c1 e8 0c             	shr    $0xc,%eax
40e324:	a8 01                	test   $0x1,%al
40e326:	75 73                	jne    0x40e39b
40e328:	56                   	push   %esi
40e329:	e8 60 6c 00 00       	call   0x414f8e
40e32e:	bf 90 31 43 00       	mov    $0x433190,%edi
40e333:	59                   	pop    %ecx
40e334:	83 f8 ff             	cmp    $0xffffffff,%eax
40e337:	74 1b                	je     0x40e354
40e339:	83 f8 fe             	cmp    $0xfffffffe,%eax
40e33c:	74 16                	je     0x40e354
40e33e:	8b d0                	mov    %eax,%edx
40e340:	8b c8                	mov    %eax,%ecx
40e342:	83 e2 3f             	and    $0x3f,%edx
40e345:	c1 f9 06             	sar    $0x6,%ecx
40e348:	6b da 38             	imul   $0x38,%edx,%ebx
40e34b:	03 1c 8d c0 4a 43 00 	add    0x434ac0(,%ecx,4),%ebx
40e352:	eb 0c                	jmp    0x40e360
40e354:	8b c8                	mov    %eax,%ecx
40e356:	8b d0                	mov    %eax,%edx
40e358:	c1 f9 06             	sar    $0x6,%ecx
40e35b:	8b df                	mov    %edi,%ebx
40e35d:	83 e2 3f             	and    $0x3f,%edx
40e360:	80 7b 29 00          	cmpb   $0x0,0x29(%ebx)
40e364:	75 1a                	jne    0x40e380
40e366:	83 f8 ff             	cmp    $0xffffffff,%eax
40e369:	74 0f                	je     0x40e37a
40e36b:	83 f8 fe             	cmp    $0xfffffffe,%eax
40e36e:	74 0a                	je     0x40e37a
40e370:	6b fa 38             	imul   $0x38,%edx,%edi
40e373:	03 3c 8d c0 4a 43 00 	add    0x434ac0(,%ecx,4),%edi
40e37a:	f6 47 2d 01          	testb  $0x1,0x2d(%edi)
40e37e:	74 18                	je     0x40e398
40e380:	e8 76 0a 00 00       	call   0x40edfb
40e385:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40e38b:	e8 f1 ec ff ff       	call   0x40d081
40e390:	83 c8 ff             	or     $0xffffffff,%eax
40e393:	5f                   	pop    %edi
40e394:	5e                   	pop    %esi