Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 25 additions & 2 deletions testnet_data_snapshots/TESTNET_DATA_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,29 @@ This folder contains snapshot data from different testnets to figure out rewards

Note that addresses between resonance and schrodinger have changed, and will change again for testnet (3).

## How to create this data
Past testnets: `resonance_network`, `schrodinger`, `dirac`. Current testnet snapshot: `planck_miners.json`.

-> simply go to graphQL, and hit "minerStats". That's all!
## Fetch current testnet data

```bash
python3 testnet_data_snapshots/fetch_current_miners.py
```

This queries `https://sub2.quantus.com/v1/graphql` and writes `planck_miners.json`.

Options:

- `--output other_miners.json` — custom output filename
- `--export-csv` — also write the matching `.csv` file

You can also query GraphQL manually with the `minerStats` alias on `account_stats`.

## Export to CSV

To convert miner JSON snapshots into spreadsheet-friendly CSV:

```bash
python3 testnet_data_snapshots/export_miners_to_csv.py
```

This writes one `.csv` per `*_miners.json` file (same directory) with columns: `id`, `totalMinedBlocks`, `totalRewards`.
400 changes: 400 additions & 0 deletions testnet_data_snapshots/dirac_miners.csv

Large diffs are not rendered by default.

47 changes: 47 additions & 0 deletions testnet_data_snapshots/export_miners_to_csv.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/usr/bin/env python3
"""Export GraphQL minerStats JSON snapshots to CSV for spreadsheet import."""

from __future__ import annotations

import csv
import json
import sys
from pathlib import Path

COLUMNS = ("id", "totalMinedBlocks", "totalRewards")


def convert_json_to_csv(json_path: Path) -> int:
with json_path.open(encoding="utf-8") as handle:
payload = json.load(handle)

miners = payload["data"]["minerStats"]
csv_path = json_path.with_suffix(".csv")

with csv_path.open("w", newline="", encoding="utf-8") as handle:
writer = csv.DictWriter(handle, fieldnames=COLUMNS)
writer.writeheader()
writer.writerows(miners)

print(f"{json_path.name} -> {csv_path.name} ({len(miners)} rows)")
return len(miners)


def main() -> int:
snapshot_dir = Path(__file__).resolve().parent
json_files = sorted(snapshot_dir.glob("*_miners.json"))

if not json_files:
print(f"No *_miners.json files found in {snapshot_dir}", file=sys.stderr)
return 1

total_rows = 0
for json_path in json_files:
total_rows += convert_json_to_csv(json_path)

print(f"Exported {len(json_files)} file(s), {total_rows} total miner rows.")
return 0


if __name__ == "__main__":
raise SystemExit(main())
105 changes: 105 additions & 0 deletions testnet_data_snapshots/fetch_current_miners.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
#!/usr/bin/env python3
"""Fetch current testnet miner stats from Quantus GraphQL and save as JSON snapshot."""

from __future__ import annotations

import argparse
import json
import sys
import urllib.error
import urllib.request
from pathlib import Path

DEFAULT_ENDPOINT = "https://sub2.quantus.com/v1/graphql"
DEFAULT_OUTPUT = "planck_miners.json"

MINER_STATS_QUERY = """
query MyQuery {
minerStats: account_stats(
where: {total_mined_blocks: {_gt: 0}}
order_by: {total_mined_blocks: desc}
) {
id
totalMinedBlocks: total_mined_blocks
totalRewards: total_rewards
}
}
""".strip()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GraphQL query omits row limit

Medium Severity

The account_stats query in MINER_STATS_QUERY has no limit or pagination, so the Hasura-style endpoint may return only its default maximum rows. The script treats that partial page as a full snapshot, which can undercount miners and skew reward analysis without any warning.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 7cd58a0. Configure here.



def fetch_miner_stats(endpoint: str) -> dict:
body = json.dumps({"query": MINER_STATS_QUERY}).encode("utf-8")
request = urllib.request.Request(
endpoint,
data=body,
headers={
"Content-Type": "application/json",
"User-Agent": "task-master/1.0 (miner-stats-fetch)",
},
method="POST",
)

try:
with urllib.request.urlopen(request, timeout=60) as response:
payload = json.load(response)
except urllib.error.HTTPError as exc:
error_body = exc.read().decode("utf-8", errors="replace")
raise RuntimeError(f"GraphQL request failed ({exc.code}): {error_body}") from exc
except urllib.error.URLError as exc:
raise RuntimeError(f"Could not reach GraphQL endpoint: {exc.reason}") from exc

if "errors" in payload:
raise RuntimeError(f"GraphQL errors: {json.dumps(payload['errors'], indent=2)}")

if "data" not in payload or "minerStats" not in payload["data"]:
raise RuntimeError(f"Unexpected GraphQL response shape: {json.dumps(payload, indent=2)}")

return payload


def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
"--endpoint",
default=DEFAULT_ENDPOINT,
help=f"GraphQL endpoint URL (default: {DEFAULT_ENDPOINT})",
)
parser.add_argument(
"--output",
default=DEFAULT_OUTPUT,
help=f"Output JSON filename inside testnet_data_snapshots (default: {DEFAULT_OUTPUT})",
)
parser.add_argument(
"--export-csv",
action="store_true",
help="Also export the fetched JSON to CSV via export_miners_to_csv.py",
)
args = parser.parse_args()

snapshot_dir = Path(__file__).resolve().parent
output_path = snapshot_dir / args.output

print(f"Fetching miner stats from {args.endpoint} ...")
payload = fetch_miner_stats(args.endpoint)
miner_count = len(payload["data"]["minerStats"])

with output_path.open("w", encoding="utf-8") as handle:
json.dump(payload, handle, indent=2)
handle.write("\n")

print(f"Wrote {output_path.name} ({miner_count} miners)")

if args.export_csv:
from export_miners_to_csv import convert_json_to_csv

convert_json_to_csv(output_path)

return 0


