quasarr 2.5.0__py3-none-any.whl → 2.6.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of quasarr might be problematic. Click here for more details.

quasarr/storage/setup.py CHANGED
@@ -947,7 +947,7 @@ def save_flaresolverr_url(shared_state, is_setup=False):
947
947
  if is_setup:
948
948
  quasarr.providers.web_server.temp_server_success = True
949
949
 
950
- return render_reconnect_success("FlareSolverr URL cleared (setup skipped).")
950
+ return render_reconnect_success("FlareSolverr URL cleared.")
951
951
 
952
952
  if not url.startswith("http://") and not url.startswith("https://"):
953
953
  url = "http://" + url
@@ -958,41 +958,23 @@ def save_flaresolverr_url(shared_state, is_setup=False):
958
958
  "FlareSolverr URL must end with /v1 (or similar version path)."
959
959
  )
960
960
 
961
- try:
962
- headers = {"Content-Type": "application/json"}
963
- data = {
964
- "cmd": "request.get",
965
- "url": "http://www.google.com/",
966
- "maxTimeout": 30000,
967
- }
968
- resp = requests.post(url, headers=headers, json=data, timeout=30)
969
- if resp.status_code == 200:
970
- json_data = resp.json()
971
- if json_data.get("status") == "ok":
972
- config.save("url", url)
973
- # Clear skip preference since we now have a working URL
974
- DataBase("skip_flaresolverr").delete("skipped")
975
-
976
- # Update user agent from FlareSolverr response
977
- solution = json_data.get("solution", {})
978
- solution_ua = solution.get("userAgent")
979
- if solution_ua:
980
- shared_state.update("user_agent", solution_ua)
981
-
982
- info(f'FlareSolverr URL configured: "{url}"')
983
-
984
- if is_setup:
985
- quasarr.providers.web_server.temp_server_success = True
961
+ flaresolverr_check = check_flaresolverr(shared_state, url)
962
+ if flaresolverr_check:
963
+ config.save("url", url)
964
+ # Clear skip preference since we now have a working URL
965
+ DataBase("skip_flaresolverr").delete("skipped")
986
966
 
987
- return render_reconnect_success("FlareSolverr URL saved successfully!")
988
- else:
989
- return render_fail(
990
- f"FlareSolverr returned unexpected status: {json_data.get('status')}"
991
- )
992
- except requests.RequestException:
993
- return render_fail("Could not reach FlareSolverr!")
967
+ info(
968
+ f'FlareSolverr connection successful. Using User-Agent: "{shared_state.values["user_agent"]}"'
969
+ )
970
+ info(f'FlareSolverr URL configured: "{url}"')
994
971
 
995
- return render_fail("Could not reach FlareSolverr at that URL (expected HTTP 200).")
972
+ if is_setup:
973
+ quasarr.providers.web_server.temp_server_success = True
974
+
975
+ return render_reconnect_success("FlareSolverr URL saved successfully!")
976
+ else:
977
+ return render_fail("Could not reach FlareSolverr!")
996
978
 
997
979
 
998
980
  def get_flaresolverr_status_data(shared_state):
@@ -1446,6 +1428,78 @@ def flaresolverr_config(shared_state):
1446
1428
  ).serve_temporarily()
1447
1429
 
1448
1430
 
