[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [gettor/master] Send mirrors option



commit e81d9c681ba7998038a1ae626a00949766b498c7
Author: ilv <ilv@xxxxxxxxxxxxxxxxxxxxxxxx>
Date:   Mon Aug 3 15:05:53 2015 -0300

    Send mirrors option
---
 get_mirrors.py                      |  338 ++++++
 gettor/smtp.py                      |  239 ++--
 lang/smtp/i18n/en/LC_MESSAGES/en.po |   19 +
 mirrors-list.txt                    |   58 +
 smtp.cfg                            |    3 +-
 tor-mirrors                         | 2187 +++++++++++++++++++++++++++++++++++
 tor-mirrors.csv                     |  116 ++
 7 files changed, 2867 insertions(+), 93 deletions(-)

diff --git a/get_mirrors.py b/get_mirrors.py
new file mode 100644
index 0000000..9c4b0c4
--- /dev/null
+++ b/get_mirrors.py
@@ -0,0 +1,338 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of GetTor
+#
+# :authors: Israel Leiva <ilv@xxxxxxxxxxxxxx>
+#           see also AUTHORS file
+#
+# :license: This is Free Software. See LICENSE for license information.
+
+"""get_mirrors -- Download the list of tpo's mirrors for GetTor."""
+
+import os
+import json
+import codecs
+import logging
+import argparse
+
+
+from OpenSSL import SSL
+from OpenSSL import crypto
+
+from twisted.web import client
+from twisted.python import log
+from twisted.internet import ssl
+from twisted.internet import defer
+from twisted.internet import protocol
+from twisted.internet import reactor
+from twisted.internet.error import TimeoutError
+from twisted.internet.error import DNSLookupError
+from twisted.internet.error import ConnectionRefusedError
+
+from gettor import utils
+
+# Associate each protocol with its column name in tor-mirrors.csv
+PROTOS = {
+    'https': 'httpsWebsiteMirror',
+    'http': 'httpWebsiteMirror',
+    'rsync': 'rsyncWebsiteMirror',
+    'https-dist': 'httpsDistMirror',
+    'http-dist': 'httpDistMirror',
+    'rsync-dist': 'rsyncDistMirror',
+    'ftp': 'ftpWebsiteMirror',
+    'onion': 'hiddenServiceMirror',
+}
+
+# Tor Project's website certificate
+# $ openssl s_client -showcerts -connect tpo:443 < /dev/null > tpo.pem
+CERT_TPO = '/path/to/gettor/tpo.pem'
+
+
+# Taken from get-tor-exits (BridgeDB)
+class FileWriter(protocol.Protocol):
+    """Read a downloaded file incrementally and write to file."""
+    def __init__(self, finished, file):
+        """Create a FileWriter.
+
+        .. warning:: We currently only handle the first 2MB of a file. Files
+            over 2MB will be truncated prematurely. *note*: this should be
+            enough for the mirrors file.
+
+        :param finished: A :class:`~twisted.internet.defer.Deferred` which
+            will fire when another portion of the download is complete.
+        """
+        self.finished = finished
+        self.remaining = 1024 * 1024 * 2
+        self.fh = file
+
+    def dataReceived(self, bytes):
+        """Write a portion of the download with ``bytes`` size to disk."""
+        if self.remaining:
+            display = bytes[:self.remaining]
+            self.fh.write(display)
+            self.fh.flush()
+            self.remaining -= len(display)
+
+    def connectionLost(self, reason):
+        """Called when the download is complete."""
+        logging.info('Finished receiving mirrors list: %s'
+                     % reason.getErrorMessage())
+        self.finished.callback(None)
+
+
+# Based in tor2web.utils.ssl (Tor2web)
+class HTTPSVerifyingContextFactory(ssl.ClientContextFactory):
+    def __init__(self, cn):
+        self.cn = cn
+        #
+        # From https://docs.python.org/2/library/ssl.html#ssl-security
+        #
+        # "SSL versions 2 and 3 are considered insecure and are therefore
+        # dangerous to use. If you want maximum compatibility between clients
+        # and servers, it is recommended to use PROTOCOL_SSLv23 as the protocol
+        # version and then disable SSLv2 and SSLv3 explicitly"
+        #
+        self.method = SSL.SSLv23_METHOD
+
+    def getContext(self, hostname, port):
+        """Get this connection's OpenSSL context.
+
+        We disable SSLv2 and SSLv3. We also check the certificate received
+        is the one we expect (using the "common name").
+
+        """
+        ctx = self._contextFactory(self.method)
+        ctx.set_options(SSL.OP_NO_SSLv2)
+        ctx.set_options(SSL.OP_NO_SSLv3)
+        ctx.set_verify(
+            SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
+            self.verifyCN
+        )
+
+        return ctx
+
+    def verifyCN(self, connection, x509, errno, depth, preverifyOK):
+        # DEBUG: print "%s == %s ?" % (self.cn, x509.get_subject().commonName)
+
+        # Somehow, if I don't set this to true, the verifyCN doesn't go
+        # down in the chain, I don't know if this is OK
+        verify = True
+        if depth == 0:
+            if self.cn == x509.get_subject().commonName:
+                verify = True
+            else:
+                verify = False
+        return verify
+
+
+# Based in get-tor-exits (BridgeDB)
+def handle(failure):
+    """Handle a **failure**."""
+    if failure.type == ConnectionRefusedError:
+        logging.error("Couldn't download file; connection was refused.")
+    elif failure.type == DNSLookupError:
+        logging.error("Couldn't download file; domain resolution failed.")
+    elif failure.type == TimeoutError:
+        logging.error("Couldn't download file; connection timed out.")
+    else:
+        logging.error("Couldn't download file.")
+
+    print "Couldn't download file. Check the log."
+    os._exit(-1)
+
+
+# Taken from get-tor-exits (BridgeDB)
+def writeToFile(response, filename):
+    """Write requested content to filename."""
+    finished = defer.Deferred()
+    response.deliverBody(FileWriter(finished, filename))
+    return finished
+
+
+def is_json(my_json):
+    """Check if json generated is valid."""
+    try:
+        json_object = json.loads(my_json)
+    except ValueError, e:
+        return False
+    return True
+
+
+def add_entry(mirrors, columns, elements):
+    """Add entry to mirrors list."""
+    entry = {}
+    count = 0
+    for e in elements:
+        e = e.replace("\n", '')
+        entry[columns[count]] = e
+        count = count + 1
+
+    mirrors.append(entry)
+
+
+def add_mirror(file, entry, proto):
+    """Add mirror to mirrors list."""
+    file.write(
+        "%s - by %s (%s)\n" % (
+            entry[proto],
+            entry['orgName'],
+            entry['subRegion'],
+        )
+    )
+
+
+def main():
+    """Script to get the list of tpo's mirrors from tpo and adapt it to
+    be used by GetTor.
+
+    Usage: python2.7 get_mirrors.py [-h] [--proto protocol]
+
+    By default, the protocol is 'https'. Possible values of protcol are:
+
+    http, https, rsync, ftp, onion, http-dist, https-dist, rsync-dist.
+
+    """
+    parser = argparse.ArgumentParser(
+        description="Utility to download tpo's mirrors and make it usable\
+        by GetTor."
+    )
+
+    parser.add_argument(
+        '-p', '--proto',
+        default='https',
+        help='Protocol filter. Possible values: http, https, rsync, ftp, onion\
+        http-dist, https-dist, rsync-dist. Default to https.')
+
+    args = parser.parse_args()
+    p = args.proto
+
+    gettor_path = '/path/to/gettor/'
+    csv_path = os.path.join(gettor_path, 'tor-mirrors.csv')
+    json_path = os.path.join(gettor_path, 'tor-mirrors')
+    mirrors_list = os.path.join(gettor_path, 'mirrors-list.txt')
+
+    # Load tpo certificate and extract common name, we'll later compare this
+    # with the certificate sent by tpo to check we're really taltking to it
+    try:
+        data = open(CERT_TPO).read()
+        x509 = crypto.load_certificate(crypto.FILETYPE_PEM, data)
+        cn_tpo = x509.get_subject().commonName
+    except Exception as e:
+        logging.error("Error with certificate: %s" % str(e))
+        return
+
+    # While we wait the json of mirrors to be implemented in tpo, we need
+    # to download the csv file and transform it to json
+
+    # The code below is based in get-tor-exits script from BridgeDB and
+    # the tor2web.utils.ssl module from Tor2web
+    url = 'https://www.torproject.org/include/tor-mirrors.csv'
+
+    try:
+        fh = open(csv_path, 'w')
+    except IOError as e:
+        logging.error("Could not open %s" % csv_path)
+        return
+
+    logging.info("Requesting %s..." % url)
+
+    # If certificate don't match an exception will be raised
+    # this is my first experience with twisted, maybe I'll learn to handle
+    # this better some time in the future...
+    contextFactory = HTTPSVerifyingContextFactory(cn_tpo)
+    agent = client.Agent(reactor, contextFactory)
+    d = agent.request("GET", url)
+    d.addCallback(writeToFile, fh)
+    d.addErrback(handle)
+    d.addCallbacks(log.msg, log.err)
+
+    if not reactor.running:
+        d.addCallback(lambda ignored: reactor.stop())
+        reactor.run()
+
+    logging.info("File downloaded!")
+
+    # Now transform it to json -- I couldn't find out how to use a
+    # two-character delimiter with the csv package, so I decided to handle
+    # the csv data by hand. We are doing this until #16601 gets deployed.
+    # https://trac.torproject.org/projects/tor/ticket/16601
+
+    # Code below is based in update-mirrors-json.py script from tpo
+
+    # These are the names of each column e.g. adminContact
+    columns = []
+    # List of mirrors to be built
+    mirrors = []
+
+    logging.info("Transforming csv data into json...")
+    logging.info("Getting data from csv")
+    try:
+        with codecs.open(csv_path, "rb", "utf-8") as csvfile:
+            for line in csvfile:
+                elements = line.split(", ")
+                # first entry have the names of the columns
+                if not columns:
+                    columns = elements
+                else:
+                    add_entry(mirrors, columns, elements)
+    except IOError as e:
+        logging.error("Couldn't read csv file: %s" % str(e))
+        return
+
+    logging.info("Creating json")
+    if is_json(json.dumps(mirrors)):
+        try:
+            with codecs.open(json_path, "w", "utf-8") as jsonfile:
+                # Make pretty json
+                json.dump(
+                    mirrors,
+                    jsonfile,
+                    sort_keys=True,
+                    indent=4,
+                    separators=(',', ': '),
+                    encoding="utf-8",
+                )
+        except IOError as e:
+            logging.error("Couldn't write json: %s" % str(e))
+            return
+    else:
+        logging.error("Invalid json file")
+        return
+
+    # Now make the mirrors list to be used by GetTor
+    logging.info("Reading json")
+    try:
+        mirrors_json = codecs.open(json_path, "rb", "utf-8")
+        mirrors = json.load(mirrors_json)
+    except IOError as e:
+        logging.error("Couldn't open %s" % json_path)
+        return
+
+    logging.info("Creating new list with protocol: %s" % p)
+    try:
+        list = codecs.open(mirrors_list, "w", "utf-8")
+        for entry in mirrors:
+            if args.proto is not 'all':
+                for e in entry:
+                    if e == PROTOS[p] and entry[PROTOS[p]]:
+                        add_mirror(list, entry, PROTOS[p])
+            else:
+                for k, v in PROTOS:
+                    if entry[v]:
+                        add_mirror(list, entry, v)
+        logging.info("List created: %s" % mirrors_list)
+    except IOError as e:
+        logging.error("Couldn't open %s" % mirrors_list)
+        return
+
+if __name__ == "__main__":
+    logging_format = utils.get_logging_format()
+    logging.basicConfig(
+        filename='/path/to/gettor/log/get-mirrors.log',
+        format=logging_format,
+        datefmt="%Y-%m-%d %H:%M:%S",
+        level=logging.INFO
+    )
+    logging.info("Started")
+    main()
+    logging.info("Finished")
diff --git a/gettor/smtp.py b/gettor/smtp.py
index 655b5df..4db3ac7 100644
--- a/gettor/smtp.py
+++ b/gettor/smtp.py
@@ -22,7 +22,10 @@ import smtplib
 import datetime
 import ConfigParser
 
+from email import Encoders
+from email.MIMEBase import MIMEBase
 from email.mime.text import MIMEText
+from email.MIMEMultipart import MIMEMultipart
 
 import core
 import utils
@@ -69,74 +72,60 @@ class SMTP(object):
         :param: cfg (string) path of the configuration file.
 
         """
-        # define a set of default values
-        DEFAULT_CONFIG_FILE = 'smtp.cfg'
-
-        logging.basicConfig(format='[%(levelname)s] %(asctime)s - %(message)s',
-                            datefmt="%Y-%m-%d %H:%M:%S")
-        log = logging.getLogger(__name__)
+        default_cfg = 'smtp.cfg'
         config = ConfigParser.ConfigParser()
 
         if cfg is None or not os.path.isfile(cfg):
             cfg = DEFAULT_CONFIG_FILE
 
-        config.read(cfg)
+        try:
+            with open(cfg) as f:
+                config.readfp(f)
+        except IOError:
+            raise ConfigError("File %s not found!" % cfg)
 
         try:
             self.our_domain = config.get('general', 'our_domain')
-        except ConfigParser.Error as e:
-            raise ConfigError("Couldn't read 'our_domain' from 'general'")
+            self.mirrors = config.get('general', 'mirrors')
+            self.i18ndir = config.get('i18n', 'dir')
 
-        try:
-            core_cfg = config.get('general', 'core_cfg')
-        except ConfigParser.Error as e:
-            raise ConfigError("Couldn't read 'core_cfg' from 'general'")
+            logdir = config.get('log', 'dir')
+            logfile = os.path.join(logdir, 'smtp.log')
+            loglevel = config.get('log', 'level')
 
-        try:
             blacklist_cfg = config.get('blacklist', 'cfg')
             self.bl = blacklist.Blacklist(blacklist_cfg)
-        except ConfigParser.Error as e:
-            raise ConfigError("Couldn't read 'cfg' from 'blacklist'")
-
-        try:
             self.bl_max_req = config.get('blacklist', 'max_requests')
             self.bl_max_req = int(self.bl_max_req)
-        except ConfigParser.Error as e:
-            raise ConfigError("Couldn't read 'max_requests' from 'blacklist'")
-
-        try:
             self.bl_wait_time = config.get('blacklist', 'wait_time')
             self.bl_wait_time = int(self.bl_wait_time)
-        except ConfigParser.Error as e:
-            raise ConfigError("Couldn't read 'wait_time' from 'blacklist'")
 
-        try:
-            self.i18ndir = config.get('i18n', 'dir')
-        except ConfigParser.Error as e:
-            raise ConfigError("Couldn't read 'dir' from 'i18n'")
+            core_cfg = config.get('general', 'core_cfg')
+            self.core = core.Core(core_cfg)
 
-        try:
-            logdir = config.get('log', 'dir')
-            logfile = os.path.join(logdir, 'smtp.log')
         except ConfigParser.Error as e:
-            raise ConfigError("Couldn't read 'dir' from 'log'")
+            raise ConfigError("Configuration error: %s" % str(e))
+        except blacklist.ConfigError as e:
+            raise InternalError("Blacklist error: %s" % str(e))
+        except core.ConfigError as e:
+            raise InternalError("Core error: %s" % str(e))
 
-        try:
-            loglevel = config.get('log', 'level')
-        except ConfigParser.Error as e:
-            raise ConfigurationError("Couldn't read 'level' from 'log'")
+        # logging
+        log = logging.getLogger(__name__)
 
-        # use default values
-        self.core = core.Core(core_cfg)
+        logging_format = utils.get_logging_format()
+        date_format = utils.get_date_format()
+        formatter = logging.Formatter(logging_format, date_format)
 
-        # establish log level and redirect to log file
-        log.info('Redirecting logging to %s' % logfile)
+        log.info('Redirecting SMTP logging to %s' % logfile)
         logfileh = logging.FileHandler(logfile, mode='a+')
+        logfileh.setFormatter(formatter)
         logfileh.setLevel(logging.getLevelName(loglevel))
         log.addHandler(logfileh)
 
         # stop logging on stdout from now on
         log.propagate = False
+        self.log = log
 
     def _is_blacklisted(self, addr):
         """Check if a user is blacklisted.
@@ -148,8 +137,9 @@ class SMTP(object):
         """
 
         try:
-            self.bl.is_blacklisted(addr, 'SMTP', self.bl_max_req,
-                                   self.bl_wait_time)
+            self.bl.is_blacklisted(
+                addr, 'SMTP', self.bl_max_req, self.bl_wait_time
+            )
             return False
         except blacklist.BlacklistError as e:
             return True
@@ -228,11 +218,14 @@ class SMTP(object):
 
         """
         # obtain the content in the proper language
-        t = gettext.translation(lc, self.i18ndir, languages=[lc])
-        _ = t.ugettext
+        try:
+            t = gettext.translation(lc, self.i18ndir, languages=[lc])
+            _ = t.ugettext
 
-        msgstr = _(msgid)
-        return msgstr
+            msgstr = _(msgid)
+            return msgstr
+        except IOError as e:
+            raise ConfigError("%s" % str(e))
 
     def _parse_email(self, msg, addr):
         """Parse the email received.
@@ -270,17 +263,23 @@ class SMTP(object):
         # core knows what OS are supported
         supported_os = self.core.get_supported_os()
 
-        # if no OS is found, help request by default
-        found_os = False
+        # search for OS or mirrors request
+        # if nothing is found, help by default
+        found_request = False
         lines = msg.split(' ')
         for word in lines:
-            if not found_os:
+            if not found_request:
+                # OS first
                 for os in supported_os:
                     if re.match(os, word, re.IGNORECASE):
                         req['os'] = os
                         req['type'] = 'links'
-                        found_os = True
+                        found_request = True
                         break
+                # mirrors
+                if re.match("mirrors?", word, re.IGNORECASE):
+                    req['type'] = 'mirrors'
+                    found_request = True
             else:
                 break
         return req
@@ -298,15 +297,18 @@ class SMTP(object):
         :return: (object) the email object.
 
         """
-        email_obj = MIMEText(msg)
+        email_obj = MIMEMultipart()
         email_obj.set_charset("utf-8")
         email_obj['Subject'] = subject
         email_obj['From'] = from_addr
         email_obj['To'] = to_addr
 
+        msg_attach = MIMEText(msg, 'text')
+        email_obj.attach(msg_attach)
+
         return email_obj
 
-    def _send_email(self, from_addr, to_addr, subject, msg):
+    def _send_email(self, from_addr, to_addr, subject, msg, attach=None):
         """Send an email.
 
         Take a 'from' and 'to' addresses, a subject and the content, creates
@@ -316,10 +318,27 @@ class SMTP(object):
         :param: to_addr (string) the address of the recipient.
         :param: subject (string) the subject of the email.
         :param: msg (string) the content of the email.
+        :param: attach (string) the path of the mirrors list.
 
         """
         email_obj = self._create_email(from_addr, to_addr, subject, msg)
 
+        if(attach):
+            # for now, the only email with attachment is the one for mirrors
+            try:
+                part = MIMEBase('application', "octet-stream")
+                part.set_payload(open(attach, "rb").read())
+                Encoders.encode_base64(part)
+
+                part.add_header(
+                    'Content-Disposition',
+                    'attachment; filename="mirrors.txt"'
+                )
+
+                email_obj.attach(part)
+            except IOError as e:
+                raise SendEmailError('Error with mirrors: %s' % str(e))
+
         try:
             s = smtplib.SMTP("localhost")
             s.sendmail(from_addr, to_addr, email_obj.as_string())
@@ -341,17 +360,25 @@ class SMTP(object):
 
         """
         # obtain the content in the proper language and send it
-        links_subject = self._get_msg('links_subject', lc)
-        links_msg = self._get_msg('links_msg', lc)
-        links_msg = links_msg % (os, lc, links)
-
         try:
-            self._send_email(from_addr, to_addr, links_subject, links_msg)
+            links_subject = self._get_msg('links_subject', lc)
+            links_msg = self._get_msg('links_msg', lc)
+            links_msg = links_msg % (os, lc, links)
+
+            self._send_email(
+                from_addr,
+                to_addr,
+                links_subject,
+                links_msg,
+                None
+            )
+        except ConfigError as e:
+            raise InternalError("Error while getting message %s" % str(e))
         except SendEmailError as e:
             raise InternalError("Error while sending links message")
 
-    def _send_help(self, lc, from_addr, to_addr):
-        """Send help message.
+    def _send_mirrors(self, lc, from_addr, to_addr):
+        """Send mirrors message.
 
         Get the message in the proper language (according to the locale),
         replace variables (if any) and send the email.
@@ -362,37 +389,39 @@ class SMTP(object):
 
         """
         # obtain the content in the proper language and send it
-        help_subject = self._get_msg('help_subject', lc)
-        help_msg = self._get_msg('help_msg', lc)
-
         try:
-            self._send_email(from_addr, to_addr, help_subject, help_msg)
+            mirrors_subject = self._get_msg('mirrors_subject', lc)
+            mirrors_msg = self._get_msg('mirrors_msg', lc)
+
+            self._send_email(
+                from_addr, to_addr, mirrors_subject, mirrors_msg, self.mirrors
+            )
+        except ConfigError as e:
+            raise InternalError("Error while getting message %s" % str(e))
         except SendEmailError as e:
-            raise InternalError("Error while sending help message")
+            raise InternalError("Error while sending mirrors message")
 
-    def _send_unsupported_lc(self, lc, os, from_addr, to_addr):
-        """Send unsupported locale message.
+    def _send_help(self, lc, from_addr, to_addr):
+        """Send help message.
 
-        Get the message for unsupported locale in english, replace variables
-        (if any) and send the email.
+        Get the message in the proper language (according to the locale),
+        replace variables (if any) and send the email.
 
         :param: lc (string) the locale.
-        :param: os (string) the operating system.
         :param: from_addr (string) the address of the sender.
         :param: to_addr (string) the address of the recipient.
 
         """
-
-        # obtain the content in english and send it
-        un_lc_subject = self._get_msg('unsupported_lc_subject', 'en')
-        un_lc_msg = self._get_msg('unsupported_lc_msg', 'en')
-        un_lc_msg = un_lc_msg % lc
-
+        # obtain the content in the proper language and send it
         try:
-            self._send_email(from_addr, to_addr, un_lc_subject, un_lc_msg)
+            help_subject = self._get_msg('help_subject', lc)
+            help_msg = self._get_msg('help_msg', lc)
 
+            self._send_email(from_addr, to_addr, help_subject, help_msg, None)
+        except ConfigError as e:
+            raise InternalError("Error while getting message %s" % str(e))
         except SendEmailError as e:
-            raise InternalError("Error while sending unsupported lc message")
+            raise InternalError("Error while sending help message")
 
     def process_email(self, raw_msg):
         """Process the email received.
@@ -411,6 +440,7 @@ class SMTP(object):
                 links to the Core module.
 
         """
+        self.log.debug("Processing email")
         parsed_msg = email.message_from_string(raw_msg)
         content = self._get_content(parsed_msg)
         from_addr = parsed_msg['From']
@@ -423,71 +453,96 @@ class SMTP(object):
             # two ways for a request to be bogus: address malformed or
             # blacklisted
             try:
+                self.log.debug("Normalizing address...")
                 norm_from_addr = self._get_normalized_address(from_addr)
             except AddressError as e:
                 status = 'malformed'
                 bogus_request = True
+                self.log.debug("Address is malformed!")
                 # it might be interesting to know what triggered this
                 # we are not logging this for now
                 # logfile = self._log_email('malformed', content)
 
             if norm_from_addr:
+                self.log.debug("Anonymizing address...")
                 anon_addr = utils.get_sha256(norm_from_addr)
 
                 if self._is_blacklisted(anon_addr):
                     status = 'blacklisted'
                     bogus_request = True
+                    self.log.debug("Address is blacklisted!")
                     # it might be interesting to know extra info
                     # we are not logging this for now
                     # logfile = self._log_email(anon_addr, content)
 
             if not bogus_request:
                 # try to figure out what the user is asking
+                self.log.debug("Request seems legit; parsing it...")
                 req = self._parse_email(content, to_addr)
 
                 # our address should have the locale requested
                 our_addr = "gettor+%s@%s" % (req['lc'], self.our_domain)
+                self.log.debug("Replying from %s" % our_addr)
 
-                # two possible options: asking for help or for the links
+                # possible options: help, links, mirrors
                 if req['type'] == 'help':
+                    self.log.debug("Type of request: help")
+                    self.log.debug("Trying to send help...")
                     # make sure we can send emails
                     try:
                         self._send_help(req['lc'], our_addr, norm_from_addr)
+                        status = 'success'
                     except SendEmailError as e:
                         status = 'internal_error'
+                        self.log.debug("FAILED: %s" % str(e))
                         raise InternalError("Something's wrong with the SMTP "
                                             "server: %s" % str(e))
 
-                elif req['type'] == 'links':
+                elif req['type'] == 'mirrors':
+                    self.log.debug("Type of request: mirrors")
+                    self.log.debug("Trying to send the mirrors...")
+                    # make sure we can send emails
                     try:
-                        links = self.core.get_links('SMTP', req['os'],
-                                                    req['lc'])
-
-                    except core.UnsupportedLocaleError as e:
-                        # if we got here, the address of the sender should
-                        # be valid so we send him/her a message about the
-                        # unsupported locale
-                        status = 'unsupported_lc'
-                        self._send_unsupported_lc(req['lc'], req['os'],
-                                                  our_addr, norm_from_addr)
-                        return
+                        self._send_mirrors(req['lc'], our_addr, norm_from_addr)
+                        status = 'success'
+                    except SendEmailError as e:
+                        status = 'internal_error'
+                        self.log.debug("FAILED: %s" % str(e))
+                        raise SendEmailError("Something's wrong with the SMTP "
+                                             "server: %s" % str(e))
 
+                elif req['type'] == 'links':
+                    self.log.debug("Type of request: links")
+                    self.log.debug("Trying to obtain the links...")
+                    try:
+                        links = self.core.get_links(
+                            'SMTP', req['os'], req['lc']
+                        )
                     # if core fails, we fail too
                     except (core.InternalError, core.ConfigurationError) as e:
                         status = 'core_error'
+                        self.log.debug("FAILED: %s" % str(e))
                         # something went wrong with the core
                         raise InternalError("Error obtaining the links")
 
                     # make sure we can send emails
+                    self.log.debug("Trying to send the links...")
                     try:
                         self._send_links(links, req['lc'], req['os'], our_addr,
                                          norm_from_addr)
+                        status = 'success'
                     except SendEmailError as e:
                         status = 'internal_error'
+                        self.log.debug("FAILED: %s" % str(e))
                         raise SendEmailError("Something's wrong with the SMTP "
                                              "server: %s" % str(e))
-                status = 'success'
+                self.log.debug("Mail sent!")
         finally:
             # keep stats
             if req:
-                self.core.add_request_to_db()
+                self.log.debug("Adding request to database... ")
+                try:
+                    self.core.add_request_to_db()
+                    self.log.debug("Request added")
+                except InternalError as e:
+                    self.log.debug("FAILED: %s" % str(e))
diff --git a/lang/smtp/i18n/en/LC_MESSAGES/en.po b/lang/smtp/i18n/en/LC_MESSAGES/en.po
index 906dbb8..dcb2e35 100644
--- a/lang/smtp/i18n/en/LC_MESSAGES/en.po
+++ b/lang/smtp/i18n/en/LC_MESSAGES/en.po
@@ -4,6 +4,10 @@ domain "en"
 msgid "links_subject"
 msgstr "[GetTor] Links for your request"
 
+#: Mirrors subject
+msgid "mirrors_subject"
+msgstr "[GetTor] Mirrors"
+
 #: Help subject
 msgid "help_subject"
 msgstr "[GetTor] Help"
@@ -32,6 +36,21 @@ network, or need to talk to a human, please contact our support team at:\n\
 We are ready to answer your queries in English, Farsi, Chinese, Arabic,\n\
 French and Spanish."
 
+#: Mirrors message
+msgid "mirrors_msg"
+msgstr "Hello there! this is the 'GetTor' robot.\n\
+\n\
+Thank you for your request. Attached to this email you will find\n\
+an updated list of mirrors of Tor Project's website.\n\
+\n\
+Still need help? If you have any questions, trouble connecting to Tor\n\
+network, or need to talk to a human, please contact our support team at:\n\
+\n\
+    help@xxxxxxxxxxxxxxxxx\n\
+\n\
+We are ready to answer your queries in English, Farsi, Chinese, Arabic,\n\
+French and Spanish."
+
 #: Help message
 msgid "help_msg"
 msgstr "Hello there! this is the 'GetTor' robot.\n\
diff --git a/mirrors-list.txt b/mirrors-list.txt
new file mode 100644
index 0000000..311a3a5
--- /dev/null
+++ b/mirrors-list.txt
@@ -0,0 +1,58 @@
+https://tor-mirror.de/ - by tor-mirror.de (Germany)
+https://tor.blingblingsquad.net/ - by [[:bbs:]] (Germany)
+https://tor.li/ - by Tor Supporter (Estonia)
+https://tormirror.tb-itf-tor.de - by TB-ITF (Germany)
+https://tormirror.piratenpartei-bayern.de - by Piratenpartei Bayern (Germany)
+https://tor.hoi-polloi.org/ - by Tor Supporter (Germany)
+https://tor.fodt.it - by FoDT.it (Austria)
+https://tor.zilog.es/ - by Tor Supporter (Spain)
+https://199.175.55.215/ - by Tor Supporter (United States)
+https://2607:8b00:2::6258:5c9/ - by Tor Supporter (United States)
+https://tor.spline.inf.fu-berlin.de/ - by spline (Germany)
+https://fbnaia.homelinux.net/torproject/ - by Tor Supporter (Mexico)
+https://mirror.unicorncloud.org/torproject.org/ - by UnicornCloud.org (Germany)
+https://tor.hackthissite.org/ - by HackThisSite.org (United States)
+https://tor.crazyhaze.de/ - by crazyhaze.de (Germany)
+https://creep.im/tor - by Soviet Anonymous (Russia)
+https://www.torservers.net/mirrors/torproject.org/ - by torservers (Germany)
+https://mirror.torland.me/torproject.org/ - by torland (United Kingdom)
+https://tor.myrl.net/ - by myRL.net (Iceland)
+https://torprojekt.userzap.de - by Userzap (Germany)
+https://tor.stalkr.net/ - by stalkr.net (France)
+https://tor-mirror.cyberguerrilla.org - by cYbergueRrilLa AnonyMous NeXus (Germany)
+https://torproject.gtor.org/ - by Gtor (Germany)
+https://torproject.nexiom.net - by SDL (United States)
+https://mirror.velcommuta.de/tor/ - by Tor Supporter (Germany)
+https://tor.eff.org - by EFF (United States)
+https://tor.void.gr - by Tor Supporter (Greece)
+https://reichster.de/mirrors/torproject.org - by Tor Supporter (Germany)
+https://tor.miglix.eu - by Tor Supporter (Germany)
+https://tor.fr33tux.org - by Tor Supporter (France)
+https://tor.iv.net.pl - by Sebastian M. Bobrecki (Poland)
+https://tor.static.lu - by d0wn.biz (France)
+https://www.moparisthebest.com/tor/ - by moparisthebest.com (Germany)
+https://ayo.tl/tor/ - by Tor Supporter (Iceland)
+https://tor.pajonzeck.de/ - by ITsn (Germany)
+https://tor.ludikovsky.name/ - by Tor Supporter (Austria)
+https://tor.nuclear-weapons.net - by Setec Administrator (Texas)
+https://tor.calyxinstitute.org - by The Calyx Institute (United States)
+https://mirror2.babylon.network/torproject/ - by Babylon Network (The Netherlands)
+https://mirror0.babylon.network/torproject/ - by Babylon Network (France)
+https://mirror1.babylon.network/torproject/ - by Babylon Network (France)
+https://tor.ybti.net/ - by Tor Supporter (Germany)
+https://tor.0x3d.lu/ - by 0x3d.lu (Germany)
+https://www.unicorncloud.org/public/torproject.org/ - by UnicornCloud.org (Favoriten)
+https://108.248.87.242/ - by intfxdx.com (United States)
+https://mirrors.samwhited.net/tor - by SamWhited.com (GA)
+https://www.jessevictors.com/secureMirrors/torproject.org/ - by Department of CS at USU (United States)
+https://mirror.ntzk.de/torproject.org/ - by Netzkonstrukt Berlin (Germany)
+https://www.eprci.com/tor/ - by EPRCI (NH)
+https://tor-mirror.kura.io/ - by KURA IO LIMITED (Netherlands)
+https://www.it-sicherheitschannel.de/ - by PW (Germany)
+https://tor.freedom.press - by Freedom of the Press Foundation (US)
+https://tor.hoovism.com/ - by Matthew Hoover (NJ)
+https://torproject.urown.net/ - by urown.net (Switzerland)
+https://sela.io/mirrors/torproject.org/ - by sela Internet (Germany)
+https://services.justaguy.pw/ - by Justaguy (The Netherlands)
+https://tor.thecthulhu.com/ - by TheCthulhu (The Netherlands)
+https://tor.ccc.de - by CCC (The Netherlands)
diff --git a/smtp.cfg b/smtp.cfg
index 671c090..a7e9f7a 100644
--- a/smtp.cfg
+++ b/smtp.cfg
@@ -1,5 +1,6 @@
 [general]
 basedir: /path/to/gettor/smtp
+mirrors: /path/to/mirrors
 our_domain: torproject.org
 core_cfg: /path/to/core.cfg
 
@@ -13,4 +14,4 @@ dir: /path/to/i18n/
 
 [log]
 level: DEBUG
-dir: /path/to/log/
\ No newline at end of file
+dir: /path/to/log/
diff --git a/tor-mirrors b/tor-mirrors
new file mode 100644
index 0000000..5dbd421
--- /dev/null
+++ b/tor-mirrors
@@ -0,0 +1,2187 @@
+[
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.loritsu.com/dist/";,
+        "httpWebsiteMirror": "http://tor.loritsu.com/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.adamas.ai/dist/";,
+        "httpWebsiteMirror": "http://torproject.adamas.ai/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "LU",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "LU",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Luxemborg",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torua.reactor-xg.kiev.ua/dist/";,
+        "httpWebsiteMirror": "http://torua.reactor-xg.kiev.ua/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "UA",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "UA",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Ukraine",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://37.187.0.127/tormirror/dist/";,
+        "httpWebsiteMirror": "http://37.187.0.127/tormirror/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.minibofh.org/dist/";,
+        "httpWebsiteMirror": "http://tor.minibofh.org/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.mage.me.uk/dist/";,
+        "httpWebsiteMirror": "http://tor.mage.me.uk/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "UK",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "UK",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United Kingdom",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "nsane2307 eml cc",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor-mirror.de/dist/";,
+        "httpWebsiteMirror": "http://tor-mirror.de/";,
+        "httpsDistMirror": "https://tor-mirror.de/dist/";,
+        "httpsWebsiteMirror": "https://tor-mirror.de/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "tor-mirror.de",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "citizen428 AT gmail DOT com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.blingblingsquad.net/dist/";,
+        "httpWebsiteMirror": "http://tor.blingblingsquad.net/";,
+        "httpsDistMirror": "https://tor.blingblingsquad.net/dist/";,
+        "httpsWebsiteMirror": "https://tor.blingblingsquad.net/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "[[:bbs:]]",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.nwlinux.us/dist/";,
+        "httpWebsiteMirror": "http://torproject.nwlinux.us/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "NW Linux",
+        "region": "US",
+        "rsyncDistMirror": "rsync://nwlinux.us/tor-dist",
+        "rsyncWebsiteMirror": "rsync://nwlinux.us/tor-web",
+        "subRegion": "WA",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "",
+        "httpWebsiteMirror": "",
+        "httpsDistMirror": "https://www.coevoet.nl/tor/dist/";,
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "NL",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "NL",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "The Netherlands",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.taiga-san.net/dist/";,
+        "httpWebsiteMirror": "http://tor.taiga-san.net/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "LazyTiger",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.li/dist/";,
+        "httpWebsiteMirror": "http://tor.li/";,
+        "httpsDistMirror": "https://tor.li/dist/";,
+        "httpsWebsiteMirror": "https://tor.li/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "EE",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "EE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Estonia",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.externenpr\u00fcfung-nichtsch\u00fcler.de/dist/";,
+        "httpWebsiteMirror": "http://tor.externenpr\u00fcfung-nichtsch\u00fcler.de/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "Tor Supporter",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "mirror-service@xxxxxxxxxxxxx",
+        "ftpWebsiteMirror": "ftp://mirror.netcologne.de/torproject.org/";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror.netcologne.de/torproject.org/dist";,
+        "httpWebsiteMirror": "http://mirror.netcologne.de/torproject.org";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "NetCologne GmbH",
+        "region": "",
+        "rsyncDistMirror": "rsync://mirror.netcologne.de/torproject.org/dist",
+        "rsyncWebsiteMirror": "rsync://mirror.netcologne.de/torproject.org",
+        "subRegion": "NRW",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "admin AT netgull DOT com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://www.netgull.com/torproject/";,
+        "httpWebsiteMirror": "",
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "NetGull",
+        "region": "North America",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "mirrors[at]ip-connect[dot]vn[dot]ua",
+        "ftpWebsiteMirror": "ftp://torproject.ip-connect.vn.ua/mirror/torproject/";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.ip-connect.vn.ua/dist";,
+        "httpWebsiteMirror": "http://torproject.ip-connect.vn.ua";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "UA",
+        "loadBalanced": "Yes",
+        "orgName": "IP-Connect LLC",
+        "region": "",
+        "rsyncDistMirror": "rsync://torproject.ip-connect.vn.ua/torproject/dist",
+        "rsyncWebsiteMirror": "rsync://torproject.ip-connect.vn.ua/torproject",
+        "subRegion": "VN",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "torsupport AT tb-itf DOT de",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tormirror.tb-itf-tor.de/dist/";,
+        "httpWebsiteMirror": "http://tormirror.tb-itf-tor.de";,
+        "httpsDistMirror": "https://tormirror.tb-itf-tor.de/dist/";,
+        "httpsWebsiteMirror": "https://tormirror.tb-itf-tor.de";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "TB-ITF",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "admin at koreswatanabe dottnet",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor-relay.koreswatanabe.net/dist/";,
+        "httpWebsiteMirror": "http://tor-relay.koreswatanabe.net";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "RO",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "RO",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Romania",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "calebcenter@xxxxxxxx",
+        "ftpWebsiteMirror": "ftp://ftp.calebxu.tk";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.calebxu.tk/dist";,
+        "httpWebsiteMirror": "http://tor.calebxu.tk";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "NO",
+        "orgName": "calebxu.tk",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "rsync://calebxu.tk/tor",
+        "subRegion": "United States",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "maki@xxxxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.mirrors.maki-chan.de/dist/";,
+        "httpWebsiteMirror": "http://tor.mirrors.maki-chan.de/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "Maki Hoshisawa",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Sat Aug 23 08:09:07 2014"
+    },
+    {
+        "adminContact": "info AT zentrum-der-gesundheit DOT de",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.idnr.ws/dist/";,
+        "httpWebsiteMirror": "http://tor.idnr.ws/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DK",
+        "loadBalanced": "No",
+        "orgName": "Zentrum der Gesundheit",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Denmark",
+        "updateDate\n": "Tue Sep  2 11:16:00 2014"
+    },
+    {
+        "adminContact": "info /AT enn /DOT lu",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://btn6gqzqevlhoryd.onion";,
+        "httpDistMirror": "http://torproject.lu/dist/";,
+        "httpWebsiteMirror": "http://torproject.lu/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "IS",
+        "loadBalanced": "No",
+        "orgName": "Frenn vun der Enn A.S.B.L.",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Iceland",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Piratenpartei Bayern",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tormirror.piratenpartei-bayern.de/dist/";,
+        "httpWebsiteMirror": "http://tormirror.piratenpartei-bayern.de";,
+        "httpsDistMirror": "https://tormirror.piratenpartei-bayern.de/dist/";,
+        "httpsWebsiteMirror": "https://tormirror.piratenpartei-bayern.de";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "Piratenpartei Bayern",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.hoi-polloi.org/dist/";,
+        "httpWebsiteMirror": "http://tor.hoi-polloi.org";,
+        "httpsDistMirror": "https://tor.hoi-polloi.org/dist/";,
+        "httpsWebsiteMirror": "https://tor.hoi-polloi.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "Tor Supporter",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor@xxxxxxx // FoDT.it Webteam",
+        "ftpWebsiteMirror": "ftp://ftp.fodt.it/pub/mirrors/torproject.org/";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.fodt.it/dist/";,
+        "httpWebsiteMirror": "http://tor.fodt.it";,
+        "httpsDistMirror": "https://tor.fodt.it/dist/";,
+        "httpsWebsiteMirror": "https://tor.fodt.it";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "AT",
+        "loadBalanced": "No",
+        "orgName": "FoDT.it",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Austria",
+        "updateDate\n": "Mon Aug 25 10:19:07 2014"
+    },
+    {
+        "adminContact": "http://www.multinet.no";,
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.multinet.no/dist/";,
+        "httpWebsiteMirror": "http://tor.multinet.no/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "NO",
+        "loadBalanced": "No",
+        "orgName": "MultiNet AS",
+        "region": "Trondheim",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Trondheim",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "haskell at gmx.es",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.zilog.es/dist/";,
+        "httpWebsiteMirror": "http://tor.zilog.es/";,
+        "httpsDistMirror": "https://tor.zilog.es/dist/";,
+        "httpsWebsiteMirror": "https://tor.zilog.es/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "ES",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Spain",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://199.175.55.215/dist/";,
+        "httpWebsiteMirror": "http://199.175.55.215/";,
+        "httpsDistMirror": "https://199.175.55.215/dist/";,
+        "httpsWebsiteMirror": "https://199.175.55.215/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://2607:8b00:2::6258:5c9/dist/";,
+        "httpWebsiteMirror": "http://2607:8b00:2::6258:5c9/";,
+        "httpsDistMirror": "https://2607:8b00:2::6258:5c9/dist/";,
+        "httpsWebsiteMirror": "https://2607:8b00:2::6258:5c9/";,
+        "ipv4": "FALSE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Tue Jan 20 16:17:52 2015"
+    },
+    {
+        "adminContact": "margus.random at mail.ee",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://cyberside.net.ee/tor/";,
+        "httpWebsiteMirror": "http://cyberside.planet.ee/tor/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "EE",
+        "loadBalanced": "No",
+        "orgName": "CyberSIDE",
+        "region": "EE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Estonia",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://www.torproject.is/dist/";,
+        "httpWebsiteMirror": "http://www.torproject.is/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "IS",
+        "loadBalanced": "No",
+        "orgName": "torproject.is",
+        "region": "IS",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Iceland",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "ftp://ftp.spline.de/pub/tor";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.spline.de/dist/";,
+        "httpWebsiteMirror": "http://tor.spline.de/";,
+        "httpsDistMirror": "https://tor.spline.inf.fu-berlin.de/dist/";,
+        "httpsWebsiteMirror": "https://tor.spline.inf.fu-berlin.de/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "spline",
+        "region": "DE",
+        "rsyncDistMirror": "rsync://ftp.spline.de/tor/dist",
+        "rsyncWebsiteMirror": "rsync://ftp.spline.de/tor",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.me0w.cc/dist/";,
+        "httpWebsiteMirror": "http://tor.me0w.cc/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "RO",
+        "loadBalanced": "No",
+        "orgName": "me0w.cc",
+        "region": "RO",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Romania",
+        "updateDate\n": "Thu Jan  1 16:17:56 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.borgmann.tv/dist/";,
+        "httpWebsiteMirror": "http://tor.borgmann.tv/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "borgmann.tv",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Sun Jul 12 19:04:44 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.dont-know-me.at/dist/";,
+        "httpWebsiteMirror": "http://tor.dont-know-me.at/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "AT",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "AT",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Austria",
+        "updateDate\n": "Tue Jan 20 16:17:52 2015"
+    },
+    {
+        "adminContact": "coralcdn.org",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://www.torproject.org.nyud.net/dist/";,
+        "httpWebsiteMirror": "http://www.torproject.org.nyud.net/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "INT",
+        "loadBalanced": "Yes",
+        "orgName": "CoralCDN",
+        "region": "INT",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "International",
+        "updateDate\n": "Thu Jan  8 02:01:06 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.ph3x.at/dist/";,
+        "httpWebsiteMirror": "http://torproject.ph3x.at/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "AT",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "AT",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Austria",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://fbnaia.homelinux.net/torproject/dist/";,
+        "httpWebsiteMirror": "http://fbnaia.homelinux.net/torproject/";,
+        "httpsDistMirror": "https://fbnaia.homelinux.net/torproject/dist/";,
+        "httpsWebsiteMirror": "https://fbnaia.homelinux.net/torproject/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "MX",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "MX",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Mexico",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "webmaster AT askapache DOT com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.askapache.com/dist/";,
+        "httpWebsiteMirror": "http://tor.askapache.com/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "AskApache",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "California",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.mirror.chekanov.net/dist/";,
+        "httpWebsiteMirror": "http://tor.mirror.chekanov.net/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": "Mon Mar 16 15:53:03 2015"
+    },
+    {
+        "adminContact": "kontakt AT unicorncloud DOT org",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror.unicorncloud.org/torproject.org/dist";,
+        "httpWebsiteMirror": "http://mirror.unicorncloud.org/torproject.org/";,
+        "httpsDistMirror": "https://mirror.unicorncloud.org/torproject.org/dist";,
+        "httpsWebsiteMirror": "https://mirror.unicorncloud.org/torproject.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "UnicornCloud.org",
+        "region": "Falkenstein",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "root AT amorphis DOT eu",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.amorphis.eu/dist/";,
+        "httpWebsiteMirror": "http://tor.amorphis.eu/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "NL",
+        "loadBalanced": "No",
+        "orgName": "Amorphis",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "The Netherlands",
+        "updateDate\n": "Mon Mar 16 15:53:03 2015"
+    },
+    {
+        "adminContact": "hackthissite.org",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror.hackthissite.org/tor";,
+        "httpWebsiteMirror": "http://tor.hackthissite.org/";,
+        "httpsDistMirror": "https://mirror.hackthissite.org/tor";,
+        "httpsWebsiteMirror": "https://tor.hackthissite.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "HackThisSite.org",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "paul at coffswifi.net",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.coffswifi.net/dist";,
+        "httpWebsiteMirror": "http://torproject.coffswifi.net";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "AU",
+        "loadBalanced": "No",
+        "orgName": "CoffsWiFi",
+        "region": "APNIC",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Australia and New Zealand",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "",
+        "httpWebsiteMirror": "http://tor.cyberarmy.at/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "AT",
+        "loadBalanced": "No",
+        "orgName": "cyberarmy",
+        "region": "AT",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Austria",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "hostmaster AT example DOT com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://www.theonionrouter.com/dist/";,
+        "httpWebsiteMirror": "http://www.theonionrouter.com/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "IS",
+        "loadBalanced": "No",
+        "orgName": "TheOnionRouter",
+        "region": "Iceland",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Iceland",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.crazyhaze.de/dist/";,
+        "httpWebsiteMirror": "http://tor.crazyhaze.de/";,
+        "httpsDistMirror": "https://tor.crazyhaze.de/dist/";,
+        "httpsWebsiteMirror": "https://tor.crazyhaze.de/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "crazyhaze.de",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Tue Jul  7 13:16:29 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirrors.chaos-darmstadt.de/tor-mirror/dist/";,
+        "httpWebsiteMirror": "http://mirrors.chaos-darmstadt.de/tor-mirror/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "chaos darmstadt",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "ftp://creep.im/mirrors/tor";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://creep.im/tor/dist/";,
+        "httpWebsiteMirror": "http://creep.im/tor";,
+        "httpsDistMirror": "https://creep.im/tor/dist/";,
+        "httpsWebsiteMirror": "https://creep.im/tor";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "RU",
+        "loadBalanced": "No",
+        "orgName": "Soviet Anonymous",
+        "region": "RU",
+        "rsyncDistMirror": "rsync://creep.im/tor-dist",
+        "rsyncWebsiteMirror": "rsync://creep.im/tor",
+        "subRegion": "Russia",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://hbpvnydyyjbmhx6b.onion/mirrors/torproject.org/";,
+        "httpDistMirror": "http://www.torservers.net/mirrors/torproject.org/dist/";,
+        "httpWebsiteMirror": "http://www.torservers.net/mirrors/torproject.org/";,
+        "httpsDistMirror": "https://www.torservers.net/mirrors/torproject.org/dist/";,
+        "httpsWebsiteMirror": "https://www.torservers.net/mirrors/torproject.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "torservers",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror.torland.me/torproject.org/dist/";,
+        "httpWebsiteMirror": "http://mirror.torland.me/torproject.org/";,
+        "httpsDistMirror": "https://mirror.torland.me/torproject.org/dist/";,
+        "httpsWebsiteMirror": "https://mirror.torland.me/torproject.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "GB",
+        "loadBalanced": "No",
+        "orgName": "torland",
+        "region": "GB",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United Kingdom",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.lightning-bolt.net/dist/";,
+        "httpWebsiteMirror": "http://torproject.lightning-bolt.net/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "CZ",
+        "loadBalanced": "No",
+        "orgName": "Lightning-bolt.net",
+        "region": "CZ",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Czech Republic",
+        "updateDate\n": "Mon Mar 16 15:53:03 2015"
+    },
+    {
+        "adminContact": "IceBear",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.myrl.net/dist/";,
+        "httpWebsiteMirror": "http://tor.myrl.net/";,
+        "httpsDistMirror": "https://tor.myrl.net/dist/";,
+        "httpsWebsiteMirror": "https://tor.myrl.net/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "IS",
+        "loadBalanced": "No",
+        "orgName": "myRL.net",
+        "region": "IS",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Iceland",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "kiro AT userzap DOT de",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torprojekt.userzap.de/dist/";,
+        "httpWebsiteMirror": "http://torprojekt.userzap.de";,
+        "httpsDistMirror": "https://torprojekt.userzap.de/dist/";,
+        "httpsWebsiteMirror": "https://torprojekt.userzap.de";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "Userzap",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Tue Jan 20 16:17:52 2015"
+    },
+    {
+        "adminContact": "tor@xxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.les.net/dist";,
+        "httpWebsiteMirror": "http://tor.les.net/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "CA",
+        "loadBalanced": "NO",
+        "orgName": "tor@xxxxxxx",
+        "region": "CA",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Canada",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor@xxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.stalkr.net/dist/";,
+        "httpWebsiteMirror": "http://tor.stalkr.net/";,
+        "httpsDistMirror": "https://tor.stalkr.net/dist/";,
+        "httpsWebsiteMirror": "https://tor.stalkr.net/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "FR",
+        "loadBalanced": "NO",
+        "orgName": "stalkr.net",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "doemela[AT]cyberguerrilla[DOT]org",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://6dvj6v5imhny3anf.onion";,
+        "httpDistMirror": "",
+        "httpWebsiteMirror": "",
+        "httpsDistMirror": "https://tor-mirror.cyberguerrilla.org/dist/";,
+        "httpsWebsiteMirror": "https://tor-mirror.cyberguerrilla.org";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "cYbergueRrilLa AnonyMous NeXus",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "contact@xxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.gtor.org/dist/";,
+        "httpWebsiteMirror": "http://torproject.gtor.org/";,
+        "httpsDistMirror": "https://torproject.gtor.org/dist/";,
+        "httpsWebsiteMirror": "https://torproject.gtor.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "Gtor",
+        "region": "DE",
+        "rsyncDistMirror": "rsync://torproject.gtor.org/website-mirror/dist/",
+        "rsyncWebsiteMirror": "rsync://torproject.gtor.org/website-mirror/",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "SDL",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.nexiom.net";,
+        "httpWebsiteMirror": "http://torproject.nexiom.net";,
+        "httpsDistMirror": "https://torproject.nexiom.net/dist";,
+        "httpsWebsiteMirror": "https://torproject.nexiom.net";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "NO",
+        "orgName": "SDL",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror.velcommuta.de/tor/dist/";,
+        "httpWebsiteMirror": "http://mirror.velcommuta.de/tor/";,
+        "httpsDistMirror": "https://mirror.velcommuta.de/tor/dist/";,
+        "httpsWebsiteMirror": "https://mirror.velcommuta.de/tor/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "Tor Supporter",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "EFF",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "",
+        "httpWebsiteMirror": "",
+        "httpsDistMirror": "https://tor.eff.org/dist/";,
+        "httpsWebsiteMirror": "https://tor.eff.org";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "NO",
+        "orgName": "EFF",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.void.gr/dist/";,
+        "httpWebsiteMirror": "http://tor.void.gr";,
+        "httpsDistMirror": "https://tor.void.gr/dist/";,
+        "httpsWebsiteMirror": "https://tor.void.gr";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "GR",
+        "loadBalanced": "NO",
+        "orgName": "Tor Supporter",
+        "region": "GR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Greece",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Ich Eben",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://reichster.de/mirrors/torproject.org/dist/";,
+        "httpWebsiteMirror": "http://reichster.de/mirrors/torproject.org/";,
+        "httpsDistMirror": "https://reichster.de/mirrors/torproject.org/dist/";,
+        "httpsWebsiteMirror": "https://reichster.de/mirrors/torproject.org";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "jlgaddis AT gnu DOT org",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor1.evilrouters.net/dist/";,
+        "httpWebsiteMirror": "http://tor1.evilrouters.net/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Evil Routers",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor AT miglix DOT eu",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.miglix.eu/dist/";,
+        "httpWebsiteMirror": "http://tor.miglix.eu";,
+        "httpsDistMirror": "https://tor.miglix.eu/dist/";,
+        "httpsWebsiteMirror": "https://tor.miglix.eu";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor TA ninurta TOD name",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.ninurta.name/dist/";,
+        "httpWebsiteMirror": "http://tor.ninurta.name/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "AT",
+        "loadBalanced": "no",
+        "orgName": "TorNinurtaName",
+        "region": "AT",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Austria",
+        "updateDate\n": "Wed Oct 22 15:02:17 2014"
+    },
+    {
+        "adminContact": "fr33tux <AT> general-changelog-team.fr",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.fr33tux.org/dist/";,
+        "httpWebsiteMirror": "http://tor.fr33tux.org";,
+        "httpsDistMirror": "https://tor.fr33tux.org/dist/";,
+        "httpsWebsiteMirror": "https://tor.fr33tux.org";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "sebastian(at)bobrecki(dot)pl",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.iv.net.pl/dist/";,
+        "httpWebsiteMirror": "http://tor.iv.net.pl";,
+        "httpsDistMirror": "https://tor.iv.net.pl/dist/";,
+        "httpsWebsiteMirror": "https://tor.iv.net.pl";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "PL",
+        "loadBalanced": "No",
+        "orgName": "Sebastian M. Bobrecki",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Poland",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor-mirror AT rdns DOT cc",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.static.lu/dist/";,
+        "httpWebsiteMirror": "http://tor.static.lu";,
+        "httpsDistMirror": "https://tor.static.lu/dist/";,
+        "httpsWebsiteMirror": "https://tor.static.lu";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "d0wn.biz",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor@xxxxxxxxxxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://www.moparisthebest.com/tor/dist/";,
+        "httpWebsiteMirror": "http://www.moparisthebest.com/tor/";,
+        "httpsDistMirror": "https://www.moparisthebest.com/tor/dist/";,
+        "httpsWebsiteMirror": "https://www.moparisthebest.com/tor/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "moparisthebest.com",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Sebastian",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.maxanoo.com/dist/";,
+        "httpWebsiteMirror": "http://tor.maxanoo.com/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "NL",
+        "loadBalanced": "NO",
+        "orgName": "Maxanoo",
+        "region": "Amsterdam",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "The Netherlands",
+        "updateDate\n": "Sun May 31 15:13:53 2015"
+    },
+    {
+        "adminContact": "rorrim AT ayo DOT tl",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://ayo.tl/tor/dist/";,
+        "httpWebsiteMirror": "http://ayo.tl/tor/";,
+        "httpsDistMirror": "https://ayo.tl/tor/dist/";,
+        "httpsWebsiteMirror": "https://ayo.tl/tor/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "IS",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Iceland",
+        "updateDate\n": "Tue Jan 20 16:17:52 2015"
+    },
+    {
+        "adminContact": "stefano.fenoglio AT gmail DOT com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.stefanof.com/dist";,
+        "httpWebsiteMirror": "http://tor.stefanof.com";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "IT",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Italy",
+        "updateDate\n": "Sun Jul 12 13:19:35 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.ramosresearch.com/dist/";,
+        "httpWebsiteMirror": "http://tor.ramosresearch.com/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Ramos Research",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Mon Mar 16 15:53:03 2015"
+    },
+    {
+        "adminContact": "Tor Fan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.euve33747.vserver.de/dist";,
+        "httpWebsiteMirror": "http://tor.euve33747.vserver.de/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "s7r[at]sky-ip[d0t]org",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://beautiful-mind.sky-ip.org/dist/";,
+        "httpWebsiteMirror": "http://beautiful-mind.sky-ip.org/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "NL",
+        "loadBalanced": "No",
+        "orgName": "sky-ip.org",
+        "region": "NL",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Netherlands",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor#pajonzeck#de",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://zgfgvob256pffy62.onion";,
+        "httpDistMirror": "http://tor.pajonzeck.de/dist/";,
+        "httpWebsiteMirror": "http://tor.pajonzeck.de/";,
+        "httpsDistMirror": "https://tor.pajonzeck.de/dist/";,
+        "httpsWebsiteMirror": "https://tor.pajonzeck.de/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "ITsn",
+        "region": "Europe",
+        "rsyncDistMirror": "rsync://tor.pajonzeck.de/tor/dist",
+        "rsyncWebsiteMirror": "rsync://tor.pajonzeck.de/tor",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "peter AT ludikovsky DOT name",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://54lnbzjo6xlr4f4j.onion/";,
+        "httpDistMirror": "http://tor.ludikovsky.name/dist";,
+        "httpWebsiteMirror": "http://tor.ludikovsky.name/";,
+        "httpsDistMirror": "https://tor.ludikovsky.name/dist";,
+        "httpsWebsiteMirror": "https://tor.ludikovsky.name/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "AT",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "rsync://tor.ludikovsky.name/tor-dist",
+        "rsyncWebsiteMirror": "rsync://tor.ludikovsky.name/tor",
+        "subRegion": "Austria",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "admin AT nuclear DASH weapons DOT net",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.nuclear-weapons.net/dist";,
+        "httpWebsiteMirror": "http://tor.nuclear-weapons.net";,
+        "httpsDistMirror": "https://tor.nuclear-weapons.net/dist";,
+        "httpsWebsiteMirror": "https://tor.nuclear-weapons.net";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Setec Administrator",
+        "region": "Austin",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Texas",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "0x43DE8191",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.hactar.bz/dist/";,
+        "httpWebsiteMirror": "http://torproject.hactar.bz";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "-nick at calyx dot com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://tmdrhl4e4anhsjc5.onion";,
+        "httpDistMirror": "http://tor.calyxinstitute.org/dist/";,
+        "httpWebsiteMirror": "http://tor.calyxinstitute.org";,
+        "httpsDistMirror": "https://tor.calyxinstitute.org/dist/";,
+        "httpsWebsiteMirror": "https://tor.calyxinstitute.org";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "The Calyx Institute",
+        "region": "North America",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "opi@xxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor-mirror.zeropi.net/dist/";,
+        "httpWebsiteMirror": "http://tor-mirror.zeropi.net/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": "Mon Dec  1 12:15:20 2014"
+    },
+    {
+        "adminContact": "noc AT babylon DOT network",
+        "ftpWebsiteMirror": "ftp://mirror2.babylon.network/torproject/";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror2.babylon.network/torproject/dist/";,
+        "httpWebsiteMirror": "http://mirror2.babylon.network/torproject/";,
+        "httpsDistMirror": "https://mirror2.babylon.network/torproject/dist/";,
+        "httpsWebsiteMirror": "https://mirror2.babylon.network/torproject/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "NL",
+        "loadBalanced": "No",
+        "orgName": "Babylon Network",
+        "region": "Europe",
+        "rsyncDistMirror": "rsync://mirror2.babylon.network/torproject/dist/",
+        "rsyncWebsiteMirror": "rsync://mirror2.babylon.network/torproject/",
+        "subRegion": "The Netherlands",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "noc AT babylon DOT network",
+        "ftpWebsiteMirror": "ftp://mirror0.babylon.network/torproject/";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror0.babylon.network/torproject/dist/";,
+        "httpWebsiteMirror": "http://mirror0.babylon.network/torproject/";,
+        "httpsDistMirror": "https://mirror0.babylon.network/torproject/dist/";,
+        "httpsWebsiteMirror": "https://mirror0.babylon.network/torproject/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "Babylon Network",
+        "region": "Europe",
+        "rsyncDistMirror": "rsync://mirror0.babylon.network/torproject/dist/",
+        "rsyncWebsiteMirror": "rsync://mirror0.babylon.network/torproject/",
+        "subRegion": "France",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "noc AT babylon DOT network",
+        "ftpWebsiteMirror": "ftp://mirror1.babylon.network/torproject/";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror1.babylon.network/torproject/dist/";,
+        "httpWebsiteMirror": "http://mirror1.babylon.network/torproject/";,
+        "httpsDistMirror": "https://mirror1.babylon.network/torproject/dist/";,
+        "httpsWebsiteMirror": "https://mirror1.babylon.network/torproject/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "Babylon Network",
+        "region": "Europe",
+        "rsyncDistMirror": "rsync://mirror1.babylon.network/torproject/dist/",
+        "rsyncWebsiteMirror": "rsync://mirror1.babylon.network/torproject/",
+        "subRegion": "France",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "alexander AT dietrich DOT cx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.ybti.net/dist/";,
+        "httpWebsiteMirror": "http://tor.ybti.net/";,
+        "httpsDistMirror": "https://tor.ybti.net/dist/";,
+        "httpsWebsiteMirror": "https://tor.ybti.net/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor@xxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.0x3d.lu/dist/";,
+        "httpWebsiteMirror": "http://tor.0x3d.lu/";,
+        "httpsDistMirror": "https://tor.0x3d.lu/dist/";,
+        "httpsWebsiteMirror": "https://tor.0x3d.lu/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "0x3d.lu",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "kraai@xxxxxxxxx 0xADCE6065",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.ftbfs.org/dist/";,
+        "httpWebsiteMirror": "http://tor.ftbfs.org/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "SE",
+        "loadBalanced": "No",
+        "orgName": "",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Sweden",
+        "updateDate\n": "Fri Oct 24 08:28:32 2014"
+    },
+    {
+        "adminContact": "kontakt@xxxxxxxxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://www.unicorncloud.org/public/torproject.org/dist";,
+        "httpWebsiteMirror": "http://www.unicorncloud.org/public/torproject.org/";,
+        "httpsDistMirror": "https://www.unicorncloud.org/public/torproject.org/dist";,
+        "httpsWebsiteMirror": "https://www.unicorncloud.org/public/torproject.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "AT",
+        "loadBalanced": "No",
+        "orgName": "UnicornCloud.org",
+        "region": "Wien",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Favoriten",
+        "updateDate\n": "Mon Mar 16 15:53:03 2015"
+    },
+    {
+        "adminContact": "James Murphy",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://108.248.87.242/dist/";,
+        "httpWebsiteMirror": "http://108.248.87.242/";,
+        "httpsDistMirror": "https://108.248.87.242/dist/";,
+        "httpsWebsiteMirror": "https://108.248.87.242/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "intfxdx.com",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Sam Whited 4096R/54083AE104EA7AD3 <sam@xxxxxxxxxxxxx>",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirrors.samwhited.net/tor/dist";,
+        "httpWebsiteMirror": "http://mirrors.samwhited.net/tor";,
+        "httpsDistMirror": "https://mirrors.samwhited.net/tor/dist";,
+        "httpsWebsiteMirror": "https://mirrors.samwhited.net/tor";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "FALSE",
+        "orgName": "SamWhited.com",
+        "region": "United States",
+        "rsyncDistMirror": "rsync://mirrors.samwhited.net/tor-dist",
+        "rsyncWebsiteMirror": "rsync://mirrors.samwhited.net/tor",
+        "subRegion": "GA",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "rohit008 AT e DOT ntu DOT edu DOT sg",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://torproject.ntuoss.com/dist/";,
+        "httpWebsiteMirror": "http://torproject.ntuoss.com/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "SG",
+        "loadBalanced": "No",
+        "orgName": "NTUOSS",
+        "region": "Asia",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Singapore",
+        "updateDate\n": "Mon Mar 16 15:53:03 2015"
+    },
+    {
+        "adminContact": "jvictors at jessevictors dot com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor-relay.cs.usu.edu/mirrors/torproject.org/dist/";,
+        "httpWebsiteMirror": "http://tor-relay.cs.usu.edu/mirrors/torproject.org/";,
+        "httpsDistMirror": "https://www.jessevictors.com/secureMirrors/torproject.org/dist/";,
+        "httpsWebsiteMirror": "https://www.jessevictors.com/secureMirrors/torproject.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Department of CS at USU",
+        "region": "North America",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Jacob Henner",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.ventricle.us/dist/";,
+        "httpWebsiteMirror": "http://tor.ventricle.us/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "TRUE",
+        "orgName": "Anatomical Networks",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": "Tue Jan 20 16:17:52 2015"
+    },
+    {
+        "adminContact": "hostmaster@xxxxxxxxxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.mirrors.lucidnetworks.net/dist";,
+        "httpWebsiteMirror": "http://tor.mirrors.lucidnetworks.net";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Lucid Networks",
+        "region": "US",
+        "rsyncDistMirror": "rsync://tor.mirrors.lucidnetworks.net::tor-dist",
+        "rsyncWebsiteMirror": "rsync://tor.mirrors.lucidnetworks.net::tor",
+        "subRegion": "United States",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "hostmaster@xxxxxxxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.mirror-server.de/dist/";,
+        "httpWebsiteMirror": "http://tor.mirror-server.de/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "mirror-server.de",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Tue Jan 20 16:17:52 2015"
+    },
+    {
+        "adminContact": "mirror ntzk de",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://mirror.ntzk.de/torproject.org/dist/";,
+        "httpWebsiteMirror": "http://mirror.ntzk.de/torproject.org/";,
+        "httpsDistMirror": "https://mirror.ntzk.de/torproject.org/dist/";,
+        "httpsWebsiteMirror": "https://mirror.ntzk.de/torproject.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "Netzkonstrukt Berlin",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "mirror@xxxxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.xfree.com.ar/dist/";,
+        "httpWebsiteMirror": "http://tor.xfree.com.ar/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "AR",
+        "loadBalanced": "No",
+        "orgName": "Xfree.com.ar",
+        "region": "South America",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Argentina",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor AT eprci NET",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.eprci.net/dist/";,
+        "httpWebsiteMirror": "http://tor.eprci.net/";,
+        "httpsDistMirror": "https://www.eprci.com/tor/dist/";,
+        "httpsWebsiteMirror": "https://www.eprci.com/tor/";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "EPRCI",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "NH",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tor@xxxxxxx",
+        "ftpWebsiteMirror": "ftp://tor-mirror.kura.io";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor-mirror.kura.io/dist/";,
+        "httpWebsiteMirror": "http://tor-mirror.kura.io/";,
+        "httpsDistMirror": "https://tor-mirror.kura.io/dist/";,
+        "httpsWebsiteMirror": "https://tor-mirror.kura.io/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "NL",
+        "loadBalanced": "TRUE",
+        "orgName": "KURA IO LIMITED",
+        "region": "Europe",
+        "rsyncDistMirror": "rsync://tor-mirror.kura.io/torproject.org/dist",
+        "rsyncWebsiteMirror": "rsync://tor-mirror.kura.io/torproject.org",
+        "subRegion": "Netherlands",
+        "updateDate\n": "Thu Jan 22 16:27:59 2015"
+    },
+    {
+        "adminContact": "tor-admin AT wardsback DOT org",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://alliumcepa.wardsback.org/dist/";,
+        "httpWebsiteMirror": "http://alliumcepa.wardsback.org/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "wardsback.org",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "PW",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.pw.is/dist/";,
+        "httpWebsiteMirror": "http://tor.pw.is/";,
+        "httpsDistMirror": "https://www.it-sicherheitschannel.de/dist/";,
+        "httpsWebsiteMirror": "https://www.it-sicherheitschannel.de/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "NO",
+        "orgName": "PW",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "kevin@xxxxxxxxxxxxx",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.freedom.press/dist/";,
+        "httpWebsiteMirror": "http://tor.freedom.press";,
+        "httpsDistMirror": "https://tor.freedom.press/dist/";,
+        "httpsWebsiteMirror": "https://tor.freedom.press";,
+        "ipv4": "True",
+        "ipv6": "False",
+        "isoCC": "",
+        "loadBalanced": "No",
+        "orgName": "Freedom of the Press Foundation",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "US",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "hsu AT peterdavehellor DOT org",
+        "ftpWebsiteMirror": "ftp://ftp.yzu.edu.tw/torproject.org/";,
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://ftp.yzu.edu.tw/torproject.org/dist/";,
+        "httpWebsiteMirror": "http://ftp.yzu.edu.tw/torproject.org/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "TW",
+        "loadBalanced": "No",
+        "orgName": "Department of CSE. Yuan Ze University",
+        "region": "Asia",
+        "rsyncDistMirror": "rsync://ftp.yzu.edu.tw/pub/torproject.org/dist/",
+        "rsyncWebsiteMirror": "rsync://ftp.yzu.edu.tw/pub/torproject.org/",
+        "subRegion": "Taiwan",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tormirror at sybec.net <mailto:tormirror at sybec.net>",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tormirror.sybec.net:8080/dist/ <http://tormirror.sybec.net:8080/dist/>",
+        "httpWebsiteMirror": "http://tormirror.sybec.net:8080/ <http://tormirror.sybec.net:8080/>",
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "FALSE",
+        "orgName": "Sybec Services Ltd.",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": ""
+    },
+    {
+        "adminContact": "tor at tvdw dot eu",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor-exit.network/dist";,
+        "httpWebsiteMirror": "http://tor-exit.network";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "XX",
+        "loadBalanced": "Yes",
+        "orgName": "TvdW",
+        "region": "XX",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Around the world",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "spiderfly AT protonmail DOT com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://onionphysics.com/dist/";,
+        "httpWebsiteMirror": "http://onionphysics.com";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "FR",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "FR",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "France",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "ops at hoovism.com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://bt3ehg7prnlm6tyv.onion/";,
+        "httpDistMirror": "http://tor.hoovism.com/dist/";,
+        "httpWebsiteMirror": "http://tor.hoovism.com/";,
+        "httpsDistMirror": "https://tor.hoovism.com/dist/";,
+        "httpsWebsiteMirror": "https://tor.hoovism.com/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "Matthew Hoover",
+        "region": "US",
+        "rsyncDistMirror": "rsync://tor.hoovism.com/tor/dist/",
+        "rsyncWebsiteMirror": "rsync://tor.hoovism.com/tor/",
+        "subRegion": "NJ",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "tormaster AT urown DOT net",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://torprowdd64ytmyk.onion";,
+        "httpDistMirror": "http://torproject.urown.net/dist/";,
+        "httpWebsiteMirror": "http://torproject.urown.net/";,
+        "httpsDistMirror": "https://torproject.urown.net/dist/";,
+        "httpsWebsiteMirror": "https://torproject.urown.net/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "CH",
+        "loadBalanced": "No",
+        "orgName": "urown.net",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Switzerland",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "Stefan",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://sela.io/mirrors/torproject.org/dist/";,
+        "httpWebsiteMirror": "http://sela.io/mirrors/torproject.org/";,
+        "httpsDistMirror": "https://sela.io/mirrors/torproject.org/dist/";,
+        "httpsWebsiteMirror": "https://sela.io/mirrors/torproject.org/";,
+        "ipv4": "TRUE",
+        "ipv6": "TRUE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "sela Internet",
+        "region": "DE",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "justaguy AT justaguy DOT pw",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "http://3qzbcsjhwseov7k4.onion";,
+        "httpDistMirror": "http://services.justaguy.pw/dist";,
+        "httpWebsiteMirror": "http://services.justaguy.pw/";,
+        "httpsDistMirror": "https://services.justaguy.pw/dist";,
+        "httpsWebsiteMirror": "https://services.justaguy.pw/";,
+        "ipv4": "True",
+        "ipv6": "False",
+        "isoCC": "NL",
+        "loadBalanced": "No",
+        "orgName": "Justaguy",
+        "region": "NL",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "The Netherlands",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "thomaswhite AT riseup DOT net",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.thecthulhu.com/dist/";,
+        "httpWebsiteMirror": "http://tor.thecthulhu.com/";,
+        "httpsDistMirror": "https://tor.thecthulhu.com/dist/";,
+        "httpsWebsiteMirror": "https://tor.thecthulhu.com/";,
+        "ipv4": "True",
+        "ipv6": "False",
+        "isoCC": "NL",
+        "loadBalanced": "No",
+        "orgName": "TheCthulhu",
+        "region": "NL",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "The Netherlands",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "rush23 AT gmx DOT net",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor-proxy.euve59946.serverprofi24.de/dist/";,
+        "httpWebsiteMirror": "http://tor-proxy.euve59946.serverprofi24.de/";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "DE",
+        "loadBalanced": "No",
+        "orgName": "Tor Supporter",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "Germany",
+        "updateDate\n": "Thu Jun  4 19:06:42 2015"
+    },
+    {
+        "adminContact": "webmaster AT ccc DOT de",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "http://tor.ccc.de/dist/";,
+        "httpWebsiteMirror": "http://tor.ccc.de/";,
+        "httpsDistMirror": "https://tor.ccc.de/dist/";,
+        "httpsWebsiteMirror": "https://tor.ccc.de";,
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "NL",
+        "loadBalanced": "No",
+        "orgName": "CCC",
+        "region": "Europe",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "The Netherlands",
+        "updateDate\n": "Wed Jul 15 18:49:12 2015"
+    },
+    {
+        "adminContact": "mitchell AT lcsks DOT com",
+        "ftpWebsiteMirror": "",
+        "hiddenServiceMirror": "",
+        "httpDistMirror": "",
+        "httpWebsiteMirror": "http://mirror.lcsks.com";,
+        "httpsDistMirror": "",
+        "httpsWebsiteMirror": "",
+        "ipv4": "TRUE",
+        "ipv6": "FALSE",
+        "isoCC": "US",
+        "loadBalanced": "No",
+        "orgName": "CCC",
+        "region": "US",
+        "rsyncDistMirror": "",
+        "rsyncWebsiteMirror": "",
+        "subRegion": "United States",
+        "updateDate\n": ""
+    }
+]
\ No newline at end of file
diff --git a/tor-mirrors.csv b/tor-mirrors.csv
new file mode 100644
index 0000000..5ca8f03
--- /dev/null
+++ b/tor-mirrors.csv
@@ -0,0 +1,116 @@
+adminContact, orgName, isoCC, subRegion, region, ipv4, ipv6, loadBalanced, httpWebsiteMirror, httpsWebsiteMirror, rsyncWebsiteMirror, ftpWebsiteMirror, httpDistMirror, httpsDistMirror, rsyncDistMirror, hiddenServiceMirror, updateDate
+Tor Fan, Tor Supporter, US, United States, US, TRUE, TRUE, No, http://tor.loritsu.com/, , , , http://tor.loritsu.com/dist/, , , , 
+Tor Fan, Tor Supporter, LU, Luxemborg, LU, TRUE, FALSE, No, http://torproject.adamas.ai/, , , , http://torproject.adamas.ai/dist/, , , , 
+Tor Fan, Tor Supporter, UA, Ukraine, UA, TRUE, FALSE, No, http://torua.reactor-xg.kiev.ua/, , , , http://torua.reactor-xg.kiev.ua/dist/, , , , 
+Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://37.187.0.127/tormirror/, , , , http://37.187.0.127/tormirror/dist/, , , , 
+Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, http://tor.minibofh.org/, , , , http://tor.minibofh.org/dist/, , , , 
+Tor Fan, Tor Supporter, UK, United Kingdom, UK, TRUE, FALSE, No, http://tor.mage.me.uk/, , , , http://tor.mage.me.uk/dist/, , , , 
+nsane2307 eml cc, tor-mirror.de, DE, Germany, Europe, TRUE, FALSE, No, http://tor-mirror.de/, https://tor-mirror.de/, , , http://tor-mirror.de/dist/, https://tor-mirror.de/dist/, , , 
+citizen428 AT gmail DOT com, [[:bbs:]], DE, Germany, Europe, TRUE, FALSE, No, http://tor.blingblingsquad.net/, https://tor.blingblingsquad.net/, , , http://tor.blingblingsquad.net/dist/, https://tor.blingblingsquad.net/dist/, , , 
+Tor Fan, NW Linux, US, WA, US, TRUE, FALSE, No, http://torproject.nwlinux.us/, , rsync://nwlinux.us/tor-web, , http://torproject.nwlinux.us/dist/, , rsync://nwlinux.us/tor-dist, , 
+Tor Fan, Tor Supporter, NL, The Netherlands, NL, TRUE, FALSE, No, , , , , , https://www.coevoet.nl/tor/dist/, , , 
+Tor Fan, LazyTiger, FR, France, FR, TRUE, FALSE, No, http://tor.taiga-san.net/, , , , http://tor.taiga-san.net/dist/, , , , 
+Tor Fan, Tor Supporter, EE, Estonia, EE, TRUE, FALSE, No, http://tor.li/, https://tor.li/, , , http://tor.li/dist/, https://tor.li/dist/, , , 
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, NO, http://tor.externenprüfung-nichtschüler.de/, , , , http://tor.externenprüfung-nichtschüler.de/dist/, , , , 
+mirror-service@xxxxxxxxxxxxx, NetCologne GmbH, DE, NRW, , TRUE, TRUE, No, http://mirror.netcologne.de/torproject.org, , rsync://mirror.netcologne.de/torproject.org, ftp://mirror.netcologne.de/torproject.org/, http://mirror.netcologne.de/torproject.org/dist, , rsync://mirror.netcologne.de/torproject.org/dist, , Wed Jul 15 18:49:12 2015
+admin AT netgull DOT com, NetGull, US, United States, North America, TRUE, TRUE, No, , , , , http://www.netgull.com/torproject/, , , , 
+mirrors[at]ip-connect[dot]vn[dot]ua, IP-Connect LLC, UA, VN, , TRUE, TRUE, Yes, http://torproject.ip-connect.vn.ua, , rsync://torproject.ip-connect.vn.ua/torproject, ftp://torproject.ip-connect.vn.ua/mirror/torproject/, http://torproject.ip-connect.vn.ua/dist, , rsync://torproject.ip-connect.vn.ua/torproject/dist, , Wed Jul 15 18:49:12 2015
+torsupport AT tb-itf DOT de, TB-ITF, DE, Germany, Europe, TRUE, TRUE, No, http://tormirror.tb-itf-tor.de, https://tormirror.tb-itf-tor.de, , , http://tormirror.tb-itf-tor.de/dist/, https://tormirror.tb-itf-tor.de/dist/, , , Wed Jul 15 18:49:12 2015
+admin at koreswatanabe dottnet, Tor Supporter, RO, Romania, RO, TRUE, TRUE, No, http://tor-relay.koreswatanabe.net, , , , http://tor-relay.koreswatanabe.net/dist/, , , , 
+calebcenter@xxxxxxxx, calebxu.tk, US, United States, US, TRUE, FALSE, NO, http://tor.calebxu.tk, , rsync://calebxu.tk/tor, ftp://ftp.calebxu.tk, http://tor.calebxu.tk/dist, , , , 
+maki@xxxxxxxxxxxx, Maki Hoshisawa, DE, Germany, DE, TRUE, FALSE, NO, http://tor.mirrors.maki-chan.de/, , , , http://tor.mirrors.maki-chan.de/dist/, , , , Sat Aug 23 08:09:07 2014
+info AT zentrum-der-gesundheit DOT de, Zentrum der Gesundheit, DK, Denmark, Europe, TRUE, FALSE, No, http://tor.idnr.ws/, , , , http://tor.idnr.ws/dist/, , , , Tue Sep  2 11:16:00 2014
+info /AT enn /DOT lu, Frenn vun der Enn A.S.B.L., IS, Iceland, Europe, TRUE, FALSE, No, http://torproject.lu/, , , , http://torproject.lu/dist/, , , http://btn6gqzqevlhoryd.onion, Wed Jul 15 18:49:12 2015
+Piratenpartei Bayern, Piratenpartei Bayern, DE, Germany, DE, TRUE, FALSE, NO, http://tormirror.piratenpartei-bayern.de, https://tormirror.piratenpartei-bayern.de, , , http://tormirror.piratenpartei-bayern.de/dist/, https://tormirror.piratenpartei-bayern.de/dist/, , , Wed Jul 15 18:49:12 2015
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://tor.hoi-polloi.org, https://tor.hoi-polloi.org/, , , http://tor.hoi-polloi.org/dist/, https://tor.hoi-polloi.org/dist/, , , Wed Jul 15 18:49:12 2015
+tor@xxxxxxx // FoDT.it Webteam, FoDT.it, AT, Austria, Europe, TRUE, FALSE, No, http://tor.fodt.it, https://tor.fodt.it, , ftp://ftp.fodt.it/pub/mirrors/torproject.org/, http://tor.fodt.it/dist/, https://tor.fodt.it/dist/, , , Mon Aug 25 10:19:07 2014
+http://www.multinet.no, MultiNet AS, NO, Trondheim, Trondheim, TRUE, TRUE, No, http://tor.multinet.no/, , , , http://tor.multinet.no/dist/, , , , Wed Jul 15 18:49:12 2015
+haskell at gmx.es, Tor Supporter, ES, Spain, Europe, TRUE, TRUE, No, http://tor.zilog.es/, https://tor.zilog.es/, , , http://tor.zilog.es/dist/, https://tor.zilog.es/dist/, , , Wed Jul 15 18:49:12 2015
+Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, http://199.175.55.215/, https://199.175.55.215/, , , http://199.175.55.215/dist/, https://199.175.55.215/dist/, , , Wed Jul 15 18:49:12 2015
+Tor Fan, Tor Supporter, US, United States, US, FALSE, TRUE, No, http://2607:8b00:2::6258:5c9/, https://2607:8b00:2::6258:5c9/, , , http://2607:8b00:2::6258:5c9/dist/, https://2607:8b00:2::6258:5c9/dist/, , , Tue Jan 20 16:17:52 2015
+margus.random at mail.ee, CyberSIDE, EE, Estonia, EE, TRUE, FALSE, No, http://cyberside.planet.ee/tor/, , , , http://cyberside.net.ee/tor/, , , , Wed Jul 15 18:49:12 2015
+Tor Fan, torproject.is, IS, Iceland, IS, TRUE, FALSE, No, http://www.torproject.is/, , , , http://www.torproject.is/dist/, , , , Wed Jul 15 18:49:12 2015
+Tor Fan, spline, DE, Germany, DE, TRUE, FALSE, No, http://tor.spline.de/, https://tor.spline.inf.fu-berlin.de/, rsync://ftp.spline.de/tor, ftp://ftp.spline.de/pub/tor, http://tor.spline.de/dist/, https://tor.spline.inf.fu-berlin.de/dist/, rsync://ftp.spline.de/tor/dist, , Wed Jul 15 18:49:12 2015
+Tor Fan, me0w.cc, RO, Romania, RO, TRUE, FALSE, No, http://tor.me0w.cc/, , , , http://tor.me0w.cc/dist/, , , , Thu Jan  1 16:17:56 2015
+Tor Fan, borgmann.tv, DE, Germany, DE, TRUE, FALSE, No, http://tor.borgmann.tv/, , , , http://tor.borgmann.tv/dist/, , , , Sun Jul 12 19:04:44 2015
+Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, TRUE, No, http://tor.dont-know-me.at/, , , , http://tor.dont-know-me.at/dist/, , , , Tue Jan 20 16:17:52 2015
+coralcdn.org, CoralCDN, INT, International, INT, TRUE, FALSE, Yes, http://www.torproject.org.nyud.net/, , , , http://www.torproject.org.nyud.net/dist/, , , , Thu Jan  8 02:01:06 2015
+Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, FALSE, No, http://torproject.ph3x.at/, , , , http://torproject.ph3x.at/dist/, , , , Wed Jul 15 18:49:12 2015
+Tor Fan, Tor Supporter, MX, Mexico, MX, TRUE, FALSE, No, http://fbnaia.homelinux.net/torproject/, https://fbnaia.homelinux.net/torproject/, , , http://fbnaia.homelinux.net/torproject/dist/, https://fbnaia.homelinux.net/torproject/dist/, , , Wed Jul 15 18:49:12 2015
+webmaster AT askapache DOT com, AskApache, US, California, US, TRUE, FALSE, No, http://tor.askapache.com/, , , , http://tor.askapache.com/dist/, , , , Wed Jul 15 18:49:12 2015
+Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://tor.mirror.chekanov.net/, , , , http://tor.mirror.chekanov.net/dist/, , , , Mon Mar 16 15:53:03 2015
+kontakt AT unicorncloud DOT org, UnicornCloud.org, DE, Germany, Falkenstein, TRUE, FALSE, No, http://mirror.unicorncloud.org/torproject.org/, https://mirror.unicorncloud.org/torproject.org/, , , http://mirror.unicorncloud.org/torproject.org/dist, https://mirror.unicorncloud.org/torproject.org/dist, , , Wed Jul 15 18:49:12 2015
+root AT amorphis DOT eu, Amorphis, NL, The Netherlands, Europe, TRUE, FALSE, No, http://tor.amorphis.eu/, , , , http://tor.amorphis.eu/dist/, , , , Mon Mar 16 15:53:03 2015
+hackthissite.org, HackThisSite.org, US, United States, US, TRUE, TRUE, No, http://tor.hackthissite.org/, https://tor.hackthissite.org/, , , http://mirror.hackthissite.org/tor, https://mirror.hackthissite.org/tor, , , Wed Jul 15 18:49:12 2015
+paul at coffswifi.net, CoffsWiFi, AU, Australia and New Zealand, APNIC, TRUE, FALSE, No, http://torproject.coffswifi.net, , , , http://torproject.coffswifi.net/dist, , , , Wed Jul 15 18:49:12 2015
+Tor Fan, cyberarmy, AT, Austria, AT, TRUE, FALSE, No, http://tor.cyberarmy.at/, , , , , , , , Wed Jul 15 18:49:12 2015
+hostmaster AT example DOT com, TheOnionRouter, IS, Iceland, Iceland, TRUE, FALSE, No, http://www.theonionrouter.com/, , , , http://www.theonionrouter.com/dist/, , , , Wed Jul 15 18:49:12 2015
+Tor Fan, crazyhaze.de, DE, Germany, DE, TRUE, FALSE, No, http://tor.crazyhaze.de/, https://tor.crazyhaze.de/, , , http://tor.crazyhaze.de/dist/, https://tor.crazyhaze.de/dist/, , , Tue Jul  7 13:16:29 2015
+Tor Fan, chaos darmstadt, DE, Germany, Europe, TRUE, FALSE, No, http://mirrors.chaos-darmstadt.de/tor-mirror/, , , , http://mirrors.chaos-darmstadt.de/tor-mirror/dist/, , , , Wed Jul 15 18:49:12 2015
+Tor Fan, Soviet Anonymous, RU, Russia, RU, TRUE, FALSE, No, http://creep.im/tor, https://creep.im/tor, rsync://creep.im/tor, ftp://creep.im/mirrors/tor, http://creep.im/tor/dist/, https://creep.im/tor/dist/, rsync://creep.im/tor-dist, , Wed Jul 15 18:49:12 2015
+Tor Fan, torservers, DE, Germany, DE, TRUE, FALSE, No, http://www.torservers.net/mirrors/torproject.org/, https://www.torservers.net/mirrors/torproject.org/, , , http://www.torservers.net/mirrors/torproject.org/dist/, https://www.torservers.net/mirrors/torproject.org/dist/, , http://hbpvnydyyjbmhx6b.onion/mirrors/torproject.org/, Wed Jul 15 18:49:12 2015
+Tor Fan, torland, GB, United Kingdom, GB, TRUE, FALSE, No, http://mirror.torland.me/torproject.org/, https://mirror.torland.me/torproject.org/, , , http://mirror.torland.me/torproject.org/dist/, https://mirror.torland.me/torproject.org/dist/, , , Wed Jul 15 18:49:12 2015
+Tor Fan, Lightning-bolt.net, CZ, Czech Republic, CZ, TRUE, FALSE, No, http://torproject.lightning-bolt.net/, , , , http://torproject.lightning-bolt.net/dist/, , , , Mon Mar 16 15:53:03 2015
+IceBear, myRL.net, IS, Iceland, IS, TRUE, FALSE, No, http://tor.myrl.net/, https://tor.myrl.net/, , , http://tor.myrl.net/dist/, https://tor.myrl.net/dist/, , , Wed Jul 15 18:49:12 2015
+kiro AT userzap DOT de, Userzap, DE, Germany, DE, TRUE, FALSE, No, http://torprojekt.userzap.de, https://torprojekt.userzap.de, , , http://torprojekt.userzap.de/dist/, https://torprojekt.userzap.de/dist/, , , Tue Jan 20 16:17:52 2015
+tor@xxxxxxx, tor@xxxxxxx, CA, Canada, CA, TRUE, FALSE, NO, http://tor.les.net/, , , , http://tor.les.net/dist, , , , Wed Jul 15 18:49:12 2015
+tor@xxxxxxxxxx, stalkr.net, FR, France, FR, TRUE, TRUE, NO, http://tor.stalkr.net/, https://tor.stalkr.net/, , , http://tor.stalkr.net/dist/, https://tor.stalkr.net/dist/, , , Wed Jul 15 18:49:12 2015
+doemela[AT]cyberguerrilla[DOT]org, cYbergueRrilLa AnonyMous NeXus, DE, Germany, DE, TRUE, FALSE, NO, , https://tor-mirror.cyberguerrilla.org, , , , https://tor-mirror.cyberguerrilla.org/dist/, , http://6dvj6v5imhny3anf.onion, Wed Jul 15 18:49:12 2015
+contact@xxxxxxxx, Gtor, DE, Germany, DE, TRUE, TRUE, NO, http://torproject.gtor.org/, https://torproject.gtor.org/, rsync://torproject.gtor.org/website-mirror/, , http://torproject.gtor.org/dist/, https://torproject.gtor.org/dist/, rsync://torproject.gtor.org/website-mirror/dist/, , Wed Jul 15 18:49:12 2015
+SDL, SDL, US, United States, US, TRUE, TRUE, NO, http://torproject.nexiom.net, https://torproject.nexiom.net, , , http://torproject.nexiom.net, https://torproject.nexiom.net/dist, , , Wed Jul 15 18:49:12 2015
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://mirror.velcommuta.de/tor/, https://mirror.velcommuta.de/tor/, , , http://mirror.velcommuta.de/tor/dist/, https://mirror.velcommuta.de/tor/dist/, , , Wed Jul 15 18:49:12 2015
+EFF, EFF, US, United States, US, TRUE, FALSE, NO, , https://tor.eff.org, , , , https://tor.eff.org/dist/, , , Wed Jul 15 18:49:12 2015
+Tor Fan, Tor Supporter, GR, Greece, GR, TRUE, TRUE, NO, http://tor.void.gr, https://tor.void.gr, , , http://tor.void.gr/dist/, https://tor.void.gr/dist/, , , Wed Jul 15 18:49:12 2015
+Ich Eben, Tor Supporter, DE, Germany, DE, TRUE, TRUE, No, http://reichster.de/mirrors/torproject.org/, https://reichster.de/mirrors/torproject.org, , , http://reichster.de/mirrors/torproject.org/dist/, https://reichster.de/mirrors/torproject.org/dist/, , , Wed Jul 15 18:49:12 2015
+jlgaddis AT gnu DOT org, Evil Routers, US, United States, US, TRUE, FALSE, No, http://tor1.evilrouters.net/, , , , http://tor1.evilrouters.net/dist/, , , , Wed Jul 15 18:49:12 2015
+tor AT miglix DOT eu, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, NO, http://tor.miglix.eu, https://tor.miglix.eu, , , http://tor.miglix.eu/dist/, https://tor.miglix.eu/dist/, , , Wed Jul 15 18:49:12 2015
+tor TA ninurta TOD name, TorNinurtaName, AT, Austria, AT, TRUE, TRUE, no, http://tor.ninurta.name/, , , , http://tor.ninurta.name/dist/, , , , Wed Oct 22 15:02:17 2014
+fr33tux <AT> general-changelog-team.fr, Tor Supporter, FR, France, FR, TRUE, TRUE, No, http://tor.fr33tux.org, https://tor.fr33tux.org, , , http://tor.fr33tux.org/dist/, https://tor.fr33tux.org/dist/, , , Wed Jul 15 18:49:12 2015
+sebastian(at)bobrecki(dot)pl, Sebastian M. Bobrecki, PL, Poland, Europe, TRUE, FALSE, No, http://tor.iv.net.pl, https://tor.iv.net.pl, , , http://tor.iv.net.pl/dist/, https://tor.iv.net.pl/dist/, , , Wed Jul 15 18:49:12 2015
+tor-mirror AT rdns DOT cc, d0wn.biz, FR, France, Europe, TRUE, FALSE, No, http://tor.static.lu, https://tor.static.lu, , , http://tor.static.lu/dist/, https://tor.static.lu/dist/, , , Wed Jul 15 18:49:12 2015
+tor@xxxxxxxxxxxxxxxxxx, moparisthebest.com, DE, Germany, Europe, TRUE, TRUE, No, http://www.moparisthebest.com/tor/, https://www.moparisthebest.com/tor/, , , http://www.moparisthebest.com/tor/dist/, https://www.moparisthebest.com/tor/dist/, , , Wed Jul 15 18:49:12 2015
+Sebastian, Maxanoo, NL, The Netherlands, Amsterdam, TRUE, FALSE, NO, http://tor.maxanoo.com/, , , , http://tor.maxanoo.com/dist/, , , , Sun May 31 15:13:53 2015
+rorrim AT ayo DOT tl, Tor Supporter, IS, Iceland, Europe, TRUE, TRUE, No, http://ayo.tl/tor/, https://ayo.tl/tor/, , , http://ayo.tl/tor/dist/, https://ayo.tl/tor/dist/, , , Tue Jan 20 16:17:52 2015
+stefano.fenoglio AT gmail DOT com, Tor Supporter, IT, Italy, Europe, TRUE, FALSE, No, http://tor.stefanof.com, , , , http://tor.stefanof.com/dist, , , , Sun Jul 12 13:19:35 2015
+Tor Fan, Ramos Research, US, United States, US, TRUE, TRUE, No, http://tor.ramosresearch.com/, , , , http://tor.ramosresearch.com/dist/, , , , Mon Mar 16 15:53:03 2015
+Tor Fan, Tor Supporter, DE, Germany, Europe, TRUE, FALSE, No, http://tor.euve33747.vserver.de/, , , , http://tor.euve33747.vserver.de/dist, , , , Wed Jul 15 18:49:12 2015
+s7r[at]sky-ip[d0t]org, sky-ip.org, NL, Netherlands, NL, TRUE, FALSE, No, http://beautiful-mind.sky-ip.org/, , , , http://beautiful-mind.sky-ip.org/dist/, , , , Wed Jul 15 18:49:12 2015
+tor#pajonzeck#de, ITsn, DE, Germany, Europe, TRUE, FALSE, No, http://tor.pajonzeck.de/, https://tor.pajonzeck.de/, rsync://tor.pajonzeck.de/tor, , http://tor.pajonzeck.de/dist/, https://tor.pajonzeck.de/dist/, rsync://tor.pajonzeck.de/tor/dist, http://zgfgvob256pffy62.onion, Wed Jul 15 18:49:12 2015
+peter AT ludikovsky DOT name, Tor Supporter, AT, Austria, Europe, TRUE, TRUE, No, http://tor.ludikovsky.name/, https://tor.ludikovsky.name/, rsync://tor.ludikovsky.name/tor, , http://tor.ludikovsky.name/dist, https://tor.ludikovsky.name/dist, rsync://tor.ludikovsky.name/tor-dist, http://54lnbzjo6xlr4f4j.onion/, Wed Jul 15 18:49:12 2015
+admin AT nuclear DASH weapons DOT net, Setec Administrator, US, Texas, Austin, TRUE, FALSE, No, http://tor.nuclear-weapons.net, https://tor.nuclear-weapons.net, , , http://tor.nuclear-weapons.net/dist, https://tor.nuclear-weapons.net/dist, , , Wed Jul 15 18:49:12 2015
+0x43DE8191, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, No, http://torproject.hactar.bz, , , , http://torproject.hactar.bz/dist/, , , , Wed Jul 15 18:49:12 2015
+-nick at calyx dot com, The Calyx Institute, US, United States, North America, TRUE, FALSE, No, http://tor.calyxinstitute.org, https://tor.calyxinstitute.org, , , http://tor.calyxinstitute.org/dist/, https://tor.calyxinstitute.org/dist/, , http://tmdrhl4e4anhsjc5.onion, Wed Jul 15 18:49:12 2015
+opi@xxxxxxxxxx, Tor Supporter, FR, France, FR, TRUE, TRUE, No, http://tor-mirror.zeropi.net/, , , , http://tor-mirror.zeropi.net/dist/, , , , Mon Dec  1 12:15:20 2014
+noc AT babylon DOT network, Babylon Network, NL, The Netherlands, Europe, TRUE, TRUE, No, http://mirror2.babylon.network/torproject/, https://mirror2.babylon.network/torproject/, rsync://mirror2.babylon.network/torproject/, ftp://mirror2.babylon.network/torproject/, http://mirror2.babylon.network/torproject/dist/, https://mirror2.babylon.network/torproject/dist/, rsync://mirror2.babylon.network/torproject/dist/, , Wed Jul 15 18:49:12 2015
+noc AT babylon DOT network, Babylon Network, FR, France, Europe, TRUE, TRUE, No, http://mirror0.babylon.network/torproject/, https://mirror0.babylon.network/torproject/, rsync://mirror0.babylon.network/torproject/, ftp://mirror0.babylon.network/torproject/, http://mirror0.babylon.network/torproject/dist/, https://mirror0.babylon.network/torproject/dist/, rsync://mirror0.babylon.network/torproject/dist/, , Wed Jul 15 18:49:12 2015
+noc AT babylon DOT network, Babylon Network, FR, France, Europe, TRUE, TRUE, No, http://mirror1.babylon.network/torproject/, https://mirror1.babylon.network/torproject/, rsync://mirror1.babylon.network/torproject/, ftp://mirror1.babylon.network/torproject/, http://mirror1.babylon.network/torproject/dist/, https://mirror1.babylon.network/torproject/dist/, rsync://mirror1.babylon.network/torproject/dist/, , Wed Jul 15 18:49:12 2015
+alexander AT dietrich DOT cx, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, No, http://tor.ybti.net/, https://tor.ybti.net/, , , http://tor.ybti.net/dist/, https://tor.ybti.net/dist/, , , Wed Jul 15 18:49:12 2015
+tor@xxxxxxx, 0x3d.lu, DE, Germany, Europe, TRUE, FALSE, No, http://tor.0x3d.lu/, https://tor.0x3d.lu/, , , http://tor.0x3d.lu/dist/, https://tor.0x3d.lu/dist/, , , Wed Jul 15 18:49:12 2015
+kraai@xxxxxxxxx 0xADCE6065, , SE, Sweden, Europe, TRUE, TRUE, No, http://tor.ftbfs.org/, , , , http://tor.ftbfs.org/dist/, , , , Fri Oct 24 08:28:32 2014
+kontakt@xxxxxxxxxxxxxxxx, UnicornCloud.org, AT, Favoriten, Wien, TRUE, TRUE, No, http://www.unicorncloud.org/public/torproject.org/, https://www.unicorncloud.org/public/torproject.org/, , , http://www.unicorncloud.org/public/torproject.org/dist, https://www.unicorncloud.org/public/torproject.org/dist, , , Mon Mar 16 15:53:03 2015
+James Murphy, intfxdx.com, US, United States, US, TRUE, TRUE, No, http://108.248.87.242/, https://108.248.87.242/, , , http://108.248.87.242/dist/, https://108.248.87.242/dist/, , , Wed Jul 15 18:49:12 2015
+Sam Whited 4096R/54083AE104EA7AD3 <sam@xxxxxxxxxxxxx>, SamWhited.com, US, GA, United States, TRUE, TRUE, FALSE, http://mirrors.samwhited.net/tor, https://mirrors.samwhited.net/tor, rsync://mirrors.samwhited.net/tor, , http://mirrors.samwhited.net/tor/dist, https://mirrors.samwhited.net/tor/dist, rsync://mirrors.samwhited.net/tor-dist, , Wed Jul 15 18:49:12 2015
+rohit008 AT e DOT ntu DOT edu DOT sg, NTUOSS, SG, Singapore, Asia, TRUE, FALSE, No, http://torproject.ntuoss.com/, , , , http://torproject.ntuoss.com/dist/, , , , Mon Mar 16 15:53:03 2015
+jvictors at jessevictors dot com, Department of CS at USU, US, United States, North America, TRUE, FALSE, No, http://tor-relay.cs.usu.edu/mirrors/torproject.org/, https://www.jessevictors.com/secureMirrors/torproject.org/, , , http://tor-relay.cs.usu.edu/mirrors/torproject.org/dist/, https://www.jessevictors.com/secureMirrors/torproject.org/dist/, , , Wed Jul 15 18:49:12 2015
+Jacob Henner, Anatomical Networks, US, United States, US, TRUE, TRUE, TRUE, http://tor.ventricle.us/, , , , http://tor.ventricle.us/dist/, , , , Tue Jan 20 16:17:52 2015
+hostmaster@xxxxxxxxxxxxxxxxx, Lucid Networks, US, United States, US, TRUE, FALSE, No, http://tor.mirrors.lucidnetworks.net, , rsync://tor.mirrors.lucidnetworks.net::tor, , http://tor.mirrors.lucidnetworks.net/dist, , rsync://tor.mirrors.lucidnetworks.net::tor-dist, , Wed Jul 15 18:49:12 2015
+hostmaster@xxxxxxxxxxxxxxx, mirror-server.de, DE, Germany, DE, TRUE, TRUE, No, http://tor.mirror-server.de/, , , , http://tor.mirror-server.de/dist/, , , , Tue Jan 20 16:17:52 2015
+mirror ntzk de, Netzkonstrukt Berlin, DE, Germany, Europe, TRUE, FALSE, No, http://mirror.ntzk.de/torproject.org/, https://mirror.ntzk.de/torproject.org/, , , http://mirror.ntzk.de/torproject.org/dist/, https://mirror.ntzk.de/torproject.org/dist/, , , Wed Jul 15 18:49:12 2015
+mirror@xxxxxxxxxxxx, Xfree.com.ar, AR, Argentina, South America, TRUE, FALSE, No, http://tor.xfree.com.ar/, , , , http://tor.xfree.com.ar/dist/, , , , Wed Jul 15 18:49:12 2015
+tor AT eprci NET, EPRCI, US, NH, US, TRUE, FALSE, No, http://tor.eprci.net/, https://www.eprci.com/tor/, , , http://tor.eprci.net/dist/, https://www.eprci.com/tor/dist/, , , Wed Jul 15 18:49:12 2015
+tor@xxxxxxx, KURA IO LIMITED, NL, Netherlands, Europe, TRUE, TRUE, TRUE, http://tor-mirror.kura.io/, https://tor-mirror.kura.io/, rsync://tor-mirror.kura.io/torproject.org, ftp://tor-mirror.kura.io, http://tor-mirror.kura.io/dist/, https://tor-mirror.kura.io/dist/, rsync://tor-mirror.kura.io/torproject.org/dist, , Thu Jan 22 16:27:59 2015
+tor-admin AT wardsback DOT org, wardsback.org, FR, France, FR, TRUE, FALSE, No, http://alliumcepa.wardsback.org/, , , , http://alliumcepa.wardsback.org/dist/, , , , Wed Jul 15 18:49:12 2015
+PW, PW, DE, Germany, DE, TRUE, TRUE, NO, http://tor.pw.is/, https://www.it-sicherheitschannel.de/, , , http://tor.pw.is/dist/, https://www.it-sicherheitschannel.de/dist/, , , Wed Jul 15 18:49:12 2015
+kevin@xxxxxxxxxxxxx, Freedom of the Press Foundation, , US, US, True, False, No, http://tor.freedom.press, https://tor.freedom.press, , , http://tor.freedom.press/dist/, https://tor.freedom.press/dist/, , , 
+hsu AT peterdavehellor DOT org, Department of CSE. Yuan Ze University, TW, Taiwan, Asia, TRUE, FALSE, No, http://ftp.yzu.edu.tw/torproject.org/, , rsync://ftp.yzu.edu.tw/pub/torproject.org/, ftp://ftp.yzu.edu.tw/torproject.org/, http://ftp.yzu.edu.tw/torproject.org/dist/, , rsync://ftp.yzu.edu.tw/pub/torproject.org/dist/, , Wed Jul 15 18:49:12 2015
+tormirror at sybec.net <mailto:tormirror at sybec.net>, Sybec Services Ltd., DE, Germany, DE, TRUE, FALSE, FALSE, http://tormirror.sybec.net:8080/ <http://tormirror.sybec.net:8080/>, , , , http://tormirror.sybec.net:8080/dist/ <http://tormirror.sybec.net:8080/dist/>, , , , 
+tor at tvdw dot eu, TvdW, XX, Around the world, XX, TRUE, TRUE, Yes, http://tor-exit.network, , , , http://tor-exit.network/dist, , , , Wed Jul 15 18:49:12 2015
+spiderfly AT protonmail DOT com, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://onionphysics.com, , , , http://onionphysics.com/dist/, , , , Wed Jul 15 18:49:12 2015
+ops at hoovism.com, Matthew Hoover, US, NJ, US, TRUE, TRUE, No, http://tor.hoovism.com/, https://tor.hoovism.com/, rsync://tor.hoovism.com/tor/, , http://tor.hoovism.com/dist/, https://tor.hoovism.com/dist/, rsync://tor.hoovism.com/tor/dist/, http://bt3ehg7prnlm6tyv.onion/, Wed Jul 15 18:49:12 2015
+tormaster AT urown DOT net, urown.net, CH, Switzerland, Europe, TRUE, TRUE, No, http://torproject.urown.net/, https://torproject.urown.net/, , , http://torproject.urown.net/dist/, https://torproject.urown.net/dist/, , http://torprowdd64ytmyk.onion, Wed Jul 15 18:49:12 2015
+Stefan, sela Internet, DE, Germany, DE, TRUE, TRUE, No, http://sela.io/mirrors/torproject.org/, https://sela.io/mirrors/torproject.org/, , , http://sela.io/mirrors/torproject.org/dist/, https://sela.io/mirrors/torproject.org/dist/, , , Wed Jul 15 18:49:12 2015
+justaguy AT justaguy DOT pw, Justaguy, NL, The Netherlands, NL, True, False, No, http://services.justaguy.pw/, https://services.justaguy.pw/, , , http://services.justaguy.pw/dist, https://services.justaguy.pw/dist, , http://3qzbcsjhwseov7k4.onion, Wed Jul 15 18:49:12 2015
+thomaswhite AT riseup DOT net, TheCthulhu, NL, The Netherlands, NL, True, False, No, http://tor.thecthulhu.com/, https://tor.thecthulhu.com/, , , http://tor.thecthulhu.com/dist/, https://tor.thecthulhu.com/dist/, , , Wed Jul 15 18:49:12 2015
+rush23 AT gmx DOT net, Tor Supporter, DE, Germany, Europe, TRUE, FALSE, No, http://tor-proxy.euve59946.serverprofi24.de/, , , , http://tor-proxy.euve59946.serverprofi24.de/dist/, , , , Thu Jun  4 19:06:42 2015
+webmaster AT ccc DOT de, CCC, NL, The Netherlands, Europe, TRUE, FALSE, No, http://tor.ccc.de/, https://tor.ccc.de, , , http://tor.ccc.de/dist/, https://tor.ccc.de/dist/, , , Wed Jul 15 18:49:12 2015
+mitchell AT lcsks DOT com, CCC, US, United States, US, TRUE, FALSE, No, http://mirror.lcsks.com, , , , , , , , 



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits