prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Remove botan from our library
  according to [this](https://github.com/botanio/sdk#py) botan has it's own implementation for python. No need to reinvent the wheel. I suggest we remove it from ptb in the next major (8.0) version.
  
  </issue>
  <code>
  [start of telegram/contrib/__init__.py]
  1 from .botan import Botan
  2 
  3 __all__ = ['Botan']
  4
  [end of telegram/contrib/__init__.py]
  [start of telegram/contrib/botan.py]
  1 import logging
  2 
  3 from future.moves.urllib.parse import quote
  4 from future.moves.urllib.error import HTTPError, URLError
  5 from future.moves.urllib.request import urlopen, Request
  6 
  7 logging.getLogger(__name__).addHandler(logging.NullHandler())
  8 
  9 
  10 class Botan(object):
  11     """This class helps to send incoming events to your botan analytics account.
  12      See more: https://github.com/botanio/sdk#botan-sdk
  13     """
  14 
  15     token = ''
  16     url_template = 'https://api.botan.io/track?token={token}' \
  17                    '&uid={uid}&name={name}&src=python-telegram-bot'
  18 
  19     def __init__(self, token):
  20         self.token = token
  21         self.logger = logging.getLogger(__name__)
  22 
  23     def track(self, message, event_name='event'):
  24         try:
  25             uid = message.chat_id
  26         except AttributeError:
  27             self.logger.warn('No chat_id in message')
  28             return False
  29         data = message.to_json()
  30         try:
  31             url = self.url_template.format(
  32                 token=str(self.token), uid=str(uid), name=quote(event_name))
  33             request = Request(
  34                 url, data=data.encode(), headers={'Content-Type': 'application/json'})
  35             urlopen(request)
  36             return True
  37         except HTTPError as error:
  38             self.logger.warn('Botan track error ' + str(error.code) + ':' + error.read().decode(
  39                 'utf-8'))
  40             return False
  41         except URLError as error:
  42             self.logger.warn('Botan track error ' + str(error.reason))
  43             return False
  44
  [end of telegram/contrib/botan.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/telegram/contrib/__init__.py b/telegram/contrib/__init__.py
  deleted file mode 100644
  --- a/telegram/contrib/__init__.py
  +++ /dev/null
  @@ -1,3 +0,0 @@
  -from .botan import Botan
  -
  -__all__ = ['Botan']
  diff --git a/telegram/contrib/botan.py b/telegram/contrib/botan.py
  deleted file mode 100644
  --- a/telegram/contrib/botan.py
  +++ /dev/null
  @@ -1,43 +0,0 @@
  -import logging
  -
  -from future.moves.urllib.parse import quote
  -from future.moves.urllib.error import HTTPError, URLError
  -from future.moves.urllib.request import urlopen, Request
  -
  -logging.getLogger(__name__).addHandler(logging.NullHandler())
  -
  -
  -class Botan(object):
  -    """This class helps to send incoming events to your botan analytics account.
  -     See more: https://github.com/botanio/sdk#botan-sdk
  -    """
  -
  -    token = ''
  -    url_template = 'https://api.botan.io/track?token={token}' \
  -                   '&uid={uid}&name={name}&src=python-telegram-bot'
  -
  -    def __init__(self, token):
  -        self.token = token
  -        self.logger = logging.getLogger(__name__)
  -
  -    def track(self, message, event_name='event'):
  -        try:
  -            uid = message.chat_id
  -        except AttributeError:
  -            self.logger.warn('No chat_id in message')
  -            return False
  -        data = message.to_json()
  -        try:
  -            url = self.url_template.format(
  -                token=str(self.token), uid=str(uid), name=quote(event_name))
  -            request = Request(
  -                url, data=data.encode(), headers={'Content-Type': 'application/json'})
  -            urlopen(request)
  -            return True
  -        except HTTPError as error:
  -            self.logger.warn('Botan track error ' + str(error.code) + ':' + error.read().decode(
  -                'utf-8'))
  -            return False
  -        except URLError as error:
  -            self.logger.warn('Botan track error ' + str(error.reason))
  -            return False
  
verification_info: {"golden_diff": "diff --git a/telegram/contrib/__init__.py b/telegram/contrib/__init__.py\ndeleted file mode 100644\n--- a/telegram/contrib/__init__.py\n+++ /dev/null\n@@ -1,3 +0,0 @@\n-from .botan import Botan\n-\n-__all__ = ['Botan']\ndiff --git a/telegram/contrib/botan.py b/telegram/contrib/botan.py\ndeleted file mode 100644\n--- a/telegram/contrib/botan.py\n+++ /dev/null\n@@ -1,43 +0,0 @@\n-import logging\n-\n-from future.moves.urllib.parse import quote\n-from future.moves.urllib.error import HTTPError, URLError\n-from future.moves.urllib.request import urlopen, Request\n-\n-logging.getLogger(__name__).addHandler(logging.NullHandler())\n-\n-\n-class Botan(object):\n-    \"\"\"This class helps to send incoming events to your botan analytics account.\n-     See more: https://github.com/botanio/sdk#botan-sdk\n-    \"\"\"\n-\n-    token = ''\n-    url_template = 'https://api.botan.io/track?token={token}' \\\n-                   '&uid={uid}&name={name}&src=python-telegram-bot'\n-\n-    def __init__(self, token):\n-        self.token = token\n-        self.logger = logging.getLogger(__name__)\n-\n-    def track(self, message, event_name='event'):\n-        try:\n-            uid = message.chat_id\n-        except AttributeError:\n-            self.logger.warn('No chat_id in message')\n-            return False\n-        data = message.to_json()\n-        try:\n-            url = self.url_template.format(\n-                token=str(self.token), uid=str(uid), name=quote(event_name))\n-            request = Request(\n-                url, data=data.encode(), headers={'Content-Type': 'application/json'})\n-            urlopen(request)\n-            return True\n-        except HTTPError as error:\n-            self.logger.warn('Botan track error ' + str(error.code) + ':' + error.read().decode(\n-                'utf-8'))\n-            return False\n-        except URLError as error:\n-            self.logger.warn('Botan track error ' + str(error.reason))\n-            return False\n", "issue": "Remove botan from our library\naccording to [this](https://github.com/botanio/sdk#py) botan has it's own implementation for python. No need to reinvent the wheel. I suggest we remove it from ptb in the next major (8.0) version.\n", "before_files": [{"content": "from .botan import Botan\n\n__all__ = ['Botan']\n", "path": "telegram/contrib/__init__.py"}, {"content": "import logging\n\nfrom future.moves.urllib.parse import quote\nfrom future.moves.urllib.error import HTTPError, URLError\nfrom future.moves.urllib.request import urlopen, Request\n\nlogging.getLogger(__name__).addHandler(logging.NullHandler())\n\n\nclass Botan(object):\n    \"\"\"This class helps to send incoming events to your botan analytics account.\n     See more: https://github.com/botanio/sdk#botan-sdk\n    \"\"\"\n\n    token = ''\n    url_template = 'https://api.botan.io/track?token={token}' \\\n                   '&uid={uid}&name={name}&src=python-telegram-bot'\n\n    def __init__(self, token):\n        self.token = token\n        self.logger = logging.getLogger(__name__)\n\n    def track(self, message, event_name='event'):\n        try:\n            uid = message.chat_id\n        except AttributeError:\n            self.logger.warn('No chat_id in message')\n            return False\n        data = message.to_json()\n        try:\n            url = self.url_template.format(\n                token=str(self.token), uid=str(uid), name=quote(event_name))\n            request = Request(\n                url, data=data.encode(), headers={'Content-Type': 'application/json'})\n            urlopen(request)\n            return True\n        except HTTPError as error:\n            self.logger.warn('Botan track error ' + str(error.code) + ':' + error.read().decode(\n                'utf-8'))\n            return False\n        except URLError as error:\n            self.logger.warn('Botan track error ' + str(error.reason))\n            return False\n", "path": "telegram/contrib/botan.py"}]}