1431
+ def verify_jdownloader_credentials(shared_state):
1432
+ """Verify JDownloader credentials and return devices."""
1433
+ response.content_type = "application/json"
1434
+ try:
1435
+ data = request.json
1436
+ username = data.get("user")
1437
+ password = data.get("pass")
1438
+
1439
+ devices = shared_state.get_devices(username, password)
1440
+ device_names = []
1441
+
1442
+ if devices:
1443
+ for device in devices:
1444
+ device_names.append(device["name"])
1445
+
1446
+ if device_names:
1447
+ return {"success": True, "devices": device_names}
1448
+ else:
1449
+ return {
1450
+ "success": False,
1451
+ "message": "No devices found or invalid credentials",
1452
+ }
1453
+ except Exception as e:
1454
+ return {"success": False, "message": str(e)}
1455
+
1456
+
1457
+ def save_jdownloader_settings(shared_state, is_setup=False):
1458
+ """Save JDownloader settings."""
1459
+ # Handle both JSON (from main UI) and Form (from setup UI)
1460
+ if request.json:
1461
+ username = request.json.get("user")
1462
+ password = request.json.get("pass")
1463
+ device = request.json.get("device")
1464
+ else:
1465
+ username = request.forms.get("user")
1466
+ password = request.forms.get("pass")
1467
+ device = request.forms.get("device")
1468
+
1469
+ if username and password and device:
1470
+ # Verify connection works before saving credentials
1471
+ if shared_state.set_device(username, password, device):
1472
+ config = Config("JDownloader")
1473
+ config.save("user", username)
1474
+ config.save("password", password)
1475
+ config.save("device", device)
1476
+
1477
+ if is_setup:
1478
+ quasarr.providers.web_server.temp_server_success = True
1479
+ return render_reconnect_success("Credentials set")
1480
+ else:
1481
+ response.content_type = "application/json"
1482
+ return {
1483
+ "success": True,
1484
+ "message": "JDownloader configured successfully",
1485
+ }
1486
+ else:
1487
+ if is_setup:
1488
+ return render_fail("Could not connect to selected device!")
1489
+ else:
1490
+ response.content_type = "application/json"
1491
+ return {
1492
+ "success": False,
1493
+ "message": "Could not connect to selected device",
1494
+ }
1495
+
1496
+ if is_setup:
1497
+ return render_fail("Could not set credentials!")
1498
+ else:
1499
+ response.content_type = "application/json"
1500
+ return {"success": False, "message": "Missing required fields"}
1501
+
1502
+
1449
1503
  def jdownloader_config(shared_state):
1450
1504
  app = Bottle()
1451
1505
  add_no_cache_headers(app)
@@ -1549,39 +1603,11 @@ def jdownloader_config(shared_state):
1549
1603
 
1550
1604
  @app.post("/api/verify_jdownloader")
1551
1605
  def verify_jdownloader():
1552
- data = request.json
1553
- username = data["user"]
1554
- password = data["pass"]
1555
-
1556
- devices = shared_state.get_devices(username, password)
1557
- device_names = []
1558
-
1559
- if devices:
1560
- for device in devices:
1561
- device_names.append(device["name"])
1562
-
1563
- if device_names:
1564
- return {"success": True, "devices": device_names}
1565
- else:
1566
- return {"success": False}
1606
+ return verify_jdownloader_credentials(shared_state)
1567
1607
 
1568
1608
  @app.post("/api/store_jdownloader")
1569
1609
  def store_jdownloader():
1570
- username = request.forms.get("user")
1571
- password = request.forms.get("pass")
1572
- device = request.forms.get("device")
1573
-
1574
- if username and password and device:
1575
- # Verify connection works before saving credentials
1576
- if shared_state.set_device(username, password, device):
1577
- config = Config("JDownloader")
1578
- config.save("user", username)
1579
- config.save("password", password)
1580
- config.save("device", device)
1581
- quasarr.providers.web_server.temp_server_success = True
1582
- return render_reconnect_success("Credentials set")
1583
-
1584
- return render_fail("Could not set credentials!")
1610
+ return save_jdownloader_settings(shared_state, is_setup=True)
1585
1611
 
