diff --git a/Lib/setuptools/__init__.py b/Lib/setuptools/__init__.py
index 57e364e..3921ce2 100644
--- a/Lib/setuptools/__init__.py
+++ b/Lib/setuptools/__init__.py
@@ -40,7 +40,7 @@
     return out
 
 setup = distutils.core.setup
-    
+
 _Command = _get_unpatched(_Command)
 
 class Command(_Command):
@@ -53,7 +53,7 @@
         _Command.__init__(self,dist)
         for k,v in kw.items():
             setattr(self,k,v)
-            
+
     def reinitialize_command(self, command, reinit_subcommands=0, **kw):
         cmd = _Command.reinitialize_command(self, command, reinit_subcommands)
         for k,v in kw.items():
@@ -62,21 +62,3 @@
 
 import distutils.core
 distutils.core.Command = Command    # we can't patch distutils.cmd, alas
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/archive_util.py b/Lib/setuptools/archive_util.py
index 511f05a..dd9c684 100755
--- a/Lib/setuptools/archive_util.py
+++ b/Lib/setuptools/archive_util.py
@@ -14,7 +14,7 @@
     """Couldn't recognize the archive type"""
 
 def default_filter(src,dst):
-    """The default progress/filter callback; returns True for all files"""   
+    """The default progress/filter callback; returns True for all files"""
     return dst
 
 
@@ -184,7 +184,7 @@
                 name = member.name
                 # don't extract absolute paths or ones with .. in them
                 if not name.startswith('/') and '..' not in name:
-                    dst = os.path.join(extract_dir, *name.split('/'))                
+                    dst = os.path.join(extract_dir, *name.split('/'))
                     dst = progress_filter(name, dst)
                     if dst:
                         if dst.endswith(os.sep):
@@ -198,8 +198,3 @@
 
 
 extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile
-
-
-
-
-
diff --git a/Lib/setuptools/command/__init__.py b/Lib/setuptools/command/__init__.py
index 03bb9dd..bff53e7 100644
--- a/Lib/setuptools/command/__init__.py
+++ b/Lib/setuptools/command/__init__.py
@@ -8,7 +8,7 @@
 if sys.version>='2.5':
     # In Python 2.5 and above, distutils includes its own upload command
     __all__.remove('upload')
-    
+
 
 from distutils.command.bdist import bdist
 
diff --git a/Lib/setuptools/command/alias.py b/Lib/setuptools/command/alias.py
index f5368b2..1df474a 100755
--- a/Lib/setuptools/command/alias.py
+++ b/Lib/setuptools/command/alias.py
@@ -11,17 +11,17 @@
         if c in arg: return repr(arg)
     if arg.split()<>[arg]:
         return repr(arg)
-    return arg        
+    return arg
 
 
 class alias(option_base):
     """Define a shortcut that invokes one or more commands"""
-    
+
     description = "define a shortcut to invoke one or more commands"
     command_consumes_arguments = True
 
     user_options = [
-        ('remove',   'r', 'remove (unset) the alias'), 
+        ('remove',   'r', 'remove (unset) the alias'),
     ] + option_base.user_options
 
     boolean_options = option_base.boolean_options + ['remove']
@@ -77,6 +77,3 @@
     else:
         source = '--filename=%r' % source
     return source+name+' '+command
-            
-
-
diff --git a/Lib/setuptools/command/bdist_egg.py b/Lib/setuptools/command/bdist_egg.py
index 74f2d42..617d88d 100644
--- a/Lib/setuptools/command/bdist_egg.py
+++ b/Lib/setuptools/command/bdist_egg.py
@@ -233,7 +233,7 @@
 
         if self.exclude_source_files:
             self.zap_pyfiles()
-        
+
         # Make the archive
         make_zipfile(self.egg_output, archive_root, verbose=self.verbose,
                           dry_run=self.dry_run)
@@ -262,7 +262,7 @@
 
     def make_init_files(self):
         """Create missing package __init__ files"""
-        init_files = []       
+        init_files = []
         for base,dirs,files in walk_egg(self.bdist_dir):
             if base==self.bdist_dir:
                 # don't put an __init__ in the root
@@ -276,7 +276,7 @@
                             filename = os.path.join(base,'__init__.py')
                             if not self.dry_run:
                                 f = open(filename,'w'); f.write(NS_PKG_STUB)
-                                f.close()    
+                                f.close()
                             init_files.append(filename)
                     break
             else:
@@ -329,7 +329,7 @@
 def walk_egg(egg_dir):
     """Walk an unpacked egg's contents, skipping the metadata directory"""
     walker = os.walk(egg_dir)
-    base,dirs,files = walker.next()       
+    base,dirs,files = walker.next()
     if 'EGG-INFO' in dirs:
         dirs.remove('EGG-INFO')
     yield base,dirs,files
@@ -447,5 +447,3 @@
         os.path.walk(base_dir, visit, None)
 
     return zip_filename
-
-
diff --git a/Lib/setuptools/command/bdist_rpm.py b/Lib/setuptools/command/bdist_rpm.py
index 1a0b048..00e07ac 100755
--- a/Lib/setuptools/command/bdist_rpm.py
+++ b/Lib/setuptools/command/bdist_rpm.py
@@ -35,34 +35,3 @@
         ]
         spec.insert(spec.index(line24)+1, "%define unmangled_version "+version)
         return spec
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/build_ext.py b/Lib/setuptools/command/build_ext.py
index a4b9047..f8551fb 100644
--- a/Lib/setuptools/command/build_ext.py
+++ b/Lib/setuptools/command/build_ext.py
@@ -283,5 +283,3 @@
         self.create_static_lib(
             objects, basename, output_dir, debug, target_lang
         )
-
-
diff --git a/Lib/setuptools/command/build_py.py b/Lib/setuptools/command/build_py.py
index d820710..77a9b23 100644
--- a/Lib/setuptools/command/build_py.py
+++ b/Lib/setuptools/command/build_py.py
@@ -93,7 +93,7 @@
         ei_cmd = self.get_finalized_command('egg_info')
         for path in ei_cmd.filelist.files:
             if path.endswith('.py'):
-                continue            
+                continue
             d,f = os.path.split(assert_relative(path))
             prev = None
             while d and d!=prev and d not in src_dirs:
@@ -142,7 +142,7 @@
 
         f = open(init_py,'rU')
         if 'declare_namespace' not in f.read():
-            from distutils.errors import DistutilsError       
+            from distutils.errors import DistutilsError
             raise DistutilsError(
               "Namespace package problem: %s is a namespace package, but its\n"
               "__init__.py does not call declare_namespace()! Please fix it.\n"
@@ -167,7 +167,7 @@
         globs = (self.exclude_package_data.get('', [])
                  + self.exclude_package_data.get(package, []))
         bad = []
-        for pattern in globs:           
+        for pattern in globs:
             bad.extend(
                 fnmatch.filter(
                     files, os.path.join(src_dir, convert_path(pattern))
@@ -190,16 +190,3 @@
 setup.py directory, *never* absolute paths.
 """ % path
     )
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/develop.py b/Lib/setuptools/command/develop.py
index f38506b..7ab5b23 100755
--- a/Lib/setuptools/command/develop.py
+++ b/Lib/setuptools/command/develop.py
@@ -46,7 +46,7 @@
             "Please rename %r to %r before using 'develop'"
             % (ei.egg_info, ei.broken_egg_info)
             )
-        self.args = [ei.egg_name]       
+        self.args = [ei.egg_name]
         easy_install.finalize_options(self)
         self.egg_link = os.path.join(self.install_dir, ei.egg_name+'.egg-link')
         self.egg_base = ei.egg_base
@@ -104,7 +104,7 @@
         # create wrapper scripts in the script dir, pointing to dist.scripts
 
         # new-style...
-        self.install_wrapper_scripts(dist)  
+        self.install_wrapper_scripts(dist)
 
         # ...and old-style
         for script_name in self.distribution.scripts or []:
@@ -114,10 +114,3 @@
             script_text = f.read()
             f.close()
             self.install_script(dist, script_name, script_text, script_path)
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/easy_install.py b/Lib/setuptools/command/easy_install.py
index adb99b6..3ddcec4 100755
--- a/Lib/setuptools/command/easy_install.py
+++ b/Lib/setuptools/command/easy_install.py
@@ -1357,7 +1357,7 @@
         """Write changed .pth file back to disk"""
         if not self.dirty:
             return
-            
+
         data = '\n'.join(map(self.make_relative,self.paths))
         if data:
             log.debug("Saving %s", self.filename)
@@ -1434,7 +1434,7 @@
                 del zdc[p]
                 return
 
-    
+
 def get_script_args(dist, executable=sys_executable):
     """Yield write_script() argument tuples for a distribution's entrypoints"""
     spec = str(dist.as_requirement())
@@ -1553,8 +1553,3 @@
             distclass=DistributionWithoutHelpCommands, **kw
         )
     )
-
-
-
-
-
diff --git a/Lib/setuptools/command/egg_info.py b/Lib/setuptools/command/egg_info.py
index d9fcd3f..b68fb39 100755
--- a/Lib/setuptools/command/egg_info.py
+++ b/Lib/setuptools/command/egg_info.py
@@ -363,7 +363,3 @@
             if match:
                 return int(match.group(1))
     return 0
-
-
-
-
diff --git a/Lib/setuptools/command/install.py b/Lib/setuptools/command/install.py
index 7221b17..bfb9af5 100644
--- a/Lib/setuptools/command/install.py
+++ b/Lib/setuptools/command/install.py
@@ -60,7 +60,7 @@
         caller = sys._getframe(2)
         caller_module = caller.f_globals.get('__name__','')
         caller_name = caller.f_code.co_name
-        
+
         if caller_module != 'distutils.dist' or caller_name!='run_commands':
             # We weren't called from the command line or setup(), so we
             # should run in backward-compatibility mode to support bdist_*
@@ -68,7 +68,7 @@
             _install.run(self)
         else:
             self.do_egg_install()
-            
+
 
 
 
@@ -99,25 +99,3 @@
         cmd.args = args
         cmd.run()
         setuptools.bootstrap_install_from = None
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/install_egg_info.py b/Lib/setuptools/command/install_egg_info.py
index 4c79f41..193e91a 100755
--- a/Lib/setuptools/command/install_egg_info.py
+++ b/Lib/setuptools/command/install_egg_info.py
@@ -22,7 +22,7 @@
             None, None, ei_cmd.egg_name, ei_cmd.egg_version
         ).egg_name()+'.egg-info'
         self.source = ei_cmd.egg_info