if __name__ == "__main__":
try:
raise SystemExit(main())
except RuntimeError as exc:
print(exc, file=sys.stderr)
raise SystemExit(1)
161 changes: 161 additions & 0 deletions testnet_data_snapshots/planck_miners.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
id,totalMinedBlocks,totalRewards
qzjVZ8E957sD3cp8XS8Cf3bD4qLZPjYsdm6NSm5ZbA2o5BDZj,73105,28155121276846947
qznaZcifLXCN9M6cWeJ91XsGQ7NCbkiZCwaLouUSP5YMiMzyQ,26614,10256707989777470
qzqDMhonEncjXczzbaxXYTsFkh2MMDVSpCQXamVvK7EE6NSpY,19992,7724346107780540
qzkJ4DehqdMcBFHqVWPsZ7o6DpW5vJWNmsSs123vc9zCgjTod,18705,7286394758724671
qzjtwGuPGLy1C8mkpc7hp4ZyiK3WxaPJ5yg2dZtUnGprqZ84r,17816,6791663597286986
qzoe6nFgmXGwHA5zyUKwwGaiwFZjUBCvmXWCvZsnVA1LHEuHt,14174,5433573819629701
qzq92jufqAi6mq6NejVjbnFSHmWGp2btEz7jyCbqW2t2NAYZw,13361,5141084520099119
qzoUXSq3JiS3FNWLT1sX93orRW8iub9jijuKNs162oYf7gcmH,12655,4902730825106734
qzozjfZd8vfVFdoKbtmezfMWV21ngt2Qc429Df1uT8u5CMeWZ,12639,4820581667301216
qzk5T5k7XV5UwErhdCadnr5YG12rd7ZwXXMdQ9jKU8j1Qs8z6,11782,4716136748065193
qzogGp7Wf1UJn9gWNr6qbEhHtyvVPFXq4ResHiCRnTNVX73Yy,11307,4347312148743515
qzpkSBJZ2seaisouXx5r9HnhMzFUNrx8FdLTQLcE27veKurTc,10821,4255608072981682
qzoqy3pcLsBcPpGFqj9BTv3UyvRB9o8ScnKqcQfSbQTR6odnu,9936,3813518767117941
qzoGZBgSuPqRLLHe5E3MWR2Az3bLXdiobDJN56KdMoF5tyKhc,9557,3745411546476269
qzq3yzbR7iXgkAEWdANe7WkvCvHqZVsmTJVQ9qkWax28wKQ1d,9252,3526115255654701
qzoh8Nvauqx6fHiFftu8UU3vJncL23sZY9sP9PjxX8NtbbU71,9098,3508256206841844
qzk8ik4XDs99LechSUQ7X4UcsEn3x5G2K6HVAh12VGaeLKCaE,8839,3399258452975923
qzpciM4tLqLHhiRczjKd2kSwSWAncCYkuU6PdDyjZE37cbyMv,8579,3250242216745716
qzkkAjRoQckvDiHHVod21JBK9VwAHDxqACD44PUyhqckGokaD,8194,3170547835662030
qzphpYvryvfgPhykRHGA6dfNJggCyuWkLqrtbVG2fL7UMd2s3,8193,3470948060606317
qznf9mQwGAX7oqmyiNQ4cAm68d2S9Ayx8oV5dirMFPHFYgNPf,7675,2929094094881623
qzneChhG2NKkVycgweCDuBvksh4mvwNn58ySTcD6GYBHW5yLZ,7516,2858811280107912
qzpo2n7PByDUB8MP5jyqVh5NqRdCPQ418xB1ywEKFcShD7bPu,6739,2575218293100102
qzje34gHt9vcddjFSeRRpyo9zy3HVg7QjTUFvEkUzmxXRtfeo,6636,2539364163648904
qzpvavZmrYcDtpK4wuz4T9FE336FZoPbTVKAwS8SiLTH5JuuR,6279,2405442355367267
qzk7HyC72tCngnsZa8eR5CfH9VombFG2xA7YBSKE1P5KD5Ui6,6230,2395045779194833
qzn7QqFMK1Jrq932oEdqUgg1i5rgxh1tdJmnLrVYk2H9CfZGM,5915,2304120180809783
qzmBUdwKPZtkNMpUZTcuTdAgxzumJ3VBSrK2Z3jq3Wiv4fpNM,5704,2276383415528588
qzkXsiDa8wssERPRv24gQ8NJSsWqrKy2YbpFJAfLPPAbS75ot,5453,2798885958822775
qzntXFHNziRKXNRKDke7eugWHfGbsAdLY76MnpmPpq6GfnSsL,4798,1833515371259147
qzkpjqTqAkt7khy1QF1xophcFRMvEvnoC2P3cTD13yXjTxnL4,4678,1796714591808863
qznWNcF4qvGzMrFQNCxpUpG5wQqbyhi479QTVrsjjywSSKacC,4391,2033638591043509
qzoA7nYHPcDgoh5CoS6yokCjBbS4Krxgock8WACw3di9fhfMR,4141,1672339487774016
qzptQjWMTh95vs4w8fp6Mp3nvBc6LNJLpdPNXGPi9xRbLWraX,3910,1487978541493078
qzngBkeSDRAU4aE4YzNSMBhgi6L6HoWVNopgpeDUWz7xZF3Yr,3793,1452794536995697
qznAFkJZAFTWeLx7uszSRUMdEoSSE2fbXCfcEZSXLngE2sVyw,3527,1428221862261988
qzkArpDcgYXXBHjo1KC8gdcPCqa1mey39hV3ikmGT1Q773Hoi,3391,1294083369189439
qznjf7KKWr3XMdqUS2FnNh4eo69FWQALYvyd46RKvnkX8fZKf,3280,1265683229128697
qzotFdURyYYVE8PxtvZYPae79XDVZb2mupjwxUzuAp5zbxF2x,3111,1197723252811195
qzk3fjVeG9MHEfU9SVzAmUyb8yeDAwANyCzexqz8RQaHDLkV4,3005,1142537407304423
qzjfjzcmfeZ8Gmx3TRJQHA6Z7ps4LdKBSxJ86FXW6CYM4PhkX,2923,1120655325144894
qznFyjC5J8rev3q38Uq6AgmZZaz6pwVsNGYLY18o33dpQ82UC,2887,1106541942198009
qzpWaNzLvKGa28HUT4WZfRZ9mR3CmzGeKTLZWUAaGY2hZ5N4h,2789,1068637685863408
qzmzKoUTJeRRrHc1YheH289k96wR66Xyo6scgiJMwuk6GqcuB,2570,1010862712964546
qzkES36rs5AJSgo9cVuYhqeDXPZrYwtVyP1QVfZCVNhVBvLuq,2346,905127182548260
qzmDt1Nwq2L776DPH2czsfSpTvGZzGoTtsT5Xec1Lvt4U1uyL,1936,747568252484612
qznGJeNb8SmTKc8j4MveHRUDzFbxzJfpbwA1xXbVu88gQ81cG,1921,775849706012877
qznJU9ha9Pr71KZuocLfQTg85XmTLV9B4ookUdwumHH8Sx2Bw,1793,695296774916488
qznaH1f7pzGjRLo3GVwJdvtxJibUfHStGYcvEao3hYCy8CtTY,1680,641370857022187
qzmyJZ6rpZ7ia27SPMKJkBBZsSxvtbwNDkYVcCfNE7W5bSqCJ,1613,612657861325861
qzmX7W95uX4LS1Eoe7qJ2ffpvXt9zyeuBDDDAxELJrnJ5LAAh,1580,605352565478830
qzppKy8m9ETWMV8TUWmE3P5AuFTxka3ocKZ2wdg4whgHHigP5,1482,572605441221303
qzoFgxG8X5CvDFeZva9CtxYG3xqufvhojzJQvCymHGbxjop5P,1405,535924366032179
qzkhJXmG9MaC5aF3A7WF2hr8hLzCjyqAYYUwvUWXzKuaXXSSv,1368,521436421412360
qznZttca6MzPdsEaSC289BjqpxZzs4tpa7TWQ9xzzMZBNWc3W,1150,444084439842913
qzoV5wbHXENvywkCLNoVAZd7KzxxH2eREyZNbVRYNbaoh6jiT,1091,414583908832591
qznGw9v9cdVzL3neuLjdTtCMHZAnP5GoDdRXZw84B7DHQ85bQ,1000,382330411499861
qzoL1nn28VqPZy6kUvpe1mC3gW393bDjMBFVLwG2ka8Bn3uhY,987,381271600640084
qzjYMpbcejXW1d26G8MGVo9hAVWhc29EgwK8rQhZvQQUfvKcE,910,342237739014083
qzmMixDP4ZsZgXEKEzMjLoLLRhJkupyjHBv8AUwB4eTGDZDfg,905,343206244047809
qzk53pm2A7qVMaeHpbEptPKfURadMnW95uyK3YjhX34Enjwx5,878,335786135471082
qzowe2f4RP29RQChSvhMeSZVq1j2JeuzM2aVurTY2Vqx3WZuj,805,311211272667049
qznjVeZD28Z3Vo8dkb2o95si7pEgQ6PgdjczmiWZHHSk7zQZv,717,269637809644717
qznRv1Rs4SmSroEDGW8yfLELrUnSCesDF5vkBatasUpqY64Fg,691,262856277627171
qzmAmnxxYyq3fqBP55eHPXiNWMCmvVe2YEx5o9H7M9xFm6hET,610,235244709997812
qznaqHS3FQEVdsKRi9nc9JUFuCXoKcwE49cL8SF8mKGLHrLKs,589,228845910656355
qzoomLZaNLK84UmcaxjiLXmPhwE5X3eETC1YNyAe55qe379S4,555,212925870811736
qzpcuyNw8yNqTBnRzA7vQ5Uz4iCXWmGXKfCpn5qRjcM5uQ7gF,525,199799252779523
qznJJmLc72y56wLzKjopYVwY2oa8jSodCfmxtqU2VjCs1jZXZ,492,191254688644868
qzmUZW2Aghghw6TsSCgPmqEdbg1Nr5rvbQAKZFgkqPGNYTBEz,471,181838578628607
qzoWfxg9D7SkmsxfZxMJg8ZDS4GfJMtuNVjfcp92WAffSaokD,453,204261903700401
qzoe56Gzrt1NtwsmoUkEwL4UbXaRPNUJyhivzJBAJ2gewfJvo,451,173438532548612
qzoU827dmqjZWxcLkV8JEPHbjk7nVxVTuAphZJE5ouKCi9i3d,446,169091352281627
qzkjftZ5PLzzhjxTyp9byWVxWaaHFE4jDQJ9tXnJa2fLmVXTh,386,146855885593131
qzjVXZ4jz2PsFyJo11PoSp793QJAkpHCKk4sCxo48DFSQ7sfY,373,142204821756720
qzk6Bdtc1h93BGKkaYV8URjhs3cYgmzBVTGtE9RposguauoNt,351,135127446367932
qzoZ45rs5UTkM4MLiM4tDfE9RLFwGvutqyHm3vUk2cqQSqyRN,342,130524024915547
qzmQnLkom6SspzDKsABJQmqa2yRRpUzDsvi1gQHGZNd3dfcQT,338,136191234600847
qzkxev6EzBfPY8ehVoesywRqcYQzR3WA3WaXDUHhX6F9AkEJ7,281,107014472120585
qzjZfskbfWNH7AzHCQfCWia1wai1KDz1kynfufQDWqf7wZqER,276,105740813820475
qzoAWNYxGSvurncNDmLraamni2rh2xztbj9pfBRRxtxpJy9kR,262,99275035964130
qzk6kUXgqo2mg3FYp7HejWzN2y89ZTUWxY1JfSghv7pJ25ZiJ,258,98135102852897
qzkZZKyU5f85w5texCMYtLnG4wn7XmP6LbJPheJ1B4mYQiTdS,249,94529401222813
qzpW7oZydqZGGacSiQ96Jw7fzhRbQiCynt1LGhYSqHAsyehLv,245,93646717582774
qzpPZywsNZY4BhajHqDuL7SEkPQfJCJDcuPMQzosPX5bQmHFd,204,78605067187148
qzkfsjmauTtbEgAsX8hLYoWKkZUgn5E8HGd8Ra7uceUMAwa9D,182,70124144676651
qzmkuZHCkSxKsdiLft6itvokgcoVGY4LCEnHTqrqDLE5LW8ST,180,67806400773847
qzmkLmZ8L8pQCZhYqVsYrwjeNWt2aw8BCBAzP9YGbKCWtQrjj,160,60030408654099
qzpKpUGF8PzRwdYAJ9nJdytSTNs3za9WiCqZRnvkXczcDXfFB,155,57764154900257
qzkgH7zXgRmH94viJPwmZCEDirtCsKchd9ycMaLaMryjdsdwQ,143,54858413194509
qznWni9oj1YhEQWmwxH6EN6G9AH5Mor8qexsFWhjqysH77Hpq,143,54630895536589
qzknJzK1mxj4BPfJfevxuWtKnabogCp52ESnUEK1n7HY6iejs,143,55393042409931
qzk1q2cpsRTG9xR27YTJjpq6wkSrxj8EFydhy8XVQRNoVztkZ,135,52034464492340
qznCWPicHavhx5RV2R79EcHDio9y2baWjYYN4pKYQgiWJQHSx,131,49545879950486
qznf6AqnX41rbUcAZw37gAma4KT3SzXRQ479xn66QWmfMX4jM,116,44891979249758
qzp5rk1EYR4nXXmgXVSZC21jxmrKUkezpuFCvJq2YBaJMmEA7,95,36760474856366
qzjV98C5Wsf3AFp5GuSypPVBqZ2b98T61CnW2ua5ABCULv14W,93,35182786770354
qzpjRZgATwh8YX8RNGdVxkEJH3HbP6uANBfDzv16emghLNc1d,89,32433007887830
qzpyGFtvdwb6PEX8engvx6a1Fr34ynJ95mRCk79A7rMhEbsYd,83,31545720804346
qzmeLpn3zpnr6qByEkezHTxkWbfzHyUazFgXnMzzgWxc1mW1d,82,41376453800108
qzkdFgYDxFuA4e7CWCn6UAG51ZqPwbZgRLFGmTHMtr49hrqCf,72,27701818114636
qzmNdACGAF8juNpKwpeVx9kw6PNVX73m7g7RveLouoeDQ9MDp,71,27384782166204
qzokw2pZLzagChLZ4AzXQ8URmLSSTKGUpAcFsjg8sCQiAeBcv,69,26781220617303
qzoDZEJoJremk9FdshfPfquRkex7KGSdS62mrCMVqkzFPAkcf,68,25629941171100
qzpayjBTErGZbhQ3D5YUcyCP1PVwUSiWFRdyXjr1dT3sysCDo,62,23904690732819
qznL9CQFbtCn54m6QQQxNPsf2qsAGJCe6AtKwZ6rUWkLjxJVA,61,23667822145422
qzox4ZXRpoVt4CNbewQ6aRUApLuqxtAsNNxVeZFM8hJSL4kbN,56,21709495775676
qzmJZfma5ZAkBD9PLBSpBVi8WYpdzvhpJzsGoHH9Jq3PzZLFJ,54,20841494754862
qzoSismfMrpcoyDCPRwFrvo6sAFC5nHFSixgPd45swjN1xzkc,51,19554037855445
qzoxLXW767UZJNs52YezTgCNYy8nNMZ4fT1c6FPjDbeV3FucF,49,18826268068572
qzkV4WNDjjPhBjHj8fU1DeXjQykuUVFY9mbMJaardkvxGQGVn,49,17623592847195
qzmezXnGAqfFMxVVSP9mQLDQ9iVfFCbhVHfcDLgeEfdqD2BWH,36,13973029561194
qzjcjgUJpc7AdJyE4JFJCvsWUp2cjoNYjL6Aov52NqV5CmuFE,32,12422135584027
qzoo2z1erAV6UrWvstEYSL5aeTcFH9XK5fk9JyHa8WXt5gF7z,32,12395563606551
qzpyGemzsZvXRihgZg1uAGqnQLXBsy213WQGBLDD17hKJ3zpM,28,10865382769000
qzpqHg6mJ89HkcmoKYmWNfAX5GhNZW1PfqaApJ9cTryKzxW5M,27,10469346987364
qzosnG6CiepSxanKYe2jKHoj5DEqkGyXbghYaWKxznTqhWQax,27,10476599992749
qzocCRD4qnkNXDw44jh46Daw6s76z8PXiwAZvY7Uddc8aKFDr,24,9316897374230
qzmvZ2HK6bEhBpfBhp6hoF9kFJuzWcTzha8UEdsFsXFS7GBHK,23,8932494109657
qznVVeqLCFGbSAhuX44djxRgjxMtVvAsRbNvcmorDAr7izyfW,22,8548173970442
qzmeNN3Ut3nbzMTgUyqZZQFLUMboNtregUYS1y8JXB5P26UQ7,18,6933603300934
qzoFcKVewDKGFMbGVkXNrNoPU4kWw7j67pDjYs9EM3z1o3iN7,16,6185082047899
qzpRWSWuWhpsFKyu25XS9VGroZGvntCERUg6TbpF6Ra562nsJ,16,6209017311999
qzoHLnyZgjfLnGsFnP9uSEL2gMZZDFzkimQyrxm88Z4aw2K97,16,6209031562363
qzkUuwqEMxxGSwfZyrnYveXiMufyMrCsiBzqq8ziGAWcnfU2b,15,5801769635173
qznYt31QkD9wxRfSu1rDBR8qEvr5NyxKTWmYpYtAXCsE1YsCq,15,5790984143649
qzpA91p9XtvsWLSVufXABgBJded89385xDw7DdGQi7uJcH8ce,12,4634690687516
qzjgL9qpt1QiDQQ1mh2Wkj1YJqs8H4SdYJReuQzTcgwu1aFF6,10,3885499628251
qzoT2pMfp35nzuQDanx1D81eCv6LoKSu8i7vSHRXHQxgLTccR,10,3860521386880
qzpqxLHBnWSit8tPB4pWqr5f1R6dVGrbGaxFkj48gXPRzqA9C,9,3458315034568
qzpTdiu1jfTHPVqif1b5Vu6GDqUuy81Jxm76oiNQ16f5KZkBQ,8,3107154678617
qzoL8QqWzpJhSkRfK59FYrKtcsfNUxQ9tXEQWtznKAn64xpje,8,3105094607786
qzpcRZmNX4suvzHRWcwbj2kqtGrgxTP8n8cPvQYDswsL1Hrtj,7,2677292796833
qzjaWjqE8uocSjv7RaiGRbTeCi9APoHrwPGMS7vPnMtDiuEZ8,7,2693071933735
qzputQrk7ZUQkGNRXBNCCDxrdb8ACQq8xqWrEy433bv3f6CVt,7,2710438196212
qzjwF7pKyWfBcurxx5qtEB7UZyzTrYJvud1BfnamLb6grQX4p,5,1932923083493
qzkjVnqExQRK3SLndRbfi1GT4VdHuroZLeZuuKwnRuAhdmJpg,5,1943375826759
qznA4vcMujFgJdog7CxMsiAhKBr5QdhJh6G2sg6zFkp68oPjJ,4,1543894897634
qzkEd1jkBkoYCnpYkxdwBWfzizVV2txTNtFaZFaKPo86fZkUq,3,1164384286763
qznbtSyvbBezyRyo3P2E3t5aN5pGS36k2wyaYM3SsBX5J4t3v,3,1158660624354
qznKrw41msVGkP5VCCBVxzgzTwXVYtiSPMg5ky2re6VF7MLTE,3,1151318327245
qzpcj5GQKCTrDj5rJEJQoiQqYtMpui3u87TzWreBNtvtDP1F2,3,1156429611924
qzpxKxU9R9Wr1PTtaby6vw7EPoTxQTShPKmWJWAv3aLrmU7wV,3,1152422879151
qzkHaujm7Y69xc1nd5aMVT7JrTjjX61PQBmtaiNG5849vdQc3,3,1160489609797
qzndN6KuuwErhK1SHud86KiC9yN16KqNbZj67ZbN3Jbdr4Y8H,3,1160176107455
qzo87ZwuKz13ayPzDFQcdzpRK8gArkTWdG7dx3yKQgLxkC4kG,2,406428185932
qzo1VJSvmRHa547Gamx4HoQT9JeBrgFRTUWghAZWfHqeky1Yq,2,774587559401
qzk7RfwAxPHAczVqzajyt7upzMLi5UJ85uqaC8eWch3dpQCN9,2,776941220348
qznokNSfTTmbQFxdMgZAi18oZa4LAFg9p5ENdQqiQHb8Jzxvg,2,772181397149
qzjtdBwdhUVKtJVi2hatJ3H6XCuEmNxkYCKem5k8se64mz3mE,2,773921231960
qzjpNsNa4ieb8x4i7CixThW6wZE981K9WeLkangcND2mbzJ9d,2,774358999565
qzpEYGQmZ3t6Wovy6eXXiRBAXDvSry5vqGZWP7QhyDsMECNps,2,777182810244
qzkwZ8y7TXR8hw4dKsng9YqypR6buTfFtN6y7NRkDgyf6KujU,1,388105785401
qzpZjBNMYfBMDTQSwP65S5L5q2ZfDZkJLvuH7P8chuN2Xx5X5,1,383686653293
qzq2XqBesLK7NjPmqputmf7SRuYW7RPL6UCZZAHUYcZc7kbUy,1,388493035096
qzjpv7vUsyBD6qFu4qu8M4beoDdMf242Kqaobz2TJWK6KQSnv,1,383753772939
qzmB4sirTy9SbtjG61DvNY5yiW8px9XLHGxo6f9MSLiWyp913,1,388088152848
qzkMjWpxw1zq3dABct4xCpJjJUdVidoUvpJXAfKaYQqt1ZHex,1,382423517727
qznE1MGLKBzbHnnndbEQ6xSn3XkjMQzyRF6Rm5mrd5mhQN1hT,1,388460706369
qzp9Wa6EYVMv8fNY2BbegmGAJsP4N3wteqbUF8sgLqkRCSdtj,1,385610312846
Loading
Loading