Skip to content

Commit

Permalink
[electrum] initial monorepo integration
Browse files Browse the repository at this point in the history
Summary:
This is a copy of the ElectrumABC repository as of commit 9b72b3e

Two files related to CI and linting have been removed: `.pre-commit-config.yaml` and `.cirrus.yml`.
A new configuration file `.isort.cfg` has been added to mark the main packages as know first party packages to prevent `isort` from sorting them as third-party packages.

Permanent linter settings:

- The main modules are excluded from `lint-python-shebang` as a shebang does not make sense for non-scripts.
- Auto-generated files (protobuf and icons.py) are excluded from linters.

Temporary linter exclusions (to be fixed in separate diffs):

- `flake8`, because of remaining warnings from flake8 plugins (A001, A002, C401...)
- `lint-python-encoding`
- `shellcheck`
- `flynt` (low priority)
- `mypy` (low priority and difficult to fix)

Linter related changes:
- corrected spelling
- corrected and added bash shebangs
- added `export LC_ALL=C.UTF-8` to shell

Other changes:
- adapted the build scripts to work when the directory mapped to ELECTRUM_ROOT inside the docker is not the root of a git repo

Test Plan:
`arc lint --everything`

Make sure Electrum ABC works: `cd electrum && ./electrum-abc`

Check the `Help > Report Bug` menu now points to the Bitcoin-ABC repo

Make sure the build toolchains work:
```
cd electrum
contrib/build-wine/build.sh
contrib/build-linux/appimage/build.sh
contrib/build-linux/srcdist-docker/build.sh
```

Reviewers: #bitcoin_abc, Fabien

Reviewed By: #bitcoin_abc, Fabien

Subscribers: Fabien

Differential Revision: https://reviews.bitcoinabc.org/D14088
  • Loading branch information
PiRK authored and abc-bot committed Jul 22, 2023
1 parent eec013d commit 6be65cd
Show file tree
Hide file tree
Showing 32 changed files with 270 additions and 190 deletions.
6 changes: 4 additions & 2 deletions contrib/deterministic-build/find_restricted_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,10 @@ def check_restriction(p, r):
if check_restriction(dep, restricted):
print(dep_basename, sep=" ")
print(
f"Installing {dep} from {p} although it is only needed for "
f"{restricted}",
(
f"Installing {dep} from {p} although it is only needed for "
f"{restricted}"
),
file=sys.stderr,
)
except TypeError:
Expand Down
5 changes: 2 additions & 3 deletions electrumabc/asert_daa.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,8 @@ def _get_asert_activation_mtp():
pass
if not isinstance(mtp, int) or mtp <= 1510600000:
print_error(
"Error: Environment variable ASERT_MTP ignored because it is invalid: {}".format(
str(mtp)
)
"Error: Environment variable ASERT_MTP ignored because it is invalid: {}"
.format(str(mtp))
)
mtp = default_mtp
if mtp != default_mtp:
Expand Down
12 changes: 7 additions & 5 deletions electrumabc/caches.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ def get(self, key, default=None):
res = self.d.get(key)
if res is not None:
# cache hit
res[
0
] = _ExpiringCacheMgr.tick # update tick access time for this cache hit
res[0] = (
_ExpiringCacheMgr.tick
) # update tick access time for this cache hit
return res[1]
# cache miss
return default
Expand Down Expand Up @@ -355,8 +355,10 @@ def inner(obj):
)
except Exception as e:
warnings.warn(
f"warning: unable to process object '{obj}' due to"
f" exception: {repr(e)}",
(
f"warning: unable to process object '{obj}' due to"
f" exception: {repr(e)}"
),
RuntimeWarning,
stacklevel=2,
)
Expand Down
4 changes: 1 addition & 3 deletions electrumabc/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -849,9 +849,7 @@ def trigger_callback(self, *args, **kwargs):
q.get(timeout=min(max(time_remaining() / 2.0, 0.001), 10.0))
except queue.Empty:
pass
kwargs[
"fee_calc_timeout"
] = (
kwargs["fee_calc_timeout"] = (
time_remaining()
) # since we blocked above, recompute time_remaining for kwargs
return self.wallet.export_history(**kwargs)
Expand Down
20 changes: 12 additions & 8 deletions electrumabc/dnssec.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,21 +206,25 @@ def new(self):
1,
"IN",
"DNSKEY",
"257 3 8"
" AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU=",
(
"257 3 8"
" AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU="
),
),
# KSK-2010:
dns.rrset.from_text(
".",
15202,
"IN",
"DNSKEY",
"257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF"
" FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX"
" bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD"
" X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz"
" W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS"
" Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=",
(
"257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF"
" FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX"
" bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD"
" X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz"
" W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS"
" Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0="
),
),
]

