├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── .gitignore ├── LICENSE ├── README.md ├── check_rep.py ├── core ├── __init__.py ├── feeds.py ├── geomap.py ├── tlds.txt ├── utils.py └── vt_check.py ├── images ├── 9NDEpnClkF.gif └── geo_ip_map_example.png ├── poetry.lock └── pyproject.toml /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Desktop (please complete the following information):** 23 | OS: [e.g. *nix | Windows] 24 | 25 | **Additional context** 26 | Add any other context about the problem here. 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Feature Request 4 | url: https://github.com/dfirsec/check_rep/discussions 5 | about: Please create feature requests in the Discussions tab. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | geomap/*.html 2 | **/logfile 3 | settings.yml 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 dfirsec 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Check Reputation 2 | 3 | ![Generic badge](https://img.shields.io/badge/python-3.8-blue.svg) [![Twitter](https://img.shields.io/badge/Twitter-@pulsecode-blue.svg)](https://twitter.com/pulsecode) 4 | 5 | Check IP or Domain reputation against several open-source Blacklists. 6 | 7 | Option to create a Geolocation map file using coordinates derived from [freegeoip.live](https://freegeoip.live). 8 | 9 | ***Note:*** 10 | Use of VirusTotal option requires an API key. The service is free, however you must register for an account to aquire an API key. 11 | 12 | ```console 13 | ________ __ ____ 14 | / ____/ /_ ___ _____/ /__ / __ \___ ____ 15 | / / / __ \/ _ \/ ___/ //_/ / /_/ / _ \/ __ \ 16 | / /___/ / / / __/ /__/ ,< / _, _/ __/ /_/ / 17 | \____/_/ /_/\___/\___/_/|_| /_/ |_|\___/ .___/ 18 | /_/ 19 | 20 | Check IP and Domain Reputation 21 | usage: check_rep.py [-h] [-q Q] [--log] [--vt] [--fg | --mx FILE [FILE ...]] 22 | 23 | Check IP or Domain Reputation 24 | 25 | required arguments: 26 | -q Q query ip address or domain 27 | 28 | options: 29 | -h, --help show this help message and exit 30 | --log log results to file 31 | --vt check virustotal 32 | --fg use freegeoip for geolocation 33 | --mx FILE [FILE ...] geolocate multiple ip addresses or domains 34 | 35 | Options 36 | -------------------- 37 | freegeoip [freegeoip.live] - free/opensource geolocation service 38 | virustotal [virustotal.com] - online multi-antivirus scan engine 39 | 40 | * NOTE: 41 | Use of the VirusTotal option requires an API key. 42 | The service is "free" to use, however you must register 43 | for an account to receive an API key. 44 | ``` 45 | 46 | ## Installation 47 | 48 | ```text 49 | git clone https://github.com/dfirsec/check_rep.git 50 | cd check_rep 51 | pip install -r requirements.txt 52 | ``` 53 | 54 | ### Example Run 55 | 56 | [![asciicast](https://asciinema.org/a/r6VDD8QaHsaj3Fzo1wjU96BmQ.svg)](https://asciinema.org/a/r6VDD8QaHsaj3Fzo1wjU96BmQ) 57 | 58 | ### Geolocation Map File 59 | 60 | ![alt text](images/geo_ip_map_example.png) 61 | -------------------------------------------------------------------------------- /check_rep.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import logging 3 | import os 4 | import sys 5 | from datetime import datetime 6 | from pathlib import Path 7 | 8 | import colored 9 | from colorama import Back, Fore, Style, init 10 | from ruamel.yaml import YAML 11 | 12 | from core.geomap import map_free_geo, multi_map 13 | from core.utils import DOMAIN, EMAIL, IP, NET, URL, Workers, logger 14 | from core.vt_check import VirusTotalChk 15 | 16 | __author__ = "DFIRSec (@pulsecode)" 17 | __version__ = "2.2.0" 18 | __description__ = "Check IP or Domain reputation against 400+ open-source Blacklists." 19 | 20 | # ---[ Initialize Colorama ]--- 21 | init(autoreset=True) 22 | 23 | # ---[ Define program root directory ]--- 24 | prog_root = Path(__file__).resolve().parent 25 | 26 | 27 | def argparser(): 28 | parser = argparse.ArgumentParser( 29 | description="Check IP or Domain Reputation", 30 | formatter_class=argparse.RawTextHelpFormatter, 31 | epilog=""" 32 | Options 33 | -------------------- 34 | freegeoip [freegeoip.live] - free/opensource geolocation service 35 | virustotal [virustotal.com] - online multi-antivirus scan engine 36 | 37 | * NOTE: 38 | Use of the VirusTotal option requires an API key. 39 | The service is "free" to use, however you must register 40 | for an account to receive an API key.""", 41 | ) 42 | 43 | optional = parser._action_groups.pop() 44 | required = parser.add_argument_group("required arguments") 45 | required.add_argument("-q", help="query ip address or domain") 46 | optional.add_argument("--log", action="store_true", help="log results to file") 47 | optional.add_argument("--vt", action="store_true", help="check virustotal") 48 | 49 | group = optional.add_mutually_exclusive_group() 50 | group.add_argument("--fg", action="store_true", help="use freegeoip for geolocation") 51 | group.add_argument("--mx", nargs="+", metavar="FILE", help="geolocate multiple ip addresses or domains") 52 | 53 | parser._action_groups.append(optional) 54 | args = parser.parse_args() 55 | 56 | if len(sys.argv[1:]) == 0: 57 | parser.print_help() 58 | parser.exit() 59 | 60 | return args, parser 61 | 62 | 63 | def multi_map_arg(arg): 64 | multi_map(input_file=arg) 65 | print(colored.stylize("\n--[ GeoIP Map File ]--", colored.attr("bold"))) 66 | try: 67 | multi_map_file = Path("multi_map.html").resolve(strict=True) 68 | except FileNotFoundError: 69 | logger.info("[-] Geolocation map file was not created or does not exist.") 70 | else: 71 | logger.info(f"> Geolocation map file saved to: {multi_map_file}") 72 | sys.exit(1) 73 | 74 | 75 | def vt_arg(arg, settings, workers): 76 | print(colored.stylize("\n--[ VirusTotal Detections ]--", colored.attr("bold"))) 77 | 78 | with open(settings, encoding="utf-8") as api: 79 | vt_config = yaml.load(api) 80 | 81 | if not vt_config["VIRUS-TOTAL"]["api_key"]: 82 | logger.warning("Please add VirusTotal API key to the 'settings.yml' file, or add it below") 83 | user_vt_key = input("Enter key: ") 84 | vt_config["VIRUS-TOTAL"]["api_key"] = user_vt_key 85 | 86 | with open("settings.yml", "w", encoding="utf-8") as output: 87 | yaml.dump(vt_config, output) 88 | 89 | api_key = vt_config["VIRUS-TOTAL"]["api_key"] 90 | virustotal = VirusTotalChk(api_key) 91 | 92 | if DOMAIN.findall(arg): 93 | virustotal.vt_run("domains", arg) 94 | 95 | elif IP.findall(arg): 96 | virustotal.vt_run("ip_addresses", arg) 97 | 98 | elif URL.findall(arg): 99 | virustotal.vt_run("urls", arg) 100 | 101 | else: 102 | virustotal.vt_run("files", arg) 103 | print(colored.stylize("\n--[ Team Cymru Detection ]--", colored.attr("bold"))) 104 | workers.tc_query(qry=arg) 105 | sys.exit("\n") 106 | 107 | 108 | def domain_arg(workers, arg): 109 | print(colored.stylize("\n--[ Querying Domain Blacklists ]--", colored.attr("bold"))) 110 | workers.spamhaus_dbl_worker() 111 | workers.blacklist_dbl_worker() 112 | 113 | print(colored.stylize(f"\n--[ WHOIS for {arg} ]--", colored.attr("bold"))) 114 | workers.whois_query(arg) 115 | 116 | 117 | def geomap_output(): 118 | print(colored.stylize("--[ GeoIP Map File ]--", colored.attr("bold"))) 119 | time_format = "%d %B %Y %H:%M:%S" 120 | try: 121 | ip_map_file = prog_root.joinpath("geomap/ip_map.html").resolve(strict=True) 122 | except FileNotFoundError: 123 | logger.warning("[-] Geolocation map file was not created/does not exist.\n") 124 | else: 125 | ip_map_timestamp = datetime.fromtimestamp(os.path.getctime(ip_map_file)) 126 | logger.info(f"> Geolocation map file created: {ip_map_file} [{ip_map_timestamp.strftime(time_format)}]\n") 127 | 128 | 129 | def main(settings): 130 | 131 | # Parse the arguments from the command line. 132 | args = argparser()[0] 133 | parser = argparser()[1] 134 | query = args.q 135 | 136 | # Initialize utilities 137 | workers = Workers(query) 138 | 139 | print(f"\n{Fore.GREEN}[+] Running checks...{Style.RESET_ALL}") 140 | 141 | if args.log: 142 | if not os.path.exists("logfile"): 143 | os.mkdir("logfile") 144 | dt_stamp = datetime.now().strftime("%Y-%m-%d_%H%M%S") 145 | handlers = logging.FileHandler(f"logfile/logfile_{dt_stamp}.txt", "w", "utf-8") 146 | handlers.setFormatter(logging.Formatter("[%(asctime)s %(levelname)s] %(message)s", datefmt="%m/%d/%Y %I:%M:%S")) 147 | logger.addHandler(handlers) 148 | 149 | if args.fg: 150 | map_free_geo(query) 151 | 152 | if args.mx: 153 | multi_map_arg(arg=args.mx[0]) 154 | 155 | if args.vt: 156 | vt_arg(query, settings, workers) 157 | 158 | if DOMAIN.findall(query) and not EMAIL.findall(query): 159 | domain_arg(workers, query) 160 | 161 | elif IP.findall(query): 162 | workers.query_ip(query) 163 | 164 | elif NET.findall(query): 165 | print(colored.stylize("\n--[ Querying NetBlock Blacklists ]--", colored.attr("bold"))) 166 | workers.blacklist_netblock_worker() 167 | 168 | else: 169 | print(f"{Fore.YELLOW}[!] Please enter a valid query -- Domain or IP address{Style.RESET_ALL}") 170 | print("=" * 60, "\n") 171 | parser.print_help() 172 | parser.exit() 173 | 174 | # ---[ Results output ]------------------------------- 175 | print(colored.stylize("\n--[ Results ]--", colored.attr("bold"))) 176 | totals = workers.dnsbl_matches + workers.bl_matches 177 | bl_totals = workers.bl_matches 178 | if totals == 0: 179 | logger.info(f"[-] {query} is not listed in any Blacklists\n") 180 | else: 181 | qry_format = Fore.YELLOW + query + Style.BRIGHT + Style.RESET_ALL 182 | 183 | dnsbl_matches_out = f"{Fore.WHITE}{Back.RED}{str(workers.dnsbl_matches)}{Style.BRIGHT}{Style.RESET_ALL}" 184 | bl_totals_out = f"{Fore.WHITE}{Back.RED}{str(bl_totals)}{Style.BRIGHT}{Style.RESET_ALL}" 185 | logger.info(f"> {qry_format} is listed in {dnsbl_matches_out} DNSBL lists and {bl_totals_out} Blacklists\n") 186 | 187 | # ---[ Geo Map output ]------------------------------- 188 | if args.fg or args.mx: 189 | geomap_output() 190 | 191 | 192 | if __name__ == "__main__": 193 | 194 | BANNER = r""" 195 | ________ __ ____ 196 | / ____/ /_ ___ _____/ /__ / __ \___ ____ 197 | / / / __ \/ _ \/ ___/ //_/ / /_/ / _ \/ __ \ 198 | / /___/ / / / __/ /__/ ,< / _, _/ __/ /_/ / 199 | \____/_/ /_/\___/\___/_/|_| /_/ |_|\___/ .___/ 200 | /_/ 201 | """ 202 | 203 | print(f"{Fore.CYAN}{BANNER}{Style.RESET_ALL}") 204 | print("Check IP and Domain Reputation") 205 | 206 | # ---[ Python v3.7+ check ]--- 207 | if sys.version_info[0] == 3 and sys.version_info[1] <= 8: 208 | print("\n[x] Please use python version 3.8 or higher.\n") 209 | 210 | # ---[ Configuration Parser ]--- 211 | yaml = YAML() 212 | settings = prog_root.joinpath("settings.yml") 213 | 214 | # Create settings.yml file if it does not exist. 215 | # fmt: off 216 | TEXT = """# Add API Key after 'api_key:' 217 | # Example: api_key: 23efd1000l3eh444f34l0000kfe56kec0 218 | 219 | VIRUS-TOTAL: 220 | api_key: """ 221 | # fmt: on 222 | 223 | if not settings.exists(): 224 | print(f"\n{Fore.YELLOW}[-]{Fore.RESET} The 'settings.yml' file is missing.") 225 | with open(settings, "w", encoding="utf-8") as fileobj: 226 | fileobj.writelines(TEXT) 227 | print(f"{Fore.GREEN}[+]{Fore.RESET} Created 'settings.yml' file.\n") 228 | 229 | main(settings) 230 | -------------------------------------------------------------------------------- /core/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /core/feeds.py: -------------------------------------------------------------------------------- 1 | IP_LISTS = [ 2 | "http://danger.rulez.sk/projects/bruteforceblocker/blist.php", 3 | "http://malc0de.com/bl/IP_Blacklist.txt", 4 | "http://osint.bambenekconsulting.com/feeds/c2-ipmasterlist.txt", 5 | "http://reputation.alienvault.com/reputation.data", 6 | "http://www.ciarmy.com/list/ci-badguys.txt", 7 | "http://www.ipspamlist.com/public_feeds.csv", 8 | "http://www.malwaredomainlist.com/hostslist/ip.txt", 9 | "https://blocklist.greensnow.co/greensnow.txt", 10 | "https://botvrij.eu/data/ioclist.ip-dst", 11 | "https://botvrij.eu/data/ioclist.url", 12 | "https://feodotracker.abuse.ch/downloads/ipblocklist.txt", 13 | "https://malware.army/api/honey_iplist", 14 | "https://myip.ms/files/blacklist/general/latest_blacklist.txt", 15 | "https://onionoo.torproject.org/details?type=relay&running=true", 16 | "https://openphish.com/feed.txt", 17 | "https://panwdbl.appspot.com/lists/sslabuseiplist.txt", 18 | "https://raw.githubusercontent.com/CriticalPathSecurity/Zeek-Intelligence-Feeds/master/cobaltstrike_ips.intel", 19 | "https://raw.githubusercontent.com/CriticalPathSecurity/Zeek-Intelligence-Feeds/master/tor-exit.intel", 20 | "https://raw.githubusercontent.com/Ultimate-Hosts-Blacklist/Ultimate.Hosts.Blacklist/master/ips/ips0.list", 21 | "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/firewall/extra.txt", 22 | "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/bitcoin_nodes.ipset", 23 | "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/botscout.ipset", 24 | "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/coinbl_hosts.ipset", 25 | "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/cybercrime.ipset", 26 | "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/darklist_de.netset", 27 | "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/stopforumspam.ipset", 28 | "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/voipbl.netset", 29 | "https://raw.githubusercontent.com/mitchellkrogza/Phishing.Database/master/phishing-IPs-ACTIVE.txt", 30 | "https://report.cs.rutgers.edu/DROP/attackers", 31 | "https://reputation.alienvault.com/reputation.generic", 32 | "https://rstcloud.net/free/ioc/ioc_ip_latest.json", 33 | "https://rules.emergingthreats.net/blockrules/compromised-ips.txt", 34 | "https://rules.emergingthreats.net/blockrules/emerging-tor.rules", 35 | "https://sslbl.abuse.ch/blacklist/sslipblacklist.csv", 36 | "https://talosintelligence.com/documents/ip-blacklist", 37 | "https://threatshare.io/feed", 38 | "https://urlhaus.abuse.ch/downloads/csv_recent/", 39 | "https://us-proxy.org", 40 | "https://www.binarydefense.com/banlist.txt", 41 | "https://www.darklist.de/raw.php", 42 | "https://www.myip.ms/files/blacklist/csf/latest_blacklist.txt", 43 | "https://www.socks-proxy.net", 44 | "https://www.sslproxies.org", 45 | "https://www.threatcrowd.org/feeds/ips.txt", 46 | "https://www.threatweb.com/access/Botnet-IPs-High_Confidence_BL.txt", 47 | "https://www.threatweb.com/access/SIEM/OPTIV_HIGH_CONFIDENCE_SIEM_IP_WATCHLIST.txt", 48 | ] 49 | 50 | IP_BLOCKS = [ 51 | "http://feeds.dshield.org/block.txt", 52 | "http://rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt", 53 | "https://www.spamhaus.org/drop/drop.txt", 54 | "https://www.spamhaus.org/drop/edrop.txt", 55 | ] 56 | 57 | DOM_LISTS = [ 58 | "http://mirror1.malwaredomains.com/files/domains.txt", 59 | "http://openphish.com/feed.txt", 60 | "http://www.joewein.net/dl/bl/dom-bl.txt", 61 | "http://www.threatcrowd.org/feeds/domains.txt", 62 | "https://phishing.army/download/phishing_army_blocklist_extended.txt", 63 | "https://quttera.com/lists/malicious", 64 | "https://threatfox.abuse.ch/downloads/hostfile/", 65 | "https://threatshare.io/feed", 66 | "https://urlhaus.abuse.ch/downloads/csv", 67 | "https://www.dshield.org/feeds/suspiciousdomains_Low.txt", 68 | "https://www.malwaredomainlist.com/hostslist/hosts.txt", 69 | "https://www.threatweb.com/access/SIEM/OPTIV_HIGH_CONFIDENCE_SIEM_DOMAIN_WATCHLIST.txt", 70 | ] 71 | 72 | URLS = [ 73 | "https://www.threatweb.com/access/Phishing-URLs-High_Confidence_BL.txt", 74 | ] 75 | 76 | SPAMHAUS_IP = "zen.spamhaus.org" # ip-specifc 77 | 78 | SPAMHAUS_DOM = "dbl.spamhaus.org" # domain-specific 79 | 80 | # https://www.cloudflare.com/ips/ 81 | CFLARE_IPS = [ 82 | "173.245.48.0/20", 83 | "103.21.244.0/22", 84 | "103.22.200.0/22", 85 | "103.31.4.0/22", 86 | "141.101.64.0/18", 87 | "108.162.192.0/18", 88 | "190.93.240.0/20", 89 | "188.114.96.0/20", 90 | "197.234.240.0/22", 91 | "198.41.128.0/17", 92 | "162.158.0.0/15", 93 | "104.16.0.0/12", 94 | "172.64.0.0/13", 95 | ] 96 | 97 | # List Ref: http://multirbl.valli.org/list/ 98 | DNSBL_LISTS = [ 99 | "0spam-n.fusionzero.com", 100 | "0spam.fusionzero.com", 101 | "0spamtrust.fusionzero.com", 102 | "0spamurl.fusionzero.com", 103 | "88.blocklist.zap", 104 | "_vouch.dwl.spamhaus.org", 105 | "abuse-contacts.abusix.org", 106 | "abuse.rfc-clueless.org", 107 | "abuse.spfbl.net", 108 | "access.redhawk.org", 109 | "accredit.habeas.com", 110 | "admin.bl.kundenserver.de", 111 | "all.ascc.dnsbl.bit.nl", 112 | "all.dnsbl.bit.nl", 113 | "all.rbl.webiron.net", 114 | "all.s5h.net", 115 | "all.spam-rbl.fr", 116 | "all.spamrats.com", 117 | "all.v6.ascc.dnsbl.bit.nl", 118 | "asn.routeviews.org", 119 | "aspath.routeviews.org", 120 | "aspews.ext.sorbs.net", 121 | "auth.spamrats.com", 122 | "b.barracudacentral.org", 123 | "babl.rbl.webiron.net", 124 | "backscatter.spameatingmonkey.net", 125 | "bad.psky.me", 126 | "badconf.rhsbl.sorbs.net", 127 | "badnets.spameatingmonkey.net", 128 | "bb.barracudacentral.org", 129 | "bitonly.dnsbl.bit.nl", 130 | "bl-h1.rbl.polspam.pl", 131 | "bl-h2.rbl.polspam.pl", 132 | "bl-h3.rbl.polspam.pl", 133 | "bl-h4.rbl.polspam.pl", 134 | "bl.0spam.org", 135 | "bl.blocklist.de", 136 | "bl.drmx.org", 137 | "bl.fmb.la", 138 | "bl.ipv6.spameatingmonkey.net", 139 | "bl.konstant.no", 140 | "bl.mailspike.net", 141 | "bl.mav.com.br", 142 | "bl.mipspace.com", 143 | "bl.nordspam.com", 144 | "bl.nosolicitado.org", 145 | "bl.nszones.com", 146 | "bl.octopusdns.com", 147 | "bl.rbl.polspam.pl", 148 | "bl.scientificspam.net", 149 | "bl.score.senderscore.com", 150 | "bl.spamcop.net", 151 | "bl.spameatingmonkey.net", 152 | "bl.suomispam.net", 153 | "bl.tiopan.com", 154 | "bl.worst.nosolicitado.org", 155 | "bl6.rbl.polspam.pl", 156 | "black.dnsbl.brukalai.lt", 157 | "black.junkemailfilter.com", 158 | "black.uribl.com", 159 | "blackholes.scconsult.com", 160 | "blackholes.tepucom.nl", 161 | "blacklist.mail.ops.asp.att.net", 162 | "blacklist.mailrelay.att.net", 163 | "blacklist.netcore.co.in", 164 | "blacklist.sci.kun.nl", 165 | "blacklist.sequoia.ops.asp.att.net", 166 | "blacklist.woody.ch", 167 | "block.ascams.com", 168 | "block.dnsbl.sorbs.net", 169 | "bogons.cymru.com", 170 | "bogusmx.rfc-clueless.org", 171 | "bsb.empty.us", 172 | "bsb.spamlookup.net", 173 | "cabl.rbl.webiron.net", 174 | "cbl.abuseat.org", 175 | "cbl.anti-spam.org.cn", 176 | "cblless.anti-spam.org.cn", 177 | "cblplus.anti-spam.org.cn", 178 | "cdl.anti-spam.org.cn", 179 | "cidr.bl.mcafee.com", 180 | "cml.anti-spam.org.cn", 181 | "cnkr.rbl.polspam.pl", 182 | "combined.rbl.msrbl.net", 183 | "communicado.fmb.la", 184 | "crawler.rbl.webiron.net", 185 | "d.bl.zenrbl.pl", 186 | "db.wpbl.info", 187 | "dbl.nordspam.com", 188 | "dbl.spamhaus.org", 189 | "dbl.suomispam.net", 190 | "dbl.tiopan.com", 191 | "dnsbl-0.uceprotect.net", 192 | "dnsbl-1.uceprotect.net", 193 | "dnsbl-2.uceprotect.net", 194 | "dnsbl-3.uceprotect.net", 195 | "dnsbl.abyan.es", 196 | "dnsbl.anticaptcha.net", 197 | "dnsbl.beetjevreemd.nl", 198 | "dnsbl.calivent.com.pe", 199 | "dnsbl.cobion.com", 200 | "dnsbl.cyberlogic.net", 201 | "dnsbl.darklist.de", 202 | "dnsbl.dronebl.org", 203 | "dnsbl.forefront.microsoft.com", 204 | "dnsbl.httpbl.org", 205 | "dnsbl.inps.de", 206 | "dnsbl.isx.fr", 207 | "dnsbl.justspam.org", 208 | "dnsbl.kempt.net", 209 | "dnsbl.madavi.de", 210 | "dnsbl.mcu.edu.tw", 211 | "dnsbl.net.ua", 212 | "dnsbl.openresolvers.org", 213 | "dnsbl.rv-soft.info", 214 | "dnsbl.rymsho.ru", 215 | "dnsbl.sorbs.net", 216 | "dnsbl.spfbl.net", 217 | "dnsbl.tornevall.org", 218 | "dnsbl.zapbl.net", 219 | "dnsbl1.dnsbl.borderware.com", 220 | "dnsbl2.dnsbl.borderware.com", 221 | "dnsbl3.dnsbl.borderware.com", 222 | "dnsbl6.anticaptcha.net", 223 | "dnsblchile.org", 224 | "dnsrbl.org", 225 | "dnsrbl.swinog.ch", 226 | "dnswl.inps.de", 227 | "dnswl.spfbl.net", 228 | "dob.sibl.support-intelligence.net", 229 | "dsn.rfc-clueless.org", 230 | "dul.blackhole.cantv.net", 231 | "dul.dnsbl.borderware.com", 232 | "dul.dnsbl.sorbs.net", 233 | "dul.pacifier.net", 234 | "dunk.dnsbl.tuxad.de", 235 | "dwl.dnswl.org", 236 | "dyn.nszones.com", 237 | "dyn.rbl.polspam.pl", 238 | "dyna.spamrats.com", 239 | "dynip.rothen.com", 240 | "elitist.rfc-clueless.org", 241 | "escalations.dnsbl.sorbs.net", 242 | "eswlrev.dnsbl.rediris.es", 243 | "ex.dnsbl.org", 244 | "exitnodes.tor.dnsbl.sectoor.de", 245 | "feb.spamlab.com", 246 | "fnrbl.fast.net", 247 | "forbidden.icm.edu.pl", 248 | "free.v4bl.org", 249 | "fresh.spameatingmonkey.net", 250 | "fresh10.spameatingmonkey.net", 251 | "fresh15.spameatingmonkey.net", 252 | "fresh30.spameatingmonkey.net", 253 | "freshzero.spameatingmonkey.net", 254 | "fulldom.rfc-clueless.org", 255 | "geobl.spameatingmonkey.net", 256 | "gl.suomispam.net", 257 | "grey.uribl.com", 258 | "hartkore.dnsbl.tuxad.de", 259 | "hil.habeas.com", 260 | "hog.blackhole.cantv.net", 261 | "hostkarma.junkemailfilter.com", 262 | "http.dnsbl.sorbs.net", 263 | "hul.habeas.com", 264 | "iadb.isipp.com", 265 | "iadb2.isipp.com", 266 | "iddb.isipp.com", 267 | "images.rbl.msrbl.net", 268 | "in.dnsbl.org", 269 | "ip.v4bl.org", 270 | "ip4.bl.zenrbl.pl", 271 | "ip4.white.polspam.pl", 272 | "ip6.white.polspam.pl", 273 | "ipbl.zeustracker.abuse.ch", 274 | "ips.backscatterer.org", 275 | "ips.whitelisted.org", 276 | "ipv6.all.dnsbl.bit.nl", 277 | "ipv6.blacklist.woody.ch", 278 | "ipv6.rbl.choon.net", 279 | "ipv6.rwl.choon.net", 280 | "ispmx.pofon.foobar.hu", 281 | "ix.dnsbl.manitu.net", 282 | "korea.services.net", 283 | "krn.korumail.com", 284 | "l1.bbfh.ext.sorbs.net", 285 | "l2.bbfh.ext.sorbs.net", 286 | "l3.bbfh.ext.sorbs.net", 287 | "l4.bbfh.ext.sorbs.net", 288 | "lblip4.rbl.polspam.pl", 289 | "lblip6.rbl.polspam.pl", 290 | "light.dnsbl.brukalai.lt", 291 | "list.bbfh.org", 292 | "list.blogspambl.com", 293 | "list.dnswl.org", 294 | "mail-abuse.blacklist.jippg.org", 295 | "mailsl.dnsbl.rjek.com", 296 | "misc.dnsbl.sorbs.net", 297 | "mtawlrev.dnsbl.rediris.es", 298 | "multi.surbl.org", 299 | "multi.uribl.com", 300 | "nbl.0spam.org", 301 | "netbl.spameatingmonkey.net", 302 | "netblockbl.spamgrouper.to", 303 | "netscan.rbl.blockedservers.com", 304 | "new.dnsbl.sorbs.net", 305 | "new.spam.dnsbl.sorbs.net", 306 | "niprbl.mailcleaner.net", 307 | "no-more-funn.moensted.dk", 308 | "nobl.junkemailfilter.com", 309 | "nomail.rhsbl.sorbs.net", 310 | "noptr.spamrats.com", 311 | "nsbl.fmb.la", 312 | "old.dnsbl.sorbs.net", 313 | "old.spam.dnsbl.sorbs.net", 314 | "openproxy.bls.digibase.ca", 315 | "opm.tornevall.org", 316 | "origin.asn.cymru.com", 317 | "origin.asn.spameatingmonkey.net", 318 | "origin6.asn.cymru.com", 319 | "orvedb.aupads.org", 320 | "pbl.spamhaus.org", 321 | "peer.asn.cymru.com", 322 | "phishing.rbl.msrbl.net", 323 | "plus.bondedsender.org", 324 | "pofon.foobar.hu", 325 | "postmaster.rfc-clueless.org", 326 | "problems.dnsbl.sorbs.net", 327 | "proxies.dnsbl.sorbs.net", 328 | "proxyabuse.bls.digibase.ca", 329 | "psbl.surriel.com", 330 | "public.sarbl.org", 331 | "q.mail-abuse.com", 332 | "query.bondedsender.org", 333 | "query.senderbase.org", 334 | "r.mail-abuse.com", 335 | "rbl.abuse.ro", 336 | "rbl.blakjak.net", 337 | "rbl.blockedservers.com", 338 | "rbl.choon.net", 339 | "rbl.dns-servicios.com", 340 | "rbl.efnet.org", 341 | "rbl.efnetrbl.org", 342 | "rbl.fasthosts.co.uk", 343 | "rbl.interserver.net", 344 | "rbl.iprange.net", 345 | "rbl.jp", 346 | "rbl.lugh.ch", 347 | "rbl.megarbl.net", 348 | "rbl.metunet.com", 349 | "rbl.rbldns.ru", 350 | "rbl.realtimeblacklist.com", 351 | "rbl.schulte.org", 352 | "rbl.spamlab.com", 353 | "rbl.tdk.net", 354 | "rbl.zenon.net", 355 | "rbl2.triumf.ca", 356 | "rblip4.rbl.polspam.pl", 357 | "rblip6.rbl.polspam.pl", 358 | "recent.dnsbl.sorbs.net", 359 | "recent.spam.dnsbl.sorbs.net", 360 | "red.uribl.com", 361 | "relays.bl.kundenserver.de", 362 | "relays.dnsbl.sorbs.net", 363 | "relays.nether.net", 364 | "rep.mailspike.net", 365 | "reputation-domain.rbl.scrolloutf1.com", 366 | "reputation-ip.rbl.scrolloutf1.com", 367 | "reputation-ns.rbl.scrolloutf1.com", 368 | "rf.senderbase.org", 369 | "rhsbl-h.rbl.polspam.pl", 370 | "rhsbl.blackhole.cantv.net", 371 | "rhsbl.rbl.polspam.pl", 372 | "rhsbl.rymsho.ru", 373 | "rhsbl.scientificspam.net", 374 | "rhsbl.sorbs.net", 375 | "rhsbl.zapbl.net", 376 | "rot.blackhole.cantv.net", 377 | "rsbl.aupads.org", 378 | "rwl.choon.net", 379 | "sa-accredit.habeas.com", 380 | "sa.fmb.la", 381 | "sa.senderbase.org", 382 | "safe.dnsbl.prs.proofpoint.com", 383 | "safe.dnsbl.sorbs.net", 384 | "sbl-xbl.spamhaus.org", 385 | "sbl.nszones.com", 386 | "sbl.spamdown.org", 387 | "sbl.spamhaus.org", 388 | "schizo-bl.kundenserver.de", 389 | "score.senderscore.com", 390 | "score.spfbl.net", 391 | "short.fmb.la", 392 | "singular.ttk.pte.hu", 393 | "smtp.dnsbl.sorbs.net", 394 | "socks.dnsbl.sorbs.net", 395 | "sohul.habeas.com", 396 | "spam.blackhole.cantv.net", 397 | "spam.dnsbl.anonmails.de", 398 | "spam.dnsbl.sorbs.net", 399 | "spam.pedantic.org", 400 | "spam.rbl.blockedservers.com", 401 | "spam.rbl.msrbl.net", 402 | "spam.spamrats.com", 403 | "spamblock.kundenserver.de", 404 | "spambot.bls.digibase.ca", 405 | "spamguard.leadmon.net", 406 | "spamlist.or.kr", 407 | "spamrbl.imp.ch", 408 | "spamsources.fabel.dk", 409 | "spf.trusted-forwarder.org", 410 | "srn.surgate.net", 411 | "srnblack.surgate.net", 412 | "st.technovision.dk", 413 | "stabl.rbl.webiron.net", 414 | "superblock.ascams.com", 415 | "swl.spamhaus.org", 416 | "tor.dan.me.uk", 417 | "tor.dnsbl.sectoor.de", 418 | "tor.efnet.org", 419 | "torexit.dan.me.uk", 420 | "torserver.tor.dnsbl.sectoor.de", 421 | "truncate.gbudb.net", 422 | "trusted.nether.net", 423 | "ubl.nszones.com", 424 | "ubl.unsubscore.com", 425 | "unsure.nether.net", 426 | "uri.blacklist.woody.ch", 427 | "uribl.abuse.ro", 428 | "uribl.mailcleaner.net", 429 | "uribl.pofon.foobar.hu", 430 | "uribl.spameatingmonkey.net", 431 | "uribl.swinog.ch", 432 | "uribl.zeustracker.abuse.ch", 433 | "urired.spameatingmonkey.net", 434 | "url.0spam.org", 435 | "urlsl.dnsbl.rjek.com", 436 | "v4.fullbogons.cymru.com", 437 | "v6.fullbogons.cymru.com", 438 | "virus.rbl.msrbl.net", 439 | "vote.drbl.caravan.ru", 440 | "vote.drbl.gremlin.ru", 441 | "wadb.isipp.com", 442 | "wbl.triumf.ca", 443 | "web.dnsbl.sorbs.net", 444 | "web.rbl.msrbl.net", 445 | "white.dnsbl.brukalai.lt", 446 | "white.uribl.com", 447 | "whitelist.rbl.ispa.at", 448 | "whitelist.sci.kun.nl", 449 | "whitelist.surriel.com", 450 | "whois.rfc-clueless.org", 451 | "wl.mailspike.net", 452 | "wl.nszones.com", 453 | "work.drbl.caravan.ru", 454 | "work.drbl.gremlin.ru", 455 | "wormrbl.imp.ch", 456 | "worms-bl.kundenserver.de", 457 | "xbl.spamhaus.org", 458 | "z.mailspike.net", 459 | "zen.spamhaus.org", 460 | "zombie.dnsbl.sorbs.net", 461 | "zz.countries.nerd.dk", 462 | ] 463 | -------------------------------------------------------------------------------- /core/geomap.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | from ipaddress import IPv4Address 4 | from pathlib import Path 5 | 6 | import colored 7 | import dns.resolver 8 | import requests 9 | from folium import Map, Marker 10 | 11 | from core.utils import DOMAIN, IP, Helpers, Workers, logger 12 | 13 | helpers = Helpers() 14 | 15 | # Working program directories 16 | prog_root = Path(os.path.dirname(os.path.dirname(__file__))) 17 | geomap_root = prog_root / "geomap" 18 | 19 | # Create the geomap directory 20 | if not os.path.exists(geomap_root): 21 | os.mkdir(geomap_root) 22 | 23 | # Working files 24 | ip_map_file = os.path.join(geomap_root, "ip_map.html") 25 | multi_map_file = os.path.join(geomap_root, "multi_map.html") 26 | 27 | 28 | def geo_resolver(qry, whois=None): 29 | resolver = dns.resolver.Resolver(configure=False) 30 | resolver.nameservers = ["1.1.1.1", "8.8.8.8", "9.9.9.9"] 31 | try: 32 | dns_resp = list(resolver.query(qry, "A"))[-1] 33 | except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN, dns.resolver.NoNameservers): 34 | pass 35 | else: 36 | if whois: 37 | workers = Workers(qry) 38 | return workers.get_dns_info(dns_resp, qry) 39 | return dns_resp 40 | 41 | 42 | def map_free_geo(qry): 43 | if DOMAIN.findall(qry): 44 | qry = geo_resolver(qry) 45 | 46 | if qry is not None: 47 | freegeoip = f"https://freegeoip.live/json/{qry}" 48 | try: 49 | req = requests.get(freegeoip) 50 | req.raise_for_status() 51 | except ConnectionError as err: 52 | logger.warning(f"[error] {err}\n") 53 | else: 54 | if req.status_code == 200: 55 | map_maker(req, qry) 56 | 57 | 58 | def map_maker(req, qry): 59 | data = json.loads(req.content.decode("utf-8")) 60 | lat = data["latitude"] 61 | lon = data["longitude"] 62 | mapobj = Map(location=[lat, lon], zoom_start=3) 63 | Marker(location=[lat, lon], popup=qry).add_to(mapobj) 64 | mapobj.save(ip_map_file) 65 | 66 | 67 | def multi_map(input_file): 68 | os.chdir(geomap_root) 69 | file_path = os.path.abspath(os.pardir) 70 | input_file = f"{file_path}/{input_file}" 71 | mapobj = Map(location=[40, -5], zoom_start=3) 72 | 73 | with open(input_file, encoding="utf-8") as file_obj: 74 | line = [line.strip() for line in file_obj.readlines()] 75 | for address in line: 76 | workers = Workers(address) 77 | if DOMAIN.findall(address): 78 | print(colored.stylize("\n--[ Querying Domain Blacklists ]--", colored.attr("bold"))) 79 | workers.spamhaus_dbl_worker() 80 | workers.blacklist_dbl_worker() 81 | if workers.whois_query(address): 82 | print(workers.whois_query(address)) 83 | 84 | qry = geo_resolver(address) 85 | if qry is not None: 86 | logger.success(f"[+] Mapping {address} -> {qry}") 87 | try: 88 | freegeoip = f"https://freegeoip.live/json/{qry}" 89 | req = requests.get(freegeoip) 90 | req.raise_for_status() 91 | except ConnectionError as err: 92 | logger.warning(f"[error] {err}\n") 93 | else: 94 | data = json.loads(req.content.decode("utf-8")) 95 | lat = data["latitude"] 96 | lon = data["longitude"] 97 | html = f"""{address}
98 | {qry}""" 99 | Marker(location=[lat, lon], popup=html).add_to(mapobj) 100 | mapobj.save(multi_map_file) 101 | 102 | if IP.findall(address) and IPv4Address(address): 103 | workers.query_ip(address) 104 | if address is not None: 105 | logger.success(f"[+] Mapping {address}") 106 | try: 107 | freegeoip = f"https://freegeoip.live/json/{address}" 108 | req = requests.get(freegeoip) 109 | req.raise_for_status() 110 | except ConnectionError as err: 111 | logger.warning(f"[error] {err}\n") 112 | else: 113 | data = json.loads(req.content.decode("utf-8")) 114 | lat = data["latitude"] 115 | lon = data["longitude"] 116 | Marker(location=[lat, lon], popup=address).add_to(mapobj) 117 | mapobj.save(multi_map_file) 118 | -------------------------------------------------------------------------------- /core/tlds.txt: -------------------------------------------------------------------------------- 1 | aaa|aarp|abarth|abb|abbott|abbvie|abc|able|abogado|abudhabi|ac|academy|accenture|accountant|accountants|aco|active|actor|ad|adac|ads|adult|ae|aeg|aero|aetna|af|afamilycompany|afl|africa|ag|agakhan|agency|ai|aig|aigo|airbus|airforce|airtel|akdn|al|alfaromeo|alibaba|alipay|allfinanz|allstate|ally|alsace|alstom|am|americanexpress|americanfamily|amex|amfam|amica|amsterdam|analytics|android|anquan|anz|ao|aol|apartments|app|apple|aq|aquarelle|ar|arab|aramco|archi|army|arpa|art|arte|as|asda|asia|associates|at|athleta|attorney|au|auction|audi|audible|audio|auspost|author|auto|autos|avianca|aw|aws|ax|axa|az|azure|ba|baby|baidu|banamex|bananarepublic|band|bank|bar|barcelona|barclaycard|barclays|barefoot|bargains|baseball|basketball|bauhaus|bayern|bb|bbc|bbt|bbva|bcg|bcn|bd|be|beats|beauty|beer|bentley|berlin|best|bestbuy|bet|bf|bg|bh|bharti|bi|bible|bid|bike|bing|bingo|bio|biz|bj|black|blackfriday|blanco|blockbuster|blog|bloomberg|blue|bm|bms|bmw|bn|bnl|bnpparibas|bo|boats|boehringer|bofa|bom|bond|boo|book|booking|bosch|bostik|boston|bot|boutique|box|br|bradesco|bridgestone|broadway|broker|brother|brussels|bs|bt|budapest|bugatti|build|builders|business|buy|buzz|bv|bw|by|bz|bzh|ca|cab|cafe|cal|call|calvinklein|cam|camera|camp|cancerresearch|canon|capetown|capital|capitalone|car|caravan|cards|care|career|careers|cars|cartier|casa|case|caseih|cash|casino|cat|catering|catholic|cba|cbn|cbre|cbs|cc|cd|ceb|center|ceo|cern|cf|cfa|cfd|cg|ch|chanel|channel|charity|chase|chat|cheap|chintai|christmas|chrome|chrysler|church|ci|cipriani|circle|cisco|citadel|citi|citic|city|cityeats|ck|cl|claims|cleaning|click|clinic|clinique|clothing|cloud|club|clubmed|cm|cn|co|coach|codes|coffee|college|cologne|com|comcast|commbank|community|company|compare|computer|comsec|condos|construction|consulting|contact|contractors|cooking|cookingchannel|cool|coop|corsica|country|coupon|coupons|courses|cr|credit|creditcard|creditunion|cricket|crown|crs|cruise|cruises|csc|cu|cuisinella|cv|cw|cx|cy|cymru|cyou|cz|dabur|dad|dance|data|date|dating|datsun|day|dclk|dds|de|deal|dealer|deals|degree|delivery|dell|deloitte|delta|democrat|dental|dentist|desi|design|dev|dhl|diamonds|diet|digital|direct|directory|discount|discover|dish|diy|dj|dk|dm|dnp|do|docs|doctor|dodge|dog|doha|domains|dot|download|drive|dtv|dubai|duck|dunlop|duns|dupont|durban|dvag|dvr|dz|earth|eat|ec|eco|edeka|edu|education|ee|eg|email|emerck|energy|engineer|engineering|enterprises|epost|epson|equipment|er|ericsson|erni|es|esq|estate|esurance|et|etisalat|eu|eurovision|eus|events|everbank|exchange|expert|exposed|express|extraspace|fage|fail|fairwinds|faith|family|fan|fans|farm|farmers|fashion|fast|fedex|feedback|ferrari|ferrero|fi|fiat|fidelity|fido|film|final|finance|financial|fire|firestone|firmdale|fish|fishing|fit|fitness|fj|fk|flickr|flights|flir|florist|flowers|fly|fm|fo|foo|food|foodnetwork|football|ford|forex|forsale|forum|foundation|fox|fr|free|fresenius|frl|frogans|frontdoor|frontier|ftr|fujitsu|fujixerox|fun|fund|furniture|futbol|fyi|ga|gal|gallery|gallo|gallup|game|games|gap|garden|gb|gbiz|gd|gdn|ge|gea|gent|genting|george|gf|gg|ggee|gh|gi|gift|gifts|gives|giving|gl|glade|glass|gle|global|globo|gm|gmail|gmbh|gmo|gmx|gn|godaddy|gold|goldpoint|golf|goo|goodyear|goog|google|gop|got|gov|gp|gq|gr|grainger|graphics|gratis|green|gripe|grocery|group|gs|gt|gu|guardian|gucci|guge|guide|guitars|guru|gw|gy|hair|hamburg|hangout|haus|hbo|hdfc|hdfcbank|health|healthcare|help|helsinki|here|hermes|hgtv|hiphop|hisamitsu|hitachi|hiv|hk|hkt|hm|hn|hockey|holdings|holiday|homedepot|homegoods|homes|homesense|honda|honeywell|horse|hospital|host|hosting|hot|hoteles|hotels|hotmail|house|how|hr|hsbc|ht|hu|hughes|hyatt|hyundai|ibm|icbc|ice|icu|id|ie|ieee|ifm|ikano|il|im|imamat|imdb|immo|immobilien|in|inc|industries|infiniti|info|ing|ink|institute|insurance|insure|int|intel|international|intuit|investments|io|ipiranga|iq|ir|irish|is|iselect|ismaili|ist|istanbul|it|itau|itv|iveco|jaguar|java|jcb|jcp|je|jeep|jetzt|jewelry|jio|jll|jm|jmp|jnj|jo|jobs|joburg|jot|joy|jp|jpmorgan|jprs|juegos|juniper|kaufen|kddi|ke|kerryhotels|kerrylogistics|kerryproperties|kfh|kg|kh|ki|kia|kim|kinder|kindle|kitchen|kiwi|km|kn|koeln|komatsu|kosher|kp|kpmg|kpn|kr|krd|kred|kuokgroup|kw|ky|kyoto|kz|la|lacaixa|ladbrokes|lamborghini|lamer|lancaster|lancia|lancome|land|landrover|lanxess|lasalle|lat|latino|latrobe|law|lawyer|lb|lc|lds|lease|leclerc|lefrak|legal|lego|lexus|lgbt|li|liaison|lidl|life|lifeinsurance|lifestyle|lighting|like|lilly|limited|limo|lincoln|linde|link|lipsy|live|living|lixil|lk|llc|loan|loans|locker|locus|loft|lol|london|lotte|lotto|love|lpl|lplfinancial|lr|ls|lt|ltd|ltda|lu|lundbeck|lupin|luxe|luxury|lv|ly|ma|macys|madrid|maif|maison|makeup|man|management|mango|map|market|marketing|markets|marriott|marshalls|maserati|mattel|mba|mc|mckinsey|md|me|med|media|meet|melbourne|meme|memorial|men|menu|merckmsd|metlife|mg|mh|miami|microsoft|mil|mini|mint|mit|mitsubishi|mk|ml|mlb|mls|mm|mma|mn|mo|mobi|mobile|mobily|moda|moe|moi|mom|monash|money|monster|mopar|mormon|mortgage|moscow|moto|motorcycles|mov|movie|movistar|mp|mq|mr|ms|msd|mt|mtn|mtr|mu|museum|mutual|mv|mw|mx|my|mz|na|nab|nadex|nagoya|name|nationwide|natura|navy|nba|nc|ne|nec|net|netbank|netflix|network|neustar|new|newholland|news|next|nextdirect|nexus|nf|nfl|ng|ngo|nhk|ni|nico|nike|nikon|ninja|nissan|nissay|nl|no|nokia|northwesternmutual|norton|now|nowruz|nowtv|np|nr|nra|nrw|ntt|nu|nyc|nz|obi|observer|off|office|okinawa|olayan|olayangroup|oldnavy|ollo|om|omega|one|ong|onl|online|onyourside|ooo|open|oracle|orange|org|organic|origins|osaka|otsuka|ott|ovh|pa|page|panasonic|paris|pars|partners|parts|party|passagens|pay|pccw|pe|pet|pf|pfizer|pg|ph|pharmacy|phd|philips|phone|photo|photography|photos|physio|piaget|pics|pictet|pictures|pid|pin|ping|pink|pioneer|pizza|pk|pl|place|play|playstation|plumbing|plus|pm|pn|pnc|pohl|poker|politie|porn|post|pr|pramerica|praxi|press|prime|pro|prod|productions|prof|progressive|promo|properties|property|protection|pru|prudential|ps|pt|pub|pw|pwc|py|qa|qpon|quebec|quest|qvc|racing|radio|raid|re|read|realestate|realtor|realty|recipes|red|redstone|redumbrella|rehab|reise|reisen|reit|reliance|ren|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rexroth|rich|richardli|ricoh|rightathome|ril|rio|rip|rmit|ro|rocher|rocks|rodeo|rogers|room|rs|rsvp|ru|rugby|ruhr|run|rw|rwe|ryukyu|sa|saarland|safe|safety|sakura|sale|salon|samsclub|samsung|sandvik|sandvikcoromant|sanofi|sap|sarl|sas|save|saxo|sb|sbi|sbs|sc|sca|scb|schaeffler|schmidt|scholarships|school|schule|schwarz|science|scjohnson|scor|scot|sd|se|search|seat|secure|security|seek|select|sener|services|ses|seven|sew|sex|sexy|sfr|sg|sh|shangrila|sharp|shaw|shell|shia|shiksha|shoes|shop|shopping|shouji|show|showtime|shriram|si|silk|sina|singles|site|sj|sk|ski|skin|sky|skype|sl|sling|sm|smart|smile|sn|sncf|so|soccer|social|softbank|software|sohu|solar|solutions|song|sony|soy|space|sport|spot|spreadbetting|sr|srl|srt|st|stada|staples|star|starhub|statebank|statefarm|stc|stcgroup|stockholm|storage|store|stream|studio|study|style|su|sucks|supplies|supply|support|surf|surgery|suzuki|sv|swatch|swiftcover|swiss|sx|sy|sydney|symantec|systems|sz|tab|taipei|talk|taobao|target|tatamotors|tatar|tattoo|tax|taxi|tc|tci|td|tdk|team|tech|technology|tel|telefonica|temasek|tennis|teva|tf|tg|th|thd|theater|theatre|tiaa|tickets|tienda|tiffany|tips|tires|tirol|tj|tjmaxx|tjx|tk|tkmaxx|tl|tm|tmall|tn|to|today|tokyo|tools|top|toray|toshiba|total|tours|town|toyota|toys|tr|trade|trading|training|travel|travelchannel|travelers|travelersinsurance|trust|trv|tt|tube|tui|tunes|tushu|tv|tvs|tw|tz|ua|ubank|ubs|uconnect|ug|uk|unicom|university|uno|uol|ups|us|uy|uz|va|vacations|vana|vanguard|vc|ve|vegas|ventures|verisign|versicherung|vet|vg|vi|viajes|video|vig|viking|villas|vin|vip|virgin|visa|vision|vistaprint|viva|vivo|vlaanderen|vn|vodka|volkswagen|volvo|vote|voting|voto|voyage|vu|vuelos|wales|walmart|walter|wang|wanggou|warman|watch|watches|weather|weatherchannel|webcam|weber|website|wed|wedding|weibo|weir|wf|whoswho|wien|wiki|williamhill|win|windows|wine|winners|wme|wolterskluwer|woodside|work|works|world|wow|ws|wtc|wtf|xbox|xerox|xfinity|xihuan|xin|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--30rr7y|xn--3bst00m|xn--3ds443g|xn--3e0b707e|xn--3hcrj9c|xn--3oq18vl8pn36a|xn--3pxu8k|xn--42c2d9a|xn--45br5cyl|xn--45brj9c|xn--45q11c|xn--4gbrim|xn--54b7fta0cc|xn--55qw42g|xn--55qx5d|xn--5su34j936bgsg|xn--5tzm5g|xn--6frz82g|xn--6qq986b3xl|xn--80adxhks|xn--80ao21a|xn--80aqecdr1a|xn--80asehdb|xn--80aswg|xn--8y0a063a|xn--90a3ac|xn--90ae|xn--90ais|xn--9dbq2a|xn--9et52u|xn--9krt00a|xn--b4w605ferd|xn--bck1b9a5dre4c|xn--c1avg|xn--c2br7g|xn--cck2b3b|xn--cg4bki|xn--clchc0ea0b2g2a9gcd|xn--czr694b|xn--czrs0t|xn--czru2d|xn--d1acj3b|xn--d1alf|xn--e1a4c|xn--eckvdtc9d|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fhbei|xn--fiq228c5hs|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--fjq720a|xn--flw351e|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--fzys8d69uvgm|xn--g2xx48c|xn--gckr3f0f|xn--gecrj9c|xn--gk3at1e|xn--h2breg3eve|xn--h2brj9c|xn--h2brj9c8c|xn--hxt814e|xn--i1b6b1a6a2e|xn--imr513n|xn--io0a7i|xn--j1aef|xn--j1amh|xn--j6w193g|xn--jlq61u9w7b|xn--jvr189m|xn--kcrx77d1x4a|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--kput3i|xn--l1acc|xn--lgbbat1ad8j|xn--mgb9awbf|xn--mgba3a3ejt|xn--mgba3a4f16a|xn--mgba7c0bbn0a|xn--mgbaakc7dvf|xn--mgbaam7a8h|xn--mgbab2bd|xn--mgbai9azgqp6j|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a|xn--mgbbh1a71e|xn--mgbc0a9azcg|xn--mgbca7dzdo|xn--mgberp4a5d4ar|xn--mgbgu82a|xn--mgbi4ecexp|xn--mgbpl2fh|xn--mgbt3dhd|xn--mgbtx2b|xn--mgbx4cd0ab|xn--mix891f|xn--mk1bu44c|xn--mxtq1m|xn--ngbc5azd|xn--ngbe9e0a|xn--ngbrx|xn--node|xn--nqv7f|xn--nqv7fs00ema|xn--nyqy26a|xn--o3cw4h|xn--ogbpf8fl|xn--otu796d|xn--p1acf|xn--p1ai|xn--pbt977c|xn--pgbs0dh|xn--pssy2u|xn--q9jyb4c|xn--qcka1pmc|xn--qxam|xn--rhqv96g|xn--rovu88b|xn--rvc1e0am3e|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--tckwe|xn--tiq49xqyj|xn--unup4y|xn--vermgensberater-ctb|xn--vermgensberatung-pwb|xn--vhquv|xn--vuq861b|xn--w4r85el8fhu5dnra|xn--w4rs40l|xn--wgbh1c|xn--wgbl6a|xn--xhq521b|xn--xkc2al3hye2a|xn--xkc2dl3a5ee0h|xn--y9a3aq|xn--yfro4i67o|xn--ygbi2ammx|xn--zfr164b|xxx|xyz|yachts|yahoo|yamaxun|yandex|ye|yodobashi|yoga|yokohama|you|youtube|yt|yun|za|zappos|zara|zero|zip|zippo|zm|zone|zuerich|zw 2 | -------------------------------------------------------------------------------- /core/utils.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import contextlib 3 | import logging 4 | import pathlib 5 | import random 6 | import re 7 | import sys 8 | import time 9 | from concurrent.futures import ThreadPoolExecutor, as_completed 10 | from http.client import responses 11 | from ipaddress import AddressValueError, IPv4Address, IPv4Network, ip_address 12 | 13 | import asyncwhois 14 | import colored 15 | import coloredlogs 16 | import dns.resolver 17 | import requests 18 | import verboselogs 19 | from tqdm import tqdm 20 | 21 | from core.feeds import CFLARE_IPS, DNSBL_LISTS, DOM_LISTS, IP_BLOCKS, IP_LISTS, SPAMHAUS_DOM, SPAMHAUS_IP 22 | 23 | logger = verboselogs.VerboseLogger(__name__) 24 | logger.setLevel(logging.INFO) 25 | coloredlogs.install( 26 | level=None, 27 | logger=logger, 28 | fmt="%(message)s", 29 | level_styles={ 30 | "notice": {"color": "black", "bright": True}, 31 | "warning": {"color": "yellow"}, 32 | "success": {"color": "green", "bold": True}, 33 | "error": {"color": "red"}, 34 | }, 35 | ) 36 | 37 | 38 | class Helpers: 39 | # ---[ Regex Parser ]--- 40 | @staticmethod 41 | def regex(_type): 42 | # ref: http://data.iana.org/TLD/tlds-alpha-by-domain.txt 43 | dir_path = pathlib.Path(__file__).parent 44 | with open(dir_path / "tlds.txt", encoding="utf-8") as file_obj: 45 | tlds = file_obj.read() 46 | pattern = dict( 47 | ip_addr=r"(^(\d{1,3}\.){0,3}\d{1,3}$)", 48 | ip_net=r"(^(\d{1,3}\.){0,3}\d{1,3}/\d{1,2}$)", 49 | domain=rf"([A-Za-z0-9]+(?:[\-|\.][A-Za-z0-9]+)*(?:\[\.\]|\.)(?:{tlds}))", 50 | email=r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]{2,5}$)", 51 | url=r"(http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)", 52 | ) 53 | try: 54 | pattern = re.compile(pattern[_type]) 55 | except re.error: 56 | print("[!] Invalid input specified.") 57 | sys.exit(0) 58 | return pattern 59 | 60 | # ---[ Common User-Agents ]--- 61 | @staticmethod 62 | def headers(): 63 | ua_list = [ 64 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 " 65 | "Safari/537.36 Edge/12.246", 66 | "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/43.0", 67 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 " 68 | "Safari/537.36", 69 | "Mozilla/5.0 (X11; Linux i686; rv:30.0) Gecko/20100101 Firefox/42.0", 70 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) " 71 | "Chrome/40.0.2214.38 Safari/537.36", 72 | "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)", 73 | ] 74 | return {"user-agent": random.choice(ua_list)} 75 | 76 | # ---[ File Downloader NO LONGER USED ]--- 77 | @staticmethod 78 | def download_file(url): 79 | local_file = url.split("/")[-1] 80 | try: 81 | resp = requests.get(url, local_file, stream=True) 82 | size = int(resp.headers["content-length"]) 83 | pbar = tqdm( 84 | iterable=resp.iter_content(chunk_size=1024), total=size, unit="B", unit_scale=True, unit_divisor=1024 85 | ) 86 | if resp.status_code == 403: 87 | logger.info(responses[403]) 88 | sys.exit() 89 | elif resp.status_code == 200: 90 | with open(local_file, "wb") as file_obj: 91 | for data in pbar: 92 | file_obj.write(data) 93 | pbar.update(len(data)) 94 | else: 95 | logger.info((resp.status_code, responses[resp.status_code])) 96 | sys.exit() 97 | except requests.exceptions.Timeout: 98 | logger.notice(f"[timeout] {url}") 99 | except requests.exceptions.HTTPError as err: 100 | logger.error(f"[error] {err}") 101 | except requests.exceptions.ConnectionError as err: 102 | logger.error(f"[error] {err}") 103 | except requests.exceptions.RequestException as err: 104 | logger.critical(f"[critical] {err}") 105 | 106 | 107 | # ---[ Helper objects ]--- 108 | helpers = Helpers() 109 | IP = helpers.regex(_type="ip_addr") 110 | NET = helpers.regex(_type="ip_net") 111 | DOMAIN = helpers.regex(_type="domain") 112 | URL = helpers.regex(_type="url") 113 | EMAIL = helpers.regex(_type="email") 114 | 115 | 116 | class Workers: 117 | def __init__(self, qry): 118 | self.query = qry 119 | self.dnsbl_matches = 0 120 | self.bl_matches = 0 121 | 122 | # ---[ Query DNSBL Lists ]--- 123 | def dnsbl_query(self, blacklist): 124 | host = "".join(self.query) 125 | 126 | # Return Codes 127 | codes = [ 128 | "127.0.0.2", 129 | "127.0.0.3", 130 | "127.0.0.4", 131 | "127.0.0.5", 132 | "127.0.0.6", 133 | "127.0.0.7", 134 | "127.0.0.9", 135 | "127.0.1.4", 136 | "127.0.1.5", 137 | "127.0.1.6", 138 | "127.0.0.10", 139 | "127.0.0.11", 140 | "127.0.0.39", 141 | "127.0.1.103", 142 | "127.0.1.104", 143 | "127.0.1.105", 144 | "127.0.1.106", 145 | ] 146 | 147 | with contextlib.suppress( 148 | dns.resolver.NXDOMAIN, dns.resolver.Timeout, dns.resolver.NoNameservers, dns.resolver.NoAnswer 149 | ): 150 | resolver = dns.resolver.Resolver(configure=False) 151 | resolver.nameservers = ["8.8.8.8", "1.1.1.1", "9.9.9.9"] 152 | resolver = dns.resolver.Resolver() 153 | qry = "" 154 | if helpers.regex(_type="ip_addr").findall(self.query): 155 | try: 156 | qry = ip_address(host).reverse_pointer.strip(".in-addr.arpa") + "." + blacklist 157 | except ValueError: 158 | sys.exit(f"{host} is not a valid IP address") 159 | elif helpers.regex(_type="domain").findall(self.query): 160 | qry = ".".join(host.split(".")) + "." + blacklist 161 | answer = resolver.query(qry, "A") 162 | if any(str(answer[0]) in s for s in codes): 163 | logger.info(f"\u2716 {self.query} --> {blacklist}") 164 | self.dnsbl_matches += 1 165 | 166 | def dnsbl_mapper(self): 167 | with ThreadPoolExecutor(max_workers=50) as executor: 168 | dnsbl_map = {executor.submit(self.dnsbl_query, url): url for url in DNSBL_LISTS} 169 | for future in as_completed(dnsbl_map): 170 | future.result() 171 | 172 | def spamhaus_ipbl_worker(self): 173 | self.dnsbl_query(SPAMHAUS_IP) 174 | 175 | def spamhaus_dbl_worker(self): 176 | self.dnsbl_query(SPAMHAUS_DOM) 177 | 178 | def bl_mapper(self, query_type, list_type, list_name): 179 | """Query Blacklists.""" 180 | with ThreadPoolExecutor(max_workers=50) as executor: 181 | mapper = {executor.submit(query_type, url): url for url in list_type} 182 | for future in as_completed(mapper): 183 | future.result() 184 | if self.bl_matches == 0: 185 | logger.info(f"[-] {self.query} is not listed in active {list_name}") 186 | 187 | def blacklist_worker(self, blacklist): 188 | try: 189 | req = requests.get(blacklist, headers=helpers.headers(), timeout=3) 190 | req.encoding = "utf-8" 191 | if match := re.findall(self.query, req.text): 192 | logger.warning(f"\u2716 {self.query} --> {blacklist}") 193 | self.bl_matches += 1 194 | except AddressValueError as err: 195 | logger.error(f"[-] {err}") 196 | except requests.exceptions.Timeout: 197 | logger.notice(f"[-] {blacklist}") 198 | except requests.exceptions.HTTPError as err: 199 | logger.error(f"[-] {err}") 200 | except requests.exceptions.ConnectionError: 201 | logger.error(f"[-] Problem connecting to {blacklist}") 202 | except requests.exceptions.RequestException as err: 203 | logger.critical(f"[critical] {err}") 204 | 205 | def blacklist_query(self, blacklist): 206 | self.blacklist_worker(blacklist) 207 | 208 | def blacklist_dbl_worker(self): 209 | self.bl_mapper(query_type=self.blacklist_query, list_type=DOM_LISTS, list_name="Domain Blacklists") 210 | 211 | def blacklist_ipbl_worker(self): 212 | self.bl_mapper(query_type=self.blacklist_query, list_type=IP_LISTS, list_name="IP Blacklists") 213 | 214 | def blacklist_ipblock_query(self, blacklist): 215 | self.blacklist_worker(blacklist) 216 | 217 | def blacklist_netblock_worker(self): 218 | self.bl_mapper(query_type=self.blacklist_ipblock_query, list_type=IP_BLOCKS, list_name="NetBlock Blacklists") 219 | 220 | def whois_query(self, qry): 221 | try: 222 | dns_resp = list(dns.resolver.resolve(qry, "A")) 223 | except dns.resolver.NXDOMAIN: 224 | logger.error(f"[-] Domain '{qry}' does not appear to be a registered domain\n") 225 | time.sleep(1) # prevents [WinError 10054] 226 | except dns.resolver.NoAnswer: 227 | logger.error(f"[-] No answer for domain {qry}\n") 228 | except dns.resolver.Timeout: 229 | logger.error(f"[-] Timeout for resolving domain {qry}\n") 230 | else: 231 | self.get_dns_info(dns_resp, qry) 232 | 233 | def get_dns_info(self, dns_resp, qry): 234 | print(f"IP Address: {dns_resp[0]}") 235 | 236 | # Check if cloudflare ip 237 | if self.cflare_results(dns_resp[0]): 238 | logger.info("Cloudflare IP: Yes") 239 | else: 240 | logger.info("Cloudflare IP: No") 241 | 242 | loop = asyncio.get_event_loop() 243 | who = loop.run_until_complete(asyncwhois.aio_whois_domain(qry)) 244 | print("Registered to:", who.parser_output["registrant_organization"]) 245 | print("Registrar:", who.parser_output["registrar"]) 246 | print("Organization:", who.parser_output["registrant_organization"]) 247 | print("Updated:", who.parser_output["updated"]) 248 | print("Created:", who.parser_output["created"]) 249 | print("Expires:", who.parser_output["expires"]) 250 | print("Email Address:", who.parser_output["registrant_email"]) 251 | 252 | # ----[ CLOUDFLARE CHECK SECTION ]--- 253 | @staticmethod 254 | def chk_cflare_list(qry): 255 | for net in CFLARE_IPS: 256 | if IPv4Address(qry) in IPv4Network(net): 257 | yield True 258 | 259 | def cflare_results(self, qry): 260 | for ip_address in self.chk_cflare_list(qry): 261 | return ip_address 262 | 263 | @staticmethod 264 | def tc_query(qry): 265 | cymru = f"{qry}.malware.hash.cymru.com" 266 | try: 267 | resolver = dns.resolver.Resolver(configure=False) 268 | resolver.nameservers = ["8.8.8.8", "1.1.1.1", "9.9.9.9"] 269 | answer = resolver.resolve(cymru, "A") 270 | except (dns.resolver.NXDOMAIN, dns.resolver.Timeout, dns.resolver.NoNameservers, dns.resolver.NoAnswer): 271 | pass 272 | else: 273 | if answer: 274 | logger.error("\u2718 malware.hash.cymru.com: MALICIOUS") 275 | 276 | def query_ip(self, qry): 277 | # Check if cloudflare ip 278 | print(colored.stylize("\n--[ Using Cloudflare? ]--", colored.attr("bold"))) 279 | if self.cflare_results(qry): 280 | logger.info("Cloudflare IP: Yes") 281 | else: 282 | logger.info("Cloudflare IP: No") 283 | 284 | print(colored.stylize("\n--[ Querying DNSBL Lists ]--", colored.attr("bold"))) 285 | self.dnsbl_mapper() 286 | self.spamhaus_ipbl_worker() 287 | print(colored.stylize("\n--[ Querying IP Blacklists ]--", colored.attr("bold"))) 288 | self.blacklist_ipbl_worker() 289 | -------------------------------------------------------------------------------- /core/vt_check.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sys 3 | from http.client import responses 4 | 5 | import requests 6 | 7 | from core.utils import Helpers, logger 8 | 9 | helpers = Helpers() 10 | 11 | 12 | class VirusTotalChk: 13 | """https://developers.virustotal.com/v3.0/reference""" 14 | 15 | def __init__(self, api_key=None): 16 | self.api_key = api_key 17 | self.base_url = "https://virustotal.com/api/v3" 18 | self.headers = {"x-apikey": self.api_key, "Accept": "application/json"} 19 | 20 | if api_key is None: 21 | raise SystemExit("Verify that you have provided your API key.") 22 | 23 | def vt_connect(self, url): 24 | """VirusTotal Connection""" 25 | try: 26 | resp = requests.get(url, headers=self.headers, timeout=5) 27 | except requests.exceptions.Timeout: 28 | logger.warning(f"[timeout] {url}") 29 | except requests.exceptions.HTTPError as err: 30 | logger.error(f"[error] {err}") 31 | except requests.exceptions.ConnectionError as err: 32 | logger.error(f"[error] {err}") 33 | except requests.exceptions.RequestException as err: 34 | logger.critical(f"[critical] {err}") 35 | else: 36 | resp.encoding = "utf-8" 37 | if resp.status_code == 401: 38 | sys.exit("[error] Verify that you have provided a valid API key.") 39 | if resp.status_code != 200: 40 | print(f"[error] {resp.status_code} {responses[resp.status_code]}") # nopep8 41 | else: 42 | return resp.json() 43 | return None 44 | 45 | def vt_run(self, scan_type, qry): 46 | url = f"{self.base_url}/{scan_type}/{qry}" 47 | data = json.dumps(self.vt_connect(url)) 48 | if json_resp := json.loads(data): 49 | good = 0 50 | bad = 0 51 | try: 52 | results = json_resp["data"]["attributes"] 53 | except AttributeError: 54 | pass 55 | else: 56 | if results: 57 | for engine, result in results["last_analysis_results"].items(): 58 | if result["category"] == "malicious": 59 | bad += 1 60 | logger.error(f"\u2718 {engine}: {result['category'].upper()}") 61 | else: 62 | good += 1 63 | if bad == 0: 64 | logger.success(f"\u2714 {good} engines deemed '{qry}' as harmless\n") # nopep8 65 | else: 66 | logger.info(f"{bad} engines deemed '{qry}' as malicious\n") 67 | -------------------------------------------------------------------------------- /images/9NDEpnClkF.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dfirsec/check_rep/f5440185483b393b394cc41a62cb50ce2002e2c6/images/9NDEpnClkF.gif -------------------------------------------------------------------------------- /images/geo_ip_map_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dfirsec/check_rep/f5440185483b393b394cc41a62cb50ce2002e2c6/images/geo_ip_map_example.png -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "aiodns" 5 | version = "3.0.0" 6 | description = "Simple DNS resolver for asyncio" 7 | optional = false 8 | python-versions = "*" 9 | files = [ 10 | {file = "aiodns-3.0.0-py3-none-any.whl", hash = "sha256:2b19bc5f97e5c936638d28e665923c093d8af2bf3aa88d35c43417fa25d136a2"}, 11 | {file = "aiodns-3.0.0.tar.gz", hash = "sha256:946bdfabe743fceeeb093c8a010f5d1645f708a241be849e17edfb0e49e08cd6"}, 12 | ] 13 | 14 | [package.dependencies] 15 | pycares = ">=4.0.0" 16 | 17 | [[package]] 18 | name = "aiohttp" 19 | version = "3.8.5" 20 | description = "Async http client/server framework (asyncio)" 21 | optional = false 22 | python-versions = ">=3.6" 23 | files = [ 24 | {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, 25 | {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, 26 | {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, 27 | {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, 28 | {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, 29 | {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, 30 | {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, 31 | {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, 32 | {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, 33 | {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, 34 | {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, 35 | {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, 36 | {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, 37 | {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, 38 | {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, 39 | {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, 40 | {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, 41 | {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, 42 | {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, 43 | {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, 44 | {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, 45 | {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, 46 | {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, 47 | {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, 48 | {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, 49 | {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, 50 | {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, 51 | {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, 52 | {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, 53 | {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, 54 | {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, 55 | {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, 56 | {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, 57 | {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, 58 | {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, 59 | {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, 60 | {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, 61 | {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, 62 | {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, 63 | {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, 64 | {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, 65 | {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, 66 | {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, 67 | {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, 68 | {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, 69 | {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, 70 | {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, 71 | {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, 72 | {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, 73 | {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, 74 | {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, 75 | {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, 76 | {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, 77 | {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, 78 | {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, 79 | {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, 80 | {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, 81 | {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, 82 | {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, 83 | {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, 84 | {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, 85 | {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, 86 | {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, 87 | {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, 88 | {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, 89 | {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, 90 | {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, 91 | {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, 92 | {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, 93 | {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, 94 | {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, 95 | {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, 96 | {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, 97 | {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, 98 | {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, 99 | {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, 100 | {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, 101 | {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, 102 | {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, 103 | {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, 104 | {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, 105 | {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, 106 | {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, 107 | {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, 108 | {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, 109 | {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, 110 | {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, 111 | ] 112 | 113 | [package.dependencies] 114 | aiosignal = ">=1.1.2" 115 | async-timeout = ">=4.0.0a3,<5.0" 116 | attrs = ">=17.3.0" 117 | charset-normalizer = ">=2.0,<4.0" 118 | frozenlist = ">=1.1.1" 119 | multidict = ">=4.5,<7.0" 120 | yarl = ">=1.0,<2.0" 121 | 122 | [package.extras] 123 | speedups = ["Brotli", "aiodns", "cchardet"] 124 | 125 | [[package]] 126 | name = "aiosignal" 127 | version = "1.2.0" 128 | description = "aiosignal: a list of registered asynchronous callbacks" 129 | optional = false 130 | python-versions = ">=3.6" 131 | files = [ 132 | {file = "aiosignal-1.2.0-py3-none-any.whl", hash = "sha256:26e62109036cd181df6e6ad646f91f0dcfd05fe16d0cb924138ff2ab75d64e3a"}, 133 | {file = "aiosignal-1.2.0.tar.gz", hash = "sha256:78ed67db6c7b7ced4f98e495e572106d5c432a93e1ddd1bf475e1dc05f5b7df2"}, 134 | ] 135 | 136 | [package.dependencies] 137 | frozenlist = ">=1.1.0" 138 | 139 | [[package]] 140 | name = "anyio" 141 | version = "3.6.1" 142 | description = "High level compatibility layer for multiple asynchronous event loop implementations" 143 | optional = false 144 | python-versions = ">=3.6.2" 145 | files = [ 146 | {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, 147 | {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, 148 | ] 149 | 150 | [package.dependencies] 151 | idna = ">=2.8" 152 | sniffio = ">=1.1" 153 | 154 | [package.extras] 155 | doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] 156 | test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] 157 | trio = ["trio (>=0.16)"] 158 | 159 | [[package]] 160 | name = "async-timeout" 161 | version = "4.0.2" 162 | description = "Timeout context manager for asyncio programs" 163 | optional = false 164 | python-versions = ">=3.6" 165 | files = [ 166 | {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, 167 | {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, 168 | ] 169 | 170 | [[package]] 171 | name = "asyncwhois" 172 | version = "1.0.1" 173 | description = "asyncio-compatible Python module for WHOIS and RDAP queries." 174 | optional = false 175 | python-versions = ">=3.6" 176 | files = [ 177 | {file = "asyncwhois-1.0.1-py3-none-any.whl", hash = "sha256:2f94298c43ce3ee52c00246edd843429eb1e48b3b87f9cf19ff5a0dc00cbfbb1"}, 178 | {file = "asyncwhois-1.0.1.tar.gz", hash = "sha256:257e3ae19488790475b6e356d06b0d06d7bc90c7514910d679760e9358ae77ce"}, 179 | ] 180 | 181 | [package.dependencies] 182 | python-socks = {version = ">=2.0.2", extras = ["asyncio"]} 183 | tldextract = ">=2.2.0" 184 | whodap = ">=0.1.4" 185 | 186 | [[package]] 187 | name = "attrs" 188 | version = "22.1.0" 189 | description = "Classes Without Boilerplate" 190 | optional = false 191 | python-versions = ">=3.5" 192 | files = [ 193 | {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, 194 | {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, 195 | ] 196 | 197 | [package.extras] 198 | dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] 199 | docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] 200 | tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] 201 | tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] 202 | 203 | [[package]] 204 | name = "branca" 205 | version = "0.5.0" 206 | description = "Generate complex HTML+JS pages with Python" 207 | optional = false 208 | python-versions = ">=3.5" 209 | files = [ 210 | {file = "branca-0.5.0-py3-none-any.whl", hash = "sha256:781ff32bf82979584b0004bd84c254cfccda26bc31b2f7333346d03fb7b97741"}, 211 | {file = "branca-0.5.0.tar.gz", hash = "sha256:e6f2f7eba7dd368ceef8f63822b867f5e11d4d3abdd099a787db9ed2b7065ae1"}, 212 | ] 213 | 214 | [package.dependencies] 215 | jinja2 = "*" 216 | 217 | [[package]] 218 | name = "certifi" 219 | version = "2022.12.7" 220 | description = "Python package for providing Mozilla's CA Bundle." 221 | optional = false 222 | python-versions = ">=3.6" 223 | files = [ 224 | {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, 225 | {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, 226 | ] 227 | 228 | [[package]] 229 | name = "cffi" 230 | version = "1.15.1" 231 | description = "Foreign Function Interface for Python calling C code." 232 | optional = false 233 | python-versions = "*" 234 | files = [ 235 | {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, 236 | {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, 237 | {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, 238 | {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, 239 | {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, 240 | {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, 241 | {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, 242 | {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, 243 | {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, 244 | {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, 245 | {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, 246 | {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, 247 | {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, 248 | {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, 249 | {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, 250 | {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, 251 | {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, 252 | {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, 253 | {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, 254 | {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, 255 | {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, 256 | {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, 257 | {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, 258 | {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, 259 | {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, 260 | {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, 261 | {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, 262 | {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, 263 | {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, 264 | {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, 265 | {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, 266 | {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, 267 | {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, 268 | {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, 269 | {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, 270 | {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, 271 | {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, 272 | {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, 273 | {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, 274 | {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, 275 | {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, 276 | {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, 277 | {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, 278 | {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, 279 | {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, 280 | {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, 281 | {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, 282 | {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, 283 | {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, 284 | {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, 285 | {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, 286 | {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, 287 | {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, 288 | {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, 289 | {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, 290 | {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, 291 | {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, 292 | {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, 293 | {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, 294 | {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, 295 | {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, 296 | {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, 297 | {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, 298 | {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, 299 | ] 300 | 301 | [package.dependencies] 302 | pycparser = "*" 303 | 304 | [[package]] 305 | name = "charset-normalizer" 306 | version = "2.1.0" 307 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 308 | optional = false 309 | python-versions = ">=3.6.0" 310 | files = [ 311 | {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, 312 | {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, 313 | ] 314 | 315 | [package.extras] 316 | unicode-backport = ["unicodedata2"] 317 | 318 | [[package]] 319 | name = "colorama" 320 | version = "0.4.5" 321 | description = "Cross-platform colored terminal text." 322 | optional = false 323 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 324 | files = [ 325 | {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, 326 | {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, 327 | ] 328 | 329 | [[package]] 330 | name = "colored" 331 | version = "1.4.3" 332 | description = "Simple library for color and formatting to terminal" 333 | optional = false 334 | python-versions = "*" 335 | files = [ 336 | {file = "colored-1.4.3.tar.gz", hash = "sha256:b7b48b9f40e8a65bbb54813d5d79dd008dc8b8c5638d5bbfd30fc5a82e6def7a"}, 337 | ] 338 | 339 | [[package]] 340 | name = "coloredlogs" 341 | version = "15.0.1" 342 | description = "Colored terminal output for Python's logging module" 343 | optional = false 344 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 345 | files = [ 346 | {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, 347 | {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, 348 | ] 349 | 350 | [package.dependencies] 351 | humanfriendly = ">=9.1" 352 | 353 | [package.extras] 354 | cron = ["capturer (>=2.4)"] 355 | 356 | [[package]] 357 | name = "dnspython" 358 | version = "2.2.1" 359 | description = "DNS toolkit" 360 | optional = false 361 | python-versions = ">=3.6,<4.0" 362 | files = [ 363 | {file = "dnspython-2.2.1-py3-none-any.whl", hash = "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f"}, 364 | {file = "dnspython-2.2.1.tar.gz", hash = "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e"}, 365 | ] 366 | 367 | [package.extras] 368 | curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] 369 | dnssec = ["cryptography (>=2.6,<37.0)"] 370 | doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.10.0)"] 371 | idna = ["idna (>=2.1,<4.0)"] 372 | trio = ["trio (>=0.14,<0.20)"] 373 | wmi = ["wmi (>=1.5.1,<2.0.0)"] 374 | 375 | [[package]] 376 | name = "filelock" 377 | version = "3.8.0" 378 | description = "A platform independent file lock." 379 | optional = false 380 | python-versions = ">=3.7" 381 | files = [ 382 | {file = "filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"}, 383 | {file = "filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"}, 384 | ] 385 | 386 | [package.extras] 387 | docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"] 388 | testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"] 389 | 390 | [[package]] 391 | name = "folium" 392 | version = "0.12.1.post1" 393 | description = "Make beautiful maps with Leaflet.js & Python" 394 | optional = false 395 | python-versions = ">=3.5" 396 | files = [ 397 | {file = "folium-0.12.1.post1-py2.py3-none-any.whl", hash = "sha256:e856ae1de0b322a719b01ceed64ea16f6f011bd28ed22e954a7f7884313da672"}, 398 | {file = "folium-0.12.1.post1.tar.gz", hash = "sha256:e91e57d8298f3ccf4cce3c5e065bea6eb17033e3c5432b8a22214009c266b2ab"}, 399 | ] 400 | 401 | [package.dependencies] 402 | branca = ">=0.3.0" 403 | jinja2 = ">=2.9" 404 | numpy = "*" 405 | requests = "*" 406 | 407 | [package.extras] 408 | testing = ["pytest"] 409 | 410 | [[package]] 411 | name = "frozenlist" 412 | version = "1.3.1" 413 | description = "A list-like structure which implements collections.abc.MutableSequence" 414 | optional = false 415 | python-versions = ">=3.7" 416 | files = [ 417 | {file = "frozenlist-1.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5f271c93f001748fc26ddea409241312a75e13466b06c94798d1a341cf0e6989"}, 418 | {file = "frozenlist-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c6ef8014b842f01f5d2b55315f1af5cbfde284eb184075c189fd657c2fd8204"}, 419 | {file = "frozenlist-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:219a9676e2eae91cb5cc695a78b4cb43d8123e4160441d2b6ce8d2c70c60e2f3"}, 420 | {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b47d64cdd973aede3dd71a9364742c542587db214e63b7529fbb487ed67cddd9"}, 421 | {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2af6f7a4e93f5d08ee3f9152bce41a6015b5cf87546cb63872cc19b45476e98a"}, 422 | {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a718b427ff781c4f4e975525edb092ee2cdef6a9e7bc49e15063b088961806f8"}, 423 | {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c56c299602c70bc1bb5d1e75f7d8c007ca40c9d7aebaf6e4ba52925d88ef826d"}, 424 | {file = "frozenlist-1.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717470bfafbb9d9be624da7780c4296aa7935294bd43a075139c3d55659038ca"}, 425 | {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:31b44f1feb3630146cffe56344704b730c33e042ffc78d21f2125a6a91168131"}, 426 | {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c3b31180b82c519b8926e629bf9f19952c743e089c41380ddca5db556817b221"}, 427 | {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d82bed73544e91fb081ab93e3725e45dd8515c675c0e9926b4e1f420a93a6ab9"}, 428 | {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49459f193324fbd6413e8e03bd65789e5198a9fa3095e03f3620dee2f2dabff2"}, 429 | {file = "frozenlist-1.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:94e680aeedc7fd3b892b6fa8395b7b7cc4b344046c065ed4e7a1e390084e8cb5"}, 430 | {file = "frozenlist-1.3.1-cp310-cp310-win32.whl", hash = "sha256:fabb953ab913dadc1ff9dcc3a7a7d3dc6a92efab3a0373989b8063347f8705be"}, 431 | {file = "frozenlist-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:eee0c5ecb58296580fc495ac99b003f64f82a74f9576a244d04978a7e97166db"}, 432 | {file = "frozenlist-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0bc75692fb3770cf2b5856a6c2c9de967ca744863c5e89595df64e252e4b3944"}, 433 | {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086ca1ac0a40e722d6833d4ce74f5bf1aba2c77cbfdc0cd83722ffea6da52a04"}, 434 | {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b51eb355e7f813bcda00276b0114c4172872dc5fb30e3fea059b9367c18fbcb"}, 435 | {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74140933d45271c1a1283f708c35187f94e1256079b3c43f0c2267f9db5845ff"}, 436 | {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee4c5120ddf7d4dd1eaf079af3af7102b56d919fa13ad55600a4e0ebe532779b"}, 437 | {file = "frozenlist-1.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97d9e00f3ac7c18e685320601f91468ec06c58acc185d18bb8e511f196c8d4b2"}, 438 | {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6e19add867cebfb249b4e7beac382d33215d6d54476bb6be46b01f8cafb4878b"}, 439 | {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a027f8f723d07c3f21963caa7d585dcc9b089335565dabe9c814b5f70c52705a"}, 440 | {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:61d7857950a3139bce035ad0b0945f839532987dfb4c06cfe160254f4d19df03"}, 441 | {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:53b2b45052e7149ee8b96067793db8ecc1ae1111f2f96fe1f88ea5ad5fd92d10"}, 442 | {file = "frozenlist-1.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bbb1a71b1784e68870800b1bc9f3313918edc63dbb8f29fbd2e767ce5821696c"}, 443 | {file = "frozenlist-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:ab6fa8c7871877810e1b4e9392c187a60611fbf0226a9e0b11b7b92f5ac72792"}, 444 | {file = "frozenlist-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f89139662cc4e65a4813f4babb9ca9544e42bddb823d2ec434e18dad582543bc"}, 445 | {file = "frozenlist-1.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4c0c99e31491a1d92cde8648f2e7ccad0e9abb181f6ac3ddb9fc48b63301808e"}, 446 | {file = "frozenlist-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61e8cb51fba9f1f33887e22488bad1e28dd8325b72425f04517a4d285a04c519"}, 447 | {file = "frozenlist-1.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc2f3e368ee5242a2cbe28323a866656006382872c40869b49b265add546703f"}, 448 | {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58fb94a01414cddcdc6839807db77ae8057d02ddafc94a42faee6004e46c9ba8"}, 449 | {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:022178b277cb9277d7d3b3f2762d294f15e85cd2534047e68a118c2bb0058f3e"}, 450 | {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:572ce381e9fe027ad5e055f143763637dcbac2542cfe27f1d688846baeef5170"}, 451 | {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19127f8dcbc157ccb14c30e6f00392f372ddb64a6ffa7106b26ff2196477ee9f"}, 452 | {file = "frozenlist-1.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42719a8bd3792744c9b523674b752091a7962d0d2d117f0b417a3eba97d1164b"}, 453 | {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2743bb63095ef306041c8f8ea22bd6e4d91adabf41887b1ad7886c4c1eb43d5f"}, 454 | {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fa47319a10e0a076709644a0efbcaab9e91902c8bd8ef74c6adb19d320f69b83"}, 455 | {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52137f0aea43e1993264a5180c467a08a3e372ca9d378244c2d86133f948b26b"}, 456 | {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:f5abc8b4d0c5b556ed8cd41490b606fe99293175a82b98e652c3f2711b452988"}, 457 | {file = "frozenlist-1.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1e1cf7bc8cbbe6ce3881863671bac258b7d6bfc3706c600008925fb799a256e2"}, 458 | {file = "frozenlist-1.3.1-cp38-cp38-win32.whl", hash = "sha256:0dde791b9b97f189874d654c55c24bf7b6782343e14909c84beebd28b7217845"}, 459 | {file = "frozenlist-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:9494122bf39da6422b0972c4579e248867b6b1b50c9b05df7e04a3f30b9a413d"}, 460 | {file = "frozenlist-1.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31bf9539284f39ff9398deabf5561c2b0da5bb475590b4e13dd8b268d7a3c5c1"}, 461 | {file = "frozenlist-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e0c8c803f2f8db7217898d11657cb6042b9b0553a997c4a0601f48a691480fab"}, 462 | {file = "frozenlist-1.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da5ba7b59d954f1f214d352308d1d86994d713b13edd4b24a556bcc43d2ddbc3"}, 463 | {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74e6b2b456f21fc93ce1aff2b9728049f1464428ee2c9752a4b4f61e98c4db96"}, 464 | {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:526d5f20e954d103b1d47232e3839f3453c02077b74203e43407b962ab131e7b"}, 465 | {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b499c6abe62a7a8d023e2c4b2834fce78a6115856ae95522f2f974139814538c"}, 466 | {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab386503f53bbbc64d1ad4b6865bf001414930841a870fc97f1546d4d133f141"}, 467 | {file = "frozenlist-1.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f63c308f82a7954bf8263a6e6de0adc67c48a8b484fab18ff87f349af356efd"}, 468 | {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:12607804084d2244a7bd4685c9d0dca5df17a6a926d4f1967aa7978b1028f89f"}, 469 | {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:da1cdfa96425cbe51f8afa43e392366ed0b36ce398f08b60de6b97e3ed4affef"}, 470 | {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f810e764617b0748b49a731ffaa525d9bb36ff38332411704c2400125af859a6"}, 471 | {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:35c3d79b81908579beb1fb4e7fcd802b7b4921f1b66055af2578ff7734711cfa"}, 472 | {file = "frozenlist-1.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c92deb5d9acce226a501b77307b3b60b264ca21862bd7d3e0c1f3594022f01bc"}, 473 | {file = "frozenlist-1.3.1-cp39-cp39-win32.whl", hash = "sha256:5e77a8bd41e54b05e4fb2708dc6ce28ee70325f8c6f50f3df86a44ecb1d7a19b"}, 474 | {file = "frozenlist-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:625d8472c67f2d96f9a4302a947f92a7adbc1e20bedb6aff8dbc8ff039ca6189"}, 475 | {file = "frozenlist-1.3.1.tar.gz", hash = "sha256:3a735e4211a04ccfa3f4833547acdf5d2f863bfeb01cfd3edaffbc251f15cec8"}, 476 | ] 477 | 478 | [[package]] 479 | name = "geoip2" 480 | version = "4.6.0" 481 | description = "MaxMind GeoIP2 API" 482 | optional = false 483 | python-versions = ">=3.6" 484 | files = [ 485 | {file = "geoip2-4.6.0-py2.py3-none-any.whl", hash = "sha256:745e2d7a665072690056f9566774727da89216c7858793f89804f6945f969714"}, 486 | {file = "geoip2-4.6.0.tar.gz", hash = "sha256:f0e80bce80b06bb38bd08bf4877d5a84e354e932095e6ccfb4d27bb598fa4f83"}, 487 | ] 488 | 489 | [package.dependencies] 490 | aiohttp = ">=3.6.2,<4.0.0" 491 | maxminddb = ">=2.2.0,<3.0.0" 492 | requests = ">=2.24.0,<3.0.0" 493 | urllib3 = ">=1.25.2,<2.0.0" 494 | 495 | [[package]] 496 | name = "h11" 497 | version = "0.12.0" 498 | description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" 499 | optional = false 500 | python-versions = ">=3.6" 501 | files = [ 502 | {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"}, 503 | {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"}, 504 | ] 505 | 506 | [[package]] 507 | name = "httpcore" 508 | version = "0.15.0" 509 | description = "A minimal low-level HTTP client." 510 | optional = false 511 | python-versions = ">=3.7" 512 | files = [ 513 | {file = "httpcore-0.15.0-py3-none-any.whl", hash = "sha256:1105b8b73c025f23ff7c36468e4432226cbb959176eab66864b8e31c4ee27fa6"}, 514 | {file = "httpcore-0.15.0.tar.gz", hash = "sha256:18b68ab86a3ccf3e7dc0f43598eaddcf472b602aba29f9aa6ab85fe2ada3980b"}, 515 | ] 516 | 517 | [package.dependencies] 518 | anyio = "==3.*" 519 | certifi = "*" 520 | h11 = ">=0.11,<0.13" 521 | sniffio = "==1.*" 522 | 523 | [package.extras] 524 | http2 = ["h2 (>=3,<5)"] 525 | socks = ["socksio (==1.*)"] 526 | 527 | [[package]] 528 | name = "httpx" 529 | version = "0.23.0" 530 | description = "The next generation HTTP client." 531 | optional = false 532 | python-versions = ">=3.7" 533 | files = [ 534 | {file = "httpx-0.23.0-py3-none-any.whl", hash = "sha256:42974f577483e1e932c3cdc3cd2303e883cbfba17fe228b0f63589764d7b9c4b"}, 535 | {file = "httpx-0.23.0.tar.gz", hash = "sha256:f28eac771ec9eb4866d3fb4ab65abd42d38c424739e80c08d8d20570de60b0ef"}, 536 | ] 537 | 538 | [package.dependencies] 539 | certifi = "*" 540 | httpcore = ">=0.15.0,<0.16.0" 541 | rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} 542 | sniffio = "*" 543 | 544 | [package.extras] 545 | brotli = ["brotli", "brotlicffi"] 546 | cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<13)"] 547 | http2 = ["h2 (>=3,<5)"] 548 | socks = ["socksio (==1.*)"] 549 | 550 | [[package]] 551 | name = "humanfriendly" 552 | version = "10.0" 553 | description = "Human friendly output for text interfaces using Python" 554 | optional = false 555 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 556 | files = [ 557 | {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, 558 | {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, 559 | ] 560 | 561 | [package.dependencies] 562 | pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} 563 | 564 | [[package]] 565 | name = "idna" 566 | version = "3.3" 567 | description = "Internationalized Domain Names in Applications (IDNA)" 568 | optional = false 569 | python-versions = ">=3.5" 570 | files = [ 571 | {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, 572 | {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, 573 | ] 574 | 575 | [[package]] 576 | name = "jinja2" 577 | version = "3.1.2" 578 | description = "A very fast and expressive template engine." 579 | optional = false 580 | python-versions = ">=3.7" 581 | files = [ 582 | {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, 583 | {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, 584 | ] 585 | 586 | [package.dependencies] 587 | MarkupSafe = ">=2.0" 588 | 589 | [package.extras] 590 | i18n = ["Babel (>=2.7)"] 591 | 592 | [[package]] 593 | name = "markupsafe" 594 | version = "2.1.1" 595 | description = "Safely add untrusted strings to HTML/XML markup." 596 | optional = false 597 | python-versions = ">=3.7" 598 | files = [ 599 | {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, 600 | {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, 601 | {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, 602 | {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, 603 | {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, 604 | {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, 605 | {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, 606 | {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, 607 | {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, 608 | {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, 609 | {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, 610 | {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, 611 | {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, 612 | {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, 613 | {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, 614 | {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, 615 | {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, 616 | {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, 617 | {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, 618 | {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, 619 | {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, 620 | {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, 621 | {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, 622 | {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, 623 | {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, 624 | {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, 625 | {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, 626 | {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, 627 | {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, 628 | {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, 629 | {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, 630 | {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, 631 | {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, 632 | {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, 633 | {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, 634 | {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, 635 | {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, 636 | {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, 637 | {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, 638 | {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, 639 | ] 640 | 641 | [[package]] 642 | name = "maxminddb" 643 | version = "2.2.0" 644 | description = "Reader for the MaxMind DB format" 645 | optional = false 646 | python-versions = ">=3.6" 647 | files = [ 648 | {file = "maxminddb-2.2.0.tar.gz", hash = "sha256:e37707ec4fab115804670e0fb7aedb4b57075a8b6f80052bdc648d3c005184e5"}, 649 | ] 650 | 651 | [[package]] 652 | name = "multidict" 653 | version = "6.0.2" 654 | description = "multidict implementation" 655 | optional = false 656 | python-versions = ">=3.7" 657 | files = [ 658 | {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, 659 | {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, 660 | {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"}, 661 | {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"}, 662 | {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"}, 663 | {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"}, 664 | {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"}, 665 | {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"}, 666 | {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"}, 667 | {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"}, 668 | {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"}, 669 | {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"}, 670 | {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"}, 671 | {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"}, 672 | {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"}, 673 | {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"}, 674 | {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"}, 675 | {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"}, 676 | {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"}, 677 | {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"}, 678 | {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"}, 679 | {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"}, 680 | {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"}, 681 | {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"}, 682 | {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"}, 683 | {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"}, 684 | {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"}, 685 | {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"}, 686 | {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"}, 687 | {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"}, 688 | {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"}, 689 | {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"}, 690 | {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"}, 691 | {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"}, 692 | {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"}, 693 | {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"}, 694 | {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"}, 695 | {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"}, 696 | {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"}, 697 | {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"}, 698 | {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"}, 699 | {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"}, 700 | {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"}, 701 | {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"}, 702 | {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"}, 703 | {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"}, 704 | {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"}, 705 | {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"}, 706 | {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"}, 707 | {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"}, 708 | {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"}, 709 | {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"}, 710 | {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"}, 711 | {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"}, 712 | {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"}, 713 | {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"}, 714 | {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"}, 715 | {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, 716 | {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, 717 | ] 718 | 719 | [[package]] 720 | name = "numpy" 721 | version = "1.23.2" 722 | description = "NumPy is the fundamental package for array computing with Python." 723 | optional = false 724 | python-versions = ">=3.8" 725 | files = [ 726 | {file = "numpy-1.23.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e603ca1fb47b913942f3e660a15e55a9ebca906857edfea476ae5f0fe9b457d5"}, 727 | {file = "numpy-1.23.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:633679a472934b1c20a12ed0c9a6c9eb167fbb4cb89031939bfd03dd9dbc62b8"}, 728 | {file = "numpy-1.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e5226674f6ea79e14e3b91bfbc153fdf3ac13f5cc54ee7bc8fdbe820a32da0"}, 729 | {file = "numpy-1.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdc02c0235b261925102b1bd586579b7158e9d0d07ecb61148a1799214a4afd5"}, 730 | {file = "numpy-1.23.2-cp310-cp310-win32.whl", hash = "sha256:df28dda02c9328e122661f399f7655cdcbcf22ea42daa3650a26bce08a187450"}, 731 | {file = "numpy-1.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:8ebf7e194b89bc66b78475bd3624d92980fca4e5bb86dda08d677d786fefc414"}, 732 | {file = "numpy-1.23.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dc76bca1ca98f4b122114435f83f1fcf3c0fe48e4e6f660e07996abf2f53903c"}, 733 | {file = "numpy-1.23.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ecfdd68d334a6b97472ed032b5b37a30d8217c097acfff15e8452c710e775524"}, 734 | {file = "numpy-1.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5593f67e66dea4e237f5af998d31a43e447786b2154ba1ad833676c788f37cde"}, 735 | {file = "numpy-1.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac987b35df8c2a2eab495ee206658117e9ce867acf3ccb376a19e83070e69418"}, 736 | {file = "numpy-1.23.2-cp311-cp311-win32.whl", hash = "sha256:d98addfd3c8728ee8b2c49126f3c44c703e2b005d4a95998e2167af176a9e722"}, 737 | {file = "numpy-1.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:8ecb818231afe5f0f568c81f12ce50f2b828ff2b27487520d85eb44c71313b9e"}, 738 | {file = "numpy-1.23.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:909c56c4d4341ec8315291a105169d8aae732cfb4c250fbc375a1efb7a844f8f"}, 739 | {file = "numpy-1.23.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8247f01c4721479e482cc2f9f7d973f3f47810cbc8c65e38fd1bbd3141cc9842"}, 740 | {file = "numpy-1.23.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8b97a8a87cadcd3f94659b4ef6ec056261fa1e1c3317f4193ac231d4df70215"}, 741 | {file = "numpy-1.23.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd5b7ccae24e3d8501ee5563e82febc1771e73bd268eef82a1e8d2b4d556ae66"}, 742 | {file = "numpy-1.23.2-cp38-cp38-win32.whl", hash = "sha256:9b83d48e464f393d46e8dd8171687394d39bc5abfe2978896b77dc2604e8635d"}, 743 | {file = "numpy-1.23.2-cp38-cp38-win_amd64.whl", hash = "sha256:dec198619b7dbd6db58603cd256e092bcadef22a796f778bf87f8592b468441d"}, 744 | {file = "numpy-1.23.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4f41f5bf20d9a521f8cab3a34557cd77b6f205ab2116651f12959714494268b0"}, 745 | {file = "numpy-1.23.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:806cc25d5c43e240db709875e947076b2826f47c2c340a5a2f36da5bb10c58d6"}, 746 | {file = "numpy-1.23.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f9d84a24889ebb4c641a9b99e54adb8cab50972f0166a3abc14c3b93163f074"}, 747 | {file = "numpy-1.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c403c81bb8ffb1c993d0165a11493fd4bf1353d258f6997b3ee288b0a48fce77"}, 748 | {file = "numpy-1.23.2-cp39-cp39-win32.whl", hash = "sha256:cf8c6aed12a935abf2e290860af8e77b26a042eb7f2582ff83dc7ed5f963340c"}, 749 | {file = "numpy-1.23.2-cp39-cp39-win_amd64.whl", hash = "sha256:5e28cd64624dc2354a349152599e55308eb6ca95a13ce6a7d5679ebff2962913"}, 750 | {file = "numpy-1.23.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:806970e69106556d1dd200e26647e9bee5e2b3f1814f9da104a943e8d548ca38"}, 751 | {file = "numpy-1.23.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bd879d3ca4b6f39b7770829f73278b7c5e248c91d538aab1e506c628353e47f"}, 752 | {file = "numpy-1.23.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:be6b350dfbc7f708d9d853663772a9310783ea58f6035eec649fb9c4371b5389"}, 753 | {file = "numpy-1.23.2.tar.gz", hash = "sha256:b78d00e48261fbbd04aa0d7427cf78d18401ee0abd89c7559bbf422e5b1c7d01"}, 754 | ] 755 | 756 | [[package]] 757 | name = "pycares" 758 | version = "4.2.2" 759 | description = "Python interface for c-ares" 760 | optional = false 761 | python-versions = "*" 762 | files = [ 763 | {file = "pycares-4.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5dc6418e87729105d93162155793002b3fa95490e2f2df33afec08b0b0d44989"}, 764 | {file = "pycares-4.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9481ee42df7e34c9ef7b2f045e534062b980b2c971677868df9f17730b147ceb"}, 765 | {file = "pycares-4.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05e029e594c27a0066cdb89dfc5bba28ba94e2b27b0ca7aceb94f9aea06812cd"}, 766 | {file = "pycares-4.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0eb203ceedcf7f9865ed3abb6128dfbb3498c5e76342e3c820c4274cc0c8e873"}, 767 | {file = "pycares-4.2.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4a01ba75e8a2947fc0b954850f8db9d52166634a206056febef2f833c8cfa1e"}, 768 | {file = "pycares-4.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:064543e222e3587a92bccae704fcc5f4ce1ba1ce66aac96483c9cf504d554a67"}, 769 | {file = "pycares-4.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a5a28f1d041aa2102bd2512e7361671e4ef46bc927e95b6932ed95cc45273480"}, 770 | {file = "pycares-4.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:650b16f025bd3dad6a331e63bb8c9d55994c1b5d0d289ebe03c0bc16edad114f"}, 771 | {file = "pycares-4.2.2-cp310-cp310-win32.whl", hash = "sha256:f8b76c13275b319b850e28bb9b3f5815de7521b1e0a581453d1acf10011bafef"}, 772 | {file = "pycares-4.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:bcfcafbb376376c9cca6d37a8497dfd6dbd82333bf37627067b34dcaf5039612"}, 773 | {file = "pycares-4.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ae5accd693c6910bbd1a99d1f4551a9e99decd65d792a80f10c27b8fcc32b497"}, 774 | {file = "pycares-4.2.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f1901b309cb5cf7ade5822d74b904f55c49369e4ff9328818e554d4c34b4714"}, 775 | {file = "pycares-4.2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bc61edb98aff9cb4b2e07c25383100b81459a676ca0b0bd5fe77226eb1f850e"}, 776 | {file = "pycares-4.2.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:241155687db7b45cb4ef84a18755ebc78c3ad624fd2578b48ea52ac16a4c8d9f"}, 777 | {file = "pycares-4.2.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:27a21184ba35fff12eec36375d5b064516a0c3401dbf66a7eded7da34c5ca282"}, 778 | {file = "pycares-4.2.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8a376e637ecd79db62761ca40cda080b9383a07d6dedbc799dd1a31e053862d9"}, 779 | {file = "pycares-4.2.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6c411610be8de17cd5257845ebba5104b8e6356c62e66768728985a2ac0e9d1c"}, 780 | {file = "pycares-4.2.2-cp36-cp36m-win32.whl", hash = "sha256:6a5af6443a1cefb36ddca47af37e29cae94a734c6c7cea3eb94e5de5cc2a4f1a"}, 781 | {file = "pycares-4.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a01ab41405dd4dd8449f9323b2dac25e1d856ef02d85c8aedea0130b65275b2a"}, 782 | {file = "pycares-4.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9a2053b34163d13d6d135248c65e71cefce3f25b3611677a1428ec7a57bae856"}, 783 | {file = "pycares-4.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8064eaae5084e5155008b8f9d089055a432ff2115960273fc570f55dccedf666"}, 784 | {file = "pycares-4.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc045040c094068d5de28e61a6fd0babe8522e8f61829839b893f7aff928173b"}, 785 | {file = "pycares-4.2.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:135a356d52773f02d7babd2b38ad64493418363274972cc786fdce847875ca03"}, 786 | {file = "pycares-4.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:512fb2c04c28e0e5a7de0b61624ab9c15d2df52db113f63a0aba6c6f1174b92f"}, 787 | {file = "pycares-4.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eb374525c6231920509612f197ca47bdaa6ec9a0728aa199ba536dc0c25bb55"}, 788 | {file = "pycares-4.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:47c6e18bbe6f2f4ce42fbdfa4ab2602268590f76110f06af60d02f964b72fada"}, 789 | {file = "pycares-4.2.2-cp37-cp37m-win32.whl", hash = "sha256:a2c7fb5d3cb633e3f23344194da9b5caa54eb40da34dbe4465f0ebcede2e1e1a"}, 790 | {file = "pycares-4.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:90f374fae2af5eb728841b4c2a0c8038a6889ba2a5a421e4c4e4e0f15bcc5912"}, 791 | {file = "pycares-4.2.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c0a7e0f9371c47cf028e2389f11385e906ba2797900419509adfa86587a2ac"}, 792 | {file = "pycares-4.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0fb3944af9492cfde6e1167780c9b8a701a56cf7d3fb29086cfb906b8261648f"}, 793 | {file = "pycares-4.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7466315e76ab0ca4dc1354f3d7cb53f6d99d365b3778d9849e52643270beb6f2"}, 794 | {file = "pycares-4.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f58398bd9fa99cc2dd79f7fecddc85837ccb452d673168037ea603b15aa11b"}, 795 | {file = "pycares-4.2.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47eae9809826cea5c0eb08eec9da584dd6330e51c075c2f6963ca2067555cd07"}, 796 | {file = "pycares-4.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6cbd4df536d2c32d2d74b854db25f1d15cc61cdd182b03206afbd7ccbe7b8f11"}, 797 | {file = "pycares-4.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3e4519bc51b744331c968eef0bd0071ca9c3e5863b8b8c1d99540ab8bfb04235"}, 798 | {file = "pycares-4.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5e2af8ca3bc49894a87d2b5629b993c22b0e602ecb7fd2fad660ebb9be584829"}, 799 | {file = "pycares-4.2.2-cp38-cp38-win32.whl", hash = "sha256:f6b5360e2278fae1e79479a4b56198fc7faf46ab350da18756c4de789835dbcd"}, 800 | {file = "pycares-4.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:4304e5f0c10281abcee3c2547140a6b280c70866f2828956c9bcb2de6cffa211"}, 801 | {file = "pycares-4.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9155e95cbe26b4b57ca691e9d8bfb5a002c7ce14ac02ddfcfe7849d4d349badb"}, 802 | {file = "pycares-4.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:612a20514685a3d999dd0a99eede9da851be11171d599b211fac287eee452ff1"}, 803 | {file = "pycares-4.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:075d4bdde10590a2d0456eab20028aab997207e45469d30dd01a4a65caa7f8da"}, 804 | {file = "pycares-4.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6eebdf34477c9bfb00497f8e58a674fd22b348bd928d19d29c84e8923554e1"}, 805 | {file = "pycares-4.2.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55d39f2c38d1285d1ae248b9d2d965b161dcf51a4b6eacf97ff056da6f09dd30"}, 806 | {file = "pycares-4.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:64261640fd52910e7960f30888abeca4e6a7a91371d351ccebc70ac1625ca74e"}, 807 | {file = "pycares-4.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:72184b1510866c9bc97a6daca7d8218a6954c4a78640197f0840e604ba1182f9"}, 808 | {file = "pycares-4.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02fdf5ce48b21da6eafc5cb4508d344a0d48ac1a31e8df178f7c2fb548fcbc14"}, 809 | {file = "pycares-4.2.2-cp39-cp39-win32.whl", hash = "sha256:fe8e0f8ed7fd795868bfc2211e345963174a9f4d1e2125753e1715a60441c8a0"}, 810 | {file = "pycares-4.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:bb09c084de909206e6db1f014d4c6d662c7df04194df31f4831088d426afe8f1"}, 811 | {file = "pycares-4.2.2.tar.gz", hash = "sha256:e1f57a8004370080694bd6fb969a1ffc9171a59c6824d54f791c1b2e4d298385"}, 812 | ] 813 | 814 | [package.dependencies] 815 | cffi = ">=1.5.0" 816 | 817 | [package.extras] 818 | idna = ["idna (>=2.1)"] 819 | 820 | [[package]] 821 | name = "pycparser" 822 | version = "2.21" 823 | description = "C parser in Python" 824 | optional = false 825 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 826 | files = [ 827 | {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, 828 | {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, 829 | ] 830 | 831 | [[package]] 832 | name = "pyreadline3" 833 | version = "3.4.1" 834 | description = "A python implementation of GNU readline." 835 | optional = false 836 | python-versions = "*" 837 | files = [ 838 | {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, 839 | {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, 840 | ] 841 | 842 | [[package]] 843 | name = "python-socks" 844 | version = "2.0.3" 845 | description = "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python" 846 | optional = false 847 | python-versions = "*" 848 | files = [ 849 | {file = "python-socks-2.0.3.tar.gz", hash = "sha256:e3a9ca8e554733862ce4d8ce1d10efb480fd3a3acdafd03393943ec00c98ba8a"}, 850 | {file = "python_socks-2.0.3-py3-none-any.whl", hash = "sha256:950723f27d2cf401e193a9e0a0d45baab848341298f5b397d27fda0c4635e9a9"}, 851 | ] 852 | 853 | [package.dependencies] 854 | async-timeout = {version = ">=3.0.1", optional = true, markers = "extra == \"asyncio\""} 855 | 856 | [package.extras] 857 | anyio = ["anyio (>=3.3.4)"] 858 | asyncio = ["async-timeout (>=3.0.1)"] 859 | curio = ["curio (>=1.4)"] 860 | trio = ["trio (>=0.16.0)"] 861 | 862 | [[package]] 863 | name = "requests" 864 | version = "2.31.0" 865 | description = "Python HTTP for Humans." 866 | optional = false 867 | python-versions = ">=3.7" 868 | files = [ 869 | {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, 870 | {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, 871 | ] 872 | 873 | [package.dependencies] 874 | certifi = ">=2017.4.17" 875 | charset-normalizer = ">=2,<4" 876 | idna = ">=2.5,<4" 877 | urllib3 = ">=1.21.1,<3" 878 | 879 | [package.extras] 880 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 881 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 882 | 883 | [[package]] 884 | name = "requests-file" 885 | version = "1.5.1" 886 | description = "File transport adapter for Requests" 887 | optional = false 888 | python-versions = "*" 889 | files = [ 890 | {file = "requests-file-1.5.1.tar.gz", hash = "sha256:07d74208d3389d01c38ab89ef403af0cfec63957d53a0081d8eca738d0247d8e"}, 891 | {file = "requests_file-1.5.1-py2.py3-none-any.whl", hash = "sha256:dfe5dae75c12481f68ba353183c53a65e6044c923e64c24b2209f6c7570ca953"}, 892 | ] 893 | 894 | [package.dependencies] 895 | requests = ">=1.0.0" 896 | six = "*" 897 | 898 | [[package]] 899 | name = "rfc3986" 900 | version = "1.5.0" 901 | description = "Validating URI References per RFC 3986" 902 | optional = false 903 | python-versions = "*" 904 | files = [ 905 | {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, 906 | {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, 907 | ] 908 | 909 | [package.dependencies] 910 | idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} 911 | 912 | [package.extras] 913 | idna2008 = ["idna"] 914 | 915 | [[package]] 916 | name = "ruamel.yaml" 917 | version = "0.17.21" 918 | description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" 919 | optional = false 920 | python-versions = ">=3" 921 | files = [ 922 | {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, 923 | {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, 924 | ] 925 | 926 | [package.dependencies] 927 | "ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""} 928 | 929 | [package.extras] 930 | docs = ["ryd"] 931 | jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] 932 | 933 | [[package]] 934 | name = "ruamel.yaml.clib" 935 | version = "0.2.6" 936 | description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" 937 | optional = false 938 | python-versions = ">=3.5" 939 | files = [ 940 | {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0"}, 941 | {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:066f886bc90cc2ce44df8b5f7acfc6a7e2b2e672713f027136464492b0c34d7c"}, 942 | {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7"}, 943 | {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win32.whl", hash = "sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee"}, 944 | {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de"}, 945 | {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751"}, 946 | {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527"}, 947 | {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win32.whl", hash = "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5"}, 948 | {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win_amd64.whl", hash = "sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c"}, 949 | {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502"}, 950 | {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78"}, 951 | {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d3c620a54748a3d4cf0bcfe623e388407c8e85a4b06b8188e126302bcab93ea8"}, 952 | {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win32.whl", hash = "sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94"}, 953 | {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win_amd64.whl", hash = "sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468"}, 954 | {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd"}, 955 | {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99"}, 956 | {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:210c8fcfeff90514b7133010bf14e3bad652c8efde6b20e00c43854bf94fa5a6"}, 957 | {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win32.whl", hash = "sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb"}, 958 | {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe"}, 959 | {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233"}, 960 | {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84"}, 961 | {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:61bc5e5ca632d95925907c569daa559ea194a4d16084ba86084be98ab1cec1c6"}, 962 | {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win32.whl", hash = "sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b"}, 963 | {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277"}, 964 | {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed"}, 965 | {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0"}, 966 | {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1b4139a6ffbca8ef60fdaf9b33dec05143ba746a6f0ae0f9d11d38239211d335"}, 967 | {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win32.whl", hash = "sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104"}, 968 | {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7"}, 969 | {file = "ruamel.yaml.clib-0.2.6.tar.gz", hash = "sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd"}, 970 | ] 971 | 972 | [[package]] 973 | name = "simplejson" 974 | version = "3.17.6" 975 | description = "Simple, fast, extensible JSON encoder/decoder for Python" 976 | optional = false 977 | python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*" 978 | files = [ 979 | {file = "simplejson-3.17.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a89acae02b2975b1f8e4974cb8cdf9bf9f6c91162fb8dec50c259ce700f2770a"}, 980 | {file = "simplejson-3.17.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:82ff356ff91be0ab2293fc6d8d262451eb6ac4fd999244c4b5f863e049ba219c"}, 981 | {file = "simplejson-3.17.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:0de783e9c2b87bdd75b57efa2b6260c24b94605b5c9843517577d40ee0c3cc8a"}, 982 | {file = "simplejson-3.17.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:d24a9e61df7a7787b338a58abfba975414937b609eb6b18973e25f573bc0eeeb"}, 983 | {file = "simplejson-3.17.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:e8603e691580487f11306ecb066c76f1f4a8b54fb3bdb23fa40643a059509366"}, 984 | {file = "simplejson-3.17.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9b01e7b00654115965a206e3015f0166674ec1e575198a62a977355597c0bef5"}, 985 | {file = "simplejson-3.17.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:37bc0cf0e5599f36072077e56e248f3336917ded1d33d2688624d8ed3cefd7d2"}, 986 | {file = "simplejson-3.17.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cf6e7d5fe2aeb54898df18db1baf479863eae581cce05410f61f6b4188c8ada1"}, 987 | {file = "simplejson-3.17.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:bdfc54b4468ed4cd7415928cbe782f4d782722a81aeb0f81e2ddca9932632211"}, 988 | {file = "simplejson-3.17.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd16302d39c4d6f4afde80edd0c97d4db643327d355a312762ccd9bd2ca515ed"}, 989 | {file = "simplejson-3.17.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:deac4bdafa19bbb89edfb73b19f7f69a52d0b5bd3bb0c4ad404c1bbfd7b4b7fd"}, 990 | {file = "simplejson-3.17.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8bbdb166e2fb816e43ab034c865147edafe28e1b19c72433147789ac83e2dda"}, 991 | {file = "simplejson-3.17.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7854326920d41c3b5d468154318fe6ba4390cb2410480976787c640707e0180"}, 992 | {file = "simplejson-3.17.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:04e31fa6ac8e326480703fb6ded1488bfa6f1d3f760d32e29dbf66d0838982ce"}, 993 | {file = "simplejson-3.17.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f63600ec06982cdf480899026f4fda622776f5fabed9a869fdb32d72bc17e99a"}, 994 | {file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e03c3b8cc7883a54c3f34a6a135c4a17bc9088a33f36796acdb47162791b02f6"}, 995 | {file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a2d30d6c1652140181dc6861f564449ad71a45e4f165a6868c27d36745b65d40"}, 996 | {file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1aa6e4cae8e3b8d5321be4f51c5ce77188faf7baa9fe1e78611f93a8eed2882"}, 997 | {file = "simplejson-3.17.6-cp310-cp310-win32.whl", hash = "sha256:97202f939c3ff341fc3fa84d15db86156b1edc669424ba20b0a1fcd4a796a045"}, 998 | {file = "simplejson-3.17.6-cp310-cp310-win_amd64.whl", hash = "sha256:80d3bc9944be1d73e5b1726c3bbfd2628d3d7fe2880711b1eb90b617b9b8ac70"}, 999 | {file = "simplejson-3.17.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9fa621b3c0c05d965882c920347b6593751b7ab20d8fa81e426f1735ca1a9fc7"}, 1000 | {file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2fb11922f58df8528adfca123f6a84748ad17d066007e7ac977720063556bd"}, 1001 | {file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:724c1fe135aa437d5126138d977004d165a3b5e2ee98fc4eb3e7c0ef645e7e27"}, 1002 | {file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4ff4ac6ff3aa8f814ac0f50bf218a2e1a434a17aafad4f0400a57a8cc62ef17f"}, 1003 | {file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:67093a526e42981fdd954868062e56c9b67fdd7e712616cc3265ad0c210ecb51"}, 1004 | {file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b4af7ad7e4ac515bc6e602e7b79e2204e25dbd10ab3aa2beef3c5a9cad2c7"}, 1005 | {file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:1c9b1ed7ed282b36571638297525f8ef80f34b3e2d600a56f962c6044f24200d"}, 1006 | {file = "simplejson-3.17.6-cp36-cp36m-win32.whl", hash = "sha256:632ecbbd2228575e6860c9e49ea3cc5423764d5aa70b92acc4e74096fb434044"}, 1007 | {file = "simplejson-3.17.6-cp36-cp36m-win_amd64.whl", hash = "sha256:4c09868ddb86bf79b1feb4e3e7e4a35cd6e61ddb3452b54e20cf296313622566"}, 1008 | {file = "simplejson-3.17.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b6bd8144f15a491c662f06814bd8eaa54b17f26095bb775411f39bacaf66837"}, 1009 | {file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5decdc78849617917c206b01e9fc1d694fd58caa961be816cb37d3150d613d9a"}, 1010 | {file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:521877c7bd060470806eb6335926e27453d740ac1958eaf0d8c00911bc5e1802"}, 1011 | {file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:65b998193bd7b0c7ecdfffbc825d808eac66279313cb67d8892bb259c9d91494"}, 1012 | {file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ac786f6cb7aa10d44e9641c7a7d16d7f6e095b138795cd43503769d4154e0dc2"}, 1013 | {file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3ff5b3464e1ce86a8de8c88e61d4836927d5595c2162cab22e96ff551b916e81"}, 1014 | {file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:69bd56b1d257a91e763256d63606937ae4eb890b18a789b66951c00062afec33"}, 1015 | {file = "simplejson-3.17.6-cp37-cp37m-win32.whl", hash = "sha256:b81076552d34c27e5149a40187a8f7e2abb2d3185576a317aaf14aeeedad862a"}, 1016 | {file = "simplejson-3.17.6-cp37-cp37m-win_amd64.whl", hash = "sha256:07ecaafc1b1501f275bf5acdee34a4ad33c7c24ede287183ea77a02dc071e0c0"}, 1017 | {file = "simplejson-3.17.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:068670af975247acbb9fc3d5393293368cda17026db467bf7a51548ee8f17ee1"}, 1018 | {file = "simplejson-3.17.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4d1c135af0c72cb28dd259cf7ba218338f4dc027061262e46fe058b4e6a4c6a3"}, 1019 | {file = "simplejson-3.17.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23fe704da910ff45e72543cbba152821685a889cf00fc58d5c8ee96a9bad5f94"}, 1020 | {file = "simplejson-3.17.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f444762fed1bc1fd75187ef14a20ed900c1fbb245d45be9e834b822a0223bc81"}, 1021 | {file = "simplejson-3.17.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:681eb4d37c9a9a6eb9b3245a5e89d7f7b2b9895590bb08a20aa598c1eb0a1d9d"}, 1022 | {file = "simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e8607d8f6b4f9d46fee11447e334d6ab50e993dd4dbfb22f674616ce20907ab"}, 1023 | {file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b10556817f09d46d420edd982dd0653940b90151d0576f09143a8e773459f6fe"}, 1024 | {file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e1ec8a9ee0987d4524ffd6299e778c16cc35fef6d1a2764e609f90962f0b293a"}, 1025 | {file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0b4126cac7d69ac06ff22efd3e0b3328a4a70624fcd6bca4fc1b4e6d9e2e12bf"}, 1026 | {file = "simplejson-3.17.6-cp38-cp38-win32.whl", hash = "sha256:35a49ebef25f1ebdef54262e54ae80904d8692367a9f208cdfbc38dbf649e00a"}, 1027 | {file = "simplejson-3.17.6-cp38-cp38-win_amd64.whl", hash = "sha256:743cd768affaa508a21499f4858c5b824ffa2e1394ed94eb85caf47ac0732198"}, 1028 | {file = "simplejson-3.17.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb62d517a516128bacf08cb6a86ecd39fb06d08e7c4980251f5d5601d29989ba"}, 1029 | {file = "simplejson-3.17.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:12133863178a8080a3dccbf5cb2edfab0001bc41e5d6d2446af2a1131105adfe"}, 1030 | {file = "simplejson-3.17.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5540fba2d437edaf4aa4fbb80f43f42a8334206ad1ad3b27aef577fd989f20d9"}, 1031 | {file = "simplejson-3.17.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d74ee72b5071818a1a5dab47338e87f08a738cb938a3b0653b9e4d959ddd1fd9"}, 1032 | {file = "simplejson-3.17.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:28221620f4dcabdeac310846629b976e599a13f59abb21616356a85231ebd6ad"}, 1033 | {file = "simplejson-3.17.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b09bc62e5193e31d7f9876220fb429ec13a6a181a24d897b9edfbbdbcd678851"}, 1034 | {file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7255a37ff50593c9b2f1afa8fafd6ef5763213c1ed5a9e2c6f5b9cc925ab979f"}, 1035 | {file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:401d40969cee3df7bda211e57b903a534561b77a7ade0dd622a8d1a31eaa8ba7"}, 1036 | {file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a649d0f66029c7eb67042b15374bd93a26aae202591d9afd71e111dd0006b198"}, 1037 | {file = "simplejson-3.17.6-cp39-cp39-win32.whl", hash = "sha256:522fad7be85de57430d6d287c4b635813932946ebf41b913fe7e880d154ade2e"}, 1038 | {file = "simplejson-3.17.6-cp39-cp39-win_amd64.whl", hash = "sha256:3fe87570168b2ae018391e2b43fbf66e8593a86feccb4b0500d134c998983ccc"}, 1039 | {file = "simplejson-3.17.6.tar.gz", hash = "sha256:cf98038d2abf63a1ada5730e91e84c642ba6c225b0198c3684151b1f80c5f8a6"}, 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "six" 1044 | version = "1.16.0" 1045 | description = "Python 2 and 3 compatibility utilities" 1046 | optional = false 1047 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 1048 | files = [ 1049 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 1050 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 1051 | ] 1052 | 1053 | [[package]] 1054 | name = "sniffio" 1055 | version = "1.2.0" 1056 | description = "Sniff out which async library your code is running under" 1057 | optional = false 1058 | python-versions = ">=3.5" 1059 | files = [ 1060 | {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, 1061 | {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "tldextract" 1066 | version = "3.3.1" 1067 | description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well." 1068 | optional = false 1069 | python-versions = ">=3.7" 1070 | files = [ 1071 | {file = "tldextract-3.3.1-py3-none-any.whl", hash = "sha256:35a0260570e214d8d3cfeeb403992fe9e2b686925f63c9b03c5933408ac2aa5a"}, 1072 | {file = "tldextract-3.3.1.tar.gz", hash = "sha256:fe15ac3205e5a25b61689369f98cb45c7778a8f2af113d7c11559ece5195f2d6"}, 1073 | ] 1074 | 1075 | [package.dependencies] 1076 | filelock = ">=3.0.8" 1077 | idna = "*" 1078 | requests = ">=2.1.0" 1079 | requests-file = ">=1.4" 1080 | 1081 | [[package]] 1082 | name = "tqdm" 1083 | version = "4.64.0" 1084 | description = "Fast, Extensible Progress Meter" 1085 | optional = false 1086 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" 1087 | files = [ 1088 | {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, 1089 | {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, 1090 | ] 1091 | 1092 | [package.dependencies] 1093 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 1094 | 1095 | [package.extras] 1096 | dev = ["py-make (>=0.1.0)", "twine", "wheel"] 1097 | notebook = ["ipywidgets (>=6)"] 1098 | slack = ["slack-sdk"] 1099 | telegram = ["requests"] 1100 | 1101 | [[package]] 1102 | name = "urllib3" 1103 | version = "1.26.11" 1104 | description = "HTTP library with thread-safe connection pooling, file post, and more." 1105 | optional = false 1106 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" 1107 | files = [ 1108 | {file = "urllib3-1.26.11-py2.py3-none-any.whl", hash = "sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc"}, 1109 | {file = "urllib3-1.26.11.tar.gz", hash = "sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a"}, 1110 | ] 1111 | 1112 | [package.extras] 1113 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] 1114 | secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] 1115 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 1116 | 1117 | [[package]] 1118 | name = "verboselogs" 1119 | version = "1.7" 1120 | description = "Verbose logging level for Python's logging module" 1121 | optional = false 1122 | python-versions = "*" 1123 | files = [ 1124 | {file = "verboselogs-1.7-py2.py3-none-any.whl", hash = "sha256:d63f23bf568295b95d3530c6864a0b580cec70e7ff974177dead1e4ffbc6ff49"}, 1125 | {file = "verboselogs-1.7.tar.gz", hash = "sha256:e33ddedcdfdafcb3a174701150430b11b46ceb64c2a9a26198c76a156568e427"}, 1126 | ] 1127 | 1128 | [[package]] 1129 | name = "whodap" 1130 | version = "0.1.6" 1131 | description = "Simple RDAP Utility for Python" 1132 | optional = false 1133 | python-versions = ">=3.6, <4" 1134 | files = [ 1135 | {file = "whodap-0.1.6-py3-none-any.whl", hash = "sha256:6c4826365576224d35e54c11a1fdf6fa187185cc1248ea56205f3b2b38676f3d"}, 1136 | {file = "whodap-0.1.6.tar.gz", hash = "sha256:5b8b632c862d78208029b502c7b8aebd96da49cf0402fca9d950be94a614737b"}, 1137 | ] 1138 | 1139 | [package.dependencies] 1140 | httpx = ">=0.20.0" 1141 | 1142 | [[package]] 1143 | name = "yarl" 1144 | version = "1.8.1" 1145 | description = "Yet another URL library" 1146 | optional = false 1147 | python-versions = ">=3.7" 1148 | files = [ 1149 | {file = "yarl-1.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:abc06b97407868ef38f3d172762f4069323de52f2b70d133d096a48d72215d28"}, 1150 | {file = "yarl-1.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:07b21e274de4c637f3e3b7104694e53260b5fc10d51fb3ec5fed1da8e0f754e3"}, 1151 | {file = "yarl-1.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9de955d98e02fab288c7718662afb33aab64212ecb368c5dc866d9a57bf48880"}, 1152 | {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ec362167e2c9fd178f82f252b6d97669d7245695dc057ee182118042026da40"}, 1153 | {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20df6ff4089bc86e4a66e3b1380460f864df3dd9dccaf88d6b3385d24405893b"}, 1154 | {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5999c4662631cb798496535afbd837a102859568adc67d75d2045e31ec3ac497"}, 1155 | {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed19b74e81b10b592084a5ad1e70f845f0aacb57577018d31de064e71ffa267a"}, 1156 | {file = "yarl-1.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e4808f996ca39a6463f45182e2af2fae55e2560be586d447ce8016f389f626f"}, 1157 | {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2d800b9c2eaf0684c08be5f50e52bfa2aa920e7163c2ea43f4f431e829b4f0fd"}, 1158 | {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6628d750041550c5d9da50bb40b5cf28a2e63b9388bac10fedd4f19236ef4957"}, 1159 | {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f5af52738e225fcc526ae64071b7e5342abe03f42e0e8918227b38c9aa711e28"}, 1160 | {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:76577f13333b4fe345c3704811ac7509b31499132ff0181f25ee26619de2c843"}, 1161 | {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0c03f456522d1ec815893d85fccb5def01ffaa74c1b16ff30f8aaa03eb21e453"}, 1162 | {file = "yarl-1.8.1-cp310-cp310-win32.whl", hash = "sha256:ea30a42dc94d42f2ba4d0f7c0ffb4f4f9baa1b23045910c0c32df9c9902cb272"}, 1163 | {file = "yarl-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:9130ddf1ae9978abe63808b6b60a897e41fccb834408cde79522feb37fb72fb0"}, 1164 | {file = "yarl-1.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0ab5a138211c1c366404d912824bdcf5545ccba5b3ff52c42c4af4cbdc2c5035"}, 1165 | {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0fb2cb4204ddb456a8e32381f9a90000429489a25f64e817e6ff94879d432fc"}, 1166 | {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85cba594433915d5c9a0d14b24cfba0339f57a2fff203a5d4fd070e593307d0b"}, 1167 | {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca7e596c55bd675432b11320b4eacc62310c2145d6801a1f8e9ad160685a231"}, 1168 | {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0f77539733e0ec2475ddcd4e26777d08996f8cd55d2aef82ec4d3896687abda"}, 1169 | {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29e256649f42771829974e742061c3501cc50cf16e63f91ed8d1bf98242e5507"}, 1170 | {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7fce6cbc6c170ede0221cc8c91b285f7f3c8b9fe28283b51885ff621bbe0f8ee"}, 1171 | {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:59ddd85a1214862ce7c7c66457f05543b6a275b70a65de366030d56159a979f0"}, 1172 | {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:12768232751689c1a89b0376a96a32bc7633c08da45ad985d0c49ede691f5c0d"}, 1173 | {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:b19255dde4b4f4c32e012038f2c169bb72e7f081552bea4641cab4d88bc409dd"}, 1174 | {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6c8148e0b52bf9535c40c48faebb00cb294ee577ca069d21bd5c48d302a83780"}, 1175 | {file = "yarl-1.8.1-cp37-cp37m-win32.whl", hash = "sha256:de839c3a1826a909fdbfe05f6fe2167c4ab033f1133757b5936efe2f84904c07"}, 1176 | {file = "yarl-1.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:dd032e8422a52e5a4860e062eb84ac94ea08861d334a4bcaf142a63ce8ad4802"}, 1177 | {file = "yarl-1.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:19cd801d6f983918a3f3a39f3a45b553c015c5aac92ccd1fac619bd74beece4a"}, 1178 | {file = "yarl-1.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6347f1a58e658b97b0a0d1ff7658a03cb79bdbda0331603bed24dd7054a6dea1"}, 1179 | {file = "yarl-1.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c0da7e44d0c9108d8b98469338705e07f4bb7dab96dbd8fa4e91b337db42548"}, 1180 | {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5587bba41399854703212b87071c6d8638fa6e61656385875f8c6dff92b2e461"}, 1181 | {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31a9a04ecccd6b03e2b0e12e82131f1488dea5555a13a4d32f064e22a6003cfe"}, 1182 | {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205904cffd69ae972a1707a1bd3ea7cded594b1d773a0ce66714edf17833cdae"}, 1183 | {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea513a25976d21733bff523e0ca836ef1679630ef4ad22d46987d04b372d57fc"}, 1184 | {file = "yarl-1.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0b51530877d3ad7a8d47b2fff0c8df3b8f3b8deddf057379ba50b13df2a5eae"}, 1185 | {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d2b8f245dad9e331540c350285910b20dd913dc86d4ee410c11d48523c4fd546"}, 1186 | {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ab2a60d57ca88e1d4ca34a10e9fb4ab2ac5ad315543351de3a612bbb0560bead"}, 1187 | {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:449c957ffc6bc2309e1fbe67ab7d2c1efca89d3f4912baeb8ead207bb3cc1cd4"}, 1188 | {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a165442348c211b5dea67c0206fc61366212d7082ba8118c8c5c1c853ea4d82e"}, 1189 | {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b3ded839a5c5608eec8b6f9ae9a62cb22cd037ea97c627f38ae0841a48f09eae"}, 1190 | {file = "yarl-1.8.1-cp38-cp38-win32.whl", hash = "sha256:c1445a0c562ed561d06d8cbc5c8916c6008a31c60bc3655cdd2de1d3bf5174a0"}, 1191 | {file = "yarl-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:56c11efb0a89700987d05597b08a1efcd78d74c52febe530126785e1b1a285f4"}, 1192 | {file = "yarl-1.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e80ed5a9939ceb6fda42811542f31c8602be336b1fb977bccb012e83da7e4936"}, 1193 | {file = "yarl-1.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6afb336e23a793cd3b6476c30f030a0d4c7539cd81649683b5e0c1b0ab0bf350"}, 1194 | {file = "yarl-1.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c322cbaa4ed78a8aac89b2174a6df398faf50e5fc12c4c191c40c59d5e28357"}, 1195 | {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fae37373155f5ef9b403ab48af5136ae9851151f7aacd9926251ab26b953118b"}, 1196 | {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5395da939ffa959974577eff2cbfc24b004a2fb6c346918f39966a5786874e54"}, 1197 | {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:076eede537ab978b605f41db79a56cad2e7efeea2aa6e0fa8f05a26c24a034fb"}, 1198 | {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1a50e461615747dd93c099f297c1994d472b0f4d2db8a64e55b1edf704ec1c"}, 1199 | {file = "yarl-1.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7de89c8456525650ffa2bb56a3eee6af891e98f498babd43ae307bd42dca98f6"}, 1200 | {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4a88510731cd8d4befaba5fbd734a7dd914de5ab8132a5b3dde0bbd6c9476c64"}, 1201 | {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2d93a049d29df172f48bcb09acf9226318e712ce67374f893b460b42cc1380ae"}, 1202 | {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:21ac44b763e0eec15746a3d440f5e09ad2ecc8b5f6dcd3ea8cb4773d6d4703e3"}, 1203 | {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d0272228fabe78ce00a3365ffffd6f643f57a91043e119c289aaba202f4095b0"}, 1204 | {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99449cd5366fe4608e7226c6cae80873296dfa0cde45d9b498fefa1de315a09e"}, 1205 | {file = "yarl-1.8.1-cp39-cp39-win32.whl", hash = "sha256:8b0af1cf36b93cee99a31a545fe91d08223e64390c5ecc5e94c39511832a4bb6"}, 1206 | {file = "yarl-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:de49d77e968de6626ba7ef4472323f9d2e5a56c1d85b7c0e2a190b2173d3b9be"}, 1207 | {file = "yarl-1.8.1.tar.gz", hash = "sha256:af887845b8c2e060eb5605ff72b6f2dd2aab7a761379373fd89d314f4752abbf"}, 1208 | ] 1209 | 1210 | [package.dependencies] 1211 | idna = ">=2.0" 1212 | multidict = ">=4.0" 1213 | 1214 | [metadata] 1215 | lock-version = "2.0" 1216 | python-versions = "^3.10" 1217 | content-hash = "f2eb35cf4ba5fc9790a091ad35c987190f709dc4837581c21b6d6138effcfbac" 1218 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "check_rep" 3 | version = "2.2.0" 4 | description = "Check IP or Domain reputation against 400+ open-source Blacklists" 5 | authors = ["Mitch Haddadi <12067255+dfirsec@users.noreply.github.com>"] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.10" 9 | aiodns = "^3.0.0" 10 | asyncwhois = "^1.0.1" 11 | colorama = "^0.4.5" 12 | colored = "^1.4.3" 13 | coloredlogs = "^15.0.1" 14 | dnspython = "^2.2.1" 15 | folium = "^0.12.1" 16 | geoip2 = "^4.6.0" 17 | "ruamel.yaml" = "^0.17.21" 18 | simplejson = "^3.17.6" 19 | tldextract = "^3.3.1" 20 | tqdm = "^4.64.0" 21 | verboselogs = "^1.7" 22 | 23 | [tool.poetry.dev-dependencies] 24 | 25 | [build-system] 26 | requires = ["poetry-core>=1.0.0"] 27 | build-backend = "poetry.core.masonry.api" 28 | --------------------------------------------------------------------------------