-        self.target = os.path.join(self.install_dir, basename) 
+        self.target = os.path.join(self.install_dir, basename)
         self.outputs = [self.target]
 
     def run(self):
@@ -43,7 +43,7 @@
         return self.outputs
 
     def copytree(self):
-        # Copy the .egg-info tree to site-packages       
+        # Copy the .egg-info tree to site-packages
         def skimmer(src,dst):
             # filter out source-control directories; note that 'src' is always
             # a '/'-separated path, regardless of platform.  'dst' is a
@@ -78,5 +78,4 @@
                     "(p not in mp) and mp.append(p)\n"
                     % locals()
                 )
-            f.close()            
-
+            f.close()
diff --git a/Lib/setuptools/command/install_lib.py b/Lib/setuptools/command/install_lib.py
index 82afa14..96c8dfe 100644
--- a/Lib/setuptools/command/install_lib.py
+++ b/Lib/setuptools/command/install_lib.py
@@ -74,9 +74,3 @@
         if exclude:
             return [f for f in outputs if f not in exclude]
         return outputs
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/install_scripts.py b/Lib/setuptools/command/install_scripts.py
index fc156dc..69558bf 100755
--- a/Lib/setuptools/command/install_scripts.py
+++ b/Lib/setuptools/command/install_scripts.py
@@ -11,7 +11,7 @@
     def initialize_options(self):
         _install_scripts.initialize_options(self)
         self.no_ep = False
-   
+
     def run(self):
         self.run_command("egg_info")
         if self.distribution.scripts:
@@ -20,9 +20,9 @@
             self.outfiles = []
         if self.no_ep:
             # don't install entry point scripts into .egg file!
-            return  
+            return
 
-        ei_cmd = self.get_finalized_command("egg_info")       
+        ei_cmd = self.get_finalized_command("egg_info")
         dist = Distribution(
             ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info),
             ei_cmd.egg_name, ei_cmd.egg_version,
@@ -54,29 +54,3 @@
                 os.chmod(target,0755)
             except (AttributeError, os.error):
                 pass
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/rotate.py b/Lib/setuptools/command/rotate.py
index 11b6eae..8aab312 100755
--- a/Lib/setuptools/command/rotate.py
+++ b/Lib/setuptools/command/rotate.py
@@ -28,7 +28,7 @@
                 "(e.g. '.zip' or '.egg')"
             )
         if self.keep is None:
-            raise DistutilsOptionError("Must specify number of files to keep")           
+            raise DistutilsOptionError("Must specify number of files to keep")
         try:
             self.keep = int(self.keep)
         except ValueError:
