From 17bbb9c0b4184c57551f88c9197315f33c49f509 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Mon, 12 May 2025 20:20:29 +0200 Subject: [PATCH] Updated docs --- docs/Reticulum Manual.epub | Bin 3546839 -> 3546914 bytes docs/Reticulum Manual.pdf | Bin 4172346 -> 4172830 bytes docs/manual/_sources/understanding.rst.txt | 6 +++--- docs/manual/_sources/whatis.rst.txt | 2 +- docs/manual/examples.html | 4 ++-- docs/manual/reference.html | 7 ++++--- docs/manual/searchindex.js | 2 +- docs/manual/understanding.html | 6 +++--- docs/manual/whatis.html | 2 +- 9 files changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index f66136fa431ab29a8d3f977a18a13f3d0242f38f..9f474e2fe9a0bc093bfd19df7e2c94ec6cf43f00 100644 GIT binary patch delta 38974 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 delta 38897 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

?p>!`U;QNzsUDRwkJd10s=$;G_e)9vvpN`c_ z{LT+ONK#vgxtk^k+AuVpq8s@=Z!V92%3sngb|`P>QCsIgZZ=gz=p>TqMsNt$TH6BR zeQ}VXLvg1&HIZ(ffVTv6%BuTq6Wn%bJN&*heaRl82z?ONy+5Qy&@Fnio%OuVXb5$| zcm>OTI#)%cYTILeH4J_ymRFw_i3xm=EEyV18&v1opn7_+LG{4)7ly5|etSZHn{42n z`R;Z}S4Qh6>;Xk9)ie%66uO`T%L0j{w}z(jb)&n6PDk1U9e{q1=vJwH0Am_e22S)L z8h1YUW0y8iGujdthT2D)2c2xG8o;a_uO&)X1hnnFHX_=vSX>nhi=v}m0PF@Wac4wc z93yFMs!oxU`qLJc>2r4rijyIKqq1b<&djGfMrL3rD@J-^OY_9R1?j#ZjD@YcR4ujFz;YrNJJw=fK#iF<_DRt4X!$e>bVH~W|4olH6 zOg1hocKbB2t_cOMY(tNKJJBJb1{cwwK@#cAuf7PuW>`^{n+g*7oPlcgQ9>H2l0?}q96;P^17w*@-1 zzbr?AxL(^uQpNaI3?6HVPQunXhPE{>9y36?Aujz2wcR>;SUZD%gF-thdf~>klIYAco4O(A;XF4z!d-zu1S&o;2WUF))NXo6ui4rB+V#B@c$ zY`o^KLag1gmD$)jNX^-5k%CNL>&s^BzZsGr2X7qH0s8#osJ}39{dnNPm!G?9aHzi^ zfh{!fd#aW71uDdUZ>m`SMud-Stj5&yXM8@YQg*c&*2XL7?6A_U-TGix*<`j%;_zuR z@ZJ_OcT-;0)ump&Ea!Cp$;pSC`0ce)-wI`$oh*%SnFJPI(Nc?_bo=V-NnyZh@ z;RYo%5u-2v?AT{l~ zqDjoY6t69MuKy}KZ$`S73!j8AI`6=+j*hI7(CFiVCiX=fSdE6s)T7d`d`mAjelb_U zHyXmmQYb5S!FuaomKsfTUJ>pT52QR}eK-u(PFc%c$rLpA!bde3e zqa@LP;V8{G-a59}}XEP^+rKno@nr~GO_8PmxDX(t`#3LGJp?l5%VGD7$YnXIAn(+vQ*^1 zQ+8&1va<_y*~JYl&-P~K3c39VaeW=WFsNxAD^j

Requests & Responses#

The Request example explores sending requests and receiving responses.

##########################################################
-# This RNS example demonstrates how to set perform       #
-# requests and receive responses over a link.            #
+# This RNS example demonstrates how to perform requests  #
+# and receive responses over a link.                     #
 ##########################################################
 
 import os
diff --git a/docs/manual/reference.html b/docs/manual/reference.html
index 3b7001d..6e0ae02 100644
--- a/docs/manual/reference.html
+++ b/docs/manual/reference.html
@@ -817,7 +817,7 @@ proofs should be returned for received packets.

-register_request_handler(path, response_generator=None, allow=ALLOW_NONE, allowed_list=None)#
+register_request_handler(path, response_generator=None, allow=ALLOW_NONE, allowed_list=None, auto_compress=True)#

Registers a request handler.

Parameters:
@@ -826,6 +826,7 @@ proofs should be returned for received packets.

  • response_generator – A function or method with the signature response_generator(path, data, request_id, link_id, remote_identity, requested_at) to be called. Whatever this funcion returns will be sent as a response to the requester. If the function returns None, no response will be sent.

  • allow – One of RNS.Destination.ALLOW_NONE, RNS.Destination.ALLOW_ALL or RNS.Destination.ALLOW_LIST. If RNS.Destination.ALLOW_LIST is set, the request handler will only respond to requests for identified peers in the supplied list.

  • allowed_list – A list of bytes-like RNS.Identity hashes.

  • +
  • auto_compress – If True or False, determines whether automatic compression of responses should be carried out. If set to an integer value, responses will only be auto-compressed if under this size in bytes. If omitted, the default compression settings will be followed.

  • Raises:
    @@ -1015,9 +1016,9 @@ they are addressed to a RNS.Destination.GROUP destination or a RNS.Link.

    For RNS.Destination.GROUP destinations, Reticulum will use the pre-shared key configured for the destination. All packets to group -destinations are encrypted with the same AES-128 key.

    +destinations are encrypted with the same AES-256 key.

    For RNS.Destination.SINGLE destinations, Reticulum will use a newly -derived ephemeral AES-128 key for every packet.

    +derived ephemeral AES-256 key for every packet.

    For RNS.Link destinations, Reticulum will use per-link ephemeral keys, and offers Forward Secrecy.

    diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 8ffa945..725da1c 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Configuring Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 10], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9, 11], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10, 11], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9, 10], "your": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": [0, 5], "minimum": [0, 5, 6, 7, 9], "setup": [0, 2, 4, 5, 10], "requir": [0, 2, 5, 6, 7, 9, 10, 11], "connect": [0, 3, 4, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 4, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 4, 6, 7, 9, 10], "destin": [0, 2, 4, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 5, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9, 10], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": 0, "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9, 10], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 10, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "automat": [0, 2, 5, 6, 7, 9, 10, 11], "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 6, 7, 9, 11], "prove": [0, 9], "packet": [0, 2, 4, 5, 6, 7, 10, 11], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 10, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 7, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 5, 6, 7, 9, 10], "tri": 0, "whether": [0, 2, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 10, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 2, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": [0, 2], "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7, 10], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 2, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5, 7], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 5, 6, 10], "action": 0, "store": [0, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "0": [0, 2, 5, 7, 9, 10, 11], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9, 10], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 5, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 2, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 7, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9, 10], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 5, 7, 9], "happen": [0, 2, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "len": 0, "1": [0, 2, 5, 7, 9, 10], "data": [0, 2, 3, 4, 5, 6, 7, 9, 11], "encod": [0, 7], "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 7, 9, 10], "want": [0, 2, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9, 10], "__init__": [0, 7], "self": [0, 6, 11], "call": [0, 2, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10], "cannot": [0, 2, 5, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 4, 9, 10], "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 3, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 2, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": [0, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7, 10], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 7, 9, 11], "server_ident": 0, "queri": [0, 2, 7, 10], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 2, 7, 9, 10, 11], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 10, 11], "wai": [0, 2, 5, 6, 7, 9, 10], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10, 11], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": [0, 7, 10], "dbm": [0, 5, 10], "snr": [0, 7, 10], "db": [0, 10], "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9, 10], "represent": [0, 7], "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": [0, 10], "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 10, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10, 11], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7, 10], "kei": [0, 4, 6, 7, 10, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7, 10], "modul": [0, 2, 3, 5, 9, 10, 11], "known": [0, 5, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 7, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 7, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 2, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7], "forth": 0, "o": [0, 2, 5, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 7, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": [0, 5], "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 7, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9, 10], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "perform": [0, 2, 5, 6, 7, 9, 10], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 2, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3, 11], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 10, 11], "serial": [0, 2, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 7], "assign": [0, 9, 10], "integ": 0, "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 5, 7, 9, 11], "across": [0, 3, 6, 7], "0xf000": [0, 7], "reserv": [0, 7], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 7, 9, 10], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9, 10], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 2, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": [0, 7], "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 5, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 5, 9], "compress": [0, 7, 9, 11], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 5, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 7, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "thread": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 5, 6, 9, 10], "isdir": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 5, 6, 7, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 2, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9, 10], "conclud": [0, 7], "hasattr": 0, "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "statist": [0, 5, 7, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 2, 5, 7, 9, 10], "normal": [0, 2, 5, 7, 10], "accordingli": [0, 5], "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10, 11], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": [0, 5], "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": [0, 5], "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 7, 9, 11], "job": 0, "potenti": [0, 2, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "daemon": [0, 2, 5, 7, 10], "detect": 0, "shown": 0, "progress": [0, 7, 10, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 7, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": [0, 10], "m": [0, 2, 9, 10], "g": [0, 10], "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 5, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3, 5], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "pre": [2, 7, 9], "built": [2, 5, 9, 10, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 10, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 4, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "facilit": 2, "suit": [2, 3, 9, 10], "featur": [2, 5, 7, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": [2, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "locat": [2, 5, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 5, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": [2, 9], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": [2, 5], "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9, 10], "failur": [2, 5, 7], "guarante": [2, 9], "weird": 2, "goe": 2, "sai": 2, "hardcod": 2, "ship": 2, "practic": [2, 9, 11], "solut": [2, 9, 10], "leav": [2, 6, 9], "wide": [2, 3, 5, 9, 10, 11], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9, 10], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 5, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": 2, "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 10, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "h": [2, 10], "ping": [2, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "april": 2, "2023": [2, 10], "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "restor": [2, 5], "behaviour": [2, 5, 10], "edit": [2, 10], "conf": 2, "break": [2, 7, 9, 11], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "briefli": [3, 9], "describ": [3, 5, 7, 9], "emploi": [3, 9], "pattern": [3, 9], "high": [3, 5, 9, 11], "capac": [3, 5, 7, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": [3, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 7, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "level": [3, 5, 9, 10], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "short": [3, 5, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 7, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 5, 9], "cheap": [3, 5, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "switch": [3, 5, 9, 10], "fiber": 3, "optic": [3, 11], "virtual": [3, 5, 6, 9, 10, 11], "adapt": [3, 6], "tun": [3, 5], "tap": 3, "serialinterfac": [3, 5], "usb": [3, 6, 9, 10], "freedv": 3, "tnc": [3, 5, 7, 10, 11], "dire": 3, "wolf": 3, "aim": [4, 9], "particip": [4, 6, 9], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "meshchat": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "radio": [4, 5, 6, 7, 9, 10, 11], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "pure": [4, 9], "rnid": 4, "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "modem": [4, 5, 6, 7, 9, 11], "udp": [4, 6, 9, 10, 11], "multi": [4, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "group_id": 5, "multicast": 5, "temporari": 5, "perman": [5, 10], "multicast_address_typ": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "autodiscov": 5, "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "udpinterfac": 5, "forward_ip": 5, "255": [5, 10], "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "15": 5, "16": [5, 9, 10], "frequent": 5, "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7, 10], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "flow_control": 5, "airtim": 5, "term": [5, 6, 9], "appli": [5, 7, 9], "approxim": 5, "enforc": [5, 7], "roll": 5, "airtime_limit_long": 5, "airtime_limit_short": 5, "33": 5, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [5, 10], "stdin": [5, 10], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 10], "squelch": 5, "rx": [5, 10], "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "bring": 5, "brought": [5, 10], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": [5, 7], "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "report": [5, 7, 8, 10], "guess": 5, "per": [5, 7, 9, 10, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9, 10], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "impact": [5, 7, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "disrupt": 5, "neccessari": 5, "modifi": [5, 9, 10], "ingress_control": 5, "ic_new_tim": 5, "spawn": 5, "ic_burst_freq_new": 5, "ic_burst_freq": 5, "temporarili": 5, "ic_max_held_announc": 5, "drop": [5, 7, 9, 10], "256": [5, 7, 9, 10, 11], "ic_burst_hold": 5, "threshold": 5, "ic_burst_penalti": 5, "ic_held_release_interv": 5, "30": [5, 7, 10], "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 7, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9, 10], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9], "hellman": [6, 9], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "stationari": [6, 10], "candid": 6, "optim": 6, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": [6, 10], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": [6, 7], "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 10, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "adress": [7, 9], "path_respons": 7, "attached_interfac": 7, "tag": 7, "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "keepalive_timeout_factor": 7, "4": [7, 9, 10], "calcul": [7, 9, 10], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 7, "get_ag": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "no_data_for": 7, "travers": [7, 9], "exclud": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9, 11], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "seek": 9, "solv": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": [9, 10], "approv": 9, "gatekeep": 9, "inevit": 9, "govern": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": [9, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "topic": 9, "necessarili": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "unset": 9, "00": [9, 10], "01": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "kbp": 10, "e702c42ba8": 10, "49": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 10, "arx": 10, "atx": 10, "revers": 10, "json": 10, "new_ident": 10, "984b74a3f768bef236af4371e6f248cd": 10, "new_id": 10, "0f4259fef4521ab75a3409e353fe9073eb10783b4912a6a9937c57bf44a62c1": 10, "hidden": 10, "8dd57a738226809646089335a6b03695": 10, "my_fil": 10, "txt": 10, "bc7291552be7a58f361522990465165c": 10, "rfe": 10, "fetch": 10, "30602def3b3506a28ed33db6f60cc6c9": 10, "2b489d06eaf7c543808c76a5332a447d": 10, "my_ident": 10, "2225fdeecaf6e2db4556c3c2d7637294": 10, "decreas": 10, "overwrit": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "max": 10, "rnstransport": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "781": 10, "e7536ee90bd4a440e130490b87a25124": 10, "809": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "allowed_ident": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "silent": 10, "jail": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "fw": 10, "url": 10, "nocheck": 10, "flash": 10, "baud_flash": 10, "addr": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "hexbyt": 10, "firmware_hash": 10, "product": 10, "model": 10, "hwrev": 10, "revis": 10, "attach": 10, "older": 10, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "ff": 10, "consol": 10, "unlock": 10, "bootstrap": 10, "rom": 10, "enable_remote_manag": 10, "remote_management_allow": 10, "9fb6d773498fb3feda407ed8ef2c3229": 10, "2d882c5586e548d79b5af27bca1776dc": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "whole": 10, "regular": 10, "rns_bin_dir": 10, "eg": 10, "reload": 10, "loginctl": 10, "linger": 10, "readili": 11, "advers": 11, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 11, "hoc": 11, "transform": 11, "fact": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11, "touch": 11}, "objects": {"RNS": [[7, 0, 1, "", "Buffer"], [7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "MessageBase"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RawChannelReader"], [7, 0, 1, "", "RawChannelWriter"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Buffer": [[7, 1, 1, "", "create_bidirectional_buffer"], [7, 1, 1, "", "create_reader"], [7, 1, 1, "", "create_writer"]], "RNS.Channel": [[7, 0, 1, "", "Channel"]], "RNS.Channel.Channel": [[7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 3, 1, "", "RATCHET_COUNT"], [7, 3, 1, "", "RATCHET_INTERVAL"], [7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "enable_ratchets"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "enforce_ratchets"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "set_ratchet_interval"], [7, 1, 1, "", "set_retained_ratchets"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "RATCHETSIZE"], [7, 3, 1, "", "RATCHET_EXPIRY"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "current_ratchet_id"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_age"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [7, 1, 1, "", "get_q"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_data_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"], [7, 1, 1, "", "track_phy_stats"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "concluded"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 3, 1, "", "ANNOUNCE_CAP"], [7, 3, 1, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [7, 1, 1, "", "remote_management_enabled"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": [0, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": [2, 5, 10], "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "meshchat": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": [2, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 5, "lora": [5, 6], "multi": 5, "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "new": 5, "destin": [5, 9], "limit": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnid": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "manag": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "systemwid": 10, "userspac": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "MeshChat": [[2, "meshchat"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Ethernet-based Hardware": [[3, "ethernet-based-hardware"]], "Serial Lines & Devices": [[3, "serial-lines-devices"]], "Packet Radio Modems": [[3, "packet-radio-modems"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Configuring Interfaces": [[5, "configuring-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "RNode Multi Interface": [[5, "rnode-multi-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "New Destination Rate Limiting": [[5, "new-destination-rate-limiting"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnid Utility": [[10, "the-rnid-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Remote Management": [[10, "remote-management"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]], "Systemwide Service": [[10, "systemwide-service"]], "Userspace Service": [[10, "userspace-service"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "buffer (class in rns)": [[7, "RNS.Buffer"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "channel (class in rns.channel)": [[7, "RNS.Channel.Channel"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "minimum_bitrate (rns.reticulum attribute)": [[7, "RNS.Reticulum.MINIMUM_BITRATE"]], "msgtype (rns.messagebase attribute)": [[7, "RNS.MessageBase.MSGTYPE"]], "mtu (rns.reticulum attribute)": [[7, "RNS.Reticulum.MTU"]], "messagebase (class in rns)": [[7, "RNS.MessageBase"]], "pathfinder_m (rns.transport attribute)": [[7, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[7, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[7, "RNS.Packet"]], "packetreceipt (class in rns)": [[7, "RNS.PacketReceipt"]], "ratchetsize (rns.identity attribute)": [[7, "RNS.Identity.RATCHETSIZE"]], "ratchet_count (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_COUNT"]], "ratchet_expiry (rns.identity attribute)": [[7, "RNS.Identity.RATCHET_EXPIRY"]], "ratchet_interval (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_INTERVAL"]], "rawchannelreader (class in rns)": [[7, "RNS.RawChannelReader"]], "rawchannelwriter (class in rns)": [[7, "RNS.RawChannelWriter"]], "requestreceipt (class in rns)": [[7, "RNS.RequestReceipt"]], "resource (class in rns)": [[7, "RNS.Resource"]], "reticulum (class in rns)": [[7, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[7, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[7, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[7, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[7, "RNS.Transport"]], "__init__() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.__init__"]], "__init__() (rns.rawchannelwriter method)": [[7, "RNS.RawChannelWriter.__init__"]], "accepts_links() (rns.destination method)": [[7, "RNS.Destination.accepts_links"]], "add_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.add_message_handler"]], "add_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.add_ready_callback"]], "advertise() (rns.resource method)": [[7, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[7, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[7, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[7, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[7, "RNS.Destination.clear_default_app_data"]], "concluded() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.concluded"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "enable_ratchets() (rns.destination method)": [[7, "RNS.Destination.enable_ratchets"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "enforce_ratchets() (rns.destination method)": [[7, "RNS.Destination.enforce_ratchets"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_age() (rns.link method)": [[7, "RNS.Link.get_age"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mode() (rns.link method)": [[7, "RNS.Link.get_mode"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_q() (rns.link method)": [[7, "RNS.Link.get_q"]], "get_q() (rns.packet method)": [[7, "RNS.Packet.get_q"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rssi() (rns.link method)": [[7, "RNS.Link.get_rssi"]], "get_rssi() (rns.packet method)": [[7, "RNS.Packet.get_rssi"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_snr() (rns.link method)": [[7, "RNS.Link.get_snr"]], "get_snr() (rns.packet method)": [[7, "RNS.Packet.get_snr"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_data_for() (rns.link method)": [[7, "RNS.Link.no_data_for"]], "no_inbound_for() (rns.link method)": [[7, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[7, "RNS.Link.no_outbound_for"]], "pack() (rns.messagebase method)": [[7, "RNS.MessageBase.pack"]], "recall() (rns.identity static method)": [[7, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[7, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.register_announce_handler"]], "register_message_type() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.register_message_type"]], "register_request_handler() (rns.destination method)": [[7, "RNS.Destination.register_request_handler"]], "remote_management_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.remote_management_enabled"]], "remove_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.remove_message_handler"]], "remove_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.remove_ready_callback"]], "request() (rns.link method)": [[7, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[7, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[7, "RNS.Packet.resend"]], "send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.send"]], "send() (rns.packet method)": [[7, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[7, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[7, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[7, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[7, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[7, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[7, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[7, "RNS.Destination.set_proof_strategy"]], "set_ratchet_interval() (rns.destination method)": [[7, "RNS.Destination.set_ratchet_interval"]], "set_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_retained_ratchets() (rns.destination method)": [[7, "RNS.Destination.set_retained_ratchets"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "track_phy_stats() (rns.link method)": [[7, "RNS.Link.track_phy_stats"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "unpack() (rns.messagebase method)": [[7, "RNS.MessageBase.unpack"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Configuring Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 10], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9, 11], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10, 11], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9, 10], "your": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": [0, 5], "minimum": [0, 5, 6, 7, 9], "setup": [0, 2, 4, 5, 10], "requir": [0, 2, 5, 6, 7, 9, 10, 11], "connect": [0, 3, 4, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 4, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 4, 6, 7, 9, 10], "destin": [0, 2, 4, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 5, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9, 10], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": 0, "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9, 10], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 10, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "automat": [0, 2, 5, 6, 7, 9, 10, 11], "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 6, 7, 9, 11], "prove": [0, 9], "packet": [0, 2, 4, 5, 6, 7, 10, 11], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 10, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 7, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 5, 6, 7, 9, 10], "tri": 0, "whether": [0, 2, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 10, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 2, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": [0, 2], "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7, 10], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 2, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5, 7], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 5, 6, 10], "action": 0, "store": [0, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "0": [0, 2, 5, 7, 9, 10, 11], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9, 10], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 5, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 2, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 7, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9, 10], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 5, 7, 9], "happen": [0, 2, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "len": 0, "1": [0, 2, 5, 7, 9, 10], "data": [0, 2, 3, 4, 5, 6, 7, 9, 11], "encod": [0, 7], "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 7, 9, 10], "want": [0, 2, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9, 10], "__init__": [0, 7], "self": [0, 6, 11], "call": [0, 2, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10], "cannot": [0, 2, 5, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 4, 9, 10], "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 3, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 2, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": [0, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7, 10], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 7, 9, 11], "server_ident": 0, "queri": [0, 2, 7, 10], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 2, 7, 9, 10, 11], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 10, 11], "wai": [0, 2, 5, 6, 7, 9, 10], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10, 11], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": [0, 7, 10], "dbm": [0, 5, 10], "snr": [0, 7, 10], "db": [0, 10], "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9, 10], "represent": [0, 7], "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": [0, 10], "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 10, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10, 11], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7, 10], "kei": [0, 4, 6, 7, 10, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7, 10], "modul": [0, 2, 3, 5, 9, 10, 11], "known": [0, 5, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 7, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 7, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 2, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7], "forth": 0, "o": [0, 2, 5, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 7, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": [0, 5], "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 7, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9, 10], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "perform": [0, 2, 5, 6, 7, 9, 10], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 2, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3, 11], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 10, 11], "serial": [0, 2, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 7], "assign": [0, 9, 10], "integ": [0, 7], "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 5, 7, 9, 11], "across": [0, 3, 6, 7], "0xf000": [0, 7], "reserv": [0, 7], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 7, 9, 10], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9, 10], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 2, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": [0, 7], "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 5, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 5, 9], "compress": [0, 7, 9, 11], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 5, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 7, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "thread": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 5, 6, 9, 10], "isdir": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 5, 6, 7, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 2, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9, 10], "conclud": [0, 7], "hasattr": 0, "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "statist": [0, 5, 7, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 2, 5, 7, 9, 10], "normal": [0, 2, 5, 7, 10], "accordingli": [0, 5], "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10, 11], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": [0, 5], "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": [0, 5], "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 7, 9, 11], "job": 0, "potenti": [0, 2, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "daemon": [0, 2, 5, 7, 10], "detect": 0, "shown": 0, "progress": [0, 7, 10, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 7, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": [0, 10], "m": [0, 2, 9, 10], "g": [0, 10], "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 5, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3, 5], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "pre": [2, 7, 9], "built": [2, 5, 9, 10, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 10, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 4, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "facilit": 2, "suit": [2, 3, 9, 10], "featur": [2, 5, 7, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": [2, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "locat": [2, 5, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 5, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": [2, 9], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": [2, 5], "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9, 10], "failur": [2, 5, 7], "guarante": [2, 9], "weird": 2, "goe": 2, "sai": 2, "hardcod": 2, "ship": 2, "practic": [2, 9, 11], "solut": [2, 9, 10], "leav": [2, 6, 9], "wide": [2, 3, 5, 9, 10, 11], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9, 10], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 5, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": 2, "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 10, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "h": [2, 10], "ping": [2, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "april": 2, "2023": [2, 10], "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "restor": [2, 5], "behaviour": [2, 5, 10], "edit": [2, 10], "conf": 2, "break": [2, 7, 9, 11], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "briefli": [3, 9], "describ": [3, 5, 7, 9], "emploi": [3, 9], "pattern": [3, 9], "high": [3, 5, 9, 11], "capac": [3, 5, 7, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": [3, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 7, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "level": [3, 5, 9, 10], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "short": [3, 5, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 7, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 5, 9], "cheap": [3, 5, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "switch": [3, 5, 9, 10], "fiber": 3, "optic": [3, 11], "virtual": [3, 5, 6, 9, 10, 11], "adapt": [3, 6], "tun": [3, 5], "tap": 3, "serialinterfac": [3, 5], "usb": [3, 6, 9, 10], "freedv": 3, "tnc": [3, 5, 7, 10, 11], "dire": 3, "wolf": 3, "aim": [4, 9], "particip": [4, 6, 9], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "meshchat": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "radio": [4, 5, 6, 7, 9, 10, 11], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "pure": [4, 9], "rnid": 4, "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "modem": [4, 5, 6, 7, 9, 11], "udp": [4, 6, 9, 10, 11], "multi": [4, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "group_id": 5, "multicast": 5, "temporari": 5, "perman": [5, 10], "multicast_address_typ": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "autodiscov": 5, "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "udpinterfac": 5, "forward_ip": 5, "255": [5, 10], "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "15": 5, "16": [5, 9, 10], "frequent": 5, "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7, 10], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "flow_control": 5, "airtim": 5, "term": [5, 6, 9], "appli": [5, 7, 9], "approxim": 5, "enforc": [5, 7], "roll": 5, "airtime_limit_long": 5, "airtime_limit_short": 5, "33": 5, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [5, 10], "stdin": [5, 10], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 10], "squelch": 5, "rx": [5, 10], "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "bring": 5, "brought": [5, 10], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": [5, 7], "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "report": [5, 7, 8, 10], "guess": 5, "per": [5, 7, 9, 10, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9, 10], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "impact": [5, 7, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "disrupt": 5, "neccessari": 5, "modifi": [5, 9, 10], "ingress_control": 5, "ic_new_tim": 5, "spawn": 5, "ic_burst_freq_new": 5, "ic_burst_freq": 5, "temporarili": 5, "ic_max_held_announc": 5, "drop": [5, 7, 9, 10], "256": [5, 7, 9, 10, 11], "ic_burst_hold": 5, "threshold": 5, "ic_burst_penalti": 5, "ic_held_release_interv": 5, "30": [5, 7, 10], "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 7, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9, 10], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9], "hellman": [6, 9], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "stationari": [6, 10], "candid": 6, "optim": 6, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": [6, 10], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": [6, 7], "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 10, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "adress": [7, 9], "path_respons": 7, "attached_interfac": 7, "tag": 7, "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "auto_compress": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "under": [7, 8, 10, 11], "omit": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "keepalive_timeout_factor": 7, "4": [7, 9, 10], "calcul": [7, 9, 10], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 7, "get_ag": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "no_data_for": 7, "travers": [7, 9], "exclud": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9, 11], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "seek": 9, "solv": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": [9, 10], "approv": 9, "gatekeep": 9, "inevit": 9, "govern": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": [9, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "topic": 9, "necessarili": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "unset": 9, "00": [9, 10], "01": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "kbp": 10, "e702c42ba8": 10, "49": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 10, "arx": 10, "atx": 10, "revers": 10, "json": 10, "new_ident": 10, "984b74a3f768bef236af4371e6f248cd": 10, "new_id": 10, "0f4259fef4521ab75a3409e353fe9073eb10783b4912a6a9937c57bf44a62c1": 10, "hidden": 10, "8dd57a738226809646089335a6b03695": 10, "my_fil": 10, "txt": 10, "bc7291552be7a58f361522990465165c": 10, "rfe": 10, "fetch": 10, "30602def3b3506a28ed33db6f60cc6c9": 10, "2b489d06eaf7c543808c76a5332a447d": 10, "my_ident": 10, "2225fdeecaf6e2db4556c3c2d7637294": 10, "decreas": 10, "overwrit": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "max": 10, "rnstransport": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "781": 10, "e7536ee90bd4a440e130490b87a25124": 10, "809": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "allowed_ident": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "silent": 10, "jail": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "fw": 10, "url": 10, "nocheck": 10, "flash": 10, "baud_flash": 10, "addr": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "hexbyt": 10, "firmware_hash": 10, "product": 10, "model": 10, "hwrev": 10, "revis": 10, "attach": 10, "older": 10, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "ff": 10, "consol": 10, "unlock": 10, "bootstrap": 10, "rom": 10, "enable_remote_manag": 10, "remote_management_allow": 10, "9fb6d773498fb3feda407ed8ef2c3229": 10, "2d882c5586e548d79b5af27bca1776dc": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "whole": 10, "regular": 10, "rns_bin_dir": 10, "eg": 10, "reload": 10, "loginctl": 10, "linger": 10, "readili": 11, "advers": 11, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 11, "hoc": 11, "transform": 11, "fact": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11, "touch": 11}, "objects": {"RNS": [[7, 0, 1, "", "Buffer"], [7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "MessageBase"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RawChannelReader"], [7, 0, 1, "", "RawChannelWriter"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Buffer": [[7, 1, 1, "", "create_bidirectional_buffer"], [7, 1, 1, "", "create_reader"], [7, 1, 1, "", "create_writer"]], "RNS.Channel": [[7, 0, 1, "", "Channel"]], "RNS.Channel.Channel": [[7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 3, 1, "", "RATCHET_COUNT"], [7, 3, 1, "", "RATCHET_INTERVAL"], [7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "enable_ratchets"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "enforce_ratchets"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "set_ratchet_interval"], [7, 1, 1, "", "set_retained_ratchets"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "RATCHETSIZE"], [7, 3, 1, "", "RATCHET_EXPIRY"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "current_ratchet_id"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_age"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [7, 1, 1, "", "get_q"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_data_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"], [7, 1, 1, "", "track_phy_stats"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "concluded"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 3, 1, "", "ANNOUNCE_CAP"], [7, 3, 1, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [7, 1, 1, "", "remote_management_enabled"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": [0, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": [2, 5, 10], "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "meshchat": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": [2, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 5, "lora": [5, 6], "multi": 5, "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "new": 5, "destin": [5, 9], "limit": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnid": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "manag": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "systemwid": 10, "userspac": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "MeshChat": [[2, "meshchat"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Ethernet-based Hardware": [[3, "ethernet-based-hardware"]], "Serial Lines & Devices": [[3, "serial-lines-devices"]], "Packet Radio Modems": [[3, "packet-radio-modems"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Configuring Interfaces": [[5, "configuring-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "RNode Multi Interface": [[5, "rnode-multi-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "New Destination Rate Limiting": [[5, "new-destination-rate-limiting"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnid Utility": [[10, "the-rnid-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Remote Management": [[10, "remote-management"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]], "Systemwide Service": [[10, "systemwide-service"]], "Userspace Service": [[10, "userspace-service"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "buffer (class in rns)": [[7, "RNS.Buffer"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "channel (class in rns.channel)": [[7, "RNS.Channel.Channel"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "minimum_bitrate (rns.reticulum attribute)": [[7, "RNS.Reticulum.MINIMUM_BITRATE"]], "msgtype (rns.messagebase attribute)": [[7, "RNS.MessageBase.MSGTYPE"]], "mtu (rns.reticulum attribute)": [[7, "RNS.Reticulum.MTU"]], "messagebase (class in rns)": [[7, "RNS.MessageBase"]], "pathfinder_m (rns.transport attribute)": [[7, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[7, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[7, "RNS.Packet"]], "packetreceipt (class in rns)": [[7, "RNS.PacketReceipt"]], "ratchetsize (rns.identity attribute)": [[7, "RNS.Identity.RATCHETSIZE"]], "ratchet_count (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_COUNT"]], "ratchet_expiry (rns.identity attribute)": [[7, "RNS.Identity.RATCHET_EXPIRY"]], "ratchet_interval (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_INTERVAL"]], "rawchannelreader (class in rns)": [[7, "RNS.RawChannelReader"]], "rawchannelwriter (class in rns)": [[7, "RNS.RawChannelWriter"]], "requestreceipt (class in rns)": [[7, "RNS.RequestReceipt"]], "resource (class in rns)": [[7, "RNS.Resource"]], "reticulum (class in rns)": [[7, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[7, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[7, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[7, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[7, "RNS.Transport"]], "__init__() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.__init__"]], "__init__() (rns.rawchannelwriter method)": [[7, "RNS.RawChannelWriter.__init__"]], "accepts_links() (rns.destination method)": [[7, "RNS.Destination.accepts_links"]], "add_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.add_message_handler"]], "add_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.add_ready_callback"]], "advertise() (rns.resource method)": [[7, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[7, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[7, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[7, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[7, "RNS.Destination.clear_default_app_data"]], "concluded() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.concluded"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "enable_ratchets() (rns.destination method)": [[7, "RNS.Destination.enable_ratchets"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "enforce_ratchets() (rns.destination method)": [[7, "RNS.Destination.enforce_ratchets"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_age() (rns.link method)": [[7, "RNS.Link.get_age"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mode() (rns.link method)": [[7, "RNS.Link.get_mode"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_q() (rns.link method)": [[7, "RNS.Link.get_q"]], "get_q() (rns.packet method)": [[7, "RNS.Packet.get_q"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rssi() (rns.link method)": [[7, "RNS.Link.get_rssi"]], "get_rssi() (rns.packet method)": [[7, "RNS.Packet.get_rssi"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_snr() (rns.link method)": [[7, "RNS.Link.get_snr"]], "get_snr() (rns.packet method)": [[7, "RNS.Packet.get_snr"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_data_for() (rns.link method)": [[7, "RNS.Link.no_data_for"]], "no_inbound_for() (rns.link method)": [[7, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[7, "RNS.Link.no_outbound_for"]], "pack() (rns.messagebase method)": [[7, "RNS.MessageBase.pack"]], "recall() (rns.identity static method)": [[7, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[7, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.register_announce_handler"]], "register_message_type() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.register_message_type"]], "register_request_handler() (rns.destination method)": [[7, "RNS.Destination.register_request_handler"]], "remote_management_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.remote_management_enabled"]], "remove_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.remove_message_handler"]], "remove_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.remove_ready_callback"]], "request() (rns.link method)": [[7, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[7, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[7, "RNS.Packet.resend"]], "send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.send"]], "send() (rns.packet method)": [[7, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[7, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[7, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[7, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[7, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[7, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[7, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[7, "RNS.Destination.set_proof_strategy"]], "set_ratchet_interval() (rns.destination method)": [[7, "RNS.Destination.set_ratchet_interval"]], "set_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_retained_ratchets() (rns.destination method)": [[7, "RNS.Destination.set_retained_ratchets"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "track_phy_stats() (rns.link method)": [[7, "RNS.Link.track_phy_stats"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "unpack() (rns.messagebase method)": [[7, "RNS.MessageBase.unpack"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index 590c3d0..96eb757 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -673,7 +673,7 @@ public signing key.
  • In case the packet is addressed to a group destination type, the packet will be encrypted with the -pre-shared AES-128 key associated with the destination. In case the packet is addressed to a plain +pre-shared AES-256 key associated with the destination. In case the packet is addressed to a plain destination type, the payload data will not be encrypted. Neither of these two destination types can offer forward secrecy. In general, it is recommended to always use the single destination type, unless it is strictly necessary to use one of the others.
    @@ -1078,7 +1078,7 @@ intentionally compromised or weakened clone. The utilised primitives are:

  • Encrypted tokens are based on the Fernet spec

    • Ephemeral keys derived from an ECDH key exchange on Curve25519

    • -
    • AES-128 or AES-256 in CBC mode with PKCS7 padding

    • +
    • AES-256 in CBC mode with PKCS7 padding

    • HMAC using SHA256 for message authentication

    • IVs must be generated through os.urandom() or better

    • No Fernet version and timestamp metadata fields

    • @@ -1087,7 +1087,7 @@ intentionally compromised or weakened clone. The utilised primitives are:

    • SHA-256

    • SHA-512

    -

    In the default installation configuration, the X25519, Ed25519, AES-128-CBC and AES-256-CBC +

    In the default installation configuration, the X25519, Ed25519 and AES-256-CBC primitives are provided by OpenSSL (via the PyCA/cryptography package). The hashing functions SHA-256 and SHA-512 are provided by the standard Python hashlib. The HKDF, HMAC, diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html index 8bbccd4..4858f24 100644 --- a/docs/manual/whatis.html +++ b/docs/manual/whatis.html @@ -279,7 +279,7 @@ considered complete and stable at the moment, but could change if absolutely war

  • Reticulum uses the following format for encrypted tokens:

    • Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519

    • -
    • AES-128 or AES-256 in CBC mode with PKCS7 padding

    • +
    • AES-256 in CBC mode with PKCS7 padding

    • HMAC using SHA256 for authentication

    • IVs are generated through os.urandom()

  • ?oh!#kqa6i?nj;8}6OsB)WH) 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 diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index df6aa8de373e2e2c6416136aaff4e61f0712f1dc..76eac1b4f9ba8ff4c38b1697d558d0a47edfadf4 100644 GIT binary patch delta 41546 zcmW*SQ&=WU8vx*J+jecXt+kyy?m3$4nzLu-!E`Kr0q3rL z0oQ?%1LS{$G9e9LzoI$I^u@49Q2=TJVZcK+x>E>RHdUqFk*`+vTRAqHsGbrzWX$}o znV{_bZ>Vna{GcWx1(D#ugr`?Tc*2ih43pkj1alI@4lJ#JPK;LwFpT_$J1U2-f=C(V z!myyuS9Ne~tH7@tmHfRxf4?qJryjKMJ%kCV0w_dZv%!zbeN}?*KAqM1F$ya**smV` zEmh>2g2JLPM{k=5(p%<%99rT#&om0{vc1<3Ir&W&>$s!(OtDXAhygSS*gBxlnJx}t z&db|HGXS>F2iG`fLpE~A8piw7LQ5-eler|RyQV2qvea-mxk&1zowdV=D*`%SFs61U zjUW`Zv>=>JNsfwifK7HJzvtS&q-@5_ysi($2b^yInwnEuSfmK3P!bs_phJNU-geys zz&#@B@hQFP!1uTAH+B0O-BQiFc|CjhJ>9ThS0;3)gW8*Sw4(a7M1ON=g{*Kl@~^9# zU~C4K$nK!AP-@U!A>JIUSG>C&d$U*CJN(s}%3hOGdi@sv0`Lrf(IzGZqki0MrQjMn z7d|Oio9VCE%h9h;>dX85nQZhaB6Y&t8IX=jlGo>@4f^6pJqfKWcC9o+S7X&5u(#9A z`*7X2%d@n;E32t z*2GzjjHoj1Ka~3@fvjNV?ZzCj1)B$lTw_vGvH4_HS-_Hz2tugU!?r4(bEhNLTEooE?PX z33Za|7r@sYb}Gj+EL;Ylql@A)-_lnD&X#%>J*2g7E?s_>9)+pj zXLmT&JXRzHF^eHp^ zW~*s_JvLRjKA=71sDblj7H5x@eCVfIVtY#<;FpOs|*QI)aef5p)EO@tG0i zo7J)Qn;?kdyctaUGTT7E(X5nwtZj42K&$HIa+u)bbu=cLuoyj6oZrA((jW|=%%7N$ z4RHIrq~$mZmFc`Ko%qT`Nlg( zWTGzcg?HtquFMFz>hy!Syy8o(SZ?FYJPwV8!0Z(fm5_lWm@|&?u{ofJAEGZf6i{ca zrQ&H0hEKiZf)i#Vh2ou*@4%jr1TuUO9d;qoMHwSg>V<{1Cxs6A}cK2#| zZ+sJlv3~KIn#r^ZLOEAhy-7SUb~3BL;#bc!7xA7cGyd_6eOV|MoGyA?1kv!wQH;fg*7~5;{dp z`zKAi=03RhPrxVgaXf-=_RE~XaijV zWI>ES7W)^q?}TRAu>t^n5(^T=P;!NXR+V(BHJ^M0p~-q((GZ1F>`#JB1W>gOw>OgI z;%yof=gqs{ry@JXsqGxFSHJkhH@yuZ*b}UboI#Ns^F-T@;!ZyL@d18kX67Kg1+{mW z;*Eh3#O#-A5LV|ZVUfkmv?K^}URlMWP55;5zcR3OXftv)D^EaML(hK?oGZG_&$j*$<9hXKG37I)t2%wQ0vUqf9M* zY`n1LC5mIAA-|%#f6av$9&~WaSs3C)p%1=cY&7>tTpe?7&SkTh&tfo>QKjzOW!A7v z!#wG9}9!f{i4Ah9RS{pA#4!T3*j0AGrLNA)fxkzi#c;mLV8W#<4WvOhRqTn&q#_~xG#DOR~eyPQog24~3= zB8GyxlXEF#H;r$wzUt*!gjYbj#~#@(P2=O^Wym$u&jjW&0bFcu#*220r7-Ni` zv6YUi5@sshpcQ^FtymB{mm)kxl+Y@j#f4aD(lrUByw3sYu!F|MgNuqbG&}vh7`pjE zpAcd-vzMLddBQx2$+uuRQTV_OOKKoTNM zo&+tF%>+`>ABl1wv;{xHq<4V|kSDPqDy=XoE#My@KR|zg{Q&;~@dNS))DP%ZDlM35 z6X2gW3>{VLR}YLP7$EOsRBXvusYRkc*DK1I{b1|M#dAn;AJfz#rUl|r4^{Lq&GQaL zDE^G1UEieKx`V!KXedFD{LooTAsx4c8=vnK&w-jLhxp6C$l-6ysn`FbBv%oaL%Xzzvk%L&~^J++Q3@LcGK^1Av({{P_hN8a-ZnKl{~d zbVLnpyH~6Q$%V>DyH*vp_HkJKG#fcLHc{m~fN?ej2P#jg z0lbC9yvf`W*ALrw{K3gU?_Zg6RAO4sj1p?EiqtvWRJRbSVj}E;?AR|$t!|VWwmB>u z;B$#}Y-U$s?v&oGAQP&)W!5?Zv_)icpX`Y)q)6@dd~ieI}yy8}f^$lE&rtfp%U?*LGS! zsaRP`sE`FqxY_i{;a@c2PSx(O9wf31GP%b=FM)=U4nRq|Rgn2=>!=jNV@e*6MjBOG zP}^0leCQJ6%m;6{fHD6KL9ZIjwz>A)_nso>=3ajXLk*ZSG7m-iqi zkY&*jF2G@^K7cl6~s_7`rUz_AkkPKsKl$wV& z?s0a+K%&b#?d`8BoRq#Uk{@LjwZxo=ag`oJzb-K&2xZQ$)ii?E(l*yPvftdg1T-nT zj{#bF>?fRXA7oJ9TioZrHGw1X(T1Zq>y_Y1%d5~kS5$2BJDp%)6ZOlki?sLz?(h3u z>{<>p-yA;*26Y$)^J%<7JR12}B7UtXTq)g#z&_O$9oTSeGNcKQqW}bCCTCF@YID4Nb%UJQnltRhji|V=aNaR0 zg|T~IV^<&7d7lRMdxYRegqAPI7=Y57QmX44MU^fE8^Z?aSR*S(%F}7(m2^_M61Q+i zO7_^M36m>T6DG55;pB)Lk%R~n!fR~ z4x*PSCagrid#&E9Q(KJ$=oSTVA^=6e0OJ!uDSyu^?4^HgLxK=EFqNL>Ro+wheIP^F zp~BJlsg^MVkaoaXIqHiqXaaHLxypcEslWyK6g;yE*JE+{5MErKgi*%|GPxXI**`7` zhXtzw!rZ|oH5rE%uwdU0dz+BR2&}8MkD>b+z$3<5grZ$*<2&PAiKc*yC zLE~`ju&!^;4C;*IT&%Yg&zFesFp!_EdOhILu=GFlnndZ*)1}M~kL3SqiORQF) zV9MFKT4B0~X~IFUg@wTo9_2qT@|Ol8RcXv2nIc=n6z!18SOH4@J;Xm{)Wx$UzVL)S z)D@^c48$buE-Fi}8zkZbBgzU{e!yos8H_u_FC_Q*3LhC7W$2K@Wt)A|*luRIk@7)^i2 zN}Dlo{p+P-R~AIQ^eFR^fXA?78d|hY6=>5z@9YbFUqvX(*qM|$gKO)o0CDT_N-!U^ zlY>R*Y)10XPp>o@N&FO7AboY6xJ6at;Gf^$ds#FB<@*5&pPQ|rUt4zbOA(ip1_i41 zbW00?wCBbAr2s~eB5XsGcPER5#_%(|sD%lm%6;T8KR3nb(38sM9))~R263ptgL6sH^jXe_$U^?KzpT?Et&oqg&LJBHj!dsbM9>tSS5k%H%uJaVBmOkwBMYLzdeYADey&uU;=up%vq9@*J9bU!snJzByLC7=2PZF zpoVw`U;qi2i%0vviSh9I%9omVXrBt0S52sn;eTT58;|Lbm2r+$y1o}}Lw;pn+~2AI z!UJ~{Kaj0c;3s{!9_98Sl#MVy-sYWN2q?%z65@SWKhYbQF#iO^EhqB3olDq-ZKR;f zzeTi@KC@lM`P7M-Gi#U%{Ec(`U^$)CE`5C9c>o`J5Na12%#a*X>}RyqnWAk1o> zwuS?*U*IEf+2}xlVsCIk@V&Le-9Xo+M({6;vM_aw#hswOL}5HsS0e^xIEv?F#m^f{ zF~>TN-wC9$D)=`U-=pBLkTf7eO(n1Ifp6M; z0H&$GhS;~M5o7#YUh;ZxGiTE`CLIiBN1CG)3|i~W6b!dDFjE@w3>P(^TT|0{iyg&p zwf65KM(G4-07nLgMEz>4JAQRBU&SS_0$Gt^gt~`hC7^fv6oM-|-^`Y4JV+D{inXJc ze?EC7hrGHs_tV4I?Q6xoN|Y=gS8KI3^<;!ZPKWl+c#ksIHAg$|O5O@}O(Y@aNW-?p z4sDZgkJy&)v(2$++vOSXuy3_y1Ijaf^Ue3=Eq0%$Qof)!k4TMzJa;3$IOomYtM~2m zbo_SN$^x05lxi$C7REq=t*Pny^r~)o#Q5Dv9+Eb+QmCh@>4!Dg*iszoMDCr zxvVi|9@aWYvdd_I%}qmb8r`2TkUOEc;X309u^MT#qj3iWO1{6MTFGa!<8+wI81+I( zlCEGNlIpoDi5RVU{9O&r^bi0G(7785R-BMr@FrRVW!|RC zFyFQFaS?h;$j5P$UBuMV%rxnT-AsO29T75~>%~c>tFj2gz+#4w+Fvo=;SH*sY%6fm zKm=ld0(`M2db?e`2gC!nK?%*5wwlPuH@O)eXg7M~o3>y8bt;=$wdGVn9NRy_E%+8i zv|!maBc~JtTH5(SnsqaQnQzSEfWAly4Y%Eie(ro#9t1cR8%P8*S^uw9Ha}Syx7;Aj z4b%D)={ko}Zn1blvJ7I!A_ku`+!w(dgiw=ia{MseMf9MjF6eZ09a0GoIU|ek>6M_6 zTI*_+I$Tn1wUR!{Pp8ZL{8Gm}u_4dl>yZEmR~9S)Wft_M%4{~x;brd_x4->^1Kd>o z3y>8N$*Q)NXg}5pd?KD2nHwmw7pm20)wL&co2UL3T~&Z=F;G&?JZRcTAjUkKDpLrm zlk~VDbN8;nO4amcm5o&~({r>Ykc^1p3|KB(Vw17}9$AQmK!QE$9@*Z)Lr+^QZ;B+* zQCJe-SJ(J9kps$s_!pgw{?_stqnm`L& z8YMa^0inQoj9p%`mt0Yg{_}!E-NDXcAD-p*02~ujcIIQ6>*j871o1MeGF(I=^90MW zH&yBxT&Cy!{X!PVoIupWQoq}qkEz!oQu@)iBaWejCc1b%Q{bZ~zULbgSC&mFR96iU z;9Sh%Jy~Nt(ut4B@UO>JgdicpSdya~i$@Yq_E8K1=K?=yECvUHabG#G z6NMg$`4wSapkSVZvMXb%;{w+BS{VZ`GSd3J$tngVj8#4?*{|QUU)|J?d&G-K=!5SS ziVo(n(04x$?)W&n&(ZZY)V&hS?hh$<1mtlOD1eo?MMh3Q$EtKSs0qWCc!&>RUK-W#EIfw^s|-`9i;k@ zNZgi*4u26ArL2jh(XBfXxQGgrO9P36^BZV2E8EPDO4@oE8q*WCC+)8-ckCG;(w9?8 z-6r@gO>J3S9iV-RKQ;F#iUm1YfUNtJ4`ltcC564~Mr7CJ(;n)?!ff-u6Ve4hw<0Iu_ee1%)b7znWr5z@ zHlRxB7y8ioWQQBH=<5Eh)*&yF)Hz8$3DHXA($wRX82+@PS)J~#SRM1nA^8q&6{@>6 z6?EK=>M}2oqZ7k}2%S2Dq@&E`ve7c7fsbjam*)y=C3QOkhtCiMtN3}KtcdzuMXkP6Z=)i{&u=E>HU4RE1iz~bQ#+Q)x_FtO=1 z-=`=(BLpzPQeWKME>Uw|hAJVB$g5?QF;-8a3S=<&@O75iiKsr@Ay2sA;Jc+8NR&*)iO{IEC_1?e(Wh zMR0l#j_1`Ja#gn}`q=WErgf7BXPTowN&c8^5sO1yX`~IkJG(2mbFGfmO zE=PA9!1^Ew+@${Iz5GHUG!)EupSzzjPoU^}!*SE}3vkutewV?UUKkVwUKmN2<`V!?9UrUkfEIWNny@oIVw zQz10SG=rK;Y%NxKvJX;XxK8G45BN^O_r6^`-kx|6?R5?~ZoR^?2HTDKrQrkq_SuhW zD&MU>V<7cGh?Lll-4R<|Z~rQzZl1mT2I82yjY>lvCr1mD6o&l)_XGY1!VknBNI#H& zp!`7n@!vl59~eI{e_;K<{(_d_#xVzyUDMN7h)pUR-HOsq5`MyP&AqwZ5}-If@Q0ZtdKtz9vkyC|m>E zG$v|7+sCWch6+?E`7j1?0+oP@mN46A4-J96+OOI1wxm0(}t2_V-%Ipg#*MYOR4ah)YqEnEHY)ju8e%g_*@am~?WJN*MAL z!N*vW*q;oWj-DZjk)uF;;*L3xu5=(6T~mDr;uOm?LO~Q$HE8N&0O1_`G`O806q&0( z79~CYW=w1?Ay4+SE*GhRHBQ6fof_Dg4Lbl984hjtFD8Os8)@nGV7T zA5{pgfhuxYM`nNx{75N*($Fk4g-Ln>H>sbnitl*beP5lyzP~RDmC0$Mb6-0AXg!?3 zV_XkxmY|S~o{=a@4Q$N87sb5K{H8k~fzGTRooC=95C_@S9P>3@CB(0<=Hua!J9EuorP@RYQ0gXiW`x4;^=@Xs) z2}5<93{q|>hmumvqa^ta^=2;4EERq#tq!Wf7`>{?4BsDVfyxGYSAUyd&Dh@=-@e|3 zU%Z&~E3<;?`e!yqj{&yIknD)ZCS<6LsZgWaK@7lfs z_}_Ies@pg|$aQv855TZ7>gn*p(mVrc_pcyZcJBVP~yv-)7u@q->%%>oE3f= zRsSwj4ej_<0OdO>wRX0iNS+jcxgoPcY!VdkD`X%^9em`rV0lhd7lx=`yXEJl!|x%1 zxINbF?(h`yn9f(XaeCp7PYY-a#BT!L(8!~Tlz)a3(q^Fd*3lbf=y1t`hI7MQyrM!EDIE?yQZu>3-w=O|g@DdM`ogbe5>QI)yq0ut+evx(p%j zt>QTf2gB>4f_z9f`XbzanRO!d;^mpQFd&By#zP%uG>P;bm;K^wZGR*A1mbb{ z^%r@XfY|5_Lb%CWfN7t=F|~VUL9?R_{;A1AV-RSN`+Gt~EK>U7$X{)Nk%wLDjg<&< z|2c~~FlY6xv6>?T5NqfmDoIX>>b0*X?4~wZ{+l)*Q&sM{?RPMk{{t2F*EhIb#~dxi zYA>&3k2}6g)hSYkZke$1Dh=zV^Y#LvL@VBm>*SYbhpIp|MpkilXm-DnTTsi#TA*a? zrwL}VaVb)Bnljm0kBG%@PyXMpQ~1hX;YbI%@*RNY9|8j5{|`_ju|{BkBia{*p;#0SIzy| zB4xM6%6&=3+3U0AB8Ag;Jk(K#Nbg~(SmDF5&1y1*9bApq&J8} z1sJvnk+RMfom#5D8#CzB9(|j0=>+7mO3Ky0tJOd29e1U@J?JNLFtmKyEu-Z2%>_N> z=jTFW0Tv#jFDWfg$z!io_^)olcMZiOl{d{Cmvi82!~_)`$=(C_OLM@nr$7>{Hha{R z#{8f@@uvJVVP3<=>IN^YNwz%aV$k_vyhV5ZypzRw$vk$HCy#PJGXm7^2_x{7F|3tN z)|bvJWUCXY$QgGLUt4P!WYX$H2}i*x3G>Jq0PvAW+ROBQQ1GG2aGvn7pJgTnI1 zrR6fZ${Ddq41&U3T=wLLKngG|p!xDzH5uB_;JHV7T`39(+O|zOKm`{^_qS(nj>gLL z{~)bwwn7G`TY z09cSR1eiP&v&i{)Y1q?v8_?7R6!(MM-Fc%nufP*uqUX~|A3MYCh9oZo@ZDElBD=(a zpZQq3pQ#6LP!MwUAIC7RwI2pme`Nmp;lEjZ+%CGP&YqVfIGw*~P%IS?bRP+EJ6Wu} zi{9yW|otaR-2_z}u zdV{BGe_0QTU8VxPfb2Zk_7^^WbYzO&T5Z@QCnqT-u1Ex*t zPvjG!MLXCRjZQ=l9Jc@_x&`3~1e_@W3)F=i1;7u#R^WG|Qn14{wj#-+8n_lty~P0O z6tb%yb*bP}xqMBku3aF?^OfYByl(*2ySFcO^&e)J*1oL)CSLb5Nm7{ap4iLS*qP;b4KiAv&fdI8Fx0hnf^) zfPfI6s;Q+{W+ja97#VL5N;>-QrKvh45|YRhi=#*WU|bj zKIG`2Lre3zfvz{ZaZj}_pIakV_U%2A{mDC+kTdBgbs@jcM+inTgZZPmBIcwC=dt`s z&hCZ#BbC(2uT6Nq5WH7LP}`W}iv(*#fFe8dt;4qA?%JgdEMpGLWjU#bJ+~JncTkF# z|12p6^RFCtSn+kA$DNRSmMXf;hd#mYOsFHz#zTX-uydH5r0RiM{wshXZQV3>_nJnb40Px>t ziVg8OUG)%`1(_%o$dj651z96DV!t-r?k76e{FB7G3h|1~gL)F)eX~tp!{hCFCX5ZJ zlz@W01;T#`w3C~sm{vwZdep{LFOqK9cgXQLG*XM@7V?hX2LXITpY=>SMjqQ;A{R^| zRt_Iz*w=DUnCCO<(Zj)KL1&h_0H$8FxV$N|(MR{J`r`mqJ?h*l+3Q@(E_nh}RjGhvAFEZtEo{kpRXDOnG&c0c@1v<>R1!eGn6s$5M9 zT&X%ENp^w8TvcfBZ`n`Z)EHyvTDqlzt|zU(o=b0xmiF%m842);`I{F`IM_v6mukNV zkKsP@N$%*R2Yxkaw8?Dl03HH9{^$XbWzm*$*thd4EP`A2T5>%kN;nRYs%0;+K1zmK zilko>G)QQUBd$SObwCX?^GCiWR?E5@m#;K!KV_jjC6&OSI62BokR#GMi|yA6>@EW6~MM zmk0d5EWa=X)~Cr50Kj@UEKIDH%wL)`?q%sAoDrJOVTKU&*a3#j7FUFs$01-$3Wf3T zx_?_D(ZiCTBo1kpajs~AuX@)yf}R)kgp zOousjd8Kn6y0@k)L>Fb;HgT$+_Vc%<<>+3!Clie|GmoP00gs74)2gUl+mfb*Y5*WB z0S9lB;1t%X!yd*bC0x`+H-m=SolE~YKJLeFG*r{d;OHfDC|?|gXk*9hUd13x0iBE4 zG@I&R8rj;63a^y)pzNmX%Yd)F`BMRDS`8$6)l{|fIp37P8D4xPy~Z0Y+fiGE({3s( zfH14ii!4ho;BNp4MH~Fe?(Mefn!(;Ev-Q&~qxH{_O^UieF+Sg_qW6f3q#oU(%(Wwq z-USWVA-{D34Ff@N+oTBM^t%mn`W>_Uze%E@fR_?p)%BYwGvqr#N)kcQ@mt72%1*+* z$?90m15XATMii|VgTKPcxEkpzO)V>&87;AkSbg}fYqYTyLm|jADHbw z)#<{JF@%ezGa^T%z~e{e_r{GG)pA<6d#crGEy1Oth@RM+n5J4+%_$dNi}yMju@aG1 zhNyC7#cLJaF3H0TuJ0MP`kf1-{mYe#$YGux*Ng5}b4Af`;bbIhR`znsjzNw|qDuM= zVD9!Vz~B7&wfc{}ESHj+qcd2n{hq+K;Q8*2CqfCb)2Ogp0`AsZ0-jzKP&VfO7d+B7 zop}%e(Eha|2G|J^BD~?xqiPY%71~4Yk%5RWspI7ZUaQ;9=mK?}l9T)`?&7Haf z;3xIBt3Q@&F#+v89=_B;suK(05|tO5s#EIqGU+nI=iK_fw>3-L4?jJnv`@qCJ;#0D z;IQknvoP1c-mcE_g#7LovZtmzAKq~Qz4;G73XSRtjn}Q_gfPyI1&-J3+w8?I{f@4_ zPbZW=0{|U~Fmc$gYXhIY=i{u_DgE2_h$Vrd60-ZeE>RI=*6Hze-yZWzgCZf?1V$LT z)8Fhbi~bOqMytBV`NiZKAwvqCYyxEW@miJV>GI=MizaOREAGT*B?jR(Hxyrry}Kqr zbH{(~<}(+n!~7i?*2j{XAI%hcffA%RjPlu`cfzu!@+_lLj!kPitbqA~;0Z><&O%5$ z&KR_7zHWQfH)BzW1m3yg+(Lz8Y{Lrm#{bn4D#*XsP?A^Gb+ie%3PN9>!iQ{tB058c z%qCKkCR(5Myv8D6(zdWCK)mCMzw!>C#3o*P@Cl5lIi_40SnGE>Yr$`#1Lrl%t#a!p zm&X(pD3nuc1{DCF)E{Wl`lO*=y|GhGo?fN2QQ;!G-St{#t5Z%HGn&U^s{vF}HUEoX zr|a`(Z&B-Qhftg7+B=WGCyO}Gi6Yp8%k`IX&o5Y~A#&*bcrnK&mmzWgc*RRVhv-U@ zTTADg11q=9u1;+d5^Kl25To%a*nY}=LJsI?b;&GrWfl=SUG&_naH@2Yp8~538yenL zH8=pl_v-t`LL9kV8Cp(DBAD3w_(L)}CZ|pktS0R{c4RX1@=sIA?FU!npRm4SvXI}W zw1^+YSV8!T+)m$It0#fu4n=wZg2cX6Z!yqr`8d1z=kriK?ss2B-KM6Jlj*vHBCizr z#$eJ1asO|JN`Wu?@NGE9NTy6zR~FnvVk-4EEhrG;uGY8l?#-SJS25iT%cVd9JR-nK zyQe3Wf~r^9a-oE+qq?c??i4x%z3)ij+%zrjM1`<$vXH8ium$yr0ZbEs3n9{E%9vrc zV+zjPYPw}?dbFYJpS*q3gF+HtJyAc$*qhjM_z9ov99nHvqawFrWBi$h&J8RnwQN!m zvhUIi%5X_y{i8Tp!t*Hq1=`(>@2|gQp{XwKAf%kqO({(Y4jqbrTy?K2Qq5#?q7wr; zsLdFYGT5-YwOW}dm!8M~rUE>2_NbtY*k0H6mNESxMAgOvNtB9o(doSMeu_gM$}WD{ z@}pa;Ow2{bvTYStz(GVeW~_`b;!Ax_P$fvXiQl5f{V4a0qa1Kz=MXvJ%Gam`sCYnd zTLyT^& zybv1wODX9PC`=u{k`b>3^aU6|+VC);JGS726BWD`Of_?P$qh;H9{vo%##*X|?U36( zVVVaB0#7H2ZjK=@QbSV;R8^vYzByi2w`+4ym^ZO3hur0xl6D}*PMp-E}YX^%urDJt}HllK;@x(p4fgDcNQ*gJYnaYNw@Lfb_CS8tyv9i>OM9`V4CN4@{@b*S7oaM=r>v29BI)v%V|;R6DC={tZUS_!U%v zrm}LPFdpKGhNK3|!*tvnp(cP74GOug%GMqSD0SfN{Jla3#9bv$R@s=J0lgtgoDver z@t#dr{IjR#pTD1A`WB(dWUIkP~z)j**7@75tYFw zn7LxcS0!L7IshxZAP_bIjTcqt?ACN;?UNLP(GFXTrs6K>%}#77Cw^ zg;QtwmvbBJFHCAt601uJdfAv%7gsEH|G5k(3tu%+8-DLyVB)-i%azlQ<}WX2=AjU>oX-$D6r>QqQpputx~Uol4G zX)u!BPAp8FSTsDm%TH6du(#|OFc))2crH%)ZO6m$%Tj}3Io^#wh$b`}e(8wYv)ErYFLsOL9cQgK$<)6jRny2gb!Fvq>+COok=!5%D{R$OPIw=rjid78WLs7Y(6( z4&)qLmoz}i79x8rMq5*`YbQ7X5x=A&mn0t*fQ29#WI;e&+%Ah_*XS5fZr(PUYTE~B zsUyDa7?e|s%R5EA9!GT@35gjIdsCC0tFLf7#ETo98CgbnMgh+9y>e1UXl~_#@i0yD zv1@#&xpZc8+(B6*2s@Dc&B|o9DYUDpx;*!WV^LO&&sE$)pdtsxIIi-{D1s!>dh)^z z*vp}aSuu36agqAeBl_lalxAc<%*=*rv05$LJ}}9kU{)oSTL=M;Wj(&Vl_R<^%MgD4 zJAk{buHx+GH%AaAo6;VQL@ivcb|1UAzExZ{OTwj+k0|E)ecA0F%E|sdfSsZ^N=$o( zw;DG)E0a$doyVh8r>w+yE;!io4hjtkIPrIMqq)YV)mty41CW)(Qq0F(xms8n&SwDk z7f(E7I*<|3sh6I&sY5PXj04$r@Sj0)B6I`(5;`?jku*t9N`wtAM5oSCc2O11XEzNjqYPpiNP7f;Jr;KH!+jsD|%DzktC(3Z}~ zrSXld&qmV2ut&)7$4p6ewJxgpB^m_`0g8zyQ4a5n}k;yEJ}_e z9x6@`&Y-}5SaBZ&E0BO!mV!MH+8{E}wN!>6L`rw`aTGWPOvG2-+=@&t(;`HX4H`Rr zLahd@w~Yr0rvfhqEY#Pr;uF5IX7fP;}}fJ?#=FBjlnb^ItO$bgIsv zuj(KsgKUq0I1X0k$DOaQoiCaF6(5O@dSzw3Z}6Z%|IjqYcW$(_2wxrtfD{=U82AFl zI*d)B$9hZQBNvs>Fw<$?L&~H0J79 z4512_2ymfrQBS-U4ccvlfO4s}uwIIYD71Yr6f`CFLF}*iOfUxH1uGQ##z-jzg|Vu^ zXN@)~GbUC%{qB+BzU8fuT}70BabVFRPavs6&%SXIV@`3IKt6-2#DYvE`f$u#46vxg zUvcZg8n`leruV7s!b;kqdob8?e~QxGFr0?^qx;#LIqOU$t#)8!08kmN3i1mWMIKtl zgXO=4rb1QHsGw{t9H>nftH!j{ydyoxV@trLlQe9wZl#rEqlBX<8bd88QZR5W$`#WT zrI(Ec|41Sbr^kR%Yiso7;c4&CcFO$DP9RIyy&) z^f$XfVy}=&Re_$P1LRB9l?+h`IUki2cc7%+qDuZz6MB(WP=rK%xw4_VGbg2Ciy=HtgZ2!FTQ_EJ zu6wbR9wr;RAMd7-kd)V@NqgXQvgT2+l@BJ@@}aAXQLjg@XAef})EnLUrPniZxwE|; zq>W?Y?JC@%fczxqE_k9}`aKOd3;4}$OWE%Sv%Prdp!1KB9@F#!zT7(qWETPle}pgR z#l#(p=FL_1Vd`kR5RnzPkra1+6%2mau!pr2nx?S>R;JkdOg#7n033Yw8w0mD_cvA^ z0kDjZYj~U?7fclT{mL%Hd4j4iF0B{$C-t1|9gm-W6>47>x2WQr7 z=-}S-YVGB25@OVFS`=Z}-sk%M;E^_f`YOS->1KYR{*Glc)Q`<@J@iOJ_X# z;ZCS$HthCco69)E&fG@R#Jw^Ak7u=f7H7OunCj&M ze<~{ipo&WI;Xda#+Pl2&h)=VgBXYKQ2O+xjmSBjNJ5BPOR0ujzBIP*cRbN6uCXatR zhQ0DECu71Y%|Tys5Ty)pq2T2V!R84k(mk@w3B6p^oPjnXAp)arUFy3d$l~-bIYw6} z;TJWLlcS1Fq>k=JeOJ@fjk{xU!p-4U@!4}wK#Ma7Im)K}O?nCAxR=qrWpBvs9K68v z?i4=r&7sjo<_F>$R&K{P?(^rzm{7N@@T#8)a$H2gWZVG9rv={LlBN)CpY5~@e6Zu% zf#@8t=xVdB3z|mLi~qUDqhXANdaURZJ(w#! zK>H@nik$b1 z0LPs!MCqXd;E4yd@t)4@pm@bt=gee72;ZxW{hS9!zOtEueDp5``IVTKbUk^s2k@?> zfORUBNgE!bDDv_if?T{)5nYy(QV$|(Dk;8Ng)iuVZk2JO+w94||TrO%_WH1i~2peM>Q$G(i;7C*3Ig1nRzyIL# zQ%e=}l7B|^676_$nzGt_&)k^7l7pck82%Q0J$na(LC9PVJzl!BGKfQM&$##8pGl6) z#02HIC#~L(Pb$Z8qDTpau=KiN!7C7zA9w@bkvSjN-`jfC=g(iG;FA6Zoe6~xgYS7#VCWvmK)t)n*^Z$E(4I3Z#xqA-o z+piPB)2|&A;eX1pV0wMR=V4j`I4~M9I}n_!!H%K=^D3Vh-JO7G4?3*&`Mbd-gGgb` zQeqh%S9#DB*_e?iD`(nR?s{;>E*s{_kjII6Qr~ObbN+zwNyKlqDv$vl*sNe z$Djg}Ufs}xYgbCH?q(tyD?>+wALe98!q3k29KYTrgXiq9kWd-r`Ui#;on$D|H>tAF zoHcbU=f<04R%57FFs8gVd(y)euX^MiRx&RaH<$O$o2F0$Ne-8Ej!0(#dHfG-K$E|j zHg|4K3$SgiTes6CrGM!VtFksZ$-*khGxPZ&NmElYP5{aCg)*%*h;U(MhAaWcPr^Xbdk-1O{uiGMJRd@h@=Xpe^l>w1_1 zLxdlIr9P6(2I^;RL0E(frGv6kMcEs35DElBfr&m=kAy*Q-I5>=ccOrD1JAr>6%<-l zLAhoXJcsOost$WL0GluMD$ro@eE#rK)@_(ha!H^eT%T*L96|4A#c|Ua-a3(DW-Lt$xyL>SN7I}f!x2D!58LDuNZ_Z)Qqu$m)4*#VL8#u>G#?w85k&mpa1|mFVHu365a+}|stXW_$wF@} z`lU9sc0sc)TdkiIFp2Ukwj*3A*nYIYs?1dM1W8wP1%Ju3$SV__?u<|-22rkO7>#nq zVLv2vEX-@knKcc1d}vC4X+(C*lcw56j`8H~C>I1#zb|r!#yJ1AVw^RblLAG&yi@D3G(hhyUBEehb`Ua- z1o8VZcz>!P%&kI)BlA**7;fd_{OkgC8UOD5)0fX<8ybPEgSL86t(O*|!M1N#>F! zQJAL9w%4#K%sRQq5`ei%EnFMmn%#2%;BJ}`?0+Nd4N`*}*h7{@a&O5t;&UGajPsx3 z8W%v<;8)}tWE3kyq^ukS`xwiX_SFbirH;xydJy--e~^3D(lig_J>=_egHK3d#)l!m zCI9eaQvfGR-}@E$t0C+w<-bnbqn$BY*YyDj5DDmZZt-e_2(TWqk*ce;$!5!0n%t?e zxPQQillGhiS%*Gdw5PwFLa-CNAy$$iU((-ohf!Hnz!`fic@~g@(C1v6EYq+#qx={h zk^j`eghO{ci1U+db5Bq{(=mTc4KCiFz594FDhK)&q2=iK z&;;QiI812dUZHuOEHF?#U-Dy1gYkRo^M4(@e}X`W=LtlxS0L=_boT$F>fcyg*(R#P zA{Fns!Jr5QuIibWw^PN8^~lY zK(;{HuPwk=I=tA5)$z0?N|v|!T&gMhxWWJ>s3#9r7=gjH+$s!fE)9;RFj5A;fo{Zj zoeRFBNsMv-BO22Wm0DxA*#xI}zh&I(Mq5Tk1C5lMZ1hoCX$T29+ir1*)icBeGhm?q z{}-1oC|evG{+$G?rQ*r|CT;&c219rh0pE?e1o|R(COp}_5v(r+Jx&nY2@?S_myit#Du2~lNmJuU7QXWZ?nsOlhuC9nb`dn~z`nqNOJ7j3Duv7s+>LFttA@~z)n1dbjf9DP0c?e^s3IVVwq zl9g z6Gs{B{~lq)5*59er=BAoE4VJBo0ET@U?&sq%cf{gwj@Rg(31os%%qjCDjrLH`p0wG zf0P2BvF61*^b-s09>Tqc1fr~Y?i=A}%i<}dPmYcKLK;ws(*P`n8c3|fDKMRDq)3v^ zQwO|oKnx)p>X-WcRhfqk5yvgp#e;Xe=cAT|`D(k&?EP|8+l9e|_FXt9no-IT1(yjp zn2`tVbIzI2R^vmfRe61vL7W^<9?MX&_Ds<|xMU2qbEVeSaEiYCts>i17H$ zctiw4IF3C)%4>~BggA}E0_4*?Xc_eeZF#e|JJcG!`Ao zxwNZ$_d-$5m)k7QnqT&sYa)M58CcT-=`TmEELYodZXE#+J)p|V+6D2H**E$j?}_rk z?rzH^IF4Pf;Mt8`_J6q6nC>2^*7>~ni5WNS8nEvU89M?M;4Z2KqdxC`%o0Rt+@-I2 zvC58vZ7L)I|yX5kE-)@xlHeu!TiJ#kJ~J}$pIpbM|KQ_=yQQoXMg%vC5Et4pmj3z=$+}S z5%hSZn?w1xISA{B09a9dtUDT-5{8J8sfSFTH3L->l6?b?!fw5>Fi@@BuG_vT_4AMw{1PZ7mL*GageT4UdtcpiTysa@vH{%)=Tv_?YO& zOkfP5+Ewe?Q-4e~9-{0S88DDxBvj)u%e1OOH7`L-(SC_(A5wmuP1}dA()m+fze?+X zBxnqRyIdc{64FJ>hfq90h1|9PI}i!{Ty`k4i%QG+e52Dup4!m7v%ltfu{PfG>2|8b z1bhoP--gn*B8YST=CnLqiHr zLPKhbh9n?TWe;*SfhM=DSF=HCcWFqsQ5vEf5MbQ0r&%fIu0mMXMiFq&RGV;5LxQUW zU^m^kSAWth+d$H9o;GS@ViH6_fG`oitvBOclR2tA#wY1MpYdG>*}|8J1gLr``s?){ z->*UixI!_fJ2-F!PgCt!&xN8|X<*W65i&`Izjt3i%#&yy7xNRTl5*NJh2+=+}Gp7;?1|OQcDZ?3?oEn~lALP}r zqkS|Gwpnf0!Sv{!w!s05Q9QxkOHnVpBwOjC(yUI;Zr~c*AAQ-SaF)eKm^6;%n}SVt z^?zc>s%mUi$s4P}%32i`slAj&27_QN=)iX7x{<=7U}kso^&)@HH>so5DFl8DodGs_ zQy}f~y14W#9PE8YR(?&jZx3g%0{GoA;SBY<5_F&b#aREwuNn`w`qx5&%v?;MPA;FE zL-w@mc^D9EsHdg#)fI#qbDfUYBvA=kZhyP1^QqA3>BUr_8_lt!aFas>5M2xW3OF0k zkYos52RCUfL~b?TFJgv(_p&JF`j!t_qf%(#f$iWA${oM08fbn-psknkU4Oa{ z*RPZzPUu+aw{2(BwMMCp0Qj?9rCE4}*&D5Rvx=SiNUP8s17kD$_nX;}2w;E8!_ndE zkqU|uLf)ZATj<_xOx0e8f>l6kMEn^=Jh^EHIXe9@2|km%;Sbz>XE~&xPfP~A)|JkM zplz@gbpP6GuZ;%VW@De*17?U;gnw$`Mx?-|t$?M|g4+Z^O1s?!h$|+jo(wDImlF_o zqxnK0)f_fua8^9K{CxedtJ||LcmMeE9hzE3CZFH}NXryErcI*2Dv_ZkNe}VU{}j(n zE~$$Dy6x4&NSZ*f^rm}dQw2Lh<>PWsG315KKGn3`_u>BA>BZ$pEl>pfAAhN3TmGGj zVeR-f+wt*_k@t+DwAYWu<7HMI;q$K~b^@&y^MLHw4?%I@L(tnXC_$>5C;uG~BvrB_ z^Twv%4$N9uzbM>4YzaU&w7QbDXWA;Qvd7u^Uo3RO3!JNqyfy^|rZ|4Wl3kzf&=bzE zZUJYEvLxIba5KhPs1KABV}G2@Ggqt@E)?xYE?D%Y%Ao|T2%=rDyYHhLNYf3tT$_0D za6sa3KE3t1>X$^J5jyREwmvrwwybu13shYiZoa1Ug!aF*`u}|Z8l~~U|9lYqM+#06 zH2-dF3urroI)$^z=S8|UvsTw_Nu`In(^<@u$?4Ta^G_2G?!K8ff&c5WV|X=x75K%WqQ0ZksGp1VNj4_tF-HVk@x_ zSxO~2LI3>@NlBIz+Hsm>x4<4^$u!9s&U-U_WN>gD;NZ{6AM?rEV@`qyMUu*3eibmP zk&bAfxJEo;!F(BfnVu&zF|E_ZCflrMAys;M1`j;7&G$2cr$u?=et)>AXQ7zJ3-ftn zKHj+Y^CU~+Dsf*hijZ)xmv#<2X7+9VadI@D{Fo4M4hJMq#t)7ZR>5LD`SJ}1OKATX zV8kLF+}mF3fJ+U}EV!6_p5SI-xW7P6dkc&tieNrPFv3i^^_5ALqWk6HM)yAnuUz9>B-ez zrn|O9vB{PruP&SZkS(>xD?)+p9V?D4!LrKh7EnQxjz86dMJG!%;@_ZfgbYH-F&$>u zby9yXt19&r58#02>`BGrz*G+biU_cUNJsRUsoqdy-hbh;GFkD{z+0t@ICHI8>{=P* zP3eI_0o!z!C|y?H*$itSy-2U~cD@VCR+oVJb#2^UxnEB5C77+#BKKfOxIhHU4#b93 z*10>I4`~)(W=TWw0@&ujy-!FPLfwv*2hC0jo4<%rgnWsW0k%aJNCefx_< zlF-+n2!C@BH@?5bX7Hj6aa;&3@I~l~Nm?}q&JFw?ARx9%s^1uVMv>s20`bFRok~Om zc@5}6YOqNCzSZG0&2QYe&zm?)>z}@jmm=BQ>|X@xLy)F^q%k7U2{aD`8Z?h2P6CY^ ztpox&Z4ls+I#N*3kjhjBnBL6|(o^_>KG;m~C4UqcPe0AJTHBOdr=^|Vwz_7lsdi8o zgMZ+ZZc=@b#Z|RK4sUmMqv%|x!Cb>Qeu@`2N$tF;pCp`NW4AQ!D`&^U$SfSd9w-PW zs+}3=LYhU`-gdKxrcGt{B4`28W}juVOPSc&E}%Qoub6SS1vTU2%VJYMPYY8HM;@a0 ztAF8rX$j-GjC}I9ancGTyN1H7=dQ^{x7<~`yadi`@B^IJK$vmCVZUt^V+0JUQInm>T_^RbSPmB+KaU3jM4?i@ zPJ@ua0oD*{08^h1d-o{pQ6_a3c-FIO97=l;=YuI+?0w<-^aOg`Lc1{>|E`l9s)+NKzPeu>wi$c z{Guk&6-AoSp}M;`I-5T#f8O|vG9;rtHa{Glp8S1ue)PdB=iwkjpELXMyOUG@)F7=D z?SfnQ)HjKc#t*hLNHH!E7NbfywEOU1S63Y;mC7ZDC_!PKP@~n9n}uS zSQeXn8P=|9r?+99uA5)dygk`33V(AGwl7jbK@##|pehKInXTEI$JGmxlktAAJez|+ zw9DV!Q-L%BO7y0B+6|y0kmhVCWG<4rYBjC97ip|N8ks|G0f%vNTB(fJ4$Y+88)_ez zgU}2X$09h7_x1=XoaY_<`_{ETIm|w1<;V!~Ws;?LN%`|T96z#4$VzV|gn!g#>Hze+ z+SbfwOSg{$4C(DX(~~)1uBkAO9wEWiCSTZ_kLIc@ZsK-rwQbwkc-r2nY)?imu$u)a zwd!h@7~F0UDaIcE16)V#iF%`iBJ2$grHMBraOpi7 zxb~hJBQ5josn6m%}H(z4qC7i!%j6{ED~Hq=5%_(I_ElALYD zRDVj&J~LP>*(X~4Ep-!yB_Q^R8rFc!r-r!{bo#t2TH4J5$4OwKVLT!4GYw_sDFe=O zb>EP$q))>va00mdi>bQ>3&8~r7JSN_+-$>3?v8JamL)fVC=hpiZNN!ihlXg| z9OWijL(4tyi_X)ozLwz2WfK!hw!=u!01GymPp=t27 zwBiilS827s)qo&y1_%#L9;rr#R&xf3W6h<)2C_H#_H;j(^{gDTB65e+M~?>OFe9M(M!z#ya%fi?|fDbb^M5?ES}Nq8Da%_1YfrhkD+qHFym zFy|5z^kF1eZV!pA$k~diuY%?1_>i_AA5iRj#mD^d<>eBiU97e>=hL^fb%Qqz*)&!Y z*rC=3nay8*`t!O!|MLFw@7esx^6K5W zBnp=YBtj)cg)mdKSaaWbBVjioYf+Qk%|!HcL`oK@0}L}oLqPZv`Hq3T3>h@BHm#g+ zX|zP@brROZ`Q(VYpeHD4yAO|^=h#@sL~skZ62aW^G*Aj+DC+<)<$vf!;UthvqtXbF z5hMrIZ3jptM>C!VW`rN=%K@M&HrE07K+>7=L+I*hHsLD!B3sMxBCBn!q&00CdDEbi zYU?_0R9)KYP2y-Ju1aR`f2TW{aiEcw*tN4mjde^+w_!E3V-RQBm+NWYrZMTyduD% z`Qb`3Mh)06cCdTM~Nbr1jM&USK_6j7wq8&=9Z6I~Yr^3@fzx&E{ zU_?gAWrqryU7+86RT(f{2qjn3X&}`aQyIV!bn8%6xPJ@GUVhNPh?(G>)TV*euX1fD zskU?C>kPa7?shw=z9iz&X+--sw0;$S>)7bW6b2FjI*xUl%QkLw3)D{1r(Cz|vPon<;Vx;O8mvKo7 z6So<`J4rs5F~K`2f9;%GbDKyOfZzQqc$BKfJ>5-TADu)=G_f6ztYkKuouaVRwy8)$ z0hCPk*Y5!&k3bj@M%d2mLxil*g8n$?^trXLbz@=c&C!eT(XX!=u{6?x3Tu3ANoq-^ z5Yx6bo?4%KBh%--$eXNYt9k#JO4U1u1MVdsfA16A^Mfzxe}7y?{bSy9C-Li-_~n=M z^O2buH#F%V7-_`Qw^zw`BxCx2j(MIryCPFK^S`f!5qUs5?}q-*S6Xk!r{`I z!S^Kt;uF)8eI$woF&n{!6zm*~`6#4I@O%}t-glLJ1t{Z%Wh;RmP2-2J%n7~C}CL&Xmq+zJs%Du^hs9K3+YB4}M+o~8kzNYjnNh{FPS znEfD~*bjmTwF~4Sa-&t5eh7{z4EX6yhy(+xy91Qs_!`fAWy1K-ln}8I!R^S9E=QyY z60%?oe~JQk5nh|X3BCWC5>jxRND1})Y%R`l5yT=4*-X$BjAn=^X&qCzcUz|ye7m07 zHbM;Nf`g*gr`)=svvi}|*8Q1rU-4c-3m(kU5BkTke5Kq{S#!ZTt}S335oxyqvPuVS zL{)Cl0!U?mY#XV}&D9dAS8J8?768IuG$jLTe~iSu71gU)&bdZP^XzIClX0#Cf9@>Y zxpCaZ)bXa^?Re3TG9`qs%G!%Y#9&Ce$Z{dG4{UFY+(v@5B3}ZRQq(qLB4@vD{blGx ze(Ns5vr)mkEsGsTfD_v?L1}uy;r+I3ZOT%?yZ-T$1gB#E;B>fFy&?$$zBb!O<0dmV ze+<)Udu!_iFp8i;;6q!nK)l?a)(VD+tN{XBFp0cx#<})`)+4NaAACCoM3p~yum$*z z!ur8`p)>L4%fN)8nU-Ks7-=S&`H9V(AJRpj8L!!b?;r_`JN*HM6+-Yu85J!N)^uMg zFK^w&!pt^DfTBgc^;$iM3HZQpFI;D*e@i4SH>x(Q-kg9O$l_V(UND+}I@#%8-?;-)PV=vC$ciwl4R4pM;64~uUP&vfz~YDn@Jckdg%gps{$%6{uD>p(Fi=tbVeI31q9bI!&eoL9rkm+wCgMxTldszAb) z&6b(Oe%@70YDfrNObgM9gj9rv@s%ja`X4iR{LVaDIa4p3_}@%W8uw6!C~ug2$bcbQ z(rq6;357scB+Wgq$^{9eUf8WTe=fXSnuLY{xx1VB?$lWZ-ZwWg&KFb0u9-{~2HBNN zz|m~UqZM|ANGT*#$4s&YxY~`QNQ!pc`>Na?T!|LJSY6G$Nfir%8194xI|z&XY7`q^ zrPr&`x}8cc^jTGZM5WK~ezgkQyI4A+4E)Sim?Suo@ zh}&X^gTIREfN18?J_Qi@W8PXz2!jc;gbiNI#<#tw%(N`s$(J^&f3VdHdySS55K=5V zad5#N>s*L<0VGV+3WG=RZ3Qcxv64uWT$LxC@F;0aiSDzV;)(n8Roy={PV?rU^vU?` z>*4vU!N@slt?#GIHL3LIIFdH$!VwW*FK{kjba8qzJa^7seK>gATxDLGBH2!ayQ2+M;kZ86MR!GIwt7{jBpJp8+uQ%X++xH+Co{tBkk0+H=O#tT7B98ejESSQ8-<(bY* zS=bs!EDbV@_vU}J+$nU%R0LB^DxItY*EOkh^1Pg_NzT*agcJQ(mS)kw>tpJn6`O>X zR!P?X(O{A0f3O1cb!Eb+j?~p|DONRGiXTtB1g%f(PEqH6WSqIX0NIMSn>l9TUd>9I z0U;m-d)Pvo#u}PJD&N`MtPh)YP&7*Vuy@36?te3P8d^i>{@F^J&`O&u<3;qUJU>S$ zPj(>hTY381TTKLSOmx!N5|>c(yZa77 z;wkK(f3GkQup}{?=2=9})Lgr(SyU&9L5N1SU=L37GP_O}2FCF4T4=(^S%@l7MLifP zrSKYzR_!1u2=Il-DH=x0g`l14^5 zr4~kk8=0HZ-AUkV65D?878{WII;sYyTO3}~Hpl!=KcI^SQ?5*x8RI~lY*e_|U0r0hfdod!`dsoM zh&n1~^NhXheR2WUN-Dq;w#J0M6>4noNpo(K3&eRgjqVH4=Dn8<(`w3&y6>XG5MsfI zn6RS`P4y%6vWDbr$fh`h1q**RYz>*B!F9;I-;l7_=DQ{>5OMd_3Tn(k5@+YSaPS;q z>G{0Jl{eDvEg`E%Q@e9I2~CJ3YPh{om%u=1+j6r0!%1R@hS>1nBgBKaAHMQz# z2yaCDs-~#Znc1ccZ7Hg;9Ykk#=qY=L(3rVv9_l{q!Rb6&?-=&bMjvuUgj^|@$jA5> zJ}{STmkErxuZC64a&Ek@oU(ufGU|j}AX)U(;N+RSG*-DzjrXNgl$n{&Fh}iktZL`_ zJ1D44bJ;cb0%MKTHZ^}%ELcB*Uhq#?8jC!;EQK6ZwA3nCQQ3rOH~=&`1JPZBq%kBn z5!RF+hCNzA7(8`TGh&4^XnB?5cq?*!ID~`^e1qIrfaSFwwJ|&)*6BU^)K_#kbGFm$6Vh z6o>p2Jcs-gJ%{`hKDYc7Khq@vGM7O!Ix4sNIzNa71p1<)2DgVmKSu$7m~JnmH@H%5 zD0}nF0pkoN2v{#Xt%K1LNVgZ-V4S8XueY@DMIn)=tYR&3G@&Q7X?OvQv&JuZ zVO$})*GJM+OxVaX_Tq zy$FvCDwHcs=xxUnqbnJhMLdAPX#-S}nnRZg^$JP5E1*KC!urmo z!A%+}5;&!31q_C%Q#JwR2T{mrR8K1oDurXT{uO9Jg(-zhSIe}2%jKNyiwdN+xrFB7X&Cz0%qnF>1V8!Uu3YqC% zGv1_IR}{*`^ooe09O6=2(ebw& z>8krz(o)m;^SIN4)FX(Wy#5>c|C0-UC-=2Y+TTXl3PsZq0y!UTmw0Y#>`j>K;0s)Z zyM)O`wOW#Y-=G)<=X@l;La!Fvsy>~wzq!eg`=LJaLHDB)$>*e__HFq(`?*A4?W3|^ zYuC-^?3eO&sz>*;?*T`MW;z?SoO`B`#>nUP+!|k4-*5S=<^0fR?mzcIG}4(4JR>hw zU*(bVK|YU!rCl?aYdP7Vd^#FoiEyp3ECpcSDXd0+VbDiDh~%i2K|@;rndw;$gH$zIDKWfSerqbc^w`$ z5}@mUR#=%N)#@irq}^#-RP-|Jid~^`5>M2A^UOM<>`N%~JyG^5*UU;ZosBA=b&X{0=)B9w4HUP9rLKkr%zE#-;3<$O3BoiC=dDsTK_ zaE2!jcb*(QI{0EYwWU_2V$pPY_M+`)~*MS1p;MX|+?>Q+Webn;;^qr~$cd@!4T zP5=5Zoqimb?-##RbnK1LT+x~nZ33<&>g(rq|M1PD-CfM<@U;|IPHbC6wjEvi^obZ} zmovjOzi(#dnwib$$)#z9TTSce==c4@G_9+}1^e12C6vZML!;clq^!I3q>Q-Dr2gD_ z_4M)nug}Y)hhJyqqjEN#Z$FrhPp%e!o7I@27WBaxef%X=TX4#^=a?>=IVu@f=P2?F zWm|5RE|ycg&mZs|zRUl~_xQuK>hn8)%AfH+_@8{A|BD~+L;jq<;4k?re#Bq%0Uw;5 zm$Ug`a>9@KkPoM4X9Ir1OP;#t@A-TDkMRGw+b;ve~cn4j?p zpNu9YpYkbw&pG-VO;7kI{^_EeFGkY|pYb`Lm!HvOKKjBJeDPscmVEKolwa`A{4f56 zf93xLBQJ?X-9{`=U+f$`-1}B66${r0$7JEq2bT09VOuzMRXDawINMS!#iQ4X=Ku^p z26GcT#}(UZcFn<;D|ldT!-H3Udpr9NUas=spgg@84`yo^K&YbVqbN<^F3M`Fxn_V_ zvA}fMVnA4{{cw8_)ohmPG9MHD zt4eb*IRR^i(^=W6KlWB0c>l$N!<|Q$^rs8w4G?Zyc?t{ZNBDMJ=;DfT(`C!J?PZ*| zS&xEg2O8>oyl~@#Te>nE3_q5OB!RkIas9IPKy5x<492Vavec7*8@TB;3bLXYH`a$N z`?XTPB=B4L_JcPs4&rqJ&E)EB^19t#;T;!3Eelf!dnF!yN`GGc6LZ8>ttfV-#{V} zNJ&*oB+k1Pkx(#yaa)mG=TE-_xQCg9Kp&U$ z`BLtai?d^pIy#+f1mM^E{A)q{^JqRg265+uVcDfiw+hzw_6{EY@vPFN?Zfe4viNsW zgFDo!?YIH8x+0yrLU}5qhrX1J=G45u4cdRVCjF=qtp%A2A946i!1zDukRni*fnGlq zw_8d-pdgnLj{zxv#adfa+sG1r_pg}8b1Fs6wdYc`wN*ftKtd80Lc+3@I%RADK5J~& zmUG!(e|n^8>tdkh|D60@G-qKdH5CSs>U6(?6X26Mo6adWF=#B_D&7r?iA_U`cC?iKE1dkGG z1DuVL0|v-{4l;qJKue@aqX&S-P(myKIF#Bu2G*brgRsFNH`1V&-~nwIWB~%glm-o1 zfxb$R$dyF(6407e9&I2<^wy&doXxDkKhh#;)}nD_-o~h*4F{;jW9%>ps3k-KBLhz8 z7*wRd#ekxuVt9*dcvov5CBrZnHcG%8AU>2Va~9cuLkSbYDKkLHGv_6mMD5PwT&o0g zK}XmYV<8YL65~aLg@N~&BP;^-3JC|K-)mt|z*Nv)pdc}DU)D1Y;14 z#Xw+x?glUrW5|M4I0thq*no48Va)Lua-8f9PL?=1V8(;Qn4za~03v3MKzbm?LPWcm zEHS%qvOy=M(CAYPFiOE-QpFX<#q^3RqQ}O?6&5qb#K;Sa>x_#lyp)4qei`t0U+*)< z59YJ{dA1xaCinS#F(}4whIe@9{n_s6<%ef~`RL14p5u+_@Mg(OIb&~c{)PRygXY)cx5LF*ma~8HzgP1-TTbGFf0yjKHdMI{5Y1?{et(^UIe9C()sY{K1`n zzY|Lnk`(i93wNBZd1D*i3>S;}=kfgWtdv&wJ^ty(__up}asK-Cvp18wtJU&!e)nb` zj(1M8o7K+QbU4fZgWLLnFk+S1QNBz-Olwp5Z5`A-FNWm%j*`CV{!SqOJ=FXM@qN*R zO>cjjjpk#Vi&iJs*V!VQjj|>CQ_H%4nvdVLM%r@C_-Z=MuJiR^QGisEXS4Bed5aB% zUtja<3BR7AfIrt$>=!)yGMWzWuut&ud^#O2_UmdVaZwm zzM75E{n31pVQJ$-e#J+8%n>nvzu~uh!vD+v;!}RdXMD~v)%k)idCph-6aUP=@UQ$I zY<(7~8BHenWIF!dU}7AuRv5_qJNTCf$>l&muSVNLw1Cka`fOK*3>g23|)J2k!-;YSiAA;!Z{)gkE zlV|U;ix*!P*&%L_<<8!GI_^TJ+vt?5p+iJ9c)F}P>ohA5sx8Fw@pzBV_b*-?Y~n4e zWfyALNIY9dEo~jO`8lY6KOF3z?7eTIjtvCMT^Hnyy<*`(qVWv+Qy^bnoWFW`Mv&iS zi@WUM%-GmT5n>Ins&lM=62~u(PR}k{fFC9qHujoq5vn^HqHQ8Q^$-5ubL7mmP(ISCcWGKy8^Tc$^94uP<)nlV3S@A&o<^SwB9>hzq4M zFChJl6@`_74hlt1NW!-TLDyk8YYWq}U{uR9S+fko;7Z zP*}f>DT=*+a*0VrbSY0)0vQk6c%?=1N>dVODMQm@=tVpa3K!n?`985`jjm zZA_&WD2*ZLhHM(L31k!eHl`><#u8l=qWGr16sQJ&nn%{amMN-%hC*a0L?9Fi$#alm z3sXQL0;)%#3<(JZXtJrdNeiID1cscU!URAlAO#KVD4x-JQZ|LC4r90(x;~Y>1n5hZ^sJirfkDhIu6H=t|fFO zQdLwUwMHf7H;aUBc;gz+F)8Fe9glqCF{E)Ybj+1oSPAL)Uwk4@M?gAuQfHUz6G!=! z^F&j{H}!O!pvFr_Kdnii0-;M5pK2?9gHQc`huVatB2In*B{&$pjV++VB+$cwr8a1( zEIBHL{@Vw2c-U0esxKccTr5|<;t=2vgu@zePYo1pqiG;^>TVkotD%5a&@Y@t=05@ zwlc0Zy{i+nH`$k*r5fDUr7K;cPnYm@U7ff@SnCqdt4lX@sV-fn(j|LzK?rqS!guKs zqzi)U)ddY*9g$1>pwy*%b;+78LfO)#*1CM?)8$=57j)?IzS0G~x^zRA?9yc_UA^49 zI`@RKrK{rJ^>Xi^p{t8~S8?xpxpxhJ?p+u6uHxSIa&H^lyDsi+#l3xi`?R`?ZCkNz zWp61luCbl#FHkF-seFlg`Pz}DZL|stw8BDGN}JH-FjRp6-MhLG2MBO6;$HT0FB{ye zF79Q;z3k;)Hn^8v+{=o4(aXJPa4);K7ZvxSm-|K&CX_8*75Cx+?#tDpi|wlInpWFw z@6BfIZ+zshaF%1xNOYR9J4j$857!8H7B zA|?k)#J(9{)wWp$sMWUDMoL<$Z{Ys}Bm$b3;r0m=w~ux|qz98yS}A{pTU(1J#|?eo zU(t^qL)LYd3XCBn1Og$1ByYhF8#5#W@rCs`H=Jj*eHLHUowLWWKH2z{YCNzVFn*5 zXZN2=B)?e{RoON86KYH)_D<3&Fj4J{^N7#r{KN7*+C5tT{Ti}7e77yXsQM5l|5whMiJxM(R$Q9#0nIn?jeg( zj+omI0?)GDK@@afF&g!t`=%u33yL)5gL6>bQaQK=-9v25q&z3FCUr%^2sbX*j#kRfi?6pr{rtO-0yWW`#eN@X9>p+G9T)sC^^x3R@@tj14C^~2X+ zfB5R}FR%Z3K3bFb{_BUYek*=+{`$+O&(A-+YVe-_{QUf1Jpk~JKR^HPRa^-F_~x5& znewnsTvP z@^Tr>EDIvbMP$AqGUt)Vw>AIp^7-f23)`PQ{d}qT)$e}%MV9zYv3uo*_WJ4b>ysQ!Q1tlXkFU?)e~eFh#`i&z zRC0fM(DB80|NivT>+|O?bzI|OgesdQ;pwR7@%61Bd-?w5b=rL#`t6MJ@k}5jwkzi+ zJ^Zb#$gohYtct8>D{D^@|C5XaJCzye0ALuo#mTZrpMZ8@pu7S7>C?ZSl_d^w6bMP& zx{(A`uUna#Ml#zDqip^@(m{NClCTDwb(Me05|fb?$jHd5%92IiAge}3Dmxu!#QBck zec%ozV~Jvx?T{JhN+laW%B3XwY-Av=7-b@eIJ4OTbJ z6TzFcc?54{p@RsbHB3eDK5z#UysE^<2qz*4O0=k58S{MMY|2%ti081ILZ++ zqfAba8D+BaR*M0dK}6Yb`EG9+x5Eh9s&S(X+Nz-_gSKY10d37#H-k3ossggdw82=P z-iK{47O+O0eRot-PrEfm0--8ZI!IONUFn1>1W|ey3`h%v-U%40bPz%j3DSEDO%Ult zdWQ%|l`2SY0$=>S?|bie|GI14wURl{%--|No;l|^YtE!hcn;olpO9W##>oQSbXg&s zw#rtvE;wRBSN7RIdUfp`+nt{$%>7EKr~P%xERt)jkBPbG(8jwM?DV{|jjXSvMSN#l zT+z0%?3-z=g)s@Fr(WOJ@$^nP+b3tf3Zg~Ay;pA~cT8wnjCBpLz18yCH)tzE`{p`%xO`(YhRbCfs-C7{%|wEVmKP19DMaLq$qi@6v-Mlm4_!X+ zajwVK9tgZ#jB(ZQeVtjW?wh$y@$y015n#>VFAwU6g`q&uH`DkYr@R)=fhP}LzRbGj zO=ZbmM(OutP9!bHYhnu2C>N8~R$Z}Mx8ZRj{OIGK4WX3*StIN@0C#eZY=Ao{hazA#v@gD$NmxCeJrkAc*iHlO^?Nm*qq#@f< zM+le4ua$l%ZgvCEi)Qe>3#E?@Nx;dqqPlo4I7OIvNbSqS1=l?2+1e&>MtUdm<`&N+ z@+3cLNjOV-awqXL2?&IIfhgf=2(F*J7_VR`{q>BGvky{3d-z&JU--~mWD93YApH^Y zeW5F9lDUIpwxc0brFonm#p8ITyq>!1daYvk9$X;W4F$7Ud7& zbND=n$Cl)`4 zErJKD<$|~R{h7w_pqssu^2GuCSe@pqN}!LT`wR z{=6!gA3TG5z9{5MB#8PqqD5h^EYx2#ZunWF^y+3==+!?aXjR=`99C(~JztFL#d^}& z%p_^|fyr$CldBudHMyt1y&KBFv!U1cVAW$)Z>&f4k+;K=S8TF7V7|)LYdF|cVtBY1 zHqkR@ES_~;RQpI^aPjcigzT@tqL5|@_^>t^n$qk8gWbJGDe=Rt&>-efy$^ny_Z!!~ zFwBMfw34}cFq(ZhLai^Yd>|~pL$@Jg$J!{hp-9m_6|csj_)C?Hab;biYb+FY@*T0T zJ*yJonm?;Z?v+_f=||=~%wQ+gxL}k!dsnc5JO98kuWp zqIH@PiE_ zob#`!NclC-W&P1_&jUuqD8@TIJ~v^>Np~( z=t`^*{K8$edwm0JRt4Ob_EvJ8G+P8gC(SS*`$@BDkPUp&Y+Q3AI%ckGD*#zNLesD8 z`I*FlTBZEyxliQ_=71IqOyfSy3wI5w6mY3%0JTK?CowK>bVcxiS5|HXZ!~Lo!{f3mdCZ+v^OXd|b9Hji`!pHA1uweK zzqG#Ae*aX@jtqQ(NziQdXf4l*7u4fjdnrgv{kgwoC{$n}OyC`Zn>~p*Sra-eDclUB zqyiFvW~D@Fn(}HD?Shb6n}=9QX*o}?Tyom8iEv+pg%D1 zDxi5Qi8;0K5gaOC?Ajtmz;1=G1jvv*pd#%+X)oIng_o)&n=aks}Om=oeE5l_1l`ke$Y_j0hed<@{LmX4_kV1#`*Dsw5qE%?NXKI3q zg0z-;SHN1IaYvp{ob#XOz0+n+A)5NFU1T6wTeYp3WXzkFjNpIoQn{whWcwRV1__+n z7~OI#2b$mb1ewWb9@G^wMw8G=(#|}#q43W$QFF1PBSNax|+CXqJ3SB2^x>i8fW^$<#8M>YKbN4(e_F zrJ^lndra#CDjI5Iv@X|bzQMr?!naH zeP&f~Ouyn}OB$2%kV|dg{Vjf%cvX~eZbO^&Y}V^CMCFsNr{|vq5`r!^5;pGcLr?C+ zU;Z4s2wc>T4+<~KT&+tFUz(_^S)?=vRAw(Xm!gBhDXJtKmO9g`g1mwp*7S}e=|tiB zF9Oi$mw-C$hXXv3HS1LHIu{eU7iXv6Hr%s~&S#Eyo<~P{Z?99?nJxA6j5p$jGS*cE zcvvh6ur6~)BIAd@M>CQg<%VZ$TxYy}gJ_zi7FU8;$UXh>wNY)I@AJ54#A{ajYWFW$ z4e{ue{tH9uwZiTeX@UXc4s+JkbhS4cUJFjMYQ%NN>l|U1=jtwg@I3#zl)b(`QG3(@ zo!c7=k0YtGBU3XU=~=A4C^AFFqd!3^{R4L_l+5Ln6lYy%oNA*#9_>+=y+N(l_vEH< z`I@39C^Sh2)ch`$SrNxx5LZ*VapUNMF{=|SEzkYs7XHVbEhMk7TglFwO|GlU^bC%T z6HzV?(x`)Uk?pTyipRlpR7i(75PC(B(Hy;pP1cSFJab8QYGVb=nRx`Vw~*kbsg#dY zE8SYWm+*k|7^=Tt|DkHYkCRu#B@z}978e#1l0a(3%QOC0uE7QStaV3693&>DDlQ@U zL_%0fTvS<7R2(F#EG#0aB&w_mQc;v+lM(vgDCWe1S~kvaJnY!SC4`aHX~2hYt_(*Q zlf7s7#-?0uw0J7tT#}7Oy^SeUqn>l%V>Dzg$!YHO#RKD1zW!9MCkkGj0zwMG#B=2_ zpF8;ZoQRcl8DEAH>v4sKKs1!_fOX5Q3!IF^O66$}LLLm|Z-ynnG}#~@XW$>VkAh@n zCju8M3r8-V(nfa&*;LO~7^(2V4d`o)*0WO^9(6pXsebBBmk~mYeuC!ic%~EPMN^(w z#W0EDM~UB^e)|+HZFdstnxODqLG!Ky>QB@+GlC4SF~!W$M`PPWCy0!(l2MOy&e_=M zNCVI;p2=9o=<&p9umsxNPCxY5D?t;+3~fi&O@$q$QnuYYS7YR;tt5{SIKJJ2-RGbM z6yeZA$M0uA|8_<6s-0_;`0XPy&jWI{tbcpq# zpr82f*|tkzXfga9Kp4EfjK*=47Rb~71Z{%O4Bcp_W@wtXVEX_NwOe!Z|M(lPF>*S@ z3jw1wQ`%8(*7l)a8}%ElxMzXuZl^X@K}kF_`o7_b67v!O0~8C?vTO~Oc$dmCNnxq1 z8+4NLbc+jJYlkHAYb6kHRB2W(QeIGO4lU5tPlC^kr6IqIhKlq77>?Xb zks3cSO1eRXM8dW@A9tgugaPj%74E^c2x7Di+C6me9f}xA7Ry91ScC%nV!;?I*}m3^ z=;>PI{)#L5g!lPD34|2-A)%i|45gpD92<-^a=OPvLbXm&^!y>=m3Z9#RgC2<{3?AA z3X?I0(cchw8-xNgnlYwLB{GNjVy7YYhe>D-L5>czD;}WIewY-bLnV~3 z)%->;$I{erlVznM3mDrpl(_w2_ra>xWg{ z^B{iq3;>ps(kco~6*bov63c2Ggwe(_{y9}tqTgc5aI4Vdq0-KIxFH+bD3zwDJM1}! z{oi60vGp??_FA6C(CN5>_rgbSnJ^aU>(D{WD{}A?!_U|*iK8vh0x79j*1q4gJllV(v{Kc8U_YFc}F!uh);BNsTSdwBcv!A6bcWVUu zv$tf~S%rygL;(P6C{1L8M6G;lzDo}zf4T6sCfy{jAsJF2z}Wmdnwb9;OEHFjXUWob?*WH)GET9; zd)4m`WbUNxz5qazt0=I9q@*8gGQ?@S@G)wPY)25b`E$v>N-7pYtWhCujY0B#i(G-ArGj+KzhZ5* zAY;aGJ8!@+x2G3=p&9!5Rm0f1d*9B+wsqyFenC25O3|TB3E2Jh;ErC(ny1)J(c!;B zP7+?!B9J^-7Z(2fNH^5xwLuw@=W6p+3~u^w8SI@7;NzD^hF{5Vo_!?jMJ6Eb&SKE<^C+ z5V%4_;cY+|B`M;b5V3X$cCaCe3}VQUP5r02qQRy<7KK05rN}+5J*+&tQ;65?h_w*( zFkG`cwM&$Zq;5;ZY50ci;xOiUoTFE`^LL_`XpQg&mL!aDOJ9-A<9fG0Z6uUvgLBW~ zN%85$M&>K&hu?pwCmR{4q#u&Tt@kTJUrAfOYy*crnrwa=my*_h4PBps6GxPZYfB^y zilkQ>ylWkPS2Q$@y^ECn|6BzBpEWtyBUI(!Z-E8c%M1rPHrI*_(8y9;$QMF1Wzmn5E>*%|G0We6M^fm46khi1e$pt&Aq=ll0R-RZdq_hRT zS9iWju|svOuzmtWee%0s^qz&_5vn)%+fT9k=yTI%&tOqD621G+alXx)^{gzK){%_- z@x8X(hVc5h)8W`SJJagS|12_dpP;>6We?mHLAedRNc~x1@@GV@AY>=FMy!F<+2qd_ zKiT|>v`4og&eWT@aS`wDE7?8<&1JY;@QaV#@@Mq+C1PYnkg_|EsPzeY_-^W;Q^=`Q zpDRXQoTFp?cWVvz8_pYoN?y2GtPMny(NffoGvICsaP!}E`r79;tK%2WIvivNs9{(X z@C((w3uc`UEGry>NeuF&b$1EOQ;V2KapDmd2EiQf@|t}{DP!a9-V=7pJkR&dg5yOA zo*I8zrx1I`@$MWo>k>6QqnS&k%X!tUsLAvPWIy{!{WQ8W6}DFOpq_UH@j#9@&e;0g zpJAz8zS1(D{#{y*6i_6!k7-iCC)bBX3*nxchAG6YQ&IPJ?V&_ka*!dYryBZ9NL9)c+Y|bXu@M}RaHc^l2{J73{TrAVnk4hd^1NTf;rYaLu!AbA2 zmqPV5js02q<3!Z7x&hv!2uK*$;z^mujY zJ0P0tW|@Ow0bj4N!Sum-xY*R`qxt4wx$k6pd8HTw`bGPw4c0LpKi~U~@C~cNbbguv zwRSdM9yz9&pptLmPa#pPH(6+^SJdy5|EwZ47?&lzO;>J%G?(w|bO(H+l)nu|PZ(Gp z`9h1GhVkC5uW_oI29}uQQUyPg@*UnT1mtBA>UH#!1Yb%%At~}pHf%>vJ^!jCZ3&pc z6?bx5+(xqe=_Al=J)Xdrz;S2FZcHqe!7vg&W4BUMOh%pDi5zsH`m~-<9+4s1gBgG zKuNjd$ONXOdNE=VRc^9#H9k|P!f#wuQ?VegWAx_B&XDlVl~Qg8oO|bXrKmm$HFo(i zQ?GI0GW*^&1B2 zEC(@W#-qcAh-b@!hltZkN9}o7A5X5%)A@$52^Y6VyU4aVMxJ<@$}b`wboR%<1Z03xTaL zFP~q>114X-a9R75zbMH=CP_2N*bWZ!g>}DVWtuKx;B3qb)+8oL_4{myFP40$*AZre z3hznEzd3DHojTG1t+E)^P8K?d!|0sw>iG6_OG;R)t%~2kQ+jx9wm)GU)W?5bWYN^Pf!Ekip{3^~t!FXyIBL5Ov z*|AXVVOi@1XTQ4lBtD#9_V9^)$!foc$G7of&2b@+@=C5~s{1FkD&or@FV*BD#eX~?rF12X`pNfYoSn=?`J64I;W)g& zU0Ii}gZAE594-HKQW{|Mt%~ET?(z5=Ee1f;`A+1X5&UxM^Rmk4*v+@D@F&bAC4g-Oj-rNR)-PZad^-R* zHRv`;?D~w!rj&q_|9ZonVU`S|P?|4~;e%o~iNo+;AC#fLyprFnIu`x z@ny?;d06rb_cf=Dg%xShjBe61&| zlgUq$azOp2j(%_r(C}-tfye;4m>r39>LY&87qi8VIIc3olIlSag+^yqzTe%3!GUIY zzST749-me3ON5QZksDc2Bu5U{uF*4-pVfrfZE;xBp)TesPi)tyBQD=-pk*CAUiBI% zo%)pT=t@K#YgAbj4~XmsMTpHCKPB?xJ6aS}*Zm4~PpPsirg$|t&OQ+E>Sgm%KP9qw z(j|RmCoi#K{OtizM)Zt*^fjiv4#NOW-U1?lUd&!!Ahz_}g-;#isQd*WN+Sx_3Or#==J# zLjWUqH8x&m6I4@zD=wA(f-At}GqH1U&FkB`S z(#g@jQe#0zcZix5K@t85YPzQQ17PJ9gi3LKQ{uO9MEYnOM|d+_P#ra_NREJ{T|?vP>x2%6VEaEN!TJF$%RD#*2UCM< zlvh5ThRdOf0i-L*lG$2U;MBmQ1`nM-E3XB+3YN>;6Kvv;o` zKY9gk?ywzT0gaaDD}j{ztL&^-=bVc?u{SX`KYrw{TCu`umxx$N&W+l73+1Bk$=UuE zM#R(qVa$7x-i~+k)<)jLETRJ}H$a9}QwQ%0<_O^DPw=rMA(rasz1PZ=^FAf;_t@DE z?;+rCO?b9BT1E$m#?c|0Jgp?~nfQ z+^JcAMII@{(e8bR4{#pI-6_8MsNqJP^`SR#l6Dgz@tpo39E8t*F(WKn zgcVj~Dfbh7;e_Db#Ss1pVF zeDo-C{j0-(7s70ynf3QX2eY(vYSNLr7)zBcN%PG~PXv4X6*zD-oDka(XpCepl79^6 zMs==?rh6Kdc&0*Ij_d=+pp5dl$kGoqjFvv}^#;&CW1Se2+JlWl%;(os2S~e}3h?}8 zS^YHh!RFYsthB$oo++c(X>H}ybV1hjo(2>;2ids?U1;ck@(US1x2E|+x987y>I|@e zd~rE(=DZJD26kI5V$ovW1ETP|HG`kFu&nBvIN0csESu#0tl8*=9@c$*anrSW`;Et} z<>!hxU1gKcP`9Iih5N}jZVUH=jOdyFl=~rcE1kBP!T*!?|1*4s)@AvTYTC$dFS?y3 zslje50djZOwCGMV?WuJ=bL}bkKj}Zoe`8EPSA^&y{zI>RA3bEow{HEAPP56+&`@w= z8;Z@YaMMXPHTF+EZo1#!tuCPICY&^o$u6+()6~+tT7hSA6S>)d& zEWmys%^4KYwV!a#O!*bG;*D`Sgx(t5EPAs E06HbGI{*Lx delta 41046 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 Nh>(p`_ (via the `PyCA/cryptography `_ package). The hashing functions ``SHA-256`` and ``SHA-512`` are provided by the standard Python `hashlib `_. The ``HKDF``, ``HMAC``, diff --git a/docs/manual/_sources/whatis.rst.txt b/docs/manual/_sources/whatis.rst.txt index 01cbb1b..5297d68 100644 --- a/docs/manual/_sources/whatis.rst.txt +++ b/docs/manual/_sources/whatis.rst.txt @@ -68,7 +68,7 @@ What does Reticulum Offer? * Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519 - * AES-128 or AES-256 in CBC mode with PKCS7 padding + * AES-256 in CBC mode with PKCS7 padding * HMAC using SHA256 for authentication diff --git a/docs/manual/examples.html b/docs/manual/examples.html index 86cac2d..fd1135b 100644 --- a/docs/manual/examples.html +++ b/docs/manual/examples.html @@ -1610,8 +1610,8 @@ the link has been established.