We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
angr should not require futures
In [setup.py](https://github.com/angr/angr/blob/c2cf015f78bd060b263e80627f5962b3062e0ea7/setup.py#L145), a dependency on [futures](https://pypi.org/project/futures/) is declared.

However, `futures` is a backport to Python2 of the `concurrent.futures` standard library module available in Python3.

The only occurrences of `futures` at this point are in [exploration_techniques/threading.py](https://github.com/angr/angr/blob/8edb29f5f885f029d2e97fba470063c3d78f7832/angr/exploration_techniques/threading.py).

(Maybe) Relates to #1277 .

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `setup.py`
Content:
```
1 # pylint: disable=no-name-in-module,import-error,unused-variable
2 import os
3 import sys
4 import subprocess
5 import pkg_resources
6 import shutil
7 import platform
8 import glob
9 
10 if bytes is str:
11     raise Exception("""
12 
13 =-=-=-=-=-=-=-=-=-=-=-=-=  WELCOME TO THE FUTURE!  =-=-=-=-=-=-=-=-=-=-=-=-=-=
14 
15 angr has transitioned to python 3. Due to the small size of the team behind it,
16 we can't reasonably maintain compatibility between both python 2 and python 3.
17 If you want to continue using the most recent version of angr (you definitely
18 want that, trust us) you should upgrade to python 3. It's like getting your
19 vaccinations. It hurts a little bit initially but in the end it's worth it.
20 
21 If you are staying on python 2 and would like to make sure you don't get
22 incompatible versions, make sure your pip is at least version 9.0, and it will
23 use our metadata to implicitly avoid them.
24 
25 For more information, see here: https://docs.angr.io/appendix/migration
26 
27 Good luck!
28 """)
29 
30 try:
31     from setuptools import setup
32     from setuptools import find_packages
33     packages = find_packages()
34 except ImportError:
35     from distutils.core import setup
36     packages = [x.strip('./').replace('/','.') for x in os.popen('find -name "__init__.py" | xargs -n1 dirname').read().strip().split('\n')]
37 
38 from distutils.util import get_platform
39 from distutils.errors import LibError
40 from distutils.command.build import build as _build
41 from distutils.command.clean import clean as _clean
42 
43 if sys.platform == 'darwin':
44     library_file = "angr_native.dylib"
45 elif sys.platform in ('win32', 'cygwin'):
46     library_file = "angr_native.dll"
47 else:
48     library_file = "angr_native.so"
49 
50 def _build_native():
51     try:
52         import unicorn
53         import pyvex
54     except ImportError:
55         raise LibError("You must install unicorn and pyvex before building angr")
56 
57     env = os.environ.copy()
58     env_data = (('UNICORN_INCLUDE_PATH', 'unicorn', 'include'),
59                 ('UNICORN_LIB_PATH', 'unicorn', 'lib'),
60                 ('UNICORN_LIB_FILE', 'unicorn', 'lib\\unicorn.lib'),
61                 ('PYVEX_INCLUDE_PATH', 'pyvex', 'include'),
62                 ('PYVEX_LIB_PATH', 'pyvex', 'lib'),
63                 ('PYVEX_LIB_FILE', 'pyvex', 'lib\\pyvex.lib'))
64     for var, pkg, fnm in env_data:
65         try:
66             env[var] = pkg_resources.resource_filename(pkg, fnm)
67         except KeyError:
68             pass
69 
70     cmd1 = ['nmake', '/f', 'Makefile-win']
71     cmd2 = ['make']
72     for cmd in (cmd1, cmd2):
73         try:
74             if subprocess.call(cmd, cwd='native', env=env) != 0:
75                 raise LibError('Unable to build angr_native')
76             break
77         except OSError:
78             continue
79     else:
80         raise LibError('Unable to build angr_native')
81 
82     shutil.rmtree('angr/lib', ignore_errors=True)
83     os.mkdir('angr/lib')
84     shutil.copy(os.path.join('native', library_file), 'angr/lib')
85 
86 def _clean_native():
87     oglob  = glob.glob('native/*.o')
88     oglob += glob.glob('native/*.obj')
89     oglob += glob.glob('native/*.so')
90     oglob += glob.glob('native/*.dll')
91     oglob += glob.glob('native/*.dylib')
92     for fname in oglob:
93         os.unlink(fname)
94 
95 class build(_build):
96     def run(self, *args):
97         self.execute(_build_native, (), msg='Building angr_native')
98         _build.run(self, *args)
99 
100 class clean(_clean):
101     def run(self, *args):
102         self.execute(_clean_native, (), msg='Cleaning angr_native')
103         _clean.run(self, *args)
104 
105 cmdclass = {
106     'build': build,
107     'clean': clean,
108 }
109 
110 try:
111     from setuptools.command.develop import develop as _develop
112     class develop(_develop):
113         def run(self, *args):
114             self.execute(_build_native, (), msg='Building angr_native')
115             _develop.run(self, *args)
116 
117     cmdclass['develop'] = develop
118 except ImportError:
119     pass
120 
121 if 'bdist_wheel' in sys.argv and '--plat-name' not in sys.argv:
122     sys.argv.append('--plat-name')
123     name = get_platform()
124     if 'linux' in name:
125         # linux_* platform tags are disallowed because the python ecosystem is fubar
126         # linux builds should be built in the centos 5 vm for maximum compatibility
127         sys.argv.append('manylinux1_' + platform.machine())
128     else:
129         # https://www.python.org/dev/peps/pep-0425/
130         sys.argv.append(name.replace('.', '_').replace('-', '_'))
131 
132 setup(
133     name='angr',
134     version='8.19.4.5',
135     python_requires='>=3.5',
136     description='A multi-architecture binary analysis toolkit, with the ability to perform dynamic symbolic execution and various static analyses on binaries',
137     url='https://github.com/angr/angr',
138     packages=packages,
139     install_requires=[
140         'sortedcontainers',
141         'cachetools',
142         'capstone>=3.0.5rc2',
143         'cooldict',
144         'dpkt',
145         'futures; python_version == "2.7"',
146         'mulpyplexer',
147         'networkx>=2.0',
148         'progressbar',
149         'rpyc',
150         'cffi>=1.7.0',
151         'unicorn',
152         'archinfo==8.19.4.5',
153         'claripy==8.19.4.5',
154         'cle==8.19.4.5',
155         'pyvex==8.19.4.5',
156         'ailment==8.19.4.5',
157         'GitPython',
158         'psutil',
159         'pycparser>=2.18',
160         'itanium_demangler',
161         'protobuf',
162     ],
163     setup_requires=['unicorn', 'pyvex'],
164     cmdclass=cmdclass,
165     include_package_data=True,
166     package_data={
167         'angr': ['lib/*']
168     }
169 )
170
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -142,7 +142,6 @@
         'capstone>=3.0.5rc2',
         'cooldict',
         'dpkt',
-        'futures; python_version == "2.7"',
         'mulpyplexer',
         'networkx>=2.0',
         'progressbar',

{"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -142,7 +142,6 @@\n         'capstone>=3.0.5rc2',\n         'cooldict',\n         'dpkt',\n-        'futures; python_version == \"2.7\"',\n         'mulpyplexer',\n         'networkx>=2.0',\n         'progressbar',\n", "issue": "angr should not require futures\nIn [setup.py](https://github.com/angr/angr/blob/c2cf015f78bd060b263e80627f5962b3062e0ea7/setup.py#L145), a dependency on [futures](https://pypi.org/project/futures/) is declared.\r\n\r\nHowever, `futures` is a backport to Python2 of the `concurrent.futures` standard library module available in Python3.\r\n\r\nThe only occurrences of `futures` at this point are in [exploration_techniques/threading.py](https://github.com/angr/angr/blob/8edb29f5f885f029d2e97fba470063c3d78f7832/angr/exploration_techniques/threading.py).\r\n\r\n(Maybe) Relates to #1277 .\n", "before_files": [{"content": "# pylint: disable=no-name-in-module,import-error,unused-variable\nimport os\nimport sys\nimport subprocess\nimport pkg_resources\nimport shutil\nimport platform\nimport glob\n\nif bytes is str:\n    raise Exception(\"\"\"\n\n=-=-=-=-=-=-=-=-=-=-=-=-=  WELCOME TO THE FUTURE!  =-=-=-=-=-=-=-=-=-=-=-=-=-=\n\nangr has transitioned to python 3. Due to the small size of the team behind it,\nwe can't reasonably maintain compatibility between both python 2 and python 3.\nIf you want to continue using the most recent version of angr (you definitely\nwant that, trust us) you should upgrade to python 3. It's like getting your\nvaccinations. It hurts a little bit initially but in the end it's worth it.\n\nIf you are staying on python 2 and would like to make sure you don't get\nincompatible versions, make sure your pip is at least version 9.0, and it will\nuse our metadata to implicitly avoid them.\n\nFor more information, see here: https://docs.angr.io/appendix/migration\n\nGood luck!\n\"\"\")\n\ntry:\n    from setuptools import setup\n    from setuptools import find_packages\n    packages = find_packages()\nexcept ImportError:\n    from distutils.core import setup\n    packages = [x.strip('./').replace('/','.') for x in os.popen('find -name \"__init__.py\" | xargs -n1 dirname').read().strip().split('\\n')]\n\nfrom distutils.util import get_platform\nfrom distutils.errors import LibError\nfrom distutils.command.build import build as _build\nfrom distutils.command.clean import clean as _clean\n\nif sys.platform == 'darwin':\n    library_file = \"angr_native.dylib\"\nelif sys.platform in ('win32', 'cygwin'):\n    library_file = \"angr_native.dll\"\nelse:\n    library_file = \"angr_native.so\"\n\ndef _build_native():\n    try:\n        import unicorn\n        import pyvex\n    except ImportError:\n        raise LibError(\"You must install unicorn and pyvex before building angr\")\n\n    env = os.environ.copy()\n    env_data = (('UNICORN_INCLUDE_PATH', 'unicorn', 'include'),\n                ('UNICORN_LIB_PATH', 'unicorn', 'lib'),\n                ('UNICORN_LIB_FILE', 'unicorn', 'lib\\\\unicorn.lib'),\n                ('PYVEX_INCLUDE_PATH', 'pyvex', 'include'),\n                ('PYVEX_LIB_PATH', 'pyvex', 'lib'),\n                ('PYVEX_LIB_FILE', 'pyvex', 'lib\\\\pyvex.lib'))\n    for var, pkg, fnm in env_data:\n        try:\n            env[var] = pkg_resources.resource_filename(pkg, fnm)\n        except KeyError:\n            pass\n\n    cmd1 = ['nmake', '/f', 'Makefile-win']\n    cmd2 = ['make']\n    for cmd in (cmd1, cmd2):\n        try:\n            if subprocess.call(cmd, cwd='native', env=env) != 0:\n                raise LibError('Unable to build angr_native')\n            break\n        except OSError:\n            continue\n    else:\n        raise LibError('Unable to build angr_native')\n\n    shutil.rmtree('angr/lib', ignore_errors=True)\n    os.mkdir('angr/lib')\n    shutil.copy(os.path.join('native', library_file), 'angr/lib')\n\ndef _clean_native():\n    oglob  = glob.glob('native/*.o')\n    oglob += glob.glob('native/*.obj')\n    oglob += glob.glob('native/*.so')\n    oglob += glob.glob('native/*.dll')\n    oglob += glob.glob('native/*.dylib')\n    for fname in oglob:\n        os.unlink(fname)\n\nclass build(_build):\n    def run(self, *args):\n        self.execute(_build_native, (), msg='Building angr_native')\n        _build.run(self, *args)\n\nclass clean(_clean):\n    def run(self, *args):\n        self.execute(_clean_native, (), msg='Cleaning angr_native')\n        _clean.run(self, *args)\n\ncmdclass = {\n    'build': build,\n    'clean': clean,\n}\n\ntry:\n    from setuptools.command.develop import develop as _develop\n    class develop(_develop):\n        def run(self, *args):\n            self.execute(_build_native, (), msg='Building angr_native')\n            _develop.run(self, *args)\n\n    cmdclass['develop'] = develop\nexcept ImportError:\n    pass\n\nif 'bdist_wheel' in sys.argv and '--plat-name' not in sys.argv:\n    sys.argv.append('--plat-name')\n    name = get_platform()\n    if 'linux' in name:\n        # linux_* platform tags are disallowed because the python ecosystem is fubar\n        # linux builds should be built in the centos 5 vm for maximum compatibility\n        sys.argv.append('manylinux1_' + platform.machine())\n    else:\n        # https://www.python.org/dev/peps/pep-0425/\n        sys.argv.append(name.replace('.', '_').replace('-', '_'))\n\nsetup(\n    name='angr',\n    version='8.19.4.5',\n    python_requires='>=3.5',\n    description='A multi-architecture binary analysis toolkit, with the ability to perform dynamic symbolic execution and various static analyses on binaries',\n    url='https://github.com/angr/angr',\n    packages=packages,\n    install_requires=[\n        'sortedcontainers',\n        'cachetools',\n        'capstone>=3.0.5rc2',\n        'cooldict',\n        'dpkt',\n        'futures; python_version == \"2.7\"',\n        'mulpyplexer',\n        'networkx>=2.0',\n        'progressbar',\n        'rpyc',\n        'cffi>=1.7.0',\n        'unicorn',\n        'archinfo==8.19.4.5',\n        'claripy==8.19.4.5',\n        'cle==8.19.4.5',\n        'pyvex==8.19.4.5',\n        'ailment==8.19.4.5',\n        'GitPython',\n        'psutil',\n        'pycparser>=2.18',\n        'itanium_demangler',\n        'protobuf',\n    ],\n    setup_requires=['unicorn', 'pyvex'],\n    cmdclass=cmdclass,\n    include_package_data=True,\n    package_data={\n        'angr': ['lib/*']\n    }\n)\n", "path": "setup.py"}], "after_files": [{"content": "# pylint: disable=no-name-in-module,import-error,unused-variable\nimport os\nimport sys\nimport subprocess\nimport pkg_resources\nimport shutil\nimport platform\nimport glob\n\nif bytes is str:\n    raise Exception(\"\"\"\n\n=-=-=-=-=-=-=-=-=-=-=-=-=  WELCOME TO THE FUTURE!  =-=-=-=-=-=-=-=-=-=-=-=-=-=\n\nangr has transitioned to python 3. Due to the small size of the team behind it,\nwe can't reasonably maintain compatibility between both python 2 and python 3.\nIf you want to continue using the most recent version of angr (you definitely\nwant that, trust us) you should upgrade to python 3. It's like getting your\nvaccinations. It hurts a little bit initially but in the end it's worth it.\n\nIf you are staying on python 2 and would like to make sure you don't get\nincompatible versions, make sure your pip is at least version 9.0, and it will\nuse our metadata to implicitly avoid them.\n\nFor more information, see here: https://docs.angr.io/appendix/migration\n\nGood luck!\n\"\"\")\n\ntry:\n    from setuptools import setup\n    from setuptools import find_packages\n    packages = find_packages()\nexcept ImportError:\n    from distutils.core import setup\n    packages = [x.strip('./').replace('/','.') for x in os.popen('find -name \"__init__.py\" | xargs -n1 dirname').read().strip().split('\\n')]\n\nfrom distutils.util import get_platform\nfrom distutils.errors import LibError\nfrom distutils.command.build import build as _build\nfrom distutils.command.clean import clean as _clean\n\nif sys.platform == 'darwin':\n    library_file = \"angr_native.dylib\"\nelif sys.platform in ('win32', 'cygwin'):\n    library_file = \"angr_native.dll\"\nelse:\n    library_file = \"angr_native.so\"\n\ndef _build_native():\n    try:\n        import unicorn\n        import pyvex\n    except ImportError:\n        raise LibError(\"You must install unicorn and pyvex before building angr\")\n\n    env = os.environ.copy()\n    env_data = (('UNICORN_INCLUDE_PATH', 'unicorn', 'include'),\n                ('UNICORN_LIB_PATH', 'unicorn', 'lib'),\n                ('UNICORN_LIB_FILE', 'unicorn', 'lib\\\\unicorn.lib'),\n                ('PYVEX_INCLUDE_PATH', 'pyvex', 'include'),\n                ('PYVEX_LIB_PATH', 'pyvex', 'lib'),\n                ('PYVEX_LIB_FILE', 'pyvex', 'lib\\\\pyvex.lib'))\n    for var, pkg, fnm in env_data:\n        try:\n            env[var] = pkg_resources.resource_filename(pkg, fnm)\n        except KeyError:\n            pass\n\n    cmd1 = ['nmake', '/f', 'Makefile-win']\n    cmd2 = ['make']\n    for cmd in (cmd1, cmd2):\n        try:\n            if subprocess.call(cmd, cwd='native', env=env) != 0:\n                raise LibError('Unable to build angr_native')\n            break\n        except OSError:\n            continue\n    else:\n        raise LibError('Unable to build angr_native')\n\n    shutil.rmtree('angr/lib', ignore_errors=True)\n    os.mkdir('angr/lib')\n    shutil.copy(os.path.join('native', library_file), 'angr/lib')\n\ndef _clean_native():\n    oglob  = glob.glob('native/*.o')\n    oglob += glob.glob('native/*.obj')\n    oglob += glob.glob('native/*.so')\n    oglob += glob.glob('native/*.dll')\n    oglob += glob.glob('native/*.dylib')\n    for fname in oglob:\n        os.unlink(fname)\n\nclass build(_build):\n    def run(self, *args):\n        self.execute(_build_native, (), msg='Building angr_native')\n        _build.run(self, *args)\n\nclass clean(_clean):\n    def run(self, *args):\n        self.execute(_clean_native, (), msg='Cleaning angr_native')\n        _clean.run(self, *args)\n\ncmdclass = {\n    'build': build,\n    'clean': clean,\n}\n\ntry:\n    from setuptools.command.develop import develop as _develop\n    class develop(_develop):\n        def run(self, *args):\n            self.execute(_build_native, (), msg='Building angr_native')\n            _develop.run(self, *args)\n\n    cmdclass['develop'] = develop\nexcept ImportError:\n    pass\n\nif 'bdist_wheel' in sys.argv and '--plat-name' not in sys.argv:\n    sys.argv.append('--plat-name')\n    name = get_platform()\n    if 'linux' in name:\n        # linux_* platform tags are disallowed because the python ecosystem is fubar\n        # linux builds should be built in the centos 5 vm for maximum compatibility\n        sys.argv.append('manylinux1_' + platform.machine())\n    else:\n        # https://www.python.org/dev/peps/pep-0425/\n        sys.argv.append(name.replace('.', '_').replace('-', '_'))\n\nsetup(\n    name='angr',\n    version='8.19.4.5',\n    python_requires='>=3.5',\n    description='A multi-architecture binary analysis toolkit, with the ability to perform dynamic symbolic execution and various static analyses on binaries',\n    url='https://github.com/angr/angr',\n    packages=packages,\n    install_requires=[\n        'sortedcontainers',\n        'cachetools',\n        'capstone>=3.0.5rc2',\n        'cooldict',\n        'dpkt',\n        'mulpyplexer',\n        'networkx>=2.0',\n        'progressbar',\n        'rpyc',\n        'cffi>=1.7.0',\n        'unicorn',\n        'archinfo==8.19.4.5',\n        'claripy==8.19.4.5',\n        'cle==8.19.4.5',\n        'pyvex==8.19.4.5',\n        'ailment==8.19.4.5',\n        'GitPython',\n        'psutil',\n        'pycparser>=2.18',\n        'itanium_demangler',\n        'protobuf',\n    ],\n    setup_requires=['unicorn', 'pyvex'],\n    cmdclass=cmdclass,\n    include_package_data=True,\n    package_data={\n        'angr': ['lib/*']\n    }\n)\n", "path": "setup.py"}]}