@@ -55,28 +55,3 @@
                 log.info("Deleting %s", f)
                 if not self.dry_run:
                     os.unlink(f)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/saveopts.py b/Lib/setuptools/command/saveopts.py
index 1180a44..9c58d72 100755
--- a/Lib/setuptools/command/saveopts.py
+++ b/Lib/setuptools/command/saveopts.py
@@ -22,4 +22,3 @@
                     settings.setdefault(cmd,{})[opt] = val
 
         edit_config(self.filename, settings, self.dry_run)
-
diff --git a/Lib/setuptools/command/sdist.py b/Lib/setuptools/command/sdist.py
index 6026a7c..829cd3c 100755
--- a/Lib/setuptools/command/sdist.py
+++ b/Lib/setuptools/command/sdist.py
@@ -144,7 +144,7 @@
         self.filelist.append(os.path.join(ei_cmd.egg_info,'SOURCES.txt'))
 
         self.check_metadata()
-        self.make_distribution()        
+        self.make_distribution()
 
         dist_files = getattr(self.distribution,'dist_files',[])
         for file in self.archive_files:
@@ -161,4 +161,3 @@
             # dying and thus masking the real error
             sys.exc_info()[2].tb_next.tb_frame.f_locals['template'].close()
             raise
-
diff --git a/Lib/setuptools/command/setopt.py b/Lib/setuptools/command/setopt.py
index dbf3a94..e0c1058 100755
--- a/Lib/setuptools/command/setopt.py
+++ b/Lib/setuptools/command/setopt.py
@@ -82,7 +82,7 @@
 
 class option_base(Command):
     """Abstract base class for commands that mess with config files"""
-    
+
     user_options = [
         ('global-config', 'g',
                  "save options to the site-wide distutils.cfg file"),
@@ -94,7 +94,7 @@
 
     boolean_options = [
         'global-config', 'user-config',
-    ]    
+    ]
 
     def initialize_options(self):
         self.global_config = None
@@ -116,7 +116,7 @@
                 "Must specify only one configuration file option",
                 filenames
             )
-        self.filename, = filenames    
+        self.filename, = filenames
 
 
 
@@ -130,7 +130,7 @@
         ('command=', 'c', 'command to set an option for'),
         ('option=',  'o',  'option to set'),
         ('set-value=',   's', 'value of the option'),
-        ('remove',   'r', 'remove (unset) the value'), 
+        ('remove',   'r', 'remove (unset) the value'),
     ] + option_base.user_options
 
     boolean_options = option_base.boolean_options + ['remove']
@@ -156,9 +156,3 @@
             },
             self.dry_run
         )
-
-
-
-
-
-
diff --git a/Lib/setuptools/command/test.py b/Lib/setuptools/command/test.py
index 83589fa..01fca35 100644
--- a/Lib/setuptools/command/test.py
+++ b/Lib/setuptools/command/test.py
@@ -88,7 +88,7 @@
         self.reinitialize_command('build_ext', inplace=1)
         self.run_command('build_ext')
 
-        if self.distribution.tests_require:            
+        if self.distribution.tests_require:
             self.distribution.fetch_build_eggs(self.distribution.tests_require)
 
         if self.test_suite:
@@ -117,7 +117,3 @@
             None, None, [unittest.__file__]+self.test_args,
             testLoader = loader_class()
         )
-
-
-
-
diff --git a/Lib/setuptools/depends.py b/Lib/setuptools/depends.py
index 20e5cec..68d8194 100644
--- a/Lib/setuptools/depends.py
+++ b/Lib/setuptools/depends.py
@@ -237,10 +237,3 @@
             return const
         else:
             const = default
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/dist.py b/Lib/setuptools/dist.py
index 8cdcc26..f0417c1 100644
--- a/Lib/setuptools/dist.py
+++ b/Lib/setuptools/dist.py
@@ -796,25 +796,3 @@
                     " doesn't contain any packages or modules under %s"
                     % (self.description, item, item)
                 )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/extension.py b/Lib/setuptools/extension.py
index 2bef84e..cfcf55b 100644
--- a/Lib/setuptools/extension.py
+++ b/Lib/setuptools/extension.py
@@ -14,7 +14,7 @@
     """Extension that uses '.c' files in place of '.pyx' files"""
 
     if not have_pyrex:
-        # convert .pyx extensions to .c 
+        # convert .pyx extensions to .c
         def __init__(self,*args,**kw):
             _Extension.__init__(self,*args,**kw)
             sources = []
