git: d4bd29fc009f - main - net-p2p/reticulum: Self-configuring, encrypted and resilient mesh networking stack

From: Carlo Strub <cs_at_FreeBSD.org>
Date: Sat, 25 Feb 2023 14:26:39 UTC
The branch main has been updated by cs:

URL: https://cgit.FreeBSD.org/ports/commit/?id=d4bd29fc009f1b7e72802e183bf8e6208fdd41aa

commit d4bd29fc009f1b7e72802e183bf8e6208fdd41aa
Author:     Carlo Strub <cs@FreeBSD.org>
AuthorDate: 2023-02-25 14:24:18 +0000
Commit:     Carlo Strub <cs@FreeBSD.org>
CommitDate: 2023-02-25 14:24:18 +0000

    net-p2p/reticulum: Self-configuring, encrypted and resilient mesh networking stack
---
 GIDs                                               |   2 +-
 UIDs                                               |   2 +-
 net-p2p/Makefile                                   |   1 +
 net-p2p/reticulum/Makefile                         |  31 ++
 net-p2p/reticulum/distinfo                         |   3 +
 net-p2p/reticulum/files/config.sample              | 342 +++++++++++++++++++++
 net-p2p/reticulum/files/patch-RNS_Reticulum.py     | 105 +++++++
 .../reticulum/files/patch-RNS_Utilities_rnsd.py    |  12 +
 net-p2p/reticulum/files/reticulum.in               |  39 +++
 net-p2p/reticulum/pkg-descr                        |   4 +
 net-p2p/reticulum/pkg-plist                        | 239 ++++++++++++++
 11 files changed, 778 insertions(+), 2 deletions(-)

diff --git a/GIDs b/GIDs
index 4b5cb168fbc5..c6882f3386e8 100644
--- a/GIDs
+++ b/GIDs
@@ -267,7 +267,7 @@ hedgedoc:*:317:
 # free: 324
 dkfilter:*:325:
 smfs:*:326:
-# free: 327
+_reticulum:*:327:
 # free: 328
 # free: 329
 orthanc:*:330:
diff --git a/UIDs b/UIDs
index c2ecbb8c766b..7326744a45a4 100644
--- a/UIDs
+++ b/UIDs
@@ -272,7 +272,7 @@ icingadirector:*:318:183::0:0:icingadirector user:/nonexistent:/usr/sbin/nologin
 # free: 324
 dkfilter:*:325:325::0:0:DK Filter Owner:/nonexistent:/usr/sbin/nologin
 smfs:*:326:326::0:0:SMFSAV Owner:/nonexistent:/usr/sbin/nologin
-# free: 327
+_reticulum:*:327:327::0:0:Reticulum Daemon:/nonexistent:/usr/sbin/nologin
 # free: 328
 # free: 329
 orthanc:*:330:330::0:0:Orthanc Daemon:/nonexistent:/usr/sbin/nologin
diff --git a/net-p2p/Makefile b/net-p2p/Makefile
index a41e3fccd086..ae05f1de3307 100644
--- a/net-p2p/Makefile
+++ b/net-p2p/Makefile
@@ -86,6 +86,7 @@
     SUBDIR += qtum
     SUBDIR += radarr
     SUBDIR += readarr
+    SUBDIR += reticulum
     SUBDIR += retroshare
     SUBDIR += rslsync
     SUBDIR += rtorrent
