40843a:	89 45 e4             	mov    %eax,-0x1c(%ebp)
40843d:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
408444:	e8 09 00 00 00       	call   0x408452
408449:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40844c:	e8 3c 52 00 00       	call   0x40d68d
408451:	c3                   	ret
408452:	ff 75 14             	push   0x14(%ebp)
408455:	e8 fd 04 00 00       	call   0x408957
40845a:	59                   	pop    %ecx
40845b:	c3                   	ret
40845c:	57                   	push   %edi
40845d:	33 ff                	xor    %edi,%edi
40845f:	39 7c 24 08          	cmp    %edi,0x8(%esp)
408463:	75 1d                	jne    0x408482
408465:	e8 90 0f 00 00       	call   0x4093fa
40846a:	57                   	push   %edi
40846b:	57                   	push   %edi
40846c:	57                   	push   %edi
40846d:	57                   	push   %edi
40846e:	57                   	push   %edi
40846f:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
408475:	e8 d6 f1 ff ff       	call   0x407650
40847a:	83 c4 14             	add    $0x14,%esp
40847d:	83 c8 ff             	or     $0xffffffff,%eax
408480:	5f                   	pop    %edi
408481:	c3                   	ret
408482:	56                   	push   %esi
408483:	8b 74 24 10          	mov    0x10(%esp),%esi
408487:	3b f7                	cmp    %edi,%esi
408489:	75 1d                	jne    0x4084a8
40848b:	e8 6a 0f 00 00       	call   0x4093fa
408490:	57                   	push   %edi
408491:	57                   	push   %edi
408492:	57                   	push   %edi
408493:	57                   	push   %edi
408494:	57                   	push   %edi
408495:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40849b:	e8 b0 f1 ff ff       	call   0x407650
4084a0:	83 c4 14             	add    $0x14,%esp
4084a3:	83 c8 ff             	or     $0xffffffff,%eax
4084a6:	eb 1c                	jmp    0x4084c4
4084a8:	ff 74 24 0c          	push   0xc(%esp)
4084ac:	e8 53 72 00 00       	call   0x40f704
4084b1:	59                   	pop    %ecx
4084b2:	8b c8                	mov    %eax,%ecx
4084b4:	89 06                	mov    %eax,(%esi)
4084b6:	23 ca                	and    %edx,%ecx
4084b8:	83 c8 ff             	or     $0xffffffff,%eax
4084bb:	3b c8                	cmp    %eax,%ecx
4084bd:	89 56 04             	mov    %edx,0x4(%esi)
4084c0:	74 02                	je     0x4084c4
4084c2:	33 c0                	xor    %eax,%eax
4084c4:	5e                   	pop    %esi
4084c5:	5f                   	pop    %edi
4084c6:	c3                   	ret
4084c7:	55                   	push   %ebp
4084c8:	8b ec                	mov    %esp,%ebp
4084ca:	56                   	push   %esi
4084cb:	8b 75 08             	mov    0x8(%ebp),%esi
4084ce:	8b 46 0c             	mov    0xc(%esi),%eax
4084d1:	a8 83                	test   $0x83,%al
4084d3:	75 10                	jne    0x4084e5
4084d5:	e8 20 0f 00 00       	call   0x4093fa
4084da:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
4084e0:	83 c8 ff             	or     $0xffffffff,%eax
4084e3:	eb 66                	jmp    0x40854b
4084e5:	83 e0 ef             	and    $0xffffffef,%eax
4084e8:	83 7d 10 01          	cmpl   $0x1,0x10(%ebp)
4084ec:	89 46 0c             	mov    %eax,0xc(%esi)
4084ef:	75 0e                	jne    0x4084ff
4084f1:	56                   	push   %esi
4084f2:	e8 a5 73 00 00       	call   0x40f89c
4084f7:	01 45 0c             	add    %eax,0xc(%ebp)
4084fa:	83 65 10 00          	andl   $0x0,0x10(%ebp)
4084fe:	59                   	pop    %ecx
4084ff:	56                   	push   %esi
408500:	e8 11 f8 ff ff       	call   0x407d16
408505:	8b 46 0c             	mov    0xc(%esi),%eax
408508:	84 c0                	test   %al,%al
40850a:	59                   	pop    %ecx
40850b:	79 08                	jns    0x408515
40850d:	83 e0 fc             	and    $0xfffffffc,%eax
408510:	89 46 0c             	mov    %eax,0xc(%esi)
408513:	eb 15                	jmp    0x40852a
408515:	a8 01                	test   $0x1,%al
408517:	74 11                	je     0x40852a
408519:	a8 08                	test   $0x8,%al
40851b:	74 0d                	je     0x40852a
40851d:	66 a9 00 04          	test   $0x400,%ax
408521:	75 07                	jne    0x40852a
408523:	c7 46 18 00 02 00 00 	movl   $0x200,0x18(%esi)
40852a:	ff 75 10             	push   0x10(%ebp)
40852d:	ff 75 0c             	push   0xc(%ebp)
408530:	56                   	push   %esi
408531:	e8 10 65 00 00       	call   0x40ea46
408536:	59                   	pop    %ecx
408537:	50                   	push   %eax
408538:	e8 83 72 00 00       	call   0x40f7c0
40853d:	33 c9                	xor    %ecx,%ecx
40853f:	83 c4 0c             	add    $0xc,%esp
408542:	83 f8 ff             	cmp    $0xffffffff,%eax
408545:	0f 95 c1             	setne  %cl
408548:	49                   	dec    %ecx
408549:	8b c1                	mov    %ecx,%eax
40854b:	5e                   	pop    %esi
40854c:	5d                   	pop    %ebp
40854d:	c3                   	ret
40854e:	6a 0c                	push   $0xc
408550:	68 f8 aa 41 00       	push   $0x41aaf8
408555:	e8 ee 50 00 00       	call   0x40d648
40855a:	33 c0                	xor    %eax,%eax
40855c:	33 f6                	xor    %esi,%esi
40855e:	39 75 08             	cmp    %esi,0x8(%ebp)
408561:	0f 95 c0             	setne  %al
408564:	3b c6                	cmp    %esi,%eax
408566:	75 1d                	jne    0x408585
408568:	e8 8d 0e 00 00       	call   0x4093fa
40856d:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
408573:	56                   	push   %esi
408574:	56                   	push   %esi
408575:	56                   	push   %esi
408576:	56                   	push   %esi
408577:	56                   	push   %esi
408578:	e8 d3 f0 ff ff       	call   0x407650
40857d:	83 c4 14             	add    $0x14,%esp
408580:	83 c8 ff             	or     $0xffffffff,%eax
408583:	eb 3e                	jmp    0x4085c3
408585:	8b 7d 10             	mov    0x10(%ebp),%edi
408588:	3b fe                	cmp    %esi,%edi
40858a:	74 0a                	je     0x408596
40858c:	83 ff 01             	cmp    $0x1,%edi
40858f:	74 05                	je     0x408596
408591:	83 ff 02             	cmp    $0x2,%edi
408594:	75 d2                	jne    0x408568
408596:	ff 75 08             	push   0x8(%ebp)
408599:	e8 67 03 00 00       	call   0x408905
40859e:	59                   	pop    %ecx
40859f:	89 75 fc             	mov    %esi,-0x4(%ebp)
4085a2:	57                   	push   %edi
4085a3:	ff 75 0c             	push   0xc(%ebp)
4085a6:	ff 75 08             	push   0x8(%ebp)
4085a9:	e8 19 ff ff ff       	call   0x4084c7
4085ae:	83 c4 0c             	add    $0xc,%esp
4085b1:	89 45 e4             	mov    %eax,-0x1c(%ebp)
4085b4:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
4085bb:	e8 09 00 00 00       	call   0x4085c9
4085c0:	8b 45 e4             	mov    -0x1c(%ebp),%eax
4085c3:	e8 c5 50 00 00       	call   0x40d68d
4085c8:	c3                   	ret
4085c9:	ff 75 08             	push   0x8(%ebp)
4085cc:	e8 86 03 00 00       	call   0x408957
4085d1:	59                   	pop    %ecx
4085d2:	c3                   	ret
4085d3:	56                   	push   %esi
4085d4:	33 f6                	xor    %esi,%esi
4085d6:	39 74 24 08          	cmp    %esi,0x8(%esp)
4085da:	75 1d                	jne    0x4085f9
4085dc:	e8 19 0e 00 00       	call   0x4093fa
4085e1:	56                   	push   %esi
4085e2:	56                   	push   %esi
4085e3:	56                   	push   %esi
4085e4:	56                   	push   %esi
4085e5:	56                   	push   %esi
4085e6:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
4085ec:	e8 5f f0 ff ff       	call   0x407650
4085f1:	83 c4 14             	add    $0x14,%esp
4085f4:	83 c8 ff             	or     $0xffffffff,%eax
4085f7:	5e                   	pop    %esi
4085f8:	c3                   	ret
4085f9:	8b 44 24 0c          	mov    0xc(%esp),%eax
4085fd:	3b c6                	cmp    %esi,%eax
4085ff:	74 db                	je     0x4085dc
408601:	56                   	push   %esi
408602:	ff 70 04             	push   0x4(%eax)
408605:	ff 30                	push   (%eax)
408607:	ff 74 24 14          	push   0x14(%esp)
40860b:	e8 bd 74 00 00       	call   0x40facd
408610:	83 c4 10             	add    $0x10,%esp
408613:	5e                   	pop    %esi
408614:	c3                   	ret
408615:	53                   	push   %ebx
408616:	56                   	push   %esi
408617:	8b 74 24 0c          	mov    0xc(%esp),%esi
40861b:	57                   	push   %edi
40861c:	33 ff                	xor    %edi,%edi
40861e:	83 cb ff             	or     $0xffffffff,%ebx
408621:	3b f7                	cmp    %edi,%esi
408623:	75 1d                	jne    0x408642
408625:	e8 d0 0d 00 00       	call   0x4093fa
40862a:	57                   	push   %edi
40862b:	57                   	push   %edi
40862c:	57                   	push   %edi
40862d:	57                   	push   %edi
40862e:	57                   	push   %edi
40862f:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
408635:	e8 16 f0 ff ff       	call   0x407650
40863a:	83 c4 14             	add    $0x14,%esp
40863d:	83 c8 ff             	or     $0xffffffff,%eax
408640:	eb 42                	jmp    0x408684
408642:	f6 46 0c 83          	testb  $0x83,0xc(%esi)
408646:	74 37                	je     0x40867f
408648:	56                   	push   %esi
408649:	e8 c8 f6 ff ff       	call   0x407d16
40864e:	56                   	push   %esi
40864f:	8b d8                	mov    %eax,%ebx
408651:	e8 ce 6e 00 00       	call   0x40f524
408656:	56                   	push   %esi
408657:	e8 ea 63 00 00       	call   0x40ea46
40865c:	50                   	push   %eax
40865d:	e8 4e 75 00 00       	call   0x40fbb0
408662:	83 c4 10             	add    $0x10,%esp
408665:	85 c0                	test   %eax,%eax
408667:	7d 05                	jge    0x40866e
408669:	83 cb ff             	or     $0xffffffff,%ebx
40866c:	eb 11                	jmp    0x40867f
40866e:	8b 46 1c             	mov    0x1c(%esi),%eax
408671:	3b c7                	cmp    %edi,%eax
408673:	74 0a                	je     0x40867f
408675:	50                   	push   %eax
408676:	e8 d8 dd ff ff       	call   0x406453
40867b:	59                   	pop    %ecx
40867c:	89 7e 1c             	mov    %edi,0x1c(%esi)
40867f:	89 7e 0c             	mov    %edi,0xc(%esi)
408682:	8b c3                	mov    %ebx,%eax
408684:	5f                   	pop    %edi
408685:	5e                   	pop    %esi
408686:	5b                   	pop    %ebx
408687:	c3                   	ret
408688:	6a 0c                	push   $0xc
40868a:	68 18 ab 41 00       	push   $0x41ab18
40868f:	e8 b4 4f 00 00       	call   0x40d648
408694:	83 4d e4 ff          	orl    $0xffffffff,-0x1c(%ebp)
408698:	33 c0                	xor    %eax,%eax
40869a:	8b 75 08             	mov    0x8(%ebp),%esi
40869d:	33 ff                	xor    %edi,%edi
40869f:	3b f7                	cmp    %edi,%esi
4086a1:	0f 95 c0             	setne  %al
4086a4:	3b c7                	cmp    %edi,%eax
4086a6:	75 1d                	jne    0x4086c5
4086a8:	e8 4d 0d 00 00       	call   0x4093fa
4086ad:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
4086b3:	57                   	push   %edi
4086b4:	57                   	push   %edi
4086b5:	57                   	push   %edi
4086b6:	57                   	push   %edi
4086b7:	57                   	push   %edi
4086b8:	e8 93 ef ff ff       	call   0x407650
4086bd:	83 c4 14             	add    $0x14,%esp
4086c0:	83 c8 ff             	or     $0xffffffff,%eax
4086c3:	eb 0c                	jmp    0x4086d1
4086c5:	f6 46 0c 40          	testb  $0x40,0xc(%esi)
4086c9:	74 0c                	je     0x4086d7
4086cb:	89 7e 0c             	mov    %edi,0xc(%esi)
4086ce:	8b 45 e4             	mov    -0x1c(%ebp),%eax
4086d1:	e8 b7 4f 00 00       	call   0x40d68d
4086d6:	c3                   	ret
4086d7:	56                   	push   %esi
4086d8:	e8 28 02 00 00       	call   0x408905
4086dd:	59                   	pop    %ecx
4086de:	89 7d fc             	mov    %edi,-0x4(%ebp)
4086e1:	56                   	push   %esi
4086e2:	e8 2e ff ff ff       	call   0x408615
4086e7:	59                   	pop    %ecx
4086e8:	89 45 e4             	mov    %eax,-0x1c(%ebp)
4086eb:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
4086f2:	e8 05 00 00 00       	call   0x4086fc
4086f7:	eb d5                	jmp    0x4086ce
4086f9:	8b 75 08             	mov    0x8(%ebp),%esi
4086fc:	56                   	push   %esi
4086fd:	e8 55 02 00 00       	call   0x408957
408702:	59                   	pop    %ecx
408703:	c3                   	ret
408704:	51                   	push   %ecx
408705:	53                   	push   %ebx
408706:	55                   	push   %ebp
408707:	56                   	push   %esi
408708:	57                   	push   %edi
408709:	ff 35 c8 e5 41 00    	push   0x41e5c8
40870f:	e8 2e 3c 00 00       	call   0x40c342
408714:	ff 35 c4 e5 41 00    	push   0x41e5c4
40871a:	8b f0                	mov    %eax,%esi
40871c:	89 74 24 18          	mov    %esi,0x18(%esp)
408720:	e8 1d 3c 00 00       	call   0x40c342
408725:	8b f8                	mov    %eax,%edi
408727:	3b fe                	cmp    %esi,%edi
408729:	59                   	pop    %ecx
40872a:	59                   	pop    %ecx
40872b:	72 7c                	jb     0x4087a9
40872d:	8b df                	mov    %edi,%ebx
40872f:	2b de                	sub    %esi,%ebx
408731:	8d 6b 04             	lea    0x4(%ebx),%ebp
408734:	83 fd 04             	cmp    $0x4,%ebp
408737:	72 70                	jb     0x4087a9
408739:	56                   	push   %esi
40873a:	e8 3e 75 00 00       	call   0x40fc7d
40873f:	8b f0                	mov    %eax,%esi
408741:	3b f5                	cmp    %ebp,%esi
408743:	59                   	pop    %ecx
408744:	73 4a                	jae    0x408790
408746:	b8 00 08 00 00       	mov    $0x800,%eax
40874b:	3b f0                	cmp    %eax,%esi
40874d:	73 02                	jae    0x408751
40874f:	8b c6                	mov    %esi,%eax
408751:	03 c6                	add    %esi,%eax
408753:	3b c6                	cmp    %esi,%eax
408755:	72 10                	jb     0x408767
408757:	50                   	push   %eax
408758:	ff 74 24 14          	push   0x14(%esp)
40875c:	e8 13 0c 00 00       	call   0x409374
408761:	85 c0                	test   %eax,%eax
408763:	59                   	pop    %ecx
408764:	59                   	pop    %ecx
408765:	75 17                	jne    0x40877e
408767:	8d 46 10             	lea    0x10(%esi),%eax
40876a:	3b c6                	cmp    %esi,%eax
40876c:	72 3b                	jb     0x4087a9
40876e:	50                   	push   %eax
40876f:	ff 74 24 14          	push   0x14(%esp)
408773:	e8 fc 0b 00 00       	call   0x409374
408778:	85 c0                	test   %eax,%eax
40877a:	59                   	pop    %ecx
40877b:	59                   	pop    %ecx
40877c:	74 2b                	je     0x4087a9
40877e:	c1 fb 02             	sar    $0x2,%ebx
408781:	50                   	push   %eax
408782:	8d 3c 98             	lea    (%eax,%ebx,4),%edi
408785:	e8 4c 3b 00 00       	call   0x40c2d6
40878a:	59                   	pop    %ecx
40878b:	a3 c8 e5 41 00       	mov    %eax,0x41e5c8
408790:	8b 74 24 18          	mov    0x18(%esp),%esi
408794:	89 37                	mov    %esi,(%edi)
408796:	83 c7 04             	add    $0x4,%edi
408799:	57                   	push   %edi
40879a:	e8 37 3b 00 00       	call   0x40c2d6
40879f:	a3 c4 e5 41 00       	mov    %eax,0x41e5c4
4087a4:	59                   	pop    %ecx
4087a5:	8b c6                	mov    %esi,%eax
4087a7:	eb 02                	jmp    0x4087ab
4087a9:	33 c0                	xor    %eax,%eax
4087ab:	5f                   	pop    %edi
4087ac:	5e                   	pop    %esi
4087ad:	5d                   	pop    %ebp
4087ae:	5b                   	pop    %ebx
4087af:	59                   	pop    %ecx
4087b0:	c3                   	ret
4087b1:	56                   	push   %esi
4087b2:	6a 04                	push   $0x4
4087b4:	6a 20                	push   $0x20
4087b6:	e8 71 0b 00 00       	call   0x40932c
4087bb:	8b f0                	mov    %eax,%esi