@@ -33,4 +33,3 @@
 distutils.extension.Extension = Extension
 if 'distutils.command.build_ext' in sys.modules:
     sys.modules['distutils.command.build_ext'].Extension = Extension
-
diff --git a/Lib/setuptools/package_index.py b/Lib/setuptools/package_index.py
index 3d66a7c..107e222 100755
--- a/Lib/setuptools/package_index.py
+++ b/Lib/setuptools/package_index.py
@@ -260,7 +260,7 @@
 
     def find_packages(self, requirement):
         self.scan_url(self.index_url + requirement.unsafe_name+'/')
-        
+
         if not self.package_pages.get(requirement.key):
             # Fall back to safe version of the name
             self.scan_url(self.index_url + requirement.project_name+'/')
@@ -489,7 +489,7 @@
                 "Can't process plain .py files without an '#egg=name-version'"
                 " suffix to enable automatic setup script generation."
             )
-        
+
     dl_blocksize = 8192
     def _download_to(self, url, filename):
         self.url_ok(url,True)   # raises error if not allowed
@@ -672,26 +672,3 @@
             # DNS-bl0ck1n9 f1r3w4llz sUx0rs!
             _sf_mirrors[:] = ['dl.sourceforge.net']
     return random.choice(_sf_mirrors)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/sandbox.py b/Lib/setuptools/sandbox.py
index dbc24ed..606944b 100755
--- a/Lib/setuptools/sandbox.py
+++ b/Lib/setuptools/sandbox.py
@@ -201,5 +201,3 @@
 support alternate installation locations even if you run its setup
 script by hand.  Please inform the package's author and the EasyInstall
 maintainers to find out if a fix or workaround is available.""" % self.args
-
-
diff --git a/Lib/setuptools/site-patch.py b/Lib/setuptools/site-patch.py
index 80e084b..b1b27b9 100755
--- a/Lib/setuptools/site-patch.py
+++ b/Lib/setuptools/site-patch.py
@@ -1,5 +1,5 @@
 def __boot():
-    import sys, imp, os, os.path   
+    import sys, imp, os, os.path
     PYTHONPATH = os.environ.get('PYTHONPATH')
     if PYTHONPATH is None or (sys.platform=='win32' and not PYTHONPATH):
         PYTHONPATH = []
@@ -48,7 +48,7 @@
         addsitedir(item)
 
     sys.__egginsert += oldpos           # restore effective old position
-    
+
     d,nd = makepath(stdpath[0])
     insert_at = None
     new_path = []
@@ -66,17 +66,9 @@
             # new path after the insert point, back-insert it
             new_path.insert(insert_at, item)
             insert_at += 1
-            
+
     sys.path[:] = new_path
 
-if __name__=='site':    
+if __name__=='site':
     __boot()
     del __boot
-    
-
-
-
-
-
-
-
diff --git a/Lib/setuptools/tests/__init__.py b/Lib/setuptools/tests/__init__.py
index 9705bb5..8a767dc 100644
--- a/Lib/setuptools/tests/__init__.py
+++ b/Lib/setuptools/tests/__init__.py
@@ -362,8 +362,3 @@
         ts5 = makeSetup().get_command_obj('test')
         ts5.ensure_finalized()
         self.assertEqual(ts5.test_suite, None)
-
-
-
-
-
diff --git a/Lib/setuptools/tests/test_resources.py b/Lib/setuptools/tests/test_resources.py
index b4dbfdb..f32c72e 100644
--- a/Lib/setuptools/tests/test_resources.py
+++ b/Lib/setuptools/tests/test_resources.py
@@ -143,7 +143,7 @@
         self.assertRaises(VersionConflict, ws.resolve,
             parse_requirements("Foo==0.9"), ad)
         ws = WorkingSet([]) # reset
-        
+
         # Request an extra that causes an unresolved dependency for "Baz"
         self.assertRaises(
             DistributionNotFound, ws.resolve,parse_requirements("Foo[bar]"), ad
@@ -161,7 +161,7 @@
         self.assertRaises( VersionConflict,
             ws.resolve, parse_requirements("Foo==1.2\nFoo!=1.2"), ad
         )
-        
+
     def testDistroDependsOptions(self):
         d = self.distRequires("""
             Twisted>=1.5
@@ -481,12 +481,3 @@
         for p,v1 in enumerate(torture):
             for v2 in torture[p+1:]:
                 c(v2,v1)
-
-
-
-
-
-
-
-
-
