prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Remove the "Delete streams" administrative tab
  Now that we have a "Delete stream" button in the main streams UI, which has lots more context on description/traffic/subscribers, this page is useless.  We should just remove it.
  
  We should make sure to remove the documentation in /help/ linking to this as well.
  
  </issue>
  <code>
  [start of zerver/lib/bugdown/help_settings_links.py]
  1 import re
  2 import markdown
  3 from typing import Any, Dict, List, Optional, Union, Text
  4 from typing.re import Match
  5 from markdown.preprocessors import Preprocessor
  6 
  7 REGEXP = re.compile(r'\{settings_tab\|(?P<setting_identifier>.*?)\}')
  8 
  9 link_mapping = {
  10     # a mapping from the setting identifier that is the same as the final URL
  11     # breadcrumb to that setting to the name of its setting type, the setting
  12     # name as it appears in the user interface, and a relative link that can
  13     # be used to get to that setting
  14     'your-account': ['Settings', 'Your account', '/#settings/your-account'],
  15     'display-settings': ['Settings', 'Display settings', '/#settings/display-settings'],
  16     'notifications': ['Settings', 'Notifications', '/#settings/notifications'],
  17     'your-bots': ['Settings', 'Your bots', '/#settings/your-bots'],
  18     'alert-words': ['Settings', 'Alert words', '/#settings/alert-words'],
  19     'uploaded-files': ['Settings', 'Uploaded files', '/#settings/uploaded-files'],
  20     'muted-topics': ['Settings', 'Muted topics', '/#settings/muted-topics'],
  21 
  22     'organization-profile': ['Manage organization', 'Organization profile',
  23                              '/#organization/organization-profile'],
  24     'organization-settings': ['Manage organization', 'Organization settings',
  25                               '/#organization/organization-settings'],
  26     'organization-permissions': ['Manage organization', 'Organization permissions',
  27                                  '/#organization/organization-permissions'],
  28     'emoji-settings': ['Manage organization', 'Custom emoji',
  29                        '/#organization/emoji-settings'],
  30     'auth-methods': ['Manage organization', 'Authentication methods',
  31                      '/#organization/auth-methods'],
  32     'user-groups-admin': ['Manage organization', 'User groups',
  33                           '/#organization/user-groups-admin'],
  34     'user-list-admin': ['Manage organization', 'Users', '/#organization/user-list-admin'],
  35     'deactivated-users-admin': ['Manage organization', 'Deactivated users',
  36                                 '/#organization/deactivated-users-admin'],
  37     'bot-list-admin': ['Manage organization', 'Bots', '/#organization/bot-list-admin'],
  38     'streams-list-admin': ['Manage organization', 'Delete streams',
  39                            '/#organization/streams-list-admin'],
  40     'default-streams-list': ['Manage organization', 'Default streams',
  41                              '/#organization/default-streams-list'],
  42     'filter-settings': ['Manage organization', 'Filter settings',
  43                         '/#organization/filter-settings'],
  44     'profile-field-settings': ['Manage organization', 'Custom profile fields',
  45                                '/#organization/profile-field-settings'],
  46     'invites-list-admin': ['Manage organization', 'Invitations',
  47                            '/#organization/invites-list-admin'],
  48 }
  49 
  50 settings_markdown = """
  51 1. From your desktop, click on the **gear**
  52    (<i class="icon-vector-cog"></i>) in the upper right corner.
  53 
  54 1. Select **%(setting_type_name)s**.
  55 
  56 1. On the left, click %(setting_reference)s.
  57 """
  58 
  59 
  60 class SettingHelpExtension(markdown.Extension):
  61     def extendMarkdown(self, md: markdown.Markdown, md_globals: Dict[str, Any]) -> None:
  62         """ Add SettingHelpExtension to the Markdown instance. """
  63         md.registerExtension(self)
  64         md.preprocessors.add('setting', Setting(), '_begin')
  65 
  66 relative_settings_links = None  # type: Optional[bool]
  67 
  68 def set_relative_settings_links(value: bool) -> None:
  69     global relative_settings_links
  70     relative_settings_links = value
  71 
  72 class Setting(Preprocessor):
  73     def run(self, lines: List[str]) -> List[str]:
  74         done = False
  75         while not done:
  76             for line in lines:
  77                 loc = lines.index(line)
  78                 match = REGEXP.search(line)
  79 
  80                 if match:
  81                     text = [self.handleMatch(match)]
  82                     # The line that contains the directive to include the macro
  83                     # may be preceded or followed by text or tags, in that case
  84                     # we need to make sure that any preceding or following text
  85                     # stays the same.
  86                     line_split = REGEXP.split(line, maxsplit=0)
  87                     preceding = line_split[0]
  88                     following = line_split[-1]
  89                     text = [preceding] + text + [following]
  90                     lines = lines[:loc] + text + lines[loc+1:]
  91                     break
  92             else:
  93                 done = True
  94         return lines
  95 
  96     def handleMatch(self, match: Match[Text]) -> Text:
  97         setting_identifier = match.group('setting_identifier')
  98         setting_type_name = link_mapping[setting_identifier][0]
  99         setting_name = link_mapping[setting_identifier][1]
  100         setting_link = link_mapping[setting_identifier][2]
  101         if relative_settings_links:
  102             setting_reference = "[%s](%s)" % (setting_name, setting_link)
  103         else:
  104             setting_reference = "**%s**" % (setting_name,)
  105         instructions = settings_markdown % {'setting_type_name': setting_type_name,
  106                                             'setting_reference': setting_reference}
  107         return instructions
  108 
  109 
  110 def makeExtension(*args: Any, **kwargs: Any) -> SettingHelpExtension:
  111     return SettingHelpExtension(*args, **kwargs)
  112
  [end of zerver/lib/bugdown/help_settings_links.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/zerver/lib/bugdown/help_settings_links.py b/zerver/lib/bugdown/help_settings_links.py
  --- a/zerver/lib/bugdown/help_settings_links.py
  +++ b/zerver/lib/bugdown/help_settings_links.py
  @@ -35,8 +35,6 @@
       'deactivated-users-admin': ['Manage organization', 'Deactivated users',
                                   '/#organization/deactivated-users-admin'],
       'bot-list-admin': ['Manage organization', 'Bots', '/#organization/bot-list-admin'],
  -    'streams-list-admin': ['Manage organization', 'Delete streams',
  -                           '/#organization/streams-list-admin'],
       'default-streams-list': ['Manage organization', 'Default streams',
                                '/#organization/default-streams-list'],
       'filter-settings': ['Manage organization', 'Filter settings',
  
verification_info: {"golden_diff": "diff --git a/zerver/lib/bugdown/help_settings_links.py b/zerver/lib/bugdown/help_settings_links.py\n--- a/zerver/lib/bugdown/help_settings_links.py\n+++ b/zerver/lib/bugdown/help_settings_links.py\n@@ -35,8 +35,6 @@\n     'deactivated-users-admin': ['Manage organization', 'Deactivated users',\n                                 '/#organization/deactivated-users-admin'],\n     'bot-list-admin': ['Manage organization', 'Bots', '/#organization/bot-list-admin'],\n-    'streams-list-admin': ['Manage organization', 'Delete streams',\n-                           '/#organization/streams-list-admin'],\n     'default-streams-list': ['Manage organization', 'Default streams',\n                              '/#organization/default-streams-list'],\n     'filter-settings': ['Manage organization', 'Filter settings',\n", "issue": "Remove the \"Delete streams\" administrative tab\nNow that we have a \"Delete stream\" button in the main streams UI, which has lots more context on description/traffic/subscribers, this page is useless.  We should just remove it.\r\n\r\nWe should make sure to remove the documentation in /help/ linking to this as well.\n", "before_files": [{"content": "import re\nimport markdown\nfrom typing import Any, Dict, List, Optional, Union, Text\nfrom typing.re import Match\nfrom markdown.preprocessors import Preprocessor\n\nREGEXP = re.compile(r'\\{settings_tab\\|(?P<setting_identifier>.*?)\\}')\n\nlink_mapping = {\n    # a mapping from the setting identifier that is the same as the final URL\n    # breadcrumb to that setting to the name of its setting type, the setting\n    # name as it appears in the user interface, and a relative link that can\n    # be used to get to that setting\n    'your-account': ['Settings', 'Your account', '/#settings/your-account'],\n    'display-settings': ['Settings', 'Display settings', '/#settings/display-settings'],\n    'notifications': ['Settings', 'Notifications', '/#settings/notifications'],\n    'your-bots': ['Settings', 'Your bots', '/#settings/your-bots'],\n    'alert-words': ['Settings', 'Alert words', '/#settings/alert-words'],\n    'uploaded-files': ['Settings', 'Uploaded files', '/#settings/uploaded-files'],\n    'muted-topics': ['Settings', 'Muted topics', '/#settings/muted-topics'],\n\n    'organization-profile': ['Manage organization', 'Organization profile',\n                             '/#organization/organization-profile'],\n    'organization-settings': ['Manage organization', 'Organization settings',\n                              '/#organization/organization-settings'],\n    'organization-permissions': ['Manage organization', 'Organization permissions',\n                                 '/#organization/organization-permissions'],\n    'emoji-settings': ['Manage organization', 'Custom emoji',\n                       '/#organization/emoji-settings'],\n    'auth-methods': ['Manage organization', 'Authentication methods',\n                     '/#organization/auth-methods'],\n    'user-groups-admin': ['Manage organization', 'User groups',\n                          '/#organization/user-groups-admin'],\n    'user-list-admin': ['Manage organization', 'Users', '/#organization/user-list-admin'],\n    'deactivated-users-admin': ['Manage organization', 'Deactivated users',\n                                '/#organization/deactivated-users-admin'],\n    'bot-list-admin': ['Manage organization', 'Bots', '/#organization/bot-list-admin'],\n    'streams-list-admin': ['Manage organization', 'Delete streams',\n                           '/#organization/streams-list-admin'],\n    'default-streams-list': ['Manage organization', 'Default streams',\n                             '/#organization/default-streams-list'],\n    'filter-settings': ['Manage organization', 'Filter settings',\n                        '/#organization/filter-settings'],\n    'profile-field-settings': ['Manage organization', 'Custom profile fields',\n                               '/#organization/profile-field-settings'],\n    'invites-list-admin': ['Manage organization', 'Invitations',\n                           '/#organization/invites-list-admin'],\n}\n\nsettings_markdown = \"\"\"\n1. From your desktop, click on the **gear**\n   (<i class=\"icon-vector-cog\"></i>) in the upper right corner.\n\n1. Select **%(setting_type_name)s**.\n\n1. On the left, click %(setting_reference)s.\n\"\"\"\n\n\nclass SettingHelpExtension(markdown.Extension):\n    def extendMarkdown(self, md: markdown.Markdown, md_globals: Dict[str, Any]) -> None:\n        \"\"\" Add SettingHelpExtension to the Markdown instance. \"\"\"\n        md.registerExtension(self)\n        md.preprocessors.add('setting', Setting(), '_begin')\n\nrelative_settings_links = None  # type: Optional[bool]\n\ndef set_relative_settings_links(value: bool) -> None:\n    global relative_settings_links\n    relative_settings_links = value\n\nclass Setting(Preprocessor):\n    def run(self, lines: List[str]) -> List[str]:\n        done = False\n        while not done:\n            for line in lines:\n                loc = lines.index(line)\n                match = REGEXP.search(line)\n\n                if match:\n                    text = [self.handleMatch(match)]\n                    # The line that contains the directive to include the macro\n                    # may be preceded or followed by text or tags, in that case\n                    # we need to make sure that any preceding or following text\n                    # stays the same.\n                    line_split = REGEXP.split(line, maxsplit=0)\n                    preceding = line_split[0]\n                    following = line_split[-1]\n                    text = [preceding] + text + [following]\n                    lines = lines[:loc] + text + lines[loc+1:]\n                    break\n            else:\n                done = True\n        return lines\n\n    def handleMatch(self, match: Match[Text]) -> Text:\n        setting_identifier = match.group('setting_identifier')\n        setting_type_name = link_mapping[setting_identifier][0]\n        setting_name = link_mapping[setting_identifier][1]\n        setting_link = link_mapping[setting_identifier][2]\n        if relative_settings_links:\n            setting_reference = \"[%s](%s)\" % (setting_name, setting_link)\n        else:\n            setting_reference = \"**%s**\" % (setting_name,)\n        instructions = settings_markdown % {'setting_type_name': setting_type_name,\n                                            'setting_reference': setting_reference}\n        return instructions\n\n\ndef makeExtension(*args: Any, **kwargs: Any) -> SettingHelpExtension:\n    return SettingHelpExtension(*args, **kwargs)\n", "path": "zerver/lib/bugdown/help_settings_links.py"}]}