diff --git a/net-p2p/reticulum/Makefile b/net-p2p/reticulum/Makefile
new file mode 100644
index 000000000000..04db957b30f5
--- /dev/null
+++ b/net-p2p/reticulum/Makefile
@@ -0,0 +1,31 @@
+PORTNAME=	reticulum
+DISTVERSION=	0.4.9
+CATEGORIES=	net-p2p
+MASTER_SITES=	PYPI
+DISTNAME=	rns-${DISTVERSION}
+
+MAINTAINER=	cs@FreeBSD.org
+COMMENT=	Self-configuring, encrypted and resilient mesh networking stack
+WWW=		https://reticulum.network/
+
+LICENSE=	MIT
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}netifaces>=0:net/py-netifaces@${PY_FLAVOR}
+
+USES=		python:3.4+
+USE_PYTHON=	distutils
+USE_RC_SUBR=	reticulum
+GROUPS=		_reticulum
+USERS=		_reticulum
+SUB_LIST=	USERS="${USERS}" \
+		GROUPS="${GROUPS}" \
+		PYTHON=${PYTHON_CMD}
+PLIST_SUB=	USERS="${USERS}" GROUPS="${GROUPS}"
+
+NO_ARCH=	yes
+
+post-install:
+	@${MKDIR} ${STAGEDIR}${ETCDIR} ${STAGEDIR}/var/db/reticulum ${STAGEDIR}/var/run/reticulum ${STAGEDIR}/var/log/reticulum
+	${INSTALL_DATA} ${PATCHDIR}/config.sample ${STAGEDIR}${ETCDIR}/config.sample
+
+.include <bsd.port.mk>
diff --git a/net-p2p/reticulum/distinfo b/net-p2p/reticulum/distinfo
new file mode 100644
index 000000000000..096cee875af1
--- /dev/null
+++ b/net-p2p/reticulum/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1677070961
+SHA256 (rns-0.4.9.tar.gz) = ba575410360912e1af47e116a2ecc3b928c8bf7882961f4170876389ec849f38
+SIZE (rns-0.4.9.tar.gz) = 276828
diff --git a/net-p2p/reticulum/files/config.sample b/net-p2p/reticulum/files/config.sample
new file mode 100644
index 000000000000..003c06bd5872
--- /dev/null
+++ b/net-p2p/reticulum/files/config.sample
@@ -0,0 +1,342 @@
+# This is an example Reticulum config file.
+# You should probably edit it to include any additional,
+# interfaces and settings you might need.
+
+[reticulum]
+
+# Define the DB directory
+dbdir = "/var/db/reticulum"
+
+# If you enable Transport, your system will route traffic
+# for other peers, pass announces and serve path requests.
+# This should be done for systems that are suited to act
+# as transport nodes, ie. if they are stationary and
+# always-on. This directive is optional and can be removed
+# for brevity.
+
+enable_transport = False
+
+
+# By default, the first program to launch the Reticulum
+# Network Stack will create a shared instance, that other
+# programs can communicate with. Only the shared instance
+# opens all the configured interfaces directly, and other
+# local programs communicate with the shared instance over
+# a local socket. This is completely transparent to the
+# user, and should generally be turned on. This directive
+# is optional and can be removed for brevity.
+
+share_instance = Yes
+
+
+# If you want to run multiple *different* shared instances
+# on the same system, you will need to specify different
+# shared instance ports for each. The defaults are given
+# below, and again, these options can be left out if you
+# don't need them.
+
+shared_instance_port = 37428
+instance_control_port = 37429
+
+# You can configure Reticulum to panic and forcibly close
+# if an unrecoverable interface error occurs, such as the
+# hardware device for an interface disappearing. This is
+# an optional directive, and can be left out for brevity.
+# This behaviour is disabled by default.
+
+panic_on_interface_error = No
+
+
+[logging]
+# Valid log levels are 0 through 7:
+#   0: Log only critical information
+#   1: Log errors and lower log levels
+#   2: Log warnings and lower log levels
+#   3: Log notices and lower log levels
+#   4: Log info and lower (this is the default)
+#   5: Verbose logging
+#   6: Debug logging
+#   7: Extreme logging
+
+loglevel = 4
+
+
+# The interfaces section defines the physical and virtual
+# interfaces Reticulum will use to communicate on. This
+# section will contain examples for a variety of interface
+# types. You can modify these or use them as a basis for
+# your own config, or simply remove the unused ones.
+
+[interfaces]
+
+  # This interface enables communication with other
+  # link-local Reticulum nodes over UDP. It does not
+  # need any functional IP infrastructure like routers
+  # or DHCP servers, but will require that at least link-
+  # local IPv6 is enabled in your operating system, which
+  # should be enabled by default in almost any OS. See
+  # the Reticulum Manual for more configuration options.
+
+  [[Default Interface]]
+    type = AutoInterface
+    enabled = yes
+
+
+  # The following example enables communication with other
+  # local Reticulum peers using UDP broadcasts.
+  
+  [[UDP Interface]]
+    type = UDPInterface
+    enabled = no
+    listen_ip = 0.0.0.0
+    listen_port = 4242
+    forward_ip = 255.255.255.255
+    forward_port = 4242
+
+    # The above configuration will allow communication
+    # within the local broadcast domains of all local
+    # IP interfaces.
+
+    # Instead of specifying listen_ip, listen_port,
+    # forward_ip and forward_port, you can also bind
+    # to a specific network device like below.
+
+    # device = eth0
+    # port = 4242
+
+    # Assuming the eth0 device has the address
+    # 10.55.0.72/24, the above configuration would
+    # be equivalent to the following manual setup.
+    # Note that we are both listening and forwarding to
+    # the broadcast address of the network segments.
+
+    # listen_ip = 10.55.0.255
+    # listen_port = 4242
+    # forward_ip = 10.55.0.255
+    # forward_port = 4242
+
+    # You can of course also communicate only with
+    # a single IP address
+
+    # listen_ip = 10.55.0.15
+    # listen_port = 4242
+    # forward_ip = 10.55.0.16
+    # forward_port = 4242
+
+
+  # This example demonstrates a TCP server interface.
+  # It will listen for incoming connections on the
+  # specified IP address and port number.
+  
+  [[TCP Server Interface]]
+    type = TCPServerInterface
+    enabled = no
+
+    # This configuration will listen on all IP
+    # interfaces on port 4242
+    
+    listen_ip = 0.0.0.0
+    listen_port = 4242
+
+    # Alternatively you can bind to a specific IP
+    
+    # listen_ip = 10.0.0.88
+    # listen_port = 4242
+
+    # Or a specific network device
+    
+    # device = eth0
+    # port = 4242
+
+
+  # To connect to a TCP server interface, you would
+  # naturally use the TCP client interface. Here's
+  # an example. The target_host can either be an IP
+  # address or a hostname
+
+  [[TCP Client Interface]]
+    type = TCPClientInterface
+    enabled = no
+    target_host = 127.0.0.1
+    target_port = 4242
+
+
+  # This example shows how to make your Reticulum
+  # instance available over I2P, and connect to
+  # another I2P peer. Please be aware that you
+  # must have an I2P router running on your system
+  # with the SAMv3 API enabled for this to work.
+
+  [[I2P]]
+    type = I2PInterface
+    enabled = no
+    connectable = yes
+    peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p
+
+
+  # Here's an example of how to add a LoRa interface
+  # using the RNode LoRa transceiver.
+
+  [[RNode LoRa Interface]]
+    type = RNodeInterface
+
+    # Enable interface if you want use it!
+    enabled = no
+
+    # Serial port for the device
+    port = /dev/ttyUSB0
+
+    # Set frequency to 867.2 MHz
+    frequency = 867200000
+
+    # Set LoRa bandwidth to 125 KHz
+    bandwidth = 125000
+
+    # Set TX power to 7 dBm (5 mW)
+    txpower = 7
+
+    # Select spreading factor 8. Valid 
+    # range is 7 through 12, with 7
+    # being the fastest and 12 having
+    # the longest range.
+    spreadingfactor = 8
+
+    # Select coding rate 5. Valid range
+    # is 5 throough 8, with 5 being the
+    # fastest, and 8 the longest range.
+    codingrate = 5
+
+    # You can configure the RNode to send
+    # out identification on the channel with
+    # a set interval by configuring the
+    # following two parameters. The trans-
+    # ceiver will only ID if the set
+    # interval has elapsed since it's last
+    # actual transmission. The interval is
+    # configured in seconds.
+    # This option is commented out and not
+    # used by default.
+    # id_callsign = MYCALL-0
+    # id_interval = 600
+
+    # For certain homebrew RNode interfaces
+    # with low amounts of RAM, using packet
+    # flow control can be useful. By default
+    # it is disabled.
+    flow_control = False
+    
+    
+  # An example KISS modem interface. Useful for running
+  # Reticulum over packet radio hardware.
+
+  [[Packet Radio KISS Interface]]
+    type = KISSInterface
+
+    # Enable interface if you want use it!
+    enabled = no
+
+    # Serial port for the device
+    port = /dev/ttyUSB1
+
+    # Set the serial baud-rate and other
+    # configuration parameters.
+    speed = 115200    
+    databits = 8
+    parity = none
+    stopbits = 1
+
+    # Set the modem preamble. A 150ms
+    # preamble should be a reasonable
+    # default, but may need to be
+    # increased for radios with slow-
+    # opening squelch and long TX/RX
+    # turnaround
+    preamble = 150
+
+    # Set the modem TX tail. In most
+    # cases this should be kept as low
+    # as possible to not waste airtime.
+    txtail = 10
+
+    # Configure CDMA parameters. These
+    # settings are reasonable defaults.
+    persistence = 200
+    slottime = 20
+
+    # You can configure the interface to send
+    # out identification on the channel with
+    # a set interval by configuring the
+    # following two parameters. The KISS
+    # interface will only ID if the set
+    # interval has elapsed since it's last
+    # actual transmission. The interval is
+    # configured in seconds.
+    # This option is commented out and not
+    # used by default.
+    # id_callsign = MYCALL-0
+    # id_interval = 600
+
+    # Whether to use KISS flow-control.
+    # This is useful for modems that have
+    # a small internal packet buffer, but
+    # support packet flow control instead.
+    flow_control = false
+
+
+  # If you're using Reticulum on amateur radio spectrum,
+  # you might want to use the AX.25 KISS interface. This
+  # way, Reticulum will automatically encapsulate it's
+  # traffic in AX.25 and also identify your stations
+  # transmissions with your callsign and SSID.
+  # 
+  # Only do this if you really need to! Reticulum doesn't
+  # need the AX.25 layer for anything, and it incurs extra
+  # overhead on every packet to encapsulate in AX.25.
+  #
+  # A more efficient way is to use the plain KISS interface
+  # with the beaconing functionality described above.
+
+  [[Packet Radio AX.25 KISS Interface]]
+    type = AX25KISSInterface
+
+    # Set the station callsign and SSID
+    callsign = NO1CLL
+    ssid = 0
+
+    # Enable interface if you want use it!
+    enabled = no
+
+    # Serial port for the device
+    port = /dev/ttyUSB2
+
+    # Set the serial baud-rate and other
+    # configuration parameters.
+    speed = 115200    
+    databits = 8
+    parity = none
+    stopbits = 1
+
+    # Whether to use KISS flow-control.
+    # This is useful for modems with a
+    # small internal packet buffer.
+    flow_control = false
+
+    # Set the modem preamble. A 150ms
+    # preamble should be a reasonable
+    # default, but may need to be
+    # increased for radios with slow-
+    # opening squelch and long TX/RX
+    # turnaround
+    preamble = 150
+
+    # Set the modem TX tail. In most
+    # cases this should be kept as low
+    # as possible to not waste airtime.
+    txtail = 10
+
+    # Configure CDMA parameters. These
+    # settings are reasonable defaults.
+    persistence = 200
+    slottime = 20
+
+
diff --git a/net-p2p/reticulum/files/patch-RNS_Reticulum.py b/net-p2p/reticulum/files/patch-RNS_Reticulum.py
new file mode 100644
index 000000000000..6ddf70beb844
--- /dev/null
+++ b/net-p2p/reticulum/files/patch-RNS_Reticulum.py
@@ -0,0 +1,105 @@
+--- RNS/Reticulum.py.orig	2022-11-03 16:31:20 UTC
++++ RNS/Reticulum.py
+@@ -141,6 +141,7 @@ class Reticulum:
+     # named ".reticulum" inside the current users home directory
+     userdir          = os.path.expanduser("~")
+     configdir        = None
++    dbdir            = ""
+     configpath       = ""
+     storagepath      = ""
+     cachepath        = ""
+@@ -181,7 +182,9 @@ class Reticulum:
+         if configdir != None:
+             Reticulum.configdir = configdir
+         else:
+-            if os.path.isdir("/etc/reticulum") and os.path.isfile("/etc/reticulum/config"):
++            if os.path.isdir("/usr/local/etc/reticulum") and os.path.isfile("/usr/local/etc/reticulum/config"):
++                Reticulum.configdir = "/usr/local/etc/reticulum"
++            elif os.path.isdir("/etc/reticulum") and os.path.isfile("/etc/reticulum/config"):
+                 Reticulum.configdir = "/etc/reticulum"
+             elif os.path.isdir(Reticulum.userdir+"/.config/reticulum") and os.path.isfile(Reticulum.userdir+"/.config/reticulum/config"):
+                 Reticulum.configdir = Reticulum.userdir+"/.config/reticulum"
+@@ -193,10 +196,7 @@ class Reticulum:
+             RNS.logfile = Reticulum.configdir+"/logfile"
+         
+         Reticulum.configpath    = Reticulum.configdir+"/config"
+-        Reticulum.storagepath   = Reticulum.configdir+"/storage"
+-        Reticulum.cachepath     = Reticulum.configdir+"/storage/cache"
+-        Reticulum.resourcepath  = Reticulum.configdir+"/storage/resources"
+-        Reticulum.identitypath  = Reticulum.configdir+"/storage/identities"
++        Reticulum.dbdir         = Reticulum.configdir
+ 
+         Reticulum.__transport_enabled = False
+         Reticulum.__use_implicit_proof = True
+@@ -226,18 +226,6 @@ class Reticulum:
+         self.last_data_persist = time.time()
+         self.last_cache_clean = 0
+ 
+-        if not os.path.isdir(Reticulum.storagepath):
+-            os.makedirs(Reticulum.storagepath)
+-
+-        if not os.path.isdir(Reticulum.cachepath):
+-            os.makedirs(Reticulum.cachepath)
+-
+-        if not os.path.isdir(Reticulum.resourcepath):
+-            os.makedirs(Reticulum.resourcepath)
+-
+-        if not os.path.isdir(Reticulum.identitypath):
+-            os.makedirs(Reticulum.identitypath)
+-
+         if os.path.isfile(self.configpath):
+             try:
+                 self.config = ConfigObj(self.configpath)
+@@ -253,7 +241,7 @@ class Reticulum:
+ 
+         self.__apply_config()
+         RNS.log("Configuration loaded from "+self.configpath, RNS.LOG_VERBOSE)
+-        
++
+         RNS.Identity.load_known_destinations()
+ 
+         RNS.Transport.start(self)
+@@ -345,6 +333,9 @@ class Reticulum:
+         if "reticulum" in self.config:
+             for option in self.config["reticulum"]:
+                 value = self.config["reticulum"][option]
++                if option == "dbdir":
++                    value = self.config["reticulum"][option]
++                    Reticulum.dbdir = value
+                 if option == "share_instance":
+                     value = self.config["reticulum"].as_bool(option)
+                     self.share_instance = value
+@@ -369,6 +360,23 @@ class Reticulum:
+                     if v == False:
+                         Reticulum.__use_implicit_proof = False
+ 
++        Reticulum.storagepath   = Reticulum.dbdir+"/storage"
++        Reticulum.cachepath     = Reticulum.dbdir+"/storage/cache"
++        Reticulum.resourcepath  = Reticulum.dbdir+"/storage/resources"
++        Reticulum.identitypath  = Reticulum.dbdir+"/storage/identities"
++        
++        if not os.path.isdir(Reticulum.storagepath):
++            os.makedirs(Reticulum.storagepath)
++
++        if not os.path.isdir(Reticulum.cachepath):
++            os.makedirs(Reticulum.cachepath)
++
++        if not os.path.isdir(Reticulum.resourcepath):
++            os.makedirs(Reticulum.resourcepath)
++
++        if not os.path.isdir(Reticulum.identitypath):
++            os.makedirs(Reticulum.identitypath)
++
+         self.__start_local_interface()
+ 
+         if self.is_shared_instance or self.is_standalone_instance:
+@@ -1275,6 +1283,9 @@ __default_rns_config__ = '''# This is the default Reti
+ 
+ 
+ [reticulum]
++
++# Define the DB directory
++dbdir = "/var/db/reticulum"
+ 
+ # If you enable Transport, your system will route traffic
+ # for other peers, pass announces and serve path requests.
diff --git a/net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py b/net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py
new file mode 100644
index 000000000000..33f61985b665
--- /dev/null
+++ b/net-p2p/reticulum/files/patch-RNS_Utilities_rnsd.py
@@ -0,0 +1,12 @@
+--- RNS/Utilities/rnsd.py.orig	2023-02-23 17:25:44 UTC
++++ RNS/Utilities/rnsd.py
+@@ -80,6 +80,9 @@ __example_rns_config__ = '''# This is an example Retic
+ 
+ [reticulum]
+ 
++# Define the DB directory
++dbdir = "/var/db/reticulum"
++
+ # If you enable Transport, your system will route traffic
+ # for other peers, pass announces and serve path requests.
+ # This should be done for systems that are suited to act
diff --git a/net-p2p/reticulum/files/reticulum.in b/net-p2p/reticulum/files/reticulum.in
new file mode 100644
index 000000000000..482aa6bd9913
--- /dev/null
+++ b/net-p2p/reticulum/files/reticulum.in
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# PROVIDE: reticulum
+# REQUIRE: DAEMON FILESYSTEMS
+# BEFORE: LOGIN
+#
+# Add these lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# reticulum_enable (bool):	Set to NO by default.
+#			Set it to YES to enable reticulum.
+# reticulum_config (path):	Set to %%PREFIX%%/etc/reticulum/
+#			by default.
+# reticulum_user (str):      Reticulum daemon user. Default: %%USERS%%
+# reticulum_group (str):     Reticulum daemon group. Default: %%GROUPS%%
+
+. /etc/rc.subr
+
+name="reticulum"
+rcvar="reticulum_enable"
+
+load_rc_config $name
+
+: ${reticulum_enable:="NO"}
+: ${reticulum_config="%%PREFIX%%/etc/reticulum/"}
+: ${reticulum_user="%%USERS%%"}
+: ${reticulum_group="%%GROUPS%%"}
+
+pidfiledir="/var/run/${name}"
+pidfile="${pidfiledir}/${name}.pid"
+logfiledir="/var/log/${name}"
+logfile="${logfiledir}/${name}.log"
+command="/usr/sbin/daemon"
+command_interpreter=%%PYTHON%%
+procname="%%PREFIX%%/bin/rnsd"
+
+command_args="-f -o $logfile -p $pidfile $procname --config $reticulum_config"
+
+run_rc_command "$1"
diff --git a/net-p2p/reticulum/pkg-descr b/net-p2p/reticulum/pkg-descr
new file mode 100644
index 000000000000..a7b2456983f3
--- /dev/null
+++ b/net-p2p/reticulum/pkg-descr
@@ -0,0 +1,4 @@
+Reticulum is a cryptography-based networking stack for building local and
+wide-area networks with readily available hardware. Reticulum can continue to
+operate even in adverse conditions with very high latency and extremely low
+bandwidth.
diff --git a/net-p2p/reticulum/pkg-plist b/net-p2p/reticulum/pkg-plist
new file mode 100644
index 000000000000..5909c46c908e
--- /dev/null
+++ b/net-p2p/reticulum/pkg-plist
@@ -0,0 +1,239 @@
+bin/rncp
+bin/rnid
+bin/rnodeconf
+bin/rnpath
+bin/rnprobe
+bin/rnsd
+bin/rnstatus
+bin/rnx
+@sample %%ETCDIR%%/config.sample
+@owner %%USERS%%
+@group %%GROUPS%%
+@dir /var/db/reticulum
+@dir /var/log/reticulum
+@dir /var/run/reticulum
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/AES.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Ed25519.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Fernet.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/HKDF.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/HMAC.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Hashes.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/PKCS7.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Provider.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/Proxies.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/SHA256.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/SHA512.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/X25519.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/AES%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/AES%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Ed25519%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Ed25519%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Fernet%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Fernet%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HKDF%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HKDF%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HMAC%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/HMAC%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Hashes%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Hashes%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/PKCS7%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/PKCS7%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Provider%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Provider%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Proxies%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/Proxies%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA256%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA256%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA512%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/SHA512%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/X25519%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/X25519%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/aes%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/aes%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/aes.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/aes/utils.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/_ed25519%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/_ed25519%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/basic%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/basic%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/ed25519_oop%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/ed25519_oop%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/eddsa%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/__pycache__/eddsa%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/_ed25519.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/basic.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/ed25519_oop.py
+%%PYTHON_SITELIBDIR%%/RNS/Cryptography/pure25519/eddsa.py
+%%PYTHON_SITELIBDIR%%/RNS/Destination.py
+%%PYTHON_SITELIBDIR%%/RNS/Identity.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/AX25KISSInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/KISSInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/RNodeInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/SerialInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Android/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/AutoInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/I2PInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/Interface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/KISSInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/LocalInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/PipeInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/RNodeInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/SerialInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/TCPInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/UDPInterface.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AX25KISSInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AX25KISSInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AutoInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/AutoInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/I2PInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/I2PInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/Interface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/Interface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/KISSInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/LocalInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/LocalInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/PipeInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/PipeInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/RNodeInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/SerialInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/TCPInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/TCPInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/UDPInterface%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/UDPInterface%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Interfaces/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Link.py
+%%PYTHON_SITELIBDIR%%/RNS/Packet.py
+%%PYTHON_SITELIBDIR%%/RNS/Resource.py
+%%PYTHON_SITELIBDIR%%/RNS/Reticulum.py
+%%PYTHON_SITELIBDIR%%/RNS/Transport.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rncp%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rncp%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnid%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnid%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnodeconf%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnodeconf%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnpath%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnpath%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnprobe%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnprobe%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnsd%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnsd%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnstatus%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnstatus%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnx%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/__pycache__/rnx%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rncp.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnid.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnodeconf.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnpath.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnprobe.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnsd.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnstatus.py
+%%PYTHON_SITELIBDIR%%/RNS/Utilities/rnx.py
+%%PYTHON_SITELIBDIR%%/RNS/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Destination%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Destination%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Identity%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Identity%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Link%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Link%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Packet%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Packet%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Resource%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Resource%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Reticulum%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Reticulum%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Transport%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/Transport%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/_version%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/__pycache__/_version%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/_version.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/configobj%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/configobj%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/platformutils%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/platformutils%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/six%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/six%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/umsgpack%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/__pycache__/umsgpack%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/configobj.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__init__.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__version__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/__version__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/aiosam%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/aiosam%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/exceptions%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/exceptions%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/log%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/log%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/sam%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/sam%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/tunnel%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/tunnel%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__pycache__/utils%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/__version__.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/aiosam.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/exceptions.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/log.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/sam.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/tunnel.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/i2plib/utils.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/platformutils.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/six.py
+%%PYTHON_SITELIBDIR%%/RNS/vendor/umsgpack.py
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/PKG-INFO
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/SOURCES.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/dependency_links.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/entry_points.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/requires.txt
+%%PYTHON_SITELIBDIR%%/rns-0.4.9-py%%PYTHON_VER%%.egg-info/top_level.txt
+%%PYTHON_SITELIBDIR%%/tests/__init__.py
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/__init__%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/all%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/all%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/hashes%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/hashes%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/identity%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/identity%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/link%%PYTHON_EXT_SUFFIX%%.opt-1.pyc
+%%PYTHON_SITELIBDIR%%/tests/__pycache__/link%%PYTHON_EXT_SUFFIX%%.pyc
+%%PYTHON_SITELIBDIR%%/tests/all.py
+%%PYTHON_SITELIBDIR%%/tests/hashes.py
+%%PYTHON_SITELIBDIR%%/tests/identity.py
+%%PYTHON_SITELIBDIR%%/tests/link.py