Expand Down
6 changes: 4 additions & 2 deletions electrumabc/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,10 @@ def get_socket(self):
try:
os.remove(cert_path)
self.print_error(
"Server is now using a CA-signed certificate, deleted"
" previous self-signed certificate:",
(
"Server is now using a CA-signed certificate, deleted"
" previous self-signed certificate:"
),
cert_path,
)
except OSError:
Expand Down
5 changes: 2 additions & 3 deletions electrumabc/json_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -472,9 +472,8 @@ def get_seed_version(self):
if seed_version > FINAL_SEED_VERSION:
raise WalletFileException(
"This version of Electrum is too old to open this wallet.\n"
"(highest supported storage version: {}, version of this file: {})".format(
FINAL_SEED_VERSION, seed_version
)
"(highest supported storage version: {}, version of this file: {})"
.format(FINAL_SEED_VERSION, seed_version)
)
if seed_version >= 12:
return seed_version
Expand Down
6 changes: 3 additions & 3 deletions electrumabc/mnemo.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,9 +289,9 @@ def __init__(self, lang=None):
self.data.words = tuple(load_wordlist(filename))
self.data.word_indices = dict()
for i, word in enumerate(self.data.words):
self.data.word_indices[
word
] = i # saves on O(N) lookups for words. The alternative is to call wordlist.index(w) for each word which is slow.
self.data.word_indices[word] = (
i # saves on O(N) lookups for words. The alternative is to call wordlist.index(w) for each word which is slow.
)
self.print_error("wordlist has %d words" % len(self.data.words))
assert len(self.data.words) == len(
self.data.word_indices
Expand Down
11 changes: 6 additions & 5 deletions electrumabc/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -1478,8 +1478,10 @@ def on_header(self, interface, request, response):

if not request:
interface.print_error(
"disconnecting server for sending unsolicited header, no request,"
f" params={response['params']}",
(
"disconnecting server for sending unsolicited header, no request,"
f" params={response['params']}"
),
blacklist=True,
)
self.connection_down(interface.server)
Expand All @@ -1492,9 +1494,8 @@ def on_header(self, interface, request, response):
# sort of rewrite.
if height != response_height:
interface.print_error(
"unsolicited header request={} request_height={} response_height={}".format(
request_params, height, response_height
)
"unsolicited header request={} request_height={} response_height={}"
.format(request_params, height, response_height)
)
self.connection_down(interface.server)
return
Expand Down
12 changes: 8 additions & 4 deletions electrumabc/paymentrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -660,8 +660,10 @@ class PaymentRequestBitPay20(PaymentRequest, PrintError):

Details = namedtuple(
"BitPay20Details",
"outputs, memo, payment_url, time, expires, network, currency,"
" required_fee_rate",
(
"outputs, memo, payment_url, time, expires, network, currency,"
" required_fee_rate"
),
)

class Raw:
Expand Down Expand Up @@ -935,8 +937,10 @@ def verify(self, contacts, *, timeout=10.0):
else:
# TODO: Fixme -- for now this branch will always be taken because we turned off key download in _get_signing_keys() above
self.print_error(
"Warning: Could not verify whether signing public key is"
" valid:",
(
"Warning: Could not verify whether signing public key is"
" valid:"
),
pubkey.hex(),
"(PGP verification is currently disabled)",
)
Expand Down
16 changes: 9 additions & 7 deletions electrumabc/plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@ def retranslate_internal_plugin_metadata(self, name):
)
else:
d[key] = val # rewrite translated string
d[
ut_key
] = ut_val # save untranslated metadata for later so that this function may be called again from GUI
d[ut_key] = (
ut_val # save untranslated metadata for later so that this function may be called again from GUI
)