1586
1612
  info(
1587
1613
  f"My-JDownloader-Credentials not set. "
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quasarr
3
- Version: 2.5.0
3
+ Version: 2.6.1
4
4
  Summary: Quasarr connects JDownloader with Radarr, Sonarr and LazyLibrarian. It also decrypts links protected by CAPTCHAs.
5
5
  Author-email: rix1337 <rix1337@users.noreply.github.com>
6
6
  License-File: LICENSE
@@ -1,12 +1,13 @@
1
- quasarr/__init__.py,sha256=da03581ho1rtPtd-62bpAybQPamSQm3ONivCF4_kT1k,17137
2
- quasarr/api/__init__.py,sha256=ulvqXi05zeaE3xE-7M-V8y-dDBUlpaIukj5wvsDTIz4,19799
3
- quasarr/api/arr/__init__.py,sha256=NzyzFmRSGwGwg-wmyxa-EzXda1i6W59r4ZbRe5ireJc,18156
4
- quasarr/api/captcha/__init__.py,sha256=NQW5qe_ykttD-3pRimB50oIA3n3KGO0jDKeEgia2IE4,75526
5
- quasarr/api/config/__init__.py,sha256=Qx1M1ECnqw2XsIQNs91EwRb2E0COVJ1J3Ji_bR6IifM,8467
6
- quasarr/api/packages/__init__.py,sha256=DOupHd2xlpzEC23ZM3R7jHJqSPL2BAkR4p8J8DAgkkI,31066
1
+ quasarr/__init__.py,sha256=ZgxPUmVmiI3XYfocjzWNJNAGda6sO0o3OqOEFOPOQZc,16982
2
+ quasarr/api/__init__.py,sha256=KrbMcvcPPJ3q299dBOmCJEixdZ4ftAiC1MJ_3pu8ep0,20180
3
+ quasarr/api/arr/__init__.py,sha256=z6Cx9GqPti6zt_bVPHUmGVSdxvIYLRuL7TL7Sd5VPGI,18487
4
+ quasarr/api/captcha/__init__.py,sha256=PPiIaW4w5qZWcm9MkEidsKFS0uaooPMtca5Cc5dL8mM,75225
5
+ quasarr/api/config/__init__.py,sha256=FJZHALhL6NExonhCk53vOYnM1ICkmbTRue5UMCy5Yzg,8813
6
+ quasarr/api/jdownloader/__init__.py,sha256=SixcV-sgMAunjAT5LawASb1qSuOOokorQo2F7cQ3jZ4,9427
7
+ quasarr/api/packages/__init__.py,sha256=4T6pw0N1DKpTCj2mAgdPOjo__nhxr56aEqZOiFvPvb0,30679
7
8
  quasarr/api/sponsors_helper/__init__.py,sha256=QAFXK_JTtAnstRAlieCbbCsoTwIcBu7ZX8C3U4jZpR0,6475
8
9
  quasarr/api/statistics/__init__.py,sha256=rJz6S4jSnpFDWtjU7O-2jECUEqlueOHOEfRUjSb3cMY,7943
9
- quasarr/downloads/__init__.py,sha256=dSgOGiv_PPj5B5NUQGYS5Ej4YSvNqjTIhJgUBhUfqMc,17187
10
+ quasarr/downloads/__init__.py,sha256=7LnhWeQVGjkAhDF8VbP4KbyNyfWxJ5yErF4HDzqNrGQ,17283
10
11
  quasarr/downloads/linkcrypters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
12
  quasarr/downloads/linkcrypters/al.py,sha256=0tgzTwoNjizeIfVoWyJIihlKVg3T5qOmLBJJKAPFfxY,8983
12
13
  quasarr/downloads/linkcrypters/filecrypt.py,sha256=SRUToJ5PpjWNL4n40Q8CYqxLYkyOMd1ce2QJGc1bqRE,17811
@@ -21,61 +22,63 @@ quasarr/downloads/sources/dl.py,sha256=HYdlRhBhG5TjK6NadrUwBLI532LdL87gpXbAJY_7T
21
22
  quasarr/downloads/sources/dt.py,sha256=12Iiwr3ZMUivHDG4bjJHyM5vx3Dmfu3IKDd13sYKlUg,3166
22
23
  quasarr/downloads/sources/dw.py,sha256=LgkHlYbA2nifLMMuoqZPpun-dLsmTYqIIhM6BB7i898,2993
23
24
  quasarr/downloads/sources/he.py,sha256=uTsZlPYvRo9lHjNCviSEDzde8IoLnf9VGE-b-S7VJ7s,4062
25
+ quasarr/downloads/sources/hs.py,sha256=aZKtYg0RqZEyvo76_IlRpVWwFSc9BWvAyn-M8IaDxU4,4752
24
26
  quasarr/downloads/sources/mb.py,sha256=nKO8y0fj-LP9QTXJs0Wxw21yXqe7N6xEYJ9UK2_mPeE,1947
25
27
  quasarr/downloads/sources/nk.py,sha256=qNdQqoP6czgypf3sPcoxDl6fIwrMWAzNv6rKXIKlpWc,2104
26
28
  quasarr/downloads/sources/nx.py,sha256=Kn3Nn87NcrKada3j8jpTlunKJ7-ggDyQOiRSoCdxySk,3670
27
29
  quasarr/downloads/sources/sf.py,sha256=f_jC4Shnl2GWCro6JcBLjbmZA8nSPVPr4vdf0WR_r7k,6927
28
30
  quasarr/downloads/sources/sj.py,sha256=h3x7F8UUPvcyTf6gkKn6fBLTFeQjvqD7MJ1TtuiqhUU,390
29
31
  quasarr/downloads/sources/sl.py,sha256=G5TehRfrdlNT-jJ1PiSEzq1IWqL2UCq73LIMqvYef2c,3573
30
- quasarr/downloads/sources/wd.py,sha256=mUFvH1OptEOBfQMw6TmucfC-Da8lpf-ThLGyK1oh_Xc,5135
32
+ quasarr/downloads/sources/wd.py,sha256=pmXkScWTrMvQHTOx770M_caF92VIKvHmUu1ncqrmxvY,6042
31
33
  quasarr/downloads/sources/wx.py,sha256=-6SEY_3lvtONZXxkit4MIYLHsPY9Z1VzOvv5MYbDag8,7091
32
34
  quasarr/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
35
  quasarr/providers/auth.py,sha256=mLd22xsTO29rgPwEU9SkFHRLuYxev-_11TQXicXLon8,10570
34
- quasarr/providers/cloudflare.py,sha256=mnq8NZN_NZlmWC5Mg-s51pSIlA7i8O4kYgGbxd_vumA,7759
36
+ quasarr/providers/cloudflare.py,sha256=K5fd0cbVvppYpulz_aYQnyXhkFTZA6ZiwL6v_t_HrC8,9021
35
37
  quasarr/providers/hostname_issues.py,sha256=SpnZAxOLejSXJGFnYkCrRzR8D0IQsTMtylM-O0h21Z0,1462
36
38
  quasarr/providers/html_images.py,sha256=xmxfNwqAqQimVaOq7IelkxlBdcRpPZZLGli_MJDOacI,19755
37
- quasarr/providers/html_templates.py,sha256=yNDkJ-ETeAw11UuUiAPkv3dAw9DIFF__neFQUM5QEvw,15878
39
+ quasarr/providers/html_templates.py,sha256=e5b66N47y5Uq7Ikwcm6kOWiyXZ7Bz4gqg2DcajIBGgE,16360
38
40
  quasarr/providers/imdb_metadata.py,sha256=ZKnB7Ep3cjeCnie6-NCoYwTQzWb4mlm5NUUL95bD7fs,21999
39
41
  quasarr/providers/jd_cache.py,sha256=l9eNNUZhadygQ2HvhHPjW4IfFTzJOZNStSdi7tNfzkQ,14724
40
42
  quasarr/providers/log.py,sha256=wn-cQVbWFxjFXRR4TlBiDnFB3SxaJrGKX-NKg5OjUvw,313
41
43
  quasarr/providers/myjd_api.py,sha256=06NWo8MqRHp9fU363OhcXQGHLKxsnMSygu-4JdtGrrs,34225
42
44
  quasarr/providers/notifications.py,sha256=fL0HQdk7jBLXToM_URQiJq6y2UAHs0RzMFMCFdb3SHQ,4894
43
45
  quasarr/providers/obfuscated.py,sha256=IAN0-5m6UblLjaFdPhRy75ryqDMF0nlbkClq5-n1bQQ,2275634
44
- quasarr/providers/shared_state.py,sha256=PtViw25o-3mYTbFfbJpGb2F_QB8TNy4Ov1Jb8JAR09A,32690
46
+ quasarr/providers/shared_state.py,sha256=Pv7UUaoPtsl7Rp_vbK_fAnyzlEAdn9Hj_DcVJ4LROqs,32789
45
47
  quasarr/providers/statistics.py,sha256=1X_Aa7TE3W7ovwkemVMsgIx55Jw3eYMiyUxuCUDgO5s,8666
46
48
  quasarr/providers/utils.py,sha256=YXW34xi8569-Tr-cpr8GyOCrWvZ_GKWrX5x0-sxMpOU,12169
47
- quasarr/providers/version.py,sha256=FuV1qOy3P-mS-Hi_PRoY4Zm1j5MK_HaUNm7udgRyRcI,4424
49
+ quasarr/providers/version.py,sha256=peW1DQ2L5XTmtez6gPVEC0say4xucb1RNTyv0_NDmqY,4424
48
50
  quasarr/providers/web_server.py,sha256=tHkMxhV6eaHC8cWsEpbUqD_U29IFE24VsU6tjk-xCEM,1765
49
51
  quasarr/providers/sessions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- quasarr/providers/sessions/al.py,sha256=VvqqgmwzZfCI_pIvzxvdaIvuBiqANbkkiJNEOBKW3zA,13456
52
+ quasarr/providers/sessions/al.py,sha256=obDBotLA8vhbSsIw3VErj-FujVgYc4RimqxLqycfbVE,13569
51
53
  quasarr/providers/sessions/dd.py,sha256=OImrnHCXeeGqPOSMnwGH7897EVZWA9fqH2yzk4FQqcA,3375
52
54
  quasarr/providers/sessions/dl.py,sha256=fKnakgGp0vhTRYP2m4HWbcX3ZuqaqSqoRNtismtU314,5973
53
55
  quasarr/providers/sessions/nx.py,sha256=qY1i0Nxx32S8j2QQEP6SHn5XxZmic7shyaBuaVAxV34,3513
54
- quasarr/search/__init__.py,sha256=XupcFNsTp5laLQ7mE-XiJ_1R2Ey9Kt5vXW-p88LNSi4,7962
56
+ quasarr/search/__init__.py,sha256=K2y46W4xV9ubH9KqwVGh5N-UhWwFVWqVbsCja3qcZYI,8129
55
57
  quasarr/search/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- quasarr/search/sources/al.py,sha256=BvVL4RoPpObhS2TVms4rPvs_kdoIrYkiyG22PdA0g3E,18279
57
- quasarr/search/sources/by.py,sha256=jakh4w3u9NQrGhV2t3ZwsS9ZKgE2_dcYyd9pPUH4cQo,8926
58
- quasarr/search/sources/dd.py,sha256=GdXalOUK1YPzqrHP7G4djnAGNUbqJdOjFFFQ9aMG4ls,5725
58
+ quasarr/search/sources/al.py,sha256=8AGAcAiEzqHcW76nPIFn417B9CaVgneEtkYiQhq2MzY,18429
59
+ quasarr/search/sources/by.py,sha256=Hk9RArTmWqcE4AxxDVy2l3-64vPpLHpeqME5nrkWBiQ,9045
60
+ quasarr/search/sources/dd.py,sha256=oMK6kcoNbUc5veQ3224aM9Y2yooysN2gCyKmtUH7ylI,6296
59
61
  quasarr/search/sources/dj.py,sha256=f-snv7zPYdmQM50XUiGCjHtwl0JnnJ-1R-GW1sjaJH0,7825
60
- quasarr/search/sources/dl.py,sha256=eyYAZz0MfvrizWxvqsVBoupy-kg2mKc42TAdB_rXK4k,13801
62
+ quasarr/search/sources/dl.py,sha256=WhOoUPLqJfWmJH8wgEkz3Rg5fChqH_Jp8q58NKZgekE,14323
61
63
  quasarr/search/sources/dt.py,sha256=i_JSxydoASLlTRRhPk5av0fgzw1xhtAkjeF2_7KxbkM,10675
62
64
  quasarr/search/sources/dw.py,sha256=ZRWwA4PljLMyBqN1V9SThcL9Bc4KzR4k-7F2LecIMeM,8803
63
65
  quasarr/search/sources/fx.py,sha256=J2yUn8_1zMgPlJ9RPeBXoVD-KhSwj97CUQaVMgs8N3U,10297
64
66
  quasarr/search/sources/he.py,sha256=X-eyVWkDXsKjXDBLRGoFiA5qA8Z4NeO-jJfygnxnWZg,7762
65
- quasarr/search/sources/mb.py,sha256=DaNOppqCNVtkGamBbULlT04UP9AzJh-nDPycYrU1Kz4,8476
67
+ quasarr/search/sources/hs.py,sha256=TVVlvPl_DWogoUV7eUTWQXAYR7PVL2AMjHwi2_9esTY,17827
68
+ quasarr/search/sources/mb.py,sha256=iwjMYEiHWicJY5psch5Xsd04XH5KOM98cvysUYesz9Y,8210
66
69
  quasarr/search/sources/nk.py,sha256=vU9aK2EjjR6ZF1QP4r4CzcF1qO7LEjuZ_qsf_nKvSc4,7554
67
- quasarr/search/sources/nx.py,sha256=ABc_B6Pi_SBKGvHhZRq5bdMGX_oeRCULGbEbpQQUh60,7908
70
+ quasarr/search/sources/nx.py,sha256=HvZfzNrteHvjSY6LuPEyKjUHiuuBDrL_zZ-a7bIvLSY,8027
68
71
  quasarr/search/sources/sf.py,sha256=W_620AdArvINjhKjBKYvoAX3OKBSeRtOWzTpQFhOmZY,17102
69
72
  quasarr/search/sources/sj.py,sha256=fQ1xhaDc1hvycLv2sVYXx_ZBNkjXsJ_s4-VcgJEWy8A,7887
70
73
  quasarr/search/sources/sl.py,sha256=XvY7XC4AIXh6-GYsTwERoRKMi4euo1zk2X2gKff8S8E,11079
71
- quasarr/search/sources/wd.py,sha256=qqhYoYrrbwxDsyETfsZOQQu8wnq8O87hpOSMx71MMIY,8084
72
- quasarr/search/sources/wx.py,sha256=KLMUbnh3SGrWsQq3YyI9LRq4VjDj_JmjXU4-fMqxDMk,15377
74
+ quasarr/search/sources/wd.py,sha256=Y_kSbri6u7QaO0JDCeIBtYeo5r_EJXgpDL4WzMrg268,9235
75
+ quasarr/search/sources/wx.py,sha256=3GMgOz2QhmeU1ip-lX5_JrltJi_uuSFGNHJr0Lk7l4c,15555
73
76
  quasarr/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- quasarr/storage/config.py,sha256=lvh3Vtf6pQ_ZIyH9TrHzcifRKkzq8QsV61xDhbrOpog,6584
75
- quasarr/storage/setup.py,sha256=xDS7ALm1zR1uYgMiPeKCYiCbTqltYg2JfXLPIMDfdww,60790
77
+ quasarr/storage/config.py,sha256=IzPrfwuR_4fsgh-cBQigOtQwqzrtBAsZfdzDotCabJw,6618
78
+ quasarr/storage/setup.py,sha256=zb83kvQfxMFHxC7EvWWaVTy0MtG7iEjMRyfY4hdcbOk,61520
76
79
  quasarr/storage/sqlite_database.py,sha256=tmHUotMWIwtyH-g244WvcGhMQMMjGokncv7JpFSi8NM,3639
77
- quasarr-2.5.0.dist-info/METADATA,sha256=_zn9rKyhnjing9g60Ltp8Q2wxtn7R0mZJQc0n3OSiMU,14727
78
- quasarr-2.5.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
79
- quasarr-2.5.0.dist-info/entry_points.txt,sha256=gXi8mUKsIqKVvn-bOc8E5f04sK_KoMCC-ty6b2Hf-jc,40
80
- quasarr-2.5.0.dist-info/licenses/LICENSE,sha256=QQFCAfDgt7lSA8oSWDHIZ9aTjFbZaBJdjnGOHkuhK7k,1060
81
- quasarr-2.5.0.dist-info/RECORD,,
80
+ quasarr-2.6.1.dist-info/METADATA,sha256=KOEKXAbtynYwQcL7NH32JJvXJ6cfdoN7_LVrPMkW8jE,14727
81
+ quasarr-2.6.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
82
+ quasarr-2.6.1.dist-info/entry_points.txt,sha256=gXi8mUKsIqKVvn-bOc8E5f04sK_KoMCC-ty6b2Hf-jc,40
83
+ quasarr-2.6.1.dist-info/licenses/LICENSE,sha256=QQFCAfDgt7lSA8oSWDHIZ9aTjFbZaBJdjnGOHkuhK7k,1060
84
+ quasarr-2.6.1.dist-info/RECORD,,