def load_internal_plugins(self):
for loader, name, ispkg in pkgutil.iter_modules(
Expand Down Expand Up @@ -653,10 +653,12 @@ def myhook(self, arg1, arg2):
this_thread = threading.current_thread()
if this_thread is not threading.main_thread():
warn(
f'run_hook "{name}" being called from outside the main'
f" thread (thr: {this_thread.name}) may lead to undefined"
" behavior. Please use util.do_in_main_thread to call run_hook"
" if the hook in question does not return any results.",
(
f'run_hook "{name}" being called from outside the main'
f" thread (thr: {this_thread.name}) may lead to undefined"
" behavior. Please use util.do_in_main_thread to call run_hook"
" if the hook in question does not return any results."
),
stacklevel=2,
)
f_list = hooks.get(name)
Expand Down
5 changes: 2 additions & 3 deletions electrumabc/synchronizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,9 +358,8 @@ def process():
chk_txid = tx.txid_fast()
if tx_hash != chk_txid:
self.print_error(
"received tx does not match expected txid ({} != {}), skipping".format(
tx_hash, chk_txid
)
"received tx does not match expected txid ({} != {}), skipping"
.format(tx_hash, chk_txid)
)
return
del chk_txid
Expand Down
20 changes: 11 additions & 9 deletions electrumabc/tests/test_avalanche.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,15 +214,17 @@ def test_1_stake(self):
},
],
Address.from_string("ecash:qrupwtz3a7lngsf6xz9qxr75k9jvt07d3uexmwmpqy"),
"d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b"
"c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967"
"e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb"
"5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680e6569b4412"
"fbb651e44282419f62e9b3face655d3a96e286f70dd616592d6837ccf55cadd71eb53"
"50a4c46f23ca69230c27f6c0a7c1ed15aee38ab4cbc6f8d031976a914f8172c51efbf"
"34413a308a030fd4b164c5bfcd8f88ac2fe2dbc2d5d28ed70f4bf9e3e7e76db091570"
"8100f048a17f6347d95e1135d6403241db4f4b42aa170919bd0847d158d087d9b0d9b"
"92ad41114cf03a3d44ec84",
(
"d97587e6c882615796011ec8f9a7b1c621023beefdde700a6bc02036335b4df141c8b"
"c67bb05a971f5ac2745fd683797dde30169a79ff23e1d58c64afad42ad81cffe53967"
"e16beb692fc5776bb442c79c5d91de00cf21804712806594010038e168a32102449fb"
"5237efe8f647d32e8b64f06c22d1d40368eaca2a71ffc6a13ecc8bce680e6569b4412"
"fbb651e44282419f62e9b3face655d3a96e286f70dd616592d6837ccf55cadd71eb53"
"50a4c46f23ca69230c27f6c0a7c1ed15aee38ab4cbc6f8d031976a914f8172c51efbf"
"34413a308a030fd4b164c5bfcd8f88ac2fe2dbc2d5d28ed70f4bf9e3e7e76db091570"
"8100f048a17f6347d95e1135d6403241db4f4b42aa170919bd0847d158d087d9b0d9b"
"92ad41114cf03a3d44ec84"
),
UInt256.from_hex(
"199bd28f711413cf2cf04a2520f3ccadbff296d9be231c00cb6308528a0b51ca",
),
Expand Down
102 changes: 62 additions & 40 deletions electrumabc/tests/test_dnssec.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@ def test_validate_rrsig_ecdsa(self):
3599,
1,
48,
"257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0d"
" xCjjnopKl+GqJxpVXckHAeF+KkxLbxIL fDLUT0rAK9iUzy1L53eKGQ==",
"256 3 13 koPbw9wmYZ7ggcjnQ6ayHyhHaDNMYELK"
" TqT+qRGrZpWSccr/lBcrm10Z1PuQHB3A zhii+sb0PYFkH1ruxLhe5g==",
(
"257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0d"
" xCjjnopKl+GqJxpVXckHAeF+KkxLbxIL fDLUT0rAK9iUzy1L53eKGQ=="
),
(
"256 3 13 koPbw9wmYZ7ggcjnQ6ayHyhHaDNMYELK"
" TqT+qRGrZpWSccr/lBcrm10Z1PuQHB3A zhii+sb0PYFkH1ruxLhe5g=="
),
)
rrsig = dns.rdtypes.ANY.RRSIG.RRSIG.from_text(
1,
Expand All @@ -42,8 +46,10 @@ def test_validate_rrsig_rsa(self):
12698,
1,
43,
"2371 13 2"
" 3b7f818a879ecb9931dae983d4529afedeb53993759d8080735083f954d40bc8",
(
"2371 13 2"
" 3b7f818a879ecb9931dae983d4529afedeb53993759d8080735083f954d40bc8"
),
)
rrsig = dns.rdtypes.ANY.RRSIG.RRSIG.from_text(
1,
Expand All @@ -61,26 +67,34 @@ def test_validate_rrsig_rsa(self):
866,
1,
48,
"256 3 7 AwEAAXxsMmN/JgpEE9Y4uFNRJm7Q9GBw"
" mEYUCsCxuKlgBU9WrQEFRrvAeMamUBeX 4SE8s3V/TEk/TgGmPPp0pMkKD7mseluK"
" 6Ard2HZ6O3nPAzL4i8py/UDRUmYNSCxw fdfjUWRmcB9H+NKWMsJoDhAkLFqg5HS7"
" f0j4Vb99Wac24Fk7",
"256 3 7 AwEAAcLdAPt3vn/ND00zZlyTx7OBko+9"
" YeCrSl2eGuEXjef0Lqf0tKGikoHwnmTH tT8J/aGqkZImLMVByJbknE0wKDnbvbKD"
" oTQxPwUQZLH6k3sTdsPKESKDSBSc6VFM q35gx6CeuRYZ9KkGWiUsKqJhXPo6tyJF"
" CBxfaNQQyrzBnv4/",
"257 3 7 AwEAAZTjbIO5kIpxWUtyXc8avsKyHIIZ"
" +LjC2Dv8naO+Tz6X2fqzDC1bdq7HlZwt kaqTkMVVJ+8gE9FIreGJ4c8G1GdbjQgb"
" P1OyYIG7OHTc4hv5T2NlyWr6k6QFz98Q 4zwFIGTFVvwBhmrMDYsOTtXakK6QwHov"
" A1+83BsUACxlidpwB0hQacbD6x+I2RCD zYuTzj64Jv0/9XsX6AYV3ebcgn4hL1jI"
" R2eJYyXlrAoWxdzxcW//5yeL5RVWuhRx ejmnSVnCuxkfS4AQ485KH2tpdbWcCopL"
" JZs6tw8q3jWcpTGzdh/v3xdYfNpQNcPI mFlxAun3BtORPA2r8ti6MNoJEHU=",
"257 3 7 AwEAAcMnWBKLuvG/LwnPVykcmpvnntwx"
" fshHlHRhlY0F3oz8AMcuF8gw9McCw+Bo C2YxWaiTpNPuxjSNhUlBtcJmcdkz3/r7"
" PIn0oDf14ept1Y9pdPh8SbIBIWx50ZPf VRlj8oQXv2Y6yKiQik7bi3MT37zMRU2k"
" w2oy3cgrsGAzGN4s/C6SFYon5N1Q2O4h GDbeOq538kATOy0GFELjuauV9guX/431"
" msYu4Rgb5lLuQ3Mx5FSIxXpI/RaAn2mh M4nEZ/5IeRPKZVGydcuLBS8GZlxW4qbb"
" 8MgRZ8bwMg0pqWRHmhirGmJIt3UuzvN1 pSFBfX7ysI9PPhSnwXCNDXk0kk0=",
(
"256 3 7 AwEAAXxsMmN/JgpEE9Y4uFNRJm7Q9GBw"
" mEYUCsCxuKlgBU9WrQEFRrvAeMamUBeX 4SE8s3V/TEk/TgGmPPp0pMkKD7mseluK"
" 6Ard2HZ6O3nPAzL4i8py/UDRUmYNSCxw fdfjUWRmcB9H+NKWMsJoDhAkLFqg5HS7"
" f0j4Vb99Wac24Fk7"
),
(
"256 3 7 AwEAAcLdAPt3vn/ND00zZlyTx7OBko+9"
" YeCrSl2eGuEXjef0Lqf0tKGikoHwnmTH tT8J/aGqkZImLMVByJbknE0wKDnbvbKD"
" oTQxPwUQZLH6k3sTdsPKESKDSBSc6VFM q35gx6CeuRYZ9KkGWiUsKqJhXPo6tyJF"
" CBxfaNQQyrzBnv4/"
),
(
"257 3 7 AwEAAZTjbIO5kIpxWUtyXc8avsKyHIIZ"
" +LjC2Dv8naO+Tz6X2fqzDC1bdq7HlZwt kaqTkMVVJ+8gE9FIreGJ4c8G1GdbjQgb"
" P1OyYIG7OHTc4hv5T2NlyWr6k6QFz98Q 4zwFIGTFVvwBhmrMDYsOTtXakK6QwHov"
" A1+83BsUACxlidpwB0hQacbD6x+I2RCD zYuTzj64Jv0/9XsX6AYV3ebcgn4hL1jI"
" R2eJYyXlrAoWxdzxcW//5yeL5RVWuhRx ejmnSVnCuxkfS4AQ485KH2tpdbWcCopL"
" JZs6tw8q3jWcpTGzdh/v3xdYfNpQNcPI mFlxAun3BtORPA2r8ti6MNoJEHU="
),
(
"257 3 7 AwEAAcMnWBKLuvG/LwnPVykcmpvnntwx"
" fshHlHRhlY0F3oz8AMcuF8gw9McCw+Bo C2YxWaiTpNPuxjSNhUlBtcJmcdkz3/r7"
" PIn0oDf14ept1Y9pdPh8SbIBIWx50ZPf VRlj8oQXv2Y6yKiQik7bi3MT37zMRU2k"
" w2oy3cgrsGAzGN4s/C6SFYon5N1Q2O4h GDbeOq538kATOy0GFELjuauV9guX/431"
" msYu4Rgb5lLuQ3Mx5FSIxXpI/RaAn2mh M4nEZ/5IeRPKZVGydcuLBS8GZlxW4qbb"
" 8MgRZ8bwMg0pqWRHmhirGmJIt3UuzvN1 pSFBfX7ysI9PPhSnwXCNDXk0kk0="
),
)
keys = {dns.name.Name([b"org", b""]): rrset2}
origin = None
Expand All @@ -97,8 +111,10 @@ def test_validate_rrsig_fail(self):
86400,
1,
43,
"2371 13 2"
" 3b7f818a879ecb9931dae983d4529afedeb53993759d8080735083f954d40bc8",
(
"2371 13 2"
" 3b7f818a879ecb9931dae983d4529afedeb53993759d8080735083f954d40bc8"
),
"106 5 1 4F219DCE274F820EA81EA1150638DABE21EB27FC",
)
rrsig = dns.rdtypes.ANY.RRSIG.RRSIG.from_text(
Expand All @@ -117,18 +133,24 @@ def test_validate_rrsig_fail(self):
866,
1,
48,
"256 3 7 AwEAAZwBxCB7AIhIWiqjusg2lfHSi8orabyy5BM/UtidQEZKIvU5Mrh7"
" 7eV4C3WyTOwd2AwoGYAUgPjzAC5lFFnCg0LsQpsV7sYy5k+bZBlpxF1o"
" 9KuBOe+iUQt2YM4TjTD38mW1aN8OFf8mkMxkRzo3dfskzsT881CdJRiD Cg18hJJt",
"256 3 7 AwEAAdZenjsGF9Xmh+hjv1FV0w8rRC6SHKeMNuk53BRsqruVK2xCbLGm"
" gtue1yMElMs5+4B5A+uZY8pj4c5fHgC06h3gd0XoIF+KvWhk5WDqohrv"
" 0nUADQjBBAGRaaO4FDTuu8i19sRg3p3h1LoAgZi+Gcls+JxOdnohVUkp 0by82buT",
"257 3 7 AwEAAcMnWBKLuvG/LwnPVykcmpvnntwxfshHlHRhlY0F3oz8AMcuF8gw"
" 9McCw+BoC2YxWaiTpNPuxjSNhUlBtcJmcdkz3/r7PIn0oDf14ept1Y9p"
" dPh8SbIBIWx50ZPfVRlj8oQXv2Y6yKiQik7bi3MT37zMRU2kw2oy3cgr"
" sGAzGN4s/C6SFYon5N1Q2O4hGDbeOq538kATOy0GFELjuauV9guX/431"
" msYu4Rgb5lLuQ3Mx5FSIxXpI/RaAn2mhM4nEZ/5IeRPKZVGydcuLBS8G"
" ZlxW4qbb8MgRZ8bwMg0pqWRHmhirGmJIt3UuzvN1pSFBfX7ysI9PPhSn wXCNDXk0kk0=",
(
"256 3 7 AwEAAZwBxCB7AIhIWiqjusg2lfHSi8orabyy5BM/UtidQEZKIvU5Mrh7"
" 7eV4C3WyTOwd2AwoGYAUgPjzAC5lFFnCg0LsQpsV7sYy5k+bZBlpxF1o"
" 9KuBOe+iUQt2YM4TjTD38mW1aN8OFf8mkMxkRzo3dfskzsT881CdJRiD Cg18hJJt"
),
(
"256 3 7 AwEAAdZenjsGF9Xmh+hjv1FV0w8rRC6SHKeMNuk53BRsqruVK2xCbLGm"
" gtue1yMElMs5+4B5A+uZY8pj4c5fHgC06h3gd0XoIF+KvWhk5WDqohrv"
" 0nUADQjBBAGRaaO4FDTuu8i19sRg3p3h1LoAgZi+Gcls+JxOdnohVUkp 0by82buT"
),
(
"257 3 7 AwEAAcMnWBKLuvG/LwnPVykcmpvnntwxfshHlHRhlY0F3oz8AMcuF8gw"
" 9McCw+BoC2YxWaiTpNPuxjSNhUlBtcJmcdkz3/r7PIn0oDf14ept1Y9p"
" dPh8SbIBIWx50ZPfVRlj8oQXv2Y6yKiQik7bi3MT37zMRU2kw2oy3cgr"
" sGAzGN4s/C6SFYon5N1Q2O4hGDbeOq538kATOy0GFELjuauV9guX/431"
" msYu4Rgb5lLuQ3Mx5FSIxXpI/RaAn2mhM4nEZ/5IeRPKZVGydcuLBS8G"
" ZlxW4qbb8MgRZ8bwMg0pqWRHmhirGmJIt3UuzvN1pSFBfX7ysI9PPhSn wXCNDXk0kk0="
),
)
keys = {dns.name.Name([b"org", b""]): rrset2}
origin = None
Expand Down

0 comments on commit 6be65cd

Please